Skip to main content

pysrat

pysrat is a Python package for fitting and analysing NHPP (Non-Homogeneous Poisson Process) software reliability models. It provides a clean scikit-learn–style API (model.fit(data), params_, llf_, aic_) and high-performance EM core implementations exposed from C++ via pybind11.

Features

  • Scikit-learn–style estimators (model.fit(data), params_, llf_, aic_)
  • Fast EM updates implemented in C++ and exposed via pybind11
  • A collection of classical NHPP models and CF1 (canonical phase-type)
  • Plotting helpers for visualization (plot_mvf, plot_dmvf, plot_rate)
  • Metrics-based (multi-factor) models in which software metrics enter as covariates (MFLogitNHPP, MFProbitNHPP, MFCloglogNHPP)
  • User-defined link functions: supply the inverse link and its derivative, and the EM algorithm, likelihood, AIC and variable selection are inherited
  • Offsets, which express Cox proportional-hazards models without dedicated code
  • AIC-based variable selection (stepwise)
  • A Poisson regression–based framework (fit_pr_nhpp)

Installation

pip install pysrat

To build from source (recommended during development):

git clone https://github.com/SwReliab/pysrat.git
cd pysrat
pip install -e .

Requirements

  • Python ≥ 3.9
  • A C++20-capable compiler (required for some extension modules such as CF1)

Optional / developer tools

  • ninja (recommended build backend for faster CMake builds)
  • pytest for development and tests
  • Python headers and development toolchain for building native extensions

Quick start

import numpy as np
from pysrat.data.nhpp import NHPPData
from pysrat.nhpp.models import ExponentialNHPP
from pysrat.nhpp.plot import plot_mvf

# Create NHPP data from grouped intervals
data = NHPPData.from_intervals(intervals=[1, 1, 1, 1], counts=[0, 1, 0, 5])

# Fit model
model = ExponentialNHPP().fit(data)

print("Parameters:", model.params_)
print("Log-likelihood:", model.llf_)
print("AIC:", model.aic_)

# Plot mean value function
plot_mvf(data, model)

Working with data

pysrat accepts several NHPP data formats via pysrat.data.nhpp.NHPPData:

  • Interval/grouped data: NHPPData.from_intervals(intervals=..., counts=..., on_boundary=...)
  • Counts per interval: NHPPData.from_intervals(counts=...)
  • Time data (without counts): NHPPData.from_intervals(intervals=..., on_boundary=...) or NHPPData.from_intervals(intervals=..., te=...)

Available models

Common models are exported under pysrat.nhpp.models:

  • ExponentialNHPP
  • GammaNHPP
  • Pareto2NHPP
  • TruncatedNormalNHPP
  • LogNormalNHPP
  • TruncatedLogisticNHPP
  • LogLogisticNHPP
  • TruncatedExtremeValueMaxNHPP
  • LogExtremeValueMaxNHPP
  • TruncatedExtremeValueMinNHPP
  • LogExtremeValueMinNHPP
  • CanonicalPhaseTypeNHPP (CF1)

CF1 example

from pysrat.data.nhpp import NHPPData
from pysrat.nhpp.models import CanonicalPhaseTypeNHPP

data = NHPPData.from_intervals(intervals=[1, 2, 1.5], counts=[1, 0, 2], on_boundary=[0, 1, 0])
model = CanonicalPhaseTypeNHPP(3).fit(data)
print(model.params_)

Plotting

Use the plotting helpers from pysrat.nhpp.plot:

from pysrat.nhpp.plot import plot_mvf, plot_rate
plot_mvf(data, model)
plot_rate(data, model)

You can pass a dictionary of models to compare multiple MVFs:

models = {
    "Exp": ExponentialNHPP().fit(data),
    "Gamma": GammaNHPP().fit(data),
}
plot_mvf(data, models)

Model comparison

Compare models using aic_ or llf_:

from pysrat.nhpp.models import ExponentialNHPP, GammaNHPP
data = NHPPData.from_intervals(counts=[0, 1, 0, 5])
m1 = ExponentialNHPP().fit(data)
m2 = GammaNHPP().fit(data)
best = min((m1, m2), key=lambda m: m.aic_)
print("Best model:", best.name)

Metrics-based (multi-factor) models

These models let software metrics enter as covariates of the fault-detection probability. The data are held by DMetricsData, and each model differs only in its link function.

