diff --git a/.constraints/py3.10.txt b/.constraints/py3.10.txt
index d1aa0298..784948ee 100644
--- a/.constraints/py3.10.txt
+++ b/.constraints/py3.10.txt
@@ -1,10 +1,10 @@
 # This file was autogenerated by uv via the following command:
 #    uv pip compile pyproject.toml -o .constraints/py3.10.txt --all-extras --no-annotate --python-version=3.10 --no-emit-package setuptools
 absl-py==2.1.0
-accessible-pygments==0.0.4
+accessible-pygments==0.0.5
 alabaster==0.7.16
-ampform==0.15.0
-anyio==4.3.0
+ampform==0.15.4
+anyio==4.4.0
 argon2-cffi==23.1.0
 argon2-cffi-bindings==21.2.0
 arrow==1.3.0
@@ -12,13 +12,13 @@ asttokens==2.4.1
 astunparse==1.6.3
 async-lru==2.0.4
 attrs==23.2.0
-babel==2.14.0
+babel==2.15.0
 beautifulsoup4==4.12.3
-black==24.3.0
+black==24.4.2
 bleach==6.1.0
 cachetools==5.3.3
 cattrs==23.2.3
-certifi==2024.2.2
+certifi==2024.6.2
 cffi==1.16.0
 cfgv==3.4.0
 chardet==5.2.0
@@ -28,7 +28,7 @@ cloudpickle==3.0.0
 colorama==0.4.6
 comm==0.2.2
 contourpy==1.2.1
-coverage==7.4.4
+coverage==7.5.4
 cycler==0.12.1
 debugpy==1.8.1
 decorator==5.1.1
@@ -36,14 +36,14 @@ defusedxml==0.7.1
 distlib==0.3.8
 dm-tree==0.1.8
 docstring-to-markdown==0.15
-docutils==0.20.1
-exceptiongroup==1.2.0
-execnet==2.1.0
+docutils==0.21.2
+exceptiongroup==1.2.1
+execnet==2.1.1
 executing==2.0.1
-fastjsonschema==2.19.1
-filelock==3.13.3
+fastjsonschema==2.20.0
+filelock==3.15.4
 flatbuffers==24.3.25
-fonttools==4.51.0
+fonttools==4.53.0
 fqdn==1.5.1
 gast==0.5.4
 gitdb==4.0.11
@@ -51,152 +51,151 @@ gitpython==3.1.43
 google-pasta==0.2.0
 graphviz==0.20.3
 greenlet==3.0.3
-grpcio==1.62.1
+grpcio==1.64.1
 h11==0.14.0
-h5py==3.10.0
-hepunits==2.3.3
+h5py==3.11.0
+hepunits==2.3.4
 httpcore==1.0.5
 httpx==0.27.0
-identify==2.5.35
-idna==3.6
+identify==2.5.36
+idna==3.7
 imagesize==1.4.1
-iminuit==2.25.2
-importlib-metadata==7.1.0
+iminuit==2.26.0
+importlib-metadata==7.2.1
 iniconfig==2.0.0
 ipykernel==6.29.4
-ipympl==0.9.3
-ipython==8.23.0
+ipympl==0.9.4
+ipython==8.25.0
 ipython-genutils==0.2.0
-ipywidgets==8.1.2
+ipywidgets==8.1.3
 isoduration==20.11.0
 isort==5.13.2
-jax==0.4.26
-jaxlib==0.4.26
+jax==0.4.30
+jaxlib==0.4.30
 jedi==0.19.1
-jinja2==3.1.3
-json5==0.9.24
-jsonpointer==2.4
-jsonschema==4.21.1
+jinja2==3.1.4
+json5==0.9.25
+jsonpointer==3.0.0
+jsonschema==4.22.0
 jsonschema-specifications==2023.12.1
 jupyter==1.0.0
 jupyter-cache==1.0.0
-jupyter-client==8.6.1
+jupyter-client==8.6.2
 jupyter-console==6.6.3
 jupyter-core==5.7.2
 jupyter-events==0.10.0
-jupyter-lsp==2.2.4
-jupyter-server==2.13.0
+jupyter-lsp==2.2.5
+jupyter-server==2.14.1
 jupyter-server-mathjax==0.2.6
 jupyter-server-terminals==0.5.3
-jupyterlab==4.1.5
+jupyterlab==4.2.2
 jupyterlab-code-formatter==2.2.1
-jupyterlab-git==0.50.0
+jupyterlab-git==0.50.1
 jupyterlab-lsp==5.1.0
-jupyterlab-myst==2.3.2
+jupyterlab-myst==2.4.2
 jupyterlab-pygments==0.3.0
-jupyterlab-server==2.25.4
-jupyterlab-widgets==3.0.10
-keras==3.1.1
+jupyterlab-server==2.27.2
+jupyterlab-widgets==3.0.11
+keras==3.3.3
 kiwisolver==1.4.5
 libclang==18.1.1
-livereload==2.6.3
-llvmlite==0.42.0
+llvmlite==0.43.0
 lsprotocol==2023.0.1
 markdown==3.6
 markdown-it-py==3.0.0
 markupsafe==2.1.5
-matplotlib==3.8.4
-matplotlib-inline==0.1.6
-mdit-py-plugins==0.4.0
+matplotlib==3.9.0
+matplotlib-inline==0.1.7
+mdit-py-plugins==0.4.1
 mdurl==0.1.2
 mistune==3.0.2
 ml-dtypes==0.3.2
 mpmath==1.3.0
-mypy==1.9.0
+mypy==1.10.0
 mypy-extensions==1.0.0
-myst-nb==1.0.0
-myst-parser==2.0.0
-namex==0.0.7
+myst-nb==1.1.0
+myst-parser==3.0.1
+namex==0.0.8
 nbclient==0.6.8
-nbconvert==7.16.3
+nbconvert==7.16.4
 nbdime==4.0.1
 nbformat==5.10.4
-nbmake==1.5.3
+nbmake==1.5.4
 nest-asyncio==1.6.0
-nodeenv==1.8.0
-notebook==7.1.2
+nodeenv==1.9.1
+notebook==7.2.1
 notebook-shim==0.2.4
-numba==0.59.1
+numba==0.60.0
 numpy==1.26.4
 opt-einsum==3.3.0
 optree==0.11.0
 overrides==7.7.0
-packaging==24.0
-pandas==2.2.1
+packaging==24.1
+pandas==2.2.2
 pandocfilters==1.5.1
 parso==0.8.4
-particle==0.23.1
+particle==0.24.0
 pathspec==0.12.1
 pexpect==4.9.0
