ipsuite.analysis.model package

Submodules

ipsuite.analysis.model.dynamics module

class ipsuite.analysis.model.dynamics.BoxHeatUp(*args, **kwargs)[source]

Bases: ProcessSingleAtom

Perform a heat-up analysis by gradually increasing the temperature of the system and monitoring the measured temperature and energy.

Parameters

start_temperaturefloat

The initial temperature (in Kelvin) to start the analysis.

stop_temperaturefloat

The upper bound of the temperature range (in Kelvin).

stepsint

Number of temperature increments between start and stop temperature.

time_stepfloat, optional

Time step of the simulation in femtoseconds. Default is 0.5 fs.

frictionfloat

Langevin friction coefficient.

repeattuple of int, optional

Number of repetitions of the unit cell in each direction. Default is (1, 1, 1).

max_temperaturefloat or None, optional

Maximum allowed temperature before stopping the simulation. If None, set to 1.5 * stop_temperature.

modeltyping.Any

The MLModel node that implements the ‘get_calculator’ method.

model_outspathlib.Path

Output directory for model results.

plotspathlib.Path

Path to save the temperature plot.

Attributes

flux_datapd.DataFrame

DataFrame containing measured temperature, total energy, and set temperature at each step.

steps_before_explosionint

Number of steps completed before exceeding max_temperature, or -1 if not exceeded.

frameslist of ase.Atoms

List of atomic configurations at each step.

data: List[ase.Atoms]
flux_data: DataFrame = NOT_AVAILABLE
friction: float
get_atoms() Atoms[source]
max_temperature: float | None = None
model: Any
model_outs: Path = PosixPath('$nwd$/model')
plot_temperature()[source]
plots: Path = PosixPath('$nwd$/temperature.png')
repeat: tuple[int, int, int] = (1, 1, 1)
run()[source]
start_temperature: float
steps: int
stop_temperature: float
time_step: float = 0.5
class ipsuite.analysis.model.dynamics.BoxScale(*args, **kwargs)[source]

Bases: ProcessSingleAtom

Scale all particles and predict energies.

Attributes

model: The MLModel node that implements the ‘predict’ method atoms: list[Atoms] to predict properties for start: int, default = None

The initial box scale, default value is the original box size.

stop: float, default = 1.0

The stop value for the generated space of stdev points

num: int, default = 100

The size of the generated space of stdev points

data: List[ase.Atoms]
energies: DataFrame = NOT_AVAILABLE
mapping: Any | None = None
model: MLModel
model_outs: Path = PosixPath('$nwd$/model')
num: int = 100
plot: Path = PosixPath('$nwd$/energy.png')
run()[source]
start: float = 1
stop: float = 2.0
class ipsuite.analysis.model.dynamics.MDStability(*args, **kwargs)[source]

Bases: IPSNode

Perform NVE molecular dynamics for all supplied atoms using a trained model. Several stability checks can be supplied to judge whether a particular trajectory is stable. If the check fails, the trajectory is terminated. After all trajectories are done, a histogram of the duration of stability is created.

Attributes

model: A node which implements the calc property. Typically an MLModel instance. data: list[Atoms] to run MD for for max_steps: Maximum number of steps for each trajectory time_step: MD integration time step initial_temperature: Initial velocities are drawn from a maxwell boltzman distribution. save_last_n: how many configurations before the instability should be saved bins: number of bins in the histogram seed: seed for the MaxwellBoltzmann distribution

bins: int = None
checks: list[Node] = None
data: list[Atoms]
property frames: List[Atoms]
get_plots(stable_steps: int) None[source]

Create figures for all available data.

initial_temperature: float = 300
max_steps: int
model: Any
model_outs: Path = PosixPath('$nwd$/model_outs')
plots_dir: Path = PosixPath('$nwd$/plots')
run() None[source]
save_last_n: int = 1
seed: int = 0
stable_steps_df: DataFrame = NOT_AVAILABLE
time_step: float = 0.5
traj_file: Path = PosixPath('$nwd$/structures.h5')
class ipsuite.analysis.model.dynamics.RattleAnalysis(*args, **kwargs)[source]

Bases: ProcessSingleAtom

Move particles with a given stdev from a starting configuration and predict.

Attributes

model: The MLModel node that implements the ‘predict’ method atoms: list[Atoms] to predict properties for logspace: bool, default=True

Increase the stdev of rattle with ‘np.logspace’ instead of ‘np.linspace’

stop: float, default = 1.0

