From d53ffc10ae9dfb697be1f7c6aa6b89c6e50d5f74 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Mon, 27 Apr 2026 16:45:23 -0700 Subject: [PATCH 1/3] test up to py3.14 and update precommit --- .github/workflows/lint.yml | 2 +- .github/workflows/release.yml | 10 ++++++--- .github/workflows/testing.yml | 2 +- .github/workflows/upgrade_dependencies.yml | 4 ++-- .pre-commit-config.yaml | 10 ++++----- mp_api/client/__init__.py | 1 + mp_api/client/core/client.py | 2 +- mp_api/client/mprester.py | 18 ++++++++-------- mp_api/client/routes/materials/__init__.py | 1 + mp_api/client/routes/materials/chemenv.py | 24 +++++++++++----------- mp_api/client/routes/materials/tasks.py | 11 ++-------- mp_api/client/routes/materials/xas.py | 8 +++++--- mp_api/client/routes/molecules/__init__.py | 1 + mp_api/mcp/_schemas.py | 1 + mp_api/mcp/mp_mcp.py | 1 + mp_api/mcp/server.py | 1 + mp_api/mcp/tools.py | 7 ++++--- tests/client/test_client.py | 1 - tests/client/test_mprester.py | 18 ++++++++-------- 19 files changed, 65 insertions(+), 58 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index fa9e9a156..a037dc5fe 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.11" + python-version: "3.12" cache: pip - name: Install dependencies diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3eef9d050..c6b8d2d97 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: 3.12 - name: Install dependencies run: | @@ -36,20 +36,24 @@ jobs: docs: runs-on: ubuntu-latest + needs: - deploy + env: + PYTHON_VERSION: 3.12 + steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: ${{ env.PYTHON_VERSION }} - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r requirements/requirements-ubuntu-latest_py3.11_extras.txt + pip install -r requirements/requirements-ubuntu-latest_py${{ env.PYTHON_VERSION }}_extras.txt pip install -e . - name: Build diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index f5fa10ad5..a30f08b45 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -17,7 +17,7 @@ jobs: strategy: matrix: os: ["ubuntu-latest"] - python-version: ["3.11", "3.12"] + python-version: ["3.12", "3.13", "3.14"] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/upgrade_dependencies.yml b/.github/workflows/upgrade_dependencies.yml index ad1e98d7e..bdc986913 100644 --- a/.github/workflows/upgrade_dependencies.yml +++ b/.github/workflows/upgrade_dependencies.yml @@ -11,7 +11,7 @@ jobs: matrix: os: ['ubuntu-latest'] package: ["mp-api"] - python-version: ["3.11", "3.12"] + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v4 with: @@ -49,7 +49,7 @@ jobs: needs: upgrade strategy: matrix: - python-version: ["3.11"] + python-version: ["3.12"] steps: - uses: actions/checkout@v4 with: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a2ffbc9d0..acc6ca6ef 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,24 +6,24 @@ ci: repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.0.292 + rev: v0.15.12 hooks: - id: ruff args: [--fix, --show-fixes] - repo: https://github.com/psf/black - rev: 23.9.1 + rev: 26.3.1 hooks: - id: black - repo: https://github.com/asottile/blacken-docs - rev: "1.16.0" + rev: "1.20.0" hooks: - id: blacken-docs additional_dependencies: [black>=23.7.0] - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v6.0.0 hooks: - id: check-case-conflict - id: check-symlinks @@ -34,7 +34,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/codespell-project/codespell - rev: v2.2.6 + rev: v2.4.2 hooks: - id: codespell stages: [pre-commit, commit-msg] diff --git a/mp_api/client/__init__.py b/mp_api/client/__init__.py index 5007aa17f..3eb2b879b 100644 --- a/mp_api/client/__init__.py +++ b/mp_api/client/__init__.py @@ -1,4 +1,5 @@ """Primary MAPI module.""" + from __future__ import annotations import logging diff --git a/mp_api/client/core/client.py b/mp_api/client/core/client.py index 75f8fd0de..dac0076a9 100644 --- a/mp_api/client/core/client.py +++ b/mp_api/client/core/client.py @@ -1045,7 +1045,7 @@ def _submit_requests( ) # Paginate through remaining results - skip = chunk_size if "_limit" not in criteria else criteria["_limit"] + skip = criteria.get("_limit") or chunk_size remaining_docs = total_num_docs - initial_data_length while total_data_len < num_docs_needed and remaining_docs > 0: diff --git a/mp_api/client/mprester.py b/mp_api/client/mprester.py index 5bda5310b..d1b5b069d 100644 --- a/mp_api/client/mprester.py +++ b/mp_api/client/mprester.py @@ -662,11 +662,13 @@ def get_entries( def get_pourbaix_entries( self, chemsys: str | list[str] | list[ComputedEntry | ComputedStructureEntry], - solid_compat: Literal[ - "MaterialsProjectCompatibility", "MaterialsProject2020Compatibility" - ] - | Compatibility - | None = "MaterialsProject2020Compatibility", + solid_compat: ( + Literal[ + "MaterialsProjectCompatibility", "MaterialsProject2020Compatibility" + ] + | Compatibility + | None + ) = "MaterialsProject2020Compatibility", use_gibbs: Literal[300] | None = None, ) -> list[PourbaixEntry]: """A helper function to get all entries necessary to generate @@ -1389,13 +1391,11 @@ def query(*args, **kwargs): Note this method also no longer supports direct MongoDB-type queries. For more information, please see the new documentation. """ - raise NotImplementedError( - """ + raise NotImplementedError(""" The MPRester().query method has been replaced with the MPRester().summary.search method. Note this method also no longer supports direct MongoDB-type queries. For more information, please see the new documentation. - """ - ) + """) def get_cohesive_energy( self, diff --git a/mp_api/client/routes/materials/__init__.py b/mp_api/client/routes/materials/__init__.py index 7944139a2..589dbee87 100644 --- a/mp_api/client/routes/materials/__init__.py +++ b/mp_api/client/routes/materials/__init__.py @@ -1,4 +1,5 @@ """Define routes and imports to non-core materials resters.""" + from __future__ import annotations from mp_api.client.core.utils import LazyImport diff --git a/mp_api/client/routes/materials/chemenv.py b/mp_api/client/routes/materials/chemenv.py index ffec91b65..5c80690ca 100644 --- a/mp_api/client/routes/materials/chemenv.py +++ b/mp_api/client/routes/materials/chemenv.py @@ -22,18 +22,18 @@ class ChemenvRester(BaseRester): def search( self, material_ids: str | list[str] | None = None, - chemenv_iucr: COORDINATION_GEOMETRIES_IUCR - | list[COORDINATION_GEOMETRIES_IUCR] - | None = None, - chemenv_iupac: COORDINATION_GEOMETRIES_IUPAC - | list[COORDINATION_GEOMETRIES_IUPAC] - | None = None, - chemenv_name: COORDINATION_GEOMETRIES_NAMES - | list[COORDINATION_GEOMETRIES_NAMES] - | None = None, - chemenv_symbol: COORDINATION_GEOMETRIES - | list[COORDINATION_GEOMETRIES] - | None = None, + chemenv_iucr: ( + COORDINATION_GEOMETRIES_IUCR | list[COORDINATION_GEOMETRIES_IUCR] | None + ) = None, + chemenv_iupac: ( + COORDINATION_GEOMETRIES_IUPAC | list[COORDINATION_GEOMETRIES_IUPAC] | None + ) = None, + chemenv_name: ( + COORDINATION_GEOMETRIES_NAMES | list[COORDINATION_GEOMETRIES_NAMES] | None + ) = None, + chemenv_symbol: ( + COORDINATION_GEOMETRIES | list[COORDINATION_GEOMETRIES] | None + ) = None, species: str | list[str] | None = None, elements: str | list[str] | None = None, exclude_elements: list[str] | None = None, diff --git a/mp_api/client/routes/materials/tasks.py b/mp_api/client/routes/materials/tasks.py index ab34c000f..66a03758f 100644 --- a/mp_api/client/routes/materials/tasks.py +++ b/mp_api/client/routes/materials/tasks.py @@ -52,18 +52,11 @@ def get_trajectory( storage_options={"AWS_SKIP_SIGNATURE": "true", "AWS_REGION": "us-east-1"}, ) - traj_data = pa.table( - QueryBuilder() - .register("traj", traj_tbl) - .execute( - f""" + traj_data = pa.table(QueryBuilder().register("traj", traj_tbl).execute(f""" SELECT * FROM traj {predicate}; - """ - ) - .read_all() - ).to_pylist(maps_as_pydicts="strict") + """).read_all()).to_pylist(maps_as_pydicts="strict") if not traj_data: raise MPRestError(f"No trajectory data for {task_id} found") diff --git a/mp_api/client/routes/materials/xas.py b/mp_api/client/routes/materials/xas.py index fc71ae7ff..a4f164f88 100644 --- a/mp_api/client/routes/materials/xas.py +++ b/mp_api/client/routes/materials/xas.py @@ -71,9 +71,11 @@ def search( if absorbing_element: query_params.update( { - "absorbing_element": str(absorbing_element.symbol) - if type(absorbing_element) == Element - else absorbing_element + "absorbing_element": ( + str(absorbing_element.symbol) + if isinstance(absorbing_element, Element) + else absorbing_element + ) } ) for k in ("chemsys", "elements", "material_ids", "spectrum_ids"): diff --git a/mp_api/client/routes/molecules/__init__.py b/mp_api/client/routes/molecules/__init__.py index 22ffb17bf..8688a8f9d 100644 --- a/mp_api/client/routes/molecules/__init__.py +++ b/mp_api/client/routes/molecules/__init__.py @@ -1,4 +1,5 @@ """Define routes to non-core molecules resters.""" + from __future__ import annotations from mp_api.client.core.utils import LazyImport diff --git a/mp_api/mcp/_schemas.py b/mp_api/mcp/_schemas.py index 4d6d32bf1..8517dc6e7 100644 --- a/mp_api/mcp/_schemas.py +++ b/mp_api/mcp/_schemas.py @@ -1,4 +1,5 @@ """Define auxiliary schemas used by some LLMs.""" + from __future__ import annotations from typing import Any diff --git a/mp_api/mcp/mp_mcp.py b/mp_api/mcp/mp_mcp.py index 36199bc2f..866d7467f 100644 --- a/mp_api/mcp/mp_mcp.py +++ b/mp_api/mcp/mp_mcp.py @@ -1,4 +1,5 @@ """Define custom MCP tools for the Materials Project API.""" + from __future__ import annotations from fastmcp import FastMCP diff --git a/mp_api/mcp/server.py b/mp_api/mcp/server.py index 8fdf6b6f1..659404f29 100644 --- a/mp_api/mcp/server.py +++ b/mp_api/mcp/server.py @@ -1,4 +1,5 @@ """Configure the Materials Project MCP server.""" + from __future__ import annotations from argparse import ArgumentParser diff --git a/mp_api/mcp/tools.py b/mp_api/mcp/tools.py index 6fcfe8e2c..f7b740046 100644 --- a/mp_api/mcp/tools.py +++ b/mp_api/mcp/tools.py @@ -308,9 +308,10 @@ def get_phase_diagram_from_elements( self, elements: str, thermo_type: Literal[ # type: ignore[valid-type] - *[x.value for x in ThermoType.__members__.values() if x.value != "UNKNOWN"] - ] - | str = "GGA_GGA+U_R2SCAN", + "GGA_GGA+U", + "GGA_GGA+U_R2SCAN", + "R2SCAN", + ] = "GGA_GGA+U_R2SCAN", ) -> plotly_go.Figure: """Find a thermodynamic phase diagram in the Materials Project by specified elements. diff --git a/tests/client/test_client.py b/tests/client/test_client.py index 38eec6676..7d91f6e5d 100644 --- a/tests/client/test_client.py +++ b/tests/client/test_client.py @@ -5,7 +5,6 @@ from mp_api._test_utils import requires_api_key from mp_api.client import MPRester - try: import pymatgen.analysis.alloys as pmg_alloys except ImportError: diff --git a/tests/client/test_mprester.py b/tests/client/test_mprester.py index 9661833d6..67b87d01c 100644 --- a/tests/client/test_mprester.py +++ b/tests/client/test_mprester.py @@ -39,7 +39,6 @@ from mp_api.client import MPRester from mp_api.client.core import MPRestError, MPRestWarning - try: import mpcontribs.client as contribs_client except ImportError: @@ -536,9 +535,9 @@ def test_get_cohesive_energy(self): for norm, refs in ref_e_coh.items(): _e_coh = _mpr.get_cohesive_energy(list(refs), normalization=norm) if norm == "atom": - e_coh[ - "serial" if use_document_model else "noserial" - ] = _e_coh.copy() + e_coh["serial" if use_document_model else "noserial"] = ( + _e_coh.copy() + ) # Ensure energies match reference data assert all(v == pytest.approx(refs[k]) for k, v in _e_coh.items()) @@ -661,10 +660,13 @@ def test_oxygen_evolution_bad_input(self, mpr): def test_nomad_integration(self, mpr): # No particular reason for this MPID other than that it exists in NOMAD. target_mpid = "mp-10018" - with pytest.warns( - MPRestWarning, match="Full downloads of raw data are being transitioned" - ), pytest.warns( - MPRestWarning, match="the following ids are not found on NOMAD" + with ( + pytest.warns( + MPRestWarning, match="Full downloads of raw data are being transitioned" + ), + pytest.warns( + MPRestWarning, match="the following ids are not found on NOMAD" + ), ): calc_type_map, nomad_urls = mpr.get_download_info( target_mpid, file_patterns=["some_pattern"] From 15a5c69607be174a35bac3f78a5a283a1ef1bd03 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Mon, 27 Apr 2026 17:03:45 -0700 Subject: [PATCH 2/3] add reqs files --- .../requirements-ubuntu-latest_py3.13.txt | 176 +++++ ...quirements-ubuntu-latest_py3.13_extras.txt | 683 ++++++++++++++++++ .../requirements-ubuntu-latest_py3.14.txt | 176 +++++ ...quirements-ubuntu-latest_py3.14_extras.txt | 683 ++++++++++++++++++ 4 files changed, 1718 insertions(+) create mode 100644 requirements/requirements-ubuntu-latest_py3.13.txt create mode 100644 requirements/requirements-ubuntu-latest_py3.13_extras.txt create mode 100644 requirements/requirements-ubuntu-latest_py3.14.txt create mode 100644 requirements/requirements-ubuntu-latest_py3.14_extras.txt diff --git a/requirements/requirements-ubuntu-latest_py3.13.txt b/requirements/requirements-ubuntu-latest_py3.13.txt new file mode 100644 index 000000000..85ff02002 --- /dev/null +++ b/requirements/requirements-ubuntu-latest_py3.13.txt @@ -0,0 +1,176 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --output-file=requirements/requirements-ubuntu-latest_py3.12.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +arro3-core==0.8.0 + # via deltalake +bibtexparser==1.4.4 + # via pymatgen-core +blake3==1.0.8 + # via emmet-core +boto3==1.42.94 + # via mp-api (pyproject.toml) +botocore==1.42.94 + # via + # boto3 + # s3transfer +certifi==2026.4.22 + # via requests +charset-normalizer==3.4.7 + # via requests +contourpy==1.3.3 + # via matplotlib +cycler==0.12.1 + # via matplotlib +deltalake==1.5.1 + # via mp-api (pyproject.toml) +deprecated==1.3.1 + # via deltalake +emmet-core==0.86.4rc2 + # via mp-api (pyproject.toml) +fonttools==4.62.1 + # via matplotlib +idna==3.13 + # via requests +inflect==7.5.0 + # via emmet-core +jmespath==1.1.0 + # via + # boto3 + # botocore +joblib==1.5.3 + # via pymatgen-core +kiwisolver==1.5.0 + # via matplotlib +latexcodec==3.0.1 + # via pybtex +lxml==6.1.0 + # via pymatgen-core +matplotlib==3.10.8 + # via pymatgen-core +monty==2026.2.18 + # via + # emmet-core + # mp-api (pyproject.toml) + # pymatgen-core +more-itertools==11.0.2 + # via inflect +mpmath==1.3.0 + # via sympy +narwhals==2.20.0 + # via plotly +networkx==3.6.1 + # via pymatgen-core +numpy==2.4.4 + # via + # contourpy + # matplotlib + # monty + # pandas + # pymatgen-core + # pymatgen-io-validation + # scipy + # spglib +orjson==3.11.8 + # via + # mp-api (pyproject.toml) + # pymatgen-core +packaging==26.1 + # via + # matplotlib + # plotly +palettable==3.3.3 + # via pymatgen-core +pandas==3.0.2 + # via pymatgen-core +pillow==12.2.0 + # via matplotlib +plotly==6.7.0 + # via pymatgen-core +pubchempy==1.0.5 + # via emmet-core +pyarrow==24.0.0 + # via mp-api (pyproject.toml) +pybtex==0.26.1 + # via emmet-core +pydantic==2.13.3 + # via + # emmet-core + # pydantic-settings + # pymatgen-io-validation +pydantic-core==2.46.3 + # via pydantic +pydantic-settings==2.14.0 + # via + # emmet-core + # pymatgen-io-validation +pymatgen==2026.3.23 + # via + # emmet-core + # mp-api (pyproject.toml) + # pymatgen-io-validation +pymatgen-core==2026.4.16 + # via pymatgen +pymatgen-io-validation==0.1.2 + # via emmet-core +pyparsing==3.3.2 + # via + # bibtexparser + # matplotlib +python-dateutil==2.9.0.post0 + # via + # botocore + # matplotlib + # pandas +python-dotenv==1.2.2 + # via pydantic-settings +pyyaml==6.0.3 + # via pybtex +requests==2.33.1 + # via + # mp-api (pyproject.toml) + # pymatgen-core + # pymatgen-io-validation +ruamel-yaml==0.19.1 + # via monty +s3transfer==0.16.1 + # via boto3 +scipy==1.17.1 + # via pymatgen-core +six==1.17.0 + # via python-dateutil +spglib==2.7.0 + # via pymatgen-core +sympy==1.14.0 + # via pymatgen-core +tabulate==0.10.0 + # via pymatgen-core +tqdm==4.67.3 + # via pymatgen-core +typeguard==4.5.1 + # via inflect +typing-extensions==4.15.0 + # via + # emmet-core + # mp-api (pyproject.toml) + # pydantic + # pydantic-core + # spglib + # typeguard + # typing-inspection +typing-inspection==0.4.2 + # via + # pydantic + # pydantic-settings +uncertainties==3.2.3 + # via pymatgen-core +urllib3==2.6.3 + # via + # botocore + # requests +wrapt==2.1.2 + # via deprecated diff --git a/requirements/requirements-ubuntu-latest_py3.13_extras.txt b/requirements/requirements-ubuntu-latest_py3.13_extras.txt new file mode 100644 index 000000000..fcf1449ee --- /dev/null +++ b/requirements/requirements-ubuntu-latest_py3.13_extras.txt @@ -0,0 +1,683 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --all-extras --output-file=requirements/requirements-ubuntu-latest_py3.12_extras.txt pyproject.toml +# +aiofile==3.9.0 + # via py-key-value-aio +alabaster==1.0.0 + # via sphinx +annotated-types==0.7.0 + # via pydantic +anyio==4.13.0 + # via + # httpx + # mcp + # py-key-value-aio + # sse-starlette + # starlette + # watchfiles +arro3-core==0.8.0 + # via deltalake +arrow==1.4.0 + # via isoduration +ase==3.28.0 + # via pymatgen-analysis-diffusion +asttokens==3.0.1 + # via stack-data +attrs==26.1.0 + # via + # cyclopts + # jsonschema + # referencing +authlib==1.7.0 + # via fastmcp +babel==2.18.0 + # via sphinx +beartype==0.22.9 + # via py-key-value-aio +bibtexparser==1.4.4 + # via pymatgen-core +blake3==1.0.8 + # via emmet-core +blinker==1.9.0 + # via flask +boltons==25.0.0 + # via mpcontribs-client +boto3==1.42.94 + # via mp-api (pyproject.toml) +botocore==1.42.94 + # via + # boto3 + # s3transfer +bravado==12.0.1 + # via mpcontribs-client +bravado-core==6.3.1 + # via bravado +cachetools==7.0.6 + # via + # mpcontribs-client + # py-key-value-aio +caio==0.9.25 + # via aiofile +certifi==2026.4.22 + # via + # httpcore + # httpx + # requests +cffi==2.0.0 + # via cryptography +cfgv==3.5.0 + # via pre-commit +charset-normalizer==3.4.7 + # via requests +click==8.3.3 + # via + # flask + # uvicorn +contourpy==1.3.3 + # via matplotlib +coverage[toml]==7.13.5 + # via pytest-cov +cryptography==46.0.7 + # via + # authlib + # joserfc + # pyjwt + # secretstorage +custodian==2025.12.14 + # via mp-api (pyproject.toml) +cycler==0.12.1 + # via matplotlib +cyclopts==4.11.0 + # via fastmcp +decorator==5.2.1 + # via ipython +deltalake==1.5.1 + # via mp-api (pyproject.toml) +deprecated==1.3.1 + # via deltalake +distlib==0.4.0 + # via virtualenv +dnspython==2.8.0 + # via + # email-validator + # pyisemail + # pymongo +docstring-parser==0.18.0 + # via cyclopts +docutils==0.22.4 + # via + # rich-rst + # sphinx +email-validator==2.3.0 + # via pydantic +emmet-core[all]==0.86.4rc2 + # via mp-api (pyproject.toml) +exceptiongroup==1.3.1 + # via fastmcp +execnet==2.1.2 + # via pytest-xdist +executing==2.2.1 + # via stack-data +fastmcp==3.2.4 + # via mp-api (pyproject.toml) +filelock==3.29.0 + # via + # python-discovery + # virtualenv +filetype==1.2.0 + # via mpcontribs-client +flake8==7.3.0 + # via mp-api (pyproject.toml) +flask==3.1.3 + # via mp-api (pyproject.toml) +flatten-dict==0.4.2 + # via mpcontribs-client +flexcache==0.3 + # via pint +flexparser==0.4 + # via pint +fonttools==4.62.1 + # via matplotlib +fqdn==1.5.1 + # via jsonschema +griffelib==2.0.2 + # via fastmcp +h11==0.16.0 + # via + # httpcore + # uvicorn +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # fastmcp + # mcp +httpx-sse==0.4.3 + # via mcp +identify==2.6.19 + # via pre-commit +idna==3.13 + # via + # anyio + # email-validator + # httpx + # jsonschema + # requests +imageio==2.37.3 + # via scikit-image +imagesize==2.0.0 + # via sphinx +importlib-metadata==8.7.1 + # via opentelemetry-api +importlib-resources==7.1.0 + # via swagger-spec-validator +inflect==7.5.0 + # via emmet-core +iniconfig==2.3.0 + # via pytest +ipython==9.12.0 + # via mpcontribs-client +ipython-pygments-lexers==1.1.1 + # via ipython +isoduration==20.11.0 + # via jsonschema +itsdangerous==2.2.0 + # via flask +jaraco-classes==3.4.0 + # via keyring +jaraco-context==6.1.2 + # via keyring +jaraco-functools==4.4.0 + # via keyring +jedi==0.19.2 + # via ipython +jeepney==0.9.0 + # via + # keyring + # secretstorage +jinja2==3.1.6 + # via + # flask + # sphinx +jmespath==1.1.0 + # via + # boto3 + # botocore +joblib==1.5.3 + # via + # pymatgen-analysis-diffusion + # pymatgen-core +joserfc==1.6.4 + # via authlib +json2html==1.3.0 + # via mpcontribs-client +jsonpointer==3.1.1 + # via jsonschema +jsonref==1.1.0 + # via + # bravado-core + # fastmcp +jsonschema[format-nongpl]==4.26.0 + # via + # bravado-core + # mcp + # swagger-spec-validator +jsonschema-path==0.4.5 + # via fastmcp +jsonschema-specifications==2025.9.1 + # via jsonschema +keyring==25.7.0 + # via py-key-value-aio +kiwisolver==1.5.0 + # via matplotlib +lark==1.3.1 + # via rfc3987-syntax +latexcodec==3.0.1 + # via pybtex +lazy-loader==0.5 + # via scikit-image +librt==0.9.0 + # via mypy +lxml==6.1.0 + # via pymatgen-core +markdown-it-py==4.0.0 + # via rich +markupsafe==3.0.3 + # via + # flask + # jinja2 + # werkzeug +matplotlib==3.10.8 + # via + # ase + # pymatgen-core + # seaborn +matplotlib-inline==0.2.1 + # via ipython +mccabe==0.7.0 + # via flake8 +mcp==1.27.0 + # via fastmcp +mdurl==0.1.2 + # via markdown-it-py +monotonic==1.6 + # via bravado +monty==2026.2.18 + # via + # custodian + # emmet-core + # mp-api (pyproject.toml) + # pymatgen-core +more-itertools==11.0.2 + # via + # inflect + # jaraco-classes + # jaraco-functools +mp-pyrho==0.5.1 + # via pymatgen-analysis-defects +mpcontribs-client==5.10.5 + # via mp-api (pyproject.toml) +mpmath==1.3.0 + # via sympy +msgpack==1.1.2 + # via + # bravado + # bravado-core +mypy==1.20.2 + # via mp-api (pyproject.toml) +mypy-extensions==1.1.0 + # via + # mp-api (pyproject.toml) + # mypy +narwhals==2.20.0 + # via plotly +networkx==3.6.1 + # via + # pymatgen-core + # scikit-image +nodeenv==1.10.0 + # via pre-commit +numpy==2.4.4 + # via + # ase + # contourpy + # imageio + # matplotlib + # monty + # mpcontribs-client + # pandas + # pymatgen-analysis-defects + # pymatgen-analysis-diffusion + # pymatgen-core + # pymatgen-io-validation + # scikit-image + # scipy + # seaborn + # seekpath + # shapely + # spglib + # tifffile +openapi-pydantic==0.5.1 + # via fastmcp +opentelemetry-api==1.41.0 + # via fastmcp +orjson==3.11.8 + # via + # mp-api (pyproject.toml) + # pymatgen-core +packaging==26.1 + # via + # fastmcp + # lazy-loader + # matplotlib + # plotly + # pytest + # scikit-image + # sphinx +palettable==3.3.3 + # via pymatgen-core +pandas==3.0.2 + # via + # mpcontribs-client + # pymatgen-core + # seaborn +parso==0.8.6 + # via jedi +pathable==0.5.0 + # via jsonschema-path +pathspec==1.1.0 + # via mypy +pexpect==4.9.0 + # via ipython +pillow==12.2.0 + # via + # imageio + # matplotlib + # scikit-image +pint==0.25.3 + # via mpcontribs-client +platformdirs==4.9.6 + # via + # fastmcp + # pint + # python-discovery + # virtualenv +plotly==6.7.0 + # via + # mpcontribs-client + # pymatgen-core +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pre-commit==4.6.0 + # via mp-api (pyproject.toml) +prompt-toolkit==3.0.52 + # via ipython +psutil==7.2.2 + # via custodian +ptyprocess==0.7.0 + # via pexpect +pubchempy==1.0.5 + # via emmet-core +pure-eval==0.2.3 + # via stack-data +py-key-value-aio[filetree,keyring,memory]==0.4.4 + # via fastmcp +pyarrow==24.0.0 + # via + # emmet-core + # mp-api (pyproject.toml) +pybtex==0.26.1 + # via emmet-core +pycodestyle==2.14.0 + # via + # flake8 + # mp-api (pyproject.toml) +pycparser==3.0 + # via cffi +pydantic[email]==2.13.3 + # via + # emmet-core + # fastmcp + # mcp + # openapi-pydantic + # pydantic-settings + # pymatgen-io-validation +pydantic-core==2.46.3 + # via pydantic +pydantic-settings==2.14.0 + # via + # emmet-core + # mcp + # pymatgen-io-validation +pyflakes==3.4.0 + # via flake8 +pygments==2.20.0 + # via + # ipython + # ipython-pygments-lexers + # pytest + # rich + # sphinx +pyisemail==2.0.1 + # via mpcontribs-client +pyjwt[crypto]==2.12.1 + # via mcp +pymatgen==2026.3.23 + # via + # emmet-core + # mp-api (pyproject.toml) + # mp-pyrho + # mpcontribs-client + # pymatgen-analysis-alloys + # pymatgen-analysis-defects + # pymatgen-analysis-diffusion + # pymatgen-io-validation +pymatgen-analysis-alloys==0.0.8 + # via emmet-core +pymatgen-analysis-defects==2026.3.20 + # via emmet-core +pymatgen-analysis-diffusion==2025.11.15 + # via emmet-core +pymatgen-core==2026.4.16 + # via pymatgen +pymatgen-io-validation==0.1.2 + # via emmet-core +pymongo==4.17.0 + # via + # emmet-core + # mpcontribs-client +pyparsing==3.3.2 + # via + # bibtexparser + # matplotlib +pyperclip==1.11.0 + # via fastmcp +pytest==9.0.3 + # via + # mp-api (pyproject.toml) + # pytest-asyncio + # pytest-cov + # pytest-mock + # pytest-xdist +pytest-asyncio==1.3.0 + # via mp-api (pyproject.toml) +pytest-cov==7.1.0 + # via mp-api (pyproject.toml) +pytest-mock==3.15.1 + # via mp-api (pyproject.toml) +pytest-xdist==3.8.0 + # via mp-api (pyproject.toml) +python-dateutil==2.9.0.post0 + # via + # arrow + # botocore + # bravado + # bravado-core + # matplotlib + # pandas +python-discovery==1.2.2 + # via virtualenv +python-dotenv==1.2.2 + # via + # fastmcp + # pydantic-settings +python-multipart==0.0.26 + # via mcp +pytz==2026.1.post1 + # via bravado-core +pyyaml==6.0.3 + # via + # bravado + # bravado-core + # fastmcp + # jsonschema-path + # pre-commit + # pybtex + # swagger-spec-validator +referencing==0.37.0 + # via + # jsonschema + # jsonschema-path + # jsonschema-specifications +requests==2.33.1 + # via + # bravado + # bravado-core + # mp-api (pyproject.toml) + # pymatgen-core + # pymatgen-io-validation + # requests-futures + # sphinx +requests-futures==1.0.2 + # via mpcontribs-client +rfc3339-validator==0.1.4 + # via jsonschema +rfc3986-validator==0.1.1 + # via jsonschema +rfc3987-syntax==1.1.0 + # via jsonschema +rich==15.0.0 + # via + # cyclopts + # fastmcp + # rich-rst +rich-rst==1.3.2 + # via cyclopts +roman-numerals==4.1.0 + # via sphinx +rpds-py==0.30.0 + # via + # jsonschema + # referencing +ruamel-yaml==0.19.1 + # via + # custodian + # monty +s3transfer==0.16.1 + # via boto3 +scikit-image==0.26.0 + # via pymatgen-analysis-defects +scipy==1.17.1 + # via + # ase + # pymatgen-core + # scikit-image +seaborn==0.13.2 + # via pymatgen-analysis-diffusion +secretstorage==3.5.0 + # via keyring +seekpath==2.2.1 + # via emmet-core +shapely==2.1.2 + # via pymatgen-analysis-alloys +simplejson==4.1.0 + # via + # bravado + # bravado-core +six==1.17.0 + # via + # bravado + # bravado-core + # flatten-dict + # python-dateutil + # rfc3339-validator +snowballstemmer==3.0.1 + # via sphinx +spglib==2.7.0 + # via + # pymatgen-core + # seekpath +sphinx==9.1.0 + # via mp-api (pyproject.toml) +sphinxcontrib-applehelp==2.0.0 + # via sphinx +sphinxcontrib-devhelp==2.0.0 + # via sphinx +sphinxcontrib-htmlhelp==2.1.0 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==2.0.0 + # via sphinx +sphinxcontrib-serializinghtml==2.0.0 + # via sphinx +sse-starlette==3.3.4 + # via mcp +stack-data==0.6.3 + # via ipython +starlette==1.0.0 + # via + # mcp + # sse-starlette +swagger-spec-validator==3.0.4 + # via + # bravado-core + # mpcontribs-client +sympy==1.14.0 + # via pymatgen-core +tabulate==0.10.0 + # via pymatgen-core +tifffile==2026.4.11 + # via scikit-image +tqdm==4.67.3 + # via + # mpcontribs-client + # pymatgen-core +traitlets==5.14.3 + # via + # ipython + # matplotlib-inline +typeguard==4.5.1 + # via inflect +types-requests==2.33.0.20260408 + # via mp-api (pyproject.toml) +types-setuptools==82.0.0.20260408 + # via mp-api (pyproject.toml) +typing-extensions==4.15.0 + # via + # anyio + # bravado + # emmet-core + # exceptiongroup + # flexcache + # flexparser + # mcp + # mp-api (pyproject.toml) + # mypy + # opentelemetry-api + # pint + # py-key-value-aio + # pydantic + # pydantic-core + # pytest-asyncio + # referencing + # spglib + # starlette + # swagger-spec-validator + # typeguard + # typing-inspection +typing-inspection==0.4.2 + # via + # mcp + # pydantic + # pydantic-settings +tzdata==2026.1 + # via arrow +ujson==5.12.0 + # via mpcontribs-client +uncalled-for==0.3.1 + # via fastmcp +uncertainties==3.2.3 + # via pymatgen-core +uri-template==1.3.0 + # via jsonschema +urllib3==2.6.3 + # via + # botocore + # requests + # types-requests +uvicorn==0.46.0 + # via + # fastmcp + # mcp +virtualenv==21.2.4 + # via pre-commit +watchfiles==1.1.1 + # via fastmcp +wcwidth==0.6.0 + # via prompt-toolkit +webcolors==25.10.0 + # via jsonschema +websockets==16.0 + # via fastmcp +werkzeug==3.1.8 + # via flask +wrapt==2.1.2 + # via deprecated +zipp==3.23.1 + # via importlib-metadata diff --git a/requirements/requirements-ubuntu-latest_py3.14.txt b/requirements/requirements-ubuntu-latest_py3.14.txt new file mode 100644 index 000000000..85ff02002 --- /dev/null +++ b/requirements/requirements-ubuntu-latest_py3.14.txt @@ -0,0 +1,176 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --output-file=requirements/requirements-ubuntu-latest_py3.12.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +arro3-core==0.8.0 + # via deltalake +bibtexparser==1.4.4 + # via pymatgen-core +blake3==1.0.8 + # via emmet-core +boto3==1.42.94 + # via mp-api (pyproject.toml) +botocore==1.42.94 + # via + # boto3 + # s3transfer +certifi==2026.4.22 + # via requests +charset-normalizer==3.4.7 + # via requests +contourpy==1.3.3 + # via matplotlib +cycler==0.12.1 + # via matplotlib +deltalake==1.5.1 + # via mp-api (pyproject.toml) +deprecated==1.3.1 + # via deltalake +emmet-core==0.86.4rc2 + # via mp-api (pyproject.toml) +fonttools==4.62.1 + # via matplotlib +idna==3.13 + # via requests +inflect==7.5.0 + # via emmet-core +jmespath==1.1.0 + # via + # boto3 + # botocore +joblib==1.5.3 + # via pymatgen-core +kiwisolver==1.5.0 + # via matplotlib +latexcodec==3.0.1 + # via pybtex +lxml==6.1.0 + # via pymatgen-core +matplotlib==3.10.8 + # via pymatgen-core +monty==2026.2.18 + # via + # emmet-core + # mp-api (pyproject.toml) + # pymatgen-core +more-itertools==11.0.2 + # via inflect +mpmath==1.3.0 + # via sympy +narwhals==2.20.0 + # via plotly +networkx==3.6.1 + # via pymatgen-core +numpy==2.4.4 + # via + # contourpy + # matplotlib + # monty + # pandas + # pymatgen-core + # pymatgen-io-validation + # scipy + # spglib +orjson==3.11.8 + # via + # mp-api (pyproject.toml) + # pymatgen-core +packaging==26.1 + # via + # matplotlib + # plotly +palettable==3.3.3 + # via pymatgen-core +pandas==3.0.2 + # via pymatgen-core +pillow==12.2.0 + # via matplotlib +plotly==6.7.0 + # via pymatgen-core +pubchempy==1.0.5 + # via emmet-core +pyarrow==24.0.0 + # via mp-api (pyproject.toml) +pybtex==0.26.1 + # via emmet-core +pydantic==2.13.3 + # via + # emmet-core + # pydantic-settings + # pymatgen-io-validation +pydantic-core==2.46.3 + # via pydantic +pydantic-settings==2.14.0 + # via + # emmet-core + # pymatgen-io-validation +pymatgen==2026.3.23 + # via + # emmet-core + # mp-api (pyproject.toml) + # pymatgen-io-validation +pymatgen-core==2026.4.16 + # via pymatgen +pymatgen-io-validation==0.1.2 + # via emmet-core +pyparsing==3.3.2 + # via + # bibtexparser + # matplotlib +python-dateutil==2.9.0.post0 + # via + # botocore + # matplotlib + # pandas +python-dotenv==1.2.2 + # via pydantic-settings +pyyaml==6.0.3 + # via pybtex +requests==2.33.1 + # via + # mp-api (pyproject.toml) + # pymatgen-core + # pymatgen-io-validation +ruamel-yaml==0.19.1 + # via monty +s3transfer==0.16.1 + # via boto3 +scipy==1.17.1 + # via pymatgen-core +six==1.17.0 + # via python-dateutil +spglib==2.7.0 + # via pymatgen-core +sympy==1.14.0 + # via pymatgen-core +tabulate==0.10.0 + # via pymatgen-core +tqdm==4.67.3 + # via pymatgen-core +typeguard==4.5.1 + # via inflect +typing-extensions==4.15.0 + # via + # emmet-core + # mp-api (pyproject.toml) + # pydantic + # pydantic-core + # spglib + # typeguard + # typing-inspection +typing-inspection==0.4.2 + # via + # pydantic + # pydantic-settings +uncertainties==3.2.3 + # via pymatgen-core +urllib3==2.6.3 + # via + # botocore + # requests +wrapt==2.1.2 + # via deprecated diff --git a/requirements/requirements-ubuntu-latest_py3.14_extras.txt b/requirements/requirements-ubuntu-latest_py3.14_extras.txt new file mode 100644 index 000000000..fcf1449ee --- /dev/null +++ b/requirements/requirements-ubuntu-latest_py3.14_extras.txt @@ -0,0 +1,683 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --all-extras --output-file=requirements/requirements-ubuntu-latest_py3.12_extras.txt pyproject.toml +# +aiofile==3.9.0 + # via py-key-value-aio +alabaster==1.0.0 + # via sphinx +annotated-types==0.7.0 + # via pydantic +anyio==4.13.0 + # via + # httpx + # mcp + # py-key-value-aio + # sse-starlette + # starlette + # watchfiles +arro3-core==0.8.0 + # via deltalake +arrow==1.4.0 + # via isoduration +ase==3.28.0 + # via pymatgen-analysis-diffusion +asttokens==3.0.1 + # via stack-data +attrs==26.1.0 + # via + # cyclopts + # jsonschema + # referencing +authlib==1.7.0 + # via fastmcp +babel==2.18.0 + # via sphinx +beartype==0.22.9 + # via py-key-value-aio +bibtexparser==1.4.4 + # via pymatgen-core +blake3==1.0.8 + # via emmet-core +blinker==1.9.0 + # via flask +boltons==25.0.0 + # via mpcontribs-client +boto3==1.42.94 + # via mp-api (pyproject.toml) +botocore==1.42.94 + # via + # boto3 + # s3transfer +bravado==12.0.1 + # via mpcontribs-client +bravado-core==6.3.1 + # via bravado +cachetools==7.0.6 + # via + # mpcontribs-client + # py-key-value-aio +caio==0.9.25 + # via aiofile +certifi==2026.4.22 + # via + # httpcore + # httpx + # requests +cffi==2.0.0 + # via cryptography +cfgv==3.5.0 + # via pre-commit +charset-normalizer==3.4.7 + # via requests +click==8.3.3 + # via + # flask + # uvicorn +contourpy==1.3.3 + # via matplotlib +coverage[toml]==7.13.5 + # via pytest-cov +cryptography==46.0.7 + # via + # authlib + # joserfc + # pyjwt + # secretstorage +custodian==2025.12.14 + # via mp-api (pyproject.toml) +cycler==0.12.1 + # via matplotlib +cyclopts==4.11.0 + # via fastmcp +decorator==5.2.1 + # via ipython +deltalake==1.5.1 + # via mp-api (pyproject.toml) +deprecated==1.3.1 + # via deltalake +distlib==0.4.0 + # via virtualenv +dnspython==2.8.0 + # via + # email-validator + # pyisemail + # pymongo +docstring-parser==0.18.0 + # via cyclopts +docutils==0.22.4 + # via + # rich-rst + # sphinx +email-validator==2.3.0 + # via pydantic +emmet-core[all]==0.86.4rc2 + # via mp-api (pyproject.toml) +exceptiongroup==1.3.1 + # via fastmcp +execnet==2.1.2 + # via pytest-xdist +executing==2.2.1 + # via stack-data +fastmcp==3.2.4 + # via mp-api (pyproject.toml) +filelock==3.29.0 + # via + # python-discovery + # virtualenv +filetype==1.2.0 + # via mpcontribs-client +flake8==7.3.0 + # via mp-api (pyproject.toml) +flask==3.1.3 + # via mp-api (pyproject.toml) +flatten-dict==0.4.2 + # via mpcontribs-client +flexcache==0.3 + # via pint +flexparser==0.4 + # via pint +fonttools==4.62.1 + # via matplotlib +fqdn==1.5.1 + # via jsonschema +griffelib==2.0.2 + # via fastmcp +h11==0.16.0 + # via + # httpcore + # uvicorn +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # fastmcp + # mcp +httpx-sse==0.4.3 + # via mcp +identify==2.6.19 + # via pre-commit +idna==3.13 + # via + # anyio + # email-validator + # httpx + # jsonschema + # requests +imageio==2.37.3 + # via scikit-image +imagesize==2.0.0 + # via sphinx +importlib-metadata==8.7.1 + # via opentelemetry-api +importlib-resources==7.1.0 + # via swagger-spec-validator +inflect==7.5.0 + # via emmet-core +iniconfig==2.3.0 + # via pytest +ipython==9.12.0 + # via mpcontribs-client +ipython-pygments-lexers==1.1.1 + # via ipython +isoduration==20.11.0 + # via jsonschema +itsdangerous==2.2.0 + # via flask +jaraco-classes==3.4.0 + # via keyring +jaraco-context==6.1.2 + # via keyring +jaraco-functools==4.4.0 + # via keyring +jedi==0.19.2 + # via ipython +jeepney==0.9.0 + # via + # keyring + # secretstorage +jinja2==3.1.6 + # via + # flask + # sphinx +jmespath==1.1.0 + # via + # boto3 + # botocore +joblib==1.5.3 + # via + # pymatgen-analysis-diffusion + # pymatgen-core +joserfc==1.6.4 + # via authlib +json2html==1.3.0 + # via mpcontribs-client +jsonpointer==3.1.1 + # via jsonschema +jsonref==1.1.0 + # via + # bravado-core + # fastmcp +jsonschema[format-nongpl]==4.26.0 + # via + # bravado-core + # mcp + # swagger-spec-validator +jsonschema-path==0.4.5 + # via fastmcp +jsonschema-specifications==2025.9.1 + # via jsonschema +keyring==25.7.0 + # via py-key-value-aio +kiwisolver==1.5.0 + # via matplotlib +lark==1.3.1 + # via rfc3987-syntax +latexcodec==3.0.1 + # via pybtex +lazy-loader==0.5 + # via scikit-image +librt==0.9.0 + # via mypy +lxml==6.1.0 + # via pymatgen-core +markdown-it-py==4.0.0 + # via rich +markupsafe==3.0.3 + # via + # flask + # jinja2 + # werkzeug +matplotlib==3.10.8 + # via + # ase + # pymatgen-core + # seaborn +matplotlib-inline==0.2.1 + # via ipython +mccabe==0.7.0 + # via flake8 +mcp==1.27.0 + # via fastmcp +mdurl==0.1.2 + # via markdown-it-py +monotonic==1.6 + # via bravado +monty==2026.2.18 + # via + # custodian + # emmet-core + # mp-api (pyproject.toml) + # pymatgen-core +more-itertools==11.0.2 + # via + # inflect + # jaraco-classes + # jaraco-functools +mp-pyrho==0.5.1 + # via pymatgen-analysis-defects +mpcontribs-client==5.10.5 + # via mp-api (pyproject.toml) +mpmath==1.3.0 + # via sympy +msgpack==1.1.2 + # via + # bravado + # bravado-core +mypy==1.20.2 + # via mp-api (pyproject.toml) +mypy-extensions==1.1.0 + # via + # mp-api (pyproject.toml) + # mypy +narwhals==2.20.0 + # via plotly +networkx==3.6.1 + # via + # pymatgen-core + # scikit-image +nodeenv==1.10.0 + # via pre-commit +numpy==2.4.4 + # via + # ase + # contourpy + # imageio + # matplotlib + # monty + # mpcontribs-client + # pandas + # pymatgen-analysis-defects + # pymatgen-analysis-diffusion + # pymatgen-core + # pymatgen-io-validation + # scikit-image + # scipy + # seaborn + # seekpath + # shapely + # spglib + # tifffile +openapi-pydantic==0.5.1 + # via fastmcp +opentelemetry-api==1.41.0 + # via fastmcp +orjson==3.11.8 + # via + # mp-api (pyproject.toml) + # pymatgen-core +packaging==26.1 + # via + # fastmcp + # lazy-loader + # matplotlib + # plotly + # pytest + # scikit-image + # sphinx +palettable==3.3.3 + # via pymatgen-core +pandas==3.0.2 + # via + # mpcontribs-client + # pymatgen-core + # seaborn +parso==0.8.6 + # via jedi +pathable==0.5.0 + # via jsonschema-path +pathspec==1.1.0 + # via mypy +pexpect==4.9.0 + # via ipython +pillow==12.2.0 + # via + # imageio + # matplotlib + # scikit-image +pint==0.25.3 + # via mpcontribs-client +platformdirs==4.9.6 + # via + # fastmcp + # pint + # python-discovery + # virtualenv +plotly==6.7.0 + # via + # mpcontribs-client + # pymatgen-core +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pre-commit==4.6.0 + # via mp-api (pyproject.toml) +prompt-toolkit==3.0.52 + # via ipython +psutil==7.2.2 + # via custodian +ptyprocess==0.7.0 + # via pexpect +pubchempy==1.0.5 + # via emmet-core +pure-eval==0.2.3 + # via stack-data +py-key-value-aio[filetree,keyring,memory]==0.4.4 + # via fastmcp +pyarrow==24.0.0 + # via + # emmet-core + # mp-api (pyproject.toml) +pybtex==0.26.1 + # via emmet-core +pycodestyle==2.14.0 + # via + # flake8 + # mp-api (pyproject.toml) +pycparser==3.0 + # via cffi +pydantic[email]==2.13.3 + # via + # emmet-core + # fastmcp + # mcp + # openapi-pydantic + # pydantic-settings + # pymatgen-io-validation +pydantic-core==2.46.3 + # via pydantic +pydantic-settings==2.14.0 + # via + # emmet-core + # mcp + # pymatgen-io-validation +pyflakes==3.4.0 + # via flake8 +pygments==2.20.0 + # via + # ipython + # ipython-pygments-lexers + # pytest + # rich + # sphinx +pyisemail==2.0.1 + # via mpcontribs-client +pyjwt[crypto]==2.12.1 + # via mcp +pymatgen==2026.3.23 + # via + # emmet-core + # mp-api (pyproject.toml) + # mp-pyrho + # mpcontribs-client + # pymatgen-analysis-alloys + # pymatgen-analysis-defects + # pymatgen-analysis-diffusion + # pymatgen-io-validation +pymatgen-analysis-alloys==0.0.8 + # via emmet-core +pymatgen-analysis-defects==2026.3.20 + # via emmet-core +pymatgen-analysis-diffusion==2025.11.15 + # via emmet-core +pymatgen-core==2026.4.16 + # via pymatgen +pymatgen-io-validation==0.1.2 + # via emmet-core +pymongo==4.17.0 + # via + # emmet-core + # mpcontribs-client +pyparsing==3.3.2 + # via + # bibtexparser + # matplotlib +pyperclip==1.11.0 + # via fastmcp +pytest==9.0.3 + # via + # mp-api (pyproject.toml) + # pytest-asyncio + # pytest-cov + # pytest-mock + # pytest-xdist +pytest-asyncio==1.3.0 + # via mp-api (pyproject.toml) +pytest-cov==7.1.0 + # via mp-api (pyproject.toml) +pytest-mock==3.15.1 + # via mp-api (pyproject.toml) +pytest-xdist==3.8.0 + # via mp-api (pyproject.toml) +python-dateutil==2.9.0.post0 + # via + # arrow + # botocore + # bravado + # bravado-core + # matplotlib + # pandas +python-discovery==1.2.2 + # via virtualenv +python-dotenv==1.2.2 + # via + # fastmcp + # pydantic-settings +python-multipart==0.0.26 + # via mcp +pytz==2026.1.post1 + # via bravado-core +pyyaml==6.0.3 + # via + # bravado + # bravado-core + # fastmcp + # jsonschema-path + # pre-commit + # pybtex + # swagger-spec-validator +referencing==0.37.0 + # via + # jsonschema + # jsonschema-path + # jsonschema-specifications +requests==2.33.1 + # via + # bravado + # bravado-core + # mp-api (pyproject.toml) + # pymatgen-core + # pymatgen-io-validation + # requests-futures + # sphinx +requests-futures==1.0.2 + # via mpcontribs-client +rfc3339-validator==0.1.4 + # via jsonschema +rfc3986-validator==0.1.1 + # via jsonschema +rfc3987-syntax==1.1.0 + # via jsonschema +rich==15.0.0 + # via + # cyclopts + # fastmcp + # rich-rst +rich-rst==1.3.2 + # via cyclopts +roman-numerals==4.1.0 + # via sphinx +rpds-py==0.30.0 + # via + # jsonschema + # referencing +ruamel-yaml==0.19.1 + # via + # custodian + # monty +s3transfer==0.16.1 + # via boto3 +scikit-image==0.26.0 + # via pymatgen-analysis-defects +scipy==1.17.1 + # via + # ase + # pymatgen-core + # scikit-image +seaborn==0.13.2 + # via pymatgen-analysis-diffusion +secretstorage==3.5.0 + # via keyring +seekpath==2.2.1 + # via emmet-core +shapely==2.1.2 + # via pymatgen-analysis-alloys +simplejson==4.1.0 + # via + # bravado + # bravado-core +six==1.17.0 + # via + # bravado + # bravado-core + # flatten-dict + # python-dateutil + # rfc3339-validator +snowballstemmer==3.0.1 + # via sphinx +spglib==2.7.0 + # via + # pymatgen-core + # seekpath +sphinx==9.1.0 + # via mp-api (pyproject.toml) +sphinxcontrib-applehelp==2.0.0 + # via sphinx +sphinxcontrib-devhelp==2.0.0 + # via sphinx +sphinxcontrib-htmlhelp==2.1.0 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==2.0.0 + # via sphinx +sphinxcontrib-serializinghtml==2.0.0 + # via sphinx +sse-starlette==3.3.4 + # via mcp +stack-data==0.6.3 + # via ipython +starlette==1.0.0 + # via + # mcp + # sse-starlette +swagger-spec-validator==3.0.4 + # via + # bravado-core + # mpcontribs-client +sympy==1.14.0 + # via pymatgen-core +tabulate==0.10.0 + # via pymatgen-core +tifffile==2026.4.11 + # via scikit-image +tqdm==4.67.3 + # via + # mpcontribs-client + # pymatgen-core +traitlets==5.14.3 + # via + # ipython + # matplotlib-inline +typeguard==4.5.1 + # via inflect +types-requests==2.33.0.20260408 + # via mp-api (pyproject.toml) +types-setuptools==82.0.0.20260408 + # via mp-api (pyproject.toml) +typing-extensions==4.15.0 + # via + # anyio + # bravado + # emmet-core + # exceptiongroup + # flexcache + # flexparser + # mcp + # mp-api (pyproject.toml) + # mypy + # opentelemetry-api + # pint + # py-key-value-aio + # pydantic + # pydantic-core + # pytest-asyncio + # referencing + # spglib + # starlette + # swagger-spec-validator + # typeguard + # typing-inspection +typing-inspection==0.4.2 + # via + # mcp + # pydantic + # pydantic-settings +tzdata==2026.1 + # via arrow +ujson==5.12.0 + # via mpcontribs-client +uncalled-for==0.3.1 + # via fastmcp +uncertainties==3.2.3 + # via pymatgen-core +uri-template==1.3.0 + # via jsonschema +urllib3==2.6.3 + # via + # botocore + # requests + # types-requests +uvicorn==0.46.0 + # via + # fastmcp + # mcp +virtualenv==21.2.4 + # via pre-commit +watchfiles==1.1.1 + # via fastmcp +wcwidth==0.6.0 + # via prompt-toolkit +webcolors==25.10.0 + # via jsonschema +websockets==16.0 + # via fastmcp +werkzeug==3.1.8 + # via flask +wrapt==2.1.2 + # via deprecated +zipp==3.23.1 + # via importlib-metadata From f77f19a5fa061ee475b4234c14dd70f7f4d60c2b Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Mon, 27 Apr 2026 17:13:07 -0700 Subject: [PATCH 3/3] api key in secrets --- .github/workflows/testing.yml | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index a30f08b45..734580e09 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -43,16 +43,6 @@ jobs: if: matrix.os == 'windows-latest' run: echo "SSL_CERT_FILE=$(python -m certifi)" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Format API key name (Linux/MacOS) - if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' - run: | - echo "API_KEY_NAME=$(echo ${{ format('MP_API_KEY_{0}_{1}', matrix.os, matrix.python-version) }} | awk '{gsub(/-|\./, "_"); print}' | tr '[:lower:]' '[:upper:]')" >> $GITHUB_ENV - - - name: Format API key name (Windows) - if: matrix.os == 'windows-latest' - run: | - echo "API_KEY_NAME=$(echo ${{ format('MP_API_KEY_{0}_{1}', matrix.os, matrix.python-version) }} | awk '{gsub(/-|\./, "_"); print}' | tr '[:lower:]' '[:upper:]')" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Lint with mypy shell: bash -l {0} run: python -m mypy mp_api/ @@ -60,7 +50,7 @@ jobs: - name: Test with pytest if: always() env: - MP_API_KEY: ${{ secrets[env.API_KEY_NAME] }} + MP_API_KEY: ${{ secrets.MP_API_KEY_UBUNTU_LATEST_3_12 }} # MP_API_ENDPOINT: https://api-preview.materialsproject.org/ run: | pytest -n auto -x --cov=mp_api --cov-report=xml