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.7

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.7
File Size Uploaded Provenance Actions
pysrat-0.2.7.tar.gz 2.7 MB Without provenance Details for pysrat-0.2.7.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for pysrat 0.2.7
File Actions
pysrat-0.2.7-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for pysrat-0.2.7-cp313-cp313-win_amd64.whl
pysrat-0.2.7-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.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.7-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for pysrat-0.2.7-cp313-cp313-macosx_11_0_arm64.whl
pysrat-0.2.7-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details for pysrat-0.2.7-cp313-cp313-macosx_10_13_x86_64.whl
pysrat-0.2.7-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for pysrat-0.2.7-cp312-cp312-win_amd64.whl
pysrat-0.2.7-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.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.7-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for pysrat-0.2.7-cp312-cp312-macosx_11_0_arm64.whl
pysrat-0.2.7-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details for pysrat-0.2.7-cp312-cp312-macosx_10_13_x86_64.whl
pysrat-0.2.7-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for pysrat-0.2.7-cp311-cp311-win_amd64.whl
pysrat-0.2.7-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.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.7-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for pysrat-0.2.7-cp311-cp311-macosx_11_0_arm64.whl
pysrat-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details for pysrat-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl
pysrat-0.2.7-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for pysrat-0.2.7-cp310-cp310-win_amd64.whl
pysrat-0.2.7-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.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.7-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for pysrat-0.2.7-cp310-cp310-macosx_11_0_arm64.whl
pysrat-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details for pysrat-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl
pysrat-0.2.7-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details for pysrat-0.2.7-cp39-cp39-win_amd64.whl
pysrat-0.2.7-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.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
pysrat-0.2.7-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details for pysrat-0.2.7-cp39-cp39-macosx_11_0_arm64.whl
pysrat-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64 Details for pysrat-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl

Total release size: 14.1 MB

Release files / pysrat-0.2.7.tar.gz

Download URL pysrat-0.2.7.tar.gz
Size 2.7 MB
Tags Source
SHA-256 checksum
How to use checksums
c2210543e96292b42f78d1ee17f9f058798057519731cc20bcdd7ad73cc9ed7c
BLAKE2b-256 checksum
How to use checksums
6e7768557b5f76478a8cd64028aca6aa7a10fb88ea6e6a2b980dc6e657c7ba89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp313-cp313-win_amd64.whl
Size 572.5 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
c36fd48b044c69acca8d801b3377e305accbe31d4e3691f16079aee193594b23
BLAKE2b-256 checksum
How to use checksums
f458590effc333db84f2bf6e441c9b459c3a4c2fb590322b49a4411bd57b922f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 621.6 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6ca91a705133e483b65034d952b1450e6c1aee76cac17d5930bc614000e9e3d0
BLAKE2b-256 checksum
How to use checksums
314460bf516024599c78a0b64b2badfd7ed58e933cb039eef3bf10271bfd934b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp313-cp313-macosx_11_0_arm64.whl
Size 522.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6f999899998205440526e4ac9abc1945dc42caf27f3157843d9ca1289e2fde5e
BLAKE2b-256 checksum
How to use checksums
e5f3752cf8048aa12c37e8e94429f29f5fee6db7d597e63aa44eb02f0ead814a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp313-cp313-macosx_10_13_x86_64.whl
Size 577.6 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
1b1191f4206532c9e16c66a88ca44f71651da5d84a17a2fc194a9f6d2ec43f92
BLAKE2b-256 checksum
How to use checksums
0ea0febd4a8cdcbbd4741336d18f018f83cc5f052c4fc2f2e82ebd5e7f6b9acb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp312-cp312-win_amd64.whl
Size 572.3 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
8e62bbf9caa4f94029967f3a9a630a641442989a9b0bc51c64f9f36f209672f5
BLAKE2b-256 checksum
How to use checksums
c5712c38e6ac0d7c9f5392be904c24b3ceadc1008d3ee874b9557398e16ff03d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 621.5 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c7d4c0d32bdcdbdce1b5760ad2e9275be1bb41e4439efc5c9d949b1055577b00
BLAKE2b-256 checksum
How to use checksums
63aaa144fd1efb6bd0731f64d658a844051e15b7099382a6d09dba9b15eb5bdc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp312-cp312-macosx_11_0_arm64.whl
Size 522.3 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
914422ee4e69be11f7a4ed20c1582b74ab7291bddb3d5eb7957cee3f0db9f516
BLAKE2b-256 checksum
How to use checksums
8a2414f56fcaccfccd20213c20477de831b02446f3d4c172b082cec01f5d6264
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp312-cp312-macosx_10_13_x86_64.whl
Size 577.4 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
988e2bf0b9558879c80feae1f376472b3a58004ad7d003faf78377ee7c7277f2
BLAKE2b-256 checksum
How to use checksums
9c45027560f9224d597817990d842bf12ecfb44bfdf8cdacba902a645e77e6e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp311-cp311-win_amd64.whl
Size 566.0 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
e4564cbea3f9a5e719c948e8fb3a94b52af7985b733283ca8ffc5108a630330d
BLAKE2b-256 checksum
How to use checksums
3f4911ff0add3675ddc13b41db6e7a28ae3496ebfebce82b99940999c56a7f99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

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

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

