{"manifests":[{"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.post3.dev0+2fd8104","python_version":"3.10","last_updated":"2026-07-02T09:33:13.035436+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-07-02T07:05:30.554603+00:00","verified_device":"cuda","last_error":null},"ani-1ccx":{"fetched_at":"2026-05-27T18:56:16.515526+00:00","verified_at":"2026-07-02T07:05:35.719494+00:00","verified_device":"cuda","last_error":null},"ani-1x":{"fetched_at":"2026-05-27T18:56:26.779738+00:00","verified_at":"2026-07-02T07:05:39.964229+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-07-02T07:10:29.965773+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-07-02T07:19:18.905625+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-07-02T07:19:43.012878+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-07-02T07:20:06.435583+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-07-02T07:20:30.915073+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-07-02T07:30:18.802269+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-07-02T07:30:32.612275+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-07-02T07:30:51.591968+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-07-02T07:38:55.281434+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-07-02T07:39:15.967323+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-07-02T07:39:30.131360+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-07-02T07:39:43.408688+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-07-02T07:47:34.226783+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-07-02T07:48:04.163917+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-07-02T07:48:18.024383+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-07-02T07:56:34.487769+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-07-02T08:01:33.572491+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-07-02T08:09:38.056664+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-07-02T08:09:46.206061+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-07-02T08:09:54.234163+00:00","verified_device":"cuda","last_error":null},"mace-off23-small":{"fetched_at":"2026-05-28T00:24:11.302472+00:00","verified_at":"2026-07-02T08:10:01.981014+00:00","verified_device":"cuda","last_error":null},"mace-off23-medium":{"fetched_at":"2026-05-28T00:32:25.872447+00:00","verified_at":"2026-07-02T08:10:09.496892+00:00","verified_device":"cuda","last_error":null},"mace-off23-large":{"fetched_at":"2026-05-28T00:42:02.039394+00:00","verified_at":"2026-07-02T08:10:17.268485+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_xr1dfwln.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_ghzz9lah.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-07-02T08:27:01.097463+00:00","verified_device":"cuda","last_error":null},"orb-d3-v2":{"fetched_at":"2026-05-28T01:34:25.688218+00:00","verified_at":"2026-07-02T08:27:22.130240+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-07-02T08:27:43.216803+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-07-02T08:39:37.043222+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-07-02T08:40:00.692047+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-07-02T08:40:13.823146+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-07-02T08:40:25.080677+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-07-02T08:40:48.069128+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-07-02T08:41:11.163594+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-07-02T08:41:22.646535+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-07-02T08:41:34.101069+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-07-02T08:50:25.610437+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-07-02T08:57:46.292510+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-07-02T08:57:57.827760+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-07-02T08:58:10.308512+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-07-02T09:06:51.101953+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-07-02T09:07:05.680641+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-07-02T09:07:20.642468+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_ub82no5p.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-07-02T09:24:18.526630+00:00","verified_device":"cuda","last_error":null},"uma-s-1p1":{"fetched_at":"2026-05-29T22:28:10.057752+00:00","verified_at":"2026-07-02T09:24:34.667706+00:00","verified_device":"cuda","last_error":null},"uma-m-1p1":{"fetched_at":"2026-05-29T22:29:01.229731+00:00","verified_at":"2026-07-02T09:25:17.602453+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-07-02T09:31:43.661710+00:00","verified_device":"cuda","last_error":null},"sevennet-l3i5":{"fetched_at":"2026-05-29T22:02:36.743875+00:00","verified_at":"2026-07-02T09:31:58.648062+00:00","verified_device":"cuda","last_error":null},"sevennet-omat":{"fetched_at":"2026-05-29T22:03:12.771958+00:00","verified_at":"2026-07-02T09:32:14.458943+00:00","verified_device":"cuda","last_error":null},"sevennet-mf-ompa":{"fetched_at":"2026-06-15T17:49:18.281636+00:00","verified_at":"2026-07-02T09:32:36.261260+00:00","verified_device":"cuda","last_error":null},"sevennet-omni":{"fetched_at":"2026-06-15T17:49:40.764076+00:00","verified_at":"2026-07-02T09:32:57.516716+00:00","verified_device":"cuda","last_error":null}}}}},{"schema_version":3,"cluster":"perlmutter","root":"/global/cfs/cdirs/m4845/rootstock","maintainer":{"name":"Will Engler","email":"willengler@uchicago.edu"},"rootstock_version":"0.9.0.post1.dev0+bfc4a8d","python_version":"3.11","last_updated":"2026-07-02T07:09:18.416279+00:00","environments":{"esen":{"status":"ready","built_at":"2026-05-05T20:06:17.144793+00:00","source_hash":"sha256:b6f257bd833b54c060d4f3ec703d972408f1cd92fd1374048299aa6b7fabe80f","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\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"2.14.0","rootstock":"0.9.3","torch":"2.8.0","torch-geometric":"2.7.0"},"checkpoints":{"esen-md-direct-all-omol":{"fetched_at":"2026-05-05T20:20:42.059140+00:00","verified_at":"2026-07-02T06:05:53.002024+00:00","verified_device":"cuda","last_error":null},"esen-sm-conserving-all-omol":{"fetched_at":"2026-05-05T20:21:07.811155+00:00","verified_at":"2026-07-02T06:06:41.330180+00:00","verified_device":"cuda","last_error":null},"esen-sm-direct-all-omol":{"fetched_at":"2026-05-05T20:21:20.271134+00:00","verified_at":"2026-07-02T06:07:41.086520+00:00","verified_device":"cuda","last_error":null}}},"mace":{"status":"ready","built_at":"2026-05-05T20:09:14.316764+00:00","source_hash":"sha256:b1ff54016790f6c9d3a03a59cbb37fc2529f6da3d7e5d320c0d8f468d3c67fe4","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        return mace_off(model=arg[4:], device=device, default_dtype=\"float32\")\n    from mace.calculators import mace_mp\n    return mace_mp(model=arg, device=device, default_dtype=\"float32\")\n\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","mace-torch":"0.3.15","rootstock":"0.9.3","torch":"2.9.1"},"checkpoints":{"mace-mp-0-small":{"fetched_at":"2026-05-05T20:18:39.848738+00:00","verified_at":"2026-07-02T06:09:24.729450+00:00","verified_device":"cuda","last_error":null},"mace-mp-0-medium":{"fetched_at":"2026-05-05T20:19:14.080969+00:00","verified_at":"2026-07-02T06:10:03.832644+00:00","verified_device":"cuda","last_error":null},"mace-mp-0-large":{"fetched_at":"2026-05-05T20:19:22.191774+00:00","verified_at":"2026-07-02T06:10:46.936441+00:00","verified_device":"cuda","last_error":null},"mace-off23-small":{"fetched_at":"2026-05-05T20:19:30.436114+00:00","verified_at":"2026-07-02T06:11:25.454884+00:00","verified_device":"cuda","last_error":null},"mace-off23-medium":{"fetched_at":"2026-05-05T20:19:38.490688+00:00","verified_at":"2026-07-02T06:12:01.269353+00:00","verified_device":"cuda","last_error":null},"mace-off23-large":{"fetched_at":"2026-05-05T20:19:47.093712+00:00","verified_at":"2026-07-02T06:12:35.375819+00:00","verified_device":"cuda","last_error":null}}},"orb":{"status":"ready","built_at":"2026-05-05T20:11:23.239791+00:00","source_hash":"sha256:b66acebf0f13fcd30498d4d3618ec48d911241748870492236e973ea9eb96d81","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\"\"\"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\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","orb-models":"0.5.5","rootstock":"0.9.3","torch":"2.11.0"},"checkpoints":{"orb-v2":{"fetched_at":"2026-05-05T20:22:12.576486+00:00","verified_at":"2026-07-02T06:14:50.460601+00:00","verified_device":"cuda","last_error":null},"orb-d3-v2":{"fetched_at":"2026-05-13T05:44:13.203797+00:00","verified_at":"2026-07-02T06:15:50.007176+00:00","verified_device":"cuda","last_error":null},"orb-mptraj-only-v2":{"fetched_at":"2026-05-13T05:44:47.364812+00:00","verified_at":"2026-07-02T06:16:47.346793+00:00","verified_device":"cuda","last_error":null}}},"tensornet":{"status":"ready","built_at":"2026-05-05T20:12:46.418309+00:00","source_hash":"sha256:acaab6bae12da9268c64289fc0d4d519cbe9b25c72883f950959b3c304068e69","source":"# /// script\n# requires-python = \">=3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\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    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    if not hasattr(ase.constraints, \"ExpCellFilter\"):\n        from ase.filters import ExpCellFilter\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    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\n","python_requires":">=3.11","dependencies":{"ase":"3.28.0","huggingface-hub":"1.13.0","matgl":"3.0.1","monty":"2026.2.18","nvalchemi-toolkit-ops":"0.3.1","pymatgen":"2026.5.4","rootstock":"0.9.3","ruamel-yaml":"0.19.1","scipy":"1.17.1","torch":"2.11.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":{"tensornet-matpes-pbe-2025-2":{"fetched_at":"2026-05-05T20:23:26.015215+00:00","verified_at":"2026-07-02T06:18:32.909992+00:00","verified_device":"cuda","last_error":null}}},"uma":{"status":"ready","built_at":"2026-05-05T20:13:31.060795+00:00","source_hash":"sha256:9148eb15d25241901b78959c791d3c7583ccdddbcc4cb155e3d6b9c894a3cc9d","source":"# /// script\n# requires-python = \">=3.11\"\n# dependencies = [\n#     \"fairchem-core>=2.20\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0\",\n# ]\n# ///\n\"\"\"UMA env — hosts Meta's UMA foundation model via FAIRChem.\n\nfairchem-core v2 dropped the torch-geometric / pyg-find-links install dance, so\nthis env is a plain PyPI install. uma-s-1 has a known extensivity bug; prefer\numa-s-1p1 or the newer uma-s-1p2.\n\"\"\"\n\nCHECKPOINTS = {\n    \"uma-s-1\": \"uma-s-1\",\n    \"uma-s-1p1\": \"uma-s-1p1\",\n    \"uma-s-1p2\": \"uma-s-1p2\",\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\n","python_requires":">=3.11","dependencies":{"ase":"3.28.0","fairchem-core":"2.20.0","rootstock":"0.9.3","torch":"2.8.0"},"checkpoints":{"uma-s-1p1":{"fetched_at":"2026-05-05T20:24:18.359789+00:00","verified_at":"2026-07-02T06:20:16.441020+00:00","verified_device":"cuda","last_error":null},"uma-s-1p2":{"fetched_at":"2026-05-29T17:24:45.606710+00:00","verified_at":"2026-07-02T06:21:12.521954+00:00","verified_device":"cuda","last_error":null},"uma-m-1p1":{"fetched_at":"2026-05-13T05:46:49.221931+00:00","verified_at":"2026-07-02T06:22:15.980727+00:00","verified_device":"cuda","last_error":null},"uma-s-1":{"fetched_at":null,"verified_at":null,"verified_device":null,"last_error":"download: KeyError: \"Model 'uma-s-1' not found. Available models: ('uma-s-1p2', 'uma-s-1p1', 'uma-m-1p1', 'esen-md-direct-all-omol', 'esen-sm-conserving-all-omol', 'esen-sm-direct-all-omol', 'allscaip-md-conserving-all-omol', 'allscaip-md-direct-all-omol', 'esen-sm-conserving-all-oc25', 'esen-md-direct-all-oc25', 'esen-sm-filtered-odac25', 'esen-sm-full-odac25')\""}}},"ani":{"status":"ready","built_at":"2026-05-13T04:59:19.753621+00:00","source_hash":"sha256:79db9f74f686c210b6939c91350e8c7e99e3ee96df7feb506c489b29499fc8d8","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\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","rootstock":"0.9.3","torch":"2.8.0","torchani":"2.7.9"},"checkpoints":{"ani-2x":{"fetched_at":"2026-05-13T05:47:20.398617+00:00","verified_at":"2026-07-02T06:22:49.744538+00:00","verified_device":"cuda","last_error":null},"ani-1ccx":{"fetched_at":"2026-05-13T05:47:34.046727+00:00","verified_at":"2026-07-02T06:23:05.889342+00:00","verified_device":"cuda","last_error":null},"ani-1x":{"fetched_at":"2026-05-13T05:47:43.615661+00:00","verified_at":"2026-07-02T06:23:23.280494+00:00","verified_device":"cuda","last_error":null}}},"dimenet":{"status":"ready","built_at":"2026-05-13T05:01:04.518777+00:00","source_hash":"sha256:c2d138eb25dd29563abad923a3d7e2e0cd96387afbd9d20f5d151c216b9b620c","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\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.3","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-13T05:52:16.114293+00:00","verified_at":"2026-07-02T06:25:21.419058+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-20m":{"fetched_at":"2026-05-13T05:52:53.969667+00:00","verified_at":"2026-07-02T06:26:22.564860+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-2m":{"fetched_at":"2026-05-13T05:53:25.212221+00:00","verified_at":"2026-07-02T06:27:32.137310+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-200k":{"fetched_at":"2026-05-13T05:53:56.342393+00:00","verified_at":"2026-07-02T06:28:35.198741+00:00","verified_device":"cuda","last_error":null}}},"mattersim":{"status":"ready","built_at":"2026-05-13T05:04:20.440093+00:00","source_hash":"sha256:eec0dbe722246b902c8036b5603f68f11a2bce70ec5c4076d1b4fc77978b6d65","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\"\"\"\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\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","mattersim":"1.2.3","rootstock":"0.9.3","torch":"2.11.0"},"checkpoints":{"mattersim-v1-0-0-5m":{"fetched_at":null,"verified_at":null,"verified_device":null,"last_error":"download: ModuleNotFoundError: No module named 'mattersim.forcefield'; 'mattersim' is not a package"},"mattersim-v1-0-0-1m":{"fetched_at":null,"verified_at":null,"verified_device":null,"last_error":"download: ModuleNotFoundError: No module named 'mattersim.forcefield'; 'mattersim' is not a package"}}},"torchmdnet":{"status":"ready","built_at":"2026-05-13T05:07:54.763376+00:00","source_hash":"sha256:335b6db3e9a5c6c130e4168e4a5b0f86ada126911943614f13446f00ba618aed","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"ase>=3.22\",\n#     \"torch>=2.0\",\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\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","rootstock":"0.9.3","torch":"2.11.0","torch-cluster":"1.6.3+pt24cu121","torch-geometric":"2.7.0","torch-scatter":"2.1.2+pt24cu121","torch-sparse":"0.6.18+pt24cu121"},"checkpoints":{"torchmdnet-et-oc20":{"fetched_at":null,"verified_at":null,"verified_device":null,"last_error":"download: ModuleNotFoundError: No module named 'torchmdnet.calculators'; 'torchmdnet' is not a package"}}},"painn":{"status":"ready","built_at":"2026-05-13T05:10:57.842976+00:00","source_hash":"sha256:d39173057596ed905eabbcc3c260801cb1942add7d41d81e31f907e07a6761a5","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\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.3","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-13T05:51:25.965393+00:00","verified_at":"2026-07-02T06:30:03.033763+00:00","verified_device":"cuda","last_error":null}}},"schnet":{"status":"ready","built_at":"2026-05-13T05:11:27.234598+00:00","source_hash":"sha256:edabc89181b5394ecef367328d41a834fb4f5cf09b8d4a90b7a9bce2961ae189","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\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.3","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-13T05:49:26.566923+00:00","verified_at":"2026-07-02T06:31:41.181647+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-20m":{"fetched_at":"2026-05-13T05:50:06.473485+00:00","verified_at":"2026-07-02T06:33:20.295546+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-2m":{"fetched_at":"2026-05-13T05:50:27.069450+00:00","verified_at":"2026-07-02T06:35:10.129457+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-200k":{"fetched_at":"2026-05-13T05:50:49.693742+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: forces are all (near-)zero — model likely returned zeros"}}},"gemnet":{"status":"ready","built_at":"2026-05-13T05:12:26.685230+00:00","source_hash":"sha256:8f7b560ac851fed95be20e2eca3a3b0bfd92679594a03d6a3fa2b675b64601b3","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\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.3","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-13T05:56:21.705578+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-13T05:57:31.966247+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-13T05:58:09.215482+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-13T05:58:42.756558+00:00","verified_at":"2026-07-02T06:44:09.710837+00:00","verified_device":"cuda","last_error":null}}},"scn":{"status":"ready","built_at":"2026-05-13T05:12:55.842173+00:00","source_hash":"sha256:0fde905c8cc824162afc0504c696070d16ceb61ee9e4ab75f12b249c6c28d2e2","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\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.3","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-13T05:59:31.316693+00:00","verified_at":"2026-07-02T06:45:30.810746+00:00","verified_device":"cuda","last_error":null},"scn-t4-b2-s2ef-oc20-2m":{"fetched_at":"2026-05-13T05:59:54.263447+00:00","verified_at":"2026-07-02T06:46:29.083720+00:00","verified_device":"cuda","last_error":null},"scn-s2ef-oc20-2m":{"fetched_at":"2026-05-13T06:00:09.815012+00:00","verified_at":"2026-07-02T06:47:31.065703+00:00","verified_device":"cuda","last_error":null}}},"escn":{"status":"ready","built_at":"2026-05-13T05:13:18.039893+00:00","source_hash":"sha256:4996446a95c277ba00bbb9c66475ddcfa1d6d551a762b389a730dd30488c76a4","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\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.3","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-13T06:00:37.149802+00:00","verified_at":"2026-07-02T06:48:58.114308+00:00","verified_device":"cuda","last_error":null},"escn-l6-m3-lay20-s2ef-oc20-all-md":{"fetched_at":"2026-05-13T06:01:02.265782+00:00","verified_at":"2026-07-02T06:49:47.959871+00:00","verified_device":"cuda","last_error":null},"escn-l6-m2-lay12-s2ef-oc20-2m":{"fetched_at":"2026-05-13T06:01:17.670169+00:00","verified_at":"2026-07-02T06:50:33.569122+00:00","verified_device":"cuda","last_error":null},"escn-l4-m2-lay12-s2ef-oc20-2m":{"fetched_at":"2026-05-13T06:01:31.051807+00:00","verified_at":"2026-07-02T06:51:21.423282+00:00","verified_device":"cuda","last_error":null}}},"equiformer":{"status":"ready","built_at":"2026-05-13T05:13:50.035016+00:00","source_hash":"sha256:14735979cc1f36baff4cb6ab0722fb8e3b7faa5c89f05221ced7423647cf8336","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\n","python_requires":">=3.10,<3.11","dependencies":{"ase":"3.28.0","fairchem-core":"1.10.0","rootstock":"0.9.3","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-13T06:02:10.024462+00:00","verified_at":"2026-07-02T06:52:41.588236+00:00","verified_device":"cuda","last_error":null},"equiformer-v2-31m-s2ef-oc20-all-md":{"fetched_at":"2026-05-13T06:02:37.137789+00:00","verified_at":"2026-07-02T06:53:25.698065+00:00","verified_device":"cuda","last_error":null},"equiformer-v2-83m-s2ef-oc20-2m":{"fetched_at":"2026-05-13T06:02:57.887693+00:00","verified_at":"2026-07-02T06:54:16.863284+00:00","verified_device":"cuda","last_error":null}}},"orb_v3":{"status":"ready","built_at":"2026-05-13T19:54:52.468584+00:00","source_hash":"sha256:a9a59c927df6ab7f2792c810fa10f1207c5c98a4aa26f944e9575baf805c40dc","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\"\"\"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\n","python_requires":">=3.12","dependencies":{"ase":"3.28.0","orb-models":"0.6.2","rootstock":"0.9.3","torch":"2.12.0"},"checkpoints":{"orb-v3-conservative-inf-omat":{"fetched_at":"2026-05-13T19:56:35.664604+00:00","verified_at":"2026-07-02T06:56:53.960701+00:00","verified_device":"cuda","last_error":null},"orb-v3-conservative-20-omat":{"fetched_at":"2026-05-13T19:57:04.994411+00:00","verified_at":"2026-07-02T06:58:01.278033+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-inf-omat":{"fetched_at":"2026-05-13T19:57:32.582494+00:00","verified_at":"2026-07-02T06:59:08.975355+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-20-omat":{"fetched_at":"2026-05-13T19:57:55.710757+00:00","verified_at":"2026-07-02T07:00:06.931322+00:00","verified_device":"cuda","last_error":null},"orb-v3-conservative-inf-mpa":{"fetched_at":"2026-05-13T19:58:21.979855+00:00","verified_at":"2026-07-02T07:01:13.419409+00:00","verified_device":"cuda","last_error":null},"orb-v3-conservative-20-mpa":{"fetched_at":"2026-05-13T19:58:43.535417+00:00","verified_at":"2026-07-02T07:02:24.739169+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-inf-mpa":{"fetched_at":"2026-05-13T19:59:03.985826+00:00","verified_at":"2026-07-02T07:03:13.172000+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-20-mpa":{"fetched_at":"2026-05-13T19:59:26.938227+00:00","verified_at":"2026-07-02T07:04:02.080298+00:00","verified_device":"cuda","last_error":null},"orb-v3-conservative-omol":{"fetched_at":"2026-05-13T19:59:49.619745+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-13T20:00:10.517192+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: ConnectionResetError: [Errno 104] Connection reset by peer"}}},"allscaip":{"status":"ready","built_at":"2026-05-29T16:37:38.169096+00:00","source_hash":"sha256:7c56066c5f58c0f16fde4796a3be643cf2386aa627d7a8566f4df117c1a7597d","source":"# /// script\n# requires-python = \">=3.11\"\n# dependencies = [\n#     \"fairchem-core>=2.20\",\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0\",\n# ]\n# ///\n\"\"\"AllScAIP env — FAIRChem scalable attention MLIP trained on OMol25.\n\nallscaip-md-conserving-all-omol is an energy-conserving, all-to-all node\nattention model served through fairchem-core's get_predict_unit — the same\nAPI as eSEN. fairchem v2 carries the architecture in-package, so no\nflash-attention or custom CUDA kernels are needed.\n\nOMol checkpoints expect `charge` and `spin` in `atoms.info`.\n\"\"\"\n\nCHECKPOINTS = {\n    \"allscaip-md-conserving-all-omol\": \"allscaip-md-conserving-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\n","python_requires":">=3.11","dependencies":{"ase":"3.28.0","fairchem-core":"2.20.0","rootstock":"0.9.3","torch":"2.8.0"},"checkpoints":{"allscaip-md-conserving-all-omol":{"fetched_at":"2026-05-29T16:47:18.007483+00:00","verified_at":"2026-07-02T07:06:50.799644+00:00","verified_device":"cuda","last_error":null}}},"mace_polar":{"status":"ready","built_at":"2026-05-29T16:40:33.111481+00:00","source_hash":"sha256:d01f6f99fca7ec5bf81a370850c26719ab9fa90999e2142e99d69d0cb4243609","source":"# /// script\n# requires-python = \">=3.10\"\n# dependencies = [\n#     \"ase>=3.22\",\n#     \"torch>=2.4.0,<2.10\",\n#     \"mace-torch @ git+https://github.com/ACEsuit/mace.git@main\",\n#     \"graph-longrange @ git+https://github.com/WillBaldwin0/graph_electrostatics.git\",\n# ]\n# ///\n\"\"\"MACE-POLAR env — electrostatic/polarizable MACE foundation models (OMol25).\n\nMACE-POLAR-1 is not in the PyPI mace-torch release yet, so this env installs\nmace from git main and adds the graph_electrostatics repo, whose distribution\nis named graph-longrange and provides the graph_longrange module PolarMACE\nneeds at runtime. Loaded via mace_polar(), a separate route from the\nmace_mp()/mace_off() loaders used by the stable `mace` env.\n\nPOLAR checkpoints expect `charge`, `spin`, and `external_field` in atoms.info.\n\"\"\"\n\nCHECKPOINTS = {\n    \"mace-polar-1-s\": \"polar-1-s\",\n    \"mace-polar-1-m\": \"polar-1-m\",\n    \"mace-polar-1-l\": \"polar-1-l\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    from mace.calculators import mace_polar\n\n    return mace_polar(model=CHECKPOINTS[checkpoint], device=device, default_dtype=\"float32\")\n\n","python_requires":">=3.10","dependencies":{"ase":"3.28.0","rootstock":"0.9.3","torch":"2.9.1"},"checkpoints":{"mace-polar-1-l":{"fetched_at":"2026-05-29T16:56:53.941970+00:00","verified_at":"2026-07-02T07:07:58.003059+00:00","verified_device":"cuda","last_error":null},"mace-polar-1-m":{"fetched_at":"2026-05-29T16:58:22.990975+00:00","verified_at":"2026-07-02T07:08:32.955488+00:00","verified_device":"cuda","last_error":null},"mace-polar-1-s":{"fetched_at":"2026-05-29T16:58:38.374077+00:00","verified_at":"2026-07-02T07:09:08.754284+00:00","verified_device":"cuda","last_error":null}}}}},{"schema_version":3,"cluster":"polaris","root":"/eagle/Garden-Ai/polaris","maintainer":{"name":"Hayden Holbrook","email":"hholbrook@uchicago.edu"},"rootstock_version":"0.9.0","python_version":"3.10.19","last_updated":"2026-05-12T17:14:51.814837+00:00","environments":{"ani":{"status":"ready","built_at":"2026-05-12T15:01:35.647714+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":{},"checkpoints":{"ani-2x":{"fetched_at":"2026-05-12T15:42:38.857263+00:00","verified_at":"2026-05-12T17:01:06.888505+00:00","verified_device":"cuda","last_error":null},"ani-1ccx":{"fetched_at":"2026-05-12T15:42:55.133040+00:00","verified_at":"2026-05-12T17:01:11.846462+00:00","verified_device":"cuda","last_error":null},"ani-1x":{"fetched_at":"2026-05-12T15:43:09.134172+00:00","verified_at":"2026-05-12T17:01:16.826186+00:00","verified_device":"cuda","last_error":null}}},"chgnet":{"status":"ready","built_at":"2026-05-12T15:01:36.885749+00:00","source_hash":"sha256:31684e39837bf7a22bf60f44ba117eaaf77561bd3541798e792f4c24558dbab5","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\"\"\"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":{},"checkpoints":{}},"equiformer":{"status":"ready","built_at":"2026-05-12T15:02:37.632426+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":{},"checkpoints":{"equiformer-v2-153m-s2ef-oc20-all-md":{"fetched_at":"2026-05-12T16:06:11.257701+00:00","verified_at":"2026-05-12T17:02:43.726006+00:00","verified_device":"cuda","last_error":null},"equiformer-v2-31m-s2ef-oc20-all-md":{"fetched_at":"2026-05-12T16:06:47.555190+00:00","verified_at":"2026-05-12T17:02:55.072351+00:00","verified_device":"cuda","last_error":null},"equiformer-v2-83m-s2ef-oc20-2m":{"fetched_at":"2026-05-12T16:07:31.232656+00:00","verified_at":"2026-05-12T17:03:09.046513+00:00","verified_device":"cuda","last_error":null}}},"escn":{"status":"ready","built_at":"2026-05-12T15:02:54.344782+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":{},"checkpoints":{"escn-l6-m2-lay12-s2ef-oc20-all-md":{"fetched_at":"2026-05-12T16:08:31.190937+00:00","verified_at":"2026-05-12T17:03:38.618672+00:00","verified_device":"cuda","last_error":null},"escn-l6-m3-lay20-s2ef-oc20-all-md":{"fetched_at":"2026-05-12T16:09:27.673398+00:00","verified_at":"2026-05-12T17:03:53.690803+00:00","verified_device":"cuda","last_error":null},"escn-l6-m2-lay12-s2ef-oc20-2m":{"fetched_at":"2026-05-12T16:10:15.527647+00:00","verified_at":"2026-05-12T17:04:05.422235+00:00","verified_device":"cuda","last_error":null},"escn-l4-m2-lay12-s2ef-oc20-2m":{"fetched_at":"2026-05-12T16:10:56.714581+00:00","verified_at":"2026-05-12T17:04:16.602425+00:00","verified_device":"cuda","last_error":null}}},"esen":{"status":"ready","built_at":"2026-05-12T15:03:16.379423+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":{},"checkpoints":{"esen-md-direct-all-omol":{"fetched_at":"2026-05-12T16:31:53.957639+00:00","verified_at":"2026-05-12T17:04:53.287524+00:00","verified_device":"cuda","last_error":null},"esen-sm-conserving-all-omol":{"fetched_at":"2026-05-12T16:32:24.408228+00:00","verified_at":"2026-05-12T17:05:03.200646+00:00","verified_device":"cuda","last_error":null},"esen-sm-direct-all-omol":{"fetched_at":"2026-05-12T16:32:54.260565+00:00","verified_at":"2026-05-12T17:05:12.645662+00:00","verified_device":"cuda","last_error":null}}},"gemnet":{"status":"ready","built_at":"2026-05-12T15:03:34.315322+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":{},"checkpoints":{"gemnet-oc-large-s2ef-oc20-all-md":{"fetched_at":"2026-05-12T16:14:32.509164+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-12T16:15:33.026054+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-12T16:16:17.563655+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-12T16:16:59.084988+00:00","verified_at":"2026-05-12T17:06:30.396898+00:00","verified_device":"cuda","last_error":null}}},"m3gnet":{"status":"ready","built_at":"2026-05-12T15:03:52.279979+00:00","source_hash":"sha256:f14e08ab66d4efaf6aa312ca2466df78e831f380c50e45d035d4aacc68787980","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\"\"\"\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":{},"checkpoints":{"m3gnet-mp-2021-2-8-pes":{"fetched_at":"2026-05-12T16:21:31.528217+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: b'CHGNet v0.3.0 initialized with 412,525 parameters\\n'\nstderr: b'Traceback (most recent call last):\\n  File \"/var/tmp/pbs.7150426.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov/rootstock_wrapper_wvcdqm95.py\", line 10, in <module>\\n    run_worker(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/rootstock/worker.py\", line 273, in run_worker\\n    calculator = setup_fn(checkpoint, device, **setup_kwargs)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/env_source.py\", line 45, in setup\\n    return CHGNetCalculator(use_device=device)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/chgnet/model/dynamics.py\", line 102, in __init__\\n    self.model = CHGNet.load(verbose=False, use_device=self.device)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/chgnet/model/model.py\", line 741, in load\\n    model = model.to(device)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 1384, in to\\n    return self._apply(convert)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 934, in _apply\\n    module._apply(fn)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 934, in _apply\\n    module._apply(fn)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 965, in _apply\\n    param_applied = fn(param)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 1370, in convert\\n    return t.to(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/m3gnet/lib/python3.10/site-packages/torch/cuda/__init__.py\", line 478, in _lazy_init\\n    torch._C._cuda_init()\\nRuntimeError: The NVIDIA driver on your system is too old (found version 12080). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.\\n'"}}},"mace":{"status":"ready","built_at":"2026-05-12T15:04:35.485550+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":{},"checkpoints":{"mace-mp-0-small":{"fetched_at":"2026-05-12T15:43:52.875543+00:00","verified_at":"2026-05-12T17:08:15.465739+00:00","verified_device":"cuda","last_error":null},"mace-mp-0-medium":{"fetched_at":"2026-05-12T15:44:23.155946+00:00","verified_at":"2026-05-12T17:08:23.012875+00:00","verified_device":"cuda","last_error":null},"mace-mp-0-large":{"fetched_at":"2026-05-12T15:44:54.175952+00:00","verified_at":"2026-05-12T17:08:30.715441+00:00","verified_device":"cuda","last_error":null},"mace-off23-small":{"fetched_at":"2026-05-12T15:45:25.940558+00:00","verified_at":"2026-05-12T17:08:38.100841+00:00","verified_device":"cuda","last_error":null},"mace-off23-medium":{"fetched_at":"2026-05-12T15:45:46.996609+00:00","verified_at":"2026-05-12T17:08:44.967243+00:00","verified_device":"cuda","last_error":null},"mace-off23-large":{"fetched_at":"2026-05-12T15:46:11.259910+00:00","verified_at":"2026-05-12T17:08:51.255604+00:00","verified_device":"cuda","last_error":null}}},"mace_off23":{"status":"ready","built_at":"2026-05-12T15:04:54.479214+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":{},"checkpoints":{}},"mattersim":{"status":"ready","built_at":"2026-05-12T15:05:17.833696+00:00","source_hash":"sha256:9ae11a5002dfb4d43dbaf525377b9eca947d1fc3907aa5b964dee25e837bc026","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\"\"\"\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":{},"checkpoints":{"mattersim-v1-0-0-5m":{"fetched_at":"2026-05-12T15:53:00.253059+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: b'\\x1b[32m2026-05-12 17:09:18.820\\x1b[0m | \\x1b[1mINFO    \\x1b[0m | \\x1b[36mmattersim.forcefield.potential\\x1b[0m:\\x1b[36mfrom_checkpoint\\x1b[0m:\\x1b[36m887\\x1b[0m - \\x1b[1mLoading the pre-trained mattersim-v1.0.0-5M.pth model\\x1b[0m\\n'\nstderr: b'/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/__config__.py:9: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 12080). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:119.)\\n  return torch._C._show_config()\\nTraceback (most recent call last):\\n  File \"/var/tmp/pbs.7150426.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov/rootstock_wrapper_5yl5h2a3.py\", line 10, in <module>\\n    run_worker(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/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 \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/env_source.py\", line 39, in setup\\n    return MatterSimCalculator(load_path=CHECKPOINTS[checkpoint], device=device)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/mattersim/forcefield/potential.py\", line 1161, in __init__\\n    self.potential = Potential.from_checkpoint(device=device, **kwargs)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/mattersim/forcefield/potential.py\", line 892, in from_checkpoint\\n    checkpoint = torch.load(load_path, map_location=device)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 1570, in load\\n    return _load(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 2190, in _load\\n    result = unpickler.load()\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/_weights_only_unpickler.py\", line 541, in load\\n    self.append(self.persistent_load(pid))\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 2154, in persistent_load\\n    typed_storage = load_tensor(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 2116, in load_tensor\\n    wrap_storage = restore_location(storage, location)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 1915, in restore_location\\n    return default_restore_location(storage, map_location)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 734, in default_restore_location\\n    result = fn(storage, location)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 667, in _deserialize\\n    device = _validate_device(location, backend_name)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 634, in _validate_device\\n    raise RuntimeError(\\nRuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device(\\'cpu\\') to map your storages to the CPU.\\n'"},"mattersim-v1-0-0-1m":{"fetched_at":"2026-05-12T15:53:42.394611+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: b'\\x1b[32m2026-05-12 17:09:26.475\\x1b[0m | \\x1b[1mINFO    \\x1b[0m | \\x1b[36mmattersim.forcefield.potential\\x1b[0m:\\x1b[36mfrom_checkpoint\\x1b[0m:\\x1b[36m873\\x1b[0m - \\x1b[1mLoading the pre-trained mattersim-v1.0.0-1M.pth model\\x1b[0m\\n'\nstderr: b'/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/__config__.py:9: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 12080). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:119.)\\n  return torch._C._show_config()\\nTraceback (most recent call last):\\n  File \"/var/tmp/pbs.7150426.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov/rootstock_wrapper_dxfwicb9.py\", line 10, in <module>\\n    run_worker(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/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 \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/env_source.py\", line 39, in setup\\n    return MatterSimCalculator(load_path=CHECKPOINTS[checkpoint], device=device)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/mattersim/forcefield/potential.py\", line 1161, in __init__\\n    self.potential = Potential.from_checkpoint(device=device, **kwargs)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/mattersim/forcefield/potential.py\", line 892, in from_checkpoint\\n    checkpoint = torch.load(load_path, map_location=device)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 1570, in load\\n    return _load(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 2190, in _load\\n    result = unpickler.load()\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/_weights_only_unpickler.py\", line 541, in load\\n    self.append(self.persistent_load(pid))\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 2154, in persistent_load\\n    typed_storage = load_tensor(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 2116, in load_tensor\\n    wrap_storage = restore_location(storage, location)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 1915, in restore_location\\n    return default_restore_location(storage, map_location)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 734, in default_restore_location\\n    result = fn(storage, location)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 667, in _deserialize\\n    device = _validate_device(location, backend_name)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/mattersim/lib/python3.10/site-packages/torch/serialization.py\", line 634, in _validate_device\\n    raise RuntimeError(\\nRuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device(\\'cpu\\') to map your storages to the CPU.\\n'"}}},"nequip":{"status":"ready","built_at":"2026-05-12T15:05:38.603989+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":{},"checkpoints":{}},"orb":{"status":"ready","built_at":"2026-05-12T15:06:00.065540+00:00","source_hash":"sha256:0cbfe1165a3adfa529fec8de062a0141950d0972f12cfacc5c82e9244949441e","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\"\"\"Orb env — hosts Orbital Materials' Orb universal potentials.\"\"\"\n\nCHECKPOINTS = {\n    \"orb-v2\": \"orb-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":{},"checkpoints":{"orb-v2":{"fetched_at":"2026-05-12T15:54:52.966649+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: b''\nstderr: b'/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/google/api_core/_python_version_support.py:273: FutureWarning: You are using a Python version (3.10.19) which Google will stop supporting in new releases of google.api_core once it reaches its end of life (2026-10-04). Please upgrade to the latest Python version, or at least Python 3.11, to continue receiving updates for google.api_core past that date.\\n  warnings.warn(message, FutureWarning)\\nTraceback (most recent call last):\\n  File \"/var/tmp/pbs.7150426.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov/rootstock_wrapper_sbcqozzv.py\", line 10, in <module>\\n    run_worker(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/rootstock/worker.py\", line 273, in run_worker\\n    calculator = setup_fn(checkpoint, device, **setup_kwargs)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/env_source.py\", line 24, in setup\\n    orbff = load_fn(device=torch.device(device))\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/orb_models/forcefield/pretrained.py\", line 643, in orb_v2\\n    model = orb_v2_architecture(device=device, system_config=system_config)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/orb_models/forcefield/pretrained.py\", line 163, in orb_v2_architecture\\n    model.cuda(device)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 1097, in cuda\\n    return self._apply(lambda t: t.cuda(device))\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 934, in _apply\\n    module._apply(fn)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 934, in _apply\\n    module._apply(fn)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 934, in _apply\\n    module._apply(fn)\\n  [Previous line repeated 1 more time]\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 1035, in _apply\\n    self._buffers[key] = fn(buf)\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/torch/nn/modules/module.py\", line 1097, in <lambda>\\n    return self._apply(lambda t: t.cuda(device))\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/orb/lib/python3.10/site-packages/torch/cuda/__init__.py\", line 478, in _lazy_init\\n    torch._C._cuda_init()\\nRuntimeError: The NVIDIA driver on your system is too old (found version 12080). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.\\n'"}}},"painn":{"status":"ready","built_at":"2026-05-12T15:06:21.955239+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":{},"checkpoints":{"painn-s2ef-oc20-all":{"fetched_at":"2026-05-12T15:56:41.567330+00:00","verified_at":"2026-05-12T17:10:05.718495+00:00","verified_device":"cuda","last_error":null}}},"schnet":{"status":"ready","built_at":"2026-05-12T15:07:16.651722+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":{},"checkpoints":{"schnet-s2ef-oc20-all":{"fetched_at":"2026-05-12T15:57:31.790782+00:00","verified_at":"2026-05-12T17:10:28.944674+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-20m":{"fetched_at":"2026-05-12T15:57:59.849022+00:00","verified_at":"2026-05-12T17:10:38.611567+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-2m":{"fetched_at":"2026-05-12T15:58:29.310001+00:00","verified_at":"2026-05-12T17:10:48.261786+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-200k":{"fetched_at":"2026-05-12T15:58:57.424302+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-12T15:07:43.110473+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":{},"checkpoints":{"scn-s2ef-oc20-all-md":{"fetched_at":"2026-05-12T16:00:00.180922+00:00","verified_at":"2026-05-12T17:11:23.920279+00:00","verified_device":"cuda","last_error":null},"scn-t4-b2-s2ef-oc20-2m":{"fetched_at":"2026-05-12T16:00:47.685368+00:00","verified_at":"2026-05-12T17:11:36.268917+00:00","verified_device":"cuda","last_error":null},"scn-s2ef-oc20-2m":{"fetched_at":"2026-05-12T16:01:30.743042+00:00","verified_at":"2026-05-12T17:11:48.300282+00:00","verified_device":"cuda","last_error":null}}},"tensornet":{"status":"ready","built_at":"2026-05-12T15:08:46.230005+00:00","source_hash":"sha256:98e7de74cd63b89aabee4ef6b63ba126b936a5e243c46cb47a444847bc374104","source":"# /// script\n# requires-python = \">=3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\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":{},"checkpoints":{"tensornet-matpes-pbe-2025-2":{"fetched_at":"2026-05-12T16:19:36.574905+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: b''\nstderr: b'/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch/__config__.py:9: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 12080). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:119.)\\n  return torch._C._show_config()\\n/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_geometric/__init__.py:4: UserWarning: An issue occurred while importing \\'torch-scatter\\'. Disabling its usage. Stacktrace: Could not load this library: /lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_scatter/_version_cuda.so\\n  import torch_geometric.typing\\n/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_geometric/__init__.py:4: UserWarning: An issue occurred while importing \\'torch-cluster\\'. Disabling its usage. Stacktrace: Could not load this library: /lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_cluster/_version_cuda.so\\n  import torch_geometric.typing\\n/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_geometric/__init__.py:4: UserWarning: An issue occurred while importing \\'torch-spline-conv\\'. Disabling its usage. Stacktrace: Could not load this library: /lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_spline_conv/_version_cuda.so\\n  import torch_geometric.typing\\n/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_geometric/__init__.py:4: UserWarning: An issue occurred while importing \\'torch-sparse\\'. Disabling its usage. Stacktrace: Could not load this library: /lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_sparse/_version_cuda.so\\n  import torch_geometric.typing\\nTraceback (most recent call last):\\n  File \"/var/tmp/pbs.7150426.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov/rootstock_wrapper_jo8xux63.py\", line 10, in <module>\\n    run_worker(\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/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 \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/env_source.py\", line 66, in setup\\n    from matgl.ext.ase import PESCalculator\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/matgl/ext/ase.py\", line 18, in <module>\\n    from ._ase_pyg import (  # type: ignore[assignment]\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/matgl/ext/_ase_pyg.py\", line 38, in <module>\\n    from matgl.graph._converters_pyg import GraphConverter\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/matgl/graph/_converters_pyg.py\", line 9, in <module>\\n    from torch_geometric.data import Data\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_geometric/__init__.py\", line 22, in <module>\\n    import torch_geometric.datasets\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_geometric/datasets/__init__.py\", line 18, in <module>\\n    from .qm9 import QM9\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch_geometric/datasets/qm9.py\", line 22, in <module>\\n    conversion = torch.tensor([\\n                 ^^^^^^^^^^^^^^\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch/utils/_device.py\", line 116, in __torch_function__\\n    return func(*args, **kwargs)\\n           ^^^^^^^^^^^^^^^^^^^^^\\n  File \"/lus/eagle/projects/Garden-Ai/polaris/envs/tensornet/lib/python3.11/site-packages/torch/cuda/__init__.py\", line 478, in _lazy_init\\n    torch._C._cuda_init()\\nRuntimeError: The NVIDIA driver on your system is too old (found version 12080). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.\\n'"}}},"uma":{"status":"ready","built_at":"2026-05-12T15:09:14.355548+00:00","source_hash":"sha256:8fb5eaff193ce405044c1c7811f2e19264aeb0bd8c63cfb591a32f575e3a67d2","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-1p1\": \"uma-s-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":{},"checkpoints":{"uma-s-1p1":{"fetched_at":"2026-05-12T16:34:50.318431+00:00","verified_at":"2026-05-12T17:13:13.502399+00:00","verified_device":"cuda","last_error":null}}},"dimenet":{"status":"ready","built_at":"2026-05-12T15:20:02.328584+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":{},"checkpoints":{"dimenet-plus-plus-s2ef-oc20-all":{"fetched_at":"2026-05-12T16:02:36.877051+00:00","verified_at":"2026-05-12T17:13:48.860576+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-20m":{"fetched_at":"2026-05-12T16:03:23.084387+00:00","verified_at":"2026-05-12T17:14:09.287456+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-2m":{"fetched_at":"2026-05-12T16:04:11.172440+00:00","verified_at":"2026-05-12T17:14:29.753243+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-200k":{"fetched_at":"2026-05-12T16:04:59.519090+00:00","verified_at":"2026-05-12T17:14:50.790243+00:00","verified_device":"cuda","last_error":null}}}}},{"schema_version":3,"cluster":"sophia","root":"/lus/eagle/projects/Garden-Ai/rootstock","maintainer":{"name":"Hayden Holbrook","email":"hholbrook@uchicago.edu"},"rootstock_version":"0.9.2.post3.dev0+2fd8104","python_version":"3.10.19","last_updated":"2026-06-29T17:07:32.796281+00:00","environments":{"ani_env":{"status":"ready","built_at":"2026-05-06T17:09:30.982005+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.7.9"},"checkpoints":{"ani-2x":{"fetched_at":"2026-05-06T20:37:55.159921+00:00","verified_at":"2026-06-29T16:30:15.052802+00:00","verified_device":"cuda","last_error":null},"ani-1ccx":{"fetched_at":"2026-05-06T20:38:00.847740+00:00","verified_at":"2026-06-29T16:30:19.770652+00:00","verified_device":"cuda","last_error":null},"ani-1x":{"fetched_at":"2026-05-06T20:38:06.095697+00:00","verified_at":"2026-06-29T16:30:24.428277+00:00","verified_device":"cuda","last_error":null}}},"chgnet_env":{"status":"ready","built_at":"2026-05-06T17:09:31.146735+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.28.0","chgnet":"0.4.2","rootstock":"0.7.3","torch":"2.11.0"},"checkpoints":{}},"esen_env":{"status":"ready","built_at":"2026-05-06T17:09:31.348294+00:00","source_hash":"sha256:79d02f167b4ddcdff145ad96f8ad3593e8df805f43c0d84ca6d7879a3d058489","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\"\"\"\neSEN environment for Rootstock.\n\nProvides access to FAIRChem's eSEN single-task checkpoints. Unlike UMA,\neSEN is single-task, so task_name is not passed to FAIRChemCalculator.\n\nAvailable checkpoints (from fairchem-core's pretrained_mlip registry):\n    OMol25:  esen-md-direct-all-omol (default), esen-sm-conserving-all-omol,\n             esen-sm-direct-all-omol\n    OC25:    esen-sm-conserving-all-oc25, esen-md-direct-all-oc25\n    ODAC25:  esen-sm-filtered-odac25, esen-sm-full-odac25\n\nOMol checkpoints expect `charge` and `spin` in `atoms.info`.\n\"\"\"\n\n\ndef setup(model: str = \"esen-md-direct-all-omol\", device: str = \"cuda\"):\n    \"\"\"\n    Load an eSEN calculator.\n\n    Args:\n        model: Checkpoint name from FAIRChem's pretrained_mlip registry\n               (e.g., \"esen-md-direct-all-omol\", \"esen-sm-conserving-all-oc25\").\n        device: PyTorch device string (e.g., \"cuda\", \"cuda:0\", \"cpu\").\n\n    Returns:\n        ASE-compatible FAIRChemCalculator.\n    \"\"\"\n    from fairchem.core import FAIRChemCalculator, pretrained_mlip\n\n    predictor = pretrained_mlip.get_predict_unit(model, 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.7.3","torch":"2.8.0","torch-geometric":"2.7.0"},"checkpoints":{}},"mace_env":{"status":"ready","built_at":"2026-05-06T17:09:31.451426+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.28.0","mace-torch":"0.3.15","rootstock":"0.7.3","torch":"2.9.1"},"checkpoints":{}},"mace_off23_env":{"status":"ready","built_at":"2026-05-06T17:09:31.562088+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.15","rootstock":"0.9.0","torch":"2.9.1"},"checkpoints":{}},"mattersim_env":{"status":"ready","built_at":"2026-05-06T17:09:31.757546+00:00","source_hash":"sha256:9ae11a5002dfb4d43dbaf525377b9eca947d1fc3907aa5b964dee25e837bc026","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\"\"\"\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.0","torch":"2.11.0"},"checkpoints":{"mattersim-v1-0-0-5m":{"fetched_at":"2026-05-06T20:42:31.806659+00:00","verified_at":"2026-06-29T16:31:43.797983+00:00","verified_device":"cuda","last_error":null},"mattersim-v1-0-0-1m":{"fetched_at":"2026-05-06T20:42:40.850140+00:00","verified_at":"2026-06-29T16:31:51.624283+00:00","verified_device":"cuda","last_error":null}}},"nequip_env":{"status":"ready","built_at":"2026-05-06T17:09:31.882679+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.17.1","rootstock":"0.9.0","torch":"2.11.0","torch-geometric":"2.7.0"},"checkpoints":{}},"orb_env":{"status":"ready","built_at":"2026-05-06T17:09:31.993043+00:00","source_hash":"sha256:c98c9c2fa8ac2237ff156c7d05e021a79370dbedfb8b08da69a988af39828082","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\"\"\"\nOrb environment for Rootstock.\n\nProvides access to Orbital Materials' Orb universal potentials for periodic\nand molecular systems.\n\nModels:\n    - \"orb-v2\": Orb v2 universal potential (default)\n    - \"orb-v3-conservative-inf-omat\": Orb v3, conservative forces, infinity\n    - \"orb-v3-direct-inf-omat\": Orb v3, direct forces, infinity\n    See orb_models.pretrained for the full checkpoint list.\n\"\"\"\n\nCHECKPOINTS = {\n    \"orb-v2\": \"orb-v2\",\n    \"orb-v3-conservative-inf-omat\": \"orb-v3-conservative-inf-omat\",\n    \"orb-v3-direct-inf-omat\": \"orb-v3-direct-inf-omat\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load an Orb 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 ORBCalculator.\n    \"\"\"\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    # Map \"orb-v2\" -> \"orb_v2\", \"orb-v3-conservative-inf-omat\" -> \"orb_v3_conservative_inf_omat\".\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.0","torch":"2.11.0"},"checkpoints":{"orb-v3-conservative-inf-omat":{"fetched_at":"2026-05-06T20:43:42.465812+00:00","verified_at":"2026-06-29T16:33:24.513907+00:00","verified_device":"cuda","last_error":null},"orb-v3-direct-inf-omat":{"fetched_at":"2026-05-06T20:43:53.057729+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: \nstderr: /eagle/Garden-Ai/rootstock/envs/orb_env/lib/python3.10/site-packages/google/api_core/_python_version_support.py:273: FutureWarning: You are using a Python version (3.10.19) which Google will stop supporting in new releases of google.api_core once it reaches its end of life (2026-10-04). Please upgrade to the latest Python version, or at least Python 3.11, to continue receiving updates for google.api_core past that date.\n  warnings.warn(message, FutureWarning)\n/eagle/Garden-Ai/rootstock/envs/orb_env/lib/python3.10/site-packages/orb_models/utils.py:30: UserWarning: Setting global torch default dtype to torch.float32.\n  warnings.warn(f\"Setting global torch default dtype to {torch_dtype}.\")\nTraceback (most recent call last):\n  File \"/var/tmp/pbs.161150.sophia-pbs-01.lab.alcf.anl.gov/rootstock_wrapper_50nd8ujw.py\", line 10, in <module>\n    run_worker(\n  File \"/eagle/Garden-Ai/rootstock/envs/orb_env/lib/python3.10/site-packages/rootstock/worker.py\", line 273, in run_worker\n    calculator = setup_fn(checkpoint, device, **setup_kwargs)\n  File \"/eagle/Garden-Ai/rootstock/envs/orb_env/env_source.py\", line 48, in setup\n    orbff = load_fn(device=torch.device(device))\n  File \"/eagle/Garden-Ai/rootstock/envs/orb_env/lib/python3.10/site-packages/orb_models/forcefield/pretrained.py\", line 474, in orb_v3_direct_inf_omat\n    model = load_model(\n  File \"/eagle/Garden-Ai/rootstock/envs/orb_env/lib/python3.10/site-packages/orb_models/forcefield/pretrained.py\", line 89, in load_model\n    state_dict = torch.load(local_path, map_location=\"cpu\", weights_only=True)\n  File \"/eagle/Garden-Ai/rootstock/envs/orb_env/lib/python3.10/site-packages/torch/serialization.py\", line 1530, in load\n    with _open_file_like(f, \"rb\") as opened_file:\n  File \"/eagle/Garden-Ai/rootstock/envs/orb_env/lib/python3.10/site-packages/torch/serialization.py\", line 795, in _open_file_like\n    return _open_file(name_or_buffer, mode)\n  File \"/eagle/Garden-Ai/rootstock/envs/orb_env/lib/python3.10/site-packages/torch/serialization.py\", line 776, in __init__\n    super().__init__(open(name, mode))  # noqa: SIM115\nPermissionError: [Errno 13] Permission denied: '/eagle/Garden-Ai/rootstock/home/.cache/cached_path/217c2dc5b76cf6027c1b49526255fc3210ef43b5d381868f3d0da0a3ad83a345.7870e3f1f99ae80f34c7136b663c3d469ff3508c70c7460c7946b44c2495c289'\n"}}},"painn_env":{"status":"ready","built_at":"2026-05-06T17:09:32.216714+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-06T20:45:46.185041+00:00","verified_at":"2026-06-29T16:35:00.612155+00:00","verified_device":"cuda","last_error":null}}},"schnet_env":{"status":"ready","built_at":"2026-05-06T17:09:32.379603+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-06T20:46:09.835796+00:00","verified_at":"2026-06-29T16:35:38.552645+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-20m":{"fetched_at":"2026-05-06T20:46:20.387699+00:00","verified_at":"2026-06-29T16:35:48.032553+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-2m":{"fetched_at":"2026-05-06T20:46:30.659748+00:00","verified_at":"2026-06-29T16:35:57.650051+00:00","verified_device":"cuda","last_error":null},"schnet-s2ef-oc20-200k":{"fetched_at":"2026-05-06T20:46:40.790457+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: forces are all (near-)zero — model likely returned zeros"}}},"scn_env":{"status":"ready","built_at":"2026-05-06T17:09:32.566820+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-06T20:47:22.647123+00:00","verified_at":"2026-06-29T16:36:48.666970+00:00","verified_device":"cuda","last_error":null},"scn-t4-b2-s2ef-oc20-2m":{"fetched_at":"2026-05-06T20:47:46.833377+00:00","verified_at":"2026-06-29T16:37:02.033031+00:00","verified_device":"cuda","last_error":null},"scn-s2ef-oc20-2m":{"fetched_at":"2026-05-06T20:48:10.134823+00:00","verified_at":"2026-06-29T16:37:14.732489+00:00","verified_device":"cuda","last_error":null}}},"sevennet_env":{"status":"ready","built_at":"2026-05-06T17:09:32.730078+00:00","source_hash":"sha256:f675cd3872ca742a6b18dff3f287aa5febae56464cf4c3dc5522524534938904","source":"# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n#   \"sevenn[queq12]>=0.12.1\",\n# ]\n# ///\n\ndef setup(model: str | None = None, device: str = \"cuda\"):\n    \"\"\"\n    Load a SevenNetCalculator\n    \"\"\"\n    from sevenn.calculator import SevenNetCalculator\n    if model is None:\n        model = \"7net-omat\"\n    calc = SevenNetCalculator(model=model, enable_queq=True, device=device)\n    return calc\n","python_requires":">=3.12","dependencies":{"rootstock":"0.7.0","sevenn":"0.12.1"},"checkpoints":{}},"tensornet_env":{"status":"ready","built_at":"2026-05-06T17:09:32.852413+00:00","source_hash":"sha256:72c9704dfc7f42866d253be8d1326e76ebe5c5eea151223a11ab6344d68e7831","source":"# /// script\n# requires-python = \">=3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\n#     \"ase>=3.22\",\n#     \"huggingface_hub\",\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\"\"\"\nTensorNet environment for Rootstock.\n\nProvides access to TensorNet models via the MatGL library. Models are hosted\non HuggingFace under the materialyze org and loaded by passing the HF model\nID directly to matgl.load_model().\n\nModels:\n    - \"materialyze/TensorNet-PES-MatPES-PBE-2025.2\": PBE functional (default)\n    - \"materialyze/TensorNet-PES-MatPES-r2SCAN-2025.2\": r2SCAN functional\n    - \"materialyze/TensorNetDGL-PES-MatPES-PBE-2025.2\": DGL-backend variant\n\"\"\"\n\nCHECKPOINTS = {\n    \"tensornet-matpes-pbe-2025-2\": \"materialyze/TensorNet-PES-MatPES-PBE-2025.2\",\n    \"tensornet-matpes-r2scan-2025-2\": \"materialyze/TensorNet-PES-MatPES-r2SCAN-2025.2\",\n    \"tensornet-dgl-matpes-pbe-2025-2\": \"materialyze/TensorNetDGL-PES-MatPES-PBE-2025.2\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a TensorNet/MatGL calculator.\n\n    Args:\n        checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.\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    # 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    if not hasattr(ase.constraints, \"ExpCellFilter\"):\n        from ase.filters import ExpCellFilter\n        ase.constraints.ExpCellFilter = ExpCellFilter\n\n    # DGL 2.x imports torchdata.datapipes at init, but torchdata>=0.7 removed\n    # datapipes. Stub the minimum needed so DGL imports cleanly. matgl only\n    # uses DGL for graph construction, not graphbolt.\n    import sys, types\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    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.14.0","monty":"2026.2.18","nvalchemi-toolkit-ops":"0.3.1","pymatgen":"2026.5.4","rootstock":"0.9.0","ruamel-yaml":"0.19.1","scipy":"1.17.1","torch":"2.11.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":{"tensornet-matpes-r2scan-2025-2":{"fetched_at":null,"verified_at":null,"verified_device":null,"last_error":"download: ModuleNotFoundError: No module named 'matgl'"},"tensornet-dgl-matpes-pbe-2025-2":{"fetched_at":null,"verified_at":null,"verified_device":null,"last_error":"download: ModuleNotFoundError: No module named 'matgl'"}}},"uma_env":{"status":"ready","built_at":"2026-05-06T17:09:33.059207+00:00","source_hash":"sha256:0de95e3f1168ccac35e12f5cb0488166f6df4a314bb922efbecc881e31b04555","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    - \"uma-m-1p1\": UMA medium model (more accurate, more memory intensive)\n\nTask:\n    This config defaults to the \"omat\" task for inorganic materials. For\n    catalysis, molecules, MOFs, or molecular crystals, copy this env and set\n    task_name to \"oc20\", \"omol\", \"odac\", or \"omc\" respectively.\n\"\"\"\n\nCHECKPOINTS = {\n    \"uma-s-1p1\": \"uma-s-1p1\",\n    \"uma-m-1p1\": \"uma-m-1p1\",\n}\n\n\ndef setup(checkpoint: str, device: str = \"cuda\"):\n    \"\"\"\n    Load a UMA 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 fairchem.core import FAIRChemCalculator, pretrained_mlip\n\n    predictor = pretrained_mlip.get_predict_unit(CHECKPOINTS[checkpoint], device=device)\n    return FAIRChemCalculator(predictor, task_name=\"omat\")\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-m-1p1":{"fetched_at":"2026-05-06T21:15:34.012300+00:00","verified_at":"2026-06-29T16:38:40.979319+00:00","verified_device":"cuda","last_error":null}}},"dimenet_env":{"status":"ready","built_at":"2026-05-06T17:10:21.120670+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-06T20:48:52.866736+00:00","verified_at":"2026-06-29T16:40:22.777810+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-20m":{"fetched_at":"2026-05-06T20:49:19.529493+00:00","verified_at":"2026-06-29T16:41:39.166372+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-2m":{"fetched_at":"2026-05-06T20:49:45.848149+00:00","verified_at":"2026-06-29T16:42:56.719432+00:00","verified_device":"cuda","last_error":null},"dimenet-plus-plus-s2ef-oc20-200k":{"fetched_at":"2026-05-06T20:50:12.156381+00:00","verified_at":"2026-06-29T16:44:14.305522+00:00","verified_device":"cuda","last_error":null}}},"equiformer_env":{"status":"ready","built_at":"2026-05-06T17:10:45.757408+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-06T20:51:00.115595+00:00","verified_at":"2026-06-29T16:45:13.526516+00:00","verified_device":"cuda","last_error":null},"equiformer-v2-31m-s2ef-oc20-all-md":{"fetched_at":"2026-05-06T20:51:11.968695+00:00","verified_at":"2026-06-29T16:45:26.503181+00:00","verified_device":"cuda","last_error":null},"equiformer-v2-83m-s2ef-oc20-2m":{"fetched_at":"2026-05-06T20:51:35.044899+00:00","verified_at":"2026-06-29T16:45:45.543222+00:00","verified_device":"cuda","last_error":null}}},"escn_env":{"status":"ready","built_at":"2026-05-06T17:11:11.192186+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-06T20:52:08.384778+00:00","verified_at":"2026-06-29T16:46:26.449119+00:00","verified_device":"cuda","last_error":null},"escn-l6-m3-lay20-s2ef-oc20-all-md":{"fetched_at":"2026-05-06T20:52:41.248865+00:00","verified_at":"2026-06-29T16:46:42.222490+00:00","verified_device":"cuda","last_error":null},"escn-l6-m2-lay12-s2ef-oc20-2m":{"fetched_at":"2026-05-06T20:52:56.965557+00:00","verified_at":"2026-06-29T16:46:54.060577+00:00","verified_device":"cuda","last_error":null},"escn-l4-m2-lay12-s2ef-oc20-2m":{"fetched_at":"2026-05-06T20:53:14.283723+00:00","verified_at":"2026-06-29T16:47:05.207081+00:00","verified_device":"cuda","last_error":null}}},"esen":{"status":"ready","built_at":"2026-05-06T17:11:30.876911+00:00","source_hash":"sha256:3208af6f8289274a57c50a0fde119743e6ac00c2dcf153eaa53cb49b248786fd","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-06T20:54:14.336617+00:00","verified_at":"2026-06-29T16:47:43.011175+00:00","verified_device":"cuda","last_error":null},"esen-sm-conserving-all-omol":{"fetched_at":"2026-05-06T21:05:57.217231+00:00","verified_at":"2026-06-29T16:47:54.592471+00:00","verified_device":"cuda","last_error":null},"esen-sm-direct-all-omol":{"fetched_at":"2026-05-06T21:06:15.278844+00:00","verified_at":"2026-06-29T16:48:04.804768+00:00","verified_device":"cuda","last_error":null}}},"gemnet_env":{"status":"ready","built_at":"2026-05-06T17:11:56.034584+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-06T21:08:03.174029+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-06T21:08:29.008009+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-06T21:08:58.730252+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-06T21:09:24.575645+00:00","verified_at":"2026-06-29T17:01:44.932056+00:00","verified_device":"cuda","last_error":null}}},"m3gnet_env":{"status":"ready","built_at":"2026-05-06T17:12:07.558627+00:00","source_hash":"sha256:5623538d4f16939343cbf544ca51ece7320d3dbd8fcce7345cd01fb78b1d2915","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\"\"\"\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_env.py: TensorNet-MatPES (same authors, newer, better)\n  - chgnet_env.py: CHGNet (charge-informed, strong on magnetic materials)\n  - orb_env.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.0","torch":"2.11.0"},"checkpoints":{"m3gnet-mp-2021-2-8-pes":{"fetched_at":"2026-05-06T21:16:25.937001+00:00","verified_at":"2026-06-29T17:02:12.347430+00:00","verified_device":"cuda","last_error":null}}},"mace":{"status":"ready","built_at":"2026-05-06T17:12:19.107766+00:00","source_hash":"sha256:5a22de20034a5c56e3c42bd2adfdc19ec69c75f3882ad5550c0388fd1c5ffba0","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        return mace_off(model=arg[4:], device=device, default_dtype=\"float32\")\n    from mace.calculators import mace_mp\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.15","rootstock":"0.9.0","torch":"2.9.1"},"checkpoints":{"mace-mp-0-small":{"fetched_at":"2026-05-06T20:39:48.797312+00:00","verified_at":"2026-06-29T17:02:52.965758+00:00","verified_device":"cuda","last_error":null},"mace-mp-0-medium":{"fetched_at":"2026-05-06T20:39:56.628531+00:00","verified_at":"2026-06-29T17:03:00.197456+00:00","verified_device":"cuda","last_error":null},"mace-mp-0-large":{"fetched_at":"2026-05-06T20:40:05.433962+00:00","verified_at":"2026-06-29T17:03:07.556454+00:00","verified_device":"cuda","last_error":null},"mace-off23-small":{"fetched_at":"2026-05-06T20:40:13.987852+00:00","verified_at":"2026-06-29T17:03:14.511981+00:00","verified_device":"cuda","last_error":null},"mace-off23-medium":{"fetched_at":"2026-05-06T20:40:21.608427+00:00","verified_at":"2026-06-29T17:03:21.379746+00:00","verified_device":"cuda","last_error":null},"mace-off23-large":{"fetched_at":"2026-05-06T20:40:29.441902+00:00","verified_at":"2026-06-29T17:03:28.069009+00:00","verified_device":"cuda","last_error":null}}},"orb":{"status":"ready","built_at":"2026-05-06T17:13:58.800020+00:00","source_hash":"sha256:0cbfe1165a3adfa529fec8de062a0141950d0972f12cfacc5c82e9244949441e","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\"\"\"Orb env — hosts Orbital Materials' Orb universal potentials.\"\"\"\n\nCHECKPOINTS = {\n    \"orb-v2\": \"orb-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.0","torch":"2.11.0"},"checkpoints":{"orb-v2":{"fetched_at":"2026-05-06T20:43:23.118249+00:00","verified_at":null,"verified_device":null,"last_error":"smoke-test: RuntimeError: Worker process died with code 1.\nstdout: \nstderr: /eagle/Garden-Ai/rootstock/envs/orb/lib/python3.10/site-packages/google/api_core/_python_version_support.py:273: FutureWarning: You are using a Python version (3.10.19) which Google will stop supporting in new releases of google.api_core once it reaches its end of life (2026-10-04). Please upgrade to the latest Python version, or at least Python 3.11, to continue receiving updates for google.api_core past that date.\n  warnings.warn(message, FutureWarning)\n/eagle/Garden-Ai/rootstock/envs/orb/lib/python3.10/site-packages/orb_models/utils.py:30: UserWarning: Setting global torch default dtype to torch.float32.\n  warnings.warn(f\"Setting global torch default dtype to {torch_dtype}.\")\nTraceback (most recent call last):\n  File \"/var/tmp/pbs.161150.sophia-pbs-01.lab.alcf.anl.gov/rootstock_wrapper__wezodrq.py\", line 10, in <module>\n    run_worker(\n  File \"/eagle/Garden-Ai/rootstock/envs/orb/lib/python3.10/site-packages/rootstock/worker.py\", line 273, in run_worker\n    calculator = setup_fn(checkpoint, device, **setup_kwargs)\n  File \"/eagle/Garden-Ai/rootstock/envs/orb/env_source.py\", line 24, in setup\n    orbff = load_fn(device=torch.device(device))\n  File \"/eagle/Garden-Ai/rootstock/envs/orb/lib/python3.10/site-packages/orb_models/forcefield/pretrained.py\", line 644, in orb_v2\n    model = load_model(\n  File \"/eagle/Garden-Ai/rootstock/envs/orb/lib/python3.10/site-packages/orb_models/forcefield/pretrained.py\", line 89, in load_model\n    state_dict = torch.load(local_path, map_location=\"cpu\", weights_only=True)\n  File \"/eagle/Garden-Ai/rootstock/envs/orb/lib/python3.10/site-packages/torch/serialization.py\", line 1530, in load\n    with _open_file_like(f, \"rb\") as opened_file:\n  File \"/eagle/Garden-Ai/rootstock/envs/orb/lib/python3.10/site-packages/torch/serialization.py\", line 795, in _open_file_like\n    return _open_file(name_or_buffer, mode)\n  File \"/eagle/Garden-Ai/rootstock/envs/orb/lib/python3.10/site-packages/torch/serialization.py\", line 776, in __init__\n    super().__init__(open(name, mode))  # noqa: SIM115\nPermissionError: [Errno 13] Permission denied: '/eagle/Garden-Ai/rootstock/home/.cache/cached_path/11be2a8c51472ff72b5c88e3ac15e121d32ce011b91cb772454cfe99c70a659c.12664da448d7fc23ce36d4d21e65597c6f8e565382a551e7435a357d348d203b'\n"}}},"tensornet":{"status":"ready","built_at":"2026-05-06T17:16:08.508217+00:00","source_hash":"sha256:da087341cdaa0512c7e13e2edffa11c25e2b4815761f72b467127894d4ccdad3","source":"# /// script\n# requires-python = \">=3.11\"\n# dependencies = [\n#     \"torch>=2.4.0\",\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    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    if not hasattr(ase.constraints, \"ExpCellFilter\"):\n        from ase.filters import ExpCellFilter\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    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.14.0","matgl":"3.0.1","monty":"2026.2.18","nvalchemi-toolkit-ops":"0.3.1","pymatgen":"2026.5.4","rootstock":"0.9.0","ruamel-yaml":"0.19.1","scipy":"1.17.1","torch":"2.11.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":{"tensornet-matpes-pbe-2025-2":{"fetched_at":"2026-05-06T21:12:12.465688+00:00","verified_at":"2026-06-29T17:05:47.876103+00:00","verified_device":"cuda","last_error":null}}},"uma":{"status":"ready","built_at":"2026-05-06T17:16:47.837914+00:00","source_hash":"sha256:8fb5eaff193ce405044c1c7811f2e19264aeb0bd8c63cfb591a32f575e3a67d2","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-1p1\": \"uma-s-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-1p1":{"fetched_at":"2026-05-06T21:14:11.695760+00:00","verified_at":"2026-06-29T17:06:20.199908+00:00","verified_device":"cuda","last_error":null}}},"sevennet":{"status":"ready","built_at":"2026-06-26T21:06:12.887222+00:00","source_hash":"sha256:2853916ee475254fe2bebf6c4ae3b090f35fec0c0c5098da9ed24b9076eceb57","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","python_requires":">=3.10","dependencies":{"ase":"3.29.0","rootstock":"0.9.2.post3.dev0+2fd8104","sevenn":"0.13.0","torch":"2.11.0+cu128"},"checkpoints":{"sevennet-0":{"fetched_at":"2026-06-26T21:07:18.938066+00:00","verified_at":"2026-06-29T17:07:25.077850+00:00","verified_device":"cuda","last_error":null}}}}}]}