chemparseplot 1.9.2__tar.gz → 1.9.4__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 (85) hide show
  1. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/PKG-INFO +1 -1
  2. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/_version.py +2 -2
  3. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/plot/neb.py +85 -11
  4. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/.gitignore +0 -0
  5. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/LICENSE +0 -0
  6. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/__init__.py +0 -0
  7. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/__init__.py +0 -0
  8. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/chemgp_hdf5.py +0 -0
  9. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/chemgp_jsonl.py +0 -0
  10. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/converter.py +0 -0
  11. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/__init__.py +0 -0
  12. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/_trajectory_common.py +0 -0
  13. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/con_io.py +0 -0
  14. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/dimer_trajectory.py +0 -0
  15. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/gprd.py +0 -0
  16. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/min_trajectory.py +0 -0
  17. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/minimization.py +0 -0
  18. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/neb.py +0 -0
  19. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/saddle_search.py +0 -0
  20. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/eon/stitch.py +0 -0
  21. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/file_.py +0 -0
  22. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/neb_utils.py +0 -0
  23. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/orca/__init__.py +0 -0
  24. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/orca/geomscan.py +0 -0
  25. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/orca/neb/__init__.py +0 -0
  26. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/orca/neb/interp.py +0 -0
  27. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/orca/neb/opi_parser.py +0 -0
  28. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/patterns.py +0 -0
  29. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/plumed.py +0 -0
  30. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/projection.py +0 -0
  31. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/sella/saddle_search.py +0 -0
  32. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/trajectory/__init__.py +0 -0
  33. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/trajectory/hdf5.py +0 -0
  34. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/trajectory/neb.py +0 -0
  35. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/parse/types.py +0 -0
  36. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/plot/__init__.py +0 -0
  37. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/plot/chemgp.py +0 -0
  38. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/plot/geomscan.py +0 -0
  39. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/plot/optimization.py +0 -0
  40. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/plot/plumed.py +0 -0
  41. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/plot/structs.py +0 -0
  42. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/plot/theme.py +0 -0
  43. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/units.py +0 -0
  44. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/chemparseplot/util.py +0 -0
  45. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/pyproject.toml +0 -0
  46. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/readme.md +0 -0
  47. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/__init__.py +0 -0
  48. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/_optional_imports.py +0 -0
  49. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/conftest.py +0 -0
  50. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/__init__.py +0 -0
  51. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/_con_fixtures.py +0 -0
  52. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/orca/test_geomscan.py +0 -0
  53. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/orca/test_interp.py +0 -0
  54. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_chemgp_hdf5.py +0 -0
  55. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_chemgp_jsonl_types.py +0 -0
  56. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_con_io.py +0 -0
  57. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_converter.py +0 -0
  58. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_dimer_trajectory.py +0 -0
  59. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_eon_neb_types.py +0 -0
  60. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_eon_trajectory_common.py +0 -0
  61. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_min_trajectory.py +0 -0
  62. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_minimization_result.py +0 -0
  63. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_neb_stitch.py +0 -0
  64. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_neb_utils.py +0 -0
  65. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_parser_types.py +0 -0
  66. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_patterns.py +0 -0
  67. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_plumed.py +0 -0
  68. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_projection.py +0 -0
  69. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_readcon_boundary.py +0 -0
  70. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_saddle_results.py +0 -0
  71. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_sella_saddle.py +0 -0
  72. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_trajectory_hdf5.py +0 -0
  73. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/parse/test_trajectory_neb.py +0 -0
  74. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/__init__.py +0 -0
  75. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/test_chemgp_utils.py +0 -0
  76. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/test_neb_helpers.py +0 -0
  77. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/test_neb_renderers.py +0 -0
  78. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/test_optimization.py +0 -0
  79. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/test_orca_neb_payload.py +0 -0
  80. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/test_projection_refactor.py +0 -0
  81. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/test_strip_rendering.py +0 -0
  82. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/plot/test_structs_units.py +0 -0
  83. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/test_coverage_batch.py +0 -0
  84. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/test_full_coverage.py +0 -0
  85. {chemparseplot-1.9.2 → chemparseplot-1.9.4}/tests/tutorials/test_chemparseplot.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chemparseplot
3
- Version: 1.9.2
3
+ Version: 1.9.4
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
@@ -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.9.2'
22
- __version_tuple__ = version_tuple = (1, 9, 2)
21
+ __version__ = version = '1.9.4'
22
+ __version_tuple__ = version_tuple = (1, 9, 4)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1362,8 +1362,12 @@ def plot_landscape_path_overlay(
1362
1362
  )
1363
1363
 
1364
1364
  cb = ax.figure.colorbar(
1365
- plt.cm.ScalarMappable(norm=norm, cmap=colormap), ax=ax, label=z_label
1365
+ plt.cm.ScalarMappable(norm=norm, cmap=colormap),
1366
+ ax=ax,
1367
+ fraction=0.046,
1368
+ pad=0.02,
1366
1369
  )
