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.79.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.79-cp310-abi3-win_amd64.whl (13.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.79-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.79-cp310-abi3-musllinux_1_2_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.79-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.79-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.79-cp310-abi3-macosx_11_0_arm64.whl (10.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.79-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.79.tar.gz.

File metadata

  • Download URL: gamfit-0.1.79.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.79.tar.gz
Algorithm Hash digest
SHA256 6b66d1715961be44d146303bbeb45c763cbdc6dec807a12c538818fc40cd948d
MD5 6df35e05f9fbc9ddeae51884467cc4d0
BLAKE2b-256 f262269216c5e7a8fe443f4c8ee0ab8e7dfcdf58709ae209edcd0513109276a7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.79-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.79-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f67a2fe35073315e840578eb5ca7dec689f1288326cc3e33b270223657e33995
MD5 085c70b24b10b214596e7142b645ed5f
BLAKE2b-256 a66956aea2647cc23a8c7c1ed95699d6169503394da1ba6e259c2f5df92337e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.79-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c364551915203095f2d0730efbd6eab99236ec26f3578d2f4dc0ad61fd8d73c9
MD5 1bf0db9b4bd1680a85e808c4aecf1907
BLAKE2b-256 b5aa53245a85169f92aa2597a81e8fefa026c40582cae2cb4e45c0527ff0035a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.79-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d25a6bdb56fe952b05c0833ae44db4a683a58efce96008c166ec435dad8881e6
MD5 07ca1a8fb8123cda57a4aaf232f15376
BLAKE2b-256 3d167bff8dbe35f182e64efa1a54883ecd39c7a9e1cd8d5604faa08474d98e99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.79-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 29e7e0c03d6d22fc1c336f46803c8fd101176189708175b854f09f9640569777
MD5 eb0754bdff44a4dd3e1d527440658d72
BLAKE2b-256 6528a8c2bf5567296fe34867abd93902d7697550550ab9ccb92b61290fc40f81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.79-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c6e10547787b62a1865d52b53e82efe06f3f15540423a43561548824dea5d777
MD5 de312856a14045b00f5649a82f48b453
BLAKE2b-256 6d513cad821f435cfecbbcc99b8ebf2070caa4842a1a7bce560bd2172c98c8f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.79-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ebcf97b98ae8971b96428614bd0c50d6ee59ea1c3a934b98718ba4948829635a
MD5 5cd667c1bb4abfb0f4f2537f413c6478
BLAKE2b-256 f9b9c65a42a421c211e38f32ec1bca7b83756af1c55d181749728bf59b286785

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.79-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 751208af2f0f3c79070afd3e8abfa33226eb0f3e422fa481d089c0dc103685cc
MD5 63adbe39340ad4db2be40628e4fa3235
BLAKE2b-256 5bfc9789748bd9285bfe0902b976de54c0da3f7e3c2ed95a134e1d935a75ff63

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