Skip to main content

Formula-first generalized additive models with a high-performance Rust core

Project description

gamfit

PyPI Python Docs License

Formula-first generalized additive models for Python, backed by a Rust engine.

gamfit fits Gaussian, binomial, 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 Gaussian Laplace for model classes without an exact NUTS path.

Geometric / manifold smooths handle predictor spaces that wrap, including circles, cylinders, tori, the sphere (intrinsic Wahba / spherical harmonic kernels), and periodic tensor products, with no seams or pole artefacts. The gallery's Möbius-looking example is a 4π-periodic double-cover parameterization of a Möbius embedding, not a twisted Möbius-strip predictor 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 for Linux (x86_64, aarch64), macOS (x86_64, Apple silicon), and Windows. No Rust toolchain required.

30-second tour

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 all work without conversion.

What's different

  • Three-part penalty structure. Each smooth gets separate penalties for magnitude, gradient, and curvature. Most GAM libraries use one or two.
  • Flexible link functions. Spline offsets from a base link (link(type=flexible(probit))), blended mixture links, and SAS / beta-logistic learnable shapes.
  • Surface smooths in arbitrary dimension. Thin-plate, Duchon (with triple-operator regularization), and Matérn covariance, with automatic knot placement.
  • Geometric / manifold smooths. Cyclic 1-D, cylinder / torus tensor, intrinsic sphere (Wahba + spherical harmonics), Möbius double-cover demo, boundary-conditioned B-splines. Predictor spaces that wrap or close are first-class — no seams, no pole artefacts.
  • Adaptive anisotropy. Per-axis spatial anisotropy shrinks or stretches each feature axis independently inside a single joint smooth.
  • Composable basis/kernel. Combine a spline kernel with a length-scale behaviour (e.g. Duchon kernel with Matérn-style global κ).
  • Marginal-slope models. Separate baseline risk from a calibrated score's effect, for both Bernoulli and survival outcomes.
  • Posterior sampling. model.sample(...) runs NUTS where supported, and Gaussian Laplace for model classes without an exact NUTS path, behind one API.

Highlights from the API

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.validate_formula(data, formula, ...) Type-check a formula without fitting.
gamfit.build_info() Native extension build metadata.
gamfit.explain_error(exc) Human-readable hint for a gamfit exception.
gamfit.Model Fitted-model handle: predict, summary, check, diagnose, plot, report, sample, save.
gamfit.SurvivalPrediction Per-row hazard / survival surface; on-demand evaluation.
gamfit.SamplingConfig, PosteriorSamples, PosteriorPredictive NUTS / posterior interface.
gamfit.sklearn.GAMRegressor / GAMClassifier scikit-learn estimators.

Full reference at 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

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.96.tar.gz (3.1 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.96-cp310-abi3-win_amd64.whl (13.9 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.96-cp310-abi3-musllinux_1_2_x86_64.whl (13.3 MB view details)

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

gamfit-0.1.96-cp310-abi3-musllinux_1_2_aarch64.whl (11.6 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.96-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.1 MB view details)

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

gamfit-0.1.96-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.96-cp310-abi3-macosx_11_0_arm64.whl (11.2 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.96-cp310-abi3-macosx_10_12_x86_64.whl (12.6 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.96.tar.gz
  • Upload date:
  • Size: 3.1 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.96.tar.gz
Algorithm Hash digest
SHA256 b252d74c8df7dee3a4184625ea8a28f989b691bc5d47ff8826ed99208f16ab17
MD5 528ca47a32e45445015b040e24f79368
BLAKE2b-256 4eea39342229a9741402d643bf11683142362ad77c0196a224acc3d1e0fffe11

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.96-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.9 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.96-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 992a864a5ba6b1a63548ba6ff6cc7aabe7bcf7ec94a8637b83747063c154096c
MD5 0fe594cf002528a985c4f572b86bcd3e
BLAKE2b-256 1b1f4f30e0f146b0a16a682cfb455a0964daba9900699e69f7bd804c3bfe21a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.96-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 77b507272a8db14cf8fde02e4133f0f67a862897f42bfe1c43efbdf68456d335
MD5 8a3e3adc64661269f6d35941bfec31e0
BLAKE2b-256 f408e198741fe88f1d6deed49ccadd94f08c563d0cbc95b8b2b4e4294608f50b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.96-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1673cbd1c8bfe05959809116e808f954c4ebf24aff16906a851c6cb99b058f6d
MD5 c510f2596446d6d3f6cf21ffbb04610f
BLAKE2b-256 3e714c4738a38d05c0f8c2d705ecc04d964fec34e6f2a0be7d68309f42c9bb41

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.96-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91c41d85393ce4b951442b10f15bc67f918aa95115afcb212a720a88df376a04
MD5 7ed62c819367ae8d43989a2b64b2c119
BLAKE2b-256 4c662f9faf144d12897f80d0abbc7dba58b85d04ea6fc7474bdda3b2a6ef3ffc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.96-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0021981d41d22b458251a33d0f68a2b262bc30e4ea1c23614083d5a2156128f3
MD5 ab6aea52c27dc52356fe9b5394417fef
BLAKE2b-256 bde08efcd9253949f479c3cd7150a7f0a8332244c74ebc209edd5dd045d1b948

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.96-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7cdedabc36c853791d585f95d0c8f9ab2007ef0f0a44682b8a0382a95a58cac
MD5 82040bad8f29da2706c7a8d46f14e573
BLAKE2b-256 f7b88efa97537353cd4cf8e212edaecfa1e2959ec4d5eccef96037f8d719d86e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.96-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7139150483fcd4338d19c3072116a58800ec9e50caa7b68b5398f6dca9602182
MD5 a4e884f9265d47a6ba2c158732112c8e
BLAKE2b-256 bed1df3b6f7e2307a47b70c4175a46c053ae4affe94348e0c5e22719d7c1347f

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