Skip to main content

Fast and accurate weighted least squares meshless interpolator for Python

Project description

wlsqm

top language supported Python versions supported implementations CI status

version on PyPI PyPI package format dependency status

license open issues PRs welcome

We use semantic versioning.

For my stance on AI contributions, see the collaboration guidelines.

2D example

Introduction

The wlsqm Python library is a fast and accurate weighted least squares meshless interpolator and differentiator.

The WLSQM (Weighted Least SQuares Meshless) method constructs a piecewise polynomial surrogate model on scattered data. Given scalar values at a point cloud in 1D, 2D, or 3D, this library fits a local polynomial (up to 4th order) in the neighborhood of each data point, by weighted least squares. From the surrogate model, you can read off the function value and any derivative up to the polynomial order, at the fit origin (each data point) or anywhere inside the local neighborhood.

Use cases:

  • Numerical differentiation of data known only as values at discrete points. Applies to explicit algorithms for IBVPs: compute a gradient or Laplacian on a scattered point cloud without needing a mesh.
  • Response-surface modeling on an unstructured set of design points.
  • Smoothing noisy function values — the averaging effect of the least-squares fit denoises first derivatives significantly.
    • Second derivatives are more sensitive to noise; for those, the robust recipe is to run WLSQM once to recover first derivatives on the neighborhood, then run it again on those to get second derivatives.

No grid or mesh is needed. The only restriction on geometry is non-degeneracy — e.g. 2D points must not all fall on the same 1D line.

Not a Taylor series

Despite the storage layout looking like the coefficients of a Taylor expansion (slots for f, df/dx, df/dy, d²f/dx², ..., indexed by monomial degree), the WLSQM method is not derived from a Taylor series.

The polynomial is fitted over a local neighborhood of data points by weighted least squares. The coefficients come from a linear solve, not from differentiating an analytic function at the origin. The error behavior is correspondingly much better than Taylor truncation error would predict, thanks to the averaging effect of the least-squares fit.

In a sense, we may even say that there is no underlying function that is being modeled. The only thing that exists before the fitting are the data values on a set of points. Whether or not these data values come from a differentiable function — or are just arbitrary numerical data — is immaterial.

This method appears in the literature under several names: MLS (moving least squares), WLSQM (weighted least squares meshless/meshfree), "diffuse approximation." These are essentially the same idea with varying weighting function choices.

Origin of this variant of the method

This is an independent implementation of the algorithm described (in the 2nd-order 2D case) in section 2.2.1 of Hong Wang (2012), Evolutionary Design Optimization with Nash Games and Hybridized Mesh/Meshless Methods in Computational Fluid Dynamics, Jyväskylä Studies in Computing 162, University of Jyväskylä. ISBN 978-951-39-5007-1 (PDF)

Full derivation of the generalized version (including the case of unknown function values, and the accuracy analysis) can be found in this repository, in doc/wlsqm_gen.pdf.

Features

  • 1D / 2D / 3D point clouds, polynomials of order 0 through 4.
  • Any derivative up to the polynomial order is available: at the fit origin as a DOF of the linear solve, and at any point inside the neighborhood via the interpolator.
    • Differentiation of the basis polynomials is hardcoded for speed.
  • Knowns. At the fit origin, any subset of {f, ∂f/∂x, ∂f/∂y, ∂²f/∂x², …} can be marked as known.
    • The known DOFs are eliminated algebraically, shrinking the linear system to just the unknowns.
    • The function value itself may be unknown at some of the data points — this is useful e.g. for Neumann boundary conditions in a PDE solver.
  • Weighting methods.
    • WEIGHT_UNIFORM weights all data points equally in each local neighborhood.
    • WEIGHT_CENTER emphasizes points near the fit origin (each data point), improving derivative estimates there at the cost of fit quality far from the origin (of that neighborhood).
  • Sensitivity data. Solution DOFs can be optionally differentiated w.r.t. the input function values, so you know how the output moves when the input wiggles.
  • Expert mode with separate prepare and solve stages.
    • If many fits share the same geometry but have different function-value data, ExpertSolver.prepare() generates and LU-factors the problem matrices once, and solve() can then be called many times with different fk.
    • This is the fast path for time-stepping an IBVP over a fixed point cloud.
  • Parallel across independent local problems.
    • fit_*_many_parallel and ExpertSolver(ntasks=N) run independent fits across OpenMP threads. The linear-solver step is also parallel across the problem instances.
  • Speed.
    • Performance-critical code is in Cython with the GIL released.
    • LAPACK is called directly via SciPy's Cython-level bindings; no GIL round-trip for the solver loop.
    • For asymptotic timings of the parallel batched LAPACK drivers vs. a Python loop over numpy.linalg.solve, see the figure under "Performance" below.
  • Accuracy.
    • Problem matrices are preconditioned by a symmetry-preserving iterative scaling (Ruiz, 2001) before LU factorization, which is critical for high-order fits.
      • Reference: Daniel Ruiz. 2001. A Scaling Algorithm to Equilibrate Both Rows and Columns Norms in Matrices. Report RAL-TR-2001-034.
    • The polynomial evaluator uses a custom symmetric form that is a natural multidimensional extension of the standard Horner form.
      • Evaluation uses fused multiply-add (fma), thus rounding only once per accumulation step.
      • For details, see wlsqm/fitter/polyeval.pyx.
    • Optional iterative refinement inside the solver mitigates roundoff further.

