Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions oteapi_asmod/strategies/function.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"""Function strategy class for mapping ase.Atoms to dlite metadata."""
# pylint: disable=no-self-use,unused-argument
# pylint: disable=unused-argument
import pathlib
from dataclasses import dataclass
from typing import TYPE_CHECKING, Optional, Union

from dlite import Instance, get_collection
from dlite import Instance, get_instance
from oteapi.datacache import DataCache
from oteapi.models import AttrDict, DataCacheConfig, FunctionConfig, SessionUpdate
from pydantic import Field, HttpUrl
Expand Down Expand Up @@ -91,33 +91,33 @@ def get(self, session: "Dict" = None) -> SessionUpdateASEDliteFunction:
Returns SessionUpdate()

"""
model = self.function_config
config = ASEDliteConfig(**self.function_config.configuration)

# There should be a local folder with entitites at least until onto-ns is up
# dlite.storage_path.append(str(pathlib.Path(__file__).parent.resolve()))

# Create dlite instance of metadata
moleculemodel = Instance.create_from_url(
"json://" + str(model.datamodel),
moleculemodel = Instance.from_url(
"json://" + str(config.datamodel),
) # DLite Metadata

# Get ase.Atoms obejct from cache
cache = DataCache(model.datacache_config)
atoms = cache.get(model.datacacheKey)
cache = DataCache(config.datacache_config)
atoms = cache.get(config.datacacheKey)

# Creat dlite instance from metadata and populate
inst = moleculemodel(dims=[len(atoms), 3], id=model.label) # DLite instance
inst = moleculemodel(dims=[len(atoms), 3], id=config.label) # DLite instance
inst.symbols = atoms.get_chemical_symbols()
inst.masses = atoms.get_masses()
inst.positions = atoms.positions
inst.groundstate_energy = 0.0

# Get collection from session and place molecule in it
if session is not None:
coll = get_collection(session["collection_id"])
coll = get_instance(session["collection_id"])
else:
raise OteapiAsmodError("Missing session")

coll.add(label=model.label, inst=inst)
coll.add(label=config.label, inst=inst)

return SessionUpdateASEDliteFunction(collection_id=session["collection_id"])
11 changes: 8 additions & 3 deletions tests/test_function.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def test_ASEDlite( # pylint: disable=invalid-name, too-many-locals
from oteapi.models.resourceconfig import ResourceConfig

from oteapi_asmod.strategies.function import (
ASEDliteConfig,
ASEDliteFunctionConfig,
ASEDliteFunctionStrategy,
)
from oteapi_asmod.strategies.parse import AtomisticStructureParseStrategy
Expand All @@ -38,8 +38,13 @@ def test_ASEDlite( # pylint: disable=invalid-name, too-many-locals
session.update(SessionUpdate(collection_id=coll.uuid))
# Define configuration for the function
modelpath = repo_dir / "tests" / "testfiles" / "Molecule.json"
config2 = ASEDliteConfig(
label="molecule", datacacheKey=parsed_atoms_key, datamodel=modelpath
config2 = ASEDliteFunctionConfig(
functionType="asedlite/atoms",
configuration={
"label": "molecule",
"datacacheKey": parsed_atoms_key,
"datamodel": modelpath,
},
)

# Instantiate function
Expand Down