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().

If both a system CUDA toolkit and pip nvidia-*-cu12 wheels are present in the same environment, gamfit warns once per conflict-set and continues; glibc resolves dlopen(SONAME) to a single file, so this is usually benign. If you use gamfit with torch, install a torch build whose CUDA suffix matches your driver.

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.230.tar.gz (8.8 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.230-cp310-abi3-win_amd64.whl (24.8 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.230-cp310-abi3-musllinux_1_2_x86_64.whl (23.9 MB view details)

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

gamfit-0.1.230-cp310-abi3-musllinux_1_2_aarch64.whl (21.1 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.230-cp310-abi3-manylinux_2_28_x86_64.whl (23.8 MB view details)

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

gamfit-0.1.230-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23.8 MB view details)

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

gamfit-0.1.230-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (21.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.230-cp310-abi3-macosx_11_0_arm64.whl (20.2 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.230-cp310-abi3-macosx_10_12_x86_64.whl (22.2 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for gamfit-0.1.230.tar.gz
Algorithm Hash digest
SHA256 96b1a7748d92337d1de560647abf3a8b45a3428370ab84c04578d1a24d3c7b91
MD5 a193eaf48714502cc42877de39a7b900
BLAKE2b-256 8e5085c52d4e40435e87ca507ba7ec6695616c7040f1e49ace590eda02f394bd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.230-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 24.8 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.230-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c971e21642d6ba624d63650eb7d87869c5b62f72b8ae87c8486c5e59653f2c17
MD5 4b521f1db89ca5dd698ad997614a9ee5
BLAKE2b-256 1e1ad391af6347cedb4fc2644451928a35de6ab7927449351b2606f318152404

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.230-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fa1cdd82a9772fcf16795833f7ff17a5a5932aaeda3ec98d5dd4d1d8f0c9acaf
MD5 f715f2b567bc96c8c3afe171932509a1
BLAKE2b-256 225806ee0464ee84253a1633c6878853835301d8003484e3b257b30c4200b997

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.230-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c97d5309ce727e84c310425a79122131942090354f0dead7e7fa23a99843acfa
MD5 c23ecd364adfdca223d711554448aa3b
BLAKE2b-256 112f81a2166dfcf80d97fb53ff76c0991be60b2d25fbbf208e357541c0c6d336

See more details on using hashes here.

File details

Details for the file gamfit-0.1.230-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gamfit-0.1.230-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d666de9ad2dc16615d9774ed72d97d73d0260c921769592aad96f5246d075676
MD5 2418f3f0ca7d36eb3024757c048b7fe3
BLAKE2b-256 bc68b66729c5809cf747dea22a2476fde8017d72e49cccf257185342388ae98e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.230-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 03e4ef5bee4e96c51f7aa210d4b7e07ea0eef525a2e0605a35b92e57d605116d
MD5 69ccab95e9d428415ec2ba65f139c99d
BLAKE2b-256 fd16b0b00bb2fd013554b04c486894a5bfddd22401f32e69a711be00f23cfe39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.230-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0da87c53d1f9a44ff1cdb53321696f74de0cabc04353fc65a778d0858c6874d0
MD5 fbea26ebf956c7749d5c50b87c8d00fc
BLAKE2b-256 947e7baacc8e59606a256f1a1eee188b1d56ad6cf0bcc9d15f57d62f4d0dcc99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.230-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ae5d77a3df43dec18c6c68ece920ce32a4831f38529313aec1c229494b2883b1
MD5 ebcdcd44023750b622a916885c8d8c2a
BLAKE2b-256 0345485cc3b89eae385f75e95cb088e50256c6556a64e8bd04716ee5b4949b24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.230-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3c09a5ef54c720e91213e15c8da225cfd33a99f0e49639470046ee27c06a4bd8
MD5 0c3f6c7ca55e44d4e8fa2fcf8d17662a
BLAKE2b-256 08c729bd9caabf694f26df08f88fa1a4c39d4939b2bbce5e89db709f2e2d5a24

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