-phasespace==1.9.0
+phasespace==1.10.3
 pillow==10.3.0
-platformdirs==4.2.0
-pluggy==1.4.0
-pre-commit==3.7.0
+platformdirs==4.2.2
+pluggy==1.5.0
+pre-commit==3.7.1
 prometheus-client==0.20.0
-prompt-toolkit==3.0.43
+prompt-toolkit==3.0.47
 protobuf==4.25.3
-psutil==5.9.8
+psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.2
 py-cpuinfo==9.0.0
-pyarrow==15.0.2
+pyarrow==16.1.0
 pycparser==2.22
-pydata-sphinx-theme==0.15.2
-pygments==2.17.2
+pydata-sphinx-theme==0.15.3
+pygments==2.18.0
 pyparsing==3.1.2
-pyproject-api==1.6.1
-pytest==8.1.1
+pyproject-api==1.7.1
+pytest==8.2.2
 pytest-benchmark==4.0.0
 pytest-cov==5.0.0
 pytest-mock==3.14.0
-pytest-xdist==3.5.0
-python-constraint==1.3.1
+pytest-xdist==3.6.1
+python-constraint2==2.0.0b5
 python-dateutil==2.9.0.post0
 python-json-logger==2.0.7
 python-lsp-jsonrpc==1.1.2
-python-lsp-ruff==2.2.0
+python-lsp-ruff==2.2.1
 python-lsp-server==1.11.0
 pytoolconfig==1.3.1
 pytz==2024.1
 pyyaml==6.0.1
-pyzmq==25.1.2
-qrules==0.10.1
-qtconsole==5.5.1
+pyzmq==26.0.3
+qrules==0.10.2
+qtconsole==5.5.2
 qtpy==2.4.1
-referencing==0.34.0
-requests==2.31.0
+referencing==0.35.1
+requests==2.32.3
 rfc3339-validator==0.1.4
 rfc3986-validator==0.1.1
 rich==13.7.1
 rope==1.13.0
-rpds-py==0.18.0
-ruff==0.3.5
-scipy==1.13.0
-send2trash==1.8.2
+rpds-py==0.18.1
+ruff==0.4.10
+scipy==1.13.1
+send2trash==1.8.3
 six==1.16.0
 smmap==5.0.1
 sniffio==1.3.1
 snowballstemmer==2.2.0
 soupsieve==2.5
-sphinx==7.2.6
-sphinx-api-relink==0.0.8
-sphinx-autobuild==2024.2.4
-sphinx-book-theme==1.1.2
-sphinx-codeautolink==0.15.0
+sphinx==7.3.7
+sphinx-api-relink==0.0.9
+sphinx-autobuild==2024.4.16
+sphinx-book-theme==1.1.3
+sphinx-codeautolink==0.15.2
 sphinx-comments==0.0.3
 sphinx-copybutton==0.5.2
-sphinx-design==0.5.0
+sphinx-design==0.6.0
 sphinx-thebe==0.3.1
 sphinx-togglebutton==0.3.2
 sphinxcontrib-applehelp==1.0.8
@@ -205,45 +204,49 @@ sphinxcontrib-htmlhelp==2.0.5
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==1.0.7
 sphinxcontrib-serializinghtml==1.1.10
-sphobjinv==2.3.1
-sqlalchemy==2.0.29
+sphobjinv==2.3.1.1
+sqlalchemy==2.0.31
 stack-data==0.6.3
-sympy==1.12
+starlette==0.37.2
+sympy==1.12.1
 tabulate==0.9.0
 tensorboard==2.16.2
 tensorboard-data-server==0.7.2
 tensorflow==2.16.1
-tensorflow-io-gcs-filesystem==0.36.0
+tensorflow-io-gcs-filesystem==0.37.0
 tensorflow-probability==0.24.0
 termcolor==2.4.0
 terminado==0.18.1
-tinycss2==1.2.1
+tinycss2==1.3.0
 tomli==2.0.1
-tornado==6.4
-tox==4.14.2
-tqdm==4.66.2
-traitlets==5.14.2
-types-protobuf==4.24.0.20240311
+tornado==6.4.1
+tox==4.15.1
+tqdm==4.66.4
+traitlets==5.14.3
+types-protobuf==5.26.0.20240422
 types-python-dateutil==2.9.0.20240316
 types-pyyaml==6.0.12.20240311
-types-requests==2.31.0.20240406
-types-tensorflow==2.15.0.20240314
-types-tqdm==4.66.0.20240106
-typing-extensions==4.11.0
+types-requests==2.32.0.20240622
+types-tensorflow==2.16.0.20240618
+types-tqdm==4.66.0.20240417
+typing-extensions==4.12.2
 tzdata==2024.1
-ujson==5.9.0
+ujson==5.10.0
 uri-template==1.3.0
-urllib3==2.2.1
-virtualenv==20.25.1
+urllib3==2.2.2
+uvicorn==0.30.1
+virtualenv==20.26.3
+watchfiles==0.22.0
 wcwidth==0.2.13
-webcolors==1.13
+webcolors==24.6.0
 webencodings==0.5.1
-websocket-client==1.7.0
-werkzeug==3.0.2
+websocket-client==1.8.0
+websockets==12.0
+werkzeug==3.0.3
 wheel==0.43.0
-widgetsnbextension==4.0.10
+widgetsnbextension==4.0.11
 wrapt==1.16.0
-zipp==3.18.1
+zipp==3.19.2
 
 # The following packages were excluded from the output:
 # setuptools
diff --git a/.constraints/py3.11.txt b/.constraints/py3.11.txt
index e8f3b22d..fb113061 100644
--- a/.constraints/py3.11.txt
+++ b/.constraints/py3.11.txt
@@ -1,10 +1,10 @@
 # This file was autogenerated by uv via the following command:
 #    uv pip compile pyproject.toml -o .constraints/py3.11.txt --all-extras --no-annotate --python-version=3.11 --no-emit-package setuptools
 absl-py==2.1.0
-accessible-pygments==0.0.4
+accessible-pygments==0.0.5
 alabaster==0.7.16
-ampform==0.15.0
-anyio==4.3.0
+ampform==0.15.4
+anyio==4.4.0
 argon2-cffi==23.1.0
 argon2-cffi-bindings==21.2.0
 arrow==1.3.0
@@ -12,13 +12,13 @@ asttokens==2.4.1
 astunparse==1.6.3
 async-lru==2.0.4
 attrs==23.2.0
-babel==2.14.0
+babel==2.15.0
 beautifulsoup4==4.12.3
-black==24.3.0
+black==24.4.2
 bleach==6.1.0
 cachetools==5.3.3
 cattrs==23.2.3
-certifi==2024.2.2
+certifi==2024.6.2
 cffi==1.16.0
 cfgv==3.4.0
 chardet==5.2.0
@@ -28,7 +28,7 @@ cloudpickle==3.0.0
 colorama==0.4.6
 comm==0.2.2
 contourpy==1.2.1
-coverage==7.4.4
+coverage==7.5.4
 cycler==0.12.1
 debugpy==1.8.1
 decorator==5.1.1
@@ -36,13 +36,13 @@ defusedxml==0.7.1
 distlib==0.3.8
 dm-tree==0.1.8
 docstring-to-markdown==0.15
-docutils==0.20.1
-execnet==2.1.0
+docutils==0.21.2
+execnet==2.1.1
 executing==2.0.1
-fastjsonschema==2.19.1
-filelock==3.13.3
+fastjsonschema==2.20.0
+filelock==3.15.4
 flatbuffers==24.3.25
-fonttools==4.51.0
+fonttools==4.53.0
 fqdn==1.5.1
 gast==0.5.4
 gitdb==4.0.11
@@ -50,152 +50,151 @@ gitpython==3.1.43
 google-pasta==0.2.0
 graphviz==0.20.3
 greenlet==3.0.3
-grpcio==1.62.1
+grpcio==1.64.1
 h11==0.14.0
-h5py==3.10.0
-hepunits==2.3.3
+h5py==3.11.0
+hepunits==2.3.4
 httpcore==1.0.5
 httpx==0.27.0
-identify==2.5.35
-idna==3.6
+identify==2.5.36
+idna==3.7
 imagesize==1.4.1
-iminuit==2.25.2
-importlib-metadata==7.1.0
+iminuit==2.26.0
+importlib-metadata==7.2.1
 iniconfig==2.0.0
 ipykernel==6.29.4
-ipympl==0.9.3
-ipython==8.23.0
+ipympl==0.9.4
+ipython==8.25.0
 ipython-genutils==0.2.0
-ipywidgets==8.1.2
+ipywidgets==8.1.3
 isoduration==20.11.0
 isort==5.13.2
-jax==0.4.26
-jaxlib==0.4.26
+jax==0.4.30
+jaxlib==0.4.30
 jedi==0.19.1
-jinja2==3.1.3
-json5==0.9.24
-jsonpointer==2.4
-jsonschema==4.21.1
+jinja2==3.1.4
+json5==0.9.25
+jsonpointer==3.0.0
+jsonschema==4.22.0
 jsonschema-specifications==2023.12.1
 jupyter==1.0.0
 jupyter-cache==1.0.0
-jupyter-client==8.6.1
+jupyter-client==8.6.2
 jupyter-console==6.6.3
 jupyter-core==5.7.2
 jupyter-events==0.10.0
-jupyter-lsp==2.2.4
-jupyter-server==2.13.0
+jupyter-lsp==2.2.5
+jupyter-server==2.14.1
 jupyter-server-mathjax==0.2.6
 jupyter-server-terminals==0.5.3
-jupyterlab==4.1.5
+jupyterlab==4.2.2
 jupyterlab-code-formatter==2.2.1
-jupyterlab-git==0.50.0
+jupyterlab-git==0.50.1
 jupyterlab-lsp==5.1.0
-jupyterlab-myst==2.3.2
+jupyterlab-myst==2.4.2
 jupyterlab-pygments==0.3.0
-jupyterlab-server==2.25.4
-jupyterlab-widgets==3.0.10
-keras==3.1.1
+jupyterlab-server==2.27.2
+jupyterlab-widgets==3.0.11
+keras==3.3.3
 kiwisolver==1.4.5
 libclang==18.1.1
-livereload==2.6.3
-llvmlite==0.42.0
+llvmlite==0.43.0
 lsprotocol==2023.0.1
 markdown==3.6
 markdown-it-py==3.0.0
 markupsafe==2.1.5
-matplotlib==3.8.4
-matplotlib-inline==0.1.6
-mdit-py-plugins==0.4.0
+matplotlib==3.9.0
+matplotlib-inline==0.1.7
+mdit-py-plugins==0.4.1
 mdurl==0.1.2
 mistune==3.0.2
 ml-dtypes==0.3.2
 mpmath==1.3.0
-mypy==1.9.0
+mypy==1.10.0
 mypy-extensions==1.0.0
-myst-nb==1.0.0
-myst-parser==2.0.0
-namex==0.0.7
+myst-nb==1.1.0
+myst-parser==3.0.1
+namex==0.0.8
 nbclient==0.6.8
-nbconvert==7.16.3
+nbconvert==7.16.4
 nbdime==4.0.1
 nbformat==5.10.4
-nbmake==1.5.3
+nbmake==1.5.4
 nest-asyncio==1.6.0
-nodeenv==1.8.0
-notebook==7.1.2
+nodeenv==1.9.1
+notebook==7.2.1
 notebook-shim==0.2.4
-numba==0.59.1
+numba==0.60.0
 numpy==1.26.4
 opt-einsum==3.3.0
 optree==0.11.0
 overrides==7.7.0
-packaging==24.0
-pandas==2.2.1
+packaging==24.1
+pandas==2.2.2
 pandocfilters==1.5.1
 parso==0.8.4
-particle==0.23.1
+particle==0.24.0
 pathspec==0.12.1
 pexpect==4.9.0
-phasespace==1.9.0
+phasespace==1.10.3
 pillow==10.3.0
-platformdirs==4.2.0
-pluggy==1.4.0
-pre-commit==3.7.0
+platformdirs==4.2.2
+pluggy==1.5.0
+pre-commit==3.7.1
 prometheus-client==0.20.0
-prompt-toolkit==3.0.43
+prompt-toolkit==3.0.47
 protobuf==4.25.3
-psutil==5.9.8
+psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.2
 py-cpuinfo==9.0.0
-pyarrow==15.0.2
+pyarrow==16.1.0
 pycparser==2.22
-pydata-sphinx-theme==0.15.2
-pygments==2.17.2
+pydata-sphinx-theme==0.15.3
+pygments==2.18.0
 pyparsing==3.1.2
-pyproject-api==1.6.1
-pytest==8.1.1
+pyproject-api==1.7.1
+pytest==8.2.2
 pytest-benchmark==4.0.0
 pytest-cov==5.0.0
 pytest-mock==3.14.0
-pytest-xdist==3.5.0
-python-constraint==1.3.1
+pytest-xdist==3.6.1
+python-constraint2==2.0.0b5
 python-dateutil==2.9.0.post0
 python-json-logger==2.0.7
 python-lsp-jsonrpc==1.1.2
