Skip to main content

Batched robust Whittaker smoother (divided differences) implemented in Rust (PyO3).

Project description

whitsmooth_rust

PyPI Python License Wheels

A fast, compiled (no JIT warmup) implementation of a batched robust Whittaker smoother with divided differences in Rust, exposed to Python via PyO3.

It is designed for data shaped as many independent time series:

  • S series (samples / pixels / bands / locations)
  • T time points per series

and supports time- and series-varying weights (e.g. missing data, quality flags, IRLS robust weights).

This package provides both float64 and float32 implementations.


Installation

Install from PyPI (recommended)

python -m pip install --upgrade pip
python -m pip install whitsmooth_rust

Wheels are built in CI for:

  • Python: CPython 3.9+
  • Platforms: Linux (manylinux x86_64), macOS (x86_64 + arm64), Windows (x86_64)

Build locally (from source)

If you are on an unsupported platform (or want to build the latest code), install Rust and maturin:

python -m pip install maturin
git clone https://github.com/MarcYin/whitsmooth_rust_repo.git
cd whitsmooth_rust_repo
maturin develop --release

This builds and installs the extension into the current Python environment.


Mathematical background

We solve a Whittaker-type penalized least squares problem for each series s:

$$ \min_{z_s}; \sum_{t=1}^T w_{s,t}(y_{s,t}-z_{s,t})^2 + \lambda \lVert D z_s \rVert^2 $$

  • y_{s,t}: observation
  • w_{s,t} >= 0: weight (0 means missing/ignored)
  • D: divided-difference operator of order d defined on a strictly increasing sampling grid x
  • λ (lambda): smoothing strength

The normal equations are:

$$ (\mathrm{diag}(w_s) + \lambda D^\top D + \text{ridge} I) z_s = w_s \odot y_s $$

P = D^T D is symmetric positive semidefinite and banded with half-bandwidth k = 2d. We store only the lower band Pb[j, i] = P[i, i-j].

We solve each system using an SPD banded Cholesky factorization:

$$ A = L L^\top $$

which exploits symmetry and banded structure.


Robust IRLS (iteratively reweighted least squares)

Robust smoothing down-weights outliers by iterating:

  1. Solve Whittaker system with current weights
  2. Compute residuals r = y - z
  3. Estimate per-series scale (default: MAD)
  4. Compute standardized residuals u = r / scale
  5. Update robust weights w_rob(u) and repeat

Final weights per entry are:

$$ w_{total} = w_{base} \cdot w_{rob} $$

Supported robust weight functions:

  • Tukey / Bisquare (hard rejection outside c)
  • Huber (soft clipping)
  • Cauchy
  • Welsch
  • Fair
  • Hampel (3-parameter redescending)

Supported scale estimators:

  • mad (default): scale = 1.4826 * median(|r|)
  • huber: iterative Huber M-scale (more stable for heavy tails)

x normalization (recommended)

Because divided differences depend on the units/spacing of x, a fixed λ can mean different smoothness when sampling density changes. You can normalize x to approximately unit spacing:

  • normalize="mean": average step becomes ~1
  • normalize="median": median step becomes ~1 (robust)

This makes λ more comparable across datasets.


Handling near-duplicate x (recommended for float32)

If your x has very small gaps (near-duplicate sampling positions), the divided-difference penalty can become ill-conditioned (especially in float32). By default, the robust solvers use merge_x_tol=1e-2 (set merge_x_tol=None to disable). Options:

  • Use robust_whittaker_irls_f64 (most stable).
  • Tune merge_x_tol to merge adjacent points within a tolerance (in input-x units).
  • Increase eps and/or ridge for float32.

API overview

All functions use series-first layout for speed:

  • y_st: shape (S, T)
  • w_base_st: shape (S, T) or omitted

Build penalty band

  • build_pb_f64(x, d=2, normalize=None, eps=None) -> (pb, k)
  • build_pb_f32(x, d=2, normalize=None, eps=None) -> (pb, k)

Returns:

  • pb: array of shape (k+1, T) storing lower band of P = D^T D
  • k = 2d

Robust IRLS smoother

  • robust_whittaker_irls_f64(...) -> z_st (or (z_st, w_total_st) if return_weights=True)
  • robust_whittaker_irls_f32(...) -> z_st (or (z_st, w_total_st))

