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) | |