Skip to main content

spexial

scipy.special in JAX

PyPI version PyPI platforms Actions Status codecov Documentation

spexial provides special functions for JAX, following the scipy.special API. The implementations are written in terms of JAX primitives, so they compose with jit, grad and vmap, and run on CPU, GPU and TPU.

It exists to fill gaps in jax.scipy.special: zeta accepts negative integers where JAX returns nan, spence accepts complex arguments where JAX is real-only, and the modified Bessel K, Gegenbauer and polylogarithm functions have no JAX counterpart at any version. Where SciPy already covers a case, spexial matches it rather than claiming to exceed it.

Installation

pip install spexial

or

uv add spexial

Example

>>> import jax
>>> jax.config.update("jax_enable_x64", True)

>>> import jax.numpy as jnp
>>> import spexial as sp

>>> # Gegenbauer polynomial C_n^alpha(x), matching scipy.special.eval_gegenbauer
>>> sp.eval_gegenbauer(3, 0.5, 0.25)
Array(-0.3359375, dtype=float64, weak_type=True)

Everything is vectorisable and differentiable in the usual way:

>>> xs = jnp.linspace(-1.0, 1.0, 5)
>>> jax.vmap(lambda x: sp.eval_gegenbauer(3, 0.5, x))(xs)
Array([-1.    ,  0.4375, -0.    , -0.4375,  1.    ], dtype=float64)

What is here

Function scipy.special counterpart
comb comb (the exact=False variant)
gamma gamma — JAX's value, plus an analytic derivative
eval_gegenbauer eval_gegenbauer
eval_gegenbauers -- returns every order up to n
incomplete_beta -- the unregularized B(a, b, z); betainc is the regularized form
k0, k1, k2 k0, k1, kn
k0e, k1e, k2e k0e, k1e, kve — scaled by e^z, no upper limit
polylog -- the polylogarithm
spence spence — complex too, which JAX rejects
sph_legendre_p sph_legendre_p — absent from JAX at any version
sph_harm_y sph_harm_y — JAX's returns incorrect values for array degrees
sph_harm_y_cart -- from a Cartesian direction; correct gradients on the z-axis
sph_harm_y_cart_all sph_harm_y_all (layout only) — the whole (l, m) table in one pass
sph_harm_y_cart_all_terms -- as above, returned as separate arrays so reductions stay fused
zeta zeta — negative integers, which JAX gives as nan

Read Accuracy and domains before relying on any of these. It records, per function, the domain each is tested over and the tolerance it actually meets. Some are not machine-precision — the modified Bessel functions are accurate to about 1e-7, and zeta does not implement the critical strip.

Documentation

https://jaxtronomy.github.io/spexial

Development

We welcome contributions! See CONTRIBUTING.md.

uv sync --group dev
uv run nox -s all      # lint -> test -> docs

Citation

If you use spexial in work you publish, please cite it — see CITATION.cff. Several routines originate in the LINX code.

License

MIT. See LICENSE.

Metadata

Release files for spexial 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spexial 0.2.1
File Size Uploaded
spexial-0.2.1.tar.gz 206.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for spexial 0.2.1
File Interpreter ABI Platform
spexial-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 287.3 kB

Release files / spexial-0.2.1.tar.gz

Download URL spexial-0.2.1.tar.gz
Size 206.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1a1ad8dac67b3d1084b047096d7f2b4b053f4273b6e09f0bd6705092134a7842
BLAKE2b-256 checksum
How to use checksums
b7bdd2b65409d29c709d2dd792cef3620e15acd2ab6ab34ae7050df2c3a87b41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Release files / spexial-0.2.1-py3-none-any.whl

Download URL spexial-0.2.1-py3-none-any.whl
Size 81.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cf1f43846788f65f196e529216f02897886578b518804158029bd65c518f488c
BLAKE2b-256 checksum
How to use checksums
2a4ecf3db03dabaaa5b8f096986e004fb1c4f7933307b40a0d7ee0258d095aba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release 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