Skip to main content

gamfit

PyPI Python Docs License

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

gamfit fits Gaussian, binomial (including Bernoulli marginal-slope), Poisson, negative-binomial, Gamma, Beta, Tweedie, and multinomial 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 a Gaussian Laplace approximation otherwise.

Manifold smooths handle predictor spaces that wrap or close: circles, cylinders, tori, and the sphere (intrinsic Wahba and spherical-harmonic kernels), plus periodic tensor products and boundary-conditioned B-splines. The Möbius example in the gallery is a 4π-periodic double-cover parameterization, not a twisted Möbius-strip 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 are published for Linux (x86_64, aarch64), macOS (x86_64, Apple silicon), and Windows. No Rust toolchain is required.

Example

import gamfit

# Smooth fits need enough rows for the basis to be identified; ~20 rows
# is the minimum the default `s(x)` basis (cubic B-spline) is well-posed
# on. Use more rows when the signal is noisier.
train = [
    {"y": 1.05, "x": 0.0}, {"y": 1.32, "x": 0.5}, {"y": 1.78, "x": 1.0},
    {"y": 2.41, "x": 1.5}, {"y": 3.10, "x": 2.0}, {"y": 3.95, "x": 2.5},
    {"y": 4.80, "x": 3.0}, {"y": 5.62, "x": 3.5}, {"y": 6.25, "x": 4.0},
    {"y": 6.71, "x": 4.5}, {"y": 6.94, "x": 5.0}, {"y": 6.88, "x": 5.5},
    {"y": 6.55, "x": 6.0}, {"y": 5.99, "x": 6.5}, {"y": 5.20, "x": 7.0},
    {"y": 4.30, "x": 7.5}, {"y": 3.42, "x": 8.0}, {"y": 2.65, "x": 8.5},
    {"y": 2.10, "x": 9.0}, {"y": 1.82, "x": 9.5},
]

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

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

Features

  • Polyharmonic / Duchon smooths combine magnitude, gradient, and curvature penalty operators on the same basis. P-spline and thin-plate smooths use their standard derivative penalties. Each penalized block has its own smoothing parameter.
  • Flexible link functions: flexible(base) adds a spline offset on a base link; blended(...) learns a mixture weight; sas and beta-logistic learn shape parameters.
  • Surface smooths in arbitrary dimension: thin-plate, Duchon (scale-free by default, hybrid with length_scale=...), and Matérn, with automatic knot placement.
  • Tensor-product and manifold smooths: te(...) / ti(...) B-spline tensors, periodic 1-D, cylinder / torus tensor products, intrinsic sphere (Wahba kernel or spherical harmonics), and boundary-conditioned B-splines.
  • Dispersion GAMLSS for Gamma, Beta, negative-binomial, and Tweedie via noise_formula=.
  • Per-axis anisotropy inside a single joint smooth.
  • Shape-constrained smooths: s(x, shape=monotone_increasing), convex, concave.
  • Difference smooths: by= factor smooths plus covariance-aware model.difference_smooth(...) contrasts with optional simultaneous bands.
  • Marginal-slope models that separate baseline risk from a calibrated score's effect, for Bernoulli and survival outcomes.
  • Survival in several likelihood modes (transformation, Weibull, location-scale, marginal-slope, latent-Gaussian frailty) plus competing-risks cumulative-incidence functions.
  • Response geometry for spherical and compositional outcomes via Fréchet-mean tangent-space GAMs.
  • Posterior sampling via NUTS where supported, Gaussian Laplace otherwise, behind one API; conformal prediction intervals via interval="conformal".

API examples

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.load_posterior(path) Reload a PosteriorSamples archive.
gamfit.validate_formula(data, formula, ...) Type-check a formula without fitting.
gamfit.build_info() Native extension build metadata.
gamfit.cuda_diagnostics() / gamfit.format_cuda_diagnostics() CUDA probe results.
gamfit.explain_error(exc) Human-readable hint for a gamfit exception.
gamfit.Model Fitted model: predict, summary, check, diagnose, plot, report, sample, save.
gamfit.SurvivalPrediction Per-row hazard / survival surface.
gamfit.CompetingRisksPrediction, competing_risks_cif Competing-risks CIF evaluation.
gamfit.MultinomialModel Multinomial-logit / softmax model.
gamfit.SamplingConfig, PosteriorSamples, PosteriorPredictive, PairedPosteriorSamples Posterior interface.
gamfit.ResponseGeometryModel, sphere_frechet_mean, simplex_frechet_mean, alr, clr, closure Response-geometry utilities.
gamfit.smooth.Duchon, Matern, BSpline, TensorBSpline, MeasureJet, Sphere Smooth descriptors for smooths= and torch.
gamfit.sklearn.GAMRegressor / GAMClassifier scikit-learn estimators.