-python-lsp-ruff==2.2.0
+python-lsp-ruff==2.2.1
 python-lsp-server==1.11.0
 pytoolconfig==1.3.1
 pytz==2024.1
 pyyaml==6.0.1
-pyzmq==25.1.2
-qrules==0.10.1
-qtconsole==5.5.1
+pyzmq==26.0.3
+qrules==0.10.2
+qtconsole==5.5.2
 qtpy==2.4.1
-referencing==0.34.0
-requests==2.31.0
+referencing==0.35.1
+requests==2.32.3
 rfc3339-validator==0.1.4
 rfc3986-validator==0.1.1
 rich==13.7.1
 rope==1.13.0
-rpds-py==0.18.0
-ruff==0.3.5
-scipy==1.13.0
-send2trash==1.8.2
+rpds-py==0.18.1
+ruff==0.4.10
+scipy==1.13.1
+send2trash==1.8.3
 six==1.16.0
 smmap==5.0.1
 sniffio==1.3.1
 snowballstemmer==2.2.0
 soupsieve==2.5
-sphinx==7.2.6
-sphinx-api-relink==0.0.8
-sphinx-autobuild==2024.2.4
-sphinx-book-theme==1.1.2
-sphinx-codeautolink==0.15.0
+sphinx==7.3.7
+sphinx-api-relink==0.0.9
+sphinx-autobuild==2024.4.16
+sphinx-book-theme==1.1.3
+sphinx-codeautolink==0.15.2
 sphinx-comments==0.0.3
 sphinx-copybutton==0.5.2
-sphinx-design==0.5.0
+sphinx-design==0.6.0
 sphinx-thebe==0.3.1
 sphinx-togglebutton==0.3.2
 sphinxcontrib-applehelp==1.0.8
@@ -204,44 +203,48 @@ sphinxcontrib-htmlhelp==2.0.5
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==1.0.7
 sphinxcontrib-serializinghtml==1.1.10
-sphobjinv==2.3.1
-sqlalchemy==2.0.29
+sphobjinv==2.3.1.1
+sqlalchemy==2.0.31
 stack-data==0.6.3
-sympy==1.12
+starlette==0.37.2
+sympy==1.12.1
 tabulate==0.9.0
 tensorboard==2.16.2
 tensorboard-data-server==0.7.2
 tensorflow==2.16.1
-tensorflow-io-gcs-filesystem==0.36.0
+tensorflow-io-gcs-filesystem==0.37.0
 tensorflow-probability==0.24.0
 termcolor==2.4.0
 terminado==0.18.1
-tinycss2==1.2.1
-tornado==6.4
-tox==4.14.2
-tqdm==4.66.2
-traitlets==5.14.2
-types-protobuf==4.24.0.20240311
+tinycss2==1.3.0
+tornado==6.4.1
+tox==4.15.1
+tqdm==4.66.4
+traitlets==5.14.3
+types-protobuf==5.26.0.20240422
 types-python-dateutil==2.9.0.20240316
 types-pyyaml==6.0.12.20240311
-types-requests==2.31.0.20240406
-types-tensorflow==2.15.0.20240314
-types-tqdm==4.66.0.20240106
-typing-extensions==4.11.0
+types-requests==2.32.0.20240622
+types-tensorflow==2.16.0.20240618
+types-tqdm==4.66.0.20240417
+typing-extensions==4.12.2
 tzdata==2024.1
-ujson==5.9.0
+ujson==5.10.0
 uri-template==1.3.0
-urllib3==2.2.1
-virtualenv==20.25.1
+urllib3==2.2.2
+uvicorn==0.30.1
+virtualenv==20.26.3
+watchfiles==0.22.0
 wcwidth==0.2.13
-webcolors==1.13
+webcolors==24.6.0
 webencodings==0.5.1
-websocket-client==1.7.0
-werkzeug==3.0.2
+websocket-client==1.8.0
+websockets==12.0
+werkzeug==3.0.3
 wheel==0.43.0
-widgetsnbextension==4.0.10
+widgetsnbextension==4.0.11
 wrapt==1.16.0
-zipp==3.18.1
+zipp==3.19.2
 
 # The following packages were excluded from the output:
 # setuptools
diff --git a/.constraints/py3.8.txt b/.constraints/py3.8.txt
index baf19cde..cef295bb 100644
--- a/.constraints/py3.8.txt
+++ b/.constraints/py3.8.txt
@@ -3,8 +3,8 @@
 absl-py==2.1.0
 accessible-pygments==0.0.4
 alabaster==0.7.13
-ampform==0.15.0
-anyio==4.3.0
+ampform==0.15.4
+anyio==4.4.0
 argon2-cffi==23.1.0
 argon2-cffi-bindings==21.2.0
 arrow==1.3.0
@@ -12,14 +12,14 @@ asttokens==2.4.1
 astunparse==1.6.3
 async-lru==2.0.4
 attrs==23.2.0
-babel==2.14.0
+babel==2.15.0
 backcall==0.2.0
 beautifulsoup4==4.12.3
-black==24.3.0
+black==24.4.2
 bleach==6.1.0
 cachetools==5.3.3
 cattrs==23.2.3
-certifi==2024.2.2
+certifi==2024.6.2
 cffi==1.16.0
 cfgv==3.4.0
 chardet==5.2.0
@@ -29,7 +29,7 @@ cloudpickle==3.0.0
 colorama==0.4.6
 comm==0.2.2
 contourpy==1.1.1
-coverage==7.4.4
+coverage==7.5.4
 cycler==0.12.1
 debugpy==1.8.1
 decorator==5.1.1
@@ -38,170 +38,170 @@ distlib==0.3.8
 dm-tree==0.1.8
 docstring-to-markdown==0.15
 docutils==0.19
-exceptiongroup==1.2.0
-execnet==2.1.0
+exceptiongroup==1.2.1
+execnet==2.1.1
 executing==2.0.1
-fastjsonschema==2.19.1
-filelock==3.13.3
+fastjsonschema==2.20.0
+filelock==3.15.4
 flatbuffers==24.3.25
-fonttools==4.51.0
+fonttools==4.53.0
 fqdn==1.5.1
 gast==0.4.0
 gitdb==4.0.11
 gitpython==3.1.43
-google-auth==2.29.0
+google-auth==2.30.0
 google-auth-oauthlib==0.4.6
 google-pasta==0.2.0
 graphviz==0.20.3
 greenlet==3.0.3
-grpcio==1.62.1
+grpcio==1.64.1
 h11==0.14.0
