Skip to main content

Formula-first generalized additive models with a high-performance Rust core

Project description

gamfit

PyPI Python Docs License

Formula-first generalized additive models for Python, backed by a Rust engine.

gamfit fits Gaussian, binomial, Poisson, and Gamma GLMs with smooth terms, random effects, bounded/constrained coefficients, location-scale extensions, survival likelihoods, and flexible/learnable links. Smoothing parameters are selected by REML or LAML. Posterior sampling uses NUTS where supported, with a Gaussian Laplace fallback elsewhere.

Geometric / manifold smooths handle predictor spaces that wrap, including circles, cylinders, tori, the sphere (intrinsic Wahba / spherical harmonic kernels), and one-sided strips, with no seams or pole artefacts:

rotating recovery of a trefoil knot, latent-free loop, wobbly cylinder, lumpy sphere, bumpy torus, and Möbius strip from noisy 3-D point clouds

Docs: https://gamfit.readthedocs.io/

Install

uv add gamfit

Wheels for Linux (x86_64, aarch64), macOS (x86_64, Apple silicon), and Windows. No Rust toolchain required.

30-second tour

import gamfit

train = [
    {"y": 1.2, "x": 0.0},
    {"y": 1.9, "x": 1.0},
    {"y": 3.1, "x": 2.0},
    {"y": 4.5, "x": 3.0},
]

model = gamfit.fit(train, "y ~ s(x)")
print(model.predict([{"x": 1.5}, {"x": 2.5}], interval=0.95))
print(model.summary())
model.save("model.gam")

pandas, polars, pyarrow, numpy, dict-of-columns, and list-of-records inputs all work without conversion.

What's different

  • Three-part penalty structure. Each smooth gets separate penalties for magnitude, gradient, and curvature. Most GAM libraries use one or two.
  • Flexible link functions. Spline offsets from a base link (link(type=flexible(probit))), blended mixture links, and SAS / beta-logistic learnable shapes.
  • Surface smooths in arbitrary dimension. Thin-plate, Duchon (with triple-operator regularization), and Matérn covariance, with automatic knot placement.
  • Geometric / manifold smooths. Cyclic 1-D, cylinder / torus tensor, intrinsic sphere (Wahba + spherical harmonics), Möbius strip, boundary-conditioned B-splines. Predictor spaces that wrap or close are first-class — no seams, no pole artefacts.
  • Adaptive anisotropy. Per-axis spatial anisotropy shrinks or stretches each feature axis independently inside a single joint smooth.
  • Composable basis/kernel. Combine a spline kernel with a length-scale behaviour (e.g. Duchon kernel with Matérn-style global κ).
  • Marginal-slope models. Separate baseline risk from a calibrated score's effect, for both Bernoulli and survival outcomes.
  • Posterior sampling. model.sample(...) runs NUTS where supported, with a Gaussian Laplace fallback elsewhere, behind one API.

Highlights from the API

import gamfit
from gamfit.sklearn import GAMRegressor, GAMClassifier

# Validate before you fit
gamfit.validate_formula(train, "y ~ s(x) + group(site)")

# Posterior sampling and predictive bands
posterior = model.sample(train, seed=42)
bands = posterior.predict(test, level=0.95)

# Survival
gamfit.fit(df,
    "Surv(entry, exit, event) ~ s(age) + bmi + timewiggle(internal_knots=6)",
    survival_likelihood="transformation",
)

# scikit-learn
est = GAMRegressor(formula="y ~ s(x)")
est.fit(X, y)

# Diagnose, plot, report
model.diagnose(train).metrics
model.plot(train, x="x", kind="prediction")
model.report("report.html")

Public API

Symbol Purpose
gamfit.fit(data, formula, **kwargs) Fit a model.
gamfit.load(path) / gamfit.loads(bytes) Reload a saved model.
gamfit.validate_formula(data, formula, ...) Type-check a formula without fitting.
gamfit.build_info() Native extension build metadata.
gamfit.explain_error(exc) Human-readable hint for a gamfit exception.
gamfit.Model Fitted-model handle: predict, summary, check, diagnose, plot, report, sample, save.
gamfit.SurvivalPrediction Per-row hazard / survival surface; on-demand evaluation.
gamfit.SamplingConfig, PosteriorSamples, PosteriorPredictive NUTS / posterior interface.
gamfit.sklearn.GAMRegressor / GAMClassifier scikit-learn estimators.

