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

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.129-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.129-cp310-abi3-musllinux_1_2_aarch64.whl (25.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.129-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.129-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.129-cp310-abi3-macosx_11_0_arm64.whl (25.1 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.129-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.129.tar.gz.

File metadata

  • Download URL: gamfit-0.1.129.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.129.tar.gz
Algorithm Hash digest
SHA256 9ec7957e619ea21228550ead28cf09f82d9dcad9e97e8f9aa91b52c057bac473
MD5 ab33975c6b0545e973a96d1cdfd12d0b
BLAKE2b-256 f756fd1bcd84911f9d833838de20fd1e1de673a721f9353b0cd915fb34b1fa66

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.129-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.129-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1226c08b75230fa7b04650694d55c40b6cf6f15b9b8bc17535041cebc7954b05
MD5 41352b9be7172ba93ac54512f1d2b21e
BLAKE2b-256 24debe5619b99c2b981df04b64bdec85af8795cc9f3518453935efcc03cb2c48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.129-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f4c627c9ef867da6d07215b258c8c56a458e3eeb9a0da3a31c15b967e76af28f
MD5 2e08786839b551482ec26011f04204f4
BLAKE2b-256 886e62149586862017c8d81f76b9eb04838fb6eed0c44fb5c0c499402442dff8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.129-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6533c36a7ab8f761085f3c8e4bd77bea367975f9d8478165a83d72ece3211250
MD5 7866ab329782d7e49e86389d0604b9c2
BLAKE2b-256 861bb8f843be0f668ddd4d18f968341e68bf05136b6eb5968b58eb9ac5e630c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.129-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 23ea146188101a5c13e684ac3b5a99b1cd658ef77c5d887f47f0038f9f7a6f25
MD5 835c0c3bb72258c20e80ac21e1e313f0
BLAKE2b-256 6e8c97e7696e11535bdbcb94bacac007054c51f092adf242a9eea1454ddd8a95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.129-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9da45a86a22185e0e5750a4629324a4ec937be40f5427eaefc5e6e8fa845fdbc
MD5 a3a45c8d959c0475c8c69cd8569e6b31
BLAKE2b-256 b30022105ccb2a2489c8d8436a992e94f449ffb0903014da4bfedd2b1dedac39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.129-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0fc702805b1dd64e185dc72daa15aeec5bd176171570ceff54ef4d745ee5daf4
MD5 0e2af3edca87eeb4dbdcceb15ac70368
BLAKE2b-256 2de150b51140c9f3a21f2a7efdfedad86ea9d65e0e943cd6c1585eab6cdb888f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.129-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7ab1b1c6256c1371f87265a98a34fb773a44dd40470ac46f41e7fd9853f6da88
MD5 dfdb5131518906b344d066e2c25b64e3
BLAKE2b-256 79935b4156595fc22158fc518761043beafa73f6d9173341e27df6523024d58a

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