File: test_gen.py

package info (click to toggle)
python-ase 3.26.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,484 kB
  • sloc: python: 148,112; xml: 2,728; makefile: 110; javascript: 47
file content (43 lines) | stat: -rw-r--r-- 1,459 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
# fmt: off
"""Tests for GEN format"""
import numpy as np
import pytest

from ase import Atoms
from ase.io import write
from ase.io.gen import read_gen


@pytest.mark.parametrize("fractional", [False, True])
@pytest.mark.parametrize("cell", [None, [[2.5, 0, 0], [2, 4, 0], [1, 2, 3]]])
@pytest.mark.parametrize("pbc", [False, [True, True, False], True])
@pytest.mark.parametrize("write_format", ["gen", "dftb"])
def test_gen(write_format: str, cell: list, pbc: bool, fractional: bool):
    """Test for `write_gen` and `read_gen`"""
    if fractional and cell is None:
        # fractional==True is invalid when cell is None.
        return

    positions = [[-0.1, 1.2, 0.3], [-0.1, 0.0, 0.2], [0.4, -0.9, 0.0]]
    atoms = Atoms(symbols="OCO", pbc=pbc, cell=cell, positions=positions)
    fname = "test.gen"
    write(fname, atoms, format=write_format, fractional=fractional)
    atoms_new = read_gen(fname)

    assert np.all(atoms_new.numbers == atoms.numbers)
    assert np.allclose(atoms_new.positions, atoms.positions)

    if atoms.pbc.any() or fractional:
        assert np.all(atoms_new.pbc)
        assert np.allclose(atoms_new.cell, atoms.cell)
    else:
        assert np.all(~atoms_new.pbc)
        assert np.allclose(atoms_new.cell, 0.0)


def test_gen_multiple():
    """Test multiple images (not supported by the format) that should fail"""
    atoms = Atoms("H2")

    with pytest.raises(ValueError):
        write("test.gen", [atoms, atoms])