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

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.111-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.111-cp310-abi3-musllinux_1_2_aarch64.whl (12.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.111-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.111-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.111-cp310-abi3-macosx_11_0_arm64.whl (11.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.111-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.111.tar.gz.

File metadata

  • Download URL: gamfit-0.1.111.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.111.tar.gz
Algorithm Hash digest
SHA256 4d9084e68e4479c1a13e0abeab9c8cb45422954f36159027559cbc2294ee9e23
MD5 ac6b99cf3f9524fa4a35cce3c61a4cf3
BLAKE2b-256 c76b053afbeff96dd916a8e616cc4759a4f726fa444f26802644dacd4d76b28b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.111-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.111-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 b371d43127ee57b1843633918b8a1af86e1e7174be18dbb4db446eabbd069cb5
MD5 e78df8c74d4bee19588c8990e5730dd9
BLAKE2b-256 9c6cc4f39af262602d4a1e9c0b758646186b4b1d1028ed4f0f32902d296866c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.111-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a2363773e0dea94cf437ace12c67cd74cd9576becf2058ad069fe904ae4de52d
MD5 4dd5fcdf293877bb2a37d5206f6a2d1a
BLAKE2b-256 aefad6799f5dc86399cd9c1c6232772c6c3cd846faed282dd7e59d2b6980e29c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.111-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 81806d4c13a454a48ac3c624c3547164394dacd15597c3be13f6a806f83332b6
MD5 6396c9b694a8525e82e95c2d608706c5
BLAKE2b-256 339e776ba971f147cd237f2471372773ff79a2ab5be3a1fd2729bd4e3faf9efa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.111-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c212c0bff26f728f2d91e62c693eb392a089e32bb294ac262eb890a183e8a0e2
MD5 d5a237e96067a74d7b6dfeb6948b3ddb
BLAKE2b-256 4423ef1464a67b6361f601524436e96de4e5ceda96280860d5a308c199e07e49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.111-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a9ab37ec96bcac92d20ee02e6cf41ef127b8dfdfa67363ee6000ee03f834579b
MD5 b2e44e052ad93023f0d8ce6904447416
BLAKE2b-256 11383a7ff47388df5f7405e854008a930c063c0f6fd54366152518ebe1cc3955

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.111-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b27442929ed283d6430ccae6e5edcace4dbce077d990b151e7785a7f7df565e
MD5 4e3977f0a64de26128bad9ac1de44521
BLAKE2b-256 072f28e07b5a468f678a350df9bf94e28e4a5b121e092eca9d017295a3d9b99c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.111-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 03cee0b4db801855df997879c93c6e848fafd42a71ffc831711ee7a5609088ba
MD5 82515cfae3fc9b64877bacc11ce58c72
BLAKE2b-256 a691666b86a1fe9b06ffe0bba2dd7f2cafc5e7bf9573d6f231d2f972671ae966

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