The stop value for the generated space of stdev points

num: int, default = 100

The size of the generated space of stdev points

factor: float, default = 0.001

The ‘np.linspace(0.0, stop, num) * factor’

atom_id: int, default = 0

The atom to pick from self.atoms as a starting point

data: List[ase.Atoms]
energies: DataFrame = NOT_AVAILABLE
factor: float = 0.001
logspace: bool = True
model: MLModel
model_outs: Path = PosixPath('$nwd$/model')
num: int = 100
run()[source]
seed: int = 1234
stop: float = 3.0
ipsuite.analysis.model.dynamics.run_stability_nve(atoms: Atoms, time_step: float, max_steps: int, init_temperature: float, checks: list[Check], save_last_n: int, rng: Generator | None = None) Tuple[int, list[Atoms]][source]

Runs an NVE trajectory for a single configuration until either max_steps is reached or one of the checks fails.

ipsuite.analysis.model.dynamics_checks module

ipsuite.analysis.model.math module

ipsuite.analysis.model.math.comptue_rll(inputs, std, target)[source]

Compute relative log likelihood Adapted from https://github.com/bananenpampe/DPOSE

ipsuite.analysis.model.math.compute_intertia_tensor(centered_positions, masses)[source]
ipsuite.analysis.model.math.compute_rmse(errors)[source]
ipsuite.analysis.model.math.compute_rot_forces(mol, key: str = 'forces')[source]
ipsuite.analysis.model.math.compute_trans_forces(mol, key: str = 'forces')[source]

Compute translational forces of a molecule.

ipsuite.analysis.model.math.compute_uncertainty_metrics(y_pred, y_std, y_true)[source]
ipsuite.analysis.model.math.decompose_stress_tensor(stresses)[source]
ipsuite.analysis.model.math.force_decomposition(atom, mapping, key: str = 'forces')[source]
ipsuite.analysis.model.math.nll(pred, std, true)[source]
ipsuite.analysis.model.math.nlls(pred, std, true)[source]

ipsuite.analysis.model.plots module

ipsuite.analysis.model.plots.density_scatter(ax, x, y, bins, **kwargs) None[source]

Create a scatter plot colored by 2d histogram density.

Parameters

ax: matplotlib.axes.Axes x: np.ndarray y: np.ndarray bins: int kwargs

any kwargs passed to ‘ax.scatter’

Returns

References

Adapted from https://stackoverflow.com/a/53865762/10504481

ipsuite.analysis.model.plots.gauss(x, *p)[source]
ipsuite.analysis.model.plots.get_calibration_figure(error, std, markersize: float = 3.0, datalabel=None, forces=False, figsize: tuple = (10, 7))[source]

Log-log plot of errors vs predicted standard deviations with quantiles for a linearly increasing noise level.

ipsuite.analysis.model.plots.get_figure(true, prediction, datalabel: str, xlabel: str, ylabel: str, ymax: float | None = None, figsize: tuple = (10, 7), density=True) Figure[source]

Create a correlation plot for true, prediction values.

Parameters

true: the true values prediction: the predicted values datalabel: str, the label for the prediction, e.g. ‘MAE: 0.123 eV’ xlabel: str, the xlabel ylabel: str, the xlabel figsize: tuple, size of the figure

Returns

plt.Figure

ipsuite.analysis.model.plots.get_gaussianicity_figure(error_true, error_pred, forces=True)[source]

Plots empirical and predicted error distributions. If possible, it also tries to fit a gaussian to the empirical distribution.

ipsuite.analysis.model.plots.get_hist(data, label, xlabel, ylabel) Tuple[Figure, Axes][source]
ipsuite.analysis.model.plots.get_histogram_figure(bin_edges, counts, datalabel: str, xlabel: str, ylabel: str, x_lim: Tuple[float, float] = None, y_lim: Tuple[float, float] = None, logy_scale=True, figsize: tuple = (10, 7)) Figure[source]

Creates a Matplotlib figure based on precomputed bin edges and counts.

Parameters

bin_edges: np.array

Edges of the histogram bins.

counts: np.array

Number of occurrences in each bin.

datalabel: str

Labels for the figure legend.

xlabel: str

X-axis label.

ylabel: str

Y-axis label.

x_lim: tuple

X-axis limits.

y_lim: tuple

Y-axis limits.

figsize: tuple

Size of the Matplotlib figure

