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, with a Gaussian Laplace fallback elsewhere.

Geometric / manifold smooths handle predictor spaces that wrap, including circles, cylinders, tori, the sphere (intrinsic Wahba / spherical harmonic kernels), and one-sided strips, with no seams or pole artefacts:

rotating recovery of a trefoil knot, latent-free loop, wobbly cylinder, lumpy sphere, bumpy torus, and Möbius strip 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 strip, 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, with a Gaussian Laplace fallback elsewhere, 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 predictive 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",
)

# 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[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.81.tar.gz (3.0 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.81-cp310-abi3-win_amd64.whl (13.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.81-cp310-abi3-musllinux_1_2_x86_64.whl (12.6 MB view details)

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

gamfit-0.1.81-cp310-abi3-musllinux_1_2_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.81-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.5 MB view details)

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

gamfit-0.1.81-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.81-cp310-abi3-macosx_11_0_arm64.whl (10.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.81-cp310-abi3-macosx_10_12_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.81.tar.gz
  • Upload date:
  • Size: 3.0 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.81.tar.gz
Algorithm Hash digest
SHA256 23dd92ada943916e86cd234f4a4bfb5163fe7767810dabb8681b5fcdf394d6ab
MD5 a8051bdbb0980c845058d7b4a5921afd
BLAKE2b-256 f8b1b34e3819e09ed66154d40f635309de91369491ca362ffb8e7c2b60ed1c87

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.81-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.2 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.81-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 afc996c167a102317ac51670f58dc92045d007e4024444e900e8a51a448e5ae9
MD5 aadf4e5bea6c274e9e6249fa0806f728
BLAKE2b-256 5e81a42f68a9d94266abdfbc8a94023fd6074065980f9e27291d6cd24d8b010a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.81-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1496209519f5b8e6d203ab9995251c6b0cc031873a88ffa7ca080dea93e969a5
MD5 c0b061bad50325243d4bcc4f2a26f1b1
BLAKE2b-256 cdfc44e98509139d50d0ee49a615ba7cfd7c31de5c948f96c512d480ea447af3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.81-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 57c259b5fae604546b6c41e48a22e94b591dadae36fcaaa15b31f93a8cd7c009
MD5 ff88eba384a81f762457db03298fd05a
BLAKE2b-256 870f3ea93daadf8603757ef18513685ecc60c76626bb19b22928560d1fa42918

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.81-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cac3a818f21537f11e28fe38fd48f0c26609bed4041b352b004706dc676efc2a
MD5 6f8348e2c516cdbfe4ecdb1a2c1b6be7
BLAKE2b-256 8c5f9f093506751eef17a5aec71c24cace3dbabfa6da1669d70666a9d24d39ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.81-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f9e6f2a9b8f7eb1bd34e303c0405ef07c20e807163410fbb1844f823fd951baf
MD5 0d619c58e16eb8b82b120939db0806cf
BLAKE2b-256 1e6e0b32df63130935f5fa970210003c62ab12ab846b9c5ab1c97b85bef7bb52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.81-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 099caeb14a646809f8109c179e8fcc5513aa3d74e23da946fec4b4a268d7d3b1
MD5 f6ccf9f67507815ac76a4af276e47a23
BLAKE2b-256 0b448f1ad9d4c731414c39f0da76cb5538648616b2bce722fcb9bdf32b2aee1e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.81-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f632fd630768eb584116465facc6aaf6f2b82fc825ff299877342b882f28b143
MD5 212329e3d9132e2b5f0333904f339dbb
BLAKE2b-256 467b7dad79f898833a13682bfc2dae70c96d8185eb7c99a88ca50e97c60a8269

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