1370
+ cb.set_label(z_label, rotation=270, labelpad=16)
1367
1371
  return cb
1368
1372
 
1369
1373
 
@@ -1577,18 +1581,86 @@ def landscape_projection_basis(global_basis, final_r, final_p):
1577
1581
  return compute_projection_basis(final_r, final_p)
1578
1582
 
1579
1583
 
1580
- def landscape_half_span(x_limits, final_r, final_p, additional_atoms_data, global_basis):
1581
- """Expand the symmetric landscape half-span to keep extra markers visible."""
1584
+ def landscape_half_span(
1585
+ x_limits,
1586
+ final_r,
1587
+ final_p,
1588
+ additional_atoms_data,
1589
+ global_basis,
1590
+ *,
1591
+ path_pad: float = 1.15,
1592
+ min_half: float = 0.02,
1593
+ ):
1594
+ """Symmetric |d| half-span from the path (and optional overlays), not s/2.
1582
1595
 
1583
- half_span = (x_limits[1] - x_limits[0]) / 2
1584
- if not additional_atoms_data:
1585
- return half_span
1596
+ Using the reaction-progress half-width as the default forced a near-square
1597
+ frame and large empty bands above/below paths that stay near ``d=0``.
1598
+ """
1586
1599
 
1587
1600
  basis = landscape_projection_basis(global_basis, final_r, final_p)
1588
- for overlay in additional_atoms_data:
1589
- _, add_d = project_to_sd(np.array([overlay.r]), np.array([overlay.p]), basis)
1590
- half_span = max(half_span, abs(float(add_d[0])) * 1.15)
1591
- return half_span
1601
+ _s, _d = project_to_sd(np.asarray(final_r), np.asarray(final_p), basis)
1602
+ half_span = max(abs(float(_d.max())), abs(float(_d.min())), min_half) * path_pad
1603
+ for overlay in additional_atoms_data or []:
1604
+ _, add_d = project_to_sd(
1605
+ np.array([overlay.r]), np.array([overlay.p]), basis
1606
+ )
1607
+ half_span = max(half_span, abs(float(add_d[0])) * path_pad)
1608
+ # Tiny floor only (absolute), never a fraction of s — that reintroduced the
1609
+ # empty top/bottom bands on near-linear paths.
1610
+ del x_limits # reserved for future asymmetric s handling
1611
+ return max(half_span, min_half)
1612
+
1613
+
1614
+ def mark_saddle_point(
1615
+ ax,
1616
+ x,
1617
+ y,
1618
+ *,
1619
+ label: str = "SP",
1620
+ font_size: float = 12.0,
1621
+ vline: bool = False,
1622
+ annotate: bool = True,
1623
+ ):
1624
+ """Draw a high-contrast saddle marker (gold star) on a profile or landscape."""
1625
+
1626
+ ax.scatter(
1627
+ float(x),
1628
+ float(y),
1629
+ marker="*",
1630
+ s=max(280, int(font_size**2 * 3.2)),
1631
+ c="#FFD700",
1632
+ edgecolors="black",
1633
+ linewidths=1.8,
1634
+ zorder=100,
1635
+ label=label,
1636
+ )
1637
+ if vline:
1638
+ ax.axvline(
1639
+ float(x),
1640
+ color="black",
1641
+ linestyle="--",
1642
+ linewidth=1.4,
1643
+ alpha=0.75,
1644
+ zorder=50,
1645
+ )
1646
+ if annotate:
1647
+ ax.annotate(
1648
+ label,
1649
+ xy=(float(x), float(y)),
1650
+ xytext=(10, 14),
1651
+ textcoords="offset points",
1652
+ fontsize=int(font_size * 1.05),
1653
+ fontweight="bold",
1654
+ color="black",
1655
+ zorder=101,
1656
+ bbox={
1657
+ "boxstyle": "round,pad=0.2",
1658
+ "facecolor": "white",
1659
+ "edgecolor": "black",
1660
+ "linewidth": 0.8,
1661
+ "alpha": 0.92,
1662
+ },
1663
+ )
1592
1664
 
1593
1665
 
1594
1666
  def save_plot(output_file, dpi, *, has_strip):
@@ -1603,7 +1675,9 @@ def save_plot(output_file, dpi, *, has_strip):
1603
1675
  transparent=False,
1604
1676
  dpi=dpi,
1605
1677
  bbox_inches="tight",
1606
- pad_inches=0.12,
1678
+ # Enough pad for vertical axis labels / colorbar titles on equal-aspect
1679
+ # (s,d) landscapes; still crops large empty canvas from the figure.
1680
+ pad_inches=0.25,
1607
1681
  )
1608
1682
 
1609
1683
 
File without changes
File without changes
File without changes