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


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.112.tar.gz (3.3 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.112-cp310-abi3-win_amd64.whl (14.4 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.112-cp310-abi3-musllinux_1_2_x86_64.whl (13.7 MB view details)

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

gamfit-0.1.112-cp310-abi3-musllinux_1_2_aarch64.whl (12.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.112-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.6 MB view details)

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

gamfit-0.1.112-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.112-cp310-abi3-macosx_11_0_arm64.whl (11.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.112-cp310-abi3-macosx_10_12_x86_64.whl (13.0 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.112.tar.gz
  • Upload date:
  • Size: 3.3 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.112.tar.gz
Algorithm Hash digest
SHA256 5fe9f46f7157ff76e0b34843be706374ae5c56e9e3bb8270ada31353c82a19db
MD5 683dab3da4727db01143ed741d356b50
BLAKE2b-256 ecdc228b279c1ee6ef68fc174b74c0b91c4e2f7c2a75cd06abfc22479151ca04

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.112-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 14.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.112-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 0d4941a2f21efc31b1d429ade99af461c13e664294d8a30562725307b1770720
MD5 985c20a31a49c93cce237c91724c9b0c
BLAKE2b-256 96d4c7dd16adcf72fa133d44e536813f55e07a6fb3a5f581b305e2044e37eab2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.112-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fe45cf8f5e188f4629005bab2ebe50eb91f30e4fa2c31e3bdb2b4c919be85a0e
MD5 0f209eb241c41a66a1d30b9dab00f97a
BLAKE2b-256 cd216f54614a91ab268fc468aab7e40a94d86071c6d96dd87468ba953b0804f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.112-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 edfd5ca976d11edc090f454ddef9be106fe6a6c3b5dff6406922d55552288014
MD5 209c95d83ff12b5edbef42ff5ea6e848
BLAKE2b-256 37a31fe6f2c1b9ab6b1764ae66910be51655e1561c9975ffa394918e366a374f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.112-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ad9034fe9b4f70217d7c9bb3e17fdfba1b5fea60aec48d5982e33b4d522faf1b
MD5 71f8d68ade08f2aedf69534e5c41dc1d
BLAKE2b-256 c68ebd0633dba8d8216d08c430f5804caff33ca18ac1c18994c8e9106e9b00a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.112-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 808d73855f3e2fffe73c8f2bfaef5688c2991c5c42003fc1aed3913913cdda6a
MD5 0d595c210f816799afb9528f619664da
BLAKE2b-256 a7fcd3c49fbcdaad81cdf162bd6521850a07767cc067aabe72db0f0d14d4e87b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.112-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 48dbba157e001c4bbb86d6bdd01b96d1271af3195d3d53b81d0ad76161b77fbe
MD5 1a30db3194f8072b7d3568a2f0ed1983
BLAKE2b-256 3547948928c0d4b83e8eba37e008e8e896289172e2b63cb67452ce2c89da4ddb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.112-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 41d0581b65ef18e3e643d03a472fc0986898cf88089e5456fcdf5c2efc2393c8
MD5 b57badfe05a191384ab485a23ac7ddb8
BLAKE2b-256 6ca674ff0c0df2044eed6ce479d2b0469de24e8805c1eda127956eeb3bc6c322

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