Parameters (both dtypes):

  • x: strictly increasing sampling positions (length T)
  • y_st: (S,T) observations (NaNs allowed; they will be treated as missing)
  • w_base_st: (S,T) base weights (optional; if provided, NaNs in y are forced to 0 weight)
  • lam: smoothing parameter λ (default: 10)
  • d: difference order (default: 2)
  • iterations: IRLS iterations (default: 1; typical 3..10)
  • weighting: one of "tukey"|"huber"|"cauchy"|"welsch"|"fair"|"hampel" (default: "tukey")
  • scale: "mad" or "huber" (default: "mad")
  • ridge: small diagonal stabilizer (default: 1e-10; f32 may need larger values on difficult grids)
  • normalize: None / "mean" / "median" (default: "mean")
  • eps: numerical floor for stability (default: 1e-10; f32 may need larger values on difficult grids)
  • merge_x_tol: tolerance (in input-x units) to merge near-duplicate sampling points by base-weighted averaging before solving (default: 1e-2, set to None to disable)
  • parallel: parallelize across series (Rayon). Recommended when S is large. (default: True)
  • tuning: optional tuple
    • for Tukey/Huber/Cauchy/Welsch/Fair: (0,0,c)
    • for Hampel: (a,b,c)
  • return_weights: return final w_total_st as well (default: False)

Usage examples

Float64

import numpy as np
import whitsmooth_rust

rng = np.random.default_rng(0)
T, S = 2000, 1000
x = np.cumsum(rng.uniform(0.8, 1.2, size=T)).astype(np.float64)

