chemparseplot 1.5.4__tar.gz → 1.6.1__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.
Files changed (64) hide show
  1. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/PKG-INFO +3 -1
  2. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/_version.py +2 -2
  3. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/eon/dimer_trajectory.py +4 -5
  4. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/eon/min_trajectory.py +3 -4
  5. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/plot/neb.py +6 -3
  6. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/pyproject.toml +1 -1
  7. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/.gitignore +0 -0
  8. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/LICENSE +0 -0
  9. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/__init__.py +0 -0
  10. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/__init__.py +0 -0
  11. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/chemgp_hdf5.py +0 -0
  12. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/chemgp_jsonl.py +0 -0
  13. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/converter.py +0 -0
  14. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/eon/__init__.py +0 -0
  15. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/eon/gprd.py +0 -0
  16. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/eon/minimization.py +0 -0
  17. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/eon/neb.py +0 -0
  18. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/eon/saddle_search.py +0 -0
  19. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/file_.py +0 -0
  20. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/neb_utils.py +0 -0
  21. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/orca/__init__.py +0 -0
  22. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/orca/geomscan.py +0 -0
  23. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/orca/neb/__init__.py +0 -0
  24. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/orca/neb/interp.py +0 -0
  25. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/orca/neb/opi_parser.py +0 -0
  26. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/patterns.py +0 -0
  27. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/plumed.py +0 -0
  28. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/projection.py +0 -0
  29. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/sella/saddle_search.py +0 -0
  30. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/trajectory/__init__.py +0 -0
  31. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/trajectory/hdf5.py +0 -0
  32. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/parse/trajectory/neb.py +0 -0
  33. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/plot/__init__.py +0 -0
  34. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/plot/chemgp.py +0 -0
  35. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/plot/geomscan.py +0 -0
  36. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/plot/optimization.py +0 -0
  37. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/plot/plumed.py +0 -0
  38. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/plot/structs.py +0 -0
  39. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/plot/theme.py +0 -0
  40. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/units.py +0 -0
  41. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/chemparseplot/util.py +0 -0
  42. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/readme.md +0 -0
  43. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/conftest.py +0 -0
  44. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/orca/test_geomscan.py +0 -0
  45. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/orca/test_interp.py +0 -0
  46. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_chemgp_hdf5.py +0 -0
  47. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_converter.py +0 -0
  48. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_dimer_trajectory.py +0 -0
  49. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_min_trajectory.py +0 -0
  50. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_neb_utils.py +0 -0
  51. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_patterns.py +0 -0
  52. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_plumed.py +0 -0
  53. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_projection.py +0 -0
  54. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_trajectory_hdf5.py +0 -0
  55. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/parse/test_trajectory_neb.py +0 -0
  56. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/plot/__init__.py +0 -0
  57. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/plot/test_chemgp_utils.py +0 -0
  58. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/plot/test_neb_renderers.py +0 -0
  59. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/plot/test_optimization.py +0 -0
  60. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/plot/test_projection_refactor.py +0 -0
  61. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/plot/test_strip_rendering.py +0 -0
  62. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/test_coverage_batch.py +0 -0
  63. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/test_full_coverage.py +0 -0
  64. {chemparseplot-1.5.4 → chemparseplot-1.6.1}/tests/tutorials/test_chemparseplot.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chemparseplot
3
- Version: 1.5.4
3
+ Version: 1.6.1
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.5.4'
22
- __version_tuple__ = version_tuple = (1, 5, 4)
21
+ __version__ = version = '1.6.1'
22
+ __version_tuple__ = version_tuple = (1, 6, 1)
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
- atoms_list = ase_read(str(path), index=":", format="eon")
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 ase_read(str(p), format="eon")
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 = ase_read(str(saddle_path), format="eon") if saddle_path.exists() else None
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
- atoms_list = ase_read(str(path), index=":", format="eon")
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 = ase_read(str(min_con), format="eon")
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
- xg_1d = np.linspace(
841
- s_min - (s_max - s_min) * 0.1, s_max + (s_max - s_min) * 0.1, 150
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