import importlib.resources as resources
import pandas as pd

from pysrat.data import DMetricsData
from pysrat.nhpp import MFLogitNHPP, MFProbitNHPP, MFCloglogNHPP, stepwise

# a bundled data set: one row per testing period
path = resources.files("pysrat").joinpath("datasets/dmetrics/dmetrics1.csv")
df = pd.read_csv(path)

data = DMetricsData.from_dataframe(
    df, metrics=["day", "tc", "ctc", "cov", "ccov"], fault="fault")

model = MFLogitNHPP().fit(data)
print(model.aic_)          # 82.895

best = stepwise(model)     # AIC-based variable selection
print(best.aic_, best.data_.metrics_name)   # 79.074 ['day', 'tc', 'ctc']

Switching the link function is a matter of replacing the class, so MFProbitNHPP and MFCloglogNHPP are used in exactly the same way.

Two points are worth noting.

  • Do not put a constant column in metrics. The intercept is handled by the model through has_intercept; passing intercept=True raises ValueError.
  • An offset turns the cloglog model into a Cox proportional-hazards model. The offset is the complementary log-log of the baseline hazard rate, so a discrete Weibull baseline with shape m needs no dedicated class:
import numpy as np

k = np.arange(1, len(df) + 1, dtype=float)
df["off"] = np.log(k**m - (k - 1.0)**m)      # Weibull offset, up to a constant
data = DMetricsData.from_dataframe(
    df, metrics=[...], fault="fault", offset="off")
model = MFCloglogNHPP().fit(data)

See docs/metrics-models.md for the formulation.

The E-step of the EM algorithm does not depend on the link function, and the M-step is a fit of a generalized linear model to weighted binomial data. Within that fit, the link function enters through one step only: computing the fault-detection probability mu = linkinv(z) and its derivative dmu/dz from the linear predictor z.

DynamicGLMBase therefore exposes these two as its extension points. The example below is the logit link under a Box-Cox transformation, which has one shape parameter lam.

import numpy as np
from pysrat.nhpp.multifactor._dglm import DynamicGLMBase

EPS = 1e-12

class MFBoxCoxNHPP(DynamicGLMBase):
    link = "boxcox"

    def __init__(self, lam=0.0, has_intercept=True):
        super().__init__(has_intercept=has_intercept)
        self.lam = float(lam)

    def _linkinv(self, z):
        if self.lam == 0.0:
            return 1.0 / (1.0 + np.exp(-z))
        w = np.maximum(1.0 + self.lam * z, EPS)
        return 1.0 / (1.0 + w**(-1.0 / self.lam))

    def _dmu(self, z, mu):
        if self.lam == 0.0:
            return mu * (1.0 - mu)
        return mu * (1.0 - mu) / (1.0 + self.lam * z)

    def _link_domain(self, z):          # only for a restricted domain
        return 1.0 + self.lam * z > EPS

Everything else -- the EM algorithm, the log likelihood, AIC and stepwise -- is inherited. _link_domain is needed only when the link is undefined on part of the real line, as here, where 1 + lam * z > 0 is required; the M-step then never steps outside that domain.

A link function with a parameter such as lam stays inside the GLM family once the parameter is fixed, so an outer one-dimensional search over the parameter, with the EM algorithm run to convergence at each value, estimates it.

The built-in links (logit, probit, cloglog) keep using the C++ IRLS; only user-defined links go through the Python one.

PR-NHPP regression framework

fit_pr_nhpp fits module-wise NHPP models with a Poisson regression outer loop. Each module has its own fault data and thus its own NHPP model, while the static metrics of the modules explain the differences between their expected fault counts.

import importlib.resources as resources
import pandas as pd

from pysrat.data import NHPPData, SMetricsData
from pysrat.nhpp import GammaNHPP
from pysrat.nhpp.regression import fit_pr_nhpp

root = resources.files("pysrat").joinpath("datasets/smetrics")
names = ["catalina", "connector", "jasper", "servlets", "tester", "webapps"]

# one NHPP model per module, fitted to that module's fault data
models = {
    nm: GammaNHPP().fit(
        NHPPData.from_csv(root.joinpath(f"tomcat5_{nm}.csv"),
                          intervals="time", counts="fault"))
    for nm in names
}

