diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index 927f4bf..0000000 --- a/.coveragerc +++ /dev/null @@ -1,10 +0,0 @@ -# .coveragerc to control coverage.py -[run] -branch = True -source = rowan - -[report] -ignore_errors = True - -[html] -directory = coverage_html_report diff --git a/.github/workflows/dependabot.yml b/.github/workflows/dependabot.yml new file mode 100644 index 0000000..b61d8ac --- /dev/null +++ b/.github/workflows/dependabot.yml @@ -0,0 +1,23 @@ +version: 2 +updates: +- package-ecosystem: "github-actions" + directory: "/" + target-branch: trunk + schedule: + interval: "monthly" + time: "07:00" + timezone: "EST5EDT" + pull-request-branch-name: + separator: "-" + open-pull-requests-limit: 2 + reviewers: + - joaander + groups: + actions-version: + applies-to: version-updates + patterns: + - '*' + actions-security: + applies-to: security-updates + patterns: + - '*' diff --git a/.github/workflows/environments/requirements-build.in b/.github/workflows/environments/requirements-build.in new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/.github/workflows/environments/requirements-build.in @@ -0,0 +1 @@ +build diff --git a/.github/workflows/requirements-build.txt b/.github/workflows/environments/requirements-build.txt similarity index 52% rename from .github/workflows/requirements-build.txt rename to .github/workflows/environments/requirements-build.txt index 2b16d8c..6671bfe 100644 --- a/.github/workflows/requirements-build.txt +++ b/.github/workflows/environments/requirements-build.txt @@ -1,8 +1,8 @@ # This file was autogenerated by uv via the following command: -# uv pip compile requirements-build.in -build==1.1.1 +# uv pip compile --python-version 3.13 --python-platform linux requirements-build.in +build==1.2.2.post1 # via -r requirements-build.in packaging==24.1 # via build -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build diff --git a/.github/workflows/environments/requirements-test-3.10.txt b/.github/workflows/environments/requirements-test-3.10.txt new file mode 100644 index 0000000..a1ac37b --- /dev/null +++ b/.github/workflows/environments/requirements-test-3.10.txt @@ -0,0 +1,20 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --python-version 3.10 --python-platform linux requirements-test.in +exceptiongroup==1.2.2 + # via pytest +iniconfig==2.0.0 + # via pytest +numpy==2.1.2 + # via + # -r requirements-test.in + # scipy +packaging==24.1 + # via pytest +pluggy==1.5.0 + # via pytest +pytest==8.3.3 + # via -r requirements-test.in +scipy==1.14.1 + # via -r requirements-test.in +tomli==2.0.2 + # via pytest diff --git a/.github/workflows/environments/requirements-test-3.11.txt b/.github/workflows/environments/requirements-test-3.11.txt new file mode 100644 index 0000000..53bcbca --- /dev/null +++ b/.github/workflows/environments/requirements-test-3.11.txt @@ -0,0 +1,16 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --python-version 3.11 --python-platform linux requirements-test.in +iniconfig==2.0.0 + # via pytest +numpy==2.1.2 + # via + # -r requirements-test.in + # scipy +packaging==24.1 + # via pytest +pluggy==1.5.0 + # via pytest +pytest==8.3.3 + # via -r requirements-test.in +scipy==1.14.1 + # via -r requirements-test.in diff --git a/.github/workflows/environments/requirements-test-3.12.txt b/.github/workflows/environments/requirements-test-3.12.txt new file mode 100644 index 0000000..8a6915e --- /dev/null +++ b/.github/workflows/environments/requirements-test-3.12.txt @@ -0,0 +1,16 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --python-version 3.12 --python-platform linux requirements-test.in +iniconfig==2.0.0 + # via pytest +numpy==2.1.2 + # via + # -r requirements-test.in + # scipy +packaging==24.1 + # via pytest +pluggy==1.5.0 + # via pytest +pytest==8.3.3 + # via -r requirements-test.in +scipy==1.14.1 + # via -r requirements-test.in diff --git a/.github/workflows/environments/requirements-test-3.13.txt b/.github/workflows/environments/requirements-test-3.13.txt new file mode 100644 index 0000000..5353306 --- /dev/null +++ b/.github/workflows/environments/requirements-test-3.13.txt @@ -0,0 +1,16 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --python-version 3.13 --python-platform linux requirements-test.in +iniconfig==2.0.0 + # via pytest +numpy==2.1.2 + # via + # -r requirements-test.in + # scipy +packaging==24.1 + # via pytest +pluggy==1.5.0 + # via pytest +pytest==8.3.3 + # via -r requirements-test.in +scipy==1.14.1 + # via -r requirements-test.in diff --git a/.github/workflows/environments/requirements-test-3.9.txt b/.github/workflows/environments/requirements-test-3.9.txt new file mode 100644 index 0000000..eefea97 --- /dev/null +++ b/.github/workflows/environments/requirements-test-3.9.txt @@ -0,0 +1,20 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --python-version 3.9 --python-platform linux requirements-test.in +exceptiongroup==1.2.2 + # via pytest +iniconfig==2.0.0 + # via pytest +numpy==2.0.2 + # via + # -r requirements-test.in + # scipy +packaging==24.1 + # via pytest +pluggy==1.5.0 + # via pytest +pytest==8.3.3 + # via -r requirements-test.in +scipy==1.13.1 + # via -r requirements-test.in +tomli==2.0.2 + # via pytest diff --git a/.github/workflows/environments/requirements-test.in b/.github/workflows/environments/requirements-test.in new file mode 100644 index 0000000..f651ca5 --- /dev/null +++ b/.github/workflows/environments/requirements-test.in @@ -0,0 +1,3 @@ +numpy +pytest +scipy diff --git a/.github/workflows/environments/update-lockfiles.sh b/.github/workflows/environments/update-lockfiles.sh new file mode 100755 index 0000000..cd6610c --- /dev/null +++ b/.github/workflows/environments/update-lockfiles.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# Execute this script to update all lock files to the latest versions of dependencies. + +rm requirements*.txt + +for python_version in 3.9 3.10 3.11 3.12 3.13 +do + uv pip compile --python-version ${python_version} --python-platform linux requirements-test.in > requirements-test-${python_version}.txt +done + +uv pip compile --python-version 3.13 --python-platform linux requirements-build.in > requirements-build.txt diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0a020e4..bcc0f06 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -27,10 +27,9 @@ jobs: with: python-version: 3.12 - name: Set up Python environment - uses: glotzerlab/workflows/setup-uv@5cfac9da9cb78e16ae97a9119b6fd13c1c2d6f5e # 0.1.0 + uses: glotzerlab/workflows/setup-uv@e130dd2814c7db5635babe4427dedcbd5aab76d4 # 0.5.0 with: - lockfile: ".github/workflows/requirements-build.txt" - + lockfile: ".github/workflows/environments/requirements-build.txt" - name: Build wheel run: python3 -m build --outdir dist/ . diff --git a/.github/workflows/requirements-build.in b/.github/workflows/requirements-build.in deleted file mode 100644 index f9a7807..0000000 --- a/.github/workflows/requirements-build.in +++ /dev/null @@ -1 +0,0 @@ -build == 1.1.1 diff --git a/.github/workflows/requirements-test.in b/.github/workflows/requirements-test.in deleted file mode 100644 index 2f70f1b..0000000 --- a/.github/workflows/requirements-test.in +++ /dev/null @@ -1,5 +0,0 @@ -coverage == 7.5.3 -numpy == 2.0.0 -pytest == 8.2.2 -pytest-cov == 5.0.0 -scipy == 1.13.1 diff --git a/.github/workflows/requirements-test.txt b/.github/workflows/requirements-test.txt deleted file mode 100644 index 57c8c24..0000000 --- a/.github/workflows/requirements-test.txt +++ /dev/null @@ -1,30 +0,0 @@ -# This file was autogenerated by uv via the following command: -# uv pip compile requirements-test.in --python-version 3.9 --python-platform linux --no-build -coverage==7.5.3 - # via - # -r requirements-test.in - # pytest-cov -exceptiongroup==1.2.1 - # via pytest -iniconfig==2.0.0 - # via pytest -numpy==2.0.0 - # via - # -r requirements-test.in - # scipy -packaging==24.1 - # via pytest -pluggy==1.5.0 - # via pytest -pytest==8.2.2 - # via - # -r requirements-test.in - # pytest-cov -pytest-cov==5.0.0 - # via -r requirements-test.in -scipy==1.13.1 - # via -r requirements-test.in -tomli==2.0.1 - # via - # coverage - # pytest diff --git a/.github/workflows/unit_test.yaml b/.github/workflows/unit_test.yaml index 7d71dea..64ba8ab 100644 --- a/.github/workflows/unit_test.yaml +++ b/.github/workflows/unit_test.yaml @@ -24,7 +24,7 @@ jobs: strategy: fail-fast: false matrix: - python: ["3.9", "3.10", "3.11", "3.12"] + python: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - name: Checkout @@ -34,9 +34,9 @@ jobs: with: python-version: ${{ matrix.python }} - name: Set up Python environment - uses: glotzerlab/workflows/setup-uv@5cfac9da9cb78e16ae97a9119b6fd13c1c2d6f5e # 0.1.0 + uses: glotzerlab/workflows/setup-uv@e130dd2814c7db5635babe4427dedcbd5aab76d4 # 0.5.0 with: - lockfile: ".github/workflows/requirements-test.txt" + lockfile: ".github/workflows/environments/requirements-test-${{matrix.python}}.txt" - name: Run tests run: python3 -m pytest -v diff --git a/.github/workflows/update-uv-lockfiles.yaml b/.github/workflows/update-uv-lockfiles.yaml new file mode 100644 index 0000000..b7bd056 --- /dev/null +++ b/.github/workflows/update-uv-lockfiles.yaml @@ -0,0 +1,14 @@ +name: Update uv lockfiles + +on: + schedule: + - cron: '0 12 1 * *' + + workflow_dispatch: + +jobs: + update: + uses: glotzerlab/workflows/.github/workflows/update-uv-lockfiles.yaml@e130dd2814c7db5635babe4427dedcbd5aab76d4 # 0.5.0 + secrets: inherit + with: + branch: master diff --git a/ChangeLog.rst b/ChangeLog.rst index 51d85e6..5e2cd33 100644 --- a/ChangeLog.rst +++ b/ChangeLog.rst @@ -1,6 +1,19 @@ The format is based on `Keep a Changelog `_. This project adheres to `Semantic Versioning `_. +1.3.1 - not yet released +------------------------ + +Added ++++++ + +* Test with Python 3.13. +* Test with NumPy 2.0. + +Changed ++++++++ + +* Require Python >=3.8 v1.3.0 - 2020-06-18 ------------------- diff --git a/README.rst b/README.rst index d541195..466d7eb 100644 --- a/README.rst +++ b/README.rst @@ -6,32 +6,18 @@ rowan :local: |ReadTheDocs| -|CircleCI| -|Codecov| |PyPI| |conda-forge| -|Zenodo| |JOSS| .. |ReadTheDocs| image:: https://readthedocs.org/projects/rowan/badge/?version=latest - :target: http://rowan.readthedocs.io/en/latest/?badge=latest -.. |CircleCI| image:: https://circleci.com/gh/glotzerlab/rowan.svg?style=svg - :target: https://circleci.com/gh/glotzerlab/rowan -.. |Codecov| image:: https://codecov.io/gh/glotzerlab/rowan/branch/master/graph/badge.svg - :target: https://codecov.io/gh/glotzerlab/rowan + :target: http://rowan.readthedocs.io/en/latest/?badge=latest .. |PyPI| image:: https://img.shields.io/pypi/v/rowan.svg - :target: https://pypi.org/project/rowan/ + :target: https://pypi.org/project/rowan/ .. |conda-forge| image:: https://img.shields.io/conda/vn/conda-forge/rowan.svg :target: https://anaconda.org/conda-forge/rowan -.. |Codacy| image:: https://api.codacy.com/project/badge/Grade/2ff6c23cb9be4f77827428a87e0e9cfc - :target: https://www.codacy.com/app/vramasub/rowan?utm_source=github.com&utm_medium=referral&utm_content=glotzerlab/rowan&utm_campaign=Badge_Grade -.. |Zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.1323676.svg - :target: https://doi.org/10.5281/zenodo.1323676 .. |JOSS| image:: http://joss.theoj.org/papers/10.21105/joss.00787/status.svg - :target: https://doi.org/10.21105/joss.00787 -.. |pre-commit.ci| image:: https://results.pre-commit.ci/badge/github/glotzerlab/rowan/master.svg - :target: https://results.pre-commit.ci/latest/github/glotzerlab/rowan/master - :alt: pre-commit.ci status + :target: https://doi.org/10.21105/joss.00787 Welcome to the documentation for rowan, a package for working with quaternions! Quaternions, which form a number system with various interesting properties, were originally developed for classical mechanics. @@ -130,17 +116,6 @@ To run the packaged unit tests, execute the following line from the root of the python -m unittest discover tests -To check test coverage, make sure the coverage module is installed: - -.. code-block:: bash - - pip install coverage - -and then run the packaged unit tests with the coverage module: - -.. code-block:: bash - - coverage run -m unittest discover tests Running Benchmarks ------------------ diff --git a/doc/conf.py b/doc/conf.py index 590799d..4034c48 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -38,7 +38,6 @@ "sphinx.ext.intersphinx", "sphinx.ext.doctest", "sphinx.ext.todo", - "sphinx.ext.coverage", "sphinx.ext.mathjax", ] diff --git a/pyproject.toml b/pyproject.toml index bd078d0..b9f0d92 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ version = "1.3.0" description = "Perform quaternion operations using NumPy arrays" readme = "README.rst" license = { file = "LICENSE.txt" } -requires-python = ">=3.8, <4" +requires-python = ">=3.8" authors = [ { name = "Vyas Ramasubramani", email = "vramasub@umich.edu" }, ] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 83a6c49..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -numpy>=1.15.0