-h5py==3.10.0
-hepunits==2.3.3
+h5py==3.11.0
+hepunits==2.3.4
 httpcore==1.0.5
 httpx==0.27.0
-identify==2.5.35
-idna==3.6
+identify==2.5.36
+idna==3.7
 imagesize==1.4.1
-iminuit==2.25.2
-importlib-metadata==7.1.0
+iminuit==2.26.0
+importlib-metadata==7.2.1
 importlib-resources==6.4.0
 iniconfig==2.0.0
 ipykernel==6.29.4
 ipympl==0.9.3
 ipython==8.12.3
 ipython-genutils==0.2.0
-ipywidgets==8.1.2
+ipywidgets==8.1.3
 isoduration==20.11.0
 isort==5.13.2
 jax==0.4.13
 jaxlib==0.4.13
 jedi==0.19.1
-jinja2==3.1.3
-json5==0.9.24
-jsonpointer==2.4
-jsonschema==4.21.1
+jinja2==3.1.4
+json5==0.9.25
+jsonpointer==3.0.0
+jsonschema==4.22.0
 jsonschema-specifications==2023.12.1
 jupyter==1.0.0
 jupyter-cache==0.6.1
-jupyter-client==8.6.1
+jupyter-client==8.6.2
 jupyter-console==6.6.3
 jupyter-core==5.7.2
 jupyter-events==0.10.0
-jupyter-lsp==2.2.4
-jupyter-server==2.13.0
+jupyter-lsp==2.2.5
+jupyter-server==2.14.1
 jupyter-server-mathjax==0.2.6
 jupyter-server-terminals==0.5.3
-jupyterlab==4.1.5
+jupyterlab==4.2.2
 jupyterlab-code-formatter==2.2.1
-jupyterlab-git==0.50.0
+jupyterlab-git==0.50.1
 jupyterlab-lsp==5.1.0
-jupyterlab-myst==2.3.2
+jupyterlab-myst==2.4.2
 jupyterlab-pygments==0.3.0
-jupyterlab-server==2.25.4
-jupyterlab-widgets==3.0.10
+jupyterlab-server==2.27.2
+jupyterlab-widgets==3.0.11
 keras==2.11.0
 kiwisolver==1.4.5
 libclang==18.1.1
-livereload==2.6.3
+livereload==2.7.0
 llvmlite==0.41.1
 lsprotocol==2023.0.1
 markdown==3.6
 markdown-it-py==2.2.0
 markupsafe==2.1.5
 matplotlib==3.7.5
-matplotlib-inline==0.1.6
+matplotlib-inline==0.1.7
 mdit-py-plugins==0.3.5
 mdurl==0.1.2
 mistune==3.0.2
 ml-dtypes==0.2.0
 mpmath==1.3.0
-mypy==1.9.0
+mypy==1.10.0
 mypy-extensions==1.0.0
 myst-nb==0.17.2
 myst-parser==0.18.1
 nbclient==0.6.8
-nbconvert==7.16.3
+nbconvert==7.16.4
 nbdime==4.0.1
 nbformat==5.10.4
-nbmake==1.5.3
+nbmake==1.5.4
 nest-asyncio==1.6.0
-nodeenv==1.8.0
-notebook==7.1.2
+nodeenv==1.9.1
+notebook==7.2.1
 notebook-shim==0.2.4
 numba==0.58.1
 numpy==1.24.4
 oauthlib==3.2.2
 opt-einsum==3.3.0
 overrides==7.7.0
-packaging==24.0
+packaging==24.1
 pandas==2.0.3
 pandocfilters==1.5.1
 parso==0.8.4
-particle==0.23.1
+particle==0.24.0
 pathspec==0.12.1
 pexpect==4.9.0
 phasespace==1.9.0
 pickleshare==0.7.5
 pillow==10.3.0
 pkgutil-resolve-name==1.3.10
-platformdirs==4.2.0
-pluggy==1.4.0
+platformdirs==4.2.2
+pluggy==1.5.0
 pre-commit==3.5.0
 prometheus-client==0.20.0
-prompt-toolkit==3.0.43
+prompt-toolkit==3.0.47
 protobuf==3.19.6
-psutil==5.9.8
+psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.2
 py-cpuinfo==9.0.0
-pyarrow==15.0.2
+pyarrow==16.1.0
 pyasn1==0.6.0
 pyasn1-modules==0.4.0
 pycparser==2.22
 pydata-sphinx-theme==0.14.4
-pygments==2.17.2
+pygments==2.18.0
 pyparsing==3.1.2
-pyproject-api==1.6.1
-pytest==8.1.1
+pyproject-api==1.7.1
+pytest==8.2.2
 pytest-benchmark==4.0.0
 pytest-cov==5.0.0
 pytest-mock==3.14.0
-pytest-xdist==3.5.0
-python-constraint==1.3.1
+pytest-xdist==3.6.1
+python-constraint2==2.0.0b5
 python-dateutil==2.9.0.post0
 python-json-logger==2.0.7
 python-lsp-jsonrpc==1.1.2
-python-lsp-ruff==2.2.0
+python-lsp-ruff==2.2.1
 python-lsp-server==1.11.0
 pytoolconfig==1.3.1
 pytz==2024.1
 pyyaml==6.0.1
-pyzmq==25.1.2
-qrules==0.10.1
-qtconsole==5.5.1
+pyzmq==26.0.3
+qrules==0.10.2
+qtconsole==5.5.2
 qtpy==2.4.1
-referencing==0.34.0
-requests==2.31.0
+referencing==0.35.1
+requests==2.32.3
 requests-oauthlib==2.0.0
 rfc3339-validator==0.1.4
 rfc3986-validator==0.1.1
 rope==1.13.0
-rpds-py==0.18.0
+rpds-py==0.18.1
 rsa==4.9
-ruff==0.3.5
+ruff==0.4.10
 scipy==1.10.1
-send2trash==1.8.2
+send2trash==1.8.3
 six==1.16.0
 smmap==5.0.1
 sniffio==1.3.1
 snowballstemmer==2.2.0
 soupsieve==2.5
 sphinx==5.3.0
-sphinx-api-relink==0.0.8
+sphinx-api-relink==0.0.9
 sphinx-autobuild==2021.3.14
 sphinx-book-theme==1.0.1
-sphinx-codeautolink==0.15.0
+sphinx-codeautolink==0.15.2
 sphinx-comments==0.0.3
 sphinx-copybutton==0.5.2
 sphinx-design==0.5.0