Performance

Average time per problem instance, parallel LAPACK drivers vs. a Python loop over numpy.linalg.solve, log–log scale

Average time per problem instance for the parallel LAPACK drivers in wlsqm.utils.lapackdrivers, on a synthetic batch of independent symmetric and general linear systems of varying matrix size n. Generated by examples/lapackdrivers_example.py (seeded RNG, deterministic). Both axes are log scale.

The takeaway is that the batched parallel drivers (red and green lines) cost a small fraction of what a Python loop calling numpy.linalg.solve (black line) costs per instance — most of the savings come from staying inside nogil Cython for the loop and from OpenMP parallelism over independent problems. The factorize-once-then-solve pair (green) is essentially as fast as the single-shot solver (red) when the batch is solved exactly once, and pays off when the same factorization is reused against many right-hand sides.

To regenerate the figure on your own machine:

python examples/lapackdrivers_example.py

The script writes both lapack_timings.png and lapack_timings.pdf to the project root.

Examples

Minimal example using a manufactured solution to produce the input data: fit f(x,y) = 1 + 2x + 3y + 4xy + 5x² + 6y² on a scattered point cloud centered at the origin.

import numpy as np
import wlsqm

# seed the RNG for reproducibility
rng = np.random.default_rng(42)

# point cloud
xk = rng.uniform(-1.0, 1.0, size=(30, 2))

# data values on the point cloud
fk = 1 + 2*xk[:,0] + 3*xk[:,1] + 4*xk[:,0]*xk[:,1] + 5*xk[:,0]**2 + 6*xk[:,1]**2

# point(s) where to evaluate the fit [[x0, y0], [x1, y1], ...]
xi = np.array([0.0, 0.0])

# output array for the fit
fi = np.zeros(wlsqm.number_of_dofs(2, 2))  # (number_of_dimensions, polynomial_order)

wlsqm.fit_2D(
    xk=xk, fk=fk, xi=xi, fi=fi,
    sens=None, do_sens=False,
    order=2, knowns=0,
    weighting_method=wlsqm.WEIGHT_UNIFORM,
    debug=False,
)

# fi now holds the partial derivatives at (0, 0).
# The ordering is [f, ∂f/∂x, ∂f/∂y, ∂²f/∂x², ∂²f/∂x∂y, ∂²f/∂y²].
print(fi)

For this exact polynomial, the fit recovers [1, 2, 3, 10, 4, 12] to machine precision.

For a comprehensive tour of the API, see examples/wlsqm_example.py.

For a minimal ExpertSolver example that demonstrates the prepare/solve separation, see examples/expertsolver_example.py.

Installation

From PyPI

pip install wlsqm

Pre-built wheels are available for Linux, macOS, and Windows, for Python 3.11–3.14. Parallel OpenMP is enabled in all published wheels:

  • Linux: GCC's libgomp via manylinux.
  • macOS: LLVM's libomp (from conda-forge) bundled into the wheel by delocate-wheel.
  • Windows: MSVC's vcomp140.dll, which ships with every Python-for-Windows install.

From source

git clone https://github.com/Technologicat/python-wlsqm.git
cd python-wlsqm
pip install .

For maximum performance on your specific machine, build with architecture-specific optimizations:

CFLAGS="-march=native" pip install --no-build-isolation .

PyPI wheels use generic -O2 because -march=native bakes the build machine's instruction set into the binary — a wheel built with AVX-512 would crash on a CPU without it. Building from source avoids that and lets the compiler target your specific hardware.

macOS: OpenMP for source builds

macOS's Apple Clang does not ship an OpenMP runtime. For a source install to produce a parallel build, install libomp first:

brew install libomp
pip install --no-binary wlsqm --no-build-isolation wlsqm

Without libomp, the source build fails at compile time because Cython's cimport openmp in the source emits #include <omp.h>. The published wheels from PyPI already bundle their own libomp.dylib via delocate-wheel, so pip install wlsqm (without --no-binary) works on macOS regardless of whether you have Homebrew's libomp.

Development setup

Uses meson-python as the build backend and PDM for dependency management:

git clone https://github.com/Technologicat/python-wlsqm.git
cd python-wlsqm
pdm config venv.in_project true
pdm use 3.14                             # or whichever Python you prefer
pdm install                              # creates .venv, installs dev deps
export PATH="$(pwd)/.venv/bin:$PATH"     # or $(pdm venv activate) — meson and ninja must be on PATH
pip install --no-build-isolation -e .    # editable install

After editing a .pyx or .pxd file, the next import wlsqm auto-rebuilds the changed extension. No manual reinstall needed.

--no-build-isolation is required for editable installs with meson-python: the on-import rebuild mechanism needs Cython, NumPy, meson, and ninja to remain available in the venv, not just in a throwaway PEP 517 overlay.

Running the tests

pdm run pytest tests/ -v

As of v1.0.0, the test suite has 57 tests covering:

  • polynomial recovery (1D/2D/3D, order 0–4),
  • ExpertSolver prepare/solve round-trips,
  • interpolation accuracy,
  • _many_parallel_many (serial) equivalence,
  • classical finite-difference-stencil equivalence on non-polynomial inputs (sin, exp, Gaussian, …),
  • first-derivative robustness to Gaussian noise,
  • the LAPACK driver layer, and
  • .pxd install verification.

Documentation

See TODO.md for known gaps in the theory PDFs.

Dependencies

  • NumPy ≥ 1.25
  • SciPy ≥ 1.9 (both build-time for cython_lapack and runtime)
  • Cython ≥ 3.0 (build-time only)
  • OpenMP (build-time; see platform notes above)

Requires Python ≥ 3.11.

License

BSD 2-Clause. Copyright 2016–2026 Juha Jeronen, University of Jyväskylä, and JAMK University of Applied Sciences.

Acknowledgement

The original version of this work, in 2016–2017, was financially supported by the Jenny and Antti Wihuri Foundation.

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

wlsqm-1.0.0.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

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

wlsqm-1.0.0-cp314-cp314-win_amd64.whl (674.6 kB view details)

Uploaded CPython 3.14Windows x86-64

wlsqm-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