# static metrics of the modules; the row index gives the module names.
# Three of the seven columns are used: 3 metrics + intercept = 4 coefficients,
# which leaves 2 residual degrees of freedom on 6 modules.
smetrics = pd.read_csv(root.joinpath("tomcat5_smetrics.csv"), index_col=0)
sdata = SMetricsData.from_dataframe(
    smetrics[["LOC", "Fn", "Ac"]], use_index_as_name=True)

fit = fit_pr_nhpp(models, sdata, reg="glm")
print(fit["converged"], fit["n_iter"])   # True 812
print(fit["coef"])

The keys of models must match the names in sdata. reg="glm" fits the outer regression by IRLS and reg="elasticnet" adds an L1/L2 mix controlled by alpha; both accept lambd as the penalty strength.

SMetricsData can also be built directly, which is useful when the metrics do not come from a data frame. The offset is optional and may be overridden at call time.

import numpy as np

sdata = SMetricsData(
    names=["mod_a", "mod_b", "mod_c"],
    metrics=np.array([[1.2, 0.3], [0.7, 1.0], [1.5, 0.4]], dtype=float),
    offset=np.log(np.array([1200.0, 900.0, 1500.0], dtype=float)),  # optional
)

Check fit["converged"] before using the result. Two things make the outer loop stop short.

  • Identifiability. The regression estimates 1 + q coefficients, where q is the number of metrics, from m modules. When 1 + q >= m the model is not identified and the loop never converges, however many iterations it is given. Either use fewer metrics, as above, or add a penalty (lambd > 0, optionally with reg="elasticnet"). The bundled Tomcat data has 6 modules, so all 7 of its metrics cannot be used at once without a penalty.
  • Iteration count. The loop runs one EM step per iteration, so it converges slowly. A few thousand iterations are normal even when the model is well posed; the default max_outer_iter is 10000.

A RuntimeWarning is issued if the loop ends without converging.

Examples

See the examples/ notebooks included in the repository for end-to-end workflows (basic fitting, comparison, CF1 usage and plotting):

  • examples/example1.ipynb — Exponential NHPP
  • examples/example2.ipynb — CF1 fitting and comparison
  • examples/example3.ipynb — Multi-factor models (MFLogitNHPP)
  • examples/example4.ipynb — Poisson regression–based NHPP fitting (fit_pr_nhpp)

Contributing

Contributions are welcome. Please open an issue describing the change or a PR with tests and documentation updates.

License

This project is distributed under the terms of the MIT License. See LICENSE.

Metadata

Release files for pysrat 0.2.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pysrat 0.2.8
File Size Uploaded Provenance Actions
pysrat-0.2.8.tar.gz 2.7 MB Without provenance Details for pysrat-0.2.8.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for pysrat 0.2.8
File Actions
pysrat-0.2.8-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for pysrat-0.2.8-cp313-cp313-win_amd64.whl
pysrat-0.2.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pysrat-0.2.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.8-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for pysrat-0.2.8-cp313-cp313-macosx_11_0_arm64.whl
pysrat-0.2.8-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details for pysrat-0.2.8-cp313-cp313-macosx_10_13_x86_64.whl
pysrat-0.2.8-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for pysrat-0.2.8-cp312-cp312-win_amd64.whl
pysrat-0.2.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for pysrat-0.2.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.8-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for pysrat-0.2.8-cp312-cp312-macosx_11_0_arm64.whl
pysrat-0.2.8-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details for pysrat-0.2.8-cp312-cp312-macosx_10_13_x86_64.whl
pysrat-0.2.8-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for pysrat-0.2.8-cp311-cp311-win_amd64.whl
pysrat-0.2.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pysrat-0.2.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.8-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for pysrat-0.2.8-cp311-cp311-macosx_11_0_arm64.whl
pysrat-0.2.8-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details for pysrat-0.2.8-cp311-cp311-macosx_10_9_x86_64.whl
pysrat-0.2.8-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for pysrat-0.2.8-cp310-cp310-win_amd64.whl
pysrat-0.2.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pysrat-0.2.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.8-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for pysrat-0.2.8-cp310-cp310-macosx_11_0_arm64.whl
pysrat-0.2.8-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details for pysrat-0.2.8-cp310-cp310-macosx_10_9_x86_64.whl
pysrat-0.2.8-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details for pysrat-0.2.8-cp39-cp39-win_amd64.whl
pysrat-0.2.8-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for pysrat-0.2.8-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.8-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details for pysrat-0.2.8-cp39-cp39-macosx_11_0_arm64.whl
pysrat-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64 Details for pysrat-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl

