File: test_molecule_metadata.py

package info (click to toggle)
python-emmet-core 0.84.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 77,220 kB
  • sloc: python: 16,355; makefile: 30
file content (45 lines) | stat: -rw-r--r-- 1,717 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import pytest
from pymatgen.core import Molecule
from pymatgen.core.composition import Composition
from pymatgen.core.periodic_table import Element

from emmet.core.structure import MoleculeMetadata


@pytest.fixture()
def molecule():
    return Molecule(species=["O", "O"], coords=[[0, 0, 0], [0.0, 0.0, 1.16]])


def test_from_molecule(molecule):
    metadata = MoleculeMetadata.from_molecule(molecule, extra_field="extra_value")
    assert metadata.natoms == 2
    assert metadata.elements == [Element("O")]
    assert metadata.nelements == 1
    assert metadata.composition == Composition("O2")
    assert metadata.composition_reduced == Composition("O2").reduced_composition
    assert metadata.formula_alphabetical == "O2"
    assert metadata.formula_pretty == "O2"
    assert metadata.formula_anonymous == "A"
    assert metadata.chemsys == "O"
    assert metadata.symmetry.point_group == "D*h"
    assert metadata.charge == 0
    assert metadata.spin_multiplicity == 1
    assert metadata.nelectrons == 16

    assert metadata.model_config.get("extra") is None, (
        "Should not allow extra field to keep validation strict, if "
        "extra fields are needed, set extra='allow' on a subclass"
    )
    assert metadata.model_dump().get("extra_field") is None


def test_from_comp(molecule):
    metadata = MoleculeMetadata.from_composition(molecule.composition)
    assert metadata.elements == [Element("O")]
    assert metadata.nelements == 1
    assert metadata.composition == Composition("O2")
    assert metadata.composition_reduced == Composition("O2").reduced_composition
    assert metadata.formula_pretty == "O2"
    assert metadata.formula_anonymous == "A"
    assert metadata.chemsys == "O"