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, and Gaussian Laplace for model classes without an exact NUTS path.

Geometric / manifold smooths handle predictor spaces that wrap, including circles, cylinders, tori, the sphere (intrinsic Wahba / spherical harmonic kernels), and periodic tensor products, with no seams or pole artefacts. The gallery's Möbius-looking example is a 4π-periodic double-cover parameterization of a Möbius embedding, not a twisted Möbius-strip predictor basis:

rotating recovery of a trefoil knot, latent-free loop, wobbly cylinder, lumpy sphere, bumpy torus, and Möbius double-cover 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 double-cover demo, 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, and Gaussian Laplace for model classes without an exact NUTS path, 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 mean 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",
    baseline_target="weibull",
)

# 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[torch]"      # PyTorch bridge
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.95.tar.gz (3.1 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.95-cp310-abi3-win_amd64.whl (13.8 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.95-cp310-abi3-musllinux_1_2_x86_64.whl (13.2 MB view details)

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

gamfit-0.1.95-cp310-abi3-musllinux_1_2_aarch64.whl (11.5 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.95-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.0 MB view details)

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

gamfit-0.1.95-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.3 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.95-cp310-abi3-macosx_11_0_arm64.whl (11.1 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.95-cp310-abi3-macosx_10_12_x86_64.whl (12.5 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.95.tar.gz
  • Upload date:
  • Size: 3.1 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.95.tar.gz
Algorithm Hash digest
SHA256 667a5d93d9a01f1248f32441119960a1148a5ff4ee3eaf13bc364e61db7ed102
MD5 f42aee033252468115a43aeb458ab9c7
BLAKE2b-256 451f35eecd8e6d580147c2d81088dd651042aaa6f31320e87f833d320933c021

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.95-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.8 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.95-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 20bcf7a9a0943d046f2fcb41929d6ffc65c88ca830eb3956e4c543715862a916
MD5 12ad1486709a12efbea2ad665dda9827
BLAKE2b-256 5b665d87dd1a7c316fc98c8c83914aa0b5b966337a5477112ebe983d1d5c439e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.95-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8dc8b395891d89038b8ce573cf12df630dfd1b749266b8065d57c9312d208340
MD5 af61945f6d7e559d90b62c85eacdc4f6
BLAKE2b-256 bb7c657c7cec98edd1f582cd1439e0931bdcc80b8f1583ac8a9bfc22494b215f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.95-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a42b01cb37e86532b48ae4aacabb535ec9d9103eaecd45a6cf8e830d90d6c4c4
MD5 54a2c8e42db6bc02ea67fdf3674970e3
BLAKE2b-256 6b500c68e483cd0ee1c47454e68064b6d7faa00ad11010cdce08528cc0d4916c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.95-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5062fdf9fcae04fea8234b4cf9303bb100b4c1498660483436181bdce55f5cc2
MD5 f83914aa32ed701713fb3b14ef961c06
BLAKE2b-256 3018a97d5c151bb084ff1bfe3f791850c97b287b337da580c53dd271174e3065

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.95-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d4d44d05a1a57958f0c01d644e8f0dab56d3f3619936da77fe820a33f1b4e934
MD5 df0d92ecdf383a546c223c954c8e73d8
BLAKE2b-256 1e3d23707e95cdccf580053e26d2c2604137a359e2d65b23112fba83d149df84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.95-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2a8b8fe9b8999a10d5499e4d28ea91f3b2cb6fc6897725f86ce948879e727b71
MD5 1dadf0112be6fda06ed05f9e3b8a177f
BLAKE2b-256 65fc61d20a1468e75ef1ade189729102f74b9a67608d7b4380e5b52cda9b101d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.95-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cd0f0ef49dcfb7ab902d13a7498c296e3f4c7f4137bf326360636995b73ead0c
MD5 89a791f2b74d67d8d6670c9d399d41bb
BLAKE2b-256 1291fe44ca871a78701c3743a29300e650487741f81757df849739f8c1cbae36

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