ipsuite.analysis.model.plots.slice_ensemble_uncertainty(true, pred_ens, slice_start, slice_end)[source]
ipsuite.analysis.model.plots.slice_uncertainty(true, pred_mean, pred_std, slice_start, slice_end)[source]

ipsuite.analysis.model.predict module

class ipsuite.analysis.model.predict.CalibrationMetrics(*args, **kwargs)[source]

Bases: ComparePredictions

Analyse the calibration of a models uncertainty estimate. Plots the empirical vs predicted error distribution, a log-log calibration plot and the miscalibration area. Further, various UQ metrics are computed: - Mean absolute calibration error - Root mean square miscalibration error - Miscalibration area - NLL - RLL

For more information checkout the uncertainty toolbox or the following paper: 10.1088/2632-2153/ad594a

Parameters

force_dist_slices: List[tuple]

Interval in which to analyse the gassianity of error distributions.

data_file: Path = PosixPath('$nwd$/data.npz')
energy: dict = NOT_AVAILABLE
force_dist_slices: List[tuple] | None = None
forces: dict = NOT_AVAILABLE
get_data()[source]

Create dict of all data.

get_metrics()[source]

Update the metrics.

get_plots(save=False)[source]

Create figures for all available data.

plots_dir: Path = PosixPath('$nwd$/plots')
run()[source]
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.predict.ForceAngles(*, name: str | None = None, always_changed: bool = False, x: list[ase.atoms.Atoms], y: list[ase.atoms.Atoms], plot: pathlib.Path = PosixPath('$nwd$/angle.png'), log_plot: pathlib.Path = PosixPath('$nwd$/angle_ylog.png'))[source]

Bases: ComparePredictions

angles: dict = NOT_AVAILABLE
log_plot: Path = PosixPath('$nwd$/angle_ylog.png')
plot: Path = PosixPath('$nwd$/angle.png')
run()[source]
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.predict.ForceDecomposition(*args, **kwargs)[source]

Bases: ComparePredictions

Node for decomposing forces in a system of molecular units into translational, rotational and vibrational components.

The implementation follows the method described in https://doi.org/10.26434/chemrxiv-2022-l4tb9

Currently, single atoms and diatomic molecules are simply filtered out. Please raise an issue if you need those cases to be treated correctly in your work.

Attributes

wasserstein_distance: float

Compute the wasserstein distance between the distributions of the predicted and true forces for each trans, rot, vib component.

get_histogram()[source]
get_metrics()[source]

Update the metrics.

get_plots()[source]
histogram_plt: Path = PosixPath('$nwd$/histogram.png')
rot_force_plt: Path = PosixPath('$nwd$/rot_force.png')
rot_forces: dict = NOT_AVAILABLE
run()[source]
trans_force_plt: Path = PosixPath('$nwd$/trans_force.png')
trans_forces: dict = NOT_AVAILABLE
vib_force_plt: Path = PosixPath('$nwd$/vib_force.png')
vib_forces: dict = NOT_AVAILABLE
wasserstein_distance: dict = NOT_AVAILABLE
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.predict.ForceUncertaintyDecomposition(*args, **kwargs)[source]

Bases: ComparePredictions

Node for decomposing force uncertainties in a system of molecular units into translational, rotational and vibrational components.

The implementation follows the method described in https://doi.org/10.26434/chemrxiv-2022-l4tb9

Currently, single atoms and diatomic molecules are simply filtered out. Please raise an issue if you need those cases to be treated correctly in your work.

get_metrics()[source]

Update the metrics.

get_plots()[source]
plots_dir: Path = PosixPath('$nwd$/plots')
rot_forces: dict = NOT_AVAILABLE
run()[source]
trans_forces: dict = NOT_AVAILABLE
vib_forces: dict = NOT_AVAILABLE
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.predict.Prediction(*args, **kwargs)[source]

Bases: ProcessAtoms

Create and Save the predictions from model on atoms.

Attributes

model: The MLModel node that implements the ‘predict’ method atoms: list[Atoms] to predict properties for

predictions: list[Atoms] the atoms that have the predicted properties from model

data: list[ase.Atoms]
model: MLModel
run()[source]
class ipsuite.analysis.model.predict.PredictionMetrics(*args, **kwargs)[source]

Bases: ComparePredictions

Compare model predictions against reference data with comprehensive metrics.

Computes and visualizes prediction accuracy for energy, forces, and stress with statistical measures including MAE, RMSE, and correlation coefficients. Useful for benchmarking different models and analyzing prediction quality.

Parameters

xlist[ase.Atoms]

Reference (ground truth) atomic configurations with calculated properties.

ylist[ase.Atoms]

Model predictions on the same configurations.

figure_ymaxdict[str, float], optional

Y-axis limits for plots by property type (energy, forces, stress).

Attributes

energydict

Energy prediction metrics (MAE, RMSE, R², etc.) in meV/atom.

forcesdict

Force prediction metrics (MAE, RMSE, R², etc.) in meV/Å.

stressdict

Stress prediction metrics in eV/ų.

plots_dirPath

Directory containing generated comparison plots.

Examples

>>> medium_model = ips.MACEMPModel(model="medium")
>>> small_model = ips.MACEMPModel(model="small")
>>> with project:
...     data = ips.AddData(file="ethanol.xyz")
...     medium_data = ips.ApplyCalculator(data=data.frames, model=medium_model)
...     small_data = ips.ApplyCalculator(data=data.frames, model=small_model)
...     metrics = ips.PredictionMetrics(x=medium_data.frames, y=small_data.frames)
>>> project.repro()
>>> print(f"Energy MAE: {metrics.energy['mae']:.2f} meV/atom")
Energy MAE: 52.23 meV/atom
>>> print(f"Force MAE: {metrics.forces['mae']:.2f} meV/Å")
Force MAE: 213.22 meV/Å
data_file: Path = PosixPath('$nwd$/data.npz')
energy: dict = NOT_AVAILABLE
figure_ymax: dict[str, float]
forces: dict = NOT_AVAILABLE
get_content()[source]
get_data()[source]

Create dict of all data.

get_metrics()[source]

Update the metrics.

get_plots(save=False)[source]

Create figures for all available data.

plots_dir: Path = PosixPath('$nwd$/plots')
run()[source]
stress: dict = NOT_AVAILABLE
stress_deviat: dict = NOT_AVAILABLE
stress_hydro: dict = NOT_AVAILABLE
x: list[ase.Atoms]
y: list[ase.Atoms]
ipsuite.analysis.model.predict.decompose_force_uncertainty(atom_true, atom_pred)[source]

Module contents

As in all ML applications, analysing both the dataset and model predictions are of paramount importance. For dataset exploration it is often convenient to visualize the distribution of labels. Most Nodes are concerned with analysing trained models and often compare to a reference calculator. This ranges from simple prediction correlation plots to force decompositions and energy-volume curves.

class ipsuite.analysis.model.BoxHeatUp(*args, **kwargs)[source]

Bases: ProcessSingleAtom

Perform a heat-up analysis by gradually increasing the temperature of the system and monitoring the measured temperature and energy.

Parameters

start_temperaturefloat

The initial temperature (in Kelvin) to start the analysis.

stop_temperaturefloat

The upper bound of the temperature range (in Kelvin).

stepsint

Number of temperature increments between start and stop temperature.

time_stepfloat, optional

Time step of the simulation in femtoseconds. Default is 0.5 fs.

frictionfloat

Langevin friction coefficient.

repeattuple of int, optional

Number of repetitions of the unit cell in each direction. Default is (1, 1, 1).

max_temperaturefloat or None, optional

Maximum allowed temperature before stopping the simulation. If None, set to 1.5 * stop_temperature.

modeltyping.Any

The MLModel node that implements the ‘get_calculator’ method.

model_outspathlib.Path

Output directory for model results.

plotspathlib.Path

Path to save the temperature plot.

Attributes

flux_datapd.DataFrame

DataFrame containing measured temperature, total energy, and set temperature at each step.

steps_before_explosionint

Number of steps completed before exceeding max_temperature, or -1 if not exceeded.

frameslist of ase.Atoms

List of atomic configurations at each step.

data: List[ase.Atoms]
flux_data: DataFrame = NOT_AVAILABLE
friction: float
get_atoms() Atoms[source]
max_temperature: float | None = None
model: Any
model_outs: Path = PosixPath('$nwd$/model')
plot_temperature()[source]
plots: Path = PosixPath('$nwd$/temperature.png')
repeat: tuple[int, int, int] = (1, 1, 1)
run()[source]
start_temperature: float
steps: int
stop_temperature: float
time_step: float = 0.5
class ipsuite.analysis.model.BoxScale(*args, **kwargs)[source]

Bases: ProcessSingleAtom

Scale all particles and predict energies.

Attributes

model: The MLModel node that implements the ‘predict’ method atoms: list[Atoms] to predict properties for start: int, default = None

The initial box scale, default value is the original box size.

