File: test_nwchem_writer.py

package info (click to toggle)
python-ase 3.22.1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 14,344 kB
  • sloc: python: 126,379; xml: 946; makefile: 111; javascript: 47
file content (57 lines) | stat: -rw-r--r-- 1,882 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
46
47
48
49
50
51
52
53
54
55
56
57
import numpy as np
import pytest
from ase import Atom, Atoms
from ase.io.nwchem import write_nwchem_in


@pytest.fixture
def atomic_configuration():
    molecule = Atoms(pbc=False)
    molecule.append(Atom('C', [0, 0, 0]))
    molecule.append(Atom('O', [1.6, 0, 0]))
    return molecule


@pytest.fixture
def calculator_parameters():
    params = dict(memory='1024 mb',
                  dft=dict(xc='b3lyp',
                           mult=1,
                           maxiter=300),
                  basis='6-311G*')
    return params


def test_echo(atomic_configuration, calculator_parameters, tmpdir):
    fd = tmpdir.mkdir('sub').join('nwchem.in')
    write_nwchem_in(fd, atomic_configuration, echo=False, **calculator_parameters)
    content = [line.rstrip('\n') for line in fd.readlines()]
    assert 'echo' not in content

    write_nwchem_in(fd, atomic_configuration, echo=True, **calculator_parameters)
    content = [line.rstrip('\n') for line in fd.readlines()]
    assert 'echo' in content


def test_params(atomic_configuration, calculator_parameters, tmpdir):
    fd = tmpdir.mkdir('sub').join('nwchem.in')
    write_nwchem_in(fd, atomic_configuration, **calculator_parameters)
    content = [line.rstrip('\n') for line in fd.readlines()]

    for key, value in calculator_parameters.items():
        for line in content:
            flds = line.split()
            if len(flds) == 0:
                continue
            if flds[0] == key:
                break
        else:
            assert False
        if key == 'basis':  # special case
            pass
        elif isinstance(value, str):
            assert len(value.split()) == len(flds[1:])
            assert all([v == f for v, f in zip(value.split(), flds[1:])])
        elif isinstance(value, (int, float)):
            assert len(flds[1:]) == 1
            assert np.isclose(value, float(flds[1]))