diff --git a/.github/workflows/Pip.yml b/.github/workflows/Pip.yml new file mode 100644 index 0000000..dc14331 --- /dev/null +++ b/.github/workflows/Pip.yml @@ -0,0 +1,35 @@ +name: Pip + +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + release: + types: + - published + +jobs: + Testing_Local: + runs-on: ${{ matrix.platform }} + strategy: + fail-fast: false + matrix: + platform: [windows-latest, macos-latest, ubuntu-latest] + python-version: ["3.8", "3.11"] + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies and package + run: | + python -m pip install pytest + pip install --verbose . + + - name: Run tests + run: python -m pytest \ No newline at end of file diff --git a/.github/workflows/Wheels.yml b/.github/workflows/Wheels.yml new file mode 100644 index 0000000..a5ec8d7 --- /dev/null +++ b/.github/workflows/Wheels.yml @@ -0,0 +1,66 @@ +name: Wheels + +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + release: + types: + - published + +jobs: + Build_Wheels: + name: Wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - uses: pypa/cibuildwheel@v2.13.0 + env: + # Cross-compile on macOS + CIBW_ARCHS_MACOS: x86_64 arm64 + + # Temporary: use pre-release Python 3.12 for stable ABI builds + CIBW_PRERELEASE_PYTHONS: True + + - name: Verify clean directory + run: git diff --exit-code + shell: bash + + - name: Upload wheels + uses: actions/upload-artifact@v3 + with: + path: wheelhouse/*.whl + + upload_all: + name: Upload if release + needs: [Build_Wheels] + runs-on: ubuntu-latest + if: github.event_name == 'release' && github.event.action == 'published' + + steps: + - uses: actions/setup-python@v4 + + - name: Download Wheels artifact + uses: actions/download-artifact@v3 + with: + name: build_wheels + path: wheelhouse + + # - uses: pypa/gh-action-pypi-publish@release/v1 + # with: + # password: ${{ secrets.TEST_PYPI_API_TOKEN }} + # repository-url: https://test.pypi.org/legacy/ + + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml deleted file mode 100644 index d188fce..0000000 --- a/.github/workflows/pypi.yml +++ /dev/null @@ -1,100 +0,0 @@ -name: Build, Test & Publish - -on: - workflow_dispatch: - push: - branches: - - master - -jobs: - - # Job 1: Build & Test with Pip - testing: - runs-on: ${{ matrix.platform }} - strategy: - fail-fast: false - matrix: - platform: [windows-latest, macos-latest, ubuntu-latest] - python-version: ["3.8", "3.11"] - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install dependencies and package - run: | - python -m pip install pytest - pip install --verbose . - - - name: Run tests - run: python -m pytest - - build_sdist: - name: Build SDist - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Build SDist - run: pipx run build --sdist - - - name: Check metadata - run: pipx run twine check dist/* - - - uses: actions/upload-artifact@v3 - with: - path: dist/*.tar.gz - - build_wheels: - name: Wheels on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - uses: pypa/cibuildwheel@v2.13.0 - env: - # Cross-compile on macOS - CIBW_ARCHS_MACOS: x86_64 arm64 - - # Temporary: use pre-release Python 3.12 for stable ABI builds - CIBW_PRERELEASE_PYTHONS: True - - - name: Verify clean directory - run: git diff --exit-code - shell: bash - - - name: Upload wheels - uses: actions/upload-artifact@v3 - with: - path: wheelhouse/*.whl - - upload_all: - name: Upload if release - needs: [build_wheels, build_sdist] - runs-on: ubuntu-latest - # if: github.event_name == 'release' && github.event.action == 'published' - - steps: - - uses: actions/setup-python@v4 - - - uses: actions/download-artifact@v3 - with: - name: artifact - path: dist - - - uses: pypa/gh-action-pypi-publish@release/v1 - with: - password: ${{ secrets.TEST_PYPI_API_TOKEN }} - repository-url: https://test.pypi.org/legacy/ \ No newline at end of file diff --git a/README.md b/README.md index 9a1a11c..7ddae8a 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,17 @@ dztimer --- - - - + A beautiful timer from ufomap by [Daniel Duberg](https://www.kth.se/profile/dduberg), nanobind by [Qingwen Zhang](https://kin-zhang.github.io/). -Running on macOS, Windows and Linux. +Running on macOS, Windows and Linux, with Python Version >= 3.7. TestDemo: ```bash pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ dztimer +python3 -c 'import dztimer' ``` Quick Demo: @@ -38,6 +37,14 @@ timer.print(random_colors=True, bold=True) +### Build from source + +```bash +git clone https://github.com/KTH-RPL/dztimer +cd dztimer +pip install . +python3 -c 'import dztimer' +``` ### Issue I met when write this package diff --git a/pyproject.toml b/pyproject.toml index 446f606..0455f46 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,10 +4,10 @@ build-backend = "scikit_build_core.build" [project] name = "dztimer" -version = "0.0.5" +version = "1.0.0" description = "A beautiful timer from ufomap by Daniel Duberg, nanobind by Qingwen Zhang" readme = "README.md" -requires-python = ">=3.8" +requires-python = ">=3.7" authors = [ { name = "Qingwen Zhang", email = "qzhangcb@connect.ust.hk" }, { name = "Daniel Duberg", email = "dduberg@kth.se" }, diff --git a/src/dztimer_ext.cpp b/src/dztimer_ext.cpp index c22fb65..54d42d6 100644 --- a/src/dztimer_ext.cpp +++ b/src/dztimer_ext.cpp @@ -45,7 +45,8 @@ NB_MODULE(dztimer_ext, m) { nanobind::class_(m, "Timer") .def("start", static_cast(&Timer::start)) - .def("stop", &Timer::stop); + .def("stop", &Timer::stop) + .def("lastSeconds", &Timer::lastSeconds); nanobind::class_(m, "Timing") .def(nanobind::init<>()) diff --git a/tests/test_basic.py b/tests/test_basic.py index cdf5089..259ce2b 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -13,6 +13,7 @@ def test_dztimer(): timer[1].start("Second Scan Cost") sleep(0.08 + i * 0.01) timer[1].stop() + print(f"The timing last record: {timer[1].lastSeconds():.2f} s") timer.print(random_colors=True, bold=True) if __name__ == "__main__":