stop: float, default = 1.0

The stop value for the generated space of stdev points

num: int, default = 100

The size of the generated space of stdev points

data: List[ase.Atoms]
energies: DataFrame = NOT_AVAILABLE
mapping: Any | None = None
model: MLModel
model_outs: Path = PosixPath('$nwd$/model')
num: int = 100
plot: Path = PosixPath('$nwd$/energy.png')
run()[source]
start: float = 1
stop: float = 2.0
class ipsuite.analysis.model.CalibrationMetrics(*args, **kwargs)[source]

Bases: ComparePredictions

Analyse the calibration of a models uncertainty estimate. Plots the empirical vs predicted error distribution, a log-log calibration plot and the miscalibration area. Further, various UQ metrics are computed: - Mean absolute calibration error - Root mean square miscalibration error - Miscalibration area - NLL - RLL

For more information checkout the uncertainty toolbox or the following paper: 10.1088/2632-2153/ad594a

Parameters

force_dist_slices: List[tuple]

Interval in which to analyse the gassianity of error distributions.

data_file: Path = PosixPath('$nwd$/data.npz')
energy: dict = NOT_AVAILABLE
force_dist_slices: List[tuple] | None = None
forces: dict = NOT_AVAILABLE
get_data()[source]

Create dict of all data.

get_metrics()[source]

Update the metrics.

get_plots(save=False)[source]

Create figures for all available data.

plots_dir: Path = PosixPath('$nwd$/plots')
run()[source]
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.ForceAngles(*, name: str | None = None, always_changed: bool = False, x: list[ase.atoms.Atoms], y: list[ase.atoms.Atoms], plot: pathlib.Path = PosixPath('$nwd$/angle.png'), log_plot: pathlib.Path = PosixPath('$nwd$/angle_ylog.png'))[source]

Bases: ComparePredictions

angles: dict = NOT_AVAILABLE
log_plot: Path = PosixPath('$nwd$/angle_ylog.png')
plot: Path = PosixPath('$nwd$/angle.png')
run()[source]
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.ForceDecomposition(*args, **kwargs)[source]

Bases: ComparePredictions

Node for decomposing forces in a system of molecular units into translational, rotational and vibrational components.

The implementation follows the method described in https://doi.org/10.26434/chemrxiv-2022-l4tb9

Currently, single atoms and diatomic molecules are simply filtered out. Please raise an issue if you need those cases to be treated correctly in your work.

Attributes

wasserstein_distance: float

Compute the wasserstein distance between the distributions of the predicted and true forces for each trans, rot, vib component.

get_histogram()[source]
get_metrics()[source]

Update the metrics.

get_plots()[source]
histogram_plt: Path = PosixPath('$nwd$/histogram.png')
rot_force_plt: Path = PosixPath('$nwd$/rot_force.png')
rot_forces: dict = NOT_AVAILABLE
run()[source]
trans_force_plt: Path = PosixPath('$nwd$/trans_force.png')
trans_forces: dict = NOT_AVAILABLE
vib_force_plt: Path = PosixPath('$nwd$/vib_force.png')
vib_forces: dict = NOT_AVAILABLE
wasserstein_distance: dict = NOT_AVAILABLE
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.ForceUncertaintyDecomposition(*args, **kwargs)[source]

Bases: ComparePredictions

Node for decomposing force uncertainties in a system of molecular units into translational, rotational and vibrational components.

The implementation follows the method described in https://doi.org/10.26434/chemrxiv-2022-l4tb9

Currently, single atoms and diatomic molecules are simply filtered out. Please raise an issue if you need those cases to be treated correctly in your work.

get_metrics()[source]

Update the metrics.

get_plots()[source]
plots_dir: Path = PosixPath('$nwd$/plots')
rot_forces: dict = NOT_AVAILABLE
run()[source]
trans_forces: dict = NOT_AVAILABLE
vib_forces: dict = NOT_AVAILABLE
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.MDStability(*args, **kwargs)[source]

Bases: IPSNode

Perform NVE molecular dynamics for all supplied atoms using a trained model. Several stability checks can be supplied to judge whether a particular trajectory is stable. If the check fails, the trajectory is terminated. After all trajectories are done, a histogram of the duration of stability is created.

Attributes

model: A node which implements the calc property. Typically an MLModel instance. data: list[Atoms] to run MD for for max_steps: Maximum number of steps for each trajectory time_step: MD integration time step initial_temperature: Initial velocities are drawn from a maxwell boltzman distribution. save_last_n: how many configurations before the instability should be saved bins: number of bins in the histogram seed: seed for the MaxwellBoltzmann distribution

