digichem-core 6.1.0__py3-none-any.whl → 6.10.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- digichem/__init__.py +2 -2
- digichem/config/base.py +6 -4
- digichem/data/batoms/batoms-renderer.py +190 -50
- digichem/data/batoms/batoms_renderer.py +500 -0
- digichem/file/base.py +14 -0
- digichem/file/cube.py +185 -16
- digichem/file/types.py +1 -0
- digichem/image/render.py +149 -48
- digichem/image/vmd.py +7 -2
- digichem/input/digichem_input.py +2 -2
- digichem/memory.py +10 -0
- digichem/misc/io.py +95 -1
- digichem/parse/__init__.py +6 -1
- digichem/parse/base.py +85 -54
- digichem/parse/cclib.py +139 -13
- digichem/parse/dump.py +3 -3
- digichem/parse/orca.py +1 -0
- digichem/parse/pyscf.py +35 -0
- digichem/parse/turbomole.py +3 -3
- digichem/parse/util.py +146 -65
- digichem/result/excited_state.py +17 -11
- digichem/result/metadata.py +307 -3
- digichem/result/result.py +3 -0
- digichem/result/spectroscopy.py +42 -0
- digichem/test/conftest.py +5 -0
- digichem/test/mock/cubegen +87172 -0
- digichem/test/mock/formchk +9456 -0
- digichem/test/test_image.py +54 -42
- digichem/test/test_memory.py +33 -0
- digichem/test/test_parsing.py +68 -1
- digichem/test/test_result.py +1 -1
- digichem/test/util.py +4 -1
- {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/METADATA +4 -3
- {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/RECORD +37 -32
- {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/WHEEL +1 -1
- {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/licenses/COPYING.md +0 -0
- {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/licenses/LICENSE +0 -0
digichem/test/test_image.py
CHANGED
|
@@ -8,8 +8,10 @@ from digichem.image.orbitals import Orbital_diagram_maker
|
|
|
8
8
|
from digichem.image.spectroscopy import Absorption_graph_maker, Emission_graph_maker, \
|
|
9
9
|
Frequency_graph_maker, NMR_graph_maker, NMR_graph_zoom_maker
|
|
10
10
|
from digichem.image.structure import Skeletal_image_maker
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
import digichem.image.vmd
|
|
12
|
+
import digichem.image.render
|
|
13
|
+
|
|
14
|
+
|
|
13
15
|
from digichem.parse.util import open_for_parsing, parse_calculation
|
|
14
16
|
|
|
15
17
|
from digichem.test.util import digichem_options, data_directory
|
|
@@ -17,7 +19,9 @@ from digichem.test.test_result import gaussian_ES_result, turbomole_ES_result, o
|
|
|
17
19
|
gaussian_opt_result, turbomole_opt_result, orca_opt_result, orca_opt_freq_result, \
|
|
18
20
|
orca_nmr_result
|
|
19
21
|
|
|
20
|
-
HAS_VMD = shutil.which(
|
|
22
|
+
HAS_VMD = shutil.which(digichem.config.get_config()['render']['vmd']['executable'])
|
|
23
|
+
HAS_BLENDER = shutil.which(digichem.config.get_config()['render']['batoms']['blender'])
|
|
24
|
+
|
|
21
25
|
|
|
22
26
|
@pytest.mark.parametrize("result_set", [
|
|
23
27
|
pytest.lazy_fixture("gaussian_ES_result"),
|
|
@@ -176,14 +180,14 @@ def test_2d_diagram(result_set, tmp_path, digichem_options):
|
|
|
176
180
|
assert Path(tmp_path, "tmp.png").exists()
|
|
177
181
|
|
|
178
182
|
|
|
179
|
-
@pytest.mark.skipif(not HAS_VMD,
|
|
180
|
-
reason="No VMD available")
|
|
181
183
|
@pytest.mark.parametrize("cube_file", [
|
|
182
184
|
Path(data_directory(), "Cubes/Pyridine.HOMO.cube")
|
|
183
185
|
], ids = ["Gaussian"])
|
|
184
186
|
@pytest.mark.parametrize("maker_cls", [
|
|
185
|
-
Structure_image_maker,
|
|
186
|
-
Orbital_image_maker,
|
|
187
|
+
pytest.param(digichem.image.vmd.Structure_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
188
|
+
pytest.param(digichem.image.vmd.Orbital_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
189
|
+
pytest.param(digichem.image.render.Structure_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
190
|
+
pytest.param(digichem.image.render.Orbital_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
187
191
|
])
|
|
188
192
|
def test_3d_image(cube_file, maker_cls, tmp_path, digichem_options):
|
|
189
193
|
"""Can we make a 3D structure image?"""
|
|
@@ -197,21 +201,17 @@ def test_3d_image(cube_file, maker_cls, tmp_path, digichem_options):
|
|
|
197
201
|
assert Path(tmp_path, "tmp.x0y0z0.png").exists()
|
|
198
202
|
|
|
199
203
|
|
|
200
|
-
# @pytest.mark.parametrize("result_path", [
|
|
201
|
-
# Path(data_directory(), "Pyridine/Gaussian 16 Optimisation Frequencies PBE1PBE (GD3BJ) Toluene 6-31G(d,p).tar.gz")
|
|
202
|
-
# ], ids = ["Gaussian"])
|
|
203
|
-
# @pytest.mark.parametrize("density", [
|
|
204
|
-
# "SCF"
|
|
205
|
-
# ])
|
|
206
|
-
|
|
207
|
-
@pytest.mark.skipif(not HAS_VMD,
|
|
208
|
-
reason="No VMD available")
|
|
209
204
|
@pytest.mark.parametrize("cube_file", [
|
|
210
205
|
Path(data_directory(), "Cubes/Pyridine.SCF.cube")
|
|
211
206
|
], ids = ["Gaussian"])
|
|
212
|
-
|
|
207
|
+
@pytest.mark.parametrize("maker_cls", [
|
|
208
|
+
pytest.param(digichem.image.vmd.Density_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
209
|
+
pytest.param(digichem.image.render.Density_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
210
|
+
], ids = ["vmd", "batoms"])
|
|
211
|
+
def test_density_image(cube_file, maker_cls, tmp_path, digichem_options):
|
|
213
212
|
"""Can we make a 3D structure image?"""
|
|
214
|
-
|
|
213
|
+
|
|
214
|
+
maker = maker_cls.from_options(
|
|
215
215
|
tmp_path / "tmp.png",
|
|
216
216
|
cube_file = cube_file,
|
|
217
217
|
options = digichem_options
|
|
@@ -221,14 +221,16 @@ def test_density_image(cube_file, tmp_path, digichem_options):
|
|
|
221
221
|
assert Path(tmp_path, "tmp.x0y0z0.png").exists()
|
|
222
222
|
|
|
223
223
|
|
|
224
|
-
@pytest.mark.skipif(not HAS_VMD,
|
|
225
|
-
reason="No VMD available")
|
|
226
224
|
@pytest.mark.parametrize("cube_file", [
|
|
227
225
|
Path(data_directory(), "Cubes/Benzene.anion.spin.cube")
|
|
228
226
|
], ids = ["Gaussian"])
|
|
229
|
-
|
|
227
|
+
@pytest.mark.parametrize("maker_cls", [
|
|
228
|
+
pytest.param(digichem.image.vmd.Spin_density_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
229
|
+
pytest.param(digichem.image.render.Spin_density_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
230
|
+
], ids = ["vmd", "batoms"])
|
|
231
|
+
def test_spin_density_image(cube_file, maker_cls, tmp_path, digichem_options):
|
|
230
232
|
"""Can we make a 3D structure image?"""
|
|
231
|
-
maker =
|
|
233
|
+
maker = maker_cls.from_options(
|
|
232
234
|
tmp_path / "tmp.png",
|
|
233
235
|
cube_file = cube_file,
|
|
234
236
|
options = digichem_options
|
|
@@ -238,14 +240,16 @@ def test_spin_density_image(cube_file, tmp_path, digichem_options):
|
|
|
238
240
|
assert Path(tmp_path, "tmp.x0y0z0.png").exists()
|
|
239
241
|
|
|
240
242
|
|
|
241
|
-
@pytest.mark.skipif(not HAS_VMD,
|
|
242
|
-
reason="No VMD available")
|
|
243
243
|
@pytest.mark.parametrize("homo_cube, lumo_cube", [
|
|
244
244
|
[Path(data_directory(), "Cubes/Pyridine.HOMO.cube"), Path(data_directory(), "Cubes/Pyridine.LUMO.cube")]
|
|
245
245
|
], ids = ["Gaussian"])
|
|
246
|
-
|
|
246
|
+
@pytest.mark.parametrize("maker_cls", [
|
|
247
|
+
pytest.param(digichem.image.vmd.Combined_orbital_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
248
|
+
pytest.param(digichem.image.render.Combined_orbital_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
249
|
+
], ids = ["vmd", "batoms"])
|
|
250
|
+
def test_combined_orbital_image(homo_cube, maker_cls, lumo_cube, tmp_path, digichem_options):
|
|
247
251
|
"""Can we make a 3D structure image?"""
|
|
248
|
-
maker =
|
|
252
|
+
maker = maker_cls.from_options(
|
|
249
253
|
tmp_path / "tmp.png",
|
|
250
254
|
HOMO_cube_file = homo_cube,
|
|
251
255
|
LUMO_cube_file = lumo_cube,
|
|
@@ -256,14 +260,16 @@ def test_combined_orbital_image(homo_cube, lumo_cube, tmp_path, digichem_options
|
|
|
256
260
|
assert Path(tmp_path, "tmp.x0y0z0.png").exists()
|
|
257
261
|
|
|
258
262
|
|
|
259
|
-
@pytest.mark.skipif(not HAS_VMD,
|
|
260
|
-
reason="No VMD available")
|
|
261
263
|
@pytest.mark.parametrize("cube_file", [
|
|
262
264
|
Path(data_directory(), "Cubes/Benzene.anion.AHOMO.cube")
|
|
263
265
|
], ids = ["Gaussian"])
|
|
264
|
-
|
|
266
|
+
@pytest.mark.parametrize("maker_cls", [
|
|
267
|
+
pytest.param(digichem.image.vmd.Alpha_orbital_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
268
|
+
pytest.param(digichem.image.render.Alpha_orbital_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
269
|
+
], ids = ["vmd", "batoms"])
|
|
270
|
+
def test_unrestricted_orbital_image(cube_file, maker_cls, tmp_path, digichem_options):
|
|
265
271
|
"""Can we make a 3D structure image?"""
|
|
266
|
-
maker =
|
|
272
|
+
maker = maker_cls.from_options(
|
|
267
273
|
tmp_path / "tmp.png",
|
|
268
274
|
cube_file = cube_file,
|
|
269
275
|
options = digichem_options
|
|
@@ -273,19 +279,21 @@ def test_unrestricted_orbital_image(cube_file, tmp_path, digichem_options):
|
|
|
273
279
|
assert Path(tmp_path, "tmp.x0y0z0.png").exists()
|
|
274
280
|
|
|
275
281
|
|
|
276
|
-
@pytest.mark.skipif(not HAS_VMD,
|
|
277
|
-
reason="No VMD available")
|
|
278
282
|
@pytest.mark.parametrize("result_path, cube_file", [
|
|
279
283
|
[
|
|
280
284
|
Path(data_directory(), "Pyridine/Gaussian 16 Optimisation Frequencies PBE1PBE (GD3BJ) Toluene 6-31G(d,p).tar.gz"),
|
|
281
285
|
Path(data_directory(), "Cubes/Pyridine.HOMO.cube"),
|
|
282
286
|
]
|
|
283
287
|
])
|
|
284
|
-
|
|
288
|
+
@pytest.mark.parametrize("maker_cls", [
|
|
289
|
+
pytest.param(digichem.image.vmd.Permanent_dipole_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
290
|
+
pytest.param(digichem.image.render.Permanent_dipole_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
291
|
+
], ids = ["vmd", "batoms"])
|
|
292
|
+
def test_pdm_image(result_path, cube_file, maker_cls, tmp_path, digichem_options):
|
|
285
293
|
"""Can we make a 3D structure image?"""
|
|
286
294
|
with open_for_parsing(result_path) as open_files:
|
|
287
295
|
result_set = parse_calculation(*open_files, options = digichem_options)
|
|
288
|
-
maker =
|
|
296
|
+
maker = maker_cls.from_options(
|
|
289
297
|
tmp_path / "tmp.png",
|
|
290
298
|
cube_file = cube_file,
|
|
291
299
|
dipole_moment = result_set.dipole_moment,
|
|
@@ -296,19 +304,21 @@ def test_pdm_image(result_path, cube_file, tmp_path, digichem_options):
|
|
|
296
304
|
assert Path(tmp_path, "tmp.x0y0z0.png").exists()
|
|
297
305
|
|
|
298
306
|
|
|
299
|
-
@pytest.mark.skipif(not HAS_VMD,
|
|
300
|
-
reason="No VMD available")
|
|
301
307
|
@pytest.mark.parametrize("result_path, cube_file", [
|
|
302
308
|
[
|
|
303
309
|
Path(data_directory(), "Pyridine/Gaussian 16 Excited States TDA Optimised S(1) PBE1PBE (GD3BJ) Toluene 6-31G(d,p).tar.gz"),
|
|
304
310
|
Path(data_directory(), "Cubes/Pyridine.HOMO.cube"),
|
|
305
311
|
]
|
|
306
312
|
])
|
|
307
|
-
|
|
313
|
+
@pytest.mark.parametrize("maker_cls", [
|
|
314
|
+
pytest.param(digichem.image.vmd.Transition_dipole_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
315
|
+
pytest.param(digichem.image.render.Transition_dipole_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
316
|
+
], ids = ["vmd", "batoms"])
|
|
317
|
+
def test_tdm_image(result_path, cube_file, maker_cls, tmp_path, digichem_options):
|
|
308
318
|
"""Can we make a 3D structure image?"""
|
|
309
319
|
with open_for_parsing(result_path) as open_files:
|
|
310
320
|
result_set = parse_calculation(*open_files, options = digichem_options)
|
|
311
|
-
maker =
|
|
321
|
+
maker = maker_cls.from_options(
|
|
312
322
|
tmp_path / "tmp.png",
|
|
313
323
|
cube_file = cube_file,
|
|
314
324
|
dipole_moment = result_set.excited_states.find("S(1)").transition_dipole_moment.electric,
|
|
@@ -320,14 +330,16 @@ def test_tdm_image(result_path, cube_file, tmp_path, digichem_options):
|
|
|
320
330
|
assert Path(tmp_path, "tmp.x0y0z0.png").exists()
|
|
321
331
|
|
|
322
332
|
|
|
323
|
-
@pytest.mark.skipif(not HAS_VMD,
|
|
324
|
-
reason="No VMD available")
|
|
325
333
|
@pytest.mark.parametrize("cube_file", [
|
|
326
334
|
Path(data_directory(), "Cubes/Pyridine.HOMO.cube"),
|
|
327
335
|
])
|
|
328
|
-
|
|
336
|
+
@pytest.mark.parametrize("maker_cls", [
|
|
337
|
+
pytest.param(digichem.image.vmd.Orbital_image_maker, marks = pytest.mark.skipif(not HAS_VMD, reason = "VMD is not available")),
|
|
338
|
+
pytest.param(digichem.image.render.Orbital_image_maker, marks = pytest.mark.skipif(not HAS_BLENDER, reason = "Blender is not available")),
|
|
339
|
+
], ids = ["vmd", "batoms"])
|
|
340
|
+
def test_nto_image(cube_file, maker_cls, tmp_path, digichem_options):
|
|
329
341
|
"""Can we make a 3D structure image?"""
|
|
330
|
-
maker =
|
|
342
|
+
maker = maker_cls.from_options(
|
|
331
343
|
tmp_path / "tmp.png",
|
|
332
344
|
cube_file = cube_file,
|
|
333
345
|
options = digichem_options
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Test for memory representations."""
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from digichem.memory import Memory
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@pytest.mark.parametrize("value, valid", [
|
|
9
|
+
["1", True],
|
|
10
|
+
[1, True],
|
|
11
|
+
[1.0, True],
|
|
12
|
+
["1 B", True],
|
|
13
|
+
["1 KB", True],
|
|
14
|
+
["1 MB", True],
|
|
15
|
+
["1 GB", True],
|
|
16
|
+
["1 TB", True],
|
|
17
|
+
["foo bar", False],
|
|
18
|
+
])
|
|
19
|
+
def test_validation(value, valid):
|
|
20
|
+
try:
|
|
21
|
+
mem = Memory(value)
|
|
22
|
+
|
|
23
|
+
str(mem)
|
|
24
|
+
|
|
25
|
+
except Exception:
|
|
26
|
+
if valid:
|
|
27
|
+
raise
|
|
28
|
+
|
|
29
|
+
else:
|
|
30
|
+
return
|
|
31
|
+
|
|
32
|
+
if not valid:
|
|
33
|
+
raise
|
digichem/test/test_parsing.py
CHANGED
|
@@ -76,4 +76,71 @@ def test_dump_and_parse(result_files, tmp_path, digichem_options):
|
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
assert raw_dump == parsed_dump
|
|
79
|
-
|
|
79
|
+
|
|
80
|
+
@pytest.mark.parametrize(
|
|
81
|
+
"result_files, num_archives",
|
|
82
|
+
[
|
|
83
|
+
[(Path(data_directory(), "Archives/1/Benzene.log"),), 1],
|
|
84
|
+
[(Path(data_directory(), "Archives/1/Benzene.log"), "fchk:" + str(Path(data_directory(), "Archives/1/Benzene.fchk.zip"))), 1],
|
|
85
|
+
[(Path(data_directory(), "Archives/1/"),), 1],
|
|
86
|
+
[(Path(data_directory(), "Archives/1/"), "fchk:" + str(Path(data_directory(), "Archives/1/Benzene.fchk.zip"))), 1],
|
|
87
|
+
[(Path(data_directory(), "Archives/2/Benzene.log.zip"),), 1],
|
|
88
|
+
[(Path(data_directory(), "Archives/2/Benzene.log.zip"), "fchk:" + str(Path(data_directory(), "Archives/2/Benzene.fchk"))), 1],
|
|
89
|
+
[(Path(data_directory(), "Archives/2"),), 1],
|
|
90
|
+
[(Path(data_directory(), "Archives/2/Benzene.log.zip"), "fchk:" + str(Path(data_directory(), "Archives/2/Benzene.fchk"))), 1],
|
|
91
|
+
[(Path(data_directory(), "Archives/3/Benzene.log.zip"),), 2],
|
|
92
|
+
[(Path(data_directory(), "Archives/3/Benzene.log.zip"), "fchk:" + str(Path(data_directory(), "Archives/3/Benzene.fchk.zip"))), 2],
|
|
93
|
+
[(Path(data_directory(), "Archives/3"),), 2],
|
|
94
|
+
[(Path(data_directory(), "Archives/3/Benzene.log.zip"), "fchk:" + str(Path(data_directory(), "Archives/3/Benzene.fchk.zip"))), 2],
|
|
95
|
+
[(Path(data_directory(), "Archives/4"),), 0],
|
|
96
|
+
[(Path(data_directory(), "Archives/4.zip"),), 1],
|
|
97
|
+
[(Path(data_directory(), "Archives/8.zip"),), 1],
|
|
98
|
+
]
|
|
99
|
+
)
|
|
100
|
+
def test_gaussian_archives(result_files, num_archives, digichem_options):
|
|
101
|
+
"""
|
|
102
|
+
Can we parse from various archives?
|
|
103
|
+
"""
|
|
104
|
+
try:
|
|
105
|
+
result, archive = parse_calculation(*result_files, options = digichem_options, keep_archive = True)
|
|
106
|
+
assert isinstance(result, Result_set)
|
|
107
|
+
|
|
108
|
+
# Check we have found the fchk.
|
|
109
|
+
assert "fchk_file" in result.metadata.auxiliary_files
|
|
110
|
+
assert len(result.metadata.log_files) == 1
|
|
111
|
+
|
|
112
|
+
# Make sure we didn't unpack any other archives by accident.
|
|
113
|
+
assert len(archive.archive_dirs) == num_archives
|
|
114
|
+
|
|
115
|
+
finally:
|
|
116
|
+
archive.cleanup()
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
@pytest.mark.parametrize(
|
|
120
|
+
"result_files, num_archives",
|
|
121
|
+
[
|
|
122
|
+
[(Path(data_directory(), "Archives/5"),), 27],
|
|
123
|
+
[(Path(data_directory(), "Archives/5/Naphthalene.log"),), 27],
|
|
124
|
+
[(Path(data_directory(), "Archives/6"),), 28],
|
|
125
|
+
[(Path(data_directory(), "Archives/6/Naphthalene.log.zip"),), 28],
|
|
126
|
+
[(Path(data_directory(), "Archives/7"),), 1],
|
|
127
|
+
[(Path(data_directory(), "Archives/7/Naphthalene.log.zip"),), 1],
|
|
128
|
+
]
|
|
129
|
+
)
|
|
130
|
+
def test_turbomole_archives(result_files, num_archives, digichem_options):
|
|
131
|
+
"""
|
|
132
|
+
Can we parse from various archives?
|
|
133
|
+
"""
|
|
134
|
+
try:
|
|
135
|
+
result, archive = parse_calculation(*result_files, options = digichem_options, keep_archive = True)
|
|
136
|
+
assert isinstance(result, Result_set)
|
|
137
|
+
|
|
138
|
+
# Check we have found the fchk.
|
|
139
|
+
assert "ground_state_cao_file" in result.metadata.auxiliary_files
|
|
140
|
+
assert len(result.metadata.log_files) == 13
|
|
141
|
+
|
|
142
|
+
# Make sure we didn't unpack any other archives by accident.
|
|
143
|
+
assert len(archive.archive_dirs) == num_archives
|
|
144
|
+
|
|
145
|
+
finally:
|
|
146
|
+
archive.cleanup()
|
digichem/test/test_result.py
CHANGED
|
@@ -208,7 +208,7 @@ def test_atoms(result_set):
|
|
|
208
208
|
assert result_set.raw_atoms.element_dict['H'] == 8
|
|
209
209
|
|
|
210
210
|
# Check mass.
|
|
211
|
-
assert result_set.raw_atoms.molar_mass == pytest.approx(128.
|
|
211
|
+
assert result_set.raw_atoms.molar_mass == pytest.approx(128.174)
|
|
212
212
|
|
|
213
213
|
# We don't check positions here because these can vary from calc to calc due to reorientation...
|
|
214
214
|
|
digichem/test/util.py
CHANGED
|
@@ -29,7 +29,8 @@ result_files = {
|
|
|
29
29
|
"gaussian": [Path(data_directory(), datum) for datum in [
|
|
30
30
|
'Naphthalene/Gaussian 16 Optimisation Frequencies PBE1PBE (GD3BJ) Toluene 6-31G(d,p)',
|
|
31
31
|
'Naphthalene/Gaussian 16 Excited States TDA 10 Singlets 10 Triplets PBE1PBE (GD3BJ) Toluene 6-31G(d,p).tar.gz',
|
|
32
|
-
'Naphthalene/Gaussian 16 Excited States TDA Optimised S(1) PBE1PBE (GD3BJ) Toluene 6-31G(d,p).tar.gz',
|
|
32
|
+
'Naphthalene/Gaussian 16 Excited States TDA Optimised S(1) PBE1PBE (GD3BJ) Toluene 6-31G(d,p).tar.gz',
|
|
33
|
+
'Pyridine/Gaussian 16 Excited States TDA Optimised S(1) PBE1PBE (GD3BJ) Toluene 6-31G(d,p).tar.gz'
|
|
33
34
|
]],
|
|
34
35
|
"turbomole": [Path(data_directory(), datum) for datum in [
|
|
35
36
|
'Naphthalene/Turbomole Optimisation ADC(2) cc-pVDZ.tar.gz',
|
|
@@ -64,6 +65,8 @@ def digichem_options(tmpdir_factory):
|
|
|
64
65
|
),
|
|
65
66
|
]
|
|
66
67
|
config.logging['render_logging'] = True
|
|
68
|
+
# Set blender quality as low as feasible to shorten test time.
|
|
69
|
+
config.render['batoms']['render_samples'] = 1
|
|
67
70
|
config.validate()
|
|
68
71
|
return config
|
|
69
72
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: digichem-core
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.10.3
|
|
4
4
|
Summary: Open-source library for Digichem core components
|
|
5
5
|
Project-URL: Homepage, https://github.com/Digichem-Project/digichem-core
|
|
6
6
|
Project-URL: Documentation, https://doc.digi-chem.co.uk
|
|
@@ -38,6 +38,7 @@ Requires-Dist: pyyaml
|
|
|
38
38
|
Requires-Dist: rdkit
|
|
39
39
|
Requires-Dist: scipy
|
|
40
40
|
Provides-Extra: test
|
|
41
|
+
Requires-Dist: pyscf; extra == 'test'
|
|
41
42
|
Requires-Dist: pytest; extra == 'test'
|
|
42
43
|
Requires-Dist: pytest-lazy-fixture; extra == 'test'
|
|
43
44
|
Description-Content-Type: text/markdown
|
|
@@ -97,4 +98,4 @@ Documentation coming soon.
|
|
|
97
98
|
|
|
98
99
|
Digichem-core is licensed under the BSD-3-Clause license, but some files are licensed separately. See [COPYING.md](COPYING.md) for full details.
|
|
99
100
|
|
|
100
|
-
The Digichem logo and branding is Copyright Digichem
|
|
101
|
+
The Digichem logo and branding is Copyright Digichem 2025, you may not use them in any way (although you are welcome to look at them).
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
digichem/__init__.py,sha256=
|
|
1
|
+
digichem/__init__.py,sha256=luFQpfEPAH0YvnW2PNBB7mdfr8BOYNsDXzN8gSn5Yg4,2288
|
|
2
2
|
digichem/basis.py,sha256=khzIS9A_w8QH2vsXctWr16Bw5TA84_9_Fo-vuveP_5w,4875
|
|
3
3
|
digichem/datas.py,sha256=t2PuQFvPb55WO_qVF3Xz67XNodQDimqYD26VkRPEWLA,433
|
|
4
4
|
digichem/log.py,sha256=tjl8Er16HUsAibBZGZMu8KyT0w53YM3u0Neh_l2jD9Q,6166
|
|
5
|
-
digichem/memory.py,sha256=
|
|
5
|
+
digichem/memory.py,sha256=_HJMwiElr0534lr3h17WwvXOi-DxCN-bAD1Ij8Lwg6U,5638
|
|
6
6
|
digichem/translate.py,sha256=YKm7wko13A17zQJW8qOT52rzp9wDmR0GDzOepuzr75I,21326
|
|
7
7
|
digichem/config/README,sha256=0y5sxYPAmpD3XNzgJrr-U8xmiQbheC8bz8lvnNmsNtc,180
|
|
8
8
|
digichem/config/__init__.py,sha256=wXnmk1fuNZeHOKz06wBfTUkM8-XuW08F2H8QiHyS8Xs,227
|
|
9
|
-
digichem/config/base.py,sha256=
|
|
9
|
+
digichem/config/base.py,sha256=6K0iQYhxwQEcMdZX_lqxTJ1rrrGLRHU-uugj5D878Jw,25005
|
|
10
10
|
digichem/config/locations.py,sha256=Jlvql0KJrJEIO_2U6BRS5bjHelKjGGIETR9hOuNe0K0,584
|
|
11
11
|
digichem/config/parse.py,sha256=amJx89JXkkEyMMSYr5GvLFnLZO3hWahuZtNlx0F0PhA,2667
|
|
12
12
|
digichem/config/util.py,sha256=i5NgxLPcLx1RM4bArog77hsHxkQmwlqyzJbDtrozBG0,4613
|
|
@@ -17,7 +17,8 @@ digichem/data/batoms/COPYING,sha256=cZepDmXS1dlBlf2hQ8Ez4mYUp1JkXhSISULqFMaU3-Y,
|
|
|
17
17
|
digichem/data/batoms/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
18
18
|
digichem/data/batoms/README,sha256=WqRkTUFuvleDNkwra2vPwuiHYy9YoRNcT82oke4MftM,224
|
|
19
19
|
digichem/data/batoms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
digichem/data/batoms/batoms-renderer.py,sha256=
|
|
20
|
+
digichem/data/batoms/batoms-renderer.py,sha256=7usmsEb1HeyZ4vbyv4HUU6mqWNIFlexARjBZ_rnwDjk,18910
|
|
21
|
+
digichem/data/batoms/batoms_renderer.py,sha256=7usmsEb1HeyZ4vbyv4HUU6mqWNIFlexARjBZ_rnwDjk,18910
|
|
21
22
|
digichem/data/config/digichem.yaml,sha256=UhPTEvVssN2FVNCakkwGxrUeD9hXLVO1urSmGdfDjn4,30360
|
|
22
23
|
digichem/data/tachyon/COPYING.md,sha256=GRiBuwmAHaIlamBpWxTsyn_p04chI28RiRTAT3m8aXg,202
|
|
23
24
|
digichem/data/tachyon/LICENSE,sha256=pZ-1ttB2_3CeqjwekQHX6jlPIeFvX32KbyLFNoUJMhc,1532
|
|
@@ -33,39 +34,40 @@ digichem/exception/__init__.py,sha256=CkTlww2tI3Cam58KcC39qe-5hxNPiNa6hRJGHZQPJq
|
|
|
33
34
|
digichem/exception/base.py,sha256=aL_uEflTcRP-orNL_8RXizMVxXvTztpTDiqNmcVF2UE,4621
|
|
34
35
|
digichem/exception/uncatchable.py,sha256=OXVkRbzsFc_uzQwCnhor3HTsZv4VuuwfZxNyiIIhgx0,2498
|
|
35
36
|
digichem/file/__init__.py,sha256=vcDfoYlL0YbFcCyw-3D4SiGtA-hxkFKUtP30DO-JvqE,62
|
|
36
|
-
digichem/file/base.py,sha256=
|
|
37
|
-
digichem/file/cube.py,sha256=
|
|
37
|
+
digichem/file/base.py,sha256=D9vnQpzVq7459VhH7AwkhIqN2gYQprFC7WkgKZGT0Pc,18025
|
|
38
|
+
digichem/file/cube.py,sha256=C9wKnWkCnE6phI3X9xsWQr8209YgjEXGWGf_Bj_p3BY,20256
|
|
38
39
|
digichem/file/fchk.py,sha256=tWhp0daZPMlYmqkGkidUFwVHTA-8wCUf6Py6CNeT7tk,4035
|
|
39
40
|
digichem/file/prattle.py,sha256=LDayqA7TZVMJKekyl4laHePOCesfBcQ36ul0516OEfo,9927
|
|
40
|
-
digichem/file/types.py,sha256=
|
|
41
|
+
digichem/file/types.py,sha256=rLz88eFIv8uwK1jNEkQ9t9LTLTS38TbIhZ1rWC2SbvQ,3612
|
|
41
42
|
digichem/image/__init__.py,sha256=T9fN41dV0oZ7dT_MES7iYaFdPgzZM5R5hhIvvhlY8U4,133
|
|
42
43
|
digichem/image/base.py,sha256=6LGIYK2zB7lQxFhV5t2ZJPcpNMOqRv-JzrBJEeTF9Wg,5193
|
|
43
44
|
digichem/image/excited_states.py,sha256=1YUa8KYXTvh_Vwl2DSaRwpIh15FtW18KpjLlnD8VTOk,14103
|
|
44
45
|
digichem/image/graph.py,sha256=3wcembS3gcI5Ejq1lv4Sw1g_7s-fubDpiho_85kzkks,10880
|
|
45
46
|
digichem/image/orbitals.py,sha256=UcPnOm3tQOdTegsVm_a7AizVe7OpBCz_4sve6u7jAvA,9705
|
|
46
|
-
digichem/image/render.py,sha256=
|
|
47
|
+
digichem/image/render.py,sha256=fQu9QcuIolzoeMoaQPQo27Z-JEXUCQCWiSVWQgv2iG4,30470
|
|
47
48
|
digichem/image/spectroscopy.py,sha256=wwguBYBwL8VNTJK5rBZbUiwaFHFLIaqBWYR3qbwDpAs,33567
|
|
48
49
|
digichem/image/structure.py,sha256=gxgX5cXA3BaqBh5K7UPcVGWX-yG5kc6Robf5sWT1IYM,4900
|
|
49
|
-
digichem/image/vmd.py,sha256=
|
|
50
|
+
digichem/image/vmd.py,sha256=GGE35qypgBbpadHo1M929czuxM0U4NRICPkltKWEojE,39305
|
|
50
51
|
digichem/input/__init__.py,sha256=SxCeQkUNOalYu9oxhPGHQHX6s5CqBlSVuMUt7n-ywFw,165
|
|
51
52
|
digichem/input/base.py,sha256=9nxut3IlvKSYCjRUzpi7SdlaO_4MU8KWAecV-z3T1jo,3082
|
|
52
|
-
digichem/input/digichem_input.py,sha256=
|
|
53
|
+
digichem/input/digichem_input.py,sha256=GPex3A4KmdsNF9MbDHjiMhu4jo1tv6BjKvHnNDcz2p0,19703
|
|
53
54
|
digichem/input/gaussian.py,sha256=ZwfCA0jgHcY8JVcyyKmnchU-OyQ26-8ynQJdeYtNT7A,5651
|
|
54
55
|
digichem/misc/__init__.py,sha256=gRlflbkXYyKvqeQ2KTnNAdJ00S6Vhmk-tzSVCBSiWgk,162
|
|
55
56
|
digichem/misc/argparse.py,sha256=AG33L7MCi-ftb4XnvndQb4hKcorzJxESAVB0HIZRlcw,1371
|
|
56
57
|
digichem/misc/base.py,sha256=ZaeeLJrRZnF66bhkGdPvhsVGgxzcV_pneESQ1ReDedc,1884
|
|
57
|
-
digichem/misc/io.py,sha256=
|
|
58
|
+
digichem/misc/io.py,sha256=7Oqi7UQLwhCsVHdEN0n7Vubsbzk14fLSkAYXe4obPbQ,11007
|
|
58
59
|
digichem/misc/layered_dict.py,sha256=Psf30UmHVHAE95RnFYiR2f7oaW05CsUhT4FtXhUtQcw,15561
|
|
59
60
|
digichem/misc/text.py,sha256=FVcxf8ctt3D2yGFYgrZk3dpO48f_0aDhHiry_xGirD8,3673
|
|
60
61
|
digichem/misc/time.py,sha256=Z7FWpkb8gqBHVMXdhFiBWn2VwmXuU9uaMxEKsfAH5Kw,2214
|
|
61
|
-
digichem/parse/__init__.py,sha256=
|
|
62
|
-
digichem/parse/base.py,sha256=
|
|
63
|
-
digichem/parse/cclib.py,sha256=
|
|
64
|
-
digichem/parse/dump.py,sha256=
|
|
62
|
+
digichem/parse/__init__.py,sha256=SIAj7do6mXRNuOEkN691Nh-je2YlZ3qL6fxnjsTE6QY,867
|
|
63
|
+
digichem/parse/base.py,sha256=RZOuGCmXk3CyVdK6-lev-DyYWe215JYRVA-SiiXS72E,8757
|
|
64
|
+
digichem/parse/cclib.py,sha256=4j1RCMvEb31Lh9DncYgCbcs-u9gFq_z7RkfYLv9EW4w,9897
|
|
65
|
+
digichem/parse/dump.py,sha256=wd1hW7xjjXNPmmf2t3DgtU8FkcTAqYkKbJYVt2NjPIQ,9567
|
|
65
66
|
digichem/parse/gaussian.py,sha256=8Vs07MnlboZiJDJ41dtfRwE2UBHOiVixY3-mQrcoioc,5251
|
|
66
|
-
digichem/parse/orca.py,sha256=
|
|
67
|
-
digichem/parse/
|
|
68
|
-
digichem/parse/
|
|
67
|
+
digichem/parse/orca.py,sha256=QahMQh-rZphDzyM8Kn6xEbEB9imCWpKUhUmlOxpDio0,4680
|
|
68
|
+
digichem/parse/pyscf.py,sha256=Io13LOxnkSZ1lKFu1tSFzkDZKmFRqDyOVMBesiQIb7o,1197
|
|
69
|
+
digichem/parse/turbomole.py,sha256=WJIjayh0LnuYlJUjDrCkzGcGW1IGUbRgWuKfcVN5LeQ,9249
|
|
70
|
+
digichem/parse/util.py,sha256=z_BS6z0KcecKfv6SBuYKpoCBuVwtsK5EkqGbfJn9fxk,28935
|
|
69
71
|
digichem/result/__init__.py,sha256=FUNL2pc2bP3XNVFRrlyrTppVWEsPRHcThLiVytpsH84,222
|
|
70
72
|
digichem/result/angle.py,sha256=jehU0dRN4nALvUFzIdkh4GGQORq4lgXre8ZfFQMzB94,5043
|
|
71
73
|
digichem/result/atom.py,sha256=KnXtWPvKNYnzMAw3G8USNwnoJzurXFSQmG1_JYwt8pA,27977
|
|
@@ -73,15 +75,15 @@ digichem/result/base.py,sha256=SH4GAZt-6GsHihAUWLUXjnIhhp_jSmpebx2yJQkIr9M,9630
|
|
|
73
75
|
digichem/result/dipole_moment.py,sha256=Pbx9o3j7ZQB5vtZlvt5yhLrvKTXpC69EGlhTXj00HT4,11075
|
|
74
76
|
digichem/result/emission.py,sha256=0OPXNR1ZX9ALpjD0Ie5OkrOHNDDz6FsK3pK_0GyqqLI,19754
|
|
75
77
|
digichem/result/energy.py,sha256=53Dm2kHA-x8KtDY3Wq52cPbpE5E01W1lQTNaLe0goZE,10851
|
|
76
|
-
digichem/result/excited_state.py,sha256=
|
|
78
|
+
digichem/result/excited_state.py,sha256=N41Dm6r4C_C08jmcqiXZZdRoHGE2u9CfjTLNzLo8TAQ,34254
|
|
77
79
|
digichem/result/ground_state.py,sha256=JMRBQ-MC2Ak8Ur-TXGzNkJtSVykkhswHPTOnttZFujE,3790
|
|
78
|
-
digichem/result/metadata.py,sha256=
|
|
80
|
+
digichem/result/metadata.py,sha256=iHyJ0HGtdM-BodVTtE-Iy3_cOk5sYX5j0VufkWSmunA,39225
|
|
79
81
|
digichem/result/multi.py,sha256=IzupKHMcXTf6AReeUCjY9Szy2b4TdOHVtC2Tlb9xg0o,4330
|
|
80
82
|
digichem/result/nmr.py,sha256=u3qXZRrTBvUnfJexrtEHZLIyQ4dq_zFDXwcC2PoEGqQ,47263
|
|
81
83
|
digichem/result/orbital.py,sha256=6BX4GfnLJRj_AZs75FWPLFX6r0z9OL0OSh1v8EOHqws,28271
|
|
82
|
-
digichem/result/result.py,sha256=
|
|
84
|
+
digichem/result/result.py,sha256=Ih7g-ByfRG3VBt0BB4n2Ub367NLjUCCbkmekQatOjr8,9789
|
|
83
85
|
digichem/result/soc.py,sha256=HMtjf7p7AP31AlGO2hrJ1K_dv4-HWZH0YcpJVUVgHxc,9921
|
|
84
|
-
digichem/result/spectroscopy.py,sha256=
|
|
86
|
+
digichem/result/spectroscopy.py,sha256=9VV9xDEhzyF6S75MmI_c6U12U8dB1DsGKSInHAcqqRE,22978
|
|
85
87
|
digichem/result/tdm.py,sha256=YHy3GBir537dqEFoPlGKGZUZ7Mt9Fue3ghZ-j_sZBqc,10778
|
|
86
88
|
digichem/result/vibration.py,sha256=XXigp4ntsEOMjv9jTZNLPCj2obsdb3IMPf5xxHLhZH4,6431
|
|
87
89
|
digichem/result/alignment/AA.py,sha256=957GtXeaioyH1T6cBjK6Sf-W8a_3K9vR5fi8wttkKhk,4627
|
|
@@ -90,22 +92,25 @@ digichem/result/alignment/FAP.py,sha256=so_eTIqdFIBVHinG_17tc4n-CS4A622r4RXndVkO
|
|
|
90
92
|
digichem/result/alignment/__init__.py,sha256=9OLZUCENNfsPb-_BWpRKY1y0YwPTE-Lh2Au30RrExoU,88
|
|
91
93
|
digichem/result/alignment/base.py,sha256=KY_uQxP5NYgU7hOW028FR63xqskf2I4-wnFC_YAVYJM,11811
|
|
92
94
|
digichem/test/__init__.py,sha256=5rcWC-jYpwJf9DZD3RUzsrZtQXGre0oFnaE3xKiZYlY,116
|
|
93
|
-
digichem/test/conftest.py,sha256=
|
|
95
|
+
digichem/test/conftest.py,sha256=hy9geS4NwXOTrHGO-HnDP3hp_eoPGIToODBXBF3Kcuw,282
|
|
94
96
|
digichem/test/test_basis.py,sha256=is1GdrWhmWJdA18fw1lagmbg8VGlX6_-LKOhjTcjHaQ,1720
|
|
95
97
|
digichem/test/test_calculate.py,sha256=Zvon7TlmVLwIvtaXXMmWJrkvljJ9zWZge6zIyjbx_N0,1486
|
|
96
98
|
digichem/test/test_config.py,sha256=JZGOpSAGQ70n4gGW4sCPCLycygtECOKejB9742nmnj0,2323
|
|
97
99
|
digichem/test/test_cube.py,sha256=y1Cr0cz00pwSWT-z-PgUQAzp41Ttsk_Ti_eQXagzO1Q,14110
|
|
98
100
|
digichem/test/test_exception.py,sha256=f-8XVQqq9gfJFpURjOoEfcC4pxieye8ZxvmguoN9QyY,530
|
|
99
101
|
digichem/test/test_file.py,sha256=n2BJ55_AjNY7IGEjHjJJ-OhE4Lgn3pGyyyfnPIduges,3682
|
|
100
|
-
digichem/test/test_image.py,sha256=
|
|
102
|
+
digichem/test/test_image.py,sha256=bGb6xdn4k2VxZlVef0HI2HPrQdxx5XUTMyl97iYzzT8,13598
|
|
101
103
|
digichem/test/test_input.py,sha256=TLGFxsSYGKTUSO5fxjZN2VqzDZFP3AHlbrE2JGmnq8g,1787
|
|
102
|
-
digichem/test/
|
|
104
|
+
digichem/test/test_memory.py,sha256=wKxAOtDm7d9aNbpgdgjacVPCBGdDUKx5f_3OGsGuWR0,582
|
|
105
|
+
digichem/test/test_parsing.py,sha256=c-YV8TGp08P5d2acio_5cP-qXunpyMrs6pnB7MxZ1Ww,6312
|
|
103
106
|
digichem/test/test_prattle.py,sha256=x-CeVX3Gbs5BHGndBGrtseGZwgUm3jamxstFijmKB5w,1033
|
|
104
|
-
digichem/test/test_result.py,sha256=
|
|
107
|
+
digichem/test/test_result.py,sha256=DmaAdSTGV6UoHigiy6P38cT3y4ef57Ji6Ot4m2BZfLs,24327
|
|
105
108
|
digichem/test/test_translate.py,sha256=_3FkYottqHZGxMSTJkbcE8dQXhQlrNlVS0FjMopIwl4,3575
|
|
106
|
-
digichem/test/util.py,sha256=
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
digichem_core-6.
|
|
110
|
-
digichem_core-6.
|
|
111
|
-
digichem_core-6.
|
|
109
|
+
digichem/test/util.py,sha256=p7KgyR9VGPstD7y8FH0onIxgY4YCvSCmbtJ-kJggxeA,8798
|
|
110
|
+
digichem/test/mock/cubegen,sha256=h2HvmW8YbmYDqycnfCJYstZ2yO1uUxErbCWFKgzXaJ8,6781858
|
|
111
|
+
digichem/test/mock/formchk,sha256=KZWhyJtaMXAGX1Xlx7Ikw9gbncOqLrpYkynz9IMYUlY,756867
|
|
112
|
+
digichem_core-6.10.3.dist-info/METADATA,sha256=kKKd8-ojAePA1PtA4225RZLPB0ntS2k8ddAGEQYkJjA,4099
|
|
113
|
+
digichem_core-6.10.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
114
|
+
digichem_core-6.10.3.dist-info/licenses/COPYING.md,sha256=d-yG6IJrlqLkuiuoOFe331YKzMRS05pnmk4e98gu9pQ,900
|
|
115
|
+
digichem_core-6.10.3.dist-info/licenses/LICENSE,sha256=ZLlePQN2WLgdvmIGLEjjHtgIoneUGR2MgE9yjMg1JiY,1457
|
|
116
|
+
digichem_core-6.10.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|