tsdynamics 2.2.1__tar.gz → 2.2.2__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.
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/PKG-INFO +1 -1
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/__init__.py +1 -1
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/chaotic_attractors.py +6 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/chem_bio_systems.py +3 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_ode_systems.py +3 -4
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/.gitignore +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/LICENSE +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/README.md +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/pyproject.toml +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/analysis/__init__.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/analysis/fixed_points.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/analysis/lyapunov.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/analysis/orbit_diagram.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/analysis/poincare.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/backends/__init__.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/backends/diffsol.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/base/__init__.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/base/base.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/base/dde_base.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/base/map_base.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/base/ode_base.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/base/protocol.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/derived/__init__.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/derived/_base.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/derived/ensemble.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/derived/poincare.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/derived/projected.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/derived/stroboscopic.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/derived/tangent.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/derived/wrapped.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/py.typed +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/registry.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/sampling.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/__init__.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/__init__.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/climate_geophysics.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/coupled_systems.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/delayed_systems.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/exotic_systems.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/oscillatory_systems.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/physical_systems.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/population_dynamics.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/discrete/__init__.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/discrete/chaotic_maps.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/discrete/exotic_maps.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/discrete/geometric_maps.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/discrete/polynomial_maps.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/discrete/population_maps.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/utils/__init__.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/utils/general.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/utils/sagitta_dt.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/_sampling.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/conftest.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_analysis.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_base.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_cache_isolation.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_dde_systems.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_derived.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_diffsol_backend.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_diffsol_translation.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_jacobians.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_known_values.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_map_systems.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_ode_rhs_symbolic.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_protocol.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_registry.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_sampling.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_signatures.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_smoke.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_utils.py +0 -0
- {tsdynamics-2.2.1 → tsdynamics-2.2.2}/tests/test_wrapped.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tsdynamics
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: Compiled ODE/DDE integration, discrete maps, and chaos analysis for dynamical systems.
|
|
5
5
|
Project-URL: Source, https://github.com/El3ssar/TSDynamics
|
|
6
6
|
Project-URL: Documentation, https://el3ssar.github.io/TSDynamics/
|
|
@@ -48,7 +48,7 @@ from .systems import continuous as _continuous
|
|
|
48
48
|
from .systems import discrete as _discrete
|
|
49
49
|
|
|
50
50
|
# Single source of truth for the package version; rewritten by python-semantic-release.
|
|
51
|
-
__version__ = "2.2.
|
|
51
|
+
__version__ = "2.2.2"
|
|
52
52
|
|
|
53
53
|
# Re-export every system class at the top level so ``from tsdynamics import Lorenz``
|
|
54
54
|
# works without users having to remember which submodule a system lives in.
|
{tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/chaotic_attractors.py
RENAMED
|
@@ -547,6 +547,9 @@ class MultiChua(ContinuousSystem):
|
|
|
547
547
|
class Duffing(ContinuousSystem):
|
|
548
548
|
params = {"alpha": 1.0, "beta": -1.0, "delta": 0.1, "gamma": 0.35, "omega": 1.4}
|
|
549
549
|
dim = 3
|
|
550
|
+
# The explicit default (dopri5) fails to integrate this system; an implicit
|
|
551
|
+
# solver handles it robustly, so make that the default.
|
|
552
|
+
_default_method = "LSODA"
|
|
550
553
|
|
|
551
554
|
@staticmethod
|
|
552
555
|
def _equations(Y, t, *, alpha, beta, delta, gamma, omega):
|
|
@@ -889,6 +892,7 @@ class SprottK(ContinuousSystem):
|
|
|
889
892
|
class SprottL(ContinuousSystem):
|
|
890
893
|
params = {"a": 0.9, "b": 3.9}
|
|
891
894
|
dim = 3
|
|
895
|
+
_default_method = "LSODA" # explicit default solver fails; use an implicit one
|
|
892
896
|
|
|
893
897
|
@staticmethod
|
|
894
898
|
def _equations(Y, t, *, a, b):
|
|
@@ -975,6 +979,7 @@ class SprottO(ContinuousSystem):
|
|
|
975
979
|
class SprottP(ContinuousSystem):
|
|
976
980
|
params = {"a": 2.7}
|
|
977
981
|
dim = 3
|
|
982
|
+
_default_method = "LSODA" # explicit default solver fails; use an implicit one
|
|
978
983
|
|
|
979
984
|
@staticmethod
|
|
980
985
|
def _equations(Y, t, *, a):
|
|
@@ -1080,6 +1085,7 @@ class SprottMore(ContinuousSystem):
|
|
|
1080
1085
|
class SprottJerk(ContinuousSystem):
|
|
1081
1086
|
params = {"mu": 2.017}
|
|
1082
1087
|
dim = 3
|
|
1088
|
+
_default_method = "LSODA" # explicit default solver fails; use an implicit one
|
|
1083
1089
|
|
|
1084
1090
|
@staticmethod
|
|
1085
1091
|
def _equations(Y, t, *, mu):
|
|
@@ -37,6 +37,9 @@ class Oregonator(ContinuousSystem):
|
|
|
37
37
|
"epsilon": 1e-2,
|
|
38
38
|
}
|
|
39
39
|
dim = 3 # Three variables: X, Y, Z (reduced forms of the chemical species)
|
|
40
|
+
# Classic stiff system (Field–Noyes); an explicit solver cannot integrate
|
|
41
|
+
# it, so default to an implicit one.
|
|
42
|
+
_default_method = "LSODA"
|
|
40
43
|
|
|
41
44
|
@staticmethod
|
|
42
45
|
def _equations(Y, t, *, q, f, mu, epsilon):
|
|
@@ -134,10 +134,9 @@ def test_ode_full_integration_sweep(ode_entry) -> None:
|
|
|
134
134
|
# get a fixed (seeded) draw so the sweep is reproducible, not flaky.
|
|
135
135
|
np.random.seed(zlib.crc32(ode_entry.name.encode()) & 0xFFFFFFFF)
|
|
136
136
|
ic = sys.resolve_ic(None)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
traj = sys.integrate(ic=ic, final_time=2.0, dt=0.1, rtol=1e-5, atol=1e-7)
|
|
137
|
+
# Each system carries its own _default_method (stiff systems default to an
|
|
138
|
+
# implicit solver), so the plain default path must integrate them all.
|
|
139
|
+
traj = sys.integrate(ic=ic, final_time=2.0, dt=0.1, rtol=1e-5, atol=1e-7)
|
|
141
140
|
assert traj.y.shape[1] == sys.dim
|
|
142
141
|
assert np.all(np.isfinite(traj.y))
|
|
143
142
|
|
|
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
|
{tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/climate_geophysics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/oscillatory_systems.py
RENAMED
|
File without changes
|
|
File without changes
|
{tsdynamics-2.2.1 → tsdynamics-2.2.2}/src/tsdynamics/systems/continuous/population_dynamics.py
RENAMED
|
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
|