diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 267a67c332a3d9fdce1a5340cd835ec49554eda1..d53cf660fdefa320b6119dfb662ac37451d847b7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -375,7 +375,10 @@ build final image: install tests: stage: test - image: python:3.9 + parallel: + matrix: + - PYTHON_VERSION: ["3.9", "3.10", "3.11"] + image: python:${PYTHON_VERSION} needs: ["build python package"] variables: UV_SYSTEM_PYTHON: true diff --git a/Dockerfile b/Dockerfile index 79f1d21ad59635308b317d621f45df38b63e55f2..a59347f2a3b294aec3fc197cc147648128511eaa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ # https://docs.docker.com/engine/reference/builder/ FROM node:16.15 AS base_node -FROM python:3.9-slim AS base_python +FROM python:3.11-slim AS base_python # Keeps Python from buffering stdout and stderr to avoid situations where # the application crashes without emitting any logs due to buffering. ENV PYTHONUNBUFFERED 1 @@ -200,9 +200,9 @@ COPY default_plugins.txt . RUN uv pip install -r default_plugins.txt -c requirements.txt # Reduce the size of the packages -RUN find /usr/local/lib/python3.9/ -type d -name 'tests' ! -path '*/networkx/*' -exec rm -r '{}' + \ - && find /usr/local/lib/python3.9/ -type d -name 'test' -exec rm -r '{}' + \ - && find /usr/local/lib/python3.9/site-packages/ -name '*.so' ! -path '*/h5py/*' ! -path '*/quippy*/*' -print -exec sh -c 'file "{}" | grep -q "not stripped" && strip -s "{}"' \; +RUN find /usr/local/lib/python3.11/ -type d -name 'tests' ! -path '*/networkx/*' -exec rm -r '{}' + \ + && find /usr/local/lib/python3.11/ -type d -name 'test' -exec rm -r '{}' + \ + && find /usr/local/lib/python3.11/site-packages/ -name '*.so' ! -path '*/h5py/*' ! -path '*/quippy*/*' -print -exec sh -c 'file "{}" | grep -q "not stripped" && strip -s "{}"' \; # ================================================================================ @@ -221,7 +221,7 @@ COPY --chown=nomad:1000 scripts/run-worker.sh . COPY --chown=nomad:1000 nomad/jupyterhub_config.py ./nomad/jupyterhub_config.py COPY --chown=nomad:1000 --from=dev_package /app/examples/data/uploads /app/examples/data/uploads -COPY --chown=nomad:1000 --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages +COPY --chown=nomad:1000 --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages COPY --chown=nomad:1000 --from=builder /usr/local/share/jupyterhub /usr/local/share/jupyterhub COPY --chown=nomad:1000 --from=builder /usr/local/share/jupyter /usr/local/share/jupyter COPY --chown=nomad:1000 --from=builder /usr/local/bin/nomad /usr/local/bin/nomad @@ -229,7 +229,7 @@ COPY --chown=nomad:1000 --from=builder /usr/local/bin/jupyter* /usr/local/bin/ RUN mkdir -p /app/.volumes/fs \ && chown -R nomad:1000 /app \ - && chown -R nomad:1000 /usr/local/lib/python3.9/site-packages/nomad + && chown -R nomad:1000 /usr/local/lib/python3.11/site-packages/nomad USER nomad diff --git a/docs/howto/plugins/normalizers.md b/docs/howto/plugins/normalizers.md index 890ea6a91902d9ae872e199e938ef92ecd121c12..43c897bafde06719a594e0fe0c34a74d5acd2a23 100644 --- a/docs/howto/plugins/normalizers.md +++ b/docs/howto/plugins/normalizers.md @@ -178,7 +178,7 @@ cd <normalizer-dir> Either remove the installed normalizer and `pip install` the cloned version: ```shell -rm -rf <path-to-your-python-env>/lib/python3.9/site-packages/<normalizer-module-name> +rm -rf <path-to-your-python-env>/lib/python3.11/site-packages/<normalizer-module-name> pip install -e . ``` @@ -189,4 +189,4 @@ PYTHONPATH=. nomad parse <path-to-example-file> ``` Alternatively, you can also do a full [developer setup](../develop/setup.md) of the NOMAD infrastructure and -enhance the normalizer there. \ No newline at end of file +enhance the normalizer there. diff --git a/docs/howto/plugins/parsers.md b/docs/howto/plugins/parsers.md index 67a9d5c738291751e10dd05cd21ac9afbe0a866b..7bb3196230d685d3643d970e246a02b9344402b9 100644 --- a/docs/howto/plugins/parsers.md +++ b/docs/howto/plugins/parsers.md @@ -424,7 +424,7 @@ cd <parser-dir> Either remove the installed parser and `pip install` the cloned version: ```shell -rm -rf <path-to-your-python-env>/lib/python3.9/site-packages/<parser-module-name> +rm -rf <path-to-your-python-env>/lib/python3.11/site-packages/<parser-module-name> pip install -e . ``` diff --git a/docs/tutorial/develop_plugin.md b/docs/tutorial/develop_plugin.md index 0026471de6bb32fdba6e02baf870157a701dff22..f60077d022d4e8ab55381d6edc2b571d8880d7bb 100644 --- a/docs/tutorial/develop_plugin.md +++ b/docs/tutorial/develop_plugin.md @@ -172,7 +172,7 @@ and the "Allow GitHub Actions to create and approve pull requests" options and c Before we can start developing we recommend to create a virtual environment using Python 3.9 ```sh -python3.9 -m venv .pyenv +python3.11 -m venv .pyenv source .pyenv/bin/activate ``` diff --git a/nomad/app/v1/routers/systems.py b/nomad/app/v1/routers/systems.py index ce0cf3957eba6a443848f9830ff4158b2f6b00db..36748041d27430c43d74e9282662dcbcd449a1be 100644 --- a/nomad/app/v1/routers/systems.py +++ b/nomad/app/v1/routers/systems.py @@ -17,6 +17,7 @@ # from typing import Dict, List, Union from io import StringIO, BytesIO +import sys from collections import OrderedDict from enum import Enum @@ -210,9 +211,15 @@ for format in format_map.values(): ) format_features = '\n'.join(format_features_list) +if sys.version_info < (3, 11): -class TempFormatEnum(str, Enum): - pass + class TempFormatEnum(str, Enum): + pass +else: + from enum import StrEnum + + class TempFormatEnum(StrEnum): + pass FormatEnum = TempFormatEnum( @@ -239,8 +246,15 @@ wrap_mode_map: Dict[str, dict] = OrderedDict( ) -class TempWrapModeEnum(str, Enum): - pass +if sys.version_info < (3, 11): + + class TempWrapModeEnum(str, Enum): + pass +else: + from enum import StrEnum + + class TempWrapModeEnum(StrEnum): + pass WrapModeEnum = TempWrapModeEnum( @@ -334,7 +348,7 @@ Here is a brief rundown of the different features each format supports: {format_features}""", ), wrap_mode: WrapModeEnum = Query( # type: ignore - default=WrapModeEnum.original, + default=WrapModeEnum.original, # type: ignore description=f"""Determines how to handle atomic positions for the requested system. The available options are: {wrap_mode_description} @@ -437,13 +451,13 @@ Here is a brief rundown of the different features each format supports: pass # Handle wrap mode - if wrap_mode == WrapModeEnum.wrap: + if wrap_mode == WrapModeEnum.wrap: # type: ignore atoms.positions = wrap_positions( atoms.positions.magnitude, atoms.lattice_vectors.magnitude, atoms.periodic, ) - elif wrap_mode == WrapModeEnum.unwrap: + elif wrap_mode == WrapModeEnum.unwrap: # type: ignore atoms.positions = unwrap_positions( atoms.positions.magnitude, atoms.lattice_vectors.magnitude, diff --git a/requirements-dev.txt b/requirements-dev.txt index d1fda4dd9940238632919ab11c4577ebc7890781..87ea1aa64ee33c75f125d7d183d13e6f7ffb0f68 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,5 +1,5 @@ # This file was autogenerated by uv via the following command: -# uv pip compile -p 3.9 --annotation-style=line --extra=dev --extra=infrastructure --extra=parsing --output-file=requirements-dev.txt requirements.txt pyproject.toml +# uv pip compile --universal --annotation-style=line --extra=dev --extra=infrastructure --extra=parsing --output-file=requirements-dev.txt requirements.txt pyproject.toml aiosmtpd==1.4.6 # via nomad-lab (pyproject.toml) alabaster==0.7.16 # via sphinx, -r requirements.txt alembic==1.13.2 # via jupyterhub, -r requirements.txt @@ -10,14 +10,14 @@ arrow==1.3.0 # via isoduration, -r requirements.txt ase==3.22.1 # via asr, matid, quippy-ase, -r requirements.txt, nomad-lab (pyproject.toml) asgiref==3.8.1 # via -r requirements.txt, nomad-lab (pyproject.toml) asr==0.4.1 # via -r requirements.txt, nomad-lab (pyproject.toml) -astroid==3.2.2 # via nomad-lab (pyproject.toml) +astroid==3.2.4 # via nomad-lab (pyproject.toml) asttokens==2.4.1 # via devtools async-generator==1.10 # via jupyterhub, -r requirements.txt async-property==0.2.2 # via python-keycloak, -r requirements.txt -atpublic==4.1.0 # via aiosmtpd +atpublic==5.0 # via aiosmtpd attrs==23.2.0 # via aiosmtpd, jsonschema, -r requirements.txt babel==2.15.0 # via mkdocs-git-revision-date-localized-plugin, mkdocs-material, sphinx, -r requirements.txt -backports-tarfile==1.2.0 # via jaraco-context +backports-tarfile==1.2.0 ; python_version < '3.12' # via jaraco-context bagit==1.8.1 # via -r requirements.txt, nomad-lab (pyproject.toml) basicauth==0.4.1 # via -r requirements.txt, nomad-lab (pyproject.toml) beautifulsoup4==4.12.3 # via -r requirements.txt, nomad-lab (pyproject.toml) @@ -26,22 +26,22 @@ biopython==1.84 # via mdanalysis, -r requirements.txt bitarray==2.9.2 # via -r requirements.txt, nomad-lab (pyproject.toml) blinker==1.8.2 # via flask, -r requirements.txt build==1.2.1 # via nomad-lab (pyproject.toml) -cachetools==5.3.3 # via -r requirements.txt, nomad-lab (pyproject.toml) +cachetools==5.4.0 # via -r requirements.txt, nomad-lab (pyproject.toml) celery==5.4.0 # via -r requirements.txt, nomad-lab (pyproject.toml) certifi==2024.7.4 # via elasticsearch, httpcore, httpx, netcdf4, requests, -r requirements.txt certipy==0.1.3 # via jupyterhub, -r requirements.txt -cffi==1.16.0 # via cryptography, -r requirements.txt +cffi==1.16.0 ; platform_python_implementation != 'PyPy' # via cryptography, -r requirements.txt cftime==1.6.4 # via netcdf4, -r requirements.txt charset-normalizer==3.3.2 # via requests, -r requirements.txt click==8.1.7 # via asr, celery, click-didyoumean, click-plugins, click-repl, flask, mkdocs, mkdocs-click, uvicorn, -r requirements.txt, nomad-lab (pyproject.toml) click-didyoumean==0.3.1 # via celery, -r requirements.txt click-plugins==1.1.1 # via celery, -r requirements.txt click-repl==0.3.0 # via celery, -r requirements.txt -colorama==0.4.6 # via mkdocs-material, twine +colorama==0.4.6 # via build, click, mkdocs, mkdocs-material, pytest, sphinx, tqdm, twine, uvicorn, -r requirements.txt commonmark==0.9.1 # via recommonmark, -r requirements.txt contourpy==1.2.1 # via matplotlib, -r requirements.txt -coverage==7.5.4 # via pytest-cov -cryptography==42.0.8 # via jwcrypto, pyjwt, pyopenssl, rfc3161ng, -r requirements.txt +coverage==7.6.0 # via pytest-cov +cryptography==43.0.0 # via jwcrypto, pyjwt, pyopenssl, rfc3161ng, secretstorage, -r requirements.txt cycler==0.12.1 # via matplotlib, -r requirements.txt decorator==5.1.1 # via validators, -r requirements.txt deprecation==2.1.0 # via python-keycloak, -r requirements.txt @@ -57,7 +57,7 @@ email-validator==1.3.1 # via optimade, -r requirements.txt escapism==1.0.1 # via dockerspawner, -r requirements.txt essential-generators==1.0 # via nomad-lab (pyproject.toml) et-xmlfile==1.1.0 # via openpyxl, -r requirements.txt -exceptiongroup==1.2.1 # via anyio, pytest, -r requirements.txt +exceptiongroup==1.2.2 ; python_version < '3.11' # via anyio, pytest, -r requirements.txt execnet==2.1.1 # via pytest-xdist executing==2.0.1 # via devtools f90wrap==0.2.15 # via quippy-ase, -r requirements.txt @@ -65,12 +65,12 @@ fastapi==0.99.1 # via h5grove, -r requirements.txt, nomad-lab (pyproje fasteners==0.19 # via mdanalysis, -r requirements.txt filelock==3.3.1 # via -r requirements.txt, nomad-lab (pyproject.toml) flask==3.0.3 # via asr, -r requirements.txt -fonttools==4.53.0 # via matplotlib, -r requirements.txt +fonttools==4.53.1 # via matplotlib, -r requirements.txt fqdn==1.5.1 # via jsonschema, -r requirements.txt ghp-import==2.1.0 # via mkdocs gitdb==4.0.11 # via gitpython, -r requirements.txt gitpython==3.1.43 # via mkdocs-git-revision-date-localized-plugin, -r requirements.txt, nomad-lab (pyproject.toml) -greenlet==3.0.3 # via sqlalchemy, -r requirements.txt +greenlet==3.0.3 ; python_version < '3.13' and (platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64') # via sqlalchemy, -r requirements.txt griddataformats==1.0.2 # via mdanalysis, -r requirements.txt gsd==3.3.0 # via mdanalysis, -r requirements.txt gunicorn==21.2.0 # via -r requirements.txt, nomad-lab (pyproject.toml) @@ -85,7 +85,7 @@ httpx==0.27.0 # via python-keycloak, -r requirements.txt, nomad-lab idna==3.7 # via anyio, email-validator, httpx, jsonschema, requests, -r requirements.txt imagesize==1.4.1 # via sphinx, -r requirements.txt importlib-metadata==7.1.0 # via build, flask, jupyterhub, keyring, markdown, mkdocs, mkdocs-get-deps, sphinx, twine, -r requirements.txt, nomad-lab (pyproject.toml) -importlib-resources==6.4.0 # via matplotlib, spglib, -r requirements.txt +importlib-resources==6.4.0 ; python_version < '3.10' # via matplotlib, spglib, -r requirements.txt inflection==0.5.1 # via -r requirements.txt, nomad-lab (pyproject.toml) iniconfig==2.0.0 # via pytest isodate==0.6.1 # via rdflib, -r requirements.txt @@ -94,6 +94,7 @@ itsdangerous==2.2.0 # via flask, -r requirements.txt, nomad-lab (pyproject jaraco-classes==3.4.0 # via keyring jaraco-context==5.3.0 # via keyring jaraco-functools==4.0.1 # via keyring +jeepney==0.8.0 ; sys_platform == 'linux' # via keyring, secretstorage jinja2==3.1.4 # via flask, jupyterhub, mkdocs, mkdocs-macros-plugin, mkdocs-material, sphinx, -r requirements.txt jmespath==1.0.1 # via -r requirements.txt, nomad-lab (pyproject.toml) joblib==1.4.2 # via mdanalysis, pymatgen, scikit-learn, -r requirements.txt @@ -114,7 +115,7 @@ mako==1.3.5 # via alembic, -r requirements.txt markdown==3.6 # via mkdocs, mkdocs-click, mkdocs-material, pymdown-extensions markupsafe==2.1.5 # via jinja2, mako, mkdocs, werkzeug, -r requirements.txt, nomad-lab (pyproject.toml) matid==2.0.1 # via -r requirements.txt, nomad-lab (pyproject.toml) -matplotlib==3.9.0 # via ase, asr, mdanalysis, phonopy, pymatgen, -r requirements.txt +matplotlib==3.9.1 # via ase, asr, mdanalysis, phonopy, pymatgen, -r requirements.txt mda-xdrlib==0.2.0 # via pyedr, -r requirements.txt mdanalysis==2.5.0 # via -r requirements.txt, nomad-lab (pyproject.toml) mergedeep==1.3.4 # via mkdocs, mkdocs-get-deps @@ -125,23 +126,23 @@ mkdocs-get-deps==0.2.0 # via mkdocs mkdocs-git-revision-date-localized-plugin==1.2.6 # via nomad-lab (pyproject.toml) mkdocs-glightbox==0.4.0 # via nomad-lab (pyproject.toml) mkdocs-macros-plugin==1.0.5 # via nomad-lab (pyproject.toml) -mkdocs-material==9.5.28 # via nomad-lab (pyproject.toml) +mkdocs-material==9.5.30 # via nomad-lab (pyproject.toml) mkdocs-material-extensions==1.3.1 # via mkdocs-material, nomad-lab (pyproject.toml) mkdocs-redirects==1.2.1 # via nomad-lab (pyproject.toml) mmtf-python==1.1.3 # via mdanalysis, -r requirements.txt mongoengine==0.28.2 # via -r requirements.txt, nomad-lab (pyproject.toml) mongomock==4.1.2 # via optimade, -r requirements.txt -monty==2024.5.24 # via pymatgen, -r requirements.txt +monty==2024.7.12 # via pymatgen, -r requirements.txt more-itertools==10.3.0 # via jaraco-classes, jaraco-functools mpmath==1.3.0 # via sympy, -r requirements.txt -mrcfile==1.5.0 # via griddataformats, -r requirements.txt +mrcfile==1.5.3 # via griddataformats, -r requirements.txt msgpack==1.0.8 # via mmtf-python, -r requirements.txt, nomad-lab (pyproject.toml) mypy==1.0.1 # via nomad-lab (pyproject.toml) mypy-extensions==1.0.0 # via mypy names==0.3.0 # via nomad-lab (pyproject.toml) netcdf4==1.6.5 # via -r requirements.txt, nomad-lab (pyproject.toml) networkx==2.6.3 # via matid, mdanalysis, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml) -nh3==0.2.17 # via readme-renderer +nh3==0.2.18 # via readme-renderer nomad-openbis==1.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml) nptyping==1.4.4 # via -r requirements.txt, nomad-lab (pyproject.toml) numpy==1.26.4 # via ase, biopython, cftime, contourpy, f90wrap, griddataformats, gsd, h5grove, h5py, matid, matplotlib, mdanalysis, mrcfile, netcdf4, nptyping, pandas, phonopy, pyedr, pymatgen, quippy-ase, rdkit, scikit-learn, scipy, spglib, tifffile, xarray, -r requirements.txt, nomad-lab (pyproject.toml) @@ -153,38 +154,40 @@ orjson==3.10.6 # via h5grove, -r requirements.txt, nomad-lab (pyproje packaging==24.1 # via build, deprecation, f90wrap, gunicorn, jupyterhub, matplotlib, mdanalysis, mkdocs, mongomock, pint, plotly, pytest, sphinx, xarray, -r requirements.txt paginate==0.5.6 # via mkdocs-material palettable==3.3.3 # via pymatgen, -r requirements.txt -pamela==1.1.0 # via jupyterhub, -r requirements.txt +pamela==1.1.0 ; sys_platform != 'win32' # via jupyterhub, -r requirements.txt pandas==1.5.3 # via nomad-openbis, panedr, pymatgen, xarray, -r requirements.txt, nomad-lab (pyproject.toml) panedr==0.8.0 # via -r requirements.txt, nomad-lab (pyproject.toml) parmed==4.2.2 # via -r requirements.txt, nomad-lab (pyproject.toml) pathspec==0.12.1 # via mkdocs -phonopy==2.25.0 # via asr, -r requirements.txt +phonopy==2.26.6 # via asr, -r requirements.txt pillow==10.4.0 # via matplotlib, rdkit, -r requirements.txt pint==0.17 # via -r requirements.txt, nomad-lab (pyproject.toml) pkginfo==1.11.1 # via twine platformdirs==4.2.2 # via mkdocs-get-deps -plotly==5.22.0 # via asr, pymatgen, -r requirements.txt +plotly==5.23.0 # via asr, pymatgen, -r requirements.txt pluggy==1.5.0 # via pytest prometheus-client==0.20.0 # via jupyterhub, -r requirements.txt prompt-toolkit==3.0.47 # via click-repl, -r requirements.txt +psutil==6.0.0 ; sys_platform == 'win32' # via jupyterhub, -r requirements.txt pyasn1==0.6.0 # via pyasn1-modules, rfc3161ng, -r requirements.txt pyasn1-modules==0.4.0 # via rfc3161ng, -r requirements.txt pybtex==0.24.0 # via pymatgen, -r requirements.txt pycodestyle==2.12.0 # via nomad-lab (pyproject.toml) -pycparser==2.22 # via cffi, -r requirements.txt +pycparser==2.22 ; platform_python_implementation != 'PyPy' # via cffi, -r requirements.txt pydantic==1.10.17 # via fastapi, optimade, -r requirements.txt, nomad-lab (pyproject.toml) pyedr==0.8.0 # via panedr, -r requirements.txt pygments==2.18.0 # via devtools, mkdocs-material, readme-renderer, sphinx, -r requirements.txt pyjwt==2.6.0 # via -r requirements.txt, nomad-lab (pyproject.toml) +pylibmagic==0.5.0 ; sys_platform == 'darwin' # via -r requirements.txt, nomad-lab (pyproject.toml) pymatgen==2024.5.1 # via asr, -r requirements.txt, nomad-lab (pyproject.toml) pymdown-extensions==10.8.1 # via mkdocs-material pymongo==4.6.3 # via mongoengine, optimade, -r requirements.txt, nomad-lab (pyproject.toml) -pyopenssl==24.1.0 # via certipy, -r requirements.txt +pyopenssl==24.2.1 # via certipy, -r requirements.txt pyparsing==3.1.2 # via matplotlib, rdflib, -r requirements.txt pyproject-hooks==1.1.0 # via build pyrsistent==0.20.0 # via jsonschema, -r requirements.txt pytest==7.4.4 # via pytest-asyncio, pytest-cov, pytest-split, pytest-timeout, pytest-xdist, nomad-lab (pyproject.toml) -pytest-asyncio==0.23.7 # via nomad-lab (pyproject.toml) +pytest-asyncio==0.23.8 # via nomad-lab (pyproject.toml) pytest-cov==5.0.0 # via nomad-lab (pyproject.toml) pytest-split==0.9.0 # via nomad-lab (pyproject.toml) pytest-timeout==2.3.1 # via nomad-lab (pyproject.toml) @@ -193,19 +196,22 @@ python-dateutil==2.9.0.post0 # via arrow, celery, elasticsearch-dsl, ghp-import python-dotenv==1.0.1 # via uvicorn, -r requirements.txt python-gitlab==2.10.1 # via nomad-lab (pyproject.toml) python-json-logger==2.0.2 # via jupyter-telemetry, -r requirements.txt, nomad-lab (pyproject.toml) -python-keycloak==4.2.0 # via -r requirements.txt, nomad-lab (pyproject.toml) +python-keycloak==4.2.3 # via -r requirements.txt, nomad-lab (pyproject.toml) python-logstash==0.4.6 # via -r requirements.txt, nomad-lab (pyproject.toml) python-magic==0.4.24 # via -r requirements.txt, nomad-lab (pyproject.toml) +python-magic-bin==0.4.14 ; sys_platform == 'win32' # via -r requirements.txt, nomad-lab (pyproject.toml) python-multipart==0.0.9 # via -r requirements.txt, nomad-lab (pyproject.toml) pytz==2024.1 # via mkdocs-git-revision-date-localized-plugin, pandas, -r requirements.txt, nomad-lab (pyproject.toml) +pywin32==306 ; sys_platform == 'win32' # via docker, -r requirements.txt +pywin32-ctypes==0.2.2 ; sys_platform == 'win32' # via keyring pyyaml==6.0.1 # via mkdocs, mkdocs-get-deps, mkdocs-macros-plugin, phonopy, pybtex, pymdown-extensions, pyyaml-env-tag, uvicorn, -r requirements.txt, nomad-lab (pyproject.toml) pyyaml-env-tag==0.1 # via mkdocs quippy-ase==0.9.14 # via -r requirements.txt, nomad-lab (pyproject.toml) rdflib==5.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml) rdkit==2023.9.5 # via -r requirements.txt, nomad-lab (pyproject.toml) -readme-renderer==43.0 # via twine +readme-renderer==44.0 # via twine recommonmark==0.7.1 # via -r requirements.txt, nomad-lab (pyproject.toml) -regex==2024.5.15 # via mkdocs-material +regex==2024.7.24 # via mkdocs-material requests==2.31.0 # via docker, jupyterhub, mkdocs-material, nomad-openbis, oauthenticator, optimade, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine, -r requirements.txt, nomad-lab (pyproject.toml) requests-toolbelt==1.0.0 # via python-gitlab, python-keycloak, twine, -r requirements.txt rfc3161ng==2.1.3 # via -r requirements.txt, nomad-lab (pyproject.toml) @@ -214,36 +220,37 @@ rfc3986==2.0.0 # via twine rfc3987==1.3.8 # via jsonschema, -r requirements.txt rope==0.21.0 # via nomad-lab (pyproject.toml) ruamel-yaml==0.18.6 # via jupyter-telemetry, oauthenticator, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml) -ruamel-yaml-clib==0.2.8 # via ruamel-yaml, -r requirements.txt -ruff==0.5.4 # via nomad-lab (pyproject.toml) +ruamel-yaml-clib==0.2.8 ; python_version < '3.13' and platform_python_implementation == 'CPython' # via ruamel-yaml, -r requirements.txt +ruff==0.5.5 # via nomad-lab (pyproject.toml) runstats==2.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml) scikit-learn==1.5.1 # via matid, -r requirements.txt, nomad-lab (pyproject.toml) scipy==1.13.1 # via ase, griddataformats, matid, mdanalysis, pymatgen, scikit-learn, -r requirements.txt, nomad-lab (pyproject.toml) +secretstorage==3.3.3 ; sys_platform == 'linux' # via keyring sentinels==1.0.0 # via mongomock, -r requirements.txt six==1.16.0 # via asttokens, basicauth, elasticsearch-dsl, html5lib, isodate, pybtex, python-dateutil, rdflib, rfc3339-validator, validators, -r requirements.txt smmap==5.0.1 # via gitdb, -r requirements.txt sniffio==1.3.1 # via anyio, httpx, -r requirements.txt snowballstemmer==2.2.0 # via sphinx, -r requirements.txt soupsieve==2.5 # via beautifulsoup4, -r requirements.txt -spglib==2.4.0 # via asr, matid, phonopy, pymatgen, -r requirements.txt -sphinx==7.3.7 # via recommonmark, -r requirements.txt +spglib==2.5.0 # via asr, matid, phonopy, pymatgen, -r requirements.txt +sphinx==7.4.7 # via recommonmark, -r requirements.txt sphinxcontrib-applehelp==1.0.8 # via sphinx, -r requirements.txt sphinxcontrib-devhelp==1.0.6 # via sphinx, -r requirements.txt -sphinxcontrib-htmlhelp==2.0.5 # via sphinx, -r requirements.txt +sphinxcontrib-htmlhelp==2.0.6 # via sphinx, -r requirements.txt sphinxcontrib-jsmath==1.0.1 # via sphinx, -r requirements.txt -sphinxcontrib-qthelp==1.0.7 # via sphinx, -r requirements.txt +sphinxcontrib-qthelp==1.0.8 # via sphinx, -r requirements.txt sphinxcontrib-serializinghtml==1.1.10 # via sphinx, -r requirements.txt sqlalchemy==2.0.31 # via alembic, jupyterhub, -r requirements.txt starlette==0.27.0 # via fastapi, -r requirements.txt -structlog==24.2.0 # via -r requirements.txt, nomad-lab (pyproject.toml) -sympy==1.12.1 # via pymatgen, -r requirements.txt +structlog==24.4.0 # via -r requirements.txt, nomad-lab (pyproject.toml) +sympy==1.13.1 # via pymatgen, -r requirements.txt tabulate==0.8.9 # via nomad-openbis, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml) -tenacity==8.4.2 # via plotly, -r requirements.txt +tenacity==8.5.0 # via plotly, -r requirements.txt termcolor==2.4.0 # via mkdocs-macros-plugin texttable==1.7.0 # via nomad-openbis, -r requirements.txt threadpoolctl==3.5.0 # via mdanalysis, scikit-learn, -r requirements.txt -tifffile==2024.7.2 # via h5grove, -r requirements.txt -tomli==2.0.1 # via build, coverage, mypy, pytest, sphinx, -r requirements.txt +tifffile==2024.7.24 # via h5grove, -r requirements.txt +tomli==2.0.1 ; python_full_version <= '3.11.0a6' or python_version < '3.11' # via build, coverage, mypy, pytest, sphinx, -r requirements.txt toposort==1.10 # via -r requirements.txt, nomad-lab (pyproject.toml) tornado==6.4.1 # via jupyterhub, -r requirements.txt tqdm==4.66.4 # via mdanalysis, pyedr, pymatgen, twine, -r requirements.txt @@ -251,16 +258,16 @@ traitlets==5.14.3 # via jupyter-telemetry, jupyterhub, -r requirements.t twine==3.4.2 # via nomad-lab (pyproject.toml) typed-ast==1.5.5 # via nomad-lab (pyproject.toml) types-python-dateutil==2.9.0.20240316 # via arrow, -r requirements.txt -typing-extensions==4.12.2 # via alembic, anyio, asgiref, astroid, fastapi, jwcrypto, kombu, mypy, pydantic, sqlalchemy, starlette, uvicorn, -r requirements.txt +typing-extensions==4.12.2 # via alembic, anyio, asgiref, astroid, fastapi, jwcrypto, kombu, mypy, pydantic, spglib, sqlalchemy, starlette, uvicorn, -r requirements.txt typish==1.9.3 # via nptyping, -r requirements.txt tzdata==2024.1 # via celery, -r requirements.txt -uncertainties==3.2.1 # via pymatgen, -r requirements.txt +uncertainties==3.2.2 # via pymatgen, -r requirements.txt unidecode==1.3.2 # via -r requirements.txt, nomad-lab (pyproject.toml) uri-template==1.3.0 # via jsonschema, -r requirements.txt urllib3==1.26.19 # via docker, elasticsearch, nomad-openbis, requests, -r requirements.txt -uv==0.2.21 # via nomad-lab (pyproject.toml) -uvicorn==0.30.1 # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml) -uvloop==0.19.0 # via uvicorn, -r requirements.txt +uv==0.2.29 # via nomad-lab (pyproject.toml) +uvicorn==0.30.3 # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml) +uvloop==0.19.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' # via uvicorn, -r requirements.txt validators==0.18.2 # via -r requirements.txt, nomad-lab (pyproject.toml) vine==5.1.0 # via amqp, celery, kombu, -r requirements.txt watchdog==4.0.1 # via mkdocs diff --git a/requirements.txt b/requirements.txt index 08656b154fc81be075d2b775d5f8eb479a7284db..2d9edb09161772a8c15e430796751d9067765a2d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # This file was autogenerated by uv via the following command: -# uv pip compile -p 3.9 --annotation-style=line --extra=infrastructure --extra=parsing --output-file=requirements.txt dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml pyproject.toml +# uv pip compile --universal --annotation-style=line --extra=infrastructure --extra=parsing --output-file=requirements.txt dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml pyproject.toml alabaster==0.7.16 # via sphinx alembic==1.13.2 # via jupyterhub amqp==5.2.0 # via kombu @@ -20,20 +20,21 @@ billiard==4.2.0 # via celery biopython==1.84 # via mdanalysis bitarray==2.9.2 # via nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nomad-lab (pyproject.toml) blinker==1.8.2 # via flask -cachetools==5.3.3 # via nomad-lab (pyproject.toml) +cachetools==5.4.0 # via nomad-lab (pyproject.toml) celery==5.4.0 # via nomad-lab (pyproject.toml) certifi==2024.7.4 # via elasticsearch, httpcore, httpx, netcdf4, requests certipy==0.1.3 # via jupyterhub -cffi==1.16.0 # via cryptography +cffi==1.16.0 ; platform_python_implementation != 'PyPy' # via cryptography cftime==1.6.4 # via netcdf4 charset-normalizer==3.3.2 # via requests click==8.1.7 # via asr, celery, click-didyoumean, click-plugins, click-repl, flask, uvicorn, nomad-lab (pyproject.toml) click-didyoumean==0.3.1 # via celery click-plugins==1.1.1 # via celery click-repl==0.3.0 # via celery +colorama==0.4.6 ; platform_system == 'Windows' or sys_platform == 'win32' # via click, sphinx, tqdm, uvicorn commonmark==0.9.1 # via recommonmark contourpy==1.2.1 # via matplotlib -cryptography==42.0.8 # via jwcrypto, pyjwt, pyopenssl, rfc3161ng +cryptography==43.0.0 # via jwcrypto, pyjwt, pyopenssl, rfc3161ng cycler==0.12.1 # via matplotlib decorator==5.1.1 # via validators deprecation==2.1.0 # via python-keycloak @@ -47,17 +48,17 @@ elasticsearch-dsl==7.4.0 # via nomad-lab (pyproject.toml) email-validator==1.3.1 # via optimade escapism==1.0.1 # via dockerspawner et-xmlfile==1.1.0 # via openpyxl -exceptiongroup==1.2.1 # via anyio +exceptiongroup==1.2.2 ; python_version < '3.11' # via anyio f90wrap==0.2.15 # via quippy-ase fastapi==0.99.1 # via h5grove, nomad-lab (pyproject.toml) fasteners==0.19 # via mdanalysis filelock==3.3.1 # via nomad-lab (pyproject.toml) flask==3.0.3 # via asr -fonttools==4.53.0 # via matplotlib +fonttools==4.53.1 # via matplotlib fqdn==1.5.1 # via jsonschema gitdb==4.0.11 # via gitpython gitpython==3.1.43 # via nomad-lab (pyproject.toml) -greenlet==3.0.3 # via sqlalchemy +greenlet==3.0.3 ; python_version < '3.13' and (platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64') # via sqlalchemy griddataformats==1.0.2 # via mdanalysis gsd==3.3.0 # via mdanalysis gunicorn==21.2.0 # via nomad-lab (pyproject.toml) @@ -72,7 +73,7 @@ httpx==0.27.0 # via python-keycloak, nomad-lab (pyproject.toml) idna==3.7 # via anyio, email-validator, httpx, jsonschema, requests imagesize==1.4.1 # via sphinx importlib-metadata==7.1.0 # via flask, jupyterhub, sphinx, nomad-lab (pyproject.toml) -importlib-resources==6.4.0 # via matplotlib, spglib +importlib-resources==6.4.0 ; python_version < '3.10' # via matplotlib, spglib inflection==0.5.1 # via nomad-lab (pyproject.toml) isodate==0.6.1 # via rdflib isoduration==20.11.0 # via jsonschema @@ -95,16 +96,16 @@ m2r==0.2.1 # via nomad-lab (pyproject.toml) mako==1.3.5 # via alembic markupsafe==2.1.5 # via jinja2, mako, werkzeug matid==2.0.1 # via nomad-lab (pyproject.toml) -matplotlib==3.9.0 # via ase, asr, mdanalysis, phonopy, pymatgen +matplotlib==3.9.1 # via ase, asr, mdanalysis, phonopy, pymatgen mda-xdrlib==0.2.0 # via pyedr mdanalysis==2.5.0 # via nomad-lab (pyproject.toml) mistune==3.0.2 # via m2r mmtf-python==1.1.3 # via mdanalysis mongoengine==0.28.2 # via nomad-lab (pyproject.toml) mongomock==4.1.2 # via optimade -monty==2024.5.24 # via pymatgen +monty==2024.7.12 # via pymatgen mpmath==1.3.0 # via sympy -mrcfile==1.5.0 # via griddataformats +mrcfile==1.5.3 # via griddataformats msgpack==1.0.8 # via mmtf-python, nomad-lab (pyproject.toml) netcdf4==1.6.5 # via nomad-lab (pyproject.toml) networkx==2.6.3 # via matid, mdanalysis, pymatgen, nomad-lab (pyproject.toml) @@ -118,37 +119,41 @@ optimade==0.22.1 # via nomad-lab (pyproject.toml) orjson==3.10.6 # via h5grove, nomad-lab (pyproject.toml) packaging==24.1 # via deprecation, f90wrap, gunicorn, jupyterhub, matplotlib, mdanalysis, mongomock, pint, plotly, sphinx, xarray palettable==3.3.3 # via pymatgen -pamela==1.1.0 # via jupyterhub +pamela==1.1.0 ; sys_platform != 'win32' # via jupyterhub pandas==1.5.3 # via nomad-openbis, panedr, pymatgen, xarray, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml) panedr==0.8.0 # via nomad-lab (pyproject.toml) parmed==4.2.2 # via nomad-lab (pyproject.toml) -phonopy==2.25.0 # via asr +phonopy==2.26.6 # via asr pillow==10.4.0 # via matplotlib, rdkit pint==0.17 # via nomad-lab (pyproject.toml) -plotly==5.22.0 # via asr, pymatgen +plotly==5.23.0 # via asr, pymatgen prometheus-client==0.20.0 # via jupyterhub prompt-toolkit==3.0.47 # via click-repl +psutil==6.0.0 ; sys_platform == 'win32' # via jupyterhub pyasn1==0.6.0 # via pyasn1-modules, rfc3161ng pyasn1-modules==0.4.0 # via rfc3161ng pybtex==0.24.0 # via pymatgen -pycparser==2.22 # via cffi +pycparser==2.22 ; platform_python_implementation != 'PyPy' # via cffi pydantic==1.10.17 # via fastapi, optimade, nomad-lab (pyproject.toml) pyedr==0.8.0 # via panedr pygments==2.18.0 # via sphinx pyjwt==2.6.0 # via nomad-lab (pyproject.toml) +pylibmagic==0.5.0 ; sys_platform == 'darwin' # via nomad-lab (pyproject.toml) pymatgen==2024.5.1 # via asr, nomad-lab (pyproject.toml) pymongo==4.6.3 # via mongoengine, optimade, nomad-lab (pyproject.toml) -pyopenssl==24.1.0 # via certipy +pyopenssl==24.2.1 # via certipy pyparsing==3.1.2 # via matplotlib, rdflib pyrsistent==0.20.0 # via jsonschema python-dateutil==2.9.0.post0 # via arrow, celery, elasticsearch-dsl, jupyterhub, matplotlib, nomad-openbis, pandas, rfc3161ng python-dotenv==1.0.1 # via uvicorn python-json-logger==2.0.2 # via jupyter-telemetry, nomad-lab (pyproject.toml) -python-keycloak==4.2.0 # via nomad-lab (pyproject.toml) +python-keycloak==4.2.3 # via nomad-lab (pyproject.toml) python-logstash==0.4.6 # via nomad-lab (pyproject.toml) python-magic==0.4.24 # via nomad-lab (pyproject.toml) +python-magic-bin==0.4.14 ; sys_platform == 'win32' # via nomad-lab (pyproject.toml) python-multipart==0.0.9 # via nomad-lab (pyproject.toml) pytz==2024.1 # via pandas, nomad-lab (pyproject.toml) +pywin32==306 ; sys_platform == 'win32' # via docker pyyaml==6.0.1 # via phonopy, pybtex, uvicorn, nomad-lab (pyproject.toml) quippy-ase==0.9.14 # via nomad-lab (pyproject.toml) rdflib==5.0.0 # via nomad-lab (pyproject.toml) @@ -160,7 +165,7 @@ rfc3161ng==2.1.3 # via nomad-lab (pyproject.toml) rfc3339-validator==0.1.4 # via jsonschema rfc3987==1.3.8 # via jsonschema ruamel-yaml==0.18.6 # via jupyter-telemetry, oauthenticator, pymatgen -ruamel-yaml-clib==0.2.8 # via ruamel-yaml +ruamel-yaml-clib==0.2.8 ; python_version < '3.13' and platform_python_implementation == 'CPython' # via ruamel-yaml runstats==2.0.0 # via nomad-lab (pyproject.toml) scikit-learn==1.5.1 # via matid, nomad-lab (pyproject.toml) scipy==1.13.1 # via ase, griddataformats, matid, mdanalysis, pymatgen, scikit-learn, nomad-lab (pyproject.toml) @@ -170,38 +175,38 @@ smmap==5.0.1 # via gitdb sniffio==1.3.1 # via anyio, httpx snowballstemmer==2.2.0 # via sphinx soupsieve==2.5 # via beautifulsoup4 -spglib==2.4.0 # via asr, matid, phonopy, pymatgen -sphinx==7.3.7 # via recommonmark +spglib==2.5.0 # via asr, matid, phonopy, pymatgen +sphinx==7.4.7 # via recommonmark sphinxcontrib-applehelp==1.0.8 # via sphinx sphinxcontrib-devhelp==1.0.6 # via sphinx -sphinxcontrib-htmlhelp==2.0.5 # via sphinx +sphinxcontrib-htmlhelp==2.0.6 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.7 # via sphinx +sphinxcontrib-qthelp==1.0.8 # via sphinx sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy==2.0.31 # via alembic, jupyterhub starlette==0.27.0 # via fastapi -structlog==24.2.0 # via nomad-lab (pyproject.toml) -sympy==1.12.1 # via pymatgen +structlog==24.4.0 # via nomad-lab (pyproject.toml) +sympy==1.13.1 # via pymatgen tabulate==0.8.9 # via nomad-openbis, pymatgen, nomad-lab (pyproject.toml) -tenacity==8.4.2 # via plotly +tenacity==8.5.0 # via plotly texttable==1.7.0 # via nomad-openbis threadpoolctl==3.5.0 # via mdanalysis, scikit-learn -tifffile==2024.7.2 # via h5grove -tomli==2.0.1 # via sphinx +tifffile==2024.7.24 # via h5grove +tomli==2.0.1 ; python_version < '3.11' # via sphinx toposort==1.10 # via nomad-lab (pyproject.toml) tornado==6.4.1 # via jupyterhub tqdm==4.66.4 # via mdanalysis, pyedr, pymatgen traitlets==5.14.3 # via jupyter-telemetry, jupyterhub types-python-dateutil==2.9.0.20240316 # via arrow -typing-extensions==4.12.2 # via alembic, anyio, asgiref, fastapi, jwcrypto, kombu, pydantic, sqlalchemy, starlette, uvicorn +typing-extensions==4.12.2 # via alembic, anyio, asgiref, fastapi, jwcrypto, kombu, pydantic, spglib, sqlalchemy, starlette, uvicorn typish==1.9.3 # via nptyping tzdata==2024.1 # via celery -uncertainties==3.2.1 # via pymatgen +uncertainties==3.2.2 # via pymatgen unidecode==1.3.2 # via nomad-lab (pyproject.toml) uri-template==1.3.0 # via jsonschema urllib3==1.26.19 # via docker, elasticsearch, nomad-openbis, requests -uvicorn==0.30.1 # via h5grove, nomad-lab (pyproject.toml) -uvloop==0.19.0 # via uvicorn +uvicorn==0.30.3 # via h5grove, nomad-lab (pyproject.toml) +uvloop==0.19.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' # via uvicorn validators==0.18.2 # via nomad-lab (pyproject.toml) vine==5.1.0 # via amqp, celery, kombu watchfiles==0.22.0 # via uvicorn diff --git a/scripts/check_python_dependencies.sh b/scripts/check_python_dependencies.sh index 5c8c80fd5ffcea4a661074aa627a8dba64e0ebb4..c9412f00f1aeda908da8db07781bd76fe25b2d1f 100755 --- a/scripts/check_python_dependencies.sh +++ b/scripts/check_python_dependencies.sh @@ -21,7 +21,7 @@ grep pynxtools scripts/install_default_plugins.sh | grep "@git+" 1>&2 cp requirements.txt requirements.txt.tmp cp requirements-dev.txt requirements-dev.txt.tmp -uv pip compile -q -U --annotation-style=line \ +uv pip compile -q -U --universal --annotation-style=line \ --extra=infrastructure --extra=parsing \ --output-file=requirements.txt \ dependencies/nomad-dos-fingerprints/pyproject.toml \ @@ -30,7 +30,7 @@ uv pip compile -q -U --annotation-style=line \ diff requirements.txt.tmp requirements.txt -uv pip compile -q -U --annotation-style=line \ +uv pip compile -q -U --universal --annotation-style=line \ --extra=dev --extra=infrastructure --extra=parsing \ --output-file=requirements-dev.txt \ requirements.txt \ diff --git a/scripts/generate_python_dependencies.sh b/scripts/generate_python_dependencies.sh index a08c88fdb9e7eb849a84b967a896a7fb1b382c75..eeb5d4a03b0a35486fb988129621dc5c968c4b39 100755 --- a/scripts/generate_python_dependencies.sh +++ b/scripts/generate_python_dependencies.sh @@ -15,14 +15,14 @@ project_dir=$(dirname $(dirname $(realpath $0))) cd $project_dir -uv pip compile -U -p 3.9 --annotation-style=line \ +uv pip compile -U --universal --annotation-style=line \ --extra=infrastructure --extra=parsing \ --output-file=requirements.txt \ dependencies/nomad-dos-fingerprints/pyproject.toml \ dependencies/parsers/eelsdb/pyproject.toml \ pyproject.toml -uv pip compile -U -p 3.9 --annotation-style=line \ +uv pip compile -U --universal --annotation-style=line \ --extra=dev --extra=infrastructure --extra=parsing \ --output-file=requirements-dev.txt \ requirements.txt \ diff --git a/tests/app/v1/routers/test_systems.py b/tests/app/v1/routers/test_systems.py index 40beb917bac514fb283090be6d0ce436ac9e7118..fe261c95348a121c3ec87207d9c0dea6aefc88a5 100644 --- a/tests/app/v1/routers/test_systems.py +++ b/tests/app/v1/routers/test_systems.py @@ -400,31 +400,31 @@ def test_indices(path, filename, n_atoms, client, example_data_systems): ), pytest.param( '/run/0/system/3', - WrapModeEnum.original, + WrapModeEnum.original, # type: ignore [[-15, -15, -15], [17, 17, 17]], id='original', ), pytest.param( '/run/0/system/3', - WrapModeEnum.wrap, + WrapModeEnum.wrap, # type: ignore [[0, 0, 0], [2, 2, 2]], id='wrap, pbc=[1, 1, 1]', ), pytest.param( '/run/0/system/4', - WrapModeEnum.wrap, + WrapModeEnum.wrap, # type: ignore [[-15, -15, -15], [17, 17, 17]], id='wrap, pbc=[0, 0, 0]', ), pytest.param( '/run/0/system/3', - WrapModeEnum.unwrap, + WrapModeEnum.unwrap, # type: ignore [[1.5, 1.5, 1.5], [3.5, 3.5, 3.5]], id='unwrap, pbc=[1, 1, 1]', ), pytest.param( '/run/0/system/4', - WrapModeEnum.unwrap, + WrapModeEnum.unwrap, # type: ignore [[-15, -15, -15], [17, 17, 17]], id='unwrap, pbc=[0, 0, 0]', ),