Skip to main content

Fast Generalized Linear Models with a Rust backend - statsmodels compatible

Project description

RustyStats 🦀📊

CI PyPI Rust License: AGPL-3.0

High-performance Generalized Linear Models with a Rust backend and Python API

Codebase Documentation: pricingfrontier.github.io/rustystats/

Features

  • Dict-First API - Programmatic model building ideal for automated workflows and agents
  • Fast - Parallel Rust backend for high-throughput fitting
  • Memory Efficient - Low memory footprint at scale
  • Stable - Step-halving IRLS, warm starts for robust convergence
  • Splines - B-splines and natural splines with auto-tuned smoothing and monotonicity
  • Target Encoding - Ordered target encoding for high-cardinality categoricals
  • Regularisation - Ridge, Lasso, and Elastic Net via coordinate descent
  • Lasso Credibility - Shrink toward a prior model instead of zero (CAS Monograph 13)
  • Validation - Design matrix checks with fix suggestions before fitting
  • Complete - 8 families, robust SEs, full diagnostics, VIF, partial dependence
  • Minimal - Only numpy and polars required

Installation

uv add rustystats

Quick Start

import rustystats as rs
import polars as pl

# Load data
data = pl.read_parquet("insurance.parquet")

# Fit a Poisson GLM for claim frequency
result = rs.glm_dict(
    response="ClaimCount",
    terms={
        "VehAge": {"type": "linear"},
        "VehPower": {"type": "linear"},
        "Area": {"type": "categorical"},
        "Region": {"type": "categorical"},
    },
    data=data,
    family="poisson",
    offset="Exposure",
).fit()

# View results
print(result.summary())

Families & Links

Family Default Link Use Case
gaussian identity Linear regression
poisson log Claim frequency
binomial logit Binary outcomes
gamma log Claim severity
tweedie log Pure premium (var_power=1.5)
quasipoisson log Overdispersed counts
quasibinomial logit Overdispersed binary
negbinomial log Overdispersed counts (proper distribution)

Dict-Based API

API built for programmatic model building.

result = rs.glm_dict(
    response="ClaimCount",
    terms={
        "VehAge": {"type": "bs", "monotonicity": "increasing"},  # Monotonic (auto-tuned)
        "DrivAge": {"type": "bs"},                               # Penalized smooth (default)
        "Income": {"type": "bs", "df": 5},                       # Fixed 5 df
        "BonusMalus": {"type": "linear", "monotonicity": "increasing"},  # Constrained coefficient
        "Region": {"type": "categorical"},
        "Brand": {"type": "target_encoding"},
        "Age2": {"type": "expression", "expr": "DrivAge**2"},
    },
    interactions=[
        {
            "VehAge": {"type": "linear"}, 
            "Region": {"type": "categorical"}, 
            "include_main": True
        },
    ],
    data=data,
    family="poisson",
    offset="Exposure",
    seed=42,
).fit(regularization="elastic_net")

Term Types

Type Parameters Description
linear monotonicity (optional) Raw continuous variable
categorical levels (optional) Dummy encoding
bs df or k, knots, boundary_knots, degree=3, monotonicity B-spline (default: penalized smooth, k=10)
ns df or k, knots, boundary_knots Natural spline (default: penalized smooth, k=10)
target_encoding prior_weight=1 Regularized target encoding
expression expr, monotonicity (optional) Arbitrary expression (like I())

Interactions

Each interaction is a dict with variable specs. Use include_main to also add main effects.

interactions=[
    # Standard interaction: product terms (main effects + interaction)
    {
        "DrivAge": {"type": "bs", "df": 5}, 
        "Brand": {"type": "target_encoding"},
        "include_main": True
    },
    # Categorical × continuous (interaction only)
    {
        "VehAge": {"type": "linear"}, 
        "Region": {"type": "categorical"}, 
        "include_main": False
    },
    # TE interaction: combined target encoding TE(Brand:Region)
    {
        "Brand": {"type": "categorical"},
        "Region": {"type": "categorical"},
        "target_encoding": True,
        "prior_weight": 1.0,  # optional
    },
    # FE interaction: combined frequency encoding FE(Brand:Region)
    {
        "Brand": {"type": "categorical"},
        "Region": {"type": "categorical"},
        "frequency_encoding": True,
    },
]
Flag Effect
(none) Standard product terms (cat×cat, cat×cont, etc.)
target_encoding: True Combined TE encoding: TE(var1:var2)
frequency_encoding: True Combined FE encoding: FE(var1:var2)

