Upload folder using huggingface_hub
Browse files- README.md +2 -3
- equiformer_ase_calculator.py +6 -3
- example_inference.py +2 -2
- ocpmodels/common/relaxation/ase_utils.py +2 -1
- ocpmodels/units.py +1 -1
README.md
CHANGED
|
@@ -47,13 +47,12 @@ model.to("cuda")
|
|
| 47 |
|
| 48 |
# random batch of data
|
| 49 |
n_atoms = 10
|
|
|
|
| 50 |
data = TGData(
|
| 51 |
pos=torch.randn(n_atoms, 3),
|
| 52 |
batch=torch.zeros(n_atoms),
|
| 53 |
-
|
| 54 |
natoms=n_atoms,
|
| 55 |
-
# just needs be a placeholder that decides the output energy shape
|
| 56 |
-
energy=torch.randn(1),
|
| 57 |
)
|
| 58 |
data = Batch.from_data_list([data])
|
| 59 |
# dataloader = TGDataLoader(dataset, batch_size=1, shuffle=False)
|
|
|
|
| 47 |
|
| 48 |
# random batch of data
|
| 49 |
n_atoms = 10
|
| 50 |
+
elements = torch.tensor([1, 6, 7, 8]) # H, C, N, O
|
| 51 |
data = TGData(
|
| 52 |
pos=torch.randn(n_atoms, 3),
|
| 53 |
batch=torch.zeros(n_atoms),
|
| 54 |
+
z=elements[torch.randint(0, 4, (n_atoms,))],
|
| 55 |
natoms=n_atoms,
|
|
|
|
|
|
|
| 56 |
)
|
| 57 |
data = Batch.from_data_list([data])
|
| 58 |
# dataloader = TGDataLoader(dataset, batch_size=1, shuffle=False)
|
equiformer_ase_calculator.py
CHANGED
|
@@ -19,7 +19,10 @@ from torch_scatter import scatter_mean
|
|
| 19 |
|
| 20 |
from ocpmodels.datasets import data_list_collater
|
| 21 |
from ocpmodels.preprocessing import AtomsToGraphs
|
| 22 |
-
from ocpmodels.common.relaxation.ase_utils import
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
from nets.equiformer_v2.equiformer_v2_oc20 import EquiformerV2_OC20
|
| 25 |
from nets.prediction_utils import compute_extra_props
|
|
@@ -114,8 +117,8 @@ class EquiformerASECalculator(Calculator):
|
|
| 114 |
"""
|
| 115 |
# Call base class to set atoms attribute
|
| 116 |
Calculator.calculate(self, atoms)
|
| 117 |
-
|
| 118 |
-
# ocpmodels/common/relaxation/ase_utils.py
|
| 119 |
# data_object = self.a2g.convert(atoms)
|
| 120 |
# batch = data_list_collater([data_object], otf_graph=True)
|
| 121 |
|
|
|
|
| 19 |
|
| 20 |
from ocpmodels.datasets import data_list_collater
|
| 21 |
from ocpmodels.preprocessing import AtomsToGraphs
|
| 22 |
+
from ocpmodels.common.relaxation.ase_utils import (
|
| 23 |
+
batch_to_atoms,
|
| 24 |
+
ase_atoms_to_torch_geometric,
|
| 25 |
+
)
|
| 26 |
|
| 27 |
from nets.equiformer_v2.equiformer_v2_oc20 import EquiformerV2_OC20
|
| 28 |
from nets.prediction_utils import compute_extra_props
|
|
|
|
| 117 |
"""
|
| 118 |
# Call base class to set atoms attribute
|
| 119 |
Calculator.calculate(self, atoms)
|
| 120 |
+
|
| 121 |
+
# ocpmodels/common/relaxation/ase_utils.py
|
| 122 |
# data_object = self.a2g.convert(atoms)
|
| 123 |
# batch = data_list_collater([data_object], otf_graph=True)
|
| 124 |
|
example_inference.py
CHANGED
|
@@ -105,6 +105,7 @@ if __name__ == "__main__":
|
|
| 105 |
|
| 106 |
# Example 1: load a dataset file and predict the first batch
|
| 107 |
from ocpmodels.ff_lmdb import LmdbDataset
|
|
|
|
| 108 |
dataset_path = os.path.join(project_root, "data/sample_100.lmdb")
|
| 109 |
dataset = LmdbDataset(dataset_path)
|
| 110 |
# either use the dataset directly or use a dataloader
|
|
@@ -120,10 +121,9 @@ if __name__ == "__main__":
|
|
| 120 |
|
| 121 |
# Example 2: create a random data object with random positions and predict
|
| 122 |
n_atoms = 10
|
| 123 |
-
elements = torch.tensor([1, 6, 7, 8])
|
| 124 |
data = TGData(
|
| 125 |
pos=torch.randn(n_atoms, 3),
|
| 126 |
-
batch=torch.zeros(n_atoms),
|
| 127 |
z=elements[torch.randint(0, 4, (n_atoms,))],
|
| 128 |
natoms=n_atoms,
|
| 129 |
)
|
|
|
|
| 105 |
|
| 106 |
# Example 1: load a dataset file and predict the first batch
|
| 107 |
from ocpmodels.ff_lmdb import LmdbDataset
|
| 108 |
+
|
| 109 |
dataset_path = os.path.join(project_root, "data/sample_100.lmdb")
|
| 110 |
dataset = LmdbDataset(dataset_path)
|
| 111 |
# either use the dataset directly or use a dataloader
|
|
|
|
| 121 |
|
| 122 |
# Example 2: create a random data object with random positions and predict
|
| 123 |
n_atoms = 10
|
| 124 |
+
elements = torch.tensor([1, 6, 7, 8]) # H, C, N, O
|
| 125 |
data = TGData(
|
| 126 |
pos=torch.randn(n_atoms, 3),
|
|
|
|
| 127 |
z=elements[torch.randint(0, 4, (n_atoms,))],
|
| 128 |
natoms=n_atoms,
|
| 129 |
)
|
ocpmodels/common/relaxation/ase_utils.py
CHANGED
|
@@ -209,6 +209,7 @@ class OCPCalculator(Calculator):
|
|
| 209 |
elif self.trainer.name == "is2re":
|
| 210 |
self.results["energy"] = predictions["energy"].item()
|
| 211 |
|
|
|
|
| 212 |
# by Andreas. We do not care about the graph, because connectivity is computed on the fly?
|
| 213 |
def ase_atoms_to_torch_geometric(atoms):
|
| 214 |
"""
|
|
@@ -232,4 +233,4 @@ def ase_atoms_to_torch_geometric(atoms):
|
|
| 232 |
)
|
| 233 |
data = Batch.from_data_list([data])
|
| 234 |
|
| 235 |
-
return data
|
|
|
|
| 209 |
elif self.trainer.name == "is2re":
|
| 210 |
self.results["energy"] = predictions["energy"].item()
|
| 211 |
|
| 212 |
+
|
| 213 |
# by Andreas. We do not care about the graph, because connectivity is computed on the fly?
|
| 214 |
def ase_atoms_to_torch_geometric(atoms):
|
| 215 |
"""
|
|
|
|
| 233 |
)
|
| 234 |
data = Batch.from_data_list([data])
|
| 235 |
|
| 236 |
+
return data
|
ocpmodels/units.py
CHANGED
|
@@ -139,4 +139,4 @@ ELEMENT_TO_ATOMIC_NUMBER = {
|
|
| 139 |
"Og": 118,
|
| 140 |
}
|
| 141 |
|
| 142 |
-
ATOMIC_NUMBER_TO_ELEMENT = {v: k for k, v in ELEMENT_TO_ATOMIC_NUMBER.items()}
|
|
|
|
| 139 |
"Og": 118,
|
| 140 |
}
|
| 141 |
|
| 142 |
+
ATOMIC_NUMBER_TO_ELEMENT = {v: k for k, v in ELEMENT_TO_ATOMIC_NUMBER.items()}
|