Skip to content

pymatgen

Convert an OPTIMADE structure, in the format of StructureResource to a pymatgen Molecule or Structure object.

This conversion function relies on the pymatgen package.

For more information on the pymatgen code see their documentation.

get_pymatgen(optimade_structure)

Get pymatgen Structure or Molecule from OPTIMADE structure.

This function will return either a pymatgen Structure or Molecule based on the periodicity or periodic dimensionality of OPTIMADE structure.

For bulk, three-dimensional structures, a pymatgen Structure is returned. This means, if the dimension_types attribute is comprised of all 1s (or Periodicity.PERIODICs).

Otherwise, a pymatgen Molecule is returned.

Parameters:

Name Type Description Default
optimade_structure StructureResource

OPTIMADE structure.

required

Returns:

Type Description
Union[pymatgen.core.structure.Structure, pymatgen.core.structure.Molecule]

A pymatgen Structure or Molecule based on the periodicity of the OPTIMADE structure.

Source code in optimade/adapters/structures/pymatgen.py
def get_pymatgen(optimade_structure: OptimadeStructure) -> Union[Structure, Molecule]:
    """Get pymatgen `Structure` or `Molecule` from OPTIMADE structure.

    This function will return either a pymatgen `Structure` or `Molecule` based
    on the periodicity or periodic dimensionality of OPTIMADE structure.

    For bulk, three-dimensional structures, a pymatgen `Structure` is returned.
    This means, if the [`dimension_types`][optimade.models.structures.StructureResourceAttributes.dimension_types]
    attribute is comprised of all `1`s (or [`Periodicity.PERIODIC`][optimade.models.structures.Periodicity.PERIODIC]s).

    Otherwise, a pymatgen `Molecule` is returned.

    Parameters:
        optimade_structure: OPTIMADE structure.

    Returns:
        A pymatgen `Structure` or `Molecule` based on the periodicity of the
        OPTIMADE structure.

    """
    if "optimade.adapters" in repr(globals().get("Structure")):
        warn(PYMATGEN_NOT_FOUND, AdapterPackageNotFound)
        return None

    if all(optimade_structure.attributes.dimension_types):
        return _get_structure(optimade_structure)

    return _get_molecule(optimade_structure)