Spaces:
Running
Running
from __future__ import annotations | |
import yaml | |
from pathlib import Path | |
from ase.calculators.calculator import all_changes | |
from torchani.ase import Calculator as ANICalculator | |
from torchani.models import BuiltinEnsemble | |
from mlip_arena.models.utils import get_freer_device | |
with open(Path(__file__).parents[1] / "registry.yaml", encoding="utf-8") as f: | |
REGISTRY = yaml.safe_load(f) | |
class ANI2x(ANICalculator): | |
def __init__( | |
self, | |
checkpoint=REGISTRY["ANI2x"]["checkpoint"], | |
device: str | None = None, | |
periodic_table_index=False, | |
**kwargs, | |
): | |
self.device = device or str(get_freer_device()) | |
ensemble = BuiltinEnsemble._from_neurochem_resources( | |
checkpoint, periodic_table_index | |
) | |
# TODO: ANICalculator does not offer API to change device | |
# ensemble.species.device = self.device | |
super().__init__(ensemble.species, ensemble, **kwargs) | |
def calculate( | |
self, atoms=None, properties=['energy', 'forces', 'stress'], system_changes=all_changes | |
): | |
super().calculate(atoms, properties, system_changes) | |