Download URL pysrat-0.2.7-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
d3a08b7f0dcbdd0b9cd9b02de56d32a6764a1847bce7e356640c03eb1230b115
BLAKE2b-256 checksum
How to use checksums
775567c0373a38d31b3b6702c70c2de25e3cba6430efcbe5c2bfe81bc74221da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl
Size 571.8 kB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
975f3a6efc33dd9a5563fc0581699147ee7478dd831c4d5068b3f083eaee1ecb
BLAKE2b-256 checksum
How to use checksums
21ffb093213cc10b86d151db28bf15af7f5cc00e7bf5e62451bf40a58f08e1f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp310-cp310-win_amd64.whl
Size 563.6 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
aea842730aaae96f645d73c2aceffab3d77717a5564dbf45a62bb820f3d9ce6f
BLAKE2b-256 checksum
How to use checksums
84645ef9ca2dfb1d0eb4402713dcb13c74001c81e5de2f6a6cd3e71836b16dbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 616.4 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4a9484c276674fba94fb20170f207da56b29ada56a08f4a5935bfec0320ff5c8
BLAKE2b-256 checksum
How to use checksums
bfd0d679dd6f6b5f59026a5ce963061b4f2d87830eb84cf556ee848e7d99bbd5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp310-cp310-macosx_11_0_arm64.whl
Size 514.3 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c2eef8172be1953347e60fee96053b01161693d8e440088aad9d4ddb7493a150
BLAKE2b-256 checksum
How to use checksums
1fb522aeddbae41baf97c35e8ec6c93bbf48cb2f424c9fd30fc70e0300aff99e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl
Size 567.8 kB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
fe7900b969f28d22b442fdd3ec50bc826524cfd3d9be40c32a8cd7f75380654a
BLAKE2b-256 checksum
How to use checksums
e7352444dfdb8b12c3bca1aa79a409ad806b345be8edcb6dd1dbd61bafbb4aeb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

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

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

Download URL pysrat-0.2.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 616.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
c58b5b2d2b34aa2254d73a68747185510a975c83ca8768a34c17c520f1e59add
BLAKE2b-256 checksum
How to use checksums
0d3f9744c7c5ce2c1369e16329b79c7bcd19aa1d68039eaf93326d17b6ed3590
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp39-cp39-macosx_11_0_arm64.whl
Size 514.5 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e3c0bd2059e4c384e209d14d511ef465253f3a77df9f7414e96b4596653252f6
BLAKE2b-256 checksum
How to use checksums
9ffafe7e1ec7560551ec3e0ad8034aa8171b8d4b8dfa31b79e788b8b3d4d7632
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL pysrat-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl
Size 568.0 kB
Tags CPython 3.9 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
4c9f3342a881a81241591d84acb27dad90bdc9af39331a430151d59fdc100997
BLAKE2b-256 checksum
How to use checksums
e8b2e40a647502b247f32c2538dadd0533d7150eda01946e7d9bb6c11c2fafcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for pysrat 0.2.7

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