bins: int = None
checks: list[Node] = None
data: list[Atoms]
property frames: List[Atoms]
get_plots(stable_steps: int) None[source]

Create figures for all available data.

initial_temperature: float = 300
max_steps: int
model: Any
model_outs: Path = PosixPath('$nwd$/model_outs')
plots_dir: Path = PosixPath('$nwd$/plots')
run() None[source]
save_last_n: int = 1
seed: int = 0
stable_steps_df: DataFrame = NOT_AVAILABLE
time_step: float = 0.5
traj_file: Path = PosixPath('$nwd$/structures.h5')
class ipsuite.analysis.model.Prediction(*args, **kwargs)[source]

Bases: ProcessAtoms

Create and Save the predictions from model on atoms.

Attributes

model: The MLModel node that implements the ‘predict’ method atoms: list[Atoms] to predict properties for

predictions: list[Atoms] the atoms that have the predicted properties from model

data: list[ase.Atoms]
model: MLModel
run()[source]
class ipsuite.analysis.model.PredictionMetrics(*args, **kwargs)[source]

Bases: ComparePredictions

Compare model predictions against reference data with comprehensive metrics.

Computes and visualizes prediction accuracy for energy, forces, and stress with statistical measures including MAE, RMSE, and correlation coefficients. Useful for benchmarking different models and analyzing prediction quality.

Parameters

xlist[ase.Atoms]

Reference (ground truth) atomic configurations with calculated properties.

ylist[ase.Atoms]

Model predictions on the same configurations.

figure_ymaxdict[str, float], optional

Y-axis limits for plots by property type (energy, forces, stress).

Attributes

energydict

Energy prediction metrics (MAE, RMSE, R², etc.) in meV/atom.

forcesdict

Force prediction metrics (MAE, RMSE, R², etc.) in meV/Å.

stressdict

Stress prediction metrics in eV/ų.

plots_dirPath

Directory containing generated comparison plots.

Examples

>>> medium_model = ips.MACEMPModel(model="medium")
>>> small_model = ips.MACEMPModel(model="small")
>>> with project:
...     data = ips.AddData(file="ethanol.xyz")
...     medium_data = ips.ApplyCalculator(data=data.frames, model=medium_model)
...     small_data = ips.ApplyCalculator(data=data.frames, model=small_model)
...     metrics = ips.PredictionMetrics(x=medium_data.frames, y=small_data.frames)
>>> project.repro()
>>> print(f"Energy MAE: {metrics.energy['mae']:.2f} meV/atom")
Energy MAE: 52.23 meV/atom
>>> print(f"Force MAE: {metrics.forces['mae']:.2f} meV/Å")
Force MAE: 213.22 meV/Å
data_file: Path = PosixPath('$nwd$/data.npz')
energy: dict = NOT_AVAILABLE
figure_ymax: dict[str, float]
forces: dict = NOT_AVAILABLE
get_content()[source]
get_data()[source]

Create dict of all data.

get_metrics()[source]

Update the metrics.

get_plots(save=False)[source]

Create figures for all available data.

plots_dir: Path = PosixPath('$nwd$/plots')
run()[source]
stress: dict = NOT_AVAILABLE
stress_deviat: dict = NOT_AVAILABLE
stress_hydro: dict = NOT_AVAILABLE
x: list[ase.Atoms]
y: list[ase.Atoms]
class ipsuite.analysis.model.RattleAnalysis(*args, **kwargs)[source]

Bases: ProcessSingleAtom

Move particles with a given stdev from a starting configuration and predict.

Attributes

model: The MLModel node that implements the ‘predict’ method atoms: list[Atoms] to predict properties for logspace: bool, default=True

Increase the stdev of rattle with ‘np.logspace’ instead of ‘np.linspace’

stop: float, default = 1.0

The stop value for the generated space of stdev points

num: int, default = 100

The size of the generated space of stdev points

factor: float, default = 0.001

The ‘np.linspace(0.0, stop, num) * factor’

atom_id: int, default = 0

The atom to pick from self.atoms as a starting point

data: List[ase.Atoms]
energies: DataFrame = NOT_AVAILABLE
factor: float = 0.001
logspace: bool = True
model: MLModel
model_outs: Path = PosixPath('$nwd$/model')
num: int = 100
run()[source]
seed: int = 1234
stop: float = 3.0