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.21.tar.gz (3.7 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.21-cp310-abi3-win_amd64.whl (14.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.21-cp310-abi3-musllinux_1_2_x86_64.whl (13.5 MB view details)

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

gamfit-0.1.21-cp310-abi3-musllinux_1_2_aarch64.whl (11.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.21-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.3 MB view details)

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

gamfit-0.1.21-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.21-cp310-abi3-macosx_11_0_arm64.whl (11.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.21-cp310-abi3-macosx_10_12_x86_64.whl (12.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.21.tar.gz
  • Upload date:
  • Size: 3.7 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.21.tar.gz
Algorithm Hash digest
SHA256 3d04134392581c689e86a47439f9ebecfb14ebee5546c9d644b76898b75f70b0
MD5 e7a959da60c546db865c84da0dde135e
BLAKE2b-256 48b52ffe0f58c18be2ad960d82c93de588a05578fc9eca65fb31a051483ce2fd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.21-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 14.2 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.21-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 db311fae4771666a85b7cc077d174c9ee7f449bf70b06f5bde1881b0775fcd58
MD5 9b5129e3c4969c130303531d47299b78
BLAKE2b-256 e04ed888dac2db7a74092db4b3cfa2bdba571817a4920eebf709261e6268ce00

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.21-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8024c5186210b84cd3d114c5d6738c6a175ecbd37c93ec6b2f31fbefe0f8d800
MD5 e2bff380fa247b183ad2a8834db25133
BLAKE2b-256 121642dc0e76a9cb45ad1a23c21f11699320291d4fc9db0a2b3ef97651caf35a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.21-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ad9a139666f3e6b7c098e934fe3567ff0185086132dfde1f6aa4b3683bcea253
MD5 15720bcb7f90da66b9749009d142fb11
BLAKE2b-256 0a49dfcbb331107a504e49c2efb1251276691e51051d629b638e7ec0348dbdc3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.21-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 74a07a6fe6f2596035a7c7d6c7ee45164a1bf171528a65d52e22342fddc8e878
MD5 b3c8f10e9b4378eb0ad657a6ca197339
BLAKE2b-256 2fbbc14099081f647501f1a2252b2aa495e6405606e2937ed62fbbb2660ae01e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.21-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8e12dc4fcd5519f7785819d923d4b02b68993c753b447d5e1e8b1832f2c8a9f5
MD5 3da58914dd6b1506b54b57f434492ad7
BLAKE2b-256 08f7b0a7be0d0a058a2c9e123b5fc4d10d36bf04f5d743bcebd5a254605f3d65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.21-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72d9b6772adcdb358c5d34a0701f4ac3506c8c6b155e1c21ecc6897924a715e4
MD5 edf005b22b1a52505ba31ec9e163c93d
BLAKE2b-256 25501b7ab83ea08a342cdee05880c431133ef7b7d1057040ce5699102082af89

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.21-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a305a974b23be44b6423c800c2d257bed320217491d46e64afcf3122baf9481e
MD5 df5d495438683c10918c9df06c7da6a8
BLAKE2b-256 69047f595b3bea651596c0101716003c721e8e65d68da13be7e1e652b7254c90

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