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