test_CifReader   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 13
eloc 41
dl 0
loc 61
rs 10
c 0
b 0
f 0

4 Functions

Rating   Name   Duplication   Size   Complexity  
A data_cif_paths() 0 4 1
A test_CifReader_equiv_structs() 0 7 2
A test_heaviest_component() 0 12 3
B test_CifReader() 0 22 7
1
import pytest
2
import amd
3
import warnings
4
5
6
@pytest.fixture(scope="module")
7
def data_cif_paths(data_dir):
8
    cif_names = ["cubic", "T2_experimental"]
9
    return {name: str(data_dir / f"{name}.cif") for name in cif_names}
10
11
12
@pytest.mark.parametrize("reader", ["gemmi", "ccdc"])
13
def test_CifReader(reader, data_cif_paths, reference_data):
14
    for name in data_cif_paths:
15
        try:
16
            read_in = list(amd.CifReader(data_cif_paths[name], reader=reader))
17
        except ImportError:
18
            pytest.skip(
19
                f"Skipping test_CifReader[{reader}] as {reader} failed to " "import."
20
            )
21
22
        references = reference_data[name]
23
24
        if (not len(references) == len(read_in)) or len(read_in) == 0:
25
            pytest.fail(
26
                f"There are {len(references)} references, but {len(read_in)}"
27
                f"structures were read from {name}."
28
            )
29
30
        for s, s_ in zip(read_in, references):
31
            if not s._equal_cell_and_motif(s_["PeriodicSet"]):
32
                pytest.fail(
33
                    f"Structure {name}:{s.name} read with CifReader disagrees "
34
                    "with reference."
35
                )
36
37
38
def test_CifReader_equiv_structs(data_dir):
39
    structs = list(amd.CifReader(data_dir / "eq_sites_test.cif", show_warnings=False))
40
    pdds = [amd.PDD(struct, 100) for struct in structs]
41
42
    if amd.EMD(pdds[0], pdds[1]) > 1e-10:  # change
43
        pytest.fail(
44
            "Asymmetric structure was read differently than identical "
45
            "expanded version."
46
        )
47
48
49
def test_heaviest_component(data_dir, ccdc_enabled):
50
    if not ccdc_enabled:
51
        pytest.skip("Skipping test_CSDReader as csd-python-api failed to import.")
52
53
    s = amd.CifReader(
54
        data_dir / "T2-alpha-solvent.cif",
55
        reader="ccdc",
56
        heaviest_component=True,
57
    ).read()
58
59
    if not s.asym_unit.shape[0] == 26:
60
        pytest.fail("Heaviest component test failed.")
61