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

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.97-cp310-abi3-musllinux_1_2_x86_64.whl (13.3 MB view details)

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

gamfit-0.1.97-cp310-abi3-musllinux_1_2_aarch64.whl (11.6 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.97-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.2 MB view details)

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

gamfit-0.1.97-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.97-cp310-abi3-macosx_11_0_arm64.whl (11.2 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.97-cp310-abi3-macosx_10_12_x86_64.whl (12.6 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.97.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.97.tar.gz
Algorithm Hash digest
SHA256 dc67b4d619ae1a0ecbeab67bc882fd399bbe0fca7a9dceedadc6766815e7c86c
MD5 af135e1f84f4d67d034ae82b0ece3e91
BLAKE2b-256 315bec9c01e7f402dbbb91c0a9691ada3c100f362763d0cf371eb95954acbaa4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.97-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.9 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.97-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e6e787c9e1889322172f2643f8427b6c2587669fb48bda123a3c2d1fd58d8eff
MD5 094e70b964c829c04073d498cbe2600d
BLAKE2b-256 28a9970a7d6755ff26949e0176878d517205376d3f3322f10f07a985e1feadf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.97-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2dd265ff789df8d50b94a48e589ccc5d37289418bed1e8acf3c90a3cd2724db8
MD5 c9bbb76329fcfa6a53a9c775843050c6
BLAKE2b-256 9744cf98568835f8b2dc9131ca1adbba0c281e3dacf171dd8fca1d17a9cf9192

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.97-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ed52a16dde49fc40cd1d5cc2e84f6dfe6ee8bddc8f19fae436e98c60268c3884
MD5 d39dec893b22a0a7150a377a8ce9f264
BLAKE2b-256 28b974f84e8a0c621eb47b03760ed8111bb6419cd34c833f82b5541a7c7c281e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.97-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d5ded7460218ccd383124c8e6d38db1c324552f2e45e5393c247fbbde0d47264
MD5 0068c25713d449f4ab70d8a38071ab04
BLAKE2b-256 af78076c9da9aaa9661496f9761f52b9c3b8e9c7b5a670466c8abcabf98a6e44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.97-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f2a37367755b6c0c8a2f6255d392a7bb57907c62dfb15d09bcd58b470f77c6a7
MD5 a5a9e9cf6337e0342df5b1306b95bb26
BLAKE2b-256 6f2e1896253404faffdff4eff25ff7fc98264d573cb7edc76f26a6919a141713

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.97-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67e14cd0773d4b80db72dcecad1b7fb22f4934de88ab6a98545cfc43bb834840
MD5 71272b94f930864421c19fcac5423ace
BLAKE2b-256 a0a5f860f12887f234343673e0120502e4d9b657fd33c5ecf19cabd5b6fb6607

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.97-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ed65154adc203c0800f160609de2a874e95a8b759694f6bca8d9e5f522473ac8
MD5 ce0a7b2eff7bb0b4078a4d59d7c3691e
BLAKE2b-256 815d64fb1e36f63146a5bcf5d41ad953379d81526a82e853e37a3dc3c671fa73

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