Skip to main content

Formula-first generalized additive models with a high-performance Rust core

Project description

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, 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 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

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 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.
  • Manifold smooths: periodic 1-D, cylinder / torus tensor products, intrinsic sphere (Wahba kernel or spherical harmonics), and boundary-conditioned B-splines.
  • Per-axis anisotropy inside a single joint smooth.
  • Marginal-slope models that separate baseline risk from a calibrated score's effect, for Bernoulli and survival outcomes.
  • Posterior sampling via NUTS where supported, Gaussian Laplace otherwise, behind one API.

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.SamplingConfig, PosteriorSamples, PosteriorPredictive, PairedPosteriorSamples Posterior interface.
gamfit.ResponseGeometryModel, sphere_frechet_mean, simplex_frechet_mean, alr, clr, closure Response-geometry utilities.
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[torch]"      # PyTorch bridge
uv add "gamfit[all]"        # everything

GPU acceleration

CUDA support (cuBLAS / cuSOLVER / cuSPARSE) is built into the same wheel; there is no separate gamfit-gpu package. 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.

Project details


Release history Release notifications | RSS feed

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.130.tar.gz (16.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.130-cp310-abi3-win_amd64.whl (28.4 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.130-cp310-abi3-musllinux_1_2_x86_64.whl (27.9 MB view details)

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

gamfit-0.1.130-cp310-abi3-musllinux_1_2_aarch64.whl (25.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.130-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.6 MB view details)

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

gamfit-0.1.130-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (25.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.130-cp310-abi3-macosx_11_0_arm64.whl (25.1 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.130-cp310-abi3-macosx_10_12_x86_64.whl (26.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.130.tar.gz
  • Upload date:
  • Size: 16.4 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.130.tar.gz
Algorithm Hash digest
SHA256 e386f6ca05effd36739696c062456b7c28ac5885b16ddec6c7702645da1628d8
MD5 864c664290680898078e5e13b03d1d77
BLAKE2b-256 22ea64094667b27d7d6e5a09f25c55a71fa19e65aff71d2e947583b078c79ebe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.130-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 28.4 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.130-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 79e7de269c961964d89012637ac11e80c187203a70e6d8fb1873cc98f763af83
MD5 bbdef381c23afda1fac00117fdb1e3f4
BLAKE2b-256 d343575fc13e807cdf675d9b6a1d6cd104ac190826a28f9250519e6363d41731

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.130-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f185ce52f39f9a67e298fd55cd4a12b5f1243f8e28b21fc8240564b87933f303
MD5 033e5c83d0457b4a0c8653819f56762d
BLAKE2b-256 1531f960c4fa9b1933caee3ddb779688f19dba68d3702adc4a4e31dbf3d52687

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.130-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 51fe77f78326f445a0dc3ed5e31604e0709f0da813862e17cb98d5fb80c64773
MD5 9c63227cccc1415e566453aeb4137978
BLAKE2b-256 222c358ffd5ca10d78ff4750128d195426b26dec57361ef668187496c8253552

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.130-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 909781fcadb9deb48eb6fae7fe407f72b677b75d8cc7fa55d5938b29df79c7a8
MD5 6971af0e477e63e3e950337b63cc6a2e
BLAKE2b-256 a90f42bebcd4052182e3f86697303480cfcaa32acdf6a390af89485245112653

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.130-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4c7ebc335a3eb4d3e6af4693117c0fdf5c3a3b657fb8ec0f9531a32931824af3
MD5 dc3f77bc5cfdd32491ad330f600eb59b
BLAKE2b-256 4ce7f622c569d5ca11fc9d0adaf123c7a0052550db31952875c489dae2191f19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.130-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ad1d47dff63eb6216a97716658f866f9a19bc12d3549ac5593f9c26d070afd9
MD5 312abf31f6b8ec48e34270e8fa1b0b77
BLAKE2b-256 ec2a3324748dbfc157525dbc35ae9f3766230802a8cc1af79cbe8450e43c7436

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.130-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 83acfa5af97fbad3bd1b62b99890cc86495270f3d2b213add4d01f6c78181fdc
MD5 d5130a1b472dd6193c2b22d9514c62a9
BLAKE2b-256 7487cf3ca9757df085193b005008170a8700fb791086a84bf8341a368251591a

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