Splines

# Default: penalized smooth with automatic tuning via GCV
result = rs.glm_dict(
    response="ClaimNb",
    terms={
        "Age": {"type": "bs"},           # B-spline (auto-tuned)
        "VehPower": {"type": "ns"},      # Natural spline (auto-tuned)
        "Region": {"type": "categorical"},
    },
    data=data, family="poisson", offset="Exposure",
).fit()

# Fixed degrees of freedom (no penalty)
result = rs.glm_dict(
    response="ClaimNb",
    terms={
        "Age": {"type": "bs", "df": 5},       # Fixed 5 df
        "VehPower": {"type": "ns", "df": 4},  # Fixed 4 df
        "Region": {"type": "categorical"},
    },
    data=data, family="poisson", offset="Exposure",
).fit()

Spline parameters:

  • No parameters → penalized smooth with automatic tuning (k=10)
  • df=5 → fixed 5 degrees of freedom
  • k=15 → penalized smooth with 15 basis functions
  • knots=[2.0, 5.0, 8.0] → explicit interior knot positions (mutually exclusive with df/k)
  • boundary_knots=(0.0, 10.0) → custom boundary knots (optional, defaults to data range)
  • monotonicity="increasing" or "decreasing" → constrained effect (bs only)

When to use each type:

  • B-splines (bs): Standard choice, more flexible at boundaries, supports monotonicity
  • Natural splines (ns): Better extrapolation, linear beyond boundaries

Monotonic Splines

Constrain the fitted curve to be monotonically increasing or decreasing. Essential when business logic dictates a monotonic relationship.

# Monotonically increasing effect (e.g., age → risk)
result = rs.glm_dict(
    response="ClaimNb",
    terms={
        "Age": {"type": "bs", "monotonicity": "increasing"},
        "Region": {"type": "categorical"},
    },
    data=data, family="poisson", offset="Exposure",
).fit()

# Monotonically decreasing effect (e.g., vehicle value with age)
result = rs.glm_dict(
    response="ClaimAmt",
    terms={"VehAge": {"type": "bs", "df": 4, "monotonicity": "decreasing"}},
    data=data, family="gamma",
).fit()

Coefficient Constraints

Constrain coefficient signs using monotonicity on linear and expression terms.

result = rs.glm_dict(
    response="y",
    terms={
        "age": {"type": "linear", "monotonicity": "increasing"},  # β ≥ 0
        "age2": {"type": "expression", "expr": "age ** 2", "monotonicity": "decreasing"},  # β ≤ 0
        "income": {"type": "linear"},
    },
    data=data, family="poisson",
).fit()
Constraint Term Spec Effect
β ≥ 0 "monotonicity": "increasing" Positive effect
β ≤ 0 "monotonicity": "decreasing" Negative effect

Target Encoding

Ordered target encoding for high-cardinality categoricals.

# Dict API
result = rs.glm_dict(
    response="ClaimNb",
    terms={
        "Brand": {"type": "target_encoding"},
        "Model": {"type": "target_encoding", "prior_weight": 2.0},
        "Age": {"type": "linear"},
        "Region": {"type": "categorical"},
    },
    data=data, family="poisson", offset="Exposure",
).fit()

# Sklearn-style API
encoder = rs.TargetEncoder(prior_weight=1.0, n_permutations=4)
train_encoded = encoder.fit_transform(train_categories, train_target)
test_encoded = encoder.transform(test_categories)