@@ -213,10 +213,10 @@ sphinxcontrib-htmlhelp==2.0.1
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==1.0.3
 sphinxcontrib-serializinghtml==1.1.5
-sphobjinv==2.3.1
-sqlalchemy==2.0.29
+sphobjinv==2.3.1.1
+sqlalchemy==2.0.31
 stack-data==0.6.3
-sympy==1.12
+sympy==1.12.1
 tabulate==0.9.0
 tensorboard==2.11.2
 tensorboard-data-server==0.6.1
@@ -227,33 +227,33 @@ tensorflow-io-gcs-filesystem==0.34.0
 tensorflow-probability==0.20.1
 termcolor==2.4.0
 terminado==0.18.1
-tinycss2==1.2.1
+tinycss2==1.3.0
 tomli==2.0.1
-tornado==6.4
-tox==4.14.2
-tqdm==4.66.2
-traitlets==5.14.2
-types-protobuf==4.24.0.20240311
+tornado==6.4.1
+tox==4.15.1
+tqdm==4.66.4
+traitlets==5.14.3
+types-protobuf==5.26.0.20240422
 types-python-dateutil==2.9.0.20240316
 types-pyyaml==6.0.12.20240311
-types-requests==2.31.0.20240406
-types-tensorflow==2.15.0.20240314
-types-tqdm==4.66.0.20240106
-typing-extensions==4.11.0
+types-requests==2.32.0.20240622
+types-tensorflow==2.16.0.20240618
+types-tqdm==4.66.0.20240417
+typing-extensions==4.12.2
 tzdata==2024.1
-ujson==5.9.0
+ujson==5.10.0
 uri-template==1.3.0
-urllib3==2.2.1
-virtualenv==20.25.1
+urllib3==2.2.2
+virtualenv==20.26.3
 wcwidth==0.2.13
-webcolors==1.13
+webcolors==24.6.0
 webencodings==0.5.1
-websocket-client==1.7.0
-werkzeug==3.0.2
+websocket-client==1.8.0
+werkzeug==3.0.3
 wheel==0.43.0
-widgetsnbextension==4.0.10
+widgetsnbextension==4.0.11
 wrapt==1.16.0
-zipp==3.18.1
+zipp==3.19.2
 
 # The following packages were excluded from the output:
 # setuptools
diff --git a/.constraints/py3.9.txt b/.constraints/py3.9.txt
index 43a43972..eb5909ff 100644
--- a/.constraints/py3.9.txt
+++ b/.constraints/py3.9.txt
@@ -1,10 +1,10 @@
 # This file was autogenerated by uv via the following command:
 #    uv pip compile pyproject.toml -o .constraints/py3.9.txt --all-extras --no-annotate --python-version=3.9 --no-emit-package setuptools
 absl-py==2.1.0
-accessible-pygments==0.0.4
+accessible-pygments==0.0.5
 alabaster==0.7.16
-ampform==0.15.0
-anyio==4.3.0
+ampform==0.15.4
+anyio==4.4.0
 argon2-cffi==23.1.0
 argon2-cffi-bindings==21.2.0
 arrow==1.3.0
@@ -12,13 +12,13 @@ asttokens==2.4.1
 astunparse==1.6.3
 async-lru==2.0.4
 attrs==23.2.0
-babel==2.14.0
+babel==2.15.0
 beautifulsoup4==4.12.3
-black==24.3.0
+black==24.4.2
 bleach==6.1.0
 cachetools==5.3.3
 cattrs==23.2.3
-certifi==2024.2.2
+certifi==2024.6.2
 cffi==1.16.0
 cfgv==3.4.0
 chardet==5.2.0
@@ -28,7 +28,7 @@ cloudpickle==3.0.0
 colorama==0.4.6
 comm==0.2.2
 contourpy==1.2.1
-coverage==7.4.4
+coverage==7.5.4
 cycler==0.12.1
 debugpy==1.8.1
 decorator==5.1.1
@@ -36,14 +36,14 @@ defusedxml==0.7.1
 distlib==0.3.8
 dm-tree==0.1.8
 docstring-to-markdown==0.15
-docutils==0.20.1
-exceptiongroup==1.2.0
-execnet==2.1.0
+docutils==0.21.2
+exceptiongroup==1.2.1
+execnet==2.1.1
 executing==2.0.1
-fastjsonschema==2.19.1
-filelock==3.13.3
+fastjsonschema==2.20.0
+filelock==3.15.4
 flatbuffers==24.3.25
-fonttools==4.51.0
+fonttools==4.53.0
 fqdn==1.5.1
 gast==0.5.4
 gitdb==4.0.11
@@ -51,153 +51,152 @@ gitpython==3.1.43
 google-pasta==0.2.0
 graphviz==0.20.3
 greenlet==3.0.3
-grpcio==1.62.1
+grpcio==1.64.1
 h11==0.14.0
-h5py==3.10.0
-hepunits==2.3.3
+h5py==3.11.0
+hepunits==2.3.4
 httpcore==1.0.5
 httpx==0.27.0
-identify==2.5.35
-idna==3.6
+identify==2.5.36
+idna==3.7
 imagesize==1.4.1
-iminuit==2.25.2
-importlib-metadata==7.1.0
+iminuit==2.26.0
+importlib-metadata==7.2.1
 importlib-resources==6.4.0
 iniconfig==2.0.0
 ipykernel==6.29.4
-ipympl==0.9.3
+ipympl==0.9.4
 ipython==8.18.1
 ipython-genutils==0.2.0
-ipywidgets==8.1.2
+ipywidgets==8.1.3
 isoduration==20.11.0
 isort==5.13.2
-jax==0.4.26
-jaxlib==0.4.26
+jax==0.4.30
+jaxlib==0.4.30
 jedi==0.19.1
-jinja2==3.1.3
-json5==0.9.24
-jsonpointer==2.4
-jsonschema==4.21.1
+jinja2==3.1.4
+json5==0.9.25
+jsonpointer==3.0.0
+jsonschema==4.22.0
 jsonschema-specifications==2023.12.1
 jupyter==1.0.0
 jupyter-cache==1.0.0
-jupyter-client==8.6.1
+jupyter-client==8.6.2
 jupyter-console==6.6.3
 jupyter-core==5.7.2
 jupyter-events==0.10.0
-jupyter-lsp==2.2.4
-jupyter-server==2.13.0
+jupyter-lsp==2.2.5
+jupyter-server==2.14.1
 jupyter-server-mathjax==0.2.6
 jupyter-server-terminals==0.5.3
-jupyterlab==4.1.5
+jupyterlab==4.2.2
 jupyterlab-code-formatter==2.2.1
