Skip to main content

Zero-warmup Rust-engine ODE/DDE/SDE integration, discrete maps, and chaos analysis for dynamical systems.

Project description

TSDynamics

Python CI Release Docs PyPI

Dynamical systems in Python: 149 built-in systems, a native Rust integration engine, and chaos analysis — with the simplest system-definition contract anywhere.

You write the math (one symbolic method); TSDynamics lowers it to a native Rust engine and handles integration, Lyapunov spectra, bifurcation diagrams, Poincaré sections, and even the documentation page for your system.

import tsdynamics as ts

lor = ts.Lorenz()
traj = lor.integrate(final_time=100.0, dt=0.01)
traj["x"]                              # named component access
lor.lyapunov_spectrum()                # → [0.91, ~0, -14.57]
ts.kaplan_yorke_dimension(_)           # → ~2.06

📖 Documentation: https://el3ssar.github.io/TSDynamics/


Highlights

  • Three families, one interface — ODEs, delay-differential equations (including DDE Lyapunov spectra), and discrete maps, all running on the same native Rust engine. All implement one stepping protocol, so every analysis tool works on every system.
  • 149 built-in systems with literature parameters: Lorenz, Rössler, Chua, 21 Sprott flows, Mackey–Glass, Hénon, ... each with an auto-generated docs page showing its equations and attractor.
  • Native engine, zero warmup — equations lower to a Rust engine (an SSA-tape interpreter, with a Cranelift JIT alongside) in-process; parameters are runtime control values, so changing them is free and there is no compile step or cache.
  • Composition — a PoincareMap of a flow is a discrete map, so orbit_diagram(PoincareMap(Rossler(), (1, 0.0)), "c", values) draws the bifurcation diagram of a flow with one line.
  • Analysis toolkit — orbit/bifurcation diagrams, Poincaré sections (root-refined), maximal Lyapunov exponent without Jacobians, Kaplan–Yorke dimension, fixed points with stability.

Install

pip install tsdynamics            # or: uv add tsdynamics

A prebuilt abi3 wheel (manylinux / musllinux / macOS / Windows) bundles the native Rust engine, so no Rust toolchain and no C compiler are needed to install or run. Building from the sdist needs a Rust toolchain (the build backend is maturin).

Optional extra: tsdynamics[plot] (matplotlib).

Define your own system

import tsdynamics as ts

class MySystem(ts.ContinuousSystem):
    params = {"a": 0.2, "b": 0.2, "c": 5.7}
    dim = 3
    variables = ("x", "y", "z")            # optional niceties

    @staticmethod
    def _equations(y, t, *, a, b, c):
        x, yv, z = y(0), y(1), y(2)
        return (-yv - z, x + a * yv, b + z * (x - c))

That's the whole contract. The class auto-registers: the bulk test-suite sweeps it, and the docs build renders its equations (LaTeX, straight from the symbolics) and its attractor figure — zero extra steps. Delay systems use y(0, t - tau); maps implement _step/_jacobian (signature order is validated at import).

A taste of the analysis layer

import numpy as np
import tsdynamics as ts

# Bifurcation diagram of the logistic map
od = ts.orbit_diagram(ts.Logistic(), "r", np.linspace(2.5, 4.0, 600))
x, y = od.flat()

# Poincaré section of the Rössler attractor (root-refined crossings)
section = ts.poincare_section(ts.Rossler(), plane=(1, 0.0), steps=500)

# Fixed points of the Hénon map, with stability
ts.fixed_points(ts.Henon())
# [FixedPoint([-1.131354  -0.339406], unstable, ...),
#  FixedPoint([ 0.631354   0.189406], unstable, ...)]

# Maximal Lyapunov exponent, no Jacobian needed
ts.max_lyapunov(ts.Lorenz(ic=[1, 1, 1]), dt=0.05)    # ≈ 0.91

Development

git clone https://github.com/El3ssar/TSDynamics && cd TSDynamics
uv sync --group dev --group docs
uv run pytest -m "not slow" --no-cov     # fast tier
uv run pytest --no-cov                   # full local suite
TSD_DOCS_FIGURES=0 uv run mkdocs serve   # docs preview

Releases are automated: conventional-commit PR titles drive semantic-release on merge — see CONTRIBUTING.

License

MIT © Daniel Estevez

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tsdynamics-3.0.5.tar.gz (504.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tsdynamics-3.0.5-cp312-abi3-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.12+Windows x86-64

tsdynamics-3.0.5-cp312-abi3-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ x86-64

tsdynamics-3.0.5-cp312-abi3-musllinux_1_2_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

tsdynamics-3.0.5-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ x86-64

tsdynamics-3.0.5-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ ARM64

tsdynamics-3.0.5-cp312-abi3-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

tsdynamics-3.0.5-cp312-abi3-macosx_10_12_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12+macOS 10.12+ x86-64

File details

Details for the file tsdynamics-3.0.5.tar.gz.

File metadata

  • Download URL: tsdynamics-3.0.5.tar.gz
  • Upload date:
  • Size: 504.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tsdynamics-3.0.5.tar.gz
Algorithm Hash digest
SHA256 b04a7f52575f608eb34a508ece9214ec653c530dccabff64051448da6b83bc46
MD5 ab60de7f7b0c95c3281f7141c468918a
BLAKE2b-256 4655baa6cab7cc54802ed7f7d00396d2becbbb546907595b211d6625a667ccb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-3.0.5.tar.gz:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsdynamics-3.0.5-cp312-abi3-win_amd64.whl.

File metadata

  • Download URL: tsdynamics-3.0.5-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.12+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tsdynamics-3.0.5-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 87133eb3067559ae79338194475bee4e8c129c8e142e38c0898fbb83773b80a6
MD5 64962a9c3cbce5fd19c79434a52eed53
BLAKE2b-256 7dfd741bbc980294e421bb0fa59a157a2d932a6f65dfc73ada6dc2fb585835d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-3.0.5-cp312-abi3-win_amd64.whl:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsdynamics-3.0.5-cp312-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tsdynamics-3.0.5-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7abc49c4aa691807effcb0375ab78941e486395550624e97b1df638bd2d9c5b1
MD5 52a24b63822772ec1cb837ba4e7e1060
BLAKE2b-256 f366d21cc1684c2d976b8273ea4de60c68b9ad27cb6431e7926620822b95739b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-3.0.5-cp312-abi3-musllinux_1_2_x86_64.whl:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsdynamics-3.0.5-cp312-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tsdynamics-3.0.5-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ac016a40792b2d38caa39e57d027430f9fac489aa5fc53bdf93ba9fbfdcf603e
MD5 d1c0f3573c24aa7870f72ec6ff8a28e7
BLAKE2b-256 902a5eadd5f4e85842ab4b1590d61cd0b999732e898599e961bc4388b230d0b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-3.0.5-cp312-abi3-musllinux_1_2_aarch64.whl:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsdynamics-3.0.5-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tsdynamics-3.0.5-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8a292e1e8efe1fc4a22650eb576df45b4bb98581ec1f11583553bb90510c6121
MD5 89cea35febb89fb3fb2b3993fa9b0305
BLAKE2b-256 a96860ee0c9326917e4d957251dd722652ed0902577d652f1277e4b29f816854

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-3.0.5-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsdynamics-3.0.5-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for tsdynamics-3.0.5-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f144268e71d2114394545470d84461aaa91c66a712a293213f47f137c2a6257b
MD5 bcc7b051efaec1a88dc482e26ffe6227
BLAKE2b-256 db259ff553dc85d51887d4e936fd99442cd170484cdc5e8fb9593f0f59d0123b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-3.0.5-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsdynamics-3.0.5-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tsdynamics-3.0.5-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 544e1fb300bd481be51711144afacca970c55f5051d70c36ade23caf0ff2cc33
MD5 f906ad208c39c6f045e2a709a196e0a1
BLAKE2b-256 fda63d40371b8f918eb8ed89ebfbc1b2d6f30cc57b2df1239ebeaad079c904d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-3.0.5-cp312-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsdynamics-3.0.5-cp312-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tsdynamics-3.0.5-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2b8e1972104ac0ab05fcbe6f6a32939ca350fe84362f4d8e7228f3d91e37a2b8
MD5 63531a9b96513a6249dfbb7ec049e094
BLAKE2b-256 1e9c8db5d09271a8a965cfc9700d7a77056355cba55abef89237d063b4a2aed0

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-3.0.5-cp312-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page