chemparseplot 1.9.9__tar.gz → 1.9.11__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.9.9 → chemparseplot-1.9.11}/PKG-INFO +1 -1
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/_version.py +2 -2
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/plot/neb.py +46 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/plot/optimization.py +10 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_surface_auto_thin.py +73 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/.gitignore +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/LICENSE +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/api.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/chemgp_hdf5.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/chemgp_jsonl.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/converter.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/_trajectory_common.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/con_io.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/dimer_trajectory.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/gprd.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/min_trajectory.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/minimization.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/neb.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/saddle_search.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/eon/stitch.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/file_.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/grammar/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/grammar/_deps.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/grammar/orca_text.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/grammar/xyz.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/neb_utils.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/orca/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/orca/_opi.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/orca/geomscan.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/orca/neb/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/orca/neb/interp.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/orca/neb/opi_parser.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/patterns.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/plumed.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/projection.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/sella/saddle_search.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/trajectory/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/trajectory/hdf5.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/trajectory/neb.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/parse/types.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/plot/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/plot/chemgp.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/plot/geomscan.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/plot/plumed.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/plot/structs.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/plot/theme.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/units.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/chemparseplot/util.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/pyproject.toml +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/readme.md +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/_optional_imports.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/conftest.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/fixtures/h2mol.xyz +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/fixtures/orca_energy_coords_snippet.out +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/fixtures_geomscan_snippet.txt +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/_con_fixtures.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/grammar/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/grammar/test_grammar_deps.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/grammar/test_orca_text_grammar.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/grammar/test_xyz_grammar.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/orca/test_geomscan.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/orca/test_interp.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_chemgp_hdf5.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_chemgp_jsonl_types.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_con_io.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_converter.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_dimer_trajectory.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_eon_neb_types.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_eon_trajectory_common.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_min_trajectory.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_minimization_result.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_neb_stitch.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_neb_utils.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_orca_public_api.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_parser_types.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_patterns.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_plumed.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_projection.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_readcon_boundary.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_saddle_results.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_sella_saddle.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_trajectory_hdf5.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/parse/test_trajectory_neb.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/__init__.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_chemgp_utils.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_neb_helpers.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_neb_renderers.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_optimization.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_orca_neb_payload.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_projection_refactor.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_strip_rendering.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/plot/test_structs_units.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/test_coverage_batch.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/test_full_coverage.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/tests/test_public_api.py +0 -0
- {chemparseplot-1.9.9 → chemparseplot-1.9.11}/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.
|
|
3
|
+
Version: 1.9.11
|
|
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.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 9,
|
|
21
|
+
__version__ = version = '1.9.11'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 9, 11)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -988,6 +988,36 @@ def surface_fit_indices(n: int, max_points: int) -> np.ndarray:
|
|
|
988
988
|
return idx
|
|
989
989
|
|
|
990
990
|
|
|
991
|
+
@dataclass(frozen=True, slots=True)
|
|
992
|
+
class SurfaceFitConfig:
|
|
993
|
+
"""Declarative surface-fit knobs (TOML-friendly mapping).
|
|
994
|
+
|
|
995
|
+
Prefer this over growing positional/flag lists. Key names match
|
|
996
|
+
rgpycrumbs eOn plot TOML (``[shared]`` / ``[min]`` / ``[neb]``)::
|
|
997
|
+
|
|
998
|
+
auto_thin = false
|
|
999
|
+
max_surface_points = 64
|
|
1000
|
+
|
|
1001
|
+
Defaults keep historical behaviour (no thinning).
|
|
1002
|
+
|
|
1003
|
+
```{versionadded} 1.9.10
|
|
1004
|
+
```
|
|
1005
|
+
"""
|
|
1006
|
+
|
|
1007
|
+
auto_thin: bool = False
|
|
1008
|
+
max_surface_points: int = 64
|
|
1009
|
+
|
|
1010
|
+
@classmethod
|
|
1011
|
+
def from_mapping(cls, data: Mapping[str, Any] | None) -> SurfaceFitConfig:
|
|
1012
|
+
"""Build from a TOML table or plain dict (unknown keys ignored)."""
|
|
1013
|
+
if not data:
|
|
1014
|
+
return cls()
|
|
1015
|
+
return cls(
|
|
1016
|
+
auto_thin=bool(data.get("auto_thin", False)),
|
|
1017
|
+
max_surface_points=int(data.get("max_surface_points", 64)),
|
|
1018
|
+
)
|
|
1019
|
+
|
|
1020
|
+
|
|
991
1021
|
def plot_landscape_surface(
|
|
992
1022
|
ax,
|
|
993
1023
|
rmsd_r,
|
|
@@ -1009,6 +1039,7 @@ def plot_landscape_surface(
|
|
|
1009
1039
|
basis=None,
|
|
1010
1040
|
auto_thin: bool = False, # noqa: FBT001, FBT002
|
|
1011
1041
|
max_surface_points: int = 64,
|
|
1042
|
+
surface_fit: SurfaceFitConfig | Mapping[str, Any] | None = None,
|
|
1012
1043
|
) -> Any:
|
|
1013
1044
|
"""Plot the 2D landscape surface using reaction valley projection.
|
|
1014
1045
|
|
|
@@ -1035,6 +1066,9 @@ def plot_landscape_surface(
|
|
|
1035
1066
|
opt in (dense eOn min movies can otherwise yield non-finite grids).
|
|
1036
1067
|
max_surface_points : int, default 64
|
|
1037
1068
|
Cap on fit observations when ``auto_thin`` is True.
|
|
1069
|
+
surface_fit : SurfaceFitConfig or mapping, optional
|
|
1070
|
+
TOML-friendly config object. When given, overrides *auto_thin* and
|
|
1071
|
+
*max_surface_points* (prefer this over ad-hoc kwargs).
|
|
1038
1072
|
|
|
1039
1073
|
```{versionadded} 0.1.0
|
|
1040
1074
|
```
|
|
@@ -1046,6 +1080,10 @@ def plot_landscape_surface(
|
|
|
1046
1080
|
```{versionadded} 1.9.9
|
|
1047
1081
|
Added *auto_thin* and *max_surface_points*.
|
|
1048
1082
|
```
|
|
1083
|
+
|
|
1084
|
+
```{versionadded} 1.9.10
|
|
1085
|
+
Added *surface_fit* (:class:`SurfaceFitConfig` / mapping).
|
|
1086
|
+
```
|
|
1049
1087
|
"""
|
|
1050
1088
|
from rgpycrumbs.surfaces import (
|
|
1051
1089
|
NYSTROM_N_INDUCING_DEFAULT,
|
|
@@ -1054,6 +1092,14 @@ def plot_landscape_surface(
|
|
|
1054
1092
|
nystrom_paths_needed,
|
|
1055
1093
|
)
|
|
1056
1094
|
|
|
1095
|
+
if surface_fit is not None:
|
|
1096
|
+
if isinstance(surface_fit, SurfaceFitConfig):
|
|
1097
|
+
fit_cfg = surface_fit
|
|
1098
|
+
else:
|
|
1099
|
+
fit_cfg = SurfaceFitConfig.from_mapping(surface_fit)
|
|
1100
|
+
auto_thin = fit_cfg.auto_thin
|
|
1101
|
+
max_surface_points = fit_cfg.max_surface_points
|
|
1102
|
+
|
|
1057
1103
|
rmsd_r = np.asarray(rmsd_r, dtype=float)
|
|
1058
1104
|
rmsd_p = np.asarray(rmsd_p, dtype=float)
|
|
1059
1105
|
z_data = np.asarray(z_data, dtype=float)
|
|
@@ -352,6 +352,7 @@ def render_single_ended_landscape(
|
|
|
352
352
|
perspective_tilt: float = 0.0,
|
|
353
353
|
auto_thin: bool = False,
|
|
354
354
|
max_surface_points: int = 64,
|
|
355
|
+
surface_fit: Any | None = None,
|
|
355
356
|
) -> None:
|
|
356
357
|
"""Full single-ended landscape pipeline shared by min/saddle CLIs.
|
|
357
358
|
|
|
@@ -368,6 +369,10 @@ def render_single_ended_landscape(
|
|
|
368
369
|
(default False: opt-in subsampling of dense fit clouds).
|
|
369
370
|
max_surface_points
|
|
370
371
|
Cap on fit observations when ``auto_thin`` is True.
|
|
372
|
+
surface_fit
|
|
373
|
+
Optional :class:`~chemparseplot.plot.neb.SurfaceFitConfig` or mapping
|
|
374
|
+
(TOML table keys). When set, overrides *auto_thin* /
|
|
375
|
+
*max_surface_points*.
|
|
371
376
|
|
|
372
377
|
```{versionadded} 1.8.1
|
|
373
378
|
```
|
|
@@ -375,6 +380,10 @@ def render_single_ended_landscape(
|
|
|
375
380
|
```{versionadded} 1.9.9
|
|
376
381
|
Added *auto_thin* and *max_surface_points*.
|
|
377
382
|
```
|
|
383
|
+
|
|
384
|
+
```{versionadded} 1.9.10
|
|
385
|
+
Added *surface_fit*.
|
|
386
|
+
```
|
|
378
387
|
"""
|
|
379
388
|
from matplotlib import ticker
|
|
380
389
|
|
|
@@ -434,6 +443,7 @@ def render_single_ended_landscape(
|
|
|
434
443
|
z_label=z_label,
|
|
435
444
|
auto_thin=auto_thin,
|
|
436
445
|
max_surface_points=max_surface_points,
|
|
446
|
+
surface_fit=surface_fit,
|
|
437
447
|
)
|
|
438
448
|
if cb is not None:
|
|
439
449
|
cb.ax.yaxis.set_major_formatter(ticker.FormatStrFormatter("%.3f"))
|
|
@@ -112,3 +112,76 @@ class TestPlotLandscapeSurfaceAutoThin:
|
|
|
112
112
|
assert seen["n"] <= 64
|
|
113
113
|
assert seen["n"] < n
|
|
114
114
|
plt.close(fig)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class TestSurfaceFitConfig:
|
|
118
|
+
def test_from_mapping_defaults(self):
|
|
119
|
+
from chemparseplot.plot.neb import SurfaceFitConfig
|
|
120
|
+
|
|
121
|
+
cfg = SurfaceFitConfig.from_mapping(None)
|
|
122
|
+
assert cfg.auto_thin is False
|
|
123
|
+
assert cfg.max_surface_points == 64
|
|
124
|
+
|
|
125
|
+
def test_from_mapping_overrides(self):
|
|
126
|
+
from chemparseplot.plot.neb import SurfaceFitConfig
|
|
127
|
+
|
|
128
|
+
cfg = SurfaceFitConfig.from_mapping(
|
|
129
|
+
{"auto_thin": True, "max_surface_points": 48, "noise": "ignored"}
|
|
130
|
+
)
|
|
131
|
+
assert cfg.auto_thin is True
|
|
132
|
+
assert cfg.max_surface_points == 48
|
|
133
|
+
|
|
134
|
+
def test_surface_fit_kwarg_overrides_scalars(self):
|
|
135
|
+
import sys
|
|
136
|
+
import types
|
|
137
|
+
|
|
138
|
+
import matplotlib.pyplot as plt
|
|
139
|
+
import numpy as np
|
|
140
|
+
|
|
141
|
+
from chemparseplot.plot import neb as neb_mod
|
|
142
|
+
from chemparseplot.plot.neb import SurfaceFitConfig
|
|
143
|
+
|
|
144
|
+
seen: dict = {}
|
|
145
|
+
|
|
146
|
+
class DummyModel:
|
|
147
|
+
def __init__(self, **kwargs):
|
|
148
|
+
x = kwargs.get("x", kwargs.get("x_obs"))
|
|
149
|
+
seen["n"] = len(x)
|
|
150
|
+
self.ls = 0.5
|
|
151
|
+
self.noise = 1e-2
|
|
152
|
+
|
|
153
|
+
def __call__(self, pts):
|
|
154
|
+
return np.zeros(len(pts))
|
|
155
|
+
|
|
156
|
+
def predict_var(self, pts):
|
|
157
|
+
return np.ones(len(pts)) * 0.01
|
|
158
|
+
|
|
159
|
+
fake = types.ModuleType("rgpycrumbs.surfaces")
|
|
160
|
+
fake.NYSTROM_N_INDUCING_DEFAULT = 300
|
|
161
|
+
fake.NYSTROM_THRESHOLD = 1000
|
|
162
|
+
fake.get_surface_model = lambda method: DummyModel
|
|
163
|
+
fake.nystrom_paths_needed = lambda *a, **k: 1
|
|
164
|
+
sys.modules["rgpycrumbs.surfaces"] = fake
|
|
165
|
+
sys.modules.setdefault("rgpycrumbs", types.ModuleType("rgpycrumbs"))
|
|
166
|
+
|
|
167
|
+
n = 100
|
|
168
|
+
r = np.linspace(0.0, 1.0, n)
|
|
169
|
+
p = np.linspace(1.0, 0.0, n)
|
|
170
|
+
z = np.linspace(0.0, 0.2, n)
|
|
171
|
+
fig, ax = plt.subplots()
|
|
172
|
+
neb_mod.plot_landscape_surface(
|
|
173
|
+
ax,
|
|
174
|
+
r,
|
|
175
|
+
p,
|
|
176
|
+
np.zeros(n),
|
|
177
|
+
np.zeros(n),
|
|
178
|
+
z,
|
|
179
|
+
method="rbf",
|
|
180
|
+
project_path=False,
|
|
181
|
+
show_pts=False,
|
|
182
|
+
auto_thin=False,
|
|
183
|
+
max_surface_points=64,
|
|
184
|
+
surface_fit=SurfaceFitConfig(auto_thin=True, max_surface_points=20),
|
|
185
|
+
)
|
|
186
|
+
assert seen["n"] <= 20
|
|
187
|
+
plt.close(fig)
|
|
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
|
|
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
|