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

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.258-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.258-cp310-abi3-musllinux_1_2_aarch64.whl (26.5 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.258-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (29.9 MB view details)

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

gamfit-0.1.258-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.258-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.258.tar.gz.

File metadata

  • Download URL: gamfit-0.1.258.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.258.tar.gz
Algorithm Hash digest
SHA256 013a694e08e4d5a50c4da85e6d1f4cac4409e8ff0f9ae67a78ac80ebfe693c4c
MD5 39c10084318367773ec6bbcefe514d9c
BLAKE2b-256 143a780132c8da5312ba3191300dc8ad33c515090c17b29ac553a7c413158b60

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.258-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 31.3 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.258-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 24cffd7db0a2a69266b72ce3d05f25d98b5a24d01f91d41554d2aa7c78c4195b
MD5 1cf50d5d6a77535b78c5a71bcccefbef
BLAKE2b-256 388095200cff3e89baedd8b6ccc4bd02d974961e5e43cb6e0c58361719eea51f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.258-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4fb99137b690ef771f95fe289491314e37179c3a3845728d3410b06ff1a4431b
MD5 aeab98482474e1d9a71a1392baba3914
BLAKE2b-256 58a3b491dfb0cd51449a8ae4d820721ca3901be42ff4daed157df1b257944031

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.258-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 751b6e062b506dc381f56c82a70f4083103f3e8c87163ee0fec092fb9d47943b
MD5 7918cd41d43bd552b2097e860d374feb
BLAKE2b-256 308c5528fe801849a4cb7f93da96530e7f6456813417bef515e4705c6195b4fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.258-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 186d93ffa67febe70103377b06af25d9970f28630c64926eb5f71485997dcebe
MD5 95aa680f980ebf17d83da5a7f66b837d
BLAKE2b-256 53bdb93127c814215479f6be23e7a0d3a67ca3b6ac3fa6bf10a69b2a24d4a355

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.258-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bdbbbc1bbe72b4b1ddcee992c1065a46b37471a4db7010b2de18834883249078
MD5 fb68105aa08481b1a51083b0081c4efc
BLAKE2b-256 022f4838ddb3a02a286c20ebcbc7c8f9da0dd9ebd38b1e7a97dd070c693dc894

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.258-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4cfbdd1e65592d5035bd0a4e58ba7ed69ee2cce7a6040a4ab68c33b0b83e81c0
MD5 7bb79db90812d05beb9be9c7e426f112
BLAKE2b-256 6035c31df21c63081c8b158e301700822cae41c34e2d190251ecd7e489f22710

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.258-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b75dbe8a85919f3fa35252971ab4d6cea08205efdb4c7ad9b255777cb960caf7
MD5 07c68b9abc3ae61e9c22c4314fe1728a
BLAKE2b-256 74e14380a8901f0fa0ea3cc6953afd480544f64ca3a03a88604605ee14c06ef9

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