JaxCont
Vectorize whole continuation sweeps with jax.vmap, and differentiate
bifurcation locations with jax.grad.
JaxCont is an equilibrium continuation and bifurcation-analysis library built
around JAX transformations. Its whole-loop pseudo-arclength engine is a pure,
compiled computation: use vmap to compute ensembles of branches in one
batched kernel, jacfwd to differentiate through a sweep, or the implicit
fold_parameter solver for reverse-mode gradients of a fold location.
# One compiled kernel computes a branch for every design value.
branches = jax.vmap(run_branch)(design_values)
# A fold location can participate in gradient-based inverse design.
dp_dtheta = jax.grad(
lambda theta: jc.fold_parameter(f, u_guess, p_guess, theta)
)(theta)
The v0.1 series deliberately focuses on equilibria: natural and pseudo-arclength continuation, fold and Hopf detection with refinement, linear stability, and bifurcation diagrams. Periodic orbits, Floquet multipliers, boundary-value problems, branch switching, and two-parameter continuation are not part of the supported v0.1 API.
Installation
JaxCont requires Python 3.9 or newer.
pip install jaxcont
For a development checkout:
git clone https://github.com/Ziaeemehr/JaxCont.git
cd JaxCont
python -m pip install -e ".[dev]"
JAX's platform-specific accelerator installation is documented in the JAX installation guide.
Quick start
Continue the positive branch of u² + p = 0 through its fold at p = 0:
import jax.numpy as jnp
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)
result = jc.continuation(
problem,
p_span=(-1.0, 0.2),
settings=jc.ContinuationPar(ds=0.03, max_steps=200),
events=[jc.Fold()],
)
print(result.branch.params)
print([(event.kind, event.p) for event in result.events])
PseudoArclength(engine="scan") is the default algorithm. It uses the
whole-loop compiled engine, computes stability in a vectorized post-pass, and
refines requested fold/Hopf events. Use jc.Natural() for natural-parameter
continuation or jc.PseudoArclength(engine="legacy") only when comparing with
the compatibility implementation.
See the quickstart,
Sphinx-Gallery examples,
example_06_vmap_sweep.py, and
example_07_differentiable.py for the
full vmap, jacfwd, and inverse-design stories.
Development
python -m pytest
make docs
python -m build
python -m twine check dist/*
Contributions are welcome; see CONTRIBUTING.md. The project roadmap and supported scope live in notes/ROADMAP.md.
Citation
If JaxCont supports your research, cite the archived release using the DOI in
the GitHub/Zenodo release record. Citation metadata is also 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.1.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.1.0.tar.gz.
File metadata
- Download URL: jaxcont-0.1.0.tar.gz
- Upload date:
- Size: 63.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ffd98ec859415843b53e1001353bcc488c179ee5c9a73cc46fa4c2c36d8cbfb
|
|
| MD5 |
6fb4743f42fbd06d89e9a4623f2b2513
|
|
| BLAKE2b-256 |
2863a3ec8e63ccaa1be16ea4191b5473b5e6874a0769f10c7f07fa0cd020179b
|
Provenance
The following attestation bundles were made for jaxcont-0.1.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.1.0.tar.gz -
Subject digest:
7ffd98ec859415843b53e1001353bcc488c179ee5c9a73cc46fa4c2c36d8cbfb - Sigstore transparency entry: 2203738733
- Sigstore integration time:
-
Permalink:
Ziaeemehr/JaxCont@b1fd763e4d97f3cb63688fb00e68208fe7a3de8c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Ziaeemehr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b1fd763e4d97f3cb63688fb00e68208fe7a3de8c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file jaxcont-0.1.0-py3-none-any.whl.
File metadata
- Download URL: jaxcont-0.1.0-py3-none-any.whl
- Upload date:
- Size: 51.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
771c69f5f2b3dea62c74eb2dbad403edf10ef346daa39e7e219e59c35b488c19
|
|
| MD5 |
7e26bd097aa484001a97ad93973a1b0c
|
|
| BLAKE2b-256 |
35b11138950a7c69fba56fc819535778ac6bd69eb4c92198d06c113dfafed520
|
Provenance
The following attestation bundles were made for jaxcont-0.1.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.1.0-py3-none-any.whl -
Subject digest:
771c69f5f2b3dea62c74eb2dbad403edf10ef346daa39e7e219e59c35b488c19 - Sigstore transparency entry: 2203738743
- Sigstore integration time:
-
Permalink:
Ziaeemehr/JaxCont@b1fd763e4d97f3cb63688fb00e68208fe7a3de8c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Ziaeemehr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b1fd763e4d97f3cb63688fb00e68208fe7a3de8c -
Trigger Event:
workflow_dispatch
-
Statement type: