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.119.tar.gz (3.5 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.119-cp310-abi3-win_amd64.whl (14.8 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.119-cp310-abi3-musllinux_1_2_x86_64.whl (14.1 MB view details)

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

gamfit-0.1.119-cp310-abi3-musllinux_1_2_aarch64.whl (12.4 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.119-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.0 MB view details)

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

gamfit-0.1.119-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (12.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.119-cp310-abi3-macosx_11_0_arm64.whl (12.0 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.119-cp310-abi3-macosx_10_12_x86_64.whl (13.4 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.119.tar.gz
  • Upload date:
  • Size: 3.5 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.119.tar.gz
Algorithm Hash digest
SHA256 f22cabb5dafb45753152c625b03d30ee1ae62be034ffb73b1415e5de174f18e0
MD5 7f56811afba663547c9f53f1c43c6207
BLAKE2b-256 23614fb9fcd9479daa89b790a504283db620ca2012ab98e42e2643972a126316

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.119-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 14.8 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.119-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6e81c1a4e23353387a3e406bcea331ec13327d0bd5e8d0e8ac64cc00656ad100
MD5 e39557d07ff0ac2f556ecfc7cea59a20
BLAKE2b-256 8e9bc3e7c6ee62a2943051f0e7a1c867da1c2df6d39c99232637386f1b39a8c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.119-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 198019f05164a70d2fca1391905df77f66ce1b160429de1488029d0bfab0cac9
MD5 98e9dd5b9bff900fe8385e58cbbb730d
BLAKE2b-256 2916c6657cbf72e9542ab659859f79515445bbca3dfddb69d93f74882e60adbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.119-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f0f36bfe3f5e306b4e6a1b5fd2373eff031c57f6270faab44c3b59a91afdd078
MD5 b08ef7a0e02683db21a4dfce93c2fc54
BLAKE2b-256 de65fcc8313c67bca8217992d4af153209450aca8922e9fdb75b93c4dd2a215c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.119-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 189ebb920d8434d9592888293a77dcb0fd5c94197718309164a10545d64cc2bb
MD5 7d43829718b69eb0bdd1db7cf71e65b4
BLAKE2b-256 b2400ea67c7efbfd3e7514d8d0faa8625ef5535612b6f6e1ae7145c7ac7bdc01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.119-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6c49b796a39878dad834442ae3eae60b9a491cb7b5191856157e1636604dc9c5
MD5 2c5135db96a92114ea23dd4730b0eac0
BLAKE2b-256 4cfcbdb07f925cb6389ebaa610860ec7896deba9ffcd4724132f974dae750618

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.119-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9f0ec177f7139e158be60aab0b328602e555ffa439716265a13e5ca3913f2832
MD5 6f914b59ff4b0d4716e37e0105c645b2
BLAKE2b-256 85c7aad1b23104a7ce1cbde463b6f31a6b21b3842cd4c2f4a545f74b1c71fe83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.119-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cb64bc83247a536eb2c3913929cfb6c46a9985e1f1be4064d4aa3095002aeaf9
MD5 7050579be8d4d2a6ce9ee6f70a852a48
BLAKE2b-256 e701f68b15e272f7cfdfd61dfe0c249a7cbd34d30e5b6b0700f533ab7522596f

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