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

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.94-cp310-abi3-musllinux_1_2_x86_64.whl (13.2 MB view details)

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

gamfit-0.1.94-cp310-abi3-musllinux_1_2_aarch64.whl (11.5 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.94-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.0 MB view details)

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

gamfit-0.1.94-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.3 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.94-cp310-abi3-macosx_11_0_arm64.whl (11.1 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.94-cp310-abi3-macosx_10_12_x86_64.whl (12.4 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.94.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.94.tar.gz
Algorithm Hash digest
SHA256 e6b61d076970e5635b4f7d057e497eda2f791ff70a2a834fffe4cbc2455304e0
MD5 859d9ba933b1b07f93567273d5280f01
BLAKE2b-256 5cefd5ea2159d00dfc30b81b102491915465d84282ec8a918ca0b6fdb20293a7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.94-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.8 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.94-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f874db4a521f96b56088ce1a729b6563a13b81c80304d42d05ca2e8e905b03fb
MD5 774c131ce6a93413652b3ec960c43c38
BLAKE2b-256 3e5939f2b35523675b24f82a72abbf84f58b992b1e0106601e25ed88a2b247ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.94-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 04d8e8583d289c74f2bd496f8ea0c0b561195c2d0b6ad0c48aa809d556c88c01
MD5 66cee6c394287e79ff8208e027e64527
BLAKE2b-256 92e83b667423646c028bdb877b5abb347caebff65cd9dc36b4fa1a97c67e5042

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.94-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a4d1c0c419e8f35796b8f36e2af326c282c96c6ef1f98e4112bbddc24f65b8a4
MD5 55faa277cb62c93521b34a6951ce3162
BLAKE2b-256 0bff954dabe79ef922b6e4e2aec109a6c94457bff0130c00b6b03a58bf3c4c2c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.94-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 66c19ae84d536bb96c05b25c68441658115bd193013cfb95f6305af95b9b1800
MD5 a8a6c2f7418026c582358d4ade8df025
BLAKE2b-256 d77ad69a643932b5bf0df43a94e2b653406886a20ec90270f10db3ffb7c97353

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.94-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1b9ddb339a5b201d38e08a52e0a91b127c7694ebf7393901345ba978f10b539e
MD5 c26ecd1638643bc74bcf1eb74c98efcf
BLAKE2b-256 cb67961eace4e219fb84290596076bc65cad00b96d0547ecc75d71a14729cd7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.94-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 18b69ed83a0305379b53709443c698cfcc705578d06afff110970a3f117a06d0
MD5 ce48f25b8fb6dbc6f6d432609e95019f
BLAKE2b-256 93b73d55771ad37b997ed7be2ac044a97441817c41a38f84528a377f9fdb324c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.94-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e3746c410e6c2e6953ab1a945a7b156d8ef0fb1e1100fe53148c3945bacebcaa
MD5 2ef4869d800ef5e58b775678214676bd
BLAKE2b-256 9f8bc481e191072e7adb42086299968ef298a8e4343bffa704b4558ab4fffdb3

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