y = rng.normal(size=(S, T)).astype(np.float64)
y[2, T//2] += 25.0
y[4, 10:25] = np.nan

w = rng.uniform(0.2, 1.0, size=(S, T)).astype(np.float64)
w[~np.isfinite(y)] = 0.0

z, wtot = whitsmooth_rust.robust_whittaker_irls_f64(
    x, y, w,
    lam=50.0, d=2, iterations=3,
    weighting="tukey",
    scale="mad",
    ridge=1e-10,
    normalize="mean",
    eps=1e-12,
    parallel=True,
    tuning=None,
    return_weights=True
)

Float32

x32 = x.astype(np.float32)
y32 = y.astype(np.float32)
w32 = w.astype(np.float32)

z32 = whitsmooth_rust.robust_whittaker_irls_f32(
    x32, y32, w32,
    lam=50.0, d=2, iterations=6,
    weighting="tukey",
    scale="mad",
    ridge=1e-6,
    normalize="mean",
    eps=1e-6,
    parallel=True,
    tuning=None,
    return_weights=False
)

If your data is (T,S)

Transpose when calling:

z_st = whitsmooth_rust.robust_whittaker_irls_f64(x, y_ts.T, w_ts.T, ...)
z_ts = z_st.T

Notes on performance

  • The solver is SPD banded Cholesky, per series, with half-bandwidth k=2d.
  • Parallelization is across series S.
  • Float32 can be significantly faster and reduce memory footprint for very large S.
  • For highly irregular / near-duplicate x, prefer merge_x_tol or robust_whittaker_irls_f64 (float32 may fallback to float64 internally).

License

MIT


Single-pass (non-robust) Whittaker solver

If you don't need IRLS robustness, you can run a single solve (much cheaper):

  • whittaker_solve_f64(x, y_st, w_base_st=None, lam=10.0, d=2, ridge=1e-10, normalize="mean", eps=1e-10, parallel=True) -> z_st
  • whittaker_solve_f32(x, y_st, w_base_st=None, lam=10.0, d=2, ridge=1e-10, normalize="mean", eps=1e-10, parallel=True) -> z_st

These solve: [ (\mathrm{diag}(w_s) + \lambda D^\top D + \text{ridge} I) z_s = w_s \odot y_s ] with no robust reweighting.


Benchmark script

This repo includes benchmark.py which times:

  • single solve f64 / f32
  • robust IRLS (Tukey) f64 / f32

Across multiple S values and plots runtime.

After installing the extension:

python benchmark.py

Optional: if you have SciPy installed, the benchmark can also compare against a sparse reference (looping over series).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whitsmooth_rust-0.1.2.tar.gz (22.2 kB view details)

Uploaded Source

Built Distributions

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

whitsmooth_rust-0.1.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (361.7 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.2-cp314-cp314-win_amd64.whl (248.5 kB view details)

Uploaded CPython 3.14Windows x86-64

whitsmooth_rust-0.1.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (359.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.2-cp314-cp314-macosx_11_0_arm64.whl (315.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

whitsmooth_rust-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl (327.6 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

whitsmooth_rust-0.1.2-cp313-cp313-win_amd64.whl (247.7 kB view details)

Uploaded CPython 3.13Windows x86-64

whitsmooth_rust-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (358.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.2-cp313-cp313-macosx_11_0_arm64.whl (316.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

whitsmooth_rust-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl (327.4 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

whitsmooth_rust-0.1.2-cp312-cp312-win_amd64.whl (247.9 kB view details)

Uploaded CPython 3.12Windows x86-64

whitsmooth_rust-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (358.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.2-cp312-cp312-macosx_11_0_arm64.whl (316.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

whitsmooth_rust-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl (327.6 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

whitsmooth_rust-0.1.2-cp311-cp311-win_amd64.whl (250.0 kB view details)

Uploaded CPython 3.11Windows x86-64

whitsmooth_rust-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (360.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.2-cp311-cp311-macosx_11_0_arm64.whl (319.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

whitsmooth_rust-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl (330.4 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

whitsmooth_rust-0.1.2-cp310-cp310-win_amd64.whl (249.8 kB view details)

Uploaded CPython 3.10Windows x86-64

whitsmooth_rust-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (360.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.2-cp310-cp310-macosx_11_0_arm64.whl (319.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

whitsmooth_rust-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl (330.3 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

whitsmooth_rust-0.1.2-cp39-cp39-win_amd64.whl (250.1 kB view details)

Uploaded CPython 3.9Windows x86-64

whitsmooth_rust-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (361.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.2-cp39-cp39-macosx_11_0_arm64.whl (319.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

whitsmooth_rust-0.1.2-cp39-cp39-macosx_10_12_x86_64.whl (331.2 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file whitsmooth_rust-0.1.2.tar.gz.

File metadata

  • Download URL: whitsmooth_rust-0.1.2.tar.gz
  • Upload date:
  • Size: 22.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for whitsmooth_rust-0.1.2.tar.gz
Algorithm Hash digest
SHA256 aaf75d4de9ba9fb7ad36e1db2a7e74ac18d1d51ec801212288bdd3e53a53a457
MD5 944baf43f0b00372f3b7b3b12730952a
BLAKE2b-256 c8ca17f217c766b2f839fa751ab5b74dacfc39078383db020f1e6f7014feb291

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aabb95e43fb3b8d761946b95040db341eb04c36a5439e7dce53c25dc04b4061c
MD5 6ac3bccf3bede0f820c0faf9363e9e02
BLAKE2b-256 e09d0cd885d9cda52413cb1ff4b2c7c21f4688109e1921ca12b62c21c8ba3e50

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 045b8a0bf0964dda8866763229bd630f5f3ba1ba6366b3933e8a557521716035
MD5 3621a87af75e379b63702ed125802292
BLAKE2b-256 47bccacd6f951b94990b9dcda3ba0dde7761fd5cc315f879c45cfc89a260e03c

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a9d12669a34e0a15b27001b84aa15e3e9e977ef26ecb13f5d107b9243cb910c
MD5 1143bdc4304f4a525b1b5e9026b716c3
BLAKE2b-256 f08befe2a8d90746a29f6d07d20afd0be248394813d78d12bbde569a3cb3930b

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2fbfaafd6f3fbb9ad8159e5a7d9f453d8b71597ee7984cf7980c6d1400ebed9f
MD5 713f7c1847f9cc273c4f8c5b3d4ec10d
BLAKE2b-256 2597cee0d2c194c852ffe3429aca1e149e92030db281079d53c0d3963548e713

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 30996d21068206a187acfd3762906c6512b548045ef49480caf2329f36ba9ee5
MD5 6383a320c8d41a82cc6f18ac95f5689a
BLAKE2b-256 bea0eaf7dd5682c34e29195f4cbb559b04715615f904c8b81b00cfa878fa1e0d

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 70bcdbdca4d3cc9259a160f904a8fec36e58dfdefc12c5f37ed3106e3a88f25f
MD5 33d2ee689894ef39b9461342086afbd7
BLAKE2b-256 18b14d15844d7d393669f0402ade9f4adde4f8ef7c5c297e98b58d0d02475593

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 25a3b43a4839b90bed599214dcc6a3e545418851c8828315168a4398ab7b5791
MD5 e3560d32169e3c27e678492eb018b246
BLAKE2b-256 7ca645c167e2ac8ac58eaaff7f8e531d05b1b175093f43526ba4770bdb777b35

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9925728798de6a459af9c2634c4da6abb12d0b0c97c2f617f8c7b12b26da2872
MD5 9e171f91488de77a45302e0a7e3d7fee
BLAKE2b-256 747648f1634791cecbc1be6d69fa4c9a3a0c29a123d58fa51eecd9774129229f

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 155f3786288fff0f3d169b97fb6191e4c7ebd50d27f829cf9324d8bdd73a1dba
MD5 8a73a1dbfeed24aaed6b57c717ae2395
BLAKE2b-256 f1caa3b0e6f907877a0f71c65fe784f30bba2d731c2dfed6264889b63342ed2a

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6ab6125dbb79714027575eedd7eee074fafa0f262b954c97910093266b66b883
MD5 df19fd3d5af8c8bdc4180aab220006d0
BLAKE2b-256 6bc408fa49ed07faa24b651a188e433ee9eff8102a2dddafd57f1511eda63d36

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11a7811f542a14c50e449cf537c72b00ef9d98c81749523543312213bd0433cf
MD5 014649790a37cd5db8c42610bd8a69e8
BLAKE2b-256 3d00f47de20a860a527c18a062abe96be48d407119bb8e1378e0e30639209132

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 866514c37290ece0e212bf19b107d81df8982b8cc741395b0065549b14241f03
MD5 0a444115ba95bfad90e7dca3a775f81e
BLAKE2b-256 d314d1b52e13760084e96ec2d8bed47d005b34b59fc86aaebc5338b5fee99803

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 18a4b88ae0f77cf8b548ebcf0eab64045d386eac9acbe1e16b7d7a21e49ce014
MD5 05ae0fb7660db70032e6fe8663513823
BLAKE2b-256 687add0b79421f156bd3cdcbc13d2d126e322f149ceee80c5b7b3654ed4067fa

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0ec0b09b5ae33b8a47d1ccfae7def5135d30fa6c6490e72085588daafc4062d5
MD5 14eb8e21be74656b5ced961cf31a0053
BLAKE2b-256 8d9cac90ebc8b75246467d65ab90e6bf9531586d04b88146eb1cbe80b9bbc674

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de94120a8ef95b1cdd9baa71ff9244989571916708785ef384907561a87b21bb
MD5 e398bb3d44d52cb1eed8ca68dffe123b
BLAKE2b-256 ef6b4bd283eaae604757881a3710013e8a451c0ad81acb2619d107aaff6a41dd

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5ea1225a127b9c37f58ae7b4524ea512b6e52ef92d94b5616a4ffe14a34d5233
MD5 1db799e1b0ad65c9bc4e70ec1121e97a
BLAKE2b-256 e4e631d4798bbcde3f827dcce86e65dac9e1595bc171eac84011e0d173e644f8

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1488215726299885f7eb4a699233dea55c9797c640b0651682ba1e64d66d29ef
MD5 93d55e7d3fca337aa40f285c9437506c
BLAKE2b-256 40e8634dfd16b8ae84b326c6fa9ca0c2782e6cf1946fac4ba4d0af01f0783275

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8a586608f0223f67d1722c7e4cfedc27dedf187463b9d027249e31a816da2038
MD5 3455dfc9ec516c3d8fa8c65700bcca13
BLAKE2b-256 fa1d8731c7c365744c0a57a7655c290b0da86c9f1af97b115b73b27fb4097ffe

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c7d2490a3e9262f660b205a8e6fef69f0b441b0731fec853bc9751645a40161f
MD5 c1c04e4a7aff8d354d077ff847a5b0f1
BLAKE2b-256 03d9d55a9938ac083ca6a290f9bc28c359428d482c4618f40fddfa8988d73655

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f2b443873c9f86ba63b95e699d4bfbc46376453977ee07af72eb18d2e1c8844a
MD5 1e20b811f65e8ab8a387409fc79be065
BLAKE2b-256 d5923079038ced442b9de636282fc475e2b1225690b5cd05e8f63e8d798dfad8

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 926d05a2aeb263b86b74a55f91ae55818e9569ed0e6920988fb897bf354609c5
MD5 44cef91e1f1334e3974517767cfb8537
BLAKE2b-256 1bf3995094379f1f37a0077d05822b9fa773fe6a60f00e794d7924d5e017b7ac

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8abafe7484e380cbebeb4153d147927879aa885d9912e707e163fc7792684d08
MD5 330d0d9b553099bbd83e269998575c72
BLAKE2b-256 35b0282a84ef5ff5a8a4f7973c1d9524508d3aede26f62c57d14c3785cdaf97d

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2a461bfbf801b818257d9b8ab25b80b484fd271d4500b90fc964c7a74193d877
MD5 95f1fc3d6a698dce75406c8184666853
BLAKE2b-256 0f7cb7a823a88a21496dc5416181196d76c4844e236dc930977e80b33789db9c

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7c66e5efe546fc556040f596cb59dc34c5f32d817dc8c83961b5dd331c3b8d63
MD5 679356ecbb490a69bd644993aa7babe6
BLAKE2b-256 62142a4412db312960aa1e31dcde095fee687e0496dd3674a4ea33345ca1aea0

See more details on using hashes here.

File details

Details for the file whitsmooth_rust-0.1.2-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.2-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3e2bf2cd2eade59f017a00a552c3ec12402157bdd73deabdb8102774fe4bab28
MD5 669339cb6248fc706c115732c80b1f8b
BLAKE2b-256 ea37acd78f897cd3e1e30e0d15f31b6515a425fd41ca0985270d308d26260511

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page