Skip to main content

JaxCont

Vectorize whole continuation sweeps with jax.vmap, and differentiate bifurcation locations with jax.grad.

Test Documentation Status PyPI version License: MIT

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

jaxcont-0.1.0.tar.gz (63.3 kB view details)

Uploaded Source

Built Distribution

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

jaxcont-0.1.0-py3-none-any.whl (51.5 kB view details)

Uploaded Python 3

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

Hashes for jaxcont-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7ffd98ec859415843b53e1001353bcc488c179ee5c9a73cc46fa4c2c36d8cbfb
MD5 6fb4743f42fbd06d89e9a4623f2b2513
BLAKE2b-256 2863a3ec8e63ccaa1be16ea4191b5473b5e6874a0769f10c7f07fa0cd020179b

See more details on using hashes here.

Provenance

The following attestation bundles were made for jaxcont-0.1.0.tar.gz:

Publisher: publish.yml on Ziaeemehr/JaxCont

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

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

Hashes for jaxcont-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 771c69f5f2b3dea62c74eb2dbad403edf10ef346daa39e7e219e59c35b488c19
MD5 7e26bd097aa484001a97ad93973a1b0c
BLAKE2b-256 35b11138950a7c69fba56fc819535778ac6bd69eb4c92198d06c113dfafed520

See more details on using hashes here.

Provenance

The following attestation bundles were made for jaxcont-0.1.0-py3-none-any.whl:

Publisher: publish.yml on Ziaeemehr/JaxCont

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

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page