Coverage for /builds/ase/ase/ase/io/vasp_parsers/incar_writer.py: 96.67%
30 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-08-02 00:12 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-08-02 00:12 +0000
1# fmt: off
3from collections.abc import Iterable
6def write_incar(directory, parameters, header=None):
7 incar_string = generate_incar_lines(parameters)
8 with open(f"{directory}/INCAR", "w") as incar:
9 if header is not None:
10 incar.write(header + "\n")
11 incar.write(incar_string)
14def generate_incar_lines(parameters):
15 if isinstance(parameters, str):
16 return parameters
17 elif parameters is None:
18 return ""
19 else:
20 incar_lines = []
21 for item in parameters.items():
22 incar_lines += list(generate_line(*item))
23 # Adding a newline at the end of the file
24 return "\n".join(incar_lines) + "\n"
27def generate_line(key, value, num_spaces=0):
28 indent = " " * num_spaces
29 if isinstance(value, str):
30 if value.find("\n") != -1:
31 value = '"' + value + '"'
32 yield indent + f"{key.upper()} = {value}"
33 elif isinstance(value, dict):
34 yield indent + f"{key.upper()} {{"
35 for item in value.items():
36 yield from generate_line(*item, num_spaces + 4)
37 yield indent + "}"
38 elif isinstance(value, Iterable):
39 yield indent + f"{key.upper()} = {' '.join(str(x) for x in value)}"
40 else:
41 yield indent + f"{key.upper()} = {value}"