Key benefits:

  • No target leakage: Ordered target statistics
  • Regularization: Prior weight controls shrinkage toward global mean
  • High-cardinality: Single column instead of thousands of dummies
  • Exposure-aware: For frequency models with offset="Exposure", automatically uses claim rate (ClaimCount/Exposure) instead of raw counts
  • Interactions: Use target_encoding: True in interactions to encode variable combinations

Expression Terms

result = rs.glm_dict(
    response="y",
    terms={
        "age": {"type": "linear"},
        "age2": {"type": "expression", "expr": "age ** 2"},
        "age3": {"type": "expression", "expr": "age ** 3"},
        "income_k": {"type": "expression", "expr": "income / 1000"},
        "bmi": {"type": "expression", "expr": "weight / (height ** 2)"},
    },
    data=data, family="gaussian",
).fit()

Supported operations: +, -, *, /, ** (power)


Regularization

CV-Based Regularization

# Just specify regularization type - cv=5 is automatic
result = rs.glm_dict(
    response="y",
    terms={"x1": {"type": "linear"}, "x2": {"type": "linear"}, "cat": {"type": "categorical"}},
    data=data,
    family="poisson",
).fit(regularization="ridge")  # "ridge", "lasso", or "elastic_net"

print(f"Selected alpha: {result.alpha}")
print(f"CV deviance: {result.cv_deviance}")

Options:

  • regularization: "ridge" (L2), "lasso" (L1), or "elastic_net" (mix)
  • selection: "min" (best fit) or "1se" (more conservative, default: "min")
  • cv: Number of folds (default: 5)

Explicit Alpha

# Skip CV, use specific alpha
result = rs.glm_dict(response="y", terms={"x1": {"type": "linear"}, "x2": {"type": "linear"}}, data=data).fit(alpha=0.1, l1_ratio=0.0)  # Ridge
result = rs.glm_dict(response="y", terms={"x1": {"type": "linear"}, "x2": {"type": "linear"}}, data=data).fit(alpha=0.1, l1_ratio=1.0)  # Lasso
result = rs.glm_dict(response="y", terms={"x1": {"type": "linear"}, "x2": {"type": "linear"}}, data=data).fit(alpha=0.1, l1_ratio=0.5)  # Elastic Net

Lasso Credibility

Shrink model coefficients toward a prior model (complement of credibility) instead of toward zero. Based on the methodology in CAS Monograph 13 (Holmes & Casotto, 2025).

When lasso zeroes a coefficient, the prediction for that term falls back to the complement rather than vanishing — making regularized models directly usable as rating plans.

# 1. Fit a countrywide (prior) model
cw_result = rs.glm_dict(
    response="ClaimCount",
    terms={"VehAge": {"type": "bs"}, "DrivAge": {"type": "bs"}},
    data=countrywide_data,
    family="poisson",
    offset="Exposure",
).fit()

# 2. Fit a state model with lasso, shrinking toward countrywide rates
state_result = rs.glm_dict(
    response="ClaimCount",
    terms={
        "VehAge": {"type": "bs"},
        "DrivAge": {"type": "bs"},
        "Region": {"type": "categorical"},
    },
    data=state_data,
    family="poisson",
    offset="Exposure",
    complement="countrywide_rate",  # Column with prior rates (response scale)
).fit(regularization="lasso")

# 3. Inspect which terms the data supports vs. trusts the complement
print(state_result.summary())            # Shows "Lasso Credibility Results"
print(state_result.credibility_summary())  # Deviation from complement per term

Complement sources:

  • str — column name in the DataFrame (rates for log-link, probabilities for logit)
  • np.ndarray — array of prior values on the response scale
  • GLMModel — fitted model; predictions are computed automatically

Works with all families/links, splines, categoricals, interactions, and target encoding.


Design Matrix Validation

# Check for issues before fitting
model = rs.glm_dict(
    response="y",
    terms={"x": {"type": "ns", "df": 4}, "cat": {"type": "categorical"}},
    data=data, family="poisson",
)
results = model.validate()  # Prints diagnostics

