chemparseplot 1.9.4__tar.gz → 1.9.6__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.4 → chemparseplot-1.9.6}/PKG-INFO +1 -1
  2. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/_version.py +2 -2
  3. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/plot/neb.py +20 -9
  4. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/.gitignore +0 -0
  5. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/LICENSE +0 -0
  6. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/__init__.py +0 -0
  7. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/__init__.py +0 -0
  8. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/chemgp_hdf5.py +0 -0
  9. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/chemgp_jsonl.py +0 -0
  10. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/converter.py +0 -0
  11. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/__init__.py +0 -0
  12. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/_trajectory_common.py +0 -0
  13. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/con_io.py +0 -0
  14. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/dimer_trajectory.py +0 -0
  15. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/gprd.py +0 -0
  16. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/min_trajectory.py +0 -0
  17. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/minimization.py +0 -0
  18. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/neb.py +0 -0
  19. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/saddle_search.py +0 -0
  20. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/eon/stitch.py +0 -0
  21. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/file_.py +0 -0
  22. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/neb_utils.py +0 -0
  23. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/orca/__init__.py +0 -0
  24. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/orca/geomscan.py +0 -0
  25. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/orca/neb/__init__.py +0 -0
  26. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/orca/neb/interp.py +0 -0
  27. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/orca/neb/opi_parser.py +0 -0
  28. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/patterns.py +0 -0
  29. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/plumed.py +0 -0
  30. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/projection.py +0 -0
  31. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/sella/saddle_search.py +0 -0
  32. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/trajectory/__init__.py +0 -0
  33. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/trajectory/hdf5.py +0 -0
  34. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/trajectory/neb.py +0 -0
  35. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/parse/types.py +0 -0
  36. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/plot/__init__.py +0 -0
  37. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/plot/chemgp.py +0 -0
  38. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/plot/geomscan.py +0 -0
  39. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/plot/optimization.py +0 -0
  40. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/plot/plumed.py +0 -0
  41. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/plot/structs.py +0 -0
  42. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/plot/theme.py +0 -0
  43. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/units.py +0 -0
  44. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/chemparseplot/util.py +0 -0
  45. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/pyproject.toml +0 -0
  46. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/readme.md +0 -0
  47. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/__init__.py +0 -0
  48. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/_optional_imports.py +0 -0
  49. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/conftest.py +0 -0
  50. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/__init__.py +0 -0
  51. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/_con_fixtures.py +0 -0
  52. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/orca/test_geomscan.py +0 -0
  53. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/orca/test_interp.py +0 -0
  54. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_chemgp_hdf5.py +0 -0
  55. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_chemgp_jsonl_types.py +0 -0
  56. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_con_io.py +0 -0
  57. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_converter.py +0 -0
  58. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_dimer_trajectory.py +0 -0
  59. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_eon_neb_types.py +0 -0
  60. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_eon_trajectory_common.py +0 -0
  61. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_min_trajectory.py +0 -0
  62. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_minimization_result.py +0 -0
  63. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_neb_stitch.py +0 -0
  64. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_neb_utils.py +0 -0
  65. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_parser_types.py +0 -0
  66. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_patterns.py +0 -0
  67. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_plumed.py +0 -0
  68. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_projection.py +0 -0
  69. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_readcon_boundary.py +0 -0
  70. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_saddle_results.py +0 -0
  71. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_sella_saddle.py +0 -0
  72. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_trajectory_hdf5.py +0 -0
  73. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/parse/test_trajectory_neb.py +0 -0
  74. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/__init__.py +0 -0
  75. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/test_chemgp_utils.py +0 -0
  76. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/test_neb_helpers.py +0 -0
  77. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/test_neb_renderers.py +0 -0
  78. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/test_optimization.py +0 -0
  79. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/test_orca_neb_payload.py +0 -0
  80. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/test_projection_refactor.py +0 -0
  81. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/test_strip_rendering.py +0 -0
  82. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/plot/test_structs_units.py +0 -0
  83. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/test_coverage_batch.py +0 -0
  84. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/tests/test_full_coverage.py +0 -0
  85. {chemparseplot-1.9.4 → chemparseplot-1.9.6}/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.4
3
+ Version: 1.9.6
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.4'
22
- __version_tuple__ = version_tuple = (1, 9, 4)
21
+ __version__ = version = '1.9.6'
22
+ __version_tuple__ = version_tuple = (1, 9, 6)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -546,6 +546,7 @@ def plot_structure_strip(
546
546
  perspective_tilt=0.0,
547
547
  max_display_height_px: float | None = None,
548
548
  width_fill_fraction=0.82,
549
+ prefer_single_row: bool = True,
549
550
  ) -> Any:
550
551
  """Renders a horizontal gallery of atomic structures.
551
552
 
@@ -562,6 +563,10 @@ def plot_structure_strip(
562
563
  Color for divider lines.
563
564
  divider_style : str
564
565
  Linestyle for divider lines (e.g. ``"--"``, ``"-"``, ``":"``).
566
+ prefer_single_row : bool
567
+ If True (default), pack up to 16 structures in one row. If False,
568
+ honour ``max_cols`` so e.g. 12 images with ``max_cols=6`` become two
569
+ rows of larger molecules.
565
570
 
566
571
  ```{versionadded} 0.1.0
567
572
  ```
@@ -584,9 +589,12 @@ def plot_structure_strip(
584
589
 
585
590
  ax.axis("off")
586
591
  n_plot = len(atoms_list)
587
- # Prefer a single row when everything fits; multi-row with a shared label
588
- # baseline previously stacked numbers on top of each other.
589
- effective_max_cols = max(max_cols, n_plot) if n_plot <= 16 else max_cols
592
+ # Single-row packing is optional: landscape strips with many images often
593
+ # want max_cols=6 → two rows of larger structures.
594
+ if prefer_single_row and n_plot <= 16:
595
+ effective_max_cols = max(max_cols, n_plot)
596
+ else:
597
+ effective_max_cols = max(1, int(max_cols))
590
598
  n_cols = min(n_plot, effective_max_cols)
591
599
  n_rows = (n_plot + effective_max_cols - 1) // effective_max_cols
592
600
 
@@ -1590,11 +1598,14 @@ def landscape_half_span(
1590
1598
  *,
1591
1599
  path_pad: float = 1.15,
1592
1600
  min_half: float = 0.02,
1601
+ equal_metric: bool = True,
1593
1602
  ):
1594
- """Symmetric |d| half-span from the path (and optional overlays), not s/2.
1603
+ """Symmetric |d| half-span for a projected (s, d) landscape.
1595
1604
 
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``.
1605
+ With ``equal_metric=True`` (default), the half-span is at least half the
1606
+ *s* window so that ``Δs = Δd`` and ``set_aspect('equal')`` yields a square
1607
+ panel where 1 Å of progress matches 1 Å of orthogonal deviation (same RMSD
1608
+ metric). Path/overlay markers still expand the span when they exceed that.
1598
1609
  """
1599
1610
 
1600
1611
  basis = landscape_projection_basis(global_basis, final_r, final_p)
@@ -1605,9 +1616,9 @@ def landscape_half_span(
1605
1616
  np.array([overlay.r]), np.array([overlay.p]), basis
1606
1617
  )
1607
1618
  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
1619
+ if equal_metric and x_limits is not None:
1620
+ s_half = 0.5 * max(float(x_limits[1] - x_limits[0]), 1e-9)
1621
+ half_span = max(half_span, s_half)
1611
1622
  return max(half_span, min_half)
1612
1623
 
1613
1624
 
File without changes
File without changes
File without changes