Full reference at https://gamfit.readthedocs.io/en/latest/api-reference/.

Optional extras

uv add "gamfit[pandas]"     # pandas + pyarrow input/output
uv add "gamfit[plot]"       # matplotlib-based plotting
uv add "gamfit[sklearn]"    # scikit-learn integration
uv add "gamfit[all]"        # everything

License

AGPL-3.0-or-later. See LICENSE.

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

gamfit-0.1.85.tar.gz (3.0 MB view details)

Uploaded Source

Built Distributions

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

gamfit-0.1.85-cp310-abi3-win_amd64.whl (13.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.85-cp310-abi3-musllinux_1_2_x86_64.whl (12.6 MB view details)

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

gamfit-0.1.85-cp310-abi3-musllinux_1_2_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.85-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.5 MB view details)

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

gamfit-0.1.85-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.85-cp310-abi3-macosx_11_0_arm64.whl (10.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.85-cp310-abi3-macosx_10_12_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file gamfit-0.1.85.tar.gz.

File metadata

  • Download URL: gamfit-0.1.85.tar.gz
  • Upload date:
  • Size: 3.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for gamfit-0.1.85.tar.gz
Algorithm Hash digest
SHA256 d3507e2730bed21f79230894be678e40e4375d8f7758fb7142d01ad82e9e6dff
MD5 0f4bdb22314be4f856529fd43f2653cb
BLAKE2b-256 4fa0a12638f252f1174d44735053c0e6e4b733fabb4f4f18c3050962823926d0

See more details on using hashes here.

File details

Details for the file gamfit-0.1.85-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: gamfit-0.1.85-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.2 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for gamfit-0.1.85-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 746adb44ca6bfebd406144be67d197f492b1e8e305d0f75c16ddeb1ad7d45238
MD5 96960073723fdf9797945ce2a5cadb53
BLAKE2b-256 62369f2e251d83b27101a116ec2c489cb4e620f1134d526dd0383dc7e686e86f

See more details on using hashes here.

File details

Details for the file gamfit-0.1.85-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.85-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d6c8f45d00c73fdd715cd8a07c76820a1825d33b9b812ee3c78ca5a40b44572e
MD5 b71c695ff570ab3bddcc9928e6d98d1b
BLAKE2b-256 dce66f32e45ddcdb1095c302cfe5b5f87899265b43058ff9fa966fb7f081e727

See more details on using hashes here.

File details

Details for the file gamfit-0.1.85-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.85-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 46ebdf4875e2e0ceb7da62b98b8fc4181614531b6048706aaa06c3d344996487
MD5 5489f79820a3d8b3be96326c7eb98e66
BLAKE2b-256 2931abaa308a471d6119b3eea1169239e27fa585e95db8a26c731fe07b74889f

See more details on using hashes here.

File details

Details for the file gamfit-0.1.85-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.85-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 83b8987aa41f3693b8f879efd3e26cd25937d45a5df0e72c3e68c6bfb4ae9366
MD5 7247b80bfe18de1f20552938e870d1e3
BLAKE2b-256 8846258d6b51bd888210ec60c1a863867dd0fce8654384fa78707881a078c0be

See more details on using hashes here.

File details

Details for the file gamfit-0.1.85-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.85-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 06df27cea42349a074adf856ea3207d951bab5be52931100e2ea4f81570fcc2e
MD5 a052cbd18334dad5e126980a44fb165a
BLAKE2b-256 6663ff891cce15aba394f76db8ea036c2b954dc7d870a0a48b09068ec7ed0457

See more details on using hashes here.

File details

Details for the file gamfit-0.1.85-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.85-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d79d425bba1d741170eac8f2bd8d568bec7c8f4dbe8fbc9a39a6b8bfaa64ba19
MD5 744074dfb6f58b2d30a927d1fcc4a46c
BLAKE2b-256 6eb9ff0bcf23c51775701a31378222ebdf1fe3ee95c2fb2bb6c06703aee1c226

See more details on using hashes here.

File details

Details for the file gamfit-0.1.85-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.85-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 605bcf36716bea3be5507310936123725f3bace00fd474948135d92feff95d7a
MD5 9a65f668045235f3ea1a56b670810c3f
BLAKE2b-256 84dfdbb87d5bfec9c45b1ae23186c527395abf9d64955ca948576dad124867e1

See more details on using hashes here.

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