{"manifests":[{"schema_version":"1","cluster":"Moria","root":"/tmp/rootstock-test-2","maintainer":{"name":"Gimli, Son of Gloin","email":"nevertoss@dwarf.me"},"rootstock_version":"0.5.0","python_version":"unknown","last_updated":"2026-03-12T16:01:31.461151+00:00","environments":{"chgnet_env":{"status":"ready","built_at":"2026-03-12T16:01:17.828540+00:00","source_hash":"sha256:ee3d3997682c2b5fd44e2e602a917080ad8e29d8e107990636b77af24ecbb871","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"chgnet>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n# ///\n\"\"\"\nCHGNet environment for Rootstock.\n\nThis environment provides access to CHGNet, a pretrained universal neural\nnetwork potential for charge-informed atomistic modeling.\n\"\"\"\n\n\ndef setup(model: str | None = None, device: str = \"cuda\"):\n    \"\"\"\n    Load a CHGNet calculator.\n\n    Args:\n        model: Optional path to a fine-tuned model. If None, uses the\n               default pre-trained CHGNet model.\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from chgnet.model import CHGNetCalculator\n\n    if model:\n        return CHGNetCalculator(model_path=model, use_device=device)\n    return CHGNetCalculator(use_device=device)\n","python_requires":">=3.10","dependencies":{"ase":"3.27.0","chgnet":"0.4.2","rootstock":"0.6.1","torch":"2.10.0"},"checkpoints":[]},"mace_env":{"status":"ready","built_at":"2026-03-12T16:01:23.024860+00:00","source_hash":"sha256:8f49eb565411b7d3f015383c4e5d52ca9770d4295d9cb2c51c10cfa8ab173e75","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"mace-torch>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0,<2.10\",\n# ]\n# ///\n\"\"\"\nMACE environment for Rootstock.\n\nThis environment provides access to MACE foundation models for\nmachine learning interatomic potentials.\n\nModels:\n    - \"small\", \"medium\", \"large\": Pre-trained MACE-MP-0 models\n    - Path to a .pt file: Custom fine-tuned model\n\"\"\"\n\n\ndef setup(model: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a MACE calculator.\n\n    Args:\n        model: Model identifier. Can be:\n            - \"small\", \"medium\", \"large\" for MACE-MP-0 foundation models\n            - Path to a .pt file for custom models\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from mace.calculators import mace_mp\n\n    return mace_mp(model=model, device=device, default_dtype=\"float32\")\n","python_requires":">=3.10","dependencies":{"ase":"3.27.0","mace-torch":"0.3.15","rootstock":"0.6.1","torch":"2.9.1"},"checkpoints":[]},"uma_env":{"status":"ready","built_at":"2026-03-12T16:01:31.461114+00:00","source_hash":"sha256:b8446f98c4c8ad7ff12f9bf39e5658bd45a989662cfa644bf48859bf7fd821c3","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nUMA (Universal Atomistic Model) environment for Rootstock.\n\nThis environment provides access to Meta's UMA foundation model\nvia the FAIRChem library.\n\nModels:\n    - \"uma-s-1p1\": UMA small model (default)\n    - Other UMA variants as released by FAIRChem\n\"\"\"\n\n\ndef setup(model: str = \"uma-s-1p1\", device: str = \"cuda\"):\n    \"\"\"\n    Load a UMA calculator.\n\n    Args:\n        model: Model identifier (e.g., \"uma-s-1p1\"). Passed directly to\n               pretrained_mlip.get_predict_unit().\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from fairchem.core import FAIRChemCalculator, pretrained_mlip\n\n    predictor = pretrained_mlip.get_predict_unit(model, device=device)\n    return FAIRChemCalculator(predictor, task_name=\"omat\")\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.27.0","fairchem-core":"2.14.0","rootstock":"0.6.1","torch":"2.8.0","torch-geometric":"2.7.0"},"checkpoints":[]}}},{"schema_version":"1","cluster":"Test Cluster","root":"/tmp/rootstock-test","maintainer":{"name":"Hayden Holbrook","email":"hholbrook9@uchicago.edu"},"rootstock_version":"0.5.0","python_version":"unknown","last_updated":"2026-03-12T21:34:48.854245+00:00","environments":{"chgnet_env":{"status":"ready","built_at":"2026-03-12T15:32:14.864663+00:00","source_hash":"sha256:ee3d3997682c2b5fd44e2e602a917080ad8e29d8e107990636b77af24ecbb871","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"chgnet>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n# ///\n\"\"\"\nCHGNet environment for Rootstock.\n\nThis environment provides access to CHGNet, a pretrained universal neural\nnetwork potential for charge-informed atomistic modeling.\n\"\"\"\n\n\ndef setup(model: str | None = None, device: str = \"cuda\"):\n    \"\"\"\n    Load a CHGNet calculator.\n\n    Args:\n        model: Optional path to a fine-tuned model. If None, uses the\n               default pre-trained CHGNet model.\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from chgnet.model import CHGNetCalculator\n\n    if model:\n        return CHGNetCalculator(model_path=model, use_device=device)\n    return CHGNetCalculator(use_device=device)\n","python_requires":">=3.10","dependencies":{"ase":"3.27.0","chgnet":"0.4.2","rootstock":"0.6.1","torch":"2.10.0"},"checkpoints":[]},"mace_env":{"status":"ready","built_at":"2026-03-12T15:32:17.538414+00:00","source_hash":"sha256:8f49eb565411b7d3f015383c4e5d52ca9770d4295d9cb2c51c10cfa8ab173e75","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"mace-torch>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0,<2.10\",\n# ]\n# ///\n\"\"\"\nMACE environment for Rootstock.\n\nThis environment provides access to MACE foundation models for\nmachine learning interatomic potentials.\n\nModels:\n    - \"small\", \"medium\", \"large\": Pre-trained MACE-MP-0 models\n    - Path to a .pt file: Custom fine-tuned model\n\"\"\"\n\n\ndef setup(model: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a MACE calculator.\n\n    Args:\n        model: Model identifier. Can be:\n            - \"small\", \"medium\", \"large\" for MACE-MP-0 foundation models\n            - Path to a .pt file for custom models\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from mace.calculators import mace_mp\n\n    return mace_mp(model=model, device=device, default_dtype=\"float32\")\n","python_requires":">=3.10","dependencies":{"ase":"3.27.0","mace-torch":"0.3.15","rootstock":"0.6.1","torch":"2.9.1"},"checkpoints":[]},"uma_env":{"status":"ready","built_at":"2026-03-12T15:32:24.737016+00:00","source_hash":"sha256:b8446f98c4c8ad7ff12f9bf39e5658bd45a989662cfa644bf48859bf7fd821c3","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nUMA (Universal Atomistic Model) environment for Rootstock.\n\nThis environment provides access to Meta's UMA foundation model\nvia the FAIRChem library.\n\nModels:\n    - \"uma-s-1p1\": UMA small model (default)\n    - Other UMA variants as released by FAIRChem\n\"\"\"\n\n\ndef setup(model: str = \"uma-s-1p1\", device: str = \"cuda\"):\n    \"\"\"\n    Load a UMA calculator.\n\n    Args:\n        model: Model identifier (e.g., \"uma-s-1p1\"). Passed directly to\n               pretrained_mlip.get_predict_unit().\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from fairchem.core import FAIRChemCalculator, pretrained_mlip\n\n    predictor = pretrained_mlip.get_predict_unit(model, device=device)\n    return FAIRChemCalculator(predictor, task_name=\"omat\")\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.27.0","fairchem-core":"2.14.0","rootstock":"0.6.1","torch":"2.8.0","torch-geometric":"2.7.0"},"checkpoints":[]}}},{"schema_version":"1","cluster":"della","root":"/scratch/gpfs/ROSENGROUP/common/rootstock","maintainer":{"name":"Will Engler","email":"willengler@uchicago.edu"},"rootstock_version":"0.5.0","python_version":"3.12.12","last_updated":"2026-03-16T16:13:59.427608+00:00","environments":{"chgnet_env":{"status":"ready","built_at":"2026-03-16T16:13:58.992562+00:00","source_hash":"sha256:ee3d3997682c2b5fd44e2e602a917080ad8e29d8e107990636b77af24ecbb871","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"chgnet>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n# ///\n\"\"\"\nCHGNet environment for Rootstock.\n\nThis environment provides access to CHGNet, a pretrained universal neural\nnetwork potential for charge-informed atomistic modeling.\n\"\"\"\n\n\ndef setup(model: str | None = None, device: str = \"cuda\"):\n    \"\"\"\n    Load a CHGNet calculator.\n\n    Args:\n        model: Optional path to a fine-tuned model. If None, uses the\n               default pre-trained CHGNet model.\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from chgnet.model import CHGNetCalculator\n\n    if model:\n        return CHGNetCalculator(model_path=model, use_device=device)\n    return CHGNetCalculator(use_device=device)\n","python_requires":">=3.10","dependencies":{"ase":"3.27.0","chgnet":"0.4.2","rootstock":"0.5.1","torch":"2.10.0"},"checkpoints":[]},"mace_env":{"status":"ready","built_at":"2026-03-16T16:13:59.115604+00:00","source_hash":"sha256:8f49eb565411b7d3f015383c4e5d52ca9770d4295d9cb2c51c10cfa8ab173e75","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"mace-torch>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0,<2.10\",\n# ]\n# ///\n\"\"\"\nMACE environment for Rootstock.\n\nThis environment provides access to MACE foundation models for\nmachine learning interatomic potentials.\n\nModels:\n    - \"small\", \"medium\", \"large\": Pre-trained MACE-MP-0 models\n    - Path to a .pt file: Custom fine-tuned model\n\"\"\"\n\n\ndef setup(model: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a MACE calculator.\n\n    Args:\n        model: Model identifier. Can be:\n            - \"small\", \"medium\", \"large\" for MACE-MP-0 foundation models\n            - Path to a .pt file for custom models\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from mace.calculators import mace_mp\n\n    return mace_mp(model=model, device=device, default_dtype=\"float32\")\n","python_requires":">=3.10","dependencies":{"ase":"3.27.0","mace-torch":"0.3.15","rootstock":"0.5.1","torch":"2.9.1"},"checkpoints":[]},"tensornet_env":{"status":"ready","built_at":"2026-03-16T16:13:59.289290+00:00","source_hash":"sha256:df3e142f3a3199673fce02ff8683e1c6fd7343d9ca2cbc9655c6640a9cecef0f","source":"# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"ase>=3.22\",\n#     \"matgl\",\n#     \"nvalchemi-toolkit-ops\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n#     \"torch-spline-conv\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nTensorNet environment for Rootstock.\n\nThis environment provides access to TensorNet models via the MatGL library\nfrom the Materials Virtual Lab.\n\nModels:\n    - \"TensorNet-MatPES-PBE-v2025.1-PES\": MatPES PBE functional (default)\n    - Other MatGL models as available\n\"\"\"\n\n\ndef setup(model: str = \"TensorNet-MatPES-PBE-v2025.1-PES\", device: str = \"cuda\"):\n    \"\"\"\n    Load a TensorNet/MatGL calculator.\n\n    Args:\n        model: Model identifier (e.g., \"TensorNet-MatPES-PBE-v2025.1-PES\").\n               Passed directly to matgl.load_model().\n        device: PyTorch device string (currently MatGL handles device internally)\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    import torch\n    torch.set_default_device(device)\n\n    import matgl\n    from matgl.ext.ase import PESCalculator\n\n    pot = matgl.load_model(model)\n    return PESCalculator(potential=pot)\n","python_requires":">=3.12","dependencies":{"ase":"3.27.0","matgl":"2.0.6","nvalchemi-toolkit-ops":"0.2.0","rootstock":"0.5.1","torch":"2.8.0","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121","torch-spline-conv":"1.2.2+pt24cu121"},"checkpoints":[]},"uma_env":{"status":"ready","built_at":"2026-03-16T16:13:59.427557+00:00","source_hash":"sha256:b8446f98c4c8ad7ff12f9bf39e5658bd45a989662cfa644bf48859bf7fd821c3","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nUMA (Universal Atomistic Model) environment for Rootstock.\n\nThis environment provides access to Meta's UMA foundation model\nvia the FAIRChem library.\n\nModels:\n    - \"uma-s-1p1\": UMA small model (default)\n    - Other UMA variants as released by FAIRChem\n\"\"\"\n\n\ndef setup(model: str = \"uma-s-1p1\", device: str = \"cuda\"):\n    \"\"\"\n    Load a UMA calculator.\n\n    Args:\n        model: Model identifier (e.g., \"uma-s-1p1\"). Passed directly to\n               pretrained_mlip.get_predict_unit().\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from fairchem.core import FAIRChemCalculator, pretrained_mlip\n\n    predictor = pretrained_mlip.get_predict_unit(model, device=device)\n    return FAIRChemCalculator(predictor, task_name=\"omat\")\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.27.0","fairchem-core":"2.14.0","rootstock":"0.5.1","torch":"2.8.0","torch-geometric":"2.7.0"},"checkpoints":[]}}},{"schema_version":3,"cluster":"delta","root":"/work/hdd/data/rootstock","maintainer":{"name":"Owen Price-Skelly","email":"OwenPriceSkelly@uchicago.edu"},"rootstock_version":"0.9.2","python_version":"3.10","last_updated":"2026-06-15T22:22:09.226266+00:00","environments":{"ani":{"status":"ready","built_at":"2026-05-27T18:29:57.916937+00:00","source_hash":"sha256:4519d6f76936f874039d5a402b9a8470d2432736a839d84163af67ce1a20d3e7","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"torchani>=2.2\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n# ///\n\"\"\"\nANI-2x environment for Rootstock.\n\nANI-2x is a neural network potential for organic molecules containing\nH, C, N, O, F, S, Cl. It is not a universal potential — do not use it\nfor inorganic or periodic systems.\n\nModels:\n    - \"ANI2x\": ANI-2x ensemble (default, 8 networks)\n    - \"ANI1ccx\": ANI-1ccx, trained on CCSD(T)/CBS data (H, C, N, O only)\n    - \"ANI1x\": ANI-1x (H, C, N, O only)\n\"\"\"\n\nCHECKPOINTS = {\n    \"ani-2x\": \"ANI2x\",\n    \"ani-1ccx\": \"ANI1ccx\",\n    \"ani-1x\": \"ANI1x\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load an ANI calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible calculator.\n    \"\"\"\n    import torchani\n\n    model_map = {\n        \"ANI2x\": torchani.models.ANI2x,\n        \"ANI1ccx\": torchani.models.ANI1ccx,\n        \"ANI1x\": torchani.models.ANI1x,\n    }\n    model = CHECKPOINTS[checkpoint]\n\n    return model_map[model](periodic_table_index=True).to(device).ase()\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","rootstock":"0.9.0","torch":"2.8.0","torchani":"2.8.2"},"checkpoints":{"ani-2x":{"fetched_at":"2026-05-27T18:55:03.496047+00:00","verified_at":"2026-06-15T19:01:41.495945+00:00","verified_device":"cuda","last_error":null},"ani-1ccx":{"fetched_at":"2026-05-27T18:56:16.515526+00:00","verified_at":"2026-06-15T19:01:49.558706+00:00","verified_device":"cuda","last_error":null},"ani-1x":{"fetched_at":"2026-05-27T18:56:26.779738+00:00","verified_at":"2026-06-15T19:01:56.785695+00:00","verified_device":"cuda","last_error":null}}},"chgnet":{"status":"ready","built_at":"2026-05-27T18:29:58.939080+00:00","source_hash":"sha256:3a8b9aacb436e65f131e9646c1258a6a03bdfc7e26e664ebdec920bdc86fde30","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"chgnet>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n#\n# [tool.uv.sources]\n# torch = { index = \"pytorch-cu128\" }\n#\n# [[tool.uv.index]]\n# name = \"pytorch-cu128\"\n# url = \"https://download.pytorch.org/whl/cu128\"\n# explicit = true\n# ///\n\"\"\"CHGNet env — hosts pretrained charge-informed universal potentials.\"\"\"\n\nCHECKPOINTS = {\n    \"chgnet-default\": \"chgnet-default\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a CHGNet calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from chgnet.model import CHGNet, CHGNetCalculator\n\n    model_name = CHECKPOINTS[checkpoint]\n    model = CHGNet.load() if model_name == \"chgnet-default\" else CHGNet.load(model_name)\n    return CHGNetCalculator(model=model, use_device=device)\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","chgnet":"0.4.2","rootstock":"0.9.1.post7.dev0+d45a59c","torch":"2.11.0+cu128"},"checkpoints":{"chgnet-default":{"fetched_at":"2026-05-27T19:03:59.239684+00:00","verified_at":"2026-06-15T19:08:58.329744+00:00","verified_device":"cuda","last_error":null}}},"dimenet":{"status":"ready","built_at":"2026-05-27T18:29:59.799942+00:00","source_hash":"sha256:43d892df9403195522a57ab5e8c9b2efce2e9784c3554902867d7b8c1066488e","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=1.0.0,<2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nDimeNet++ environment for Rootstock.\n\nUses fairchem-core 1.x to access legacy OC20 DimeNet++ checkpoints via\nOCPCalculator. These checkpoints are optimized for catalysis systems\n(slabs + adsorbates).\n\nModels:\n    - \"DimeNet++-S2EF-OC20-All\": default\n    - \"DimeNet++-S2EF-OC20-20M\"\n    - \"DimeNet++-S2EF-OC20-2M\"\n    - \"DimeNet++-S2EF-OC20-200k\"\n\"\"\"\n\nCHECKPOINTS = {\n    \"dimenet-plus-plus-s2ef-oc20-all\": \"DimeNet++-S2EF-OC20-All\",\n    \"dimenet-plus-plus-s2ef-oc20-20m\": \"DimeNet++-S2EF-OC20-20M\",\n    \"dimenet-plus-plus-s2ef-oc20-2m\": \"DimeNet++-S2EF-OC20-2M\",\n    \"dimenet-plus-plus-s2ef-oc20-200k\": \"DimeNet++-S2EF-OC20-200k\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a DimeNet++ OC20 calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible OCPCalculator.\n    \"\"\"\n    import os\n    from fairchem.core import OCPCalculator\n    from fairchem.core.models.model_registry import model_name_to_local_file\n\n    cache_dir = os.environ.get(\"XDG_CACHE_HOME\", os.path.expanduser(\"~/.cache\"))\n    local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)\n    return OCPCalculator(checkpoint_path=local_path, cpu=(device == \"cpu\"))\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.0","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121"},"checkpoints":{"dimenet-plus-plus-s2ef-oc20-all":{"fetched_at":"2026-05-27T19:17:31.829958+00:00","verified_at":"2026-06-15T19:22:18.297450+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-20m":{"fetched_at":"2026-05-27T19:31:46.626685+00:00","verified_at":"2026-06-15T19:25:13.097772+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-2m":{"fetched_at":"2026-05-27T19:47:08.632022+00:00","verified_at":"2026-06-15T19:25:37.286788+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-200k":{"fetched_at":"2026-05-27T20:02:57.714214+00:00","verified_at":"2026-06-15T19:26:00.901301+00:00","verified_device":"cuda","last_error":null}}},"equiformer":{"status":"ready","built_at":"2026-05-27T18:30:00.946978+00:00","source_hash":"sha256:8400e3742fb766020bbba69feed4de61d113b9a302b63bdf3ffed24807de5558","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=1.0.0,<2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nEquiformerV2 environment for Rootstock.\n\nUses fairchem-core 1.x to access legacy OC20 EquiformerV2 checkpoints via\nOCPCalculator. These checkpoints are optimized for catalysis systems\n(slabs + adsorbates).\n\nModels:\n    - \"EquiformerV2-153M-S2EF-OC20-All+MD\": default\n    - \"EquiformerV2-31M-S2EF-OC20-All+MD\"\n    - \"EquiformerV2-83M-S2EF-OC20-2M\"\n\"\"\"\n\nCHECKPOINTS = {\n    \"equiformer-v2-153m-s2ef-oc20-all-md\": \"EquiformerV2-153M-S2EF-OC20-All+MD\",\n    \"equiformer-v2-31m-s2ef-oc20-all-md\": \"EquiformerV2-31M-S2EF-OC20-All+MD\",\n    \"equiformer-v2-83m-s2ef-oc20-2m\": \"EquiformerV2-83M-S2EF-OC20-2M\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load an EquiformerV2 OC20 calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible OCPCalculator.\n    \"\"\"\n    import os\n    from fairchem.core import OCPCalculator\n    from fairchem.core.models.model_registry import model_name_to_local_file\n\n    cache_dir = os.environ.get(\"XDG_CACHE_HOME\", os.path.expanduser(\"~/.cache\"))\n    local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)\n    return OCPCalculator(checkpoint_path=local_path, cpu=(device == \"cpu\"))\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.0","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121"},"checkpoints":{"equiformer-v2-153m-s2ef-oc20-all-md":{"fetched_at":"2026-05-27T20:14:52.917283+00:00","verified_at":"2026-06-15T19:40:40.116254+00:00","verified_device":"cuda","last_error":null},"equiformer-v2-31m-s2ef-oc20-all-md":{"fetched_at":"2026-05-27T20:24:41.966527+00:00","verified_at":"2026-06-15T19:43:32.937648+00:00","verified_device":"cuda","last_error":null},"equiformer-v2-83m-s2ef-oc20-2m":{"fetched_at":"2026-05-27T20:36:02.470001+00:00","verified_at":"2026-06-15T19:43:50.030298+00:00","verified_device":"cuda","last_error":null}}},"escn":{"status":"ready","built_at":"2026-05-27T18:30:02.137938+00:00","source_hash":"sha256:3ab4edb97bb0536fe61f79e84262eebe56b25d83aab9e073663de1a3aadaecec","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=1.0.0,<2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\neSCN environment for Rootstock.\n\nUses fairchem-core 1.x to access legacy OC20 eSCN checkpoints via\nOCPCalculator. These checkpoints are optimized for catalysis systems\n(slabs + adsorbates).\n\nModels:\n    - \"eSCN-L6-M2-Lay12-S2EF-OC20-All+MD\": default\n    - \"eSCN-L6-M3-Lay20-S2EF-OC20-All+MD\"\n    - \"eSCN-L6-M2-Lay12-S2EF-OC20-2M\"\n    - \"eSCN-L4-M2-Lay12-S2EF-OC20-2M\"\n\"\"\"\n\nCHECKPOINTS = {\n    \"escn-l6-m2-lay12-s2ef-oc20-all-md\": \"eSCN-L6-M2-Lay12-S2EF-OC20-All+MD\",\n    \"escn-l6-m3-lay20-s2ef-oc20-all-md\": \"eSCN-L6-M3-Lay20-S2EF-OC20-All+MD\",\n    \"escn-l6-m2-lay12-s2ef-oc20-2m\": \"eSCN-L6-M2-Lay12-S2EF-OC20-2M\",\n    \"escn-l4-m2-lay12-s2ef-oc20-2m\": \"eSCN-L4-M2-Lay12-S2EF-OC20-2M\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load an eSCN OC20 calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible OCPCalculator.\n    \"\"\"\n    import os\n    from fairchem.core import OCPCalculator\n    from fairchem.core.models.model_registry import model_name_to_local_file\n\n    cache_dir = os.environ.get(\"XDG_CACHE_HOME\", os.path.expanduser(\"~/.cache\"))\n    local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)\n    return OCPCalculator(checkpoint_path=local_path, cpu=(device == \"cpu\"))\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.0","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121"},"checkpoints":{"escn-l6-m2-lay12-s2ef-oc20-all-md":{"fetched_at":"2026-05-27T20:46:56.896276+00:00","verified_at":"2026-06-15T19:55:16.021149+00:00","verified_device":"cuda","last_error":null},"escn-l6-m3-lay20-s2ef-oc20-all-md":{"fetched_at":"2026-05-27T20:55:38.631868+00:00","verified_at":"2026-06-15T19:56:04.557516+00:00","verified_device":"cuda","last_error":null},"escn-l6-m2-lay12-s2ef-oc20-2m":{"fetched_at":"2026-05-27T21:00:37.420468+00:00","verified_at":"2026-06-15T19:56:19.685141+00:00","verified_device":"cuda","last_error":null},"escn-l4-m2-lay12-s2ef-oc20-2m":{"fetched_at":"2026-05-27T21:03:51.651815+00:00","verified_at":"2026-06-15T19:56:33.074010+00:00","verified_device":"cuda","last_error":null}}},"esen":{"status":"ready","built_at":"2026-05-27T18:30:03.116582+00:00","source_hash":"sha256:5791286b7d2ede75fa6e96e4e3d83ebecfe56f427a86680329b5010703f4f492","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"eSEN env — hosts FAIRChem eSEN single-task checkpoints.\n\nOMol checkpoints expect `charge` and `spin` in `atoms.info`.\n\"\"\"\n\nCHECKPOINTS = {\n    \"esen-md-direct-all-omol\": \"esen-md-direct-all-omol\",\n    \"esen-sm-conserving-all-omol\": \"esen-sm-conserving-all-omol\",\n    \"esen-sm-direct-all-omol\": \"esen-sm-direct-all-omol\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    from fairchem.core import FAIRChemCalculator, pretrained_mlip\n\n    predictor = pretrained_mlip.get_predict_unit(CHECKPOINTS[checkpoint], device=device)\n    return FAIRChemCalculator(predictor)\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"2.14.0","rootstock":"0.9.0","torch":"2.8.0","torch-geometric":"2.7.0"},"checkpoints":{"esen-md-direct-all-omol":{"fetched_at":"2026-05-29T20:22:12.496065+00:00","verified_at":"2026-06-15T20:07:22.733431+00:00","verified_device":"cuda","last_error":null},"esen-sm-conserving-all-omol":{"fetched_at":"2026-05-29T20:23:09.772936+00:00","verified_at":"2026-06-15T20:09:08.674399+00:00","verified_device":"cuda","last_error":null},"esen-sm-direct-all-omol":{"fetched_at":"2026-05-29T20:23:36.686719+00:00","verified_at":"2026-06-15T20:09:19.961651+00:00","verified_device":"cuda","last_error":null}}},"gemnet":{"status":"ready","built_at":"2026-05-27T18:30:04.043387+00:00","source_hash":"sha256:2abec97fa1876c5f12bff09a05f6e70e3f4bdf5808ef60753bfe481fde99038f","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=1.0.0,<2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nGemNet environment for Rootstock.\n\nUses fairchem-core 1.x to access legacy OC20 GemNet checkpoints via\nOCPCalculator. These checkpoints are optimized for catalysis systems\n(slabs + adsorbates), not general-purpose total-energy materials modeling.\n\nModels:\n    - \"GemNet-OC-Large-S2EF-OC20-All+MD\": GemNet-OC large, default\n    - \"GemNet-OC-S2EF-OC20-All+MD\": GemNet-OC All+MD\n    - \"GemNet-OC-S2EF-OC20-All\": GemNet-OC All\n    - \"GemNet-dT-S2EF-OC20-All\": GemNet-dT / GemNet-T All\n\"\"\"\n\nCHECKPOINTS = {\n    \"gemnet-oc-large-s2ef-oc20-all-md\": \"GemNet-OC-Large-S2EF-OC20-All+MD\",\n    \"gemnet-oc-s2ef-oc20-all-md\": \"GemNet-OC-S2EF-OC20-All+MD\",\n    \"gemnet-oc-s2ef-oc20-all\": \"GemNet-OC-S2EF-OC20-All\",\n    \"gemnet-dt-s2ef-oc20-all\": \"GemNet-dT-S2EF-OC20-All\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a GemNet OC20 calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible OCPCalculator.\n    \"\"\"\n    import os\n    from fairchem.core import OCPCalculator\n    from fairchem.core.models.model_registry import model_name_to_local_file\n\n    cache_dir = os.environ.get(\"XDG_CACHE_HOME\", os.path.expanduser(\"~/.cache\"))\n    local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)\n    return OCPCalculator(checkpoint_path=local_path, cpu=(device == \"cpu\"))\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.0","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121"},"checkpoints":{"gemnet-oc-large-s2ef-oc20-all-md":{"fetched_at":"2026-05-28T16:26:12.542112+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: ConnectionResetError: [Errno 104] Connection reset by peer"},"gemnet-oc-s2ef-oc20-all-md":{"fetched_at":"2026-05-27T22:50:42.851368+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: ConnectionResetError: [Errno 104] Connection reset by peer"},"gemnet-oc-s2ef-oc20-all":{"fetched_at":"2026-05-28T16:27:58.064828+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: ConnectionResetError: [Errno 104] Connection reset by peer"},"gemnet-dt-s2ef-oc20-all":{"fetched_at":"2026-05-27T23:34:48.857571+00:00","verified_at":"2026-06-15T20:20:03.786069+00:00","verified_device":"cuda","last_error":null}}},"m3gnet":{"status":"ready","built_at":"2026-05-27T18:30:04.956309+00:00","source_hash":"sha256:5403a2b60c315cc96c190d31799de8281f0e7c41ca6887d5b6ed9ff8e0a9a93c","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"chgnet>=0.4.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n#\n# [tool.uv.sources]\n# torch = { index = \"pytorch-cu128\" }\n#\n# [[tool.uv.index]]\n# name = \"pytorch-cu128\"\n# url = \"https://download.pytorch.org/whl/cu128\"\n# explicit = true\n# ///\n\"\"\"\nM3GNet environment for Rootstock — redirected to CHGNet.\n\nM3GNet-MP-2021.2.8-PES (the universal inorganic PES) is no longer accessible\nvia any modern Python package:\n  - matgl 2.x (PyG backend) only has TensorNet on HuggingFace (materialyze)\n  - matgl 1.x (DGL backend) pointed to a GitHub URL that was removed\n  - The original m3gnet package is archived TensorFlow code\n  - materialyze HuggingFace has only M3GNet-Eform (formation energy, not PES)\n\nFor universal inorganic PES, use:\n  - tensornet.py: TensorNet-MatPES (same authors, newer, better)\n  - chgnet.py: CHGNet (charge-informed, strong on magnetic materials)\n  - orb.py: Orb v3 (universal, supports periodic systems)\n\nThis file loads CHGNet as the practical substitute for M3GNet-PES.\n\"\"\"\n\nCHECKPOINTS = {\n    \"m3gnet-mp-2021-2-8-pes\": \"chgnet-default\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load CHGNet as a substitute for M3GNet-PES.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible CHGNetCalculator.\n    \"\"\"\n    from chgnet.model import CHGNetCalculator\n\n    return CHGNetCalculator(use_device=device)\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","chgnet":"0.4.2","rootstock":"0.9.1.post7.dev0+d45a59c","torch":"2.11.0+cu128"},"checkpoints":{"m3gnet-mp-2021-2-8-pes":{"fetched_at":"2026-05-27T23:42:35.171813+00:00","verified_at":"2026-06-15T20:25:41.305894+00:00","verified_device":"cuda","last_error":null}}},"mace":{"status":"ready","built_at":"2026-05-27T18:30:05.594546+00:00","source_hash":"sha256:179de9d31a8c2763021ce581ca3e39d854eaea1caeea4dd4e80e1394d4e76c17","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"mace-torch>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0,<2.10\",\n# ]\n# ///\n\"\"\"MACE env — hosts MACE-MP-0 and MACE-OFF23 checkpoints.\n\nBoth ship in the same `mace-torch` package, so they share an environment.\nThe `off:` prefix on the upstream string in CHECKPOINTS routes to mace_off()\ninstead of mace_mp().\n\"\"\"\n\nCHECKPOINTS = {\n    \"mace-mp-0-small\": \"small\",\n    \"mace-mp-0-medium\": \"medium\",\n    \"mace-mp-0-large\": \"large\",\n    \"mace-off23-small\": \"off:small\",\n    \"mace-off23-medium\": \"off:medium\",\n    \"mace-off23-large\": \"off:large\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    arg = CHECKPOINTS[checkpoint]\n    if arg.startswith(\"off:\"):\n        from mace.calculators import mace_off\n\n        return mace_off(model=arg[4:], device=device, default_dtype=\"float32\")\n    from mace.calculators import mace_mp\n\n    return mace_mp(model=arg, device=device, default_dtype=\"float32\")\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","mace-torch":"0.3.16","rootstock":"0.9.0","torch":"2.9.1"},"checkpoints":{"mace-mp-0-small":{"fetched_at":"2026-05-27T23:53:20.748457+00:00","verified_at":"2026-06-15T20:35:06.547392+00:00","verified_device":"cuda","last_error":null},"mace-mp-0-medium":{"fetched_at":"2026-05-28T00:02:13.089324+00:00","verified_at":"2026-06-15T20:35:16.452563+00:00","verified_device":"cuda","last_error":null},"mace-mp-0-large":{"fetched_at":"2026-05-28T00:12:23.239855+00:00","verified_at":"2026-06-15T20:35:25.216083+00:00","verified_device":"cuda","last_error":null},"mace-off23-small":{"fetched_at":"2026-05-28T00:24:11.302472+00:00","verified_at":"2026-06-15T20:35:33.274468+00:00","verified_device":"cuda","last_error":null},"mace-off23-medium":{"fetched_at":"2026-05-28T00:32:25.872447+00:00","verified_at":"2026-06-15T20:35:41.325246+00:00","verified_device":"cuda","last_error":null},"mace-off23-large":{"fetched_at":"2026-05-28T00:42:02.039394+00:00","verified_at":"2026-06-15T20:35:49.289678+00:00","verified_device":"cuda","last_error":null}}},"mace_off23":{"status":"ready","built_at":"2026-05-27T18:30:06.301688+00:00","source_hash":"sha256:37d632e7045d40c8b9b7461e6c8e024c6c9f47699152adbf311ad05b58f11240","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"mace-torch>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0,<2.10\",\n# ]\n# ///\n\"\"\"\nMACE-OFF23 environment for Rootstock.\n\nMACE-OFF23 is a transferable force field for organic molecules, distinct from\nMACE-MP-0 (which targets inorganic materials). Use this env for molecular\ndynamics and geometry optimisation of drug-like and organic systems.\n\nModels:\n    - \"small\":  ~4M params, fastest\n    - \"medium\": ~10M params, balanced (default)\n    - \"large\":  ~28M params, most accurate\n\"\"\"\n\nCHECKPOINTS = {\n    \"mace-off23-small\": \"small\",\n    \"mace-off23-medium\": \"medium\",\n    \"mace-off23-large\": \"large\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a MACE-OFF23 calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible calculator.\n    \"\"\"\n    from mace.calculators import mace_off\n\n    return mace_off(model=CHECKPOINTS[checkpoint], device=device, default_dtype=\"float32\")\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","mace-torch":"0.3.16","rootstock":"0.9.0","torch":"2.9.1"},"checkpoints":{}},"mattersim":{"status":"ready","built_at":"2026-05-27T18:30:26.316135+00:00","source_hash":"sha256:951bb88edfccaa1f624a62c2638ff552cf2564e49f137ce26c5b0b610fb6e11e","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"mattersim>=1.1.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n#\n# [tool.uv.sources]\n# torch = { index = \"pytorch-cu128\" }\n#\n# [[tool.uv.index]]\n# name = \"pytorch-cu128\"\n# url = \"https://download.pytorch.org/whl/cu128\"\n# explicit = true\n# ///\n\"\"\"\nMatterSim environment for Rootstock.\n\nProvides access to Microsoft's MatterSim universal potential. MatterSim-v1\ncovers ~100 elements and supports periodic and non-periodic systems.\n\nModels:\n    - \"MatterSim-v1.0.0-5M\": 5M parameter model (faster, default)\n    - \"MatterSim-v1.0.0-1M\": 1M parameter model (smallest)\n\"\"\"\n\nCHECKPOINTS = {\n    \"mattersim-v1-0-0-5m\": \"MatterSim-v1.0.0-5M\",\n    \"mattersim-v1-0-0-1m\": \"MatterSim-v1.0.0-1M\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a MatterSim calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible calculator.\n    \"\"\"\n    from mattersim.forcefield import MatterSimCalculator\n\n    return MatterSimCalculator(load_path=CHECKPOINTS[checkpoint], device=device)\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","mattersim":"1.2.3","rootstock":"0.9.1.post7.dev0+d45a59c","torch":"2.11.0+cu128"},"checkpoints":{"mattersim-v1-0-0-5m":{"fetched_at":"2026-05-28T00:54:05.599803+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: \nstderr: Traceback (most recent call last):\n  File \"/tmp/rootstock_wrapper_l8oyqz5d.py\", line 10, in <module>\n    run_worker(\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/rootstock/worker.py\", line 273, in run_worker\n    calculator = setup_fn(checkpoint, device, **setup_kwargs)\n  File \"/work/hdd/data/rootstock/envs/mattersim/env_source.py\", line 45, in setup\n    from mattersim.forcefield import MatterSimCalculator\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/mattersim/forcefield/__init__.py\", line 1, in <module>\n    from mattersim.forcefield.potential import MatterSimCalculator, Potential\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/mattersim/forcefield/potential.py\", line 25, in <module>\n    from torchmetrics import MeanMetric\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchmetrics/__init__.py\", line 37, in <module>\n    from torchmetrics import functional  # noqa: E402\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchmetrics/functional/__init__.py\", line 56, in <module>\n    from torchmetrics.functional.image._deprecated import (\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchmetrics/functional/image/__init__.py\", line 14, in <module>\n    from torchmetrics.functional.image.arniqa import arniqa\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchmetrics/functional/image/arniqa.py\", line 31, in <module>\n    from torchvision import transforms\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchvision/__init__.py\", line 8, in <module>\n    from torchvision import _meta_registrations, datasets, io, models, ops, transforms, utils  # usort:skip\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchvision/_meta_registrations.py\", line 164, in <module>\n    def meta_nms(dets, scores, iou_threshold):\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torch/library.py\", line 1087, in register\n    use_lib._register_fake(\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torch/library.py\", line 204, in _register_fake\n    handle = entry.fake_impl.register(\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torch/_library/fake_impl.py\", line 50, in register\n    if torch._C._dispatch_has_kernel_for_dispatch_key(self.qualname, \"Meta\"):\nRuntimeError: operator torchvision::nms does not exist\n"},"mattersim-v1-0-0-1m":{"fetched_at":"2026-05-28T01:03:35.937807+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: \nstderr: Traceback (most recent call last):\n  File \"/tmp/rootstock_wrapper_ps4rv3fj.py\", line 10, in <module>\n    run_worker(\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/rootstock/worker.py\", line 273, in run_worker\n    calculator = setup_fn(checkpoint, device, **setup_kwargs)\n  File \"/work/hdd/data/rootstock/envs/mattersim/env_source.py\", line 45, in setup\n    from mattersim.forcefield import MatterSimCalculator\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/mattersim/forcefield/__init__.py\", line 1, in <module>\n    from mattersim.forcefield.potential import MatterSimCalculator, Potential\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/mattersim/forcefield/potential.py\", line 25, in <module>\n    from torchmetrics import MeanMetric\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchmetrics/__init__.py\", line 37, in <module>\n    from torchmetrics import functional  # noqa: E402\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchmetrics/functional/__init__.py\", line 56, in <module>\n    from torchmetrics.functional.image._deprecated import (\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchmetrics/functional/image/__init__.py\", line 14, in <module>\n    from torchmetrics.functional.image.arniqa import arniqa\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchmetrics/functional/image/arniqa.py\", line 31, in <module>\n    from torchvision import transforms\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchvision/__init__.py\", line 8, in <module>\n    from torchvision import _meta_registrations, datasets, io, models, ops, transforms, utils  # usort:skip\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torchvision/_meta_registrations.py\", line 164, in <module>\n    def meta_nms(dets, scores, iou_threshold):\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torch/library.py\", line 1087, in register\n    use_lib._register_fake(\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torch/library.py\", line 204, in _register_fake\n    handle = entry.fake_impl.register(\n  File \"/work/hdd/data/rootstock/envs/mattersim/lib/python3.10/site-packages/torch/_library/fake_impl.py\", line 50, in register\n    if torch._C._dispatch_has_kernel_for_dispatch_key(self.qualname, \"Meta\"):\nRuntimeError: operator torchvision::nms does not exist\n"}}},"nequip":{"status":"ready","built_at":"2026-05-27T18:30:27.377985+00:00","source_hash":"sha256:ef09e630a88045a5226e3c1b4eef548831b002cfc06692e5109a3820d223b9de","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"nequip>=0.6.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n#     \"torch-geometric\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nNequIP environment for Rootstock.\n\nNequIP (Neural Equivariant Interatomic Potentials) is an E(3)-equivariant\nGNN potential. Models must be trained and deployed via `nequip-deploy`;\nthis env loads a deployed .pth model file.\n\nUsage: pass a path to a deployed NequIP model as `model`.\n\nNote: NequIP is system-specific (not universal). The checkpoint must match\nthe element set of your system.\n\"\"\"\n\nCHECKPOINTS = {\n    \"nequip-deployed-model\": \"deployed_nequip.pth\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a NequIP calculator from a deployed model file.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible NequIPCalculator.\n    \"\"\"\n    from inspect import signature\n\n    try:\n        from nequip.integrations.ase import NequIPCalculator\n    except ImportError:\n        from nequip.ase import NequIPCalculator\n\n    if hasattr(NequIPCalculator, \"from_deployed_model\"):\n        load_model = NequIPCalculator.from_deployed_model\n    elif hasattr(NequIPCalculator, \"from_compiled_model\"):\n        load_model = NequIPCalculator.from_compiled_model\n    else:\n        raise AttributeError(\n            \"NequIPCalculator has neither from_deployed_model nor from_compiled_model\"\n        )\n\n    params = signature(load_model).parameters\n    kwargs = {\"device\": device} if \"device\" in params else {}\n    model = CHECKPOINTS[checkpoint]\n    for path_arg in (\"model_path\", \"file_name\", \"path\"):\n        if path_arg in params:\n            return load_model(**{path_arg: model}, **kwargs)\n    return load_model(model, **kwargs)\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","nequip":"0.18.0","rootstock":"0.9.0","torch":"2.12.0","torch-geometric":"2.7.0"},"checkpoints":{"nequip-deployed-model":{"fetched_at":null,"verified_at":null,"verified_device":null,"last_error":"download: ValueError: Unknown file type: deployed_nequip.pth (expected `*.nequip.pth` or `*.nequip.pt2`)"}}},"orb":{"status":"ready","built_at":"2026-05-27T18:30:28.261733+00:00","source_hash":"sha256:95f8bf953164eb778ff21094fd008ebca5249ff0dfe5e211ee78b0f130e42745","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"orb-models>=0.4.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n#\n# [tool.uv.sources]\n# torch = { index = \"pytorch-cu128\" }\n#\n# [[tool.uv.index]]\n# name = \"pytorch-cu128\"\n# url = \"https://download.pytorch.org/whl/cu128\"\n# explicit = true\n# ///\n\"\"\"Orb env — hosts Orbital Materials' Orb universal potentials.\"\"\"\n\nCHECKPOINTS = {\n    \"orb-v2\": \"orb-v2\",\n    \"orb-d3-v2\": \"orb-d3-v2\",\n    \"orb-mptraj-only-v2\": \"orb-mptraj-only-v2\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    import torch\n    from orb_models.forcefield import pretrained\n    from orb_models.forcefield.calculator import ORBCalculator\n\n    # orb-models exposes one function per checkpoint, e.g. pretrained.orb_v2().\n    fn_name = CHECKPOINTS[checkpoint].replace(\"-\", \"_\")\n    load_fn = getattr(pretrained, fn_name)\n    orbff = load_fn(device=torch.device(device))\n    return ORBCalculator(orbff, device=torch.device(device))\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","orb-models":"0.5.5","rootstock":"0.9.1.post7.dev0+d45a59c","torch":"2.11.0+cu128"},"checkpoints":{"orb-v2":{"fetched_at":"2026-05-28T01:24:48.750513+00:00","verified_at":"2026-06-15T20:56:14.059513+00:00","verified_device":"cuda","last_error":null},"orb-d3-v2":{"fetched_at":"2026-05-28T01:34:25.688218+00:00","verified_at":"2026-06-15T20:56:38.448489+00:00","verified_device":"cuda","last_error":null},"orb-mptraj-only-v2":{"fetched_at":"2026-05-28T01:42:35.416000+00:00","verified_at":"2026-06-15T20:57:00.815941+00:00","verified_device":"cuda","last_error":null}}},"orb_v3":{"status":"ready","built_at":"2026-05-27T18:30:39.194971+00:00","source_hash":"sha256:b430fa04dfc1a1f88b106c074f85657d2dee005a9c7cf64e838bd7febb60b2eb","source":"# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n#     \"orb-models>=0.6.2\",\n#     \"ase>=3.25\",\n#     \"torch>=2.8\",\n# ]\n#\n# [tool.uv.sources]\n# torch = { index = \"pytorch-cu128\" }\n#\n# [[tool.uv.index]]\n# name = \"pytorch-cu128\"\n# url = \"https://download.pytorch.org/whl/cu128\"\n# explicit = true\n# ///\n\"\"\"Orb v3 env — Orbital Materials' Orb v3 universal potentials.\n\nSeparate from orb.py because orb-models>=0.5 changed the loader API\n(returns a tuple, requires `atoms_adapter` on ORBCalculator, moved calculator\nimport path) and 0.6.x bumped the Python floor to 3.12 and torch to 2.8.\n\"\"\"\n\nCHECKPOINTS = {\n    \"orb-v3-conservative-inf-omat\": \"orb-v3-conservative-inf-omat\",\n    \"orb-v3-conservative-20-omat\":  \"orb-v3-conservative-20-omat\",\n    \"orb-v3-direct-inf-omat\":       \"orb-v3-direct-inf-omat\",\n    \"orb-v3-direct-20-omat\":        \"orb-v3-direct-20-omat\",\n    \"orb-v3-conservative-inf-mpa\":  \"orb-v3-conservative-inf-mpa\",\n    \"orb-v3-conservative-20-mpa\":   \"orb-v3-conservative-20-mpa\",\n    \"orb-v3-direct-inf-mpa\":        \"orb-v3-direct-inf-mpa\",\n    \"orb-v3-direct-20-mpa\":         \"orb-v3-direct-20-mpa\",\n    \"orb-v3-conservative-omol\":     \"orb-v3-conservative-omol\",\n    \"orb-v3-direct-omol\":           \"orb-v3-direct-omol\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\", precision: str = \"float32-high\"):\n    import torch\n    from orb_models.forcefield import pretrained\n    from orb_models.forcefield.inference.calculator import ORBCalculator\n\n    fn_name = CHECKPOINTS[checkpoint].replace(\"-\", \"_\")\n    load_fn = getattr(pretrained, fn_name)\n    orbff, atoms_adapter = load_fn(device=torch.device(device), precision=precision)\n    return ORBCalculator(orbff, atoms_adapter=atoms_adapter, device=torch.device(device))\n","python_requires":">=3.12","dependencies":{"ase":"3.28.0","orb-models":"0.7.0","rootstock":"0.9.1.post7.dev0+d45a59c","torch":"2.11.0+cu128"},"checkpoints":{"orb-v3-conservative-inf-omat":{"fetched_at":"2026-05-28T01:56:18.171838+00:00","verified_at":"2026-06-15T21:12:59.439366+00:00","verified_device":"cuda","last_error":null},"orb-v3-conservative-20-omat":{"fetched_at":"2026-05-28T02:11:08.105458+00:00","verified_at":"2026-06-15T21:15:31.494259+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-inf-omat":{"fetched_at":"2026-05-28T02:26:35.648193+00:00","verified_at":"2026-06-15T21:15:49.467690+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-20-omat":{"fetched_at":"2026-05-28T02:40:11.744005+00:00","verified_at":"2026-06-15T21:16:08.199584+00:00","verified_device":"cuda","last_error":null},"orb-v3-conservative-inf-mpa":{"fetched_at":"2026-05-28T02:45:24.638500+00:00","verified_at":"2026-06-15T21:16:40.923760+00:00","verified_device":"cuda","last_error":null},"orb-v3-conservative-20-mpa":{"fetched_at":"2026-05-28T02:47:42.540585+00:00","verified_at":"2026-06-15T21:17:14.936149+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-inf-mpa":{"fetched_at":"2026-05-28T03:01:52.522259+00:00","verified_at":"2026-06-15T21:17:40.899796+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-20-mpa":{"fetched_at":"2026-05-28T03:15:56.104060+00:00","verified_at":"2026-06-15T21:18:06.021431+00:00","verified_device":"cuda","last_error":null},"orb-v3-conservative-omol":{"fetched_at":"2026-05-28T03:30:43.832888+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: ConnectionResetError: [Errno 104] Connection reset by peer"},"orb-v3-direct-omol":{"fetched_at":"2026-05-28T03:36:12.462618+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: ConnectionResetError: [Errno 104] Connection reset by peer"}}},"painn":{"status":"ready","built_at":"2026-05-27T18:30:41.718045+00:00","source_hash":"sha256:aecf4c9f6d922d54590cc5f9417dbf3479fb6154576fa7e8f029e0cf67e31149","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=1.0.0,<2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nPaiNN environment for Rootstock.\n\nUses fairchem-core 1.x to access legacy OC20 PaiNN checkpoints via\nOCPCalculator. These checkpoints are optimized for catalysis systems\n(slabs + adsorbates).\n\nModels:\n    - \"PaiNN-S2EF-OC20-All\": default\n\"\"\"\n\nCHECKPOINTS = {\n    \"painn-s2ef-oc20-all\": \"PaiNN-S2EF-OC20-All\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a PaiNN OC20 calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible OCPCalculator.\n    \"\"\"\n    import os\n    from fairchem.core import OCPCalculator\n    from fairchem.core.models.model_registry import model_name_to_local_file\n\n    cache_dir = os.environ.get(\"XDG_CACHE_HOME\", os.path.expanduser(\"~/.cache\"))\n    local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)\n    return OCPCalculator(checkpoint_path=local_path, cpu=(device == \"cpu\"))\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.0","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121"},"checkpoints":{"painn-s2ef-oc20-all":{"fetched_at":"2026-05-28T03:48:12.979387+00:00","verified_at":"2026-06-15T21:28:56.527181+00:00","verified_device":"cuda","last_error":null}}},"schnet":{"status":"ready","built_at":"2026-05-27T18:30:44.866896+00:00","source_hash":"sha256:33ddd37474320e13d20c8080996503ab0251f145b29a144e023ab588ab50c594","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=1.0.0,<2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nSchNet environment for Rootstock.\n\nUses fairchem-core 1.x to access legacy OC20 SchNet checkpoints via\nOCPCalculator. These checkpoints are optimized for catalysis systems\n(slabs + adsorbates).\n\nModels:\n    - \"SchNet-S2EF-OC20-All\": default\n    - \"SchNet-S2EF-OC20-20M\"\n    - \"SchNet-S2EF-OC20-2M\"\n    - \"SchNet-S2EF-OC20-200k\"\n\"\"\"\n\nCHECKPOINTS = {\n    \"schnet-s2ef-oc20-all\": \"SchNet-S2EF-OC20-All\",\n    \"schnet-s2ef-oc20-20m\": \"SchNet-S2EF-OC20-20M\",\n    \"schnet-s2ef-oc20-2m\": \"SchNet-S2EF-OC20-2M\",\n    \"schnet-s2ef-oc20-200k\": \"SchNet-S2EF-OC20-200k\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a SchNet OC20 calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible OCPCalculator.\n    \"\"\"\n    import os\n    from fairchem.core import OCPCalculator\n    from fairchem.core.models.model_registry import model_name_to_local_file\n\n    cache_dir = os.environ.get(\"XDG_CACHE_HOME\", os.path.expanduser(\"~/.cache\"))\n    local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)\n    return OCPCalculator(checkpoint_path=local_path, cpu=(device == \"cpu\"))\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.0","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121"},"checkpoints":{"schnet-s2ef-oc20-all":{"fetched_at":"2026-05-28T03:58:00.605190+00:00","verified_at":"2026-06-15T21:38:33.422158+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-20m":{"fetched_at":"2026-05-28T03:58:26.243810+00:00","verified_at":"2026-06-15T21:38:45.217923+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-2m":{"fetched_at":"2026-05-28T03:58:50.805638+00:00","verified_at":"2026-06-15T21:38:56.047657+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-200k":{"fetched_at":"2026-05-28T03:59:12.227443+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: forces are all (near-)zero — model likely returned zeros"}}},"scn":{"status":"ready","built_at":"2026-05-27T18:30:47.021495+00:00","source_hash":"sha256:ef4cf654469a8a9b3552fa550ac7c9637d96c2868c65c73be5a101434cf20afc","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=1.0.0,<2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nSCN environment for Rootstock.\n\nUses fairchem-core 1.x to access legacy OC20 SCN checkpoints via\nOCPCalculator. These checkpoints are optimized for catalysis systems\n(slabs + adsorbates).\n\nModels:\n    - \"SCN-S2EF-OC20-All+MD\": default\n    - \"SCN-t4-b2-S2EF-OC20-2M\"\n    - \"SCN-S2EF-OC20-2M\"\n\"\"\"\n\nCHECKPOINTS = {\n    \"scn-s2ef-oc20-all-md\": \"SCN-S2EF-OC20-All+MD\",\n    \"scn-t4-b2-s2ef-oc20-2m\": \"SCN-t4-b2-S2EF-OC20-2M\",\n    \"scn-s2ef-oc20-2m\": \"SCN-S2EF-OC20-2M\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load an SCN OC20 calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible OCPCalculator.\n    \"\"\"\n    import os\n    from fairchem.core import OCPCalculator\n    from fairchem.core.models.model_registry import model_name_to_local_file\n\n    cache_dir = os.environ.get(\"XDG_CACHE_HOME\", os.path.expanduser(\"~/.cache\"))\n    local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)\n    return OCPCalculator(checkpoint_path=local_path, cpu=(device == \"cpu\"))\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.0","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121"},"checkpoints":{"scn-s2ef-oc20-all-md":{"fetched_at":"2026-05-28T04:10:21.927792+00:00","verified_at":"2026-06-15T21:48:18.468658+00:00","verified_device":"cuda","last_error":null},"scn-t4-b2-s2ef-oc20-2m":{"fetched_at":"2026-05-28T04:13:15.352385+00:00","verified_at":"2026-06-15T21:48:37.857164+00:00","verified_device":"cuda","last_error":null},"scn-s2ef-oc20-2m":{"fetched_at":"2026-05-28T04:13:56.082438+00:00","verified_at":"2026-06-15T21:48:55.246529+00:00","verified_device":"cuda","last_error":null}}},"tensornet":{"status":"ready","built_at":"2026-05-27T18:31:03.490534+00:00","source_hash":"sha256:0d156c8e67aa2e05d398fb00d39d58dede133348c28e40f40730b636981beb64","source":"# /// script\n# requires-python = \">=3.11\"\n# dependencies = [\n#     \"torch>=2.4.0,<2.5\",\n#     \"ase>=3.22\",\n#     \"huggingface_hub\",\n#     \"matgl\",\n#     \"nvalchemi-toolkit-ops\",\n#     \"pymatgen\",\n#     \"monty\",\n#     \"ruamel.yaml\",\n#     \"scipy\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n#     \"torch-spline-conv\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n#\n# [tool.uv.sources]\n# matgl = { git = \"https://github.com/materialsvirtuallab/matgl.git\" }\n# ///\n\"\"\"TensorNet env — hosts MatPES TensorNet checkpoints via MatGL.\"\"\"\n\nCHECKPOINTS = {\n    \"tensornet-matpes-pbe-2025-2\": \"materialyze/TensorNet-PES-MatPES-PBE-2025.2\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    import torch\n\n    torch.set_default_device(device)\n\n    # matgl 1.0.0 imports ExpCellFilter from ase.constraints, but it moved to\n    # ase.filters in ASE 3.23. Patch it in before matgl imports.\n    import ase.constraints\n\n    if not hasattr(ase.constraints, \"ExpCellFilter\"):\n        from ase.filters import ExpCellFilter\n\n        ase.constraints.ExpCellFilter = ExpCellFilter\n\n    # DGL 2.x graphbolt imports torchdata submodules removed in torchdata>=0.7.\n    # Stub the entire graphbolt subpackage before `import dgl` runs; DGL's\n    # __init__ will use our empty stub and skip the real graphbolt initialisation.\n    # matgl only uses DGL for graph construction — graphbolt is never called.\n    import sys, types\n\n    for _name in [\n        \"dgl.graphbolt\",\n        \"dgl.graphbolt.base\",\n        \"dgl.graphbolt.dataloader\",\n        \"dgl.graphbolt.feature_fetcher\",\n        \"dgl.graphbolt.minibatch_transformer\",\n    ]:\n        if _name not in sys.modules:\n            sys.modules[_name] = types.ModuleType(_name)\n\n    from huggingface_hub import snapshot_download\n\n    import matgl\n    from matgl.ext.ase import PESCalculator\n\n    # matgl 1.0.0 load_model only checks the GitHub manifest; HF models must\n    # be downloaded explicitly and passed as a local path.\n    local_path = snapshot_download(repo_id=CHECKPOINTS[checkpoint])\n    pot = matgl.load_model(local_path)\n    return PESCalculator(potential=pot)\n","python_requires":">=3.11","dependencies":{"ase":"3.28.0","huggingface-hub":"1.19.0","matgl":"4.0.2","monty":"2026.5.18","nvalchemi-toolkit-ops":"0.3.1","pymatgen":"2026.5.4","rootstock":"0.9.1.post7.dev0+d45a59c","ruamel-yaml":"0.19.1","scipy":"1.17.1","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.8.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121","torch-spline-conv":"1.2.2+pt24cu121"},"checkpoints":{"tensornet-matpes-pbe-2025-2":{"fetched_at":"2026-05-28T04:30:24.954885+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: \nstderr: Traceback (most recent call last):\n  File \"/tmp/rootstock_wrapper_mb6ogavk.py\", line 10, in <module>\n    run_worker(\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/rootstock/worker.py\", line 273, in run_worker\n    calculator = setup_fn(checkpoint, device, **setup_kwargs)\n                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/work/hdd/data/rootstock/envs/tensornet/env_source.py\", line 66, in setup\n    from matgl.ext.ase import PESCalculator\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/matgl/ext/ase.py\", line 42, in <module>\n    from matgl.ext._alchmtk import neighbor_list_from_ase\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/matgl/ext/_alchmtk.py\", line 35, in <module>\n    from nvalchemiops.neighborlist import estimate_max_neighbors, neighbor_list\n  File \"<frozen importlib._bootstrap>\", line 1229, in _handle_fromlist\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/nvalchemiops/neighborlist/__init__.py\", line 158, in __getattr__\n    import nvalchemiops.torch.neighbors as _torch_neighbors\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/nvalchemiops/torch/neighbors/__init__.py\", line 26, in <module>\n    from nvalchemiops.torch.neighbors.batch_cell_list import (\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/nvalchemiops/torch/neighbors/batch_cell_list.py\", line 144, in <module>\n    @torch.library.custom_op(\n     ^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/torch/_library/custom_ops.py\", line 119, in inner\n    schema_str = torch._custom_op.impl.infer_schema(fn, mutates_args)\n                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/torch/_library/infer_schema.py\", line 42, in infer_schema\n    error_fn(\n  File \"/work/hdd/data/rootstock/envs/tensornet/lib/python3.11/site-packages/torch/_library/infer_schema.py\", line 21, in error_fn\n    raise ValueError(\nValueError: infer_schema(func): Parameter positions has unsupported type torch.Tensor. The valid types are: dict_keys([<class 'torch.Tensor'>, typing.Optional[torch.Tensor], typing.Sequence[torch.Tensor], typing.List[torch.Tensor], typing.Sequence[typing.Optional[torch.Tensor]], typing.List[typing.Optional[torch.Tensor]], <class 'int'>, typing.Optional[int], typing.Sequence[int], typing.List[int], typing.Optional[typing.Sequence[int]], typing.Optional[typing.List[int]], <class 'float'>, typing.Optional[float], typing.Sequence[float], typing.List[float], typing.Optional[typing.Sequence[float]], typing.Optional[typing.List[float]], <class 'bool'>, typing.Optional[bool], typing.Sequence[bool], typing.List[bool], typing.Optional[typing.Sequence[bool]], typing.Optional[typing.List[bool]], <class 'str'>, typing.Optional[str], typing.Union[int, float, bool], typing.Union[int, float, bool, NoneType], typing.Sequence[typing.Union[int, float, bool]], typing.List[typing.Union[int, float, bool]], <class 'torch.dtype'>, typing.Optional[torch.dtype], <class 'torch.device'>, typing.Optional[torch.device]]). Got func with signature (positions: 'torch.Tensor', cutoff: 'float', cell: 'torch.Tensor', pbc: 'torch.Tensor', batch_idx: 'torch.Tensor', cells_per_dimension: 'torch.Tensor', atom_periodic_shifts: 'torch.Tensor', atom_to_cell_mapping: 'torch.Tensor', atoms_per_cell_count: 'torch.Tensor', cell_atom_start_indices: 'torch.Tensor', cell_atom_list: 'torch.Tensor') -> 'None')\n"}}},"torchmdnet":{"status":"ready","built_at":"2026-05-27T18:31:05.154469+00:00","source_hash":"sha256:2d450cc9f2fe5af10718f34d754db79b3b5aa01829f0d12a529f0e6bee71cc6a","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"torchmd-net\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0,<2.5\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nTorchMD-Net environment for Rootstock.\n\nTorchMD-Net provides equivariant transformer architectures for molecular\ndynamics. Includes pretrained universal models (e.g., ET-OC20).\n\nModels:\n    - Path to a local .ckpt file, or a HuggingFace repo ID.\n    - Example pretrained: \"tensorfield/ET-OC20\" (inorganic) — not universal.\n\nNote: TorchMD-Net's primary use case is organic/biomolecular MD. For\ninorganic universal potentials, prefer TensorNet or M3GNet.\n\"\"\"\n\nCHECKPOINTS = {\n    \"torchmdnet-et-oc20\": \"tensorfield/ET-OC20\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a TorchMD-Net calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cpu\").\n\n    Returns:\n        ASE-compatible calculator.\n    \"\"\"\n    import torch\n    from torchmdnet.calculators import External\n\n    calc = External(CHECKPOINTS[checkpoint], device=device)\n    return calc\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","rootstock":"0.9.1.post7.dev0+d45a59c","torch":"2.4.1","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.8.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121","torchmd-net":"3.0.3"},"checkpoints":{"torchmdnet-et-oc20":{"fetched_at":null,"verified_at":null,"verified_device":null,"last_error":"download: ValueError: infer_schema(func): Parameter x has unsupported type Tensor. The valid types are: dict_keys([<class 'torch.Tensor'>, typing.Optional[torch.Tensor], typing.Sequence[torch.Tensor], typing.List[torch.Tensor], typing.Sequence[typing.Optional[torch.Tensor]], typing.List[typing.Optional[torch.Tensor]], <class 'int'>, typing.Optional[int], typing.Sequence[int], typing.List[int], typing.Optional[typing.Sequence[int]], typing.Optional[typing.List[int]], <class 'float'>, typing.Optional[float], typing.Sequence[float], typing.List[float], typing.Optional[typing.Sequence[float]], typing.Optional[typing.List[float]], <class 'bool'>, typing.Optional[bool], typing.Sequence[bool], typing.List[bool], typing.Optional[typing.Sequence[bool]], typing.Optional[typing.List[bool]], <class 'str'>, typing.Optional[str], typing.Union[int, float, bool], typing.Union[int, float, bool, NoneType], typing.Sequence[typing.Union[int, float, bool]], typing.List[typing.Union[int, float, bool]], <class 'torch.dtype'>, typing.Optional[torch.dtype], <class 'torch.device'>, typing.Optional[torch.device]]). Got func with signature (x: 'Tensor', y: 'Tensor', z: 'Tensor') -> 'Tensor')"}}},"uma":{"status":"ready","built_at":"2026-05-27T18:31:08.315865+00:00","source_hash":"sha256:27d2661a6ec3e72af764c49fc3688e2bbbc41f2f01d753dd9c6c1262663dc5f8","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"UMA env — hosts Meta's UMA foundation model via FAIRChem.\"\"\"\n\nCHECKPOINTS = {\n    \"uma-s-1\": \"uma-s-1\",\n    \"uma-s-1p1\": \"uma-s-1p1\",\n    \"uma-m-1p1\": \"uma-m-1p1\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\", task: str = \"omat\"):\n    from fairchem.core import FAIRChemCalculator, pretrained_mlip\n\n    predictor = pretrained_mlip.get_predict_unit(CHECKPOINTS[checkpoint], device=device)\n    return FAIRChemCalculator(predictor, task_name=task)\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"2.14.0","rootstock":"0.9.0","torch":"2.8.0","torch-geometric":"2.7.0"},"checkpoints":{"uma-s-1":{"fetched_at":"2026-05-29T22:26:56.469944+00:00","verified_at":"2026-06-15T22:11:05.892499+00:00","verified_device":"cuda","last_error":null},"uma-s-1p1":{"fetched_at":"2026-05-29T22:28:10.057752+00:00","verified_at":"2026-06-15T22:12:31.904528+00:00","verified_device":"cuda","last_error":null},"uma-m-1p1":{"fetched_at":"2026-05-29T22:29:01.229731+00:00","verified_at":"2026-06-15T22:13:18.753002+00:00","verified_device":"cuda","last_error":null}}},"sevennet":{"status":"ready","built_at":"2026-05-29T18:20:16.086507+00:00","source_hash":"sha256:d29d033443b7b059a4ef902aafd239c59d513388f128633d91970a01f77c1cc6","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"sevenn>=0.10.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n#\n# [tool.uv.sources]\n# torch = { index = \"pytorch-cu128\" }\n#\n# [[tool.uv.index]]\n# name = \"pytorch-cu128\"\n# url = \"https://download.pytorch.org/whl/cu128\"\n# explicit = true\n# ///\n\"\"\"SevenNet env — hosts pretrained SevenNet universal potentials.\n\nSevenNet (SCalable EquiVariance-Enabled Neural Network) ships several\npretrained models, loaded by keyword through ``SevenNetCalculator``.\n\nMulti-fidelity models (``7net-omni``, ``7net-mf-ompa``) require a ``modal``\nargument selecting the training fidelity (e.g. ``\"mpa\"`` or ``\"omat24\"``).\nThese share one set of backbone weights across all fidelities and only swap a\nper-fidelity reference-energy head at inference time, so ``modal`` changes the\noutputs but not which checkpoint is downloaded. Each is given a sane default\nfidelity (see ``DEFAULT_MODAL``) so ``rootstock add`` / smoke-test work without\nan explicit selector; override at runtime via ``setup_kwargs={\"modal\": ...}``\non RootstockCalculator (or ``--kwarg modal=...`` for ``rootstock add``).\nSingle-fidelity models reject a non-null ``modal``, so it is only passed for\nthe multi-fidelity checkpoints.\n\"\"\"\n\nCHECKPOINTS = {\n    \"sevennet-0\": \"7net-0\",\n    \"sevennet-l3i5\": \"7net-l3i5\",\n    \"sevennet-omat\": \"7net-omat\",\n    \"sevennet-mf-ompa\": \"7net-mf-ompa\",\n    \"sevennet-omni\": \"7net-omni\",\n}\n\n# Default fidelity for the multi-fidelity models. \"mpa\" (MPtrj + sAlex, the\n# general-purpose MP-compatible PBE fidelity) is valid for both and is the\n# fidelity SevenNet positions as the 7net-0 successor. Single-fidelity models\n# are intentionally absent — they take no modal.\nDEFAULT_MODAL = {\n    \"sevennet-mf-ompa\": \"mpa\",\n    \"sevennet-omni\": \"mpa\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\", modal: str | None = None):\n    \"\"\"\n    Load a SevenNet calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\").\n        modal: Fidelity selector for multi-fidelity models (e.g. \"mpa\",\n            \"omat24\"). Defaults to DEFAULT_MODAL[checkpoint] for 7net-omni /\n            7net-mf-ompa; must stay None for single-fidelity models.\n\n    Returns:\n        ASE-compatible calculator.\n    \"\"\"\n    from sevenn.calculator import SevenNetCalculator\n\n    if modal is None:\n        modal = DEFAULT_MODAL.get(checkpoint)\n    kwargs = {\"modal\": modal} if modal is not None else {}\n    return SevenNetCalculator(model=CHECKPOINTS[checkpoint], device=device, **kwargs)\n\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","rootstock":"0.9.1.post7.dev0+d45a59c","sevenn":"0.12.1","torch":"2.11.0+cu128"},"checkpoints":{"sevennet-0":{"fetched_at":"2026-05-29T22:01:54.485090+00:00","verified_at":"2026-06-15T22:21:21.861766+00:00","verified_device":"cuda","last_error":null},"sevennet-l3i5":{"fetched_at":"2026-05-29T22:02:36.743875+00:00","verified_at":"2026-06-15T22:21:30.880111+00:00","verified_device":"cuda","last_error":null},"sevennet-omat":{"fetched_at":"2026-05-29T22:03:12.771958+00:00","verified_at":"2026-06-15T22:21:40.484910+00:00","verified_device":"cuda","last_error":null},"sevennet-mf-ompa":{"fetched_at":"2026-06-15T17:49:18.281636+00:00","verified_at":"2026-06-15T22:21:52.433537+00:00","verified_device":"cuda","last_error":null},"sevennet-omni":{"fetched_at":"2026-06-15T17:49:40.764076+00:00","verified_at":"2026-06-15T22:22:02.655290+00:00","verified_device":"cuda","last_error":null}}}}},{"schema_version":"1","cluster":"sophia","root":"/lus/eagle/projects/Garden-Ai/rootstock","maintainer":{"name":"Hayden Holbrook","email":"hholbrook@uchicago.edu"},"rootstock_version":"0.5.0","python_version":"3.10.19","last_updated":"2026-03-16T16:04:29.755973+00:00","environments":{"chgnet_env":{"status":"ready","built_at":"2026-03-16T15:59:22.114091+00:00","source_hash":"sha256:ee3d3997682c2b5fd44e2e602a917080ad8e29d8e107990636b77af24ecbb871","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"chgnet>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\n# ]\n# ///\n\"\"\"\nCHGNet environment for Rootstock.\n\nThis environment provides access to CHGNet, a pretrained universal neural\nnetwork potential for charge-informed atomistic modeling.\n\"\"\"\n\n\ndef setup(model: str | None = None, device: str = \"cuda\"):\n    \"\"\"\n    Load a CHGNet calculator.\n\n    Args:\n        model: Optional path to a fine-tuned model. If None, uses the\n               default pre-trained CHGNet model.\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from chgnet.model import CHGNetCalculator\n\n    if model:\n        return CHGNetCalculator(model_path=model, use_device=device)\n    return CHGNetCalculator(use_device=device)\n","python_requires":">=3.10","dependencies":{"ase":"3.27.0","chgnet":"0.4.2","rootstock":"0.6.1","torch":"2.10.0"},"checkpoints":[]},"tensornet_env":{"status":"ready","built_at":"2026-03-16T15:59:22.153004+00:00","source_hash":"sha256:df3e142f3a3199673fce02ff8683e1c6fd7343d9ca2cbc9655c6640a9cecef0f","source":"# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"ase>=3.22\",\n#     \"matgl\",\n#     \"nvalchemi-toolkit-ops\",\n#     \"torch-geometric\",\n#     \"torch-scatter\",\n#     \"torch-sparse\",\n#     \"torch-cluster\",\n#     \"torch-spline-conv\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nTensorNet environment for Rootstock.\n\nThis environment provides access to TensorNet models via the MatGL library\nfrom the Materials Virtual Lab.\n\nModels:\n    - \"TensorNet-MatPES-PBE-v2025.1-PES\": MatPES PBE functional (default)\n    - Other MatGL models as available\n\"\"\"\n\n\ndef setup(model: str = \"TensorNet-MatPES-PBE-v2025.1-PES\", device: str = \"cuda\"):\n    \"\"\"\n    Load a TensorNet/MatGL calculator.\n\n    Args:\n        model: Model identifier (e.g., \"TensorNet-MatPES-PBE-v2025.1-PES\").\n               Passed directly to matgl.load_model().\n        device: PyTorch device string (currently MatGL handles device internally)\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    import torch\n    torch.set_default_device(device)\n\n    import matgl\n    from matgl.ext.ase import PESCalculator\n\n    pot = matgl.load_model(model)\n    return PESCalculator(potential=pot)\n","python_requires":">=3.12","dependencies":{"ase":"3.27.0","matgl":"2.1.1","nvalchemi-toolkit-ops":"0.2.0","rootstock":"0.6.1","torch":"2.10.0","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121","torch-spline-conv":"1.2.2+pt24cu121"},"checkpoints":[]},"uma_env":{"status":"ready","built_at":"2026-03-16T15:59:22.197145+00:00","source_hash":"sha256:b8446f98c4c8ad7ff12f9bf39e5658bd45a989662cfa644bf48859bf7fd821c3","source":"# /// script\n# requires-python = \">=3.10,<3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"fairchem-core>=2.0.0\",\n#     \"ase>=3.22\",\n#     \"torch-geometric\",\n# ]\n#\n# [tool.uv]\n# find-links = [\"https://data.pyg.org/whl/torch-2.4.0+cu121.html\"]\n# ///\n\"\"\"\nUMA (Universal Atomistic Model) environment for Rootstock.\n\nThis environment provides access to Meta's UMA foundation model\nvia the FAIRChem library.\n\nModels:\n    - \"uma-s-1p1\": UMA small model (default)\n    - Other UMA variants as released by FAIRChem\n\"\"\"\n\n\ndef setup(model: str = \"uma-s-1p1\", device: str = \"cuda\"):\n    \"\"\"\n    Load a UMA calculator.\n\n    Args:\n        model: Model identifier (e.g., \"uma-s-1p1\"). Passed directly to\n               pretrained_mlip.get_predict_unit().\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from fairchem.core import FAIRChemCalculator, pretrained_mlip\n\n    predictor = pretrained_mlip.get_predict_unit(model, device=device)\n    return FAIRChemCalculator(predictor, task_name=\"omat\")\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.27.0","fairchem-core":"2.14.0","rootstock":"0.6.1","torch":"2.8.0","torch-geometric":"2.7.0"},"checkpoints":[]},"mace_env":{"status":"ready","built_at":"2026-03-16T16:01:51.169812+00:00","source_hash":"sha256:8f49eb565411b7d3f015383c4e5d52ca9770d4295d9cb2c51c10cfa8ab173e75","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"mace-torch>=0.3.0\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0,<2.10\",\n# ]\n# ///\n\"\"\"\nMACE environment for Rootstock.\n\nThis environment provides access to MACE foundation models for\nmachine learning interatomic potentials.\n\nModels:\n    - \"small\", \"medium\", \"large\": Pre-trained MACE-MP-0 models\n    - Path to a .pt file: Custom fine-tuned model\n\"\"\"\n\n\ndef setup(model: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a MACE calculator.\n\n    Args:\n        model: Model identifier. Can be:\n            - \"small\", \"medium\", \"large\" for MACE-MP-0 foundation models\n            - Path to a .pt file for custom models\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\")\n\n    Returns:\n        ASE-compatible calculator\n    \"\"\"\n    from mace.calculators import mace_mp\n\n    return mace_mp(model=model, device=device, default_dtype=\"float32\")\n","python_requires":">=3.10","dependencies":{"ase":"3.27.0","mace-torch":"0.3.15","rootstock":"0.6.1","torch":"2.9.1"},"checkpoints":[]}}}]}