wlsqm-1.0.0-cp314-cp314-macosx_11_0_arm64.whl (958.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

wlsqm-1.0.0-cp313-cp313-win_amd64.whl (654.1 kB view details)

Uploaded CPython 3.13Windows x86-64

wlsqm-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

wlsqm-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (953.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

wlsqm-1.0.0-cp312-cp312-win_amd64.whl (656.7 kB view details)

Uploaded CPython 3.12Windows x86-64

wlsqm-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

wlsqm-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (957.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

wlsqm-1.0.0-cp311-cp311-win_amd64.whl (669.3 kB view details)

Uploaded CPython 3.11Windows x86-64

wlsqm-1.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

wlsqm-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (950.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file wlsqm-1.0.0.tar.gz.

File metadata

  • Download URL: wlsqm-1.0.0.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wlsqm-1.0.0.tar.gz
Algorithm Hash digest
SHA256 05680ce71fd7589e23abb68aceb1ea4f21d47d57455f301355c3d6943fea2258
MD5 8fb76fefa22198d0cf9398e25918ca89
BLAKE2b-256 6445d4ff3c79c157ee96f7fe2be5f54ab3ca7494739745d8866a5487c632a3bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0.tar.gz:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: wlsqm-1.0.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 674.6 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wlsqm-1.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 de3ab4e40e3d2aa70438f42253fd880396a11d0cbc8a6ddb9803bc0827098811
MD5 f79ed285a6adaf86f34eb34e7fdd0055
BLAKE2b-256 8a5aaf693da0730ee11887c7f31cbbee33b7afda190bec05507f7bc7f38cb296

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp314-cp314-win_amd64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for wlsqm-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2bacbe4e797e67b1563c474d6ec21007be71e256e37f20756d817be8c7df2eb1
MD5 02a4ec6650e9b046664ff60ee0a18079
BLAKE2b-256 ecd2ee72b59f83ca2c8c372a0a791c3cd272cd6b8dd51c084dec418bffe6790a

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wlsqm-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 128b43f793317cbf3c6d4789df24dd699510fca8f1d8f75864f410fabc975a19
MD5 547fc4f22d9206bbddd64233eec6991f
BLAKE2b-256 2753f8335a1aecf097aa96291e439fe01767bb9e649668445b4e2a3c81958371

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: wlsqm-1.0.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 654.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wlsqm-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c5b461438c30bb41239ad1c215094f81f6ac920d38bdef68a68eb311f795924d
MD5 c10dde92dcd7a8c2fdd3cf6c9777d895
BLAKE2b-256 1d0316323d55553139a7c9ccde7827e4c32ac327edea46913ee8b82516c85cb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp313-cp313-win_amd64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for wlsqm-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 90bb1ffd6506cb538bfbebc12eccfb0106049055b5db321aab1b79e55cf443af
MD5 50f3b4eaa3513cfae408441f79821294
BLAKE2b-256 33b3b98f0ea0e934df1e8262c53c7b8e5f029f9509c166f1c4ef68ba07084cd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wlsqm-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 383055c93a2b0bb7225e2ecfdd455f568ff2ea24ca76dd75a00512cd329bd92f
MD5 68dd792cce9cda182489fbe47a39a9ec
BLAKE2b-256 484a806b1b35b271a28185c7b4c277db438355a76ae75fc74cb4ea5310dc6d41

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: wlsqm-1.0.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 656.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wlsqm-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 89b08ebd4ee1597fab6039f1b7e8d052b0fd9802f7bac35fddb2e89beaf6d481
MD5 5f9945a4ed3ca447a6fc8fc6195b4244
BLAKE2b-256 a778fdf2c2d9f8e7e556b6a33e694981448ef740e18d35f761964ddbca4dc481

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp312-cp312-win_amd64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for wlsqm-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c00ce4aecc5e377a4f4d650d6abb6092aa51f23a591a764901e9d869598a1505
MD5 98883e4889650b88b7561c3123b09f0c
BLAKE2b-256 0e979f2a6bb48c195c06b387fc3ffc47980e20ef8397e877a0f359d3c2b2db64

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wlsqm-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b650bb7a5222f6a8971d0867a001585ff273b168b452576b8c57a62056d1fd3
MD5 e9e948875c2812aaa4b8f1a4802a8825
BLAKE2b-256 bd95574a6a4abe3e251d099e7de62d731a83fef7e31a030308b0210d4f10b64d

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: wlsqm-1.0.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 669.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wlsqm-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 599207bc4e3c4343506cbf9caac80efb7c586b2441de72981a728b46b5cd38bb
MD5 f84e9e481c930b5e6e8e1e8d6361d06b
BLAKE2b-256 f7b6f8d8d1032ccb96ad35747dc9fe6ec0cfe91571ddfa8024603cb0cd2b6a97

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp311-cp311-win_amd64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for wlsqm-1.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 99ed306884690bc58e0aca772c07dd91cb9fb1673e9751d3d9a039eb01348727
MD5 0230fb7e93eaf9c41fa69b2cd9d6f174
BLAKE2b-256 8f0c1c29499f51301b76a8bff1a063915bc93751d311d0b3d4ca63a27a14965b

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wlsqm-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wlsqm-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9bfda96278d007d341e333ec9d8c27889bfc006a9444b51d236d3008b3cd0d2
MD5 c643f6ef7b2432ecf8ad73c8565cf3cc
BLAKE2b-256 0fb7525bf7df621f77f5cf69347030cc26ad65baf7c3264009b7815c8b308378

See more details on using hashes here.

Provenance

The following attestation bundles were made for wlsqm-1.0.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: ci.yml on Technologicat/python-wlsqm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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