Total release size: 14.1 MB

Release files / pysrat-0.2.8.tar.gz

Download URL pysrat-0.2.8.tar.gz
Size 2.7 MB
Tags Source
SHA-256 checksum
How to use checksums
4c7d292e3ef202e97e40866f74ba8600467157b86d94ff7768dd581980bfa7bf
BLAKE2b-256 checksum
How to use checksums
09e514a3918c71d6d39452fae42e7176a31334821235a3ad709385dc2344071a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp313-cp313-win_amd64.whl

Download URL pysrat-0.2.8-cp313-cp313-win_amd64.whl
Size 575.4 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
9c8e8d95a30fbc62b701a097c3a168bb17aff03e49d221608e0bb6289384dc1c
BLAKE2b-256 checksum
How to use checksums
d099f825c0fd0558655aa0fecd9597cde08f3e33842e8b9ceca01aa03ad332c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pysrat-0.2.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 622.2 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ab3ec7e2f383e1aeea3455f19cc5dd68699dcf45b090ec6aefba9ac7421de415
BLAKE2b-256 checksum
How to use checksums
1ece06e807ebfea679824fc8e3e8683890db9aba28afc2f5b3c06d51c1f43c29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp313-cp313-macosx_11_0_arm64.whl

Download URL pysrat-0.2.8-cp313-cp313-macosx_11_0_arm64.whl
Size 522.5 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
80e17eeb537120656a230e368008edd8323946a9ba11466557100d62d236487a
BLAKE2b-256 checksum
How to use checksums
0cf27b1c51ee5072ad1c710caacc1d7ef0c833ace5cc8a3a0d56bbf8dd4de680
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp313-cp313-macosx_10_13_x86_64.whl

Download URL pysrat-0.2.8-cp313-cp313-macosx_10_13_x86_64.whl
Size 577.5 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
731dd68d5e9c467c7fbe6ae11d849430b8ad665d5826319b919c3f750e3cbcee
BLAKE2b-256 checksum
How to use checksums
59829ef9ba858aa5c3371aaacc245f4aa076e96ea9a71c84c151ed1d5a1fd787
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp312-cp312-win_amd64.whl

Download URL pysrat-0.2.8-cp312-cp312-win_amd64.whl
Size 575.2 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
e6a7eeff125f0cacf862e218a9dff3dc8c24ec11416f9294e65acd6de05a124e
BLAKE2b-256 checksum
How to use checksums
ab427adc221e2b2477754fc2b10be089965c9653d8e42e58bab4b2d4d21c8a4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pysrat-0.2.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 622.0 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
06ad0b635a33cce827f28f88ba58dd212bd2a436ccb526590beb59fee2d24751
BLAKE2b-256 checksum
How to use checksums
b4fc5e747726cc030ef49468fdbfc8d0667ba25141250612bc26d7813f0d20f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp312-cp312-macosx_11_0_arm64.whl

Download URL pysrat-0.2.8-cp312-cp312-macosx_11_0_arm64.whl
Size 522.4 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
edc742baf9eb516e2bb33eabdf69740c962943afbc555672c9764485d395c660
BLAKE2b-256 checksum
How to use checksums
2e69eedb387197bde087223b0ebe650869bb40edfc3d59a1eee5ef67e6e5f924
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp312-cp312-macosx_10_13_x86_64.whl

Download URL pysrat-0.2.8-cp312-cp312-macosx_10_13_x86_64.whl
Size 577.3 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
499411eef54495cf35306f11ad889e8ee203abd3556881f5ad3d3547389125ac
BLAKE2b-256 checksum
How to use checksums
beeff5f0adee562c749d394758ee31af4eaa74e21850ad4b1dd527c5eb86296c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp311-cp311-win_amd64.whl

Download URL pysrat-0.2.8-cp311-cp311-win_amd64.whl
Size 568.8 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
9d0e9cd89265c691899d2386a59a5274b701b1f25340f08fac48a5a912a7c9b3
BLAKE2b-256 checksum
How to use checksums
6f660fe2e386199d5048736fb7598a3af9ce52004267cc77c3ea97047eb75d69
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pysrat-0.2.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 618.3 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f5ecb617ad0c83dc8932975a75d6080aab0c971f5c419739f227d91785946876
BLAKE2b-256 checksum
How to use checksums
bd9dd326716a7f642f85ab82054bc5f5a443f26a9307a6ac4a8e0d91ec67c8ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp311-cp311-macosx_11_0_arm64.whl