if not results['valid']:
    print("Issues:", results['suggestions'])

# Validation runs automatically on fit failure with helpful suggestions

Checks performed:

  • Rank deficiency (linearly dependent columns)
  • High multicollinearity (condition number)
  • Zero variance columns
  • NaN/Inf values
  • Highly correlated column pairs (>0.999)

Model Diagnostics

# Compute all diagnostics at once
diagnostics = result.diagnostics(
    data=data,
    categorical_factors=["Region", "VehBrand", "Area"],  # Including non-fitted
    continuous_factors=["Age", "Income", "VehPower"],    # Including non-fitted
)

# Export as compact JSON (optimized for LLM consumption)
json_str = diagnostics.to_json()

# Pre-fit data exploration (no model needed)
exploration = rs.explore_data(
    data=data,
    response="ClaimNb",
    categorical_factors=["Region", "VehBrand", "Area"],
    continuous_factors=["Age", "VehPower", "Income"],
    exposure="Exposure",
    family="poisson",
    detect_interactions=True,
)

Diagnostic Features:

  • Calibration: Overall A/E ratio, calibration by decile with CIs, Hosmer-Lemeshow test
  • Discrimination: Gini coefficient, AUC, KS statistic, lift metrics
  • Factor Diagnostics: A/E by level/bin for ALL factors (fitted and non-fitted)
  • VIF/Multicollinearity: Variance inflation factors for design matrix columns
  • Partial Dependence: Effect plots with shape detection and recommendations
  • Overfitting Detection: Compare train vs test metrics when test data provided
  • Interaction Detection: Greedy residual-based detection of potential interactions
  • Warnings: Auto-generated alerts for high dispersion, poor calibration, missing factors
  • Base Model Comparison: Compare new model against existing/benchmark predictions

Diagnostics JSON Shape

The diagnostics.to_json() output includes:

{
  "model_summary": {
    "formula": "...", "family": "poisson", "link": "log",
    "n_obs": 2000, "n_params": 6, "df_resid": 1994,
    "converged": true, "iterations": 5,
    "scale": 1.0,
    "scale_pearson": 1.0148,
    "null_deviance": 1408.77,
    "robust_se_type": "HC1"
  },
  "train_test": {
    "train": {
      "n_obs": 2000, "deviance": 2118.42,
      "log_likelihood": -1059.21,
      "aic": 2130.42, "bic": 2162.70,
      "gini": 0.3241, "auc": 0.6621, "ae_ratio": 1.0
    }
  },
  "coefficient_summary": [
    {
      "feature": "Age", "estimate": 0.00996,
      "std_error": 0.00339, "z_value": 2.941,
      "p_value": 0.0033, "significant": true,
      "conf_int": [0.003318, 0.01659],
      "relativity": 1.01, "relativity_ci": [1.0033, 1.0167],
      "robust_std_error": 0.003378, "robust_z_value": 2.947,
      "robust_p_value": 0.0032, "robust_significant": true
    }
  ]
}
  • BIC (train_test.train.bic): Bayesian Information Criterion alongside AIC
  • Scale (model_summary.scale): Deviance-based dispersion parameter
  • Scale Pearson (model_summary.scale_pearson): Pearson-based dispersion estimate
  • Null Deviance (model_summary.null_deviance): Intercept-only model deviance
  • Confidence Intervals (coefficient_summary[].conf_int): 95% CI [lower, upper]
  • Robust SEs (coefficient_summary[].robust_*): HC1 sandwich estimators for each coefficient
  • Robust SE Type (model_summary.robust_se_type): Present only when robust SEs were computed

Robust SE fields are null when store_design_matrix=False (lean mode) or for deserialized models.

Comparing Against a Base Model

Compare your new model against predictions from an existing model (e.g., current production model):

# Add base model predictions to your data
data = data.with_columns(pl.lit(old_model_predictions).alias("base_pred"))

