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.100.tar.gz (3.2 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.100-cp310-abi3-win_amd64.whl (14.0 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.100-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.100-cp310-abi3-musllinux_1_2_aarch64.whl (11.6 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.100-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.2 MB view details)

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

gamfit-0.1.100-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.100-cp310-abi3-macosx_11_0_arm64.whl (11.2 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.100-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.100.tar.gz.

File metadata

  • Download URL: gamfit-0.1.100.tar.gz
  • Upload date:
  • Size: 3.2 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.100.tar.gz
Algorithm Hash digest
SHA256 c270d774a86d0618abdae8e9d93ea663cd07ebc2d896001a3aa0613477e1b73a
MD5 9a3e295fbfec6ecb1681c899dd14e8f2
BLAKE2b-256 c6dc836562f2594903722ab072c68983ee20e4f48b08edd100ee4e6843116595

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.100-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 14.0 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.100-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d4dbc9bcb1ef1ad8438140548bbd3134be41aa3bfc8cd5a083154f7bf372a7e2
MD5 e10ebd686226981f80103bc211517135
BLAKE2b-256 9a16c7c825c58029b9136e3a8be3b84cfc0b232ec097f874426e3a73b94c4713

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.100-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b66b117fb48bdd64f1ecc923107b2c204610d75998e2ece5bd4cc323284ea18e
MD5 a1aaeeac4b923c80983d9f7b273ea11c
BLAKE2b-256 b7a5ccd2e4826be5a786f37ac708510b7dafe2fc85cbd3e391fadf612056648e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.100-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 cc4fdc797f6a4ca79894c7540e194e6dbfcb9f9d7ae8e6ddc8fbd39191dc39da
MD5 a16b6c3ea2966565215c233725c1742c
BLAKE2b-256 03031bb04552f7a37da6bf719ad96d98e07689ece685a1c0bd83a20391477293

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.100-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f7b42b5edd1d20685a50518d88c9c0601bb3084d09f8fd9d360a09dede94d10
MD5 3be867d895baf62189e905e86bfd372d
BLAKE2b-256 e1007997fdb6de9e7c927138c303a663bdd4c3961f7ca258148c0fe06b00a2f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.100-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 22c4fff9a36478a6e58180c6cbf2c9f4e1ebce4df0f08ddcb0678f864f019b41
MD5 d14129bf097c4e633b7ae9fb8046ddd9
BLAKE2b-256 0a8f1ebc14713ec10972b8241fe5287c5d9dd65c049f5f28525b8d0c2fac81e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.100-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a65e69917cc3ed4500413560f56125ef442b9f1038d57a69cbbf473c30f767b9
MD5 9f4d138085f6832777454c49407ae9a9
BLAKE2b-256 01c175a5e517f83070cf055404e4976062519c5f11cb01ffbdcff7b387e20177

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.100-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 78eca6c6eadad64d71c3524b4da431eac48e29faaab9f549adee9299d4ecbbd9
MD5 5b6bc2b7e6e77b950bda231f0d0e1dbb
BLAKE2b-256 583e6d59c60801a4fc2ab4d078c0364a2965f47ff28946ebd58c7f5239976cf1

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