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

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.86-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.86.tar.gz.

File metadata

  • Download URL: gamfit-0.1.86.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.86.tar.gz
Algorithm Hash digest
SHA256 dbb980f429e73b2ffce8b413ee895fa2dbd32cb27b8feee68f70bfb47f70b406
MD5 ac8c5ad3b6419c183f6fc9435a1c0dfc
BLAKE2b-256 40c81af5039932b5a145dd845201b6068c8dec3af7f3d04f481c8ec8728af535

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.86-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.86-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6c25beb73350a3dbcc7136d6de4d5d956b698e1abaf72ebc1805c4ccbcfe3f0a
MD5 893d69d2ac896dfcd77e8055e007da6a
BLAKE2b-256 adb76d33a79f691858c48c93c19c6e7f70c891096f7656b6731923ab66e82221

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.86-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 42a02ee5b1244f2de88ad9f5f41926c4379d8af0576faa11b3a01edc0c0e6388
MD5 5619c3cefa37cec7474e16ee9bb28089
BLAKE2b-256 3537c5f5db545dfba017b19a26da35c0f23daea82ea540612491a7d660b7f1db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.86-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 139245d3cbc63b3e6f2e9c8fe5662c5e005a49082efd793cb3026bed9ed944e5
MD5 3139acb6e520e0a2ffb8c95bd13e7676
BLAKE2b-256 54514e1ebd390fbcb1afea1c0092ca106fb7cc0cf2e39c584c6304519fd8df7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.86-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0755e934750b7932ff7edf624fb83ede51103f55cd4d49705ac7b29c91b4f7b1
MD5 425adb4dbc9db8eba0b1bcece2ed8edf
BLAKE2b-256 67e734a2ebf9961b29f19a7eafc52263136dd3a896ba75baf175757e8f98b9f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.86-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8802db2975df682e96471bcf70b947382e14b4aef69a9cb5ae7708d1b89522d4
MD5 8c87e256febca19e7ffc86de39885e6c
BLAKE2b-256 11b79e1e0e9d89078fbdd27536b9fbaca52fca0f99cc708b58e3dd280b5a6b65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.86-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 835cc983cde91fbb73f9b86234b3d97edecd811d3c78ee15255d28313fa556ab
MD5 37e1ed1e7ed47958aa169bd879aaaf64
BLAKE2b-256 d35b1111dd817cb3042f2eb49c24b9038a1b8e8ceadf565d46dab30424356f96

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.86-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5b698f460561f9445f9715942981e99ffe98024bdbab68a30e3273c94c6f5ede
MD5 f986d45d95e49d803ffd701a3b6ea645
BLAKE2b-256 05c300b95748505922428e16927d289aa12008883fe3dd8cfd80f93e29efbd59

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