-jupyterlab-git==0.50.0
+jupyterlab-git==0.50.1
 jupyterlab-lsp==5.1.0
-jupyterlab-myst==2.3.2
+jupyterlab-myst==2.4.2
 jupyterlab-pygments==0.3.0
-jupyterlab-server==2.25.4
-jupyterlab-widgets==3.0.10
-keras==3.1.1
+jupyterlab-server==2.27.2
+jupyterlab-widgets==3.0.11
+keras==3.3.3
 kiwisolver==1.4.5
 libclang==18.1.1
-livereload==2.6.3
-llvmlite==0.42.0
+llvmlite==0.43.0
 lsprotocol==2023.0.1
 markdown==3.6
 markdown-it-py==3.0.0
 markupsafe==2.1.5
-matplotlib==3.8.4
-matplotlib-inline==0.1.6
-mdit-py-plugins==0.4.0
+matplotlib==3.9.0
+matplotlib-inline==0.1.7
+mdit-py-plugins==0.4.1
 mdurl==0.1.2
 mistune==3.0.2
 ml-dtypes==0.3.2
 mpmath==1.3.0
-mypy==1.9.0
+mypy==1.10.0
 mypy-extensions==1.0.0
-myst-nb==1.0.0
-myst-parser==2.0.0
-namex==0.0.7
+myst-nb==1.1.0
+myst-parser==3.0.1
+namex==0.0.8
 nbclient==0.6.8
-nbconvert==7.16.3
+nbconvert==7.16.4
 nbdime==4.0.1
 nbformat==5.10.4
-nbmake==1.5.3
+nbmake==1.5.4
 nest-asyncio==1.6.0
-nodeenv==1.8.0
-notebook==7.1.2
+nodeenv==1.9.1
+notebook==7.2.1
 notebook-shim==0.2.4
-numba==0.59.1
+numba==0.60.0
 numpy==1.26.4
 opt-einsum==3.3.0
 optree==0.11.0
 overrides==7.7.0
-packaging==24.0
-pandas==2.2.1
+packaging==24.1
+pandas==2.2.2
 pandocfilters==1.5.1
 parso==0.8.4
-particle==0.23.1
+particle==0.24.0
 pathspec==0.12.1
 pexpect==4.9.0
-phasespace==1.9.0
+phasespace==1.10.3
 pillow==10.3.0
-platformdirs==4.2.0
-pluggy==1.4.0
-pre-commit==3.7.0
+platformdirs==4.2.2
+pluggy==1.5.0
+pre-commit==3.7.1
 prometheus-client==0.20.0
-prompt-toolkit==3.0.43
+prompt-toolkit==3.0.47
 protobuf==4.25.3
-psutil==5.9.8
+psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.2
 py-cpuinfo==9.0.0
-pyarrow==15.0.2
+pyarrow==16.1.0
 pycparser==2.22
-pydata-sphinx-theme==0.15.2
-pygments==2.17.2
+pydata-sphinx-theme==0.15.3
+pygments==2.18.0
 pyparsing==3.1.2
-pyproject-api==1.6.1
-pytest==8.1.1
+pyproject-api==1.7.1
+pytest==8.2.2
 pytest-benchmark==4.0.0
 pytest-cov==5.0.0
 pytest-mock==3.14.0
-pytest-xdist==3.5.0
-python-constraint==1.3.1
+pytest-xdist==3.6.1
+python-constraint2==2.0.0b5
 python-dateutil==2.9.0.post0
 python-json-logger==2.0.7
 python-lsp-jsonrpc==1.1.2
-python-lsp-ruff==2.2.0
+python-lsp-ruff==2.2.1
 python-lsp-server==1.11.0
 pytoolconfig==1.3.1
 pytz==2024.1
 pyyaml==6.0.1
-pyzmq==25.1.2
-qrules==0.10.1
-qtconsole==5.5.1
+pyzmq==26.0.3
+qrules==0.10.2
+qtconsole==5.5.2
 qtpy==2.4.1
-referencing==0.34.0
-requests==2.31.0
+referencing==0.35.1
+requests==2.32.3
 rfc3339-validator==0.1.4
 rfc3986-validator==0.1.1
 rich==13.7.1
 rope==1.13.0
-rpds-py==0.18.0
-ruff==0.3.5
-scipy==1.13.0
-send2trash==1.8.2
+rpds-py==0.18.1
+ruff==0.4.10
+scipy==1.13.1
+send2trash==1.8.3
 six==1.16.0
 smmap==5.0.1
 sniffio==1.3.1
 snowballstemmer==2.2.0
 soupsieve==2.5
-sphinx==7.2.6
-sphinx-api-relink==0.0.8
-sphinx-autobuild==2024.2.4
-sphinx-book-theme==1.1.2
-sphinx-codeautolink==0.15.0
+sphinx==7.3.7
+sphinx-api-relink==0.0.9
+sphinx-autobuild==2024.4.16
+sphinx-book-theme==1.1.3
+sphinx-codeautolink==0.15.2
 sphinx-comments==0.0.3
 sphinx-copybutton==0.5.2
-sphinx-design==0.5.0
+sphinx-design==0.6.0
 sphinx-thebe==0.3.1
 sphinx-togglebutton==0.3.2
 sphinxcontrib-applehelp==1.0.8
@@ -206,45 +205,49 @@ sphinxcontrib-htmlhelp==2.0.5
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==1.0.7
 sphinxcontrib-serializinghtml==1.1.10
-sphobjinv==2.3.1
-sqlalchemy==2.0.29
+sphobjinv==2.3.1.1
+sqlalchemy==2.0.31
 stack-data==0.6.3
-sympy==1.12
+starlette==0.37.2
+sympy==1.12.1
 tabulate==0.9.0
 tensorboard==2.16.2
 tensorboard-data-server==0.7.2
 tensorflow==2.16.1
-tensorflow-io-gcs-filesystem==0.36.0
+tensorflow-io-gcs-filesystem==0.37.0
 tensorflow-probability==0.24.0
 termcolor==2.4.0
 terminado==0.18.1
-tinycss2==1.2.1
+tinycss2==1.3.0
 tomli==2.0.1
-tornado==6.4
-tox==4.14.2
-tqdm==4.66.2
-traitlets==5.14.2
-types-protobuf==4.24.0.20240311
+tornado==6.4.1
+tox==4.15.1
+tqdm==4.66.4
+traitlets==5.14.3
+types-protobuf==5.26.0.20240422
 types-python-dateutil==2.9.0.20240316
 types-pyyaml==6.0.12.20240311
