Ultra-fast Rust-powered statistics and time-series utilities for Python.
Project description
bunker-stats
Production-grade statistical computing library combining Rust performance with Python ergonomics
Version: 0.3.1
Status: Released
License: See LICENSE file
Overview
bunker-stats is a high-performance statistical computing library that delivers production-grade functionality through Rust backend kernels with Python bindings via PyO3. The library emphasizes deterministic results, numerical stability, and minimal allocations while maintaining an intuitive, Pythonic API.
Core Principles
🎯 Deterministic - Bit-exact given the same seed: every randomized routine is reproducible, and random_state=None behaves as seed 0
⚡ High-Performance - 2-5× faster than SciPy/pandas/numpy on its hot paths (rolling windows, robust estimators, bootstrap); see Performance for measured, per-function numbers
🔢 Numerically Stable - Kahan summation, Welford's algorithm, careful conditioning
🧪 Thoroughly Tested - 53 Rust unit/property tests + 600+ Python tests (numpy/scipy/pandas/statsmodels parity, edge cases, and never-panic properties); ~99% of public functions have a direct reference test
🔒 Type-Safe - Rust implementation with full input validation
📦 Zero Dependencies - Core functionality requires only NumPy
Release Notes — 0.3.1
The first release whose PyPI artifacts actually ship the documented Python
API. Every 0.2.x artifact — wheel and sdist alike — installed only the raw
bunker_stats_rs bindings; import bunker_stats failed for installed users.
0.3.1 wheels and sdist carry the full package, and CI now install-tests both
paths on every build so that gap cannot reopen.
Highlights on top of the 0.3.0 base (which was never published):
- Notebook layer (
bunker_stats.notebook,pip install "bunker-stats-rs[notebook]"): reports, stylers, batch transforms, and report objects with Plotly figures. - Rich results everywhere:
rich=Trueon the hypothesis tests and reports returns tuple-unpackable result objects with.to_dict(),.info(),.conclusion(alpha), and misuse warnings (small n, NaN, approximate p). - Bootstrap draws:
BootstrapConfig(return_draws=True)retains the resampling distribution with a CI identical to the tuple path (one shared kernel and RNG stream), enablingplot_distribution(). bg_test(resid, max_lag, exog=None): the full Breusch-Godfrey construction with the original model's regressors.- Portable wheels for Linux (glibc + musl), Windows, macOS (Intel + ARM),
CPython 3.9–3.13, built and smoke-gated in CI; local
target-cpu=nativetuning is explicitly stripped from release builds.
Release Notes — 0.3.0 consistency changes
A correctness-and-consistency pass. Every change below is pinned by a
regression test (see tests/test_hardening_v030.py).
Numeric bug fixes (behavior changes)
- Catastrophic cancellation eliminated in one-pass covariance/correlation
kernels.
cov/corr,cov_skipna/corr_skipna,cov_matrix_skipna/corr_matrix_skipna, the NaN-aware rollingstd/zscorepaths, and the strictrolling_cov/rolling_corrkernels now shift data by the first finite value (per series / per column) before accumulating. Second moments are translation-invariant, so results are mathematically identical but no longer lose all precision on large-offset data (e.g. series centered near 1e8 or 1e12).rolling_beta_skipnaandrolling_linreg_skipnause the same shift (the linreg intercept is un-shifted exactly). Verified against two-pass numpy references at offsets 1e8 and 1e12 — note that pandas' own one-pass rolling kernels fail this test. - Correlation outputs are clamped to [-1, 1] across scalar, matrix and rolling correlation kernels; round-off can no longer produce |r| slightly above 1.
welch_psd/bartlett_psdnow produce true density-scaled one-sided spectra: scale is1/(fs·Σw²)with interior bins doubled (the Nyquist bin is not doubled for evennperseg). Matchesscipy.signal.welchto ~1e-15 relative. Previously the output was neither 'density' nor 'spectrum' scaled and interior bins were not doubled.ks_1sampone-sided p-values are now exact (Birnbaum–Tingey / Smirnov formula, evaluated in log space), matchingscipy.stats.ks_1samp(alternative="greater"/"less"). Previously a roughexp(-2nD²)asymptotic was used.exp_cdfuses-expm1(-λx), keeping full precision for tiny arguments (exp_cdf(1e-18) == 1e-18instead of0.0).
Previously unregistered functions now exported
rolling_min, rolling_max, rolling_range, rolling_cv,
rolling_count_above, rolling_pct_above (O(1) sliding kernels) and
kde_gaussian (Gaussian KDE with Scott's-rule bandwidth, parity with
scipy.stats.gaussian_kde) are now registered in the extension module. Every
name in the facade's __all__ now resolves to a callable.
API consistency changes
One shared edge/validation contract across the library. Each item below is a deliberate behavior change:
- Rolling edge rule (strict, truncated-output kernels):
window < 1now raisesValueErroreverywhere (several kernels silently returned an empty array);window > len(x)now returns an empty array everywhere (rolling_cov,rolling_corr,rolling_autocorr,rolling_correlation,rolling_autocorr_multi,rolling_min/max/range/cv/count_above/pct_abovepreviously raised). Exception:rolling_medianintentionally keeps its pandas-like full-length output (length n, NaN head). - Facade rolling wrappers validate
windowas an integer >= 1, so a negative window raisesValueErrorinstead ofOverflowError. winsorizeaccepts quantile fractions in [0, 1] only with0 <= lower_q < upper_q <= 1; the old dual-unit auto-detection (which made1.0ambiguous and silently clamped out-of-range arguments) now raisesValueError.winsorized_mean(facade) uses the same fraction units, validating and converting to the kernel's percentile units; the rawwinsorized_mean_npbinding keeps percentile units for backwards compatibility.percentileraisesValueErrorfor q outside [0, 100] (previously silently clamped).trimmed_mean/trimmed_mean_skipnaraiseValueErrorforproportion_to_cutoutside [0, 0.5) (previously returned NaN).ewmarequires0 < alpha <= 1, raisingValueErrorotherwise.quantile_binsrequiresn_bins >= 1; the facade also rejects negativen_binswithValueError(previouslyOverflowErroror empty output).- Outlier detectors have keyword defaults:
iqr_outliers(x, k=1.5),zscore_outliers(x, threshold=3.0). alternativeis validated against{"two-sided", "less", "greater"}in the t-tests,mann_whitney_u, and the facadet_test_2sampwrapper (ValueErrorotherwise).cov/corrraiseValueErroron length mismatch (previously the longer input was silently truncated).acf/pacf(all methods) on constant input return 1.0 at lag 0 and NaN at lags >= 1 (statsmodels semantics; previously reported spurious autocorrelation).pacf_innovationsreports NaN instead of impossible coefficients with |value| > 1.welford([])returns(nan, nan, 0)— the mean of no observations is NaN, not 0.0.
Determinism
random_state=Nonenow means seed 0 for every randomized routine. The three block bootstraps (moving_block_bootstrap_mean_ci,circular_block_bootstrap_mean_ci,stationary_bootstrap_mean_ci) previously drew OS entropy when unseeded, andjackknife_after_bootstrap_se_meanused a different fixed default seed. All 15 resamplers now return bit-identical results forNonevs0and across repeated calls.bootstrap_meanis bit-identical across thread counts: per-resample means are collected in index order and averaged with a serial sum, removing the last parallel floating-point reduction whose rounding could depend on rayon's work-stealing schedule.
Release Notes — 0.2.9 Hardening
A full-codebase review and hardening pass. Every fix below is pinned by a regression test; the suite now stands at 458 Python tests + 53 Rust tests passing, 0 compiler warnings.
Crash fixes (highest impact)
- NaN inputs no longer kill the Python process. The release build uses
panic = "abort", so any Rust panic terminated the whole interpreter rather than raising an exception. ~24 sort/select code paths (median,mad,iqr,percentile,robust_scale,ecdf,quantile_bins,qn_scale,runs_test, and others) panicked on NaN input. All now use total-order comparison and propagate NaN (NaN in → NaN out) or raise a normalValueError. Impact: a single NaN in production data could previously crash the entire process, losing all in-flight work. zivot_andrews_testcrashed on every call via an out-of-bounds buffer write (the design-matrix column count was off by one). Impact: the function was unusable; the crash mode was a hard interpreter abort.
Statistical correctness
- Zivot-Andrews regression was numerically scrambled — the design matrix
was built row-major but read column-major, so breakpoint estimates and
t-statistics were noise. It now recovers the true structural break
(verified against
statsmodels). - Rolling variance/std/cov/corr suffered catastrophic cancellation on large-offset data (e.g. values near 1e8): results silently degraded to wrong zeros. All rolling second-moment kernels now use translation-offset accumulators. Impact: correct results on price-level-style series, not just mean-zero data.
- KPSS now uses the same automatic bandwidth as
statsmodels(nlags="auto"); statistics match statsmodels to machine precision. - ADF / Phillips-Perron p-values now come from the MacKinnon (1994)
regression surface (statsmodels-identical, including extreme tails). ADF
honors its
regressionandmax_lagarguments (previously ignored); PP applies the HAC long-run-variance correction and the correct Dickey-Fuller reference distribution (previously Normal). - Breusch-Godfrey statistic corrected to the standard
T·R²form. - Variance-ratio test rewritten as the proper Lo-MacKinlay overlapping estimator; a random walk now yields VR ≈ 1 as expected.
- Biweight midvariance exponents corrected to the standard (Beers-Flynn-Gebhardt / astropy) definition.
- Skewness/kurtosis now use scipy-consistent population moments (previously mixed sample/population estimators matching no standard convention).
- NaN-aware rolling cov/corr now match pandas
min_periods=windowsemantics. rolling_autocorr_multiwrote its output buffer column-major but reshaped it row-major, scrambling the matrix whenever more than one lag was requested (single-lag calls were coincidentally correct). Each columnjnow equalsrolling_autocorr(x, lags[j], window)exactly.
Test coverage & tooling
- Function-level test coverage rose from 51% to 99% of the 188 public functions: 67 new parity tests validate outputs directly against numpy / scipy / pandas / statsmodels references.
- New test layers: Rust unit + property tests (including never-panic-on-any-input properties), a binding-surface test asserting every registered export is callable, and a subprocess-isolated NaN-crash regression test.
- The
parallelfeature is now genuinely optional (--no-default-featuresbuilds and passes tests with a serial fallback), and the crate builds anrlibso Rust integration tests and fuzzing can link against it.
Modern facade API (v0.3 layer)
- One name per statistic; NaN handling is a keyword.
bs.mean(x, skipna=True)dispatches to the skip-NaN Rust kernel; the strict and skip-NaN kernels stay separate underneath, so there is no branch in the hot loop. Applies to mean/std/var/median/mad/iqr/zscore/trimmed_mean, cov/corr (scalar, matrix, and rolling), and the rolling reducers. - Keyword defaults everywhere.
bs.t_test_2samp(x, y)works bare (pooled, two-sided); options likeequal_var,pooledare keyword-only. - Unit-explicit argument names.
bs.winsorize(x, lower_q=0.05, upper_q=0.95)takes quantiles in [0, 1];bs.percentile(x, q=95)keeps numpy's [0, 100] convention — the name tells you the unit. - Optional pandas layer.
bunker_stats.pandasprovidescov_df/corr_df(labeled DataFrame results) and Styler helpers (corr_heatmap,zscore_style, ...). The core package remains numpy-only. - All raw
*_np/*_skipnanames remain available; nothing breaks.
Quick Start
Installation
pip install bunker-stats-rs
# ...plus the optional pandas/Jupyter reporting layer (see "Notebook UX" below)
pip install "bunker-stats-rs[notebook]"
The core package depends only on numpy. pandas, jinja2 and matplotlib
arrive with the [notebook] extra and are needed solely by
bunker_stats.notebook.
Basic Usage
import bunker_stats as bs
import numpy as np
# Robust statistics - resistant to outliers
data = np.array([1, 2, 3, 4, 5, 100]) # outlier: 100
location, scale = bs.robust_fit(data) # (3.5, 2.22) vs mean/std (19.17, 38.4)
# Rolling window operations - 2-5× faster than pandas
signal = np.random.randn(10000)
smoothed = bs.rolling_median(signal, window=10)
# NaN handling is a keyword, not a separate function
noisy = signal.copy(); noisy[::97] = np.nan
m = bs.mean(noisy, skipna=True) # numpy.nanmean semantics
r = bs.rolling_mean(noisy, window=20, skipna=True)
# Statistical inference - keyword defaults just work
x = np.random.randn(30)
y = np.random.randn(25) + 0.5
result = bs.t_test_2samp(x, y) # pooled, two-sided defaults
welch = bs.t_test_2samp(x, y, equal_var=False) # Welch's t-test
# Quantile arguments carry their unit in the name
clipped = bs.winsorize(x, lower_q=0.05, upper_q=0.95)
# Matrix operations - fast covariance/correlation
X = np.random.randn(1000, 10)
cov = bs.cov_matrix(X)
corr = bs.corr_matrix(X, skipna=True) # pairwise-complete
# Optional notebook layer (pip install "bunker-stats-rs[notebook]")
# from bunker_stats.notebook import robust_summary, outlier_style
# robust_summary(df) # DataFrame: median, MAD, IQR, Qn, skew, kurtosis...
# outlier_style(df) # Styler: highlights outliers across all columns
# Bootstrap confidence intervals (deterministic given random_state)
estimate, lower, upper = bs.bootstrap_mean_ci(data, n_resamples=10000, conf=0.95, random_state=0)
Module Documentation
Each module has comprehensive documentation with detailed API references, usage examples, performance benchmarks, and edge case behavior specifications.
1. Robust Statistics ✅ Production-Ready
Status: 73/73 tests passing
Performance: 2-5× faster than SciPy/pandas on order-statistic estimators (median/MAD/Qn)
Documentation: See src/kernels/robust/README.md
Outlier-resistant statistical estimators including:
- Location estimators (median, trimmed mean, Huber location)
- Scale estimators (MAD, IQR, Qn, Sn)
- Robust fitting (
robust_fit,robust_score) - Rolling robust statistics
- Skip-NaN variants for all functions
Key Features:
- Policy-driven
RobustStatsclass with composable configuration - Fused median+MAD kernel (40% faster joint computation)
- O(n) selection vs O(n log n) sorting (2-5× speedup)
- Perfect SciPy parity with deterministic results
2. Inference ✅ Production-Ready
Status: 15/15 tests passing
Performance: 1.2-1.5× faster than SciPy
Documentation: See src/infer/INFERENCE_README.md
Comprehensive statistical hypothesis testing suite:
- Chi-square tests: Goodness-of-fit, independence
- T-tests: One-sample, two-sample (pooled/Welch)
- Non-parametric: Mann-Whitney U, Kolmogorov-Smirnov
- Correlation: Pearson, Spearman with significance tests
- ANOVA: F-test, Levene's test, Bartlett's test
- Normality: Jarque-Bera, Anderson-Darling
- Effect sizes: Cohen's d, Hedges' g
Key Features:
- Numerical stability with extreme values (χ² > 1000, n > 5000)
- Exact finite-n algorithms (Durbin-Marsaglia for KS test)
- Welch-Satterthwaite with zero-variance edge case handling
- 100% SciPy parity (rtol ≤ 1e-10)
3. Matrix Operations ✅ Production-Ready
Status: 83/83 tests passing
Performance: correctness-first; dense cov/corr are ~0.6× numpy (no BLAS backend) — see Performance Highlights
Documentation: See src/kernels/matrix/README.md
High-performance matrix computations for statistical analysis:
- Covariance matrices: Sample, population, centered, pairwise-complete
- Correlation matrices: Pearson correlation, correlation distance
- Gram matrices: X^T X and X X^T for regression/kernel methods
- Pairwise distances: Euclidean, cosine
- Utilities: Diagonal extraction, trace, symmetry checking
Key Features:
- Guaranteed symmetry and positive semi-definiteness
- Optional Rayon parallelism for large matrices
- Comprehensive NaN handling with skip-NaN variants
- Perfect NumPy/SciPy parity with mathematical guarantees verified
4. Rolling Windows ✅ Production-Ready
Status: 53/53 tests passing
Performance: 2-5× faster than pandas (rolling std/mean); rolling_median is O(n) selection-based
Documentation: See src/kernels/rolling/ROLLING_README.md
Flexible rolling window statistics with policy-driven configuration:
- Statistics: Mean, std, variance, min, max, count
- Alignment: Trailing (classic) or centered (pandas-like)
- NaN handling: Propagate, ignore, or minimum periods
- Multi-stat kernels: Compute 2-6 statistics in single pass
- 2D support: Column-wise operations on matrices
Key Features:
Rollingclass with composableRollingConfigpolicies- Fused kernels for efficient multi-metric computation
- Kahan summation for numerical stability
- Automatic edge truncation for centered windows
- 100% backward compatibility with legacy functions
5. Resampling ✅ Production-Ready
Status: Deterministic given random_state; CI ordering and determinism tested
Performance: ~5× faster than a vectorized-numpy bootstrap loop
Documentation: See src/kernels/resampling/README.md
Lightning-fast resampling methods with ergonomic interfaces:
- Bootstrap: Percentile, BCa, bootstrap-t, and Bayesian CIs; standard error and variance
- Block bootstraps: Moving, circular, and stationary variants for autocorrelated series
- Permutation tests: Mean-difference and correlation
- Jackknife: Leave-one-out, delete-d, jackknife-after-bootstrap, influence values
Key Features:
BootstrapConfigclass with comprehensive validation- Flexible NaN handling (propagate or omit)
- Deterministic random seeding for reproducibility
- Zero performance overhead from config layer
- Actionable error messages
6. Time Series Analysis ✅ Production-Ready
Status: Core statistics validated against statsmodels (ADF, KPSS, Ljung-Box, ACF/PACF to machine precision)
Documentation: See src/kernels/tsa/README.md
Comprehensive temporal data analysis tools:
- Correlation: ACF, PACF (Levinson-Durbin, Yule-Walker, Innovations, Burg)
- Spectral analysis: Periodogram, Welch PSD, spectral density
- Diagnostic tests: Ljung-Box, Box-Pierce, Breusch-Godfrey, Durbin-Watson, runs test
- Stationarity: ADF (MacKinnon p-values), KPSS (automatic bandwidth), Phillips-Perron, Zivot-Andrews structural break, variance ratio
- Rolling operations: Rolling autocorrelation (single and multi-lag)
7. Distributions ✅ Production-Ready
Status: Round-trip (ppf(cdf(x)) ≈ x) and reference-parity tested
Documentation: See src/kernels/dist/README.md
Vectorized distribution functions for Normal, Exponential (rate-parameterized), and Uniform:
- Densities:
pdf,logpdf - Probabilities:
cdf,sf,logsf— dedicated survival functions keep far-tail p-values accurate where1 - cdfwould cancel to zero - Quantiles:
ppfwith strict domain checks - Reliability: cumulative hazard functions for survival analysis
8. Quantiles & Order Statistics ✅ Production-Ready
Status: NumPy-parity tested, NaN-safe
Documentation: See src/kernels/quantile/README.md
Order-statistic utilities built on O(n) selection:
- Percentiles & IQR:
percentile, IQR family including skip-NaN variants - Winsorization: Percentile-based and explicit-bound clipping
- Outlier masks: IQR fences and z-score thresholds
- Empirical distributions: ECDF and quantile binning
Rich Results (opt-in result objects)
Hypothesis tests return a plain dict by default. Pass rich=True to get a
result object instead — tuple-unpackable, indexable, and carrying a bit of
extra metadata (sample sizes, the chosen alternative, and cheap effect
sizes / CIs computed from the same kernels). This mirrors the result-object
style already used by the time-series tests.
import bunker_stats as bs
# Default: unchanged dict return
bs.t_test_2samp(x, y)
# -> {'statistic': ..., 'pvalue': ..., 'df': ..., 'mean_x': ..., ...}
# Opt in to a rich result
res = bs.t_test_2samp(x, y, equal_var=False, rich=True)
stat, pval = res # tuple unpacking (statistic, pvalue)
res[0], res[1] # indexing
res.pvalue, res.df # named access
res.effect_size # Cohen's d, computed from the same inputs
res.n1, res.n2, res.equal_var
res.is_significant(0.05) # -> bool
res.to_dict() # JSON-friendly dict of populated fields
print(res.conclusion(alpha=0.01))
print(res.info()) # multi-line human summary
>>> print(res.info())
t-Test
============================================================
Statistic: -2.145318
P-value: 0.033987
Test: two-sample
Alternative: two-sided
df: 118
Mean x / y: 0.0512 / 0.4231
Equal variance: False
Cohen's d: -0.394
n1 / n2: 60 / 70
Conclusion: Reject H0 (the two means are equal) at alpha=0.05 (p=0.034)
Which tests support rich=True
| Function(s) | Result type | Notable extra fields |
|---|---|---|
t_test_1samp, t_test_2samp, t_test_paired |
TTestResult |
effect_size (Cohen's d, 2-sample), n1/n2, equal_var |
chi2_gof, chi2_independence |
ChiSquareResult |
dof, observed, test_type |
mann_whitney_u |
MannWhitneyResult |
rank_biserial, n1/n2 |
ks_1samp |
KSResult |
distribution, n |
f_test_oneway |
ANOVAResult |
eta_squared, omega_squared, n_groups/n_total |
pearson_corr_test, spearman_corr_test |
CorrelationTestResult |
r, ci_low/ci_high (Pearson) |
jarque_bera, anderson_darling |
NormalityResult |
skewness, kurtosis, critical_value_5pct |
The result classes are exported from both the root package and
bunker_stats.infer (for isinstance checks and type hints):
from bunker_stats.infer import TTestResult, NormalityResult
isinstance(bs.t_test_2samp(x, y, rich=True), TTestResult) # True
Beyond inference
The same rich=True opt-in extends to other modules. Matrix and outlier
results are array-like — np.asarray(result) returns the payload with no
copy, so they drop straight into NumPy code — while still carrying metadata and
conversions.
| Function / method | Result type | Highlights |
|---|---|---|
corr_matrix(X, rich=True, columns=...) |
CorrelationMatrixResult |
array-like; .to_frame(), .style_heatmap(), n_obs |
cov_matrix(X, rich=True) |
CovarianceMatrixResult |
array-like; ddof, .to_frame() |
robust_fit(x, rich=True) |
RobustFitResult |
unpacks location, scale; .zscores(x) |
iqr_outliers(x, rich=True), zscore_outliers(x, rich=True) |
OutlierResult |
array-like mask; .indices(), bounds, counts |
Rolling(x, w).result(*stats) |
RollingResult |
dict-like by stat; .to_frame(), .plot() |
bootstrap(x, rich=True) |
BootstrapResult |
unpacks estimate, ci_lower, ci_upper |
permutation_test(x, y, rich=True) |
PermutationTestResult |
unpacks statistic, pvalue; .conclusion() |
# Array-like matrix result
C = bs.corr_matrix(X, rich=True, columns=["a", "b", "c"])
np.asarray(C) # the raw matrix, no copy
C.to_frame() # labeled DataFrame
C.style_heatmap() # Styler (needs matplotlib)
# Robust fit unpacks like a tuple, but carries more
loc, scale = bs.robust_fit(x, rich=True)
# Outlier mask behaves like the boolean array it wraps
out = bs.iqr_outliers(x, rich=True)
x[out] # boolean-index with the result directly
out.indices() # positions flagged, plus out.lower_bound / out.upper_bound
# Rolling result is dict-like over the statistics
r = bs.Rolling(x, window=20).result("mean", "std")
r["mean"]; r.to_frame(); print(r.info())
These result classes are exported from the root package and their submodules
(bunker_stats.matrix, bunker_stats.robust, bunker_stats.rolling,
bunker_stats.resampling).
Protocol shared by every rich result
| Member | Behaviour |
|---|---|
for v in res / a, b = res |
Yields the primary fields — (statistic, pvalue), except CorrelationTestResult yields (r, pvalue). |
res[i] |
Integer/slice indexing over those same primary fields. |
res.to_dict(array=False) |
All populated fields (None omitted). NumPy scalars become Python scalars; arrays become lists unless array=True. |
res.info() |
Multi-line summary: statistic, p-value, test-specific detail, and a conclusion line. ASCII-only, so it prints on any console. |
res.conclusion(alpha=0.05) |
One-line verdict at the given significance level. |
res.is_significant(alpha=0.05) |
bool; False when the p-value is missing/NaN. |
Two behaviours worth noting:
- Backward compatibility is absolute. The
richkeyword is the only thing the facade intercepts; every other argument is forwarded untouched, so the default (rich=False) return is byte-for-byte what it always was — including the deprecated*_npaliases. - Anderson-Darling has no p-value.
NormalityResult.pvalueisNoneforanderson_darling; itsconclusion()/is_normal()fall back to the 5% critical value (A* > 0.787 rejects normality).
Misuse-prevention warnings
Rich results carry a warnings list flagging conditions that make the numbers
easy to over-trust — small samples, non-computable p-values, approximate
p-values, zero-variance/all-NaN columns, low bootstrap resample counts.
Warnings appear in .info() output and in .to_dict()["warnings"]; a clean
result has an empty list:
r = bs.t_test_2samp(x[:5], y[:6], rich=True)
r.warnings
# ['small sample (min n = 5): asymptotic p-values are unreliable']
Notebook UX (optional pandas layer)
bunker_stats.notebook is the ergonomic bridge between the Rust kernels and
pandas/Jupyter. Every helper is a thin, validated wrapper — the numbers always
come from the same kernels the core API uses.
pip install "bunker-stats-rs[notebook]"
import bunker_stats stays numpy-only: pandas is never imported at package
import time, and even import bunker_stats.notebook succeeds without pandas
installed. The import happens lazily on the first call, and a missing install
raises a clear ImportError naming the command above.
Naming convention
| Suffix | Returns |
|---|---|
*_report |
pandas.DataFrame of results (usually one row per column) |
*_style / style_* |
pandas.io.formats.style.Styler |
*_columns |
pandas.DataFrame copy with added/transformed columns |
Quick tour
import bunker_stats as bs
from bunker_stats.notebook import (
robust_summary, describe_fast, outlier_report, outlier_style,
normality_report, correlation_report, corr_heatmap, missingness_report,
scale_columns, winsorize_columns, rolling_report, bootstrap_ci_report,
style_significance, style_effect_size,
)
# --- Profiling ---------------------------------------------------------
robust_summary(df) # count, mean, std, median, MAD, IQR, Qn,
# trimmed mean, skew, kurtosis
describe_fast(df) # a faster, richer df.describe().T
missingness_report(df) # NaN vs +/-inf vs finite, per column
# --- Outliers ----------------------------------------------------------
outlier_report(df, method="iqr", k=1.5) # counts, %, bounds
outlier_report(df, method="robust_zscore") # median/MAD fences
outlier_style(df) # highlight across columns
# --- Distribution & association ----------------------------------------
normality_report(df) # Jarque-Bera + A-D
correlation_report(df, method="spearman") # square matrix
correlation_report(df, pvalues=True) # long form with p-values
corr_heatmap(df) # gradient Styler
# --- Transforms --------------------------------------------------------
scale_columns(df, method="robust") # adds *_robust columns
scale_columns(df, method="zscore", replace=True) # overwrite in place
winsorize_columns(df, lower_q=0.05, upper_q=0.95) # adds *_winsor columns
# --- Time series & uncertainty -----------------------------------------
rolling_report(df, "price", window=20, stats=("mean", "std"))
bootstrap_ci_report(df, stat="median", n_resamples=5000, random_state=0)
# --- Styling result tables ---------------------------------------------
style_significance(results, pvalue_column="pvalue", alpha=0.05)
style_effect_size(results, "cohens_d", thresholds=(0.2, 0.5, 0.8))
Helpers are also reachable lazily off the package (bs.notebook.robust_summary(df))
and re-exported from bunker_stats.pandas alongside cov_df / corr_df.
Report objects and interactive Plotly figures
Every *_report helper also takes rich=True, returning a report object
instead of a bare DataFrame — same numbers (report.data), plus meta
(method, parameters, NaN policy, seeds), misuse-prevention warnings, a stable
to_dict() schema ({"title", "data", "meta", "warnings"}), .style(),
.info(), and interactive Plotly figure methods:
from bunker_stats import notebook as nb
rep = nb.outlier_report(df, rich=True)
rep.plot_counts() # plotly Figure: outlier counts, hover shows % + method
corr = nb.correlation_report(df, rich=True)
corr.plot_heatmap() # plotly Figure: hover shows pair + r; NaN cells = gaps
ci = nb.bootstrap_ci_report(df, n_resamples=5000, random_state=0, rich=True)
ci.plot_intervals() # plotly Figure: estimates with CI error bars
# Result objects grew Plotly methods too:
bs.Rolling(x, window=20).result("mean", "std").plot() # one trace per stat
za.plot_breakpoint_scan_plotly() # Zivot-Andrews scan
# Bootstrap draws are retained on request — same kernel and RNG stream, so
# the estimate/CI match the plain tuple path exactly:
from bunker_stats.resampling import BootstrapConfig
res = BootstrapConfig(n_resamples=5000, random_state=0, return_draws=True).run(x)
res.plot_distribution() # histogram of draws + estimate/CI lines
Figure methods return plotly.graph_objects.Figure — they never call
.show(), and every figure serializes via fig.to_json() / fig.to_html().
Plotly ships with the notebook extra; calling a plot method without it raises
Install with pip install bunker-stats-rs[notebook] to use Plotly visualizations. Everything else on a report object works without Plotly.
NaN and infinity policy
The Rust kernels are strict: one NaN anywhere poisons the whole result. That is right for a numerics library and wrong for exploratory analysis, so this layer makes the choice explicit rather than inheriting it:
| Helper family | Behaviour with NaN / ±inf |
|---|---|
*_report, robust_summary, describe_fast |
Dropped per column before the kernel runs; the count appears in n_missing. A column with no finite values yields an all-NaN row, not an exception. |
correlation_report, corr_heatmap |
Dropped pairwise — each pair uses rows where both columns are finite. n per pair is reported when pvalues=True. |
*_columns |
The transform is fit on finite values only, then results are scattered back into their original positions. Non-finite in ⇒ NaN out; row alignment is always preserved. |
*_style, style_* |
Never raise; NaN cells simply receive no background color. |
missingness_report |
The exception — it counts rather than drops, and separates NaN from ±inf. |
Two behaviours worth calling out explicitly:
- Anderson-Darling has no p-value. The kernel returns the A* statistic
only (its critical values need table interpolation), so
normality_reportreportsad_statisticfor reference and bases thenormal/conclusionverdict solely on the Jarque-Bera p-value. As a rule of thumb A* > 0.787 rejects normality at α = 0.05. rolling_report(..., nan_policy="ignore")does nothing on its own. With the defaultmin_periods == window, a window containing a NaN still fails the count check. To actually skip NaNs, passmin_periodsbelowwindow:rolling_report(df, "x", 5, min_periods=3, nan_policy="ignore").
Backwards compatibility
The original five helpers (demean_style, zscore_style, iqr_outlier_style,
corr_heatmap, robust_scale_column) keep working from
bunker_stats.pandas_helpers, which is now a shim over the notebook layer.
They gained dtype validation and NaN safety; iqr_outlier_style is now a thin
wrapper over the multi-column outlier_style.
Performance Highlights
Measured with timeit (best of 5) on Windows 11, Python 3.10, numpy 2.2 /
pandas 2.3 / scipy 1.15 / statsmodels 0.14. ratio = reference_time / bunker_time, so > 1× is faster, < 1× is slower. Numbers are machine- and
size-dependent; reproduce with benchmarks/.
| Operation | Size | vs reference | Ratio |
|---|---|---|---|
rolling_std (w=50) |
n=1e4 | pandas | 5.2× |
rolling_std (w=50) |
n=1e6 | pandas | 2.6× |
rolling_mean (w=50) |
n=1e4 / 1e6 | pandas | 3.3× / 2.4× |
mad |
n=1e6 | numpy | 4.0× |
median |
n=1e4 / 1e6 | numpy | 3.6× / 2.1× |
bootstrap_mean_ci (1000 res.) |
n=1e4 | numpy (vectorized) | 4.9× |
norm_cdf |
n=1e6 | scipy | 2.5× |
kpss_test |
n=5000 | statsmodels | 1.2× |
percentile |
n=1e6 | numpy | ~1.1× (parity) |
cov_matrix / corr_matrix |
1000×50 | numpy | 0.6× (slower — see below) |
adf_test (matched lag count) |
n=5000 | statsmodels | 0.15× (slower — see below) |
Where it wins: streaming/rolling statistics, order-statistic estimators
(median/MAD/Qn), and bootstrap confidence intervals — the O(n) single-pass and
selection-based kernels are 2–5× faster than the pandas/numpy equivalents,
with the largest margins at small-to-medium n.
Where it does not (honest caveats):
- Dense linear algebra (
cov_matrix,corr_matrix) is ~0.6× numpy. numpy dispatches these to a tuned multithreaded BLAS (OpenBLAS/MKL); the portable pure-Rust kernels here do not link a BLAS, so they trail on large dense products. If matrix throughput is your bottleneck, compute these with numpy. adf_testwith an explicit lag count is slower than statsmodels, whose OLS path is LAPACK-backed. (The headline "hundreds of ×" figures that appeared in earlier drafts compared against statsmodels' default automatic lag search, which does substantially more work — an apples-to-oranges comparison that has been removed.)
Design Philosophy
1. Determinism First
Results are bit-exact given the same seed. Deterministic kernels produce identical results across runs and thread counts; every randomized routine takes a random_state, and leaving it as None uses seed 0 rather than entropy, so even "unseeded" calls are reproducible.
2. Edge Cases Matter
Production data has empty arrays, NaN values, zero variance, and extreme values. All functions handle these gracefully with clear, documented behavior.
3. Performance Without Compromise
Optimizations never sacrifice correctness or numerical stability. All performance claims are verified against reference implementations.
4. Ergonomic Configuration
Policy-driven design with composable configuration objects. Sensible defaults, actionable error messages, zero performance overhead.
5. Comprehensive Testing
Every edge case, every numerical corner, every performance regression is covered by tests. Test failures are treated as bugs, not warnings.
API Compatibility
NumPy/SciPy Parity
cov_matrixmatchesnp.cov(X.T, ddof=1)corr_matrixmatchesnp.corrcoef(X.T)- Inference functions match SciPy results to machine precision (rtol ≤ 1e-10)
- MAD with
consistent=Truematches SciPy's consistency factor (1.4826)
Backward Compatibility
- All legacy flat functions preserved
- Config classes add features without breaking existing code
- Deprecation warnings for upcoming changes
- Semantic versioning for API changes
Testing
Run the comprehensive test suite:
# All tests
pytest tests/ -v
# Specific modules
pytest tests/test_robust_stats.py -v # Robust statistics (73 tests)
pytest tests/test_inference*.py -v # Inference (15 tests)
pytest tests/test_matrix.py -v # Matrix ops (83 tests)
pytest tests/test_rolling*.py -v # Rolling windows (53 tests)
pytest tests/test_resampling.py -v # Resampling (25 tests)
pytest tests/test_tsa*.py -v # Time series (45/47 tests)
# With coverage
pytest tests/ --cov=bunker_stats --cov-report=html
Total Test Coverage: 294+ tests across all modules
Building from Source
Requirements
- Python ≥ 3.8
- Rust ≥ 1.70
- NumPy ≥ 1.20
Build Commands
# Development build
maturin develop
# Optimized release build
maturin develop --release
# With parallel features (Rayon)
maturin develop --release --features parallel
# Build distributable wheel
maturin build --release
Roadmap
v0.3.1 (Current)
✅ NaN inputs no longer abort the interpreter; panic boundaries hardened
✅ Numeric correctness pass (cancellation-stable covariance/correlation, exact KS p-values, corrected PSD scaling, MacKinnon ADF/PP p-values)
✅ TSA core validated against statsmodels (ADF, KPSS, Ljung-Box, ACF/PACF)
✅ API consistency contract (uniform window/NaN/unit rules; see the 0.3.0 release notes)
✅ Deterministic resampling (random_state=None == seed 0 everywhere)
✅ ~99% of public functions covered by direct reference tests
v0.4.0 (Planned)
- Multivariate robust stats: MCD, OGK covariance
- Robust regression: Huber, Theil-Sen, RANSAC
- Weighted statistics: weighted median, MAD, robust_fit
- BLAS-backed matrix kernels (current pure-Rust cov/corr are ~0.6× numpy; linking a BLAS would close the gap)
- Bayesian inference module
- Model selection criteria (AIC, BIC)
- Cross-validation utilities
- Spectral density estimation enhancements
Contributing
We welcome contributions! Key areas:
- New estimators - Additional robust/Bayesian methods
- Performance - SIMD, GPU acceleration
- Documentation - Examples, tutorials, benchmarks
- Testing - Edge cases, stress tests
- Bug fixes - Numerical issues, edge case handling
See CONTRIBUTING.md for guidelines.
Citation
If using in academic work:
@software{bunker_stats,
title = {bunker-stats: Production-grade statistical computing in Rust and Python},
author = {[Author Name]},
year = {2026},
version = {0.2.9},
url = {https://github.com/[repo]/bunker-stats}
}
License
See LICENSE file in repository root.
Support
- Documentation: See module-specific READMEs (listed above)
- Bug Reports: Open an issue on GitHub
- Questions: GitHub Discussions
- Performance Issues: Include benchmarks and system info
Acknowledgments
Built with:
- Rust - High-performance kernels
- PyO3 - Python bindings
- Rayon - Optional parallelism
- statrs - Statistical distributions
Validated against:
- NumPy - Matrix operations
- SciPy - Statistical tests and distributions
- statsmodels - Time series analysis
- pandas - Rolling window operations
bunker-stats: Because real-world data demands production-grade statistics 🚀
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bunker_stats_rs-0.3.1.tar.gz.
File metadata
- Download URL: bunker_stats_rs-0.3.1.tar.gz
- Upload date:
- Size: 470.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1738587e4194f11102bc7c2bf8115c3c1eb5daa363c7b884a6836718d9e2bd20
|
|
| MD5 |
d946c85a82339bbdd22fdc06838d31c3
|
|
| BLAKE2b-256 |
0efa0629d927bd2f492ce50f5a4e4bfaf179793fd0b03cc2f7d2b486368cb867
|
File details
Details for the file bunker_stats_rs-0.3.1-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 933.6 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d493df97eb0892cec504162fa5b630989a501fc6468bf35aeaccc79a9e2d1d62
|
|
| MD5 |
18977ad86b7caca63f1261e1f2a5102a
|
|
| BLAKE2b-256 |
9a8f5ad93a2ed88d742eb45cd6bce1c834d6bd9b57a0756debdf90c202a1b97d
|
File details
Details for the file bunker_stats_rs-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63221309d7c4f7347a9aad6b54b9305078a3469348f41687fd7951e1a6821158
|
|
| MD5 |
2cb0af11e57b58953d650901cc13a2f9
|
|
| BLAKE2b-256 |
056ca510a10e070bb78745cb3c00087918c3d940f5c1cf6799ac5c616bbb7943
|
File details
Details for the file bunker_stats_rs-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30b32ec24c748b356d4b2bc6609064be111e261dde71b6a297e8b39a60e3a999
|
|
| MD5 |
ac6ca25465c84098b07a95c8090c30c1
|
|
| BLAKE2b-256 |
cf640db6721f45b51f2f4c31530d4341710f82d459e67e5561c6e65e3dc285a6
|
File details
Details for the file bunker_stats_rs-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2fba28b9499d951df7a094d42a5635c80c2620259e088ddcdbbfe8b25c7d4abc
|
|
| MD5 |
52dbc5a59c23a41cec3318788da3fe57
|
|
| BLAKE2b-256 |
58f18426c578dbe5a99692461af064fddef9748006d434fd68890bc4b5d85094
|
File details
Details for the file bunker_stats_rs-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 917.2 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78852eaccf3e4178ec107395b0374f0bb8d5095591e10eb8d7add5ab96ef7ffb
|
|
| MD5 |
9afb428e00e5acdfd65723c52f1ba22e
|
|
| BLAKE2b-256 |
4f047f75ea53652b31b59e2942086ff63956bbc1283b2026c8855d6faa9a5140
|
File details
Details for the file bunker_stats_rs-0.3.1-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 849.1 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9fbecf7808e3e5e41197a4370753aa6ca63080b8fbb39055bb3032f762cd0c4a
|
|
| MD5 |
69bd499bbe261a12612361bb92302cb9
|
|
| BLAKE2b-256 |
9330a000f62fd4be64e43d955ada9c353d610cd4bb86850a41fe852e8797f778
|
File details
Details for the file bunker_stats_rs-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9da749a28808ac6f55def7fabcbad514f14fd1b1e01edd4726a4796e6bd6e43c
|
|
| MD5 |
7106055ef41dafe460375658d17a1ab0
|
|
| BLAKE2b-256 |
7f9bcc46e8e8d9d4d2b39a8b366075c6cc69c50efd3505dd9182236cfd33a31f
|
File details
Details for the file bunker_stats_rs-0.3.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 933.8 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6bc99c0965a5c734e3cab2e28ed7b39668cdb3bfb03221322e5a504a5873773
|
|
| MD5 |
60efb55a2f45c61625853e1349b77c38
|
|
| BLAKE2b-256 |
afa3e3b7052cd46da8b7116749356a6b0987d085eda50ab1aae9487222d1a1f7
|
File details
Details for the file bunker_stats_rs-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d458b72b0c38228dfb7a584f45fb522bb65ee2afeee5597b155430ac2e6113a
|
|
| MD5 |
f06957d0a3bea0d0c78b8ba241caf8b0
|
|
| BLAKE2b-256 |
3eebe4a01e20a0f63c658096e76fda890763f7b5cce54e197982bb03b060b286
|
File details
Details for the file bunker_stats_rs-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
663f912fe6a3f5cd4f315e05304911d28652a40d911b9a0664fe24f1059f07ca
|
|
| MD5 |
cc204a0b0f6a68daf31649b72bca53bd
|
|
| BLAKE2b-256 |
9012314a574950e3a81ca6c1a8bbdc5afe51dc033a919b3701f7914815ce8f3c
|
File details
Details for the file bunker_stats_rs-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c474672e54363b0220a308edad4aef6e21e7bdb60b2b3b98b8c9c55d971749b
|
|
| MD5 |
42c0161e583bec4a967cfb020e4d17c8
|
|
| BLAKE2b-256 |
a1d6e9b6c63f2ef331f922403c2910895ce75f6057d7e66c8716b2809ca0b1af
|
File details
Details for the file bunker_stats_rs-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 917.4 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22bae86a21c2e77db47e611d9d7beadcf9a707e1d5764519f50a50d38d85c590
|
|
| MD5 |
f1b297a8151584ca2ca4d8e90be332bd
|
|
| BLAKE2b-256 |
1c156d269f9d2d256edc72247fb1e95fd7f75ab4269216bfd2c583f8e51ea64f
|
File details
Details for the file bunker_stats_rs-0.3.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 849.5 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63f6c49e56e38f319871f8a30c92be86b2639c4313b4c17c9c76c61a33946635
|
|
| MD5 |
5350b8b13115c0ffc98216d9a903b130
|
|
| BLAKE2b-256 |
62a0fc5acaeece37b3b3c13b8ffba168ae34e4fb00261bf2b4d465799cba3af2
|
File details
Details for the file bunker_stats_rs-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
525e52cb52fcefa881edbc454b5270985bc2221bcf20c83004938b6fbc17ed3e
|
|
| MD5 |
a4cdef6d5f136eb2ffb721ed59802a33
|
|
| BLAKE2b-256 |
3c8c01a069426b8cbecc4925cc427f3fc60f85d521662daccf182bccd52905bf
|
File details
Details for the file bunker_stats_rs-0.3.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 933.2 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
056fd87dc6c68fc981b3e62335aa539b3e52640f61e21dab7799579974b2ce03
|
|
| MD5 |
33e0d710dbf9452740653368137190de
|
|
| BLAKE2b-256 |
32d294a19f5aca748acf82cf1d0af15e6a65e8213ac2e9334891cf3ab20dec97
|
File details
Details for the file bunker_stats_rs-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbe36007a36569cc2474cb5301e4a7b1dc2247664748da83d4f3fdb076602d4d
|
|
| MD5 |
d5a7f5377e59e3a31e0e8edb23e0ed6c
|
|
| BLAKE2b-256 |
ca290dd81a8bf7bcc6e0c88cc725854b5faa461c2b46ccb4fee1187054c7e66d
|
File details
Details for the file bunker_stats_rs-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
033bde36749ba0bdd5a09b4af6149c0cc5c2b134af101ec431fe1af0fc456563
|
|
| MD5 |
db25569619236b96db24cc9ea153de37
|
|
| BLAKE2b-256 |
00832fc2d50c662dd1e80a4dd1723e4875b39ba1279251ea0e70ff8a4b25f44f
|
File details
Details for the file bunker_stats_rs-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58d182d30d625ab823856cafd58602b2f62c9c5af4108d6e9187b1f7c0c44a6d
|
|
| MD5 |
1b3517eb50884afeb1f329db5e873b96
|
|
| BLAKE2b-256 |
f453c2d4a919a279c27e3ff130ecb8f353acc715cfe5cab46a8f227f093f91a9
|
File details
Details for the file bunker_stats_rs-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 918.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b74434703bc1a2bb7d28465e30d0725c84957e3c64887bca509bb44702ed8d8
|
|
| MD5 |
7ab416c0a1ebb2bfbf96fb68cbff03c7
|
|
| BLAKE2b-256 |
aad2ac74421dc6266f1b5ca379d56a45c6b1ae78f1bb9342ab2a3afad9534e13
|
File details
Details for the file bunker_stats_rs-0.3.1-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 851.6 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b31acbb9de2c419e6c5a9fb787899e959431865e060b798c2ae1deb6d8b978df
|
|
| MD5 |
efe5db963ab3e197f4e60beb0cf3e67f
|
|
| BLAKE2b-256 |
6be7331e53e9e8d71cb4967bbad63f520fc1dc4857aa630f635acabd4f4dc78c
|
File details
Details for the file bunker_stats_rs-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48a12a9966986b8b4a3715c946fa9117ff4c01e48bdd36ddf24125b44aaeb5a0
|
|
| MD5 |
28ccf1c24792c70fae2197cab1ff8aca
|
|
| BLAKE2b-256 |
70f90ca2336fa6454d4634a5f5360904b1144c08c627bd4d52a6887e392fe667
|
File details
Details for the file bunker_stats_rs-0.3.1-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 933.3 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
266d02409444459bcceb40d15a019f01161a9aafb869d65ccf0fbd53f5f157c4
|
|
| MD5 |
9c0b901e16f0cac15370e1ed9290365c
|
|
| BLAKE2b-256 |
eba4ba244c2f333c94538f27b342c9998a983e69a37b867e51cc602e49475dec
|
File details
Details for the file bunker_stats_rs-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82e4f67658043c621e00077207c0769535cf56d509b4e755a5c3fc5784454138
|
|
| MD5 |
5a53c979d83b9bfa515e6f6de971b228
|
|
| BLAKE2b-256 |
656474fb060707210e595889079890d721ba4852f767dee47c9cd20ae5c978f3
|
File details
Details for the file bunker_stats_rs-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aaa0f056e28416d8916feb9b43a8ca6fffd78e5e6e2ab05c1ddffc5b1a514cec
|
|
| MD5 |
a5a5c43878c58986de82706d382c9ded
|
|
| BLAKE2b-256 |
8ad0adbb6e692471e573ce34a014d592e479fbf020ad3e184316c24dc9f4d935
|
File details
Details for the file bunker_stats_rs-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a55dc626df0eb7f82a761e0152fe952264a98f15bb3d87014fb7363a2c62503
|
|
| MD5 |
ab8484947ed8c3096dfe10e03432125d
|
|
| BLAKE2b-256 |
cf150f237d4694ab3754d6f4a566827ab27eae2b40922aa73a459e650737faf7
|
File details
Details for the file bunker_stats_rs-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 918.3 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ee9c17d7890d52da2caab1db53aa63918076a0ecad86f1043152e414ecb452d
|
|
| MD5 |
186affabd574f92207f015aa319bd54f
|
|
| BLAKE2b-256 |
2f8594ca932054cd9bc88d71caf6f11f94cf93cb51775b5f2aa8b916bfbc4093
|
File details
Details for the file bunker_stats_rs-0.3.1-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 851.8 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b00231f2bcd330a2d3d5bdf4cbaa5486a0a92e8fc7ddbf7ab553d80b71d562ce
|
|
| MD5 |
3f1e69bb1a2d995850ae56db14cd7271
|
|
| BLAKE2b-256 |
4da4b73ff61eeb0617db01c64f9f6f5d2ee7a1b9453eb77cdc165fd578842c1d
|
File details
Details for the file bunker_stats_rs-0.3.1-cp310-cp310-macosx_10_12_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp310-cp310-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.10, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da75755f31f540d6b93c3630df85739a0cf0e1a66e29e47a3176b3d63d9e2c8b
|
|
| MD5 |
345641ec25d77ad762169ec6fc4bc4f0
|
|
| BLAKE2b-256 |
492453c424e08c2b2ac099f15501895396b02448a66b02bbb5b949a3264b75f1
|
File details
Details for the file bunker_stats_rs-0.3.1-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 933.8 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f8061d06bf1142051014972e7fee8d0ed75426f17562b10196e6e7698915c4f
|
|
| MD5 |
55d5637d5f2146b870c9b16e692f53cd
|
|
| BLAKE2b-256 |
fd1b02c81a81be4596fc35a1483e54a69fcf93eed421d5f54e982545ad976d00
|
File details
Details for the file bunker_stats_rs-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f029b9065bac71822749c1c20067af6988b60b91d522e9530050f09a0381940b
|
|
| MD5 |
278b1acc981708a3f7351a1f9c85dfed
|
|
| BLAKE2b-256 |
8fceb71c2c6d725b552240d655349083ce39cb1df70e80508cd962a8ad6683ea
|
File details
Details for the file bunker_stats_rs-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.9, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5073f585b150a82f81bb7e218dbf81b8a4eb49cadff1226efc74abbf74d61c83
|
|
| MD5 |
3b824919fc69fd4e87b8e9c5329de8b2
|
|
| BLAKE2b-256 |
c13054dffadf482f3078449370c9d7f5e6658311db9aaeb9658d9bbc96d6adf6
|
File details
Details for the file bunker_stats_rs-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5a1b822f76eb7900215f6e7ea858c59707714368e4de31eca913fa0472b571c
|
|
| MD5 |
a161cd0a1537dafd4856f1c4f1bce12f
|
|
| BLAKE2b-256 |
060c053081b144c0f382c19437b834aa1c3df3d3d5d34ef9b73d65e2df7c2ee7
|
File details
Details for the file bunker_stats_rs-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 918.8 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
125cd69eec8b29d94db2733e628d6870e87f736a1f08572edcd42616b2dfb3f9
|
|
| MD5 |
c6971e822a8a506f2856aaa53de3c096
|
|
| BLAKE2b-256 |
46313e331029485e0207e77216649f20fb4ce031895ab2c0f04f4e1bed02c6fe
|
File details
Details for the file bunker_stats_rs-0.3.1-cp39-cp39-macosx_10_12_x86_64.whl.
File metadata
- Download URL: bunker_stats_rs-0.3.1-cp39-cp39-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.9, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76f1539485771c92aaec3dc43e0d802f7f7eb7ee567dc4a579392fa6a9fbf9c5
|
|
| MD5 |
90f4af265a85c4507de6c2500badf526
|
|
| BLAKE2b-256 |
d1834d0ce364fd1cd0f1babd26374bce645e3b8f8279d03e0d8fde8e8ef066b3
|