Download URL pysrat-0.2.8-cp311-cp311-macosx_11_0_arm64.whl
Size 518.0 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
99e3efb0b263e93ce094bf76a2f4e91c2b9afc60d32155b6b544df8d4601aa06
BLAKE2b-256 checksum
How to use checksums
1379a637fc827ca9fd58459571c4b938e97eacc3f35a799b096b4fec3c4be86e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp311-cp311-macosx_10_9_x86_64.whl

Download URL pysrat-0.2.8-cp311-cp311-macosx_10_9_x86_64.whl
Size 571.6 kB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
ac07b1853e78d00007ad94f66e25019fca8e424b477fe9c53d2f9d03b60cf697
BLAKE2b-256 checksum
How to use checksums
91da3ec03e4b869333392e476a6eacd3a4ba1a74faa3414ebdf8da06af18b72b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp310-cp310-win_amd64.whl

Download URL pysrat-0.2.8-cp310-cp310-win_amd64.whl
Size 566.3 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
a31ee74010bf7f635a14746dd8e7216e611de03b3ada3f173347d1fea46e91a7
BLAKE2b-256 checksum
How to use checksums
895b5f60a9ddc129d121157d958876d37307bfd2c617bea9c9c641c59e2f94e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pysrat-0.2.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 614.8 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
51adeffba4013e3f201aec1e79ea0740ce3bd9c0fb01c672cd296c128ad81585
BLAKE2b-256 checksum
How to use checksums
2c8372f7cbec88c437498002de0d93f99e37cc84a6cd03460a74c70329fc6bc7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp310-cp310-macosx_11_0_arm64.whl

Download URL pysrat-0.2.8-cp310-cp310-macosx_11_0_arm64.whl
Size 514.4 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
fda509ca24b0980868eaaba23b6d78936b1f8e2aa54a5bd5db9d8ebcc8dffdc4
BLAKE2b-256 checksum
How to use checksums
e3095371a0e097de03a2930de751e55b3bfc780e562f8f4212db6845a4c1d1c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp310-cp310-macosx_10_9_x86_64.whl

Download URL pysrat-0.2.8-cp310-cp310-macosx_10_9_x86_64.whl
Size 567.6 kB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
fa892548124744bf2dc5e28570010328d057312e7ba8e724ff816ea3f7368463
BLAKE2b-256 checksum
How to use checksums
941bf5b777fc0a26e81e4f9c6951399b67faa88be1bedf29a1c36d1e350ba2e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp39-cp39-win_amd64.whl

Download URL pysrat-0.2.8-cp39-cp39-win_amd64.whl
Size 566.7 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
d30435e398660dc913054b091e33ca2c137d173f8877c26049489204a2937eb7
BLAKE2b-256 checksum
How to use checksums
e0f34828b595b54736dc57f381354a9d457d887e83449a2432202acdc70857eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pysrat-0.2.8-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 615.1 kB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0169fda6db5da0fde994ee935d6951e8a630c390342b8dd327a1ef265d130a18
BLAKE2b-256 checksum
How to use checksums
a020488fa2c57de99f218d2bb412fd90b3681be8cd95d60457ea377a95a44f97
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp39-cp39-macosx_11_0_arm64.whl

Download URL pysrat-0.2.8-cp39-cp39-macosx_11_0_arm64.whl
Size 514.6 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a17d681f8de3d6f0c0c7d7b87dd178b7adb60d958f9dcf1576056fcba3ee8c62
BLAKE2b-256 checksum
How to use checksums
8f1a9280fae96e8203d63a42eee0ab3b8be95a09f54527b05a2d9f704a25d463
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / pysrat-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl

Download URL pysrat-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl
Size 567.8 kB
Tags CPython 3.9 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
59e0c2c197ed270123078b28193545938c4d5d23dadd121b300f02e912965355
BLAKE2b-256 checksum
How to use checksums
8061e224171a4ee0883531fdd055e9e29daa93621f82b26148b7f28a1de60357
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for pysrat 0.2.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page