Source code for ml4chem.atomistic.features.base

import torch
import numpy as np
from abc import ABC, abstractmethod


[docs]class AtomisticFeatures(ABC):
[docs] @abstractmethod def name(cls): """Return name of the class""" pass
@abstractmethod def __init__(self, **kwargs): """Arguments needed to instantiate Features""" pass
[docs] @abstractmethod def calculate(self, **kwargs): """Calculate features""" pass
[docs] @abstractmethod def to_pandas(self): """Convert features to pandas DataFrame""" pass
[docs] def restack_image(self, index, image, scaled_feature_space, svm): """Restack images to correct dictionary's structure to train Parameters ---------- index : int Index of original hashed image. image : obj An ASE image object. scaled_feature_space : np.array A numpy array with scaled features. Returns ------- hash, features : tuple Hash of image and its corresponding features. """ hash, image = image if scaled_feature_space is not None: features = [] for j, atom in enumerate(image): symbol = atom.symbol scaled = scaled_feature_space[index][j] if isinstance(scaled, tuple): symbol, scaled = scaled if isinstance(scaled, np.ndarray) is False: scaled = scaled.compute() if svm is False: scaled = torch.tensor( scaled, requires_grad=False, dtype=torch.float, ) features.append((symbol, scaled)) return hash, features
[docs] def restack_atom(self, image_index, atom, scaled_feature_space): """Restack atoms to a raveled list to use with SVM Parameters ---------- image_index : int Index of original hashed image. atom : object An atom object. scaled_feature_space : np.array A numpy array with the scaled features Returns ------- symbol, features : tuple The hashed key image and its corresponding features. """ features = scaled_feature_space[image_index][atom.index] if isinstance(features, tuple): symbol, features = features else: symbol = atom.symbol return symbol, features