# Run diagnostics with base_predictions
diagnostics = result.diagnostics(
    train_data=data,
    categorical_factors=["Region", "VehBrand"],
    continuous_factors=["Age", "VehPower"],
    base_predictions="base_pred",  # Column name with base model predictions
)

# Access comparison results
bc = diagnostics.base_predictions_comparison

# Side-by-side metrics
print(f"Model loss: {bc.model_metrics.loss}, Base loss: {bc.base_metrics.loss}")
print(f"Model Gini: {bc.model_metrics.gini}, Base Gini: {bc.base_metrics.gini}")

# Improvement metrics (positive = new model is better)
print(f"Loss improvement: {bc.loss_improvement_pct}%")
print(f"Gini improvement: {bc.gini_improvement}")
print(f"AUC improvement: {bc.auc_improvement}")

# Decile analysis sorted by model/base prediction ratio
for d in bc.model_vs_base_deciles:
    print(f"Decile {d.decile}: actual={d.actual:.4f}, "
          f"model={d.model_predicted:.4f}, base={d.base_predicted:.4f}")

The comparison includes:

  • Side-by-side metrics: Loss (mean deviance), Gini, AUC, A/E ratio for both models
  • Improvement metrics: loss_improvement_pct, gini_improvement, auc_improvement
  • Decile analysis: Data sorted by model/base ratio, showing where the new model diverges
  • Calibration comparison: Count of deciles where each model has better A/E

Model Serialization

Save and load fitted models for later use:

# Fit and save
model_bytes = result.to_bytes()

with open("model.bin", "wb") as f:
    f.write(model_bytes)

# Load later
with open("model.bin", "rb") as f:
    loaded = rs.GLMModel.from_bytes(f.read())

# Predict with loaded model
predictions = loaded.predict(new_data)

What's preserved:

  • Coefficients and feature names
  • Categorical encoding levels
  • Spline knot positions
  • Target encoding statistics
  • Formula, family, link function
  • Complement of credibility specification

Compact storage: Only prediction-essential state is stored (~KB, not MB).


Model Export (PMML & ONNX)

Export fitted models to standard formats for deployment — no extra dependencies required. PMML uses stdlib XML; ONNX protobuf serialization is implemented from scratch in Rust.

PMML

# Export to PMML 4.4 XML
pmml_xml = result.to_pmml()
result.to_pmml(path="model.pmml")

# Load & predict (consumer side)
# uv add pypmml
from pypmml import Model
pmml_model = Model.fromFile("model.pmml")

new_data = pl.DataFrame({"VehAge": [3, 5, 1], "Area": ["C", "A", "B"]})
preds = pmml_model.predict(new_data.to_dict(as_series=False))

ONNX

# Export — "scoring" requires pre-built design matrix, "full" embeds preprocessing
result.to_onnx(path="model.onnx", mode="scoring")
result.to_onnx(path="model_full.onnx", mode="full")

# Predict (consumer side)
# uv add onnxruntime
import onnxruntime as ort
session = ort.InferenceSession("model_full.onnx")
preds = session.run(None, {"input": raw_features})[0]

| Size | Smaller | Larger |


Dependencies

Rust

  • ndarray, nalgebra - Linear algebra
  • rayon - Parallel iterators (multi-threading)
  • statrs - Statistical distributions
  • pyo3 - Python bindings

Python

  • numpy - Array operations (required)
  • polars - DataFrame support (required)

License

AGPL-3.0

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

