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 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, 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.90.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.90-cp310-abi3-win_amd64.whl (13.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

gamfit-0.1.90-cp310-abi3-musllinux_1_2_x86_64.whl (12.7 MB view details)

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

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

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

gamfit-0.1.90-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.90-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

gamfit-0.1.90-cp310-abi3-macosx_11_0_arm64.whl (10.7 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

gamfit-0.1.90-cp310-abi3-macosx_10_12_x86_64.whl (12.0 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: gamfit-0.1.90.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.90.tar.gz
Algorithm Hash digest
SHA256 0802bc7129e27f0a0fcaf2c387753300c6480e02da795e1211c1153d14035240
MD5 ef95c5c436ded4668a03132308f54f32
BLAKE2b-256 05819c3e943ce998f4d71eb931027a2b0909e2f2f6c115476ed32c41596d5cf7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gamfit-0.1.90-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.90-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5703be80115c7c8f85c68aec311a91d874b9da27a73c242e3f527c3a514fc3dc
MD5 997af223660d63a4160e283cfc6c91b4
BLAKE2b-256 e23cbc625bc0393118912400b4f7f30934112c49a17c01f4b172d46c173a6542

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.90-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ec0ccabf121e7b00270edfd9cd006ff8438ec06601cc2d8009cc835839b08834
MD5 e4cdb6097b3057ed00414a57d38ba8ec
BLAKE2b-256 73cdd1439bb4cb877cba622eeb5dbd31ce9f7ece3cfa7dff437be4d99504bbe9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.90-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 105ef6ebe85ebf7ad1ebbcaab294c367c3154924c10c029aabed6cd357ea168e
MD5 2a7316fdbca7a7721e9969f522eeddc7
BLAKE2b-256 ecab6b51dce65d3dda40964e08c8385a71482ae290e3f25ae9153f5b49ef1aae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.90-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 44a7d27fd63b77e65d22f27c7c1543eb9e0281ae14d7ed7fd18b5da2631a907c
MD5 fc94789105f60c1fc0428fc71ddc92d7
BLAKE2b-256 6061aec92089b2c5ff7e90e933f67f0def17507bd7ed4490c100e2f40bcc35c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.90-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f2fa7871284ba74c1c474951039453af1ab44a8ce7d1258d5a214e209e96eb7a
MD5 a61e29d64026fcd29fc2293c0548ec2d
BLAKE2b-256 8af74fafd771eb0b96f85d8778ea03d169c2b0c48ad79b49f38cc1552724d916

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.90-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bce1aa7b13a3c94638972d9e8519bc7dc5c5c84748f627a624c9d99b8d166563
MD5 4b0c3e86f1b596c613913eb679fbc281
BLAKE2b-256 5042daf59cad00db6c95fb0253d16af53b4ab4dd484070d37ae3f6b8319d6ad9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gamfit-0.1.90-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cfdafe71bf8c3313282ae1c3c1871d8721260a4cdd34866ae7ac9821a1612c7d
MD5 e20be3993a5cf034de51b76ce4639d75
BLAKE2b-256 4bdd14903a7dd4cc49d061bf1449b4899d2cf30f566bf27897a3d46d0ef9191b

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