Full reference: 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[cuda]"       # NVIDIA CUDA 12 wheel libraries on Linux x86_64
uv add "gamfit[all]"        # pandas + plot + sklearn extras
uv add torch                # PyTorch bridge dependency

GPU acceleration

CUDA support (cuBLAS / cuSOLVER / cuSPARSE) is built into the same wheel; there is no separate gamfit-gpu package. Install gamfit[cuda] on Linux x86_64 when you want PyPI's NVIDIA CUDA 12 runtime libraries instead of a system CUDA toolkit. Per-op dispatch thresholds are derived at probe time from measured GPU FP64 throughput, CPU FP64 throughput, and PCIe bandwidth, so small kernels stay on the CPU. Inspect the calibrated thresholds with gamfit.build_info()["cuda_diagnostics"] or gamfit.format_cuda_diagnostics().

The wheel uses the CUDA 12 ABI. If PyTorch has already mapped a complete CUDA stack, gamfit continues that same stack rather than preloading a second system toolkit. Without an existing stack it loads one complete system or packaged NVIDIA stack. The GPU probe refuses a partial or mixed mapped stack because CUDA context and library-handle ownership cannot be safely split across implementations.

License

AGPL-3.0-or-later. See LICENSE.

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.257.tar.gz (14.4 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.257-cp310-abi3-win_amd64.whl (31.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.257-cp310-abi3-musllinux_1_2_x86_64.whl (29.9 MB view details)

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

gamfit-0.1.257-cp310-abi3-musllinux_1_2_aarch64.whl (26.5 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.257-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (29.8 MB view details)

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

gamfit-0.1.257-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26.3 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.257-cp310-abi3-macosx_11_0_arm64.whl (25.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.257-cp310-abi3-macosx_10_12_x86_64.whl (28.1 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for gamfit-0.1.257.tar.gz
Algorithm Hash digest
SHA256 b4e2569ea6adfc075f7d9f0e018342cc86f5663ecb2b0edd96e85b792f4c512e
MD5 bf0037e912696674e510b3155a31a4a2
BLAKE2b-256 f20367854e487bc8fed4f66216a1dfdfd1f6bb6bb435bce6b29d2800ef7048b5

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for gamfit-0.1.257-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 40011661232344e95f634e2d298373021b36f6396c4fc0b87853390015e48d82
MD5 a3b26b9bf6f6cea37702231dc2ee97b0
BLAKE2b-256 a7d0747f500438636d417d967fee746cfadb75d838dd2c37be590929743e794d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.257-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e2710d84cc28568f41fd34d0cd4a62cb59628bf790055820402480473f1bd415
MD5 ddbdbf4e202d0a54f3924ab4fa0a7cac
BLAKE2b-256 a70d3d68d019c568300f722857d55787dfa882035d44df79ffaf20e949c32864

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.257-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4814007114b0ec10ab2836e83ed2d28e4790a5bdaa85e67be37473eecfbafa6e
MD5 a303b534539dbbbeb0ea06a71f52ebb8
BLAKE2b-256 33ea446ae4b74b603b6784a3969052ed5f75e34df68bb59d5d5611d8534d1e6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.257-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bef8014d8f503ecec82738d8d8a9dda40994d8a6cdeea687919efddc2b7dae40
MD5 53ead688b8c0a728720ecc9f158988be
BLAKE2b-256 a384d88b3a969d48b5f6e5c34c035d8f05d87e4b99878134ae1d1f25bc2d0f23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.257-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b4886dd8d152fc4415abcaf6cdddbe319382d3d8fa47b27807707497d4f55224
MD5 5dff5356d065a64209aa7aa9fe2e4014
BLAKE2b-256 1a1bcc99b0e2abb7bccd1a9ed178d72e3d73ffbd92118624d98957105d76e557

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.257-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e7d7ac04af60d98e761d84317e69714652ac6fb2f63ebe1d2eeca813555ca84e
MD5 81278a5b05b006ab5a3ba9defbb8ba7b
BLAKE2b-256 bd18eb50ced0189b45e3bc18a19589bda3572ce5cc36c14b6a994d7a4b17517e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.257-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 73cb5e9185052da90c4f1c8dcb29beb0f0f7b8a43632ccdbabfb3e0f5bfeed2b
MD5 00f871ad82dc54d6ceb1aa8a974a22a9
BLAKE2b-256 89efcd90e890d80e9be27317aec4d91466d772540d89ef7fdaee89947782789f

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 Sentry Error logging StatusPage Status page