rustystats-0.6.3.tar.gz (332.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rustystats-0.6.3-cp313-cp313-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.13Windows x86-64

rustystats-0.6.3-cp313-cp313-manylinux_2_35_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.35+ x86-64

rustystats-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

rustystats-0.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

rustystats-0.6.3-cp313-cp313-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rustystats-0.6.3-cp313-cp313-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rustystats-0.6.3-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12Windows x86-64

rustystats-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rustystats-0.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

rustystats-0.6.3-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustystats-0.6.3-cp312-cp312-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rustystats-0.6.3-cp311-cp311-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.11Windows x86-64

rustystats-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rustystats-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

rustystats-0.6.3-cp311-cp311-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rustystats-0.6.3-cp311-cp311-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rustystats-0.6.3-cp310-cp310-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.10Windows x86-64

rustystats-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rustystats-0.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

rustystats-0.6.3-cp310-cp310-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rustystats-0.6.3-cp310-cp310-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file rustystats-0.6.3.tar.gz.

File metadata

  • Download URL: rustystats-0.6.3.tar.gz
  • Upload date:
  • Size: 332.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustystats-0.6.3.tar.gz
Algorithm Hash digest
SHA256 80ff3167555310f954056e9310f36e27c3a0579bb17c96175aff7fb25cfdae0a
MD5 2eb9ff2ec56e6e206a08977946b7ef9d
BLAKE2b-256 525447ea3ba4c0ba6ec3cb8447a99208a0e12a2c99880ed3b79ab49367083639

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3.tar.gz:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rustystats-0.6.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustystats-0.6.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 35e50f9335bf6f30cc689f8319811b9afed202735f386be8f42e234272982e16
MD5 bfb899e0944b8d99c43cefc99ec81bfa
BLAKE2b-256 42535eecd16c9a2c4921fb75c6e442fe7f826cdf5e4f62a8b08ee3c650f0fa1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp313-cp313-win_amd64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp313-cp313-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp313-cp313-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 b24d84838dace8ebf00f43de71d4b0bed6d073a8a8ae65633343c33228b10b8b
MD5 6d5bed08c40367e725f846f0069d2628
BLAKE2b-256 1311e259439b6c8eb07a9d2f23dbe8b04813f3c01ca8abaa71d78bbe497062fa

See more details on using hashes here.

File details

Details for the file rustystats-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10b28615c40618624e4d233d33e3d9cc0a3d024fe7ed40f00f60446f47d610c4
MD5 49f84f9a908079e93ea2d8943dd10782
BLAKE2b-256 21bfba3d563395e2d83207e7a1d557c90768c8fc444fad00e244739db3da99da

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 45a2857a258828c8ded86ef9db670f72814dc2111ac35dc88fed91de9a17aa2e
MD5 10f67e527264209ebf6ad6c5b9ef9804
BLAKE2b-256 16423f38d1080155d3ec5faef7d51049a4b93f495a57db004200da9835229318

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd9f28137473dafe80830045bce3a0802f977575d1be42e16b4117a4d20359fb
MD5 48c0cc4f9206722c45b28267ed034303
BLAKE2b-256 6a48e59cb2b2e1754f1f01c83a6448cf81fc0efc47c91aa92b43565b4ace196f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 500aedb067cf50a725fffe038c42371c7da1afee1a36d4b71d70c5d229a2cc01
MD5 912d968f6a0c6ca8d8910677f756e209
BLAKE2b-256 c3a4ce98459264fa45f414022b8dc44df02e1a98287570222dd58b439b30dfca

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rustystats-0.6.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustystats-0.6.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e6a4c01aac28d6ff1dfe62bb9a4aed0b10528a2e2fb1cd517dae8f0d86818dc7
MD5 c0604b37863d80adda924664d37d4b00
BLAKE2b-256 f0204103b69d4cb4961357b3c2b461028a78113c8439c74aa1fc40df00e06db1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp312-cp312-win_amd64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 89436f6767a977b6c1743c1510a96eae173390f131d8feba3d5378873d65a37e
MD5 86e2ab3b67d4e9ec5295ac49abe15dbd
BLAKE2b-256 364658ea36c8c49a00a40e62adfedd53726152a893a85df9ca61793f741098a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 55bc8bbc35d28167d846095fc5aa77fdaf06ff77735efb0f054c49d2866ed8a3
MD5 a1d1b3d9e6adb359078ac38e76cae789
BLAKE2b-256 c0c273655b762e8eaa542ae8c39cd2590d3ec68a6a622fbc417a910f508f7724

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7cdcbb1561589520a146239dbf465f0f5e09dc0eaf856d6945d003e8f483dab5
MD5 028970491abe0d0a7ab4806cdf65e8ce
BLAKE2b-256 3ed713a85a86d03b49a8652fb0ef49052120dc751d69dc172ca5c4bcfc9bb3fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 af2501bb5328b0fd5cff7bf5b9f6cfba5d80cc6dd15e0c516fe6906b22ab9407
MD5 26c92382bd520c52ef21de865a293a44
BLAKE2b-256 081137fadd6fd3e25200210cda475081a4d66663456cb428e3d9d00d0504f647

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rustystats-0.6.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustystats-0.6.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2589067b11885b7bfb6b68b07b7cf9d3729e15572bcb32151ff4ae4d0fea37d9
MD5 14f99fdcf74eb747f57aebfdc9b35253
BLAKE2b-256 0cefbc9a9e894e4304535abf2d0921293c79ab52f37d31bdab9ee2f892aeb341

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp311-cp311-win_amd64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c2ebadee8d165b5d168379d1ae8bb0624ac4778722928ea7462dc17e4bbbf8dc
MD5 5169990019ed0a67d472cfbcfcc6e5c1
BLAKE2b-256 e507c52408876d34dd98ef2ba07f5d76babc8d5bb1c62c153f606392ee98260e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 98ea056894aad3fdc3d331c8a66f171f972e94ed4ad6cfcbe4bdef690ca443c5
MD5 e46c5d0a4feea7fb05b5545176d68e4a
BLAKE2b-256 9062cf3c848dafe5dfa85259369617cd68550f94aec4e1448fd61e3251f7fef7

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 99e086524daec25b80fe013fe1c5ffb586b6fad86c3a89bce765cf7f0a87ea8b
MD5 ffe215e0ad96b7389841578179f12296
BLAKE2b-256 5723a4e38d5b6a2c2ae23e80d76add4758359fc5c4424c3ac549b8f9766a3ace

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a6f6960491333a9db5f487a5a2db0d7c18177053a4ff73bbf6823fef434f399b
MD5 c97fc212e93fdcfebfc3c6a5df28cbea
BLAKE2b-256 b09d2de687e619ad812f2ea34e031d44cb5114439fe15e96cbc6d957ae77a3d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rustystats-0.6.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustystats-0.6.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 550a6b46a49be042708343ee6760762969cf8aeff4aa16074900341ae64d45bf
MD5 5a7477a9eadff96e4f4e7ada1ac92e77
BLAKE2b-256 eabde7610cf2fd7fe4034e3be0f8c65f1fe979f8658f0513c0ed10e23096177c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp310-cp310-win_amd64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4e8e4b50a9689080ab829c6f02e65ef89a38c5b773ab5d5570fe935ccb7f2b57
MD5 c144302bb971e013d147a1a7f86d56e2
BLAKE2b-256 d1387ff6fc9c2b286e452e8a090f87546a34cd3545a1503da0fcffd38d480a82

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 96058500aabb45d45f619e49913a5d70c0f1cfc1febd9fd369253ec341726e86
MD5 b6f0000b09c919258c37cac178f2c50c
BLAKE2b-256 5b00b69bc8b30e55009faf997c0a78f09dab4ced243970d0fb8d02d06c81a0a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 83deeb5af2a04d9b18efe3aeb35b38dca3cd87b2e6cb67997d4fe74181f299c2
MD5 a4d03ba95a0c32b038959d41027678d9
BLAKE2b-256 cb020bf58a5abd9c6cda1b90c3c517d1f87cae2d8c745e3fcf8bde8456972b90

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustystats-0.6.3-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustystats-0.6.3-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d462ceeb94528daedd047dd44074f9a98b8b9ac43cd8e48521aaf8911f2a427e
MD5 9e47b386aac193683cc76cb9a1723395
BLAKE2b-256 c75e3062133333de8d148deef7698615410ff72273cc30ffc3a076f18d80f877

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustystats-0.6.3-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: release.yml on PricingFrontier/rustystats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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