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). Options:

  • Use robust_whittaker_irls_f64 (most stable).
  • Set merge_x_tol to merge adjacent points within a tolerance (e.g. merge_x_tol=1e-2 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: optional tolerance (in input-x units) to merge near-duplicate sampling points by base-weighted averaging before solving
  • 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,
    merge_x_tol=None,
    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.1.tar.gz (22.1 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.1-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.1-cp314-cp314-win_amd64.whl (248.3 kB view details)

Uploaded CPython 3.14Windows x86-64

whitsmooth_rust-0.1.1-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.1-cp314-cp314-macosx_11_0_arm64.whl (314.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

whitsmooth_rust-0.1.1-cp314-cp314-macosx_10_12_x86_64.whl (327.4 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

whitsmooth_rust-0.1.1-cp313-cp313-win_amd64.whl (247.5 kB view details)

Uploaded CPython 3.13Windows x86-64

whitsmooth_rust-0.1.1-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.1-cp313-cp313-macosx_11_0_arm64.whl (316.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

whitsmooth_rust-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl (327.2 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

whitsmooth_rust-0.1.1-cp312-cp312-win_amd64.whl (247.7 kB view details)

Uploaded CPython 3.12Windows x86-64

whitsmooth_rust-0.1.1-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.1-cp312-cp312-macosx_11_0_arm64.whl (316.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

whitsmooth_rust-0.1.1-cp312-cp312-macosx_10_12_x86_64.whl (327.4 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

whitsmooth_rust-0.1.1-cp311-cp311-win_amd64.whl (249.7 kB view details)

Uploaded CPython 3.11Windows x86-64

whitsmooth_rust-0.1.1-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.1-cp311-cp311-macosx_11_0_arm64.whl (319.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

whitsmooth_rust-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl (330.1 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

whitsmooth_rust-0.1.1-cp310-cp310-win_amd64.whl (249.6 kB view details)

Uploaded CPython 3.10Windows x86-64

whitsmooth_rust-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (360.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.1-cp310-cp310-macosx_11_0_arm64.whl (318.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

whitsmooth_rust-0.1.1-cp310-cp310-macosx_10_12_x86_64.whl (330.1 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

whitsmooth_rust-0.1.1-cp39-cp39-win_amd64.whl (249.9 kB view details)

Uploaded CPython 3.9Windows x86-64

whitsmooth_rust-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (361.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

whitsmooth_rust-0.1.1-cp39-cp39-macosx_11_0_arm64.whl (319.5 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

whitsmooth_rust-0.1.1-cp39-cp39-macosx_10_12_x86_64.whl (331.1 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: whitsmooth_rust-0.1.1.tar.gz
  • Upload date:
  • Size: 22.1 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.1.tar.gz
Algorithm Hash digest
SHA256 0075b742198cc25e5ac3cb3c6fd4aac29ba5ca2b2ea43ebfaf345976317cd64d
MD5 cd680abec1f0ffe905ddd0d46b803f39
BLAKE2b-256 6c172f590e6d78cbd6b1324a0dd174fe6e68e581c66f4cc9a9ae729707345fa4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d5c963274f80818669b041840de5513f259bbc922666d9458607e97679f842e0
MD5 51673e41ed2c860783f3fd6e75c09b47
BLAKE2b-256 c43dcd6b4d52820bfc50f1f9f3e9e636035cc78caf9b8ecaa9a0600a3770da10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6d4528d17afbce02f7ad9b5bcc649a26fb786d772df40eebdcf989f0e83746d0
MD5 bdf9c5f5316204f09644b190c7e0748a
BLAKE2b-256 1dd465509bcd64967269366fca7109f5abf515a5146bac1d5e256679fe565ae4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d7344b07be6bbf025f4a6c680b4a0165eef0fa800a71b28b110de87169d22304
MD5 baaf693fca9842d234b91fbf1c9a1a9c
BLAKE2b-256 cd552b6b52e4c0306ec84f7ff7e81c1a77e0e5fca755036148577aba5ae80d74

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3b52959a072b2177bd8efbfb0785e9f8c02b2d50a8792a631a9cc6e75bf13033
MD5 cbe20571814c14d3bdc65fad89320fb0
BLAKE2b-256 23d6ad06c93a409e1aac005c6dd7a7756637d61f734b59367b635a32c9421c6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 86823b59cbf7df667a6eec5434e0569218a0276961276257cca0fa395a2e1a5f
MD5 24c5911d9c04ebd6ed545ce8b9fcc4ee
BLAKE2b-256 6d4fec9d81413672b985efa815cb7f381bf6228d789b3a0890b7657b585cb22a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 331e69fab3f7503200ea1470a2831ce0e2fcac248c071fc34e4b02d22fe4ee2b
MD5 d6c6b1607dab3a4a3b061e1d5140e756
BLAKE2b-256 31c56ce1551d873a64066457e5767f6ac6339b818152ac45a21ca4d06aad078e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2994ecc03f307d8211c495469f7e764be82e2b0539f33e783ed946f451385cd7
MD5 a2d0035d560fa79237c37870beffe471
BLAKE2b-256 06dd8da9eb7061d8ead04ab7ce48ccd07161e498349d69cecd802b6f5b2d4aa0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d703cbb3af9d6a6c5becf227ef8d782bcaea0886bb2ea5093f77b4dca6f27245
MD5 24f865f711817ba73dd895de41670f7b
BLAKE2b-256 323ca2e54e87d6fcc468cdd0f24a594a0d0f13c9ced8c30c55aaa8a7f584f6ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c10421f18ac327bba2abcaf3c2f260f7738a93626798b0adc8933cda22502c6d
MD5 dbf350fff5f2fd45a8f61143cb86fa32
BLAKE2b-256 7f18bf914637f9a0e0c57ddedbc475225740d24dc5132f822ac6c705d9c8c725

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2fd0fbfdb9628ceed58c27fdc47251a2fdfd9cd78de9b4012a520ef009547fb6
MD5 3db19a79446cded527b30af4a1c18fa5
BLAKE2b-256 40f0bc1fd8fecbc6df3da2dc4dd9b53404d8a444cc02b78cb581ddaa43a9a955

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 78a14d9cc17ae7d81dfdea54754c033e5dca92ed2623e2d71d9001f42ab7f2f0
MD5 dd93841aa413359efe25df8eb973de66
BLAKE2b-256 ee9886861f01a2ce835e920c0787244e338328cb045ecc37aa3f0e1bb434711a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a24a1dea95fb1c2d6974e99409a2237c70c3174360fba1ced0eced940c1f2105
MD5 0744df9bc71bd3cddad669e237f6bb85
BLAKE2b-256 c3201b0d50183986afcd610c426fe76403f2f4382aa1d7bf05e067ac0d8aa9ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3ffd1c0b5b26cea2844ae0ce8e5287fb264a94e30b09242d48829ac9cb43f87f
MD5 9fef9ed4cc27de105783c765e01f9e09
BLAKE2b-256 b91153af567e3257891a7e9a6b0ed8c7ab73c1734fb3f6da49db44bb0fc3625b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4b5780b002080245199a4bebfd77d8bd4614daa3b596864718c93c19ba76997b
MD5 85b42db14316446911a53e8edb2bc682
BLAKE2b-256 e099d9aa1047d6c9b1eb088b051d9141707ed18a2277698fc6139037f2632652

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6ff955f6ae3648b5926a2dd69bc3aabb5651e358101ab06263c87cb1c5815408
MD5 8c40aa72b568f71e145dac506e46ad1d
BLAKE2b-256 9093dd399a1fe76a6c2ce19e32f611fda654cd3e5a9635cc1236c865eb090071

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c16a92c802245923f11a3d1f736652cbeb1e6253f42308f7ebdc0ef169fc6d4a
MD5 255a4876c6a7dbf4adea3113ed7bac04
BLAKE2b-256 ad84493ec3bf5a50c2ba79d498c5766f1a8be8dd07543df5b479a7551b4c03a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e79a399d5842f676e469a169e2f56e3aad2c363fdf0a13b546fd65699d4e5117
MD5 e53847dc76235804b6e1952cea05bd6f
BLAKE2b-256 e8c6b27b7b30c8a33b484ffbb8e437e83211436cb7b3326ba3777e4960a2d7c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a5d1f804a0c2954b01d5093b95da4cccd723809aec649e6b5722f2063771dd6c
MD5 ad82599c708d2665e5bc09dbe7ce1077
BLAKE2b-256 d7dfdebf5113d455c6cf1d420ff8f7f47cab21a47be47f323a4e2be548b62ce6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 76f62234af090970962acc1909fb835ab4b2dc3fe0c2f2995f53cb6d57a8b782
MD5 e53479f5ac36020e6eee278c2b7d20b7
BLAKE2b-256 9db0fb951c2b7b1a16643111af02c567fd0f72ff541dbdb34d525b5e91f53c01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 832cb81b37e6e2505b95e50aada819f91e67c1540ce3437b9ca0521f5c3e22fe
MD5 8363cd28701a8f47ff8256c12f63da4d
BLAKE2b-256 fd9416df73ea5e83bef9a669e6e5f72f397514f853394ada31a6af2310f49e9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6c05c899d75f95084d6a68c4b725368dbbeee9a022293c44ff297293e315d088
MD5 717de9622fb455ee9d30bec6cda26bb2
BLAKE2b-256 a37e7f91a60be8a107ab595c65d04a05937150c0372879fd6f091eff66f138ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ba488e95b2ebebbb2ed5e713e692b6c36074697c200246503f2e170fbbd2466a
MD5 2868e6676f04f8a1841011964cb842d7
BLAKE2b-256 620435829bb98d4701535cc6b120325f6543889447f95254dd7661bf84afcc23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e1c2c744f533a6d23c88168b073fd8a595c16150e5c9ec69500700e38d19d6fd
MD5 f2cce53589e834066a989bbc25d59353
BLAKE2b-256 35861b6c9ffca4aa80fc394e27c9f71183318ad7502227aeda428b32149436bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d879e3750bccf859ec2c7147228da127baa2e419b8743318a23897e08ac5e5f7
MD5 b6b95b713473d02395c173cfe3bc81f1
BLAKE2b-256 bc6b1f47a2da08528510a725e4b35f494a304b2eca3fb8eb4e1e9971f16320f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for whitsmooth_rust-0.1.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6866a3d244439fca26b5740aa78a32daabb00fc0ef1db71a039428d65c67f515
MD5 602b17db69022cf64e2065f4c3934c77
BLAKE2b-256 6de52c912eae4ca210333effba198ac4e347014521ec5d1581ddea29c6ae145b

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