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.
Files changed (37) hide show
  1. digichem/__init__.py +2 -2
  2. digichem/config/base.py +6 -4
  3. digichem/data/batoms/batoms-renderer.py +190 -50
  4. digichem/data/batoms/batoms_renderer.py +500 -0
  5. digichem/file/base.py +14 -0
  6. digichem/file/cube.py +185 -16
  7. digichem/file/types.py +1 -0
  8. digichem/image/render.py +149 -48
  9. digichem/image/vmd.py +7 -2
  10. digichem/input/digichem_input.py +2 -2
  11. digichem/memory.py +10 -0
  12. digichem/misc/io.py +95 -1
  13. digichem/parse/__init__.py +6 -1
  14. digichem/parse/base.py +85 -54
  15. digichem/parse/cclib.py +139 -13
  16. digichem/parse/dump.py +3 -3
  17. digichem/parse/orca.py +1 -0
  18. digichem/parse/pyscf.py +35 -0
  19. digichem/parse/turbomole.py +3 -3
  20. digichem/parse/util.py +146 -65
  21. digichem/result/excited_state.py +17 -11
  22. digichem/result/metadata.py +307 -3
  23. digichem/result/result.py +3 -0
  24. digichem/result/spectroscopy.py +42 -0
  25. digichem/test/conftest.py +5 -0
  26. digichem/test/mock/cubegen +87172 -0
  27. digichem/test/mock/formchk +9456 -0
  28. digichem/test/test_image.py +54 -42
  29. digichem/test/test_memory.py +33 -0
  30. digichem/test/test_parsing.py +68 -1
  31. digichem/test/test_result.py +1 -1
  32. digichem/test/util.py +4 -1
  33. {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/METADATA +4 -3
  34. {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/RECORD +37 -32
  35. {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/WHEEL +1 -1
  36. {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/licenses/COPYING.md +0 -0
  37. {digichem_core-6.1.0.dist-info → digichem_core-6.10.3.dist-info}/licenses/LICENSE +0 -0
@@ -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
- from digichem.image.vmd import Structure_image_maker, Orbital_image_maker, Density_image_maker, \
12
- Combined_orbital_image_maker, Permanent_dipole_image_maker, Transition_dipole_image_maker
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("vmd")
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
- def test_density_image(cube_file, tmp_path, digichem_options):
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
- maker = Density_image_maker.from_options(
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
- def test_spin_density_image(cube_file, tmp_path, digichem_options):
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 = Density_image_maker.from_options(
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
- def test_combined_orbital_image(homo_cube, lumo_cube, tmp_path, digichem_options):
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 = Combined_orbital_image_maker.from_options(
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
- def test_unrestricted_orbital_image(cube_file, tmp_path, digichem_options):
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 = Orbital_image_maker.from_options(
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
- def test_pdm_image(result_path, cube_file, tmp_path, digichem_options):
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 = Permanent_dipole_image_maker.from_options(
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
- def test_tdm_image(result_path, cube_file, tmp_path, digichem_options):
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 = Transition_dipole_image_maker.from_options(
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
- def test_nto_image(cube_file, tmp_path, digichem_options):
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 = Orbital_image_maker.from_options(
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
@@ -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()
@@ -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.1705)
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.3
1
+ Metadata-Version: 2.4
2
2
  Name: digichem-core
3
- Version: 6.1.0
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 2024, you may not use them in any way (although you are welcome to look at them).
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=rZhxVHshLofYYXZTPgc8Y4rCNrpcbPVn8RKtn1Dut0o,2287
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=jfeb1AYMOdm22vSKMHf01IDzRJCCoDnowh_OB38VVNM,5375
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=dd6ApHjM9UbkQ2wTDeMHaMwQkHlqvf35mdnb5HFLmcY,24585
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=BPgxBH4BlBaKzH6UYU933hR60YNGWr5sT-a4FXXiOpw,14168
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=UZ3CjXEEBOzIqnnnG90wWicGQoIAYgo7GJsWohuSYPc,17342
37
- digichem/file/cube.py,sha256=kvNnyKHs0c0L-7LnYggvil-ciDEwNWAhOZT2-KgyP5s,13759
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=PoaCBL1fmyufduWSgBkIwnZhGPVTc06ru5YFvuvk4Ug,3533
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=cL9UUHLNHbon7ayp_m0bNFwFXgW-MS9gOldh2r2oq28,26664
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=OqZJO08dpZWdqVav2-1GNxvxRmw6RdpF-jCvGS6wUpQ,39011
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=dHpapTmDbAk93ve7UcgmiXZzC2PShhcYMJ9BBQF1ces,19664
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=7rBn7JL3NavlHoyQ158fdH-DjXN7a8Rv0ddHeEucwT0,8098
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=DRndmw3jzaN628wlcVxCHODb5vfJWfLoDEYFa2dD0hY,610
62
- digichem/parse/base.py,sha256=pcwY3INemv7taplzAm2HkwYaQEIvyVVCaeXFgGraa1w,7959
63
- digichem/parse/cclib.py,sha256=4-xRCUWj3kRs0MFmoHagbH_6veReKvyFwxNMAdIv0nA,5032
64
- digichem/parse/dump.py,sha256=SeQNvtWXG2ntiXz0d2W7Ust_P5Xmf0ft3yZ9pRFT3jQ,9552
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=rJ5Rln8mBB7XQZURf9ocwNg4DS1DDA8CaA22CKsugMg,4613
67
- digichem/parse/turbomole.py,sha256=Tvwp-o-XBG_FEFXpakfOFNi2kUrCbEL0aVF5mCSX6Xw,9198
68
- digichem/parse/util.py,sha256=tcjGVRDESBXEVn680wr3VdqLWj_WoinqXgDFFzBJU-o,25494
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=gBPQsOxfdflyq8zJLKKyGgux01qS4O16GeW-Yjv8u_M,33930
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=ZfmXzXL6WFSFxe62TYlF5GEwzN3vWhD5iWorC3eZLV8,26890
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=guhk_7oddxP2TPfSjalWBawp6Bde117m4YXt8LxpzAo,9712
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=l36gpxLef9S-Gns9zf09-HQBALjnQEp0yEldztXw-1c,21328
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=5_KcDWY_ZaSYgib-xlA4mvefTqjbAveipcm6ePtwQcw,124
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=x7ybEIeZg0E8ZQdkSzdy1cNWymYie6gWoTR8Q3ebcEQ,11516
102
+ digichem/test/test_image.py,sha256=bGb6xdn4k2VxZlVef0HI2HPrQdxx5XUTMyl97iYzzT8,13598
101
103
  digichem/test/test_input.py,sha256=TLGFxsSYGKTUSO5fxjZN2VqzDZFP3AHlbrE2JGmnq8g,1787
102
- digichem/test/test_parsing.py,sha256=OAK3QJfHEehhhLF4Z75o5Fj-hKakfhrXtt5PRPnDY6c,3197
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=BPo9-weVCBL_0dgcETDdWkQ20msCSDTStZ7tPB1t55o,24328
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=R4lE1pg0SzpTbJIQnFh_ffeNb9jAnfFIhp-6F-_fX7Q,8576
107
- digichem_core-6.1.0.dist-info/METADATA,sha256=LnROFyuvQzGSNsT564mtd7xyCcONKXBDMUIuyFwGc48,4060
108
- digichem_core-6.1.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
109
- digichem_core-6.1.0.dist-info/licenses/COPYING.md,sha256=d-yG6IJrlqLkuiuoOFe331YKzMRS05pnmk4e98gu9pQ,900
110
- digichem_core-6.1.0.dist-info/licenses/LICENSE,sha256=ZLlePQN2WLgdvmIGLEjjHtgIoneUGR2MgE9yjMg1JiY,1457
111
- digichem_core-6.1.0.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.25.0
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any