chemparseplot 1.5.4__tar.gz → 1.6.0__tar.gz
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.
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/PKG-INFO +3 -1
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/_version.py +2 -2
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/eon/dimer_trajectory.py +4 -5
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/eon/min_trajectory.py +3 -4
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/plot/neb.py +6 -3
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/pyproject.toml +1 -1
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/.gitignore +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/LICENSE +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/__init__.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/__init__.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/chemgp_hdf5.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/chemgp_jsonl.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/converter.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/eon/__init__.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/eon/gprd.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/eon/minimization.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/eon/neb.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/eon/saddle_search.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/file_.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/neb_utils.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/orca/__init__.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/orca/geomscan.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/orca/neb/__init__.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/orca/neb/interp.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/orca/neb/opi_parser.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/patterns.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/plumed.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/projection.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/sella/saddle_search.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/trajectory/__init__.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/trajectory/hdf5.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/parse/trajectory/neb.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/plot/__init__.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/plot/chemgp.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/plot/geomscan.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/plot/optimization.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/plot/plumed.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/plot/structs.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/plot/theme.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/units.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/chemparseplot/util.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/readme.md +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/conftest.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/orca/test_geomscan.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/orca/test_interp.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_chemgp_hdf5.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_converter.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_dimer_trajectory.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_min_trajectory.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_neb_utils.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_patterns.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_plumed.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_projection.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_trajectory_hdf5.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/parse/test_trajectory_neb.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/plot/__init__.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/plot/test_chemgp_utils.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/plot/test_neb_renderers.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/plot/test_optimization.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/plot/test_projection_refactor.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/plot/test_strip_rendering.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/test_coverage_batch.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/test_full_coverage.py +0 -0
- {chemparseplot-1.5.4 → chemparseplot-1.6.0}/tests/tutorials/test_chemparseplot.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chemparseplot
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.0
|
|
4
4
|
Summary: Parsers and plotting tools for computational chemistry
|
|
5
5
|
Project-URL: Documentation, https://chemparseplot.rgoswami.me
|
|
6
6
|
Project-URL: Issues, https://github.com/HaoZeke/chemparseplot/issues
|
|
@@ -26,6 +26,7 @@ Requires-Dist: cmcrameri>=1.7; extra == 'all'
|
|
|
26
26
|
Requires-Dist: h5py>=3.0; extra == 'all'
|
|
27
27
|
Requires-Dist: matplotlib>=3.8.2; extra == 'all'
|
|
28
28
|
Requires-Dist: polars>=0.20; extra == 'all'
|
|
29
|
+
Requires-Dist: readcon>=0.7.0; extra == 'all'
|
|
29
30
|
Requires-Dist: xyzrender>=0.1.2; extra == 'all'
|
|
30
31
|
Provides-Extra: doc
|
|
31
32
|
Requires-Dist: mdit-py-plugins>=0.3.4; extra == 'doc'
|
|
@@ -44,6 +45,7 @@ Provides-Extra: neb
|
|
|
44
45
|
Requires-Dist: ase>=3.22; extra == 'neb'
|
|
45
46
|
Requires-Dist: h5py>=3.0; extra == 'neb'
|
|
46
47
|
Requires-Dist: polars>=0.20; extra == 'neb'
|
|
48
|
+
Requires-Dist: readcon>=0.7.0; extra == 'neb'
|
|
47
49
|
Provides-Extra: plot
|
|
48
50
|
Requires-Dist: cmcrameri>=1.7; extra == 'plot'
|
|
49
51
|
Requires-Dist: matplotlib>=3.8.2; extra == 'plot'
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.
|
|
22
|
-
__version_tuple__ = version_tuple = (1,
|
|
21
|
+
__version__ = version = '1.6.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 6, 0)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -15,8 +15,8 @@ from pathlib import Path
|
|
|
15
15
|
|
|
16
16
|
import numpy as np
|
|
17
17
|
import polars as pl
|
|
18
|
+
import readcon
|
|
18
19
|
from ase import Atoms
|
|
19
|
-
from ase.io import read as ase_read
|
|
20
20
|
|
|
21
21
|
log = logging.getLogger(__name__)
|
|
22
22
|
|
|
@@ -76,8 +76,7 @@ def parse_climb_con(path: Path) -> list[Atoms]:
|
|
|
76
76
|
List of ASE Atoms objects, one per iteration.
|
|
77
77
|
"""
|
|
78
78
|
# eOn .con files may not have a .con extension for movie files
|
|
79
|
-
|
|
80
|
-
return list(atoms_list)
|
|
79
|
+
return readcon.read_con_as_ase(str(path))
|
|
81
80
|
|
|
82
81
|
|
|
83
82
|
def _find_initial_structure(job_dir: Path) -> Atoms | None:
|
|
@@ -85,7 +84,7 @@ def _find_initial_structure(job_dir: Path) -> Atoms | None:
|
|
|
85
84
|
for name in ("reactant.con", "pos.con"):
|
|
86
85
|
p = job_dir / name
|
|
87
86
|
if p.exists():
|
|
88
|
-
return
|
|
87
|
+
return readcon.read_con_as_ase(str(p))[0]
|
|
89
88
|
return None
|
|
90
89
|
|
|
91
90
|
|
|
@@ -141,7 +140,7 @@ def load_dimer_trajectory(job_dir: Path) -> DimerTrajectoryData:
|
|
|
141
140
|
initial = atoms_list[0]
|
|
142
141
|
|
|
143
142
|
saddle_path = job_dir / "saddle.con"
|
|
144
|
-
saddle =
|
|
143
|
+
saddle = readcon.read_con_as_ase(str(saddle_path))[0] if saddle_path.exists() else None
|
|
145
144
|
|
|
146
145
|
mode = _load_mode_dat(job_dir / "mode.dat")
|
|
147
146
|
|
|
@@ -14,8 +14,8 @@ from dataclasses import dataclass
|
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
|
|
16
16
|
import polars as pl
|
|
17
|
+
import readcon
|
|
17
18
|
from ase import Atoms
|
|
18
|
-
from ase.io import read as ase_read
|
|
19
19
|
|
|
20
20
|
log = logging.getLogger(__name__)
|
|
21
21
|
|
|
@@ -71,8 +71,7 @@ def parse_min_con(path: Path) -> list[Atoms]:
|
|
|
71
71
|
list[Atoms]
|
|
72
72
|
List of ASE Atoms objects, one per iteration.
|
|
73
73
|
"""
|
|
74
|
-
|
|
75
|
-
return list(atoms_list)
|
|
74
|
+
return readcon.read_con_as_ase(str(path))
|
|
76
75
|
|
|
77
76
|
|
|
78
77
|
def load_min_trajectory(
|
|
@@ -121,7 +120,7 @@ def load_min_trajectory(
|
|
|
121
120
|
# Final structure: prefer explicit min.con, fall back to last movie frame
|
|
122
121
|
min_con = job_dir / "min.con"
|
|
123
122
|
if min_con.exists():
|
|
124
|
-
final =
|
|
123
|
+
final = readcon.read_con_as_ase(str(min_con))[0]
|
|
125
124
|
else:
|
|
126
125
|
final = atoms_list[-1]
|
|
127
126
|
|
|
@@ -837,12 +837,15 @@ def plot_landscape_surface(
|
|
|
837
837
|
s_min, s_max = min(s_min, extra_s.min()), max(s_max, extra_s.max())
|
|
838
838
|
d_min, d_max = min(d_min, extra_d.min()), max(d_max, extra_d.max())
|
|
839
839
|
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
)
|
|
840
|
+
s_pad = (s_max - s_min) * 0.1
|
|
841
|
+
xg_1d = np.linspace(s_min - s_pad, s_max + s_pad, 150)
|
|
843
842
|
# Y-grid centered on 0, covering at least the data range
|
|
844
843
|
x_span = xg_1d.max() - xg_1d.min()
|
|
845
844
|
y_half = max(x_span / 2, abs(d_data.max()), abs(d_data.min())) * 1.1
|
|
845
|
+
# If extra points pushed Y much larger, expand X to match
|
|
846
|
+
if 2 * y_half > x_span:
|
|
847
|
+
x_center = (s_min + s_max) / 2
|
|
848
|
+
xg_1d = np.linspace(x_center - y_half, x_center + y_half, 150)
|
|
846
849
|
yg_1d = np.linspace(-y_half, y_half, 150)
|
|
847
850
|
|
|
848
851
|
xg, yg = np.meshgrid(xg_1d, yg_1d)
|
|
@@ -43,7 +43,7 @@ doc = [
|
|
|
43
43
|
"sphinxcontrib-apidoc>=0.4",
|
|
44
44
|
]
|
|
45
45
|
plot = ["cmcrameri>=1.7", "matplotlib>=3.8.2"]
|
|
46
|
-
neb = ["ase>=3.22", "h5py>=3.0", "polars>=0.20"]
|
|
46
|
+
neb = ["ase>=3.22", "h5py>=3.0", "polars>=0.20", "readcon>=0.7.0"]
|
|
47
47
|
xyzrender = ["xyzrender>=0.1.2"]
|
|
48
48
|
all = ["chemparseplot[plot,neb,xyzrender]"]
|
|
49
49
|
test = ["pytest>=7.4.3", "pytest-cov>=4.1.0"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|