-types-requests==2.31.0.20240406
-types-tensorflow==2.15.0.20240314
-types-tqdm==4.66.0.20240106
-typing-extensions==4.11.0
+types-requests==2.32.0.20240622
+types-tensorflow==2.16.0.20240618
+types-tqdm==4.66.0.20240417
+typing-extensions==4.12.2
 tzdata==2024.1
-ujson==5.9.0
+ujson==5.10.0
 uri-template==1.3.0
-urllib3==2.2.1
-virtualenv==20.25.1
+urllib3==2.2.2
+uvicorn==0.30.1
+virtualenv==20.26.3
+watchfiles==0.22.0
 wcwidth==0.2.13
-webcolors==1.13
+webcolors==24.6.0
 webencodings==0.5.1
-websocket-client==1.7.0
-werkzeug==3.0.2
+websocket-client==1.8.0
+websockets==12.0
+werkzeug==3.0.3
 wheel==0.43.0
-widgetsnbextension==4.0.10
+widgetsnbextension==4.0.11
 wrapt==1.16.0
-zipp==3.18.1
+zipp==3.19.2
 
 # The following packages were excluded from the output:
 # setuptools
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c06add89..f92836d5 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -40,7 +40,7 @@ repos:
             metadata.vscode
 
   - repo: https://github.com/ComPWA/policy
-    rev: 0.3.4
+    rev: 0.3.9
     hooks:
       - id: check-dev-files
         args:
@@ -60,7 +60,7 @@ repos:
           - --extras-require=doc,jax,pwa,viz
 
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.3.5
+    rev: v0.4.10
     hooks:
       - id: ruff
         args: [--fix]
@@ -69,7 +69,7 @@ repos:
         types_or: [python, pyi, jupyter]
 
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.5.0
+    rev: v4.6.0
     hooks:
       - id: check-ast
       - id: check-case-conflict
@@ -113,7 +113,7 @@ repos:
           - --in-place
 
   - repo: https://github.com/python-jsonschema/check-jsonschema
-    rev: 0.28.1
+    rev: 0.28.5
     hooks:
       - id: check-jsonschema
         name: Check CITATION.cff
@@ -126,7 +126,7 @@ repos:
         pass_filenames: false
 
   - repo: https://github.com/streetsidesoftware/cspell-cli
-    rev: v8.6.1
+    rev: v8.9.0
     hooks:
       - id: cspell
 
@@ -152,6 +152,6 @@ repos:
           - python
 
   - repo: https://github.com/ComPWA/mirrors-pyright
-    rev: v1.1.357
+    rev: v1.1.368
     hooks:
       - id: pyright
diff --git a/.readthedocs.yml b/.readthedocs.yml
index f67a479e..3b9aca14 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -1,13 +1,5 @@
 version: 2
 
-sphinx:
-  builder: dirhtml
-  configuration: docs/conf.py
-  fail_on_warning: true
-
-formats:
-  - htmlzip
-
 build:
   os: ubuntu-22.04
   tools:
@@ -16,6 +8,13 @@ build:
     - graphviz
   jobs:
     post_install:
-      - curl -LsSf https://astral.sh/uv/install.sh | sh
-      - |-
-        /home/docs/.cargo/bin/uv pip install --system -c .constraints/py3.10.txt -e .[doc]
+      - python -m pip install 'uv>=0.2.0'
+      - python -m uv pip install -c .constraints/py3.10.txt -e .[doc]
+
+formats:
+  - htmlzip
+
+sphinx:
+  builder: dirhtml
+  configuration: docs/conf.py
+  fail_on_warning: true
diff --git a/benchmarks/ampform.py b/benchmarks/ampform.py
index 3db3781b..d7143975 100644
--- a/benchmarks/ampform.py
+++ b/benchmarks/ampform.py
@@ -31,7 +31,7 @@
 
 
 def formulate_amplitude_model(
-    formalism: str,
+    formalism,
     initial_state: StateDefinition,
     final_state: Sequence[StateDefinition],
     intermediate_states: list[str] | None = None,
diff --git a/pyproject.toml b/pyproject.toml
index 5604bc63..86617fed 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -141,6 +141,7 @@ test-types = [
     "pytest-mock >=3.3.0",
 ]
 tf = [
+    "numpy<2",
     "tensorflow !=2.15.0.post1", # https://github.com/ComPWA/tensorwaves/actions/runs/7147814088/job/19467965144?pr=509
     "tensorflow >=2.4", # tensorflow.experimental.numpy
     'tensorflow <2.12; python_version <"3.9.0"',
@@ -271,6 +272,7 @@ filterwarnings = [
     "ignore:divide by zero encountered in divide:RuntimeWarning",
     "ignore:divide by zero encountered in true_divide:RuntimeWarning",
     "ignore:invalid value encountered in .*:RuntimeWarning",
+    "ignore:jax\\.xla_computation is deprecated\\. Please use the AOT APIs\\.:DeprecationWarning",
     "ignore:ml_dtypes\\.float8.*:DeprecationWarning",
     "ignore:module 'sre_constants' is deprecated:DeprecationWarning",
     "ignore:numpy.ufunc size changed, may indicate binary incompatibility.*:RuntimeWarning",
diff --git a/tests/data/test_phasespace.py b/tests/data/test_phasespace.py
index 15739101..634deead 100644
--- a/tests/data/test_phasespace.py
+++ b/tests/data/test_phasespace.py
@@ -182,7 +182,7 @@ def test_generate_deterministic(self, pdg: "ParticleCollection"):
         }
         n_events = len(next(iter(expected_sample.values())))
         assert set(phsp_momenta) == set(expected_sample)
-        for i in expected_sample:
+        for i in expected_sample:  # noqa: PLC0206
             expected_momenta = expected_sample[i]
             momenta = phsp_momenta[i]
         assert len(expected_momenta) == n_events
diff --git a/tests/data/test_transform.py b/tests/data/test_transform.py
index 7b08f7f9..a1237293 100644
--- a/tests/data/test_transform.py
+++ b/tests/data/test_transform.py
@@ -22,8 +22,12 @@ def test_identity_chain(self, extend: bool):
         rng = np.random.default_rng(seed=0)
         data = {"x": rng.uniform(size=100), "y": rng.uniform(size=100)}
         transformed_data = chained_transform(data)
-        for key in data:
-            np.testing.assert_allclose(data[key], transformed_data[key], rtol=1e-13)
+        for key in data:  # noqa: PLC0206
+            np.testing.assert_allclose(
+                data[key],
+                transformed_data[key],
+                rtol=1e-13,
+            )
         if extend:
             assert set(transformed_data) == {"x", "y", "v", "w"}
         else: