Differentiable continuation and bifurcation analysis in JAX.
JaxCont turns an equilibrium continuation sweep into a JAX program. Follow
branches through folds with pseudo-arclength continuation, detect and refine
fold/Hopf events, and compose the analysis with jax.jit, jax.vmap, and
automatic differentiation.
Why JaxCont?
- Transform the whole analysis. Batch ensembles of branches with
vmapand differentiate bifurcation locations for inverse design. - Stay on the branch. Adaptive pseudo-arclength continuation passes folds; natural continuation is available when the parameter remains regular.
- See and validate the result. Plot stability-aware bifurcation diagrams and eigenvalue trajectories with JaxCont events plus MatCont, BifurcationKit, or analytic reference markers.
The current surface supports equilibrium and periodic-orbit continuation, their principal codimension-one events, and direct codimension-two point solvers. Branch switching, general connecting-orbit/BVP workflows, PRC/dPRC, and two-parameter curve continuation remain future work.
Installation
JaxCont requires Python 3.9 or newer.
pip install jaxcont
See the JAX installation guide when selecting CPU, GPU, or TPU support.
Quick start
Continue u² + p = 0 through its fold at p = 0:
import jax.numpy as jnp
import matplotlib.pyplot as plt
import jaxcont as jc
def saddle_node(u, p, args):
return u**2 + p
problem = jc.bif_problem(
saddle_node,
u0=jnp.array([1.0]),
p0=-1.0,
state_names=["u"],
param_name="p",
)
result = jc.continuation(
problem,
p_span=(-1.0, 0.2),
settings=jc.ContinuationPar(ds=0.03, max_steps=200),
events=[jc.Fold()],
)
print([(event.kind, event.p) for event in result.events])
result.plot(annotate=True, title="Saddle-node bifurcation")
plt.show()
The same result can drive a stability-spectrum plot:
from jaxcont.viz import plot_eigenvalues
plot_eigenvalues(result, shade_stability=True)
Explore
- Quickstart
- Example gallery
example_03_van_der_pol.py— Hopf crossing with JaxCont and MatCont markersexample_06_vmap_sweep.py— batched continuation withvmapexample_07_differentiable.py— differentiable bifurcation analysisexamples/MatCont— reproducible analytic, MATLAB/MatCont and JaxCont validation cases
Development
git clone https://github.com/Ziaeemehr/JaxCont.git
cd JaxCont
python -m pip install -e ".[dev]"
python -m pytest
Contributions are welcome; see CONTRIBUTING.md, the roadmap, and the MatCont validation suite.
Citation
If JaxCont supports your research, cite the archived release using its
GitHub/Zenodo DOI. Citation metadata is provided in CITATION.cff.
Until the first archive is minted:
@software{ziaeemehr_jaxcont_2026,
author = {Ziaeemehr, Abolfazl},
title = {JaxCont: Differentiable Continuation and Bifurcation Analysis in JAX},
year = {2026},
version = {0.3.0},
url = {https://github.com/Ziaeemehr/JaxCont}
}
JaxCont is distributed under the MIT License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jaxcont-0.3.0.tar.gz.
File metadata
- Download URL: jaxcont-0.3.0.tar.gz
- Upload date:
- Size: 121.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
262125288771001a94d4da45908bedffd0326ae7036de60938d5eeae35e7b51a
|
|
| MD5 |
aa0697ae3a13af13f8d87a3bfae02dca
|
|
| BLAKE2b-256 |
d5058cae5c90284f850b132b8c816f6de226a74ede413b2ee39d41bf0dce38dd
|
Provenance
The following attestation bundles were made for jaxcont-0.3.0.tar.gz:
Publisher:
publish.yml on Ziaeemehr/JaxCont
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jaxcont-0.3.0.tar.gz -
Subject digest:
262125288771001a94d4da45908bedffd0326ae7036de60938d5eeae35e7b51a - Sigstore transparency entry: 2347896734
- Sigstore integration time:
-
Permalink:
Ziaeemehr/JaxCont@d573ced720080be2e049dbb5abc023845fd52d86 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/Ziaeemehr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d573ced720080be2e049dbb5abc023845fd52d86 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file jaxcont-0.3.0-py3-none-any.whl.
File metadata
- Download URL: jaxcont-0.3.0-py3-none-any.whl
- Upload date:
- Size: 76.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efa9317076d717e98e9b3e9ac5ccf095a333431c75b074374918e24ce9f9c3a4
|
|
| MD5 |
70483dec2380a57ae35ecbf39aa709fb
|
|
| BLAKE2b-256 |
fa952f0a63a9fce89add19993bb41c863ceedcff0d3edfdef528fb22af46c598
|
Provenance
The following attestation bundles were made for jaxcont-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on Ziaeemehr/JaxCont
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jaxcont-0.3.0-py3-none-any.whl -
Subject digest:
efa9317076d717e98e9b3e9ac5ccf095a333431c75b074374918e24ce9f9c3a4 - Sigstore transparency entry: 2347897504
- Sigstore integration time:
-
Permalink:
Ziaeemehr/JaxCont@d573ced720080be2e049dbb5abc023845fd52d86 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/Ziaeemehr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d573ced720080be2e049dbb5abc023845fd52d86 -
Trigger Event:
workflow_dispatch
-
Statement type: