Skip to main content

The VPMR Algorithm

Project description

VPMR C++ Implementation

DOI codecov PyPI version Docker

gplv3-or-later

Call For Help

  • more performant parallel SVD algorithm: eigen only provides sequential SVD
  • alternative integration: currently only Gauss-Legendre quadrature is available

What Is This?

This is a C++ implementation of the VPMR algorithm to compute the approximation of arbitrary smooth kernel. A Python package is also provided.

Check the reference paper 10.1007/s10915-022-01999-1 and the original MATLAB implementation for more details.

In short, the algorithm tries to find a summation of exponentials to approximate a given kernel function. In mathematical terms, it looks for a set of $m_j$ and $s_j$ such that

$$ \max_{t\in{}I}\left|g(t)-\sum_jm_j\exp(-s_jt)\right|<\epsilon. $$

In the above, $g(t)$ is the given kernel function and $\epsilon$ is the prescribed tolerance.

Dependency

The following libraries are required:

  1. gmp for multiple precision arithmetic
  2. mpfr for multiple-precision floating-point computations
  3. tbb for parallel computing

The following libraries are included:

  1. mpreal mpreal type C++ wrapper, included
  2. Eigen for matrix decomposition, included
  3. exprtk for expression parsing, included
  4. exprtk-custom-types for mpreal support, included

How To

Python Package

[!WARNING] The Python module needs external libraries to be installed.

[!WARNING] Windows users need to have a working MSYS2 environment. See below for more details. For other environments, you need to figure out how to install gmp and mpfr on your own.

On RPM-based Linux distributions (using dnf), if you are:

  1. compiling the application from source (or wheels are not available), sudo dnf install -y gcc-c++ tbb-devel mpfr-devel gmp-devel
  2. using the packaged binary (wheels are available), sudo dnf install -y gmp mpfr tbb

On DEB-based Linux distributions (using apt), you need to sudo apt install -y g++ libtbb-dev libmpfr-dev libgmp-dev.

On macOS, you need to brew install tbb mpfr gmp.

Then install the package with pip.

pip install pyvpmr

If the corresponding wheel is not available, the package will be compiled, which takes a few minutes. The execution of the algorithm always requires available gmp, mpfr and tbb libraries.

Jumpstart

import numpy as np

from pyvpmr import vpmr, plot


def kernel(x):
    return np.exp(-x ** 2 / 4)


if __name__ == '__main__':
    m, s = vpmr(n=50, k='exp(-t^2/4)')
    plot(m, s, kernel)

Usage

All available options are:

Usage: vpmr [options]

Options:

    -n, --max-terms             <int>     number of terms (default: 10)
    -c, --max-exponent          <int>     maximum exponent (default: 4)
    -d, --precision-bits        <int>     number of precision bits (default: 512)
    -q, --quadrature-order      <int>     quadrature order (default: 500)
    -m, --precision-multiplier  <float>   precision multiplier (default: 1.05)
    -e, --tolerance             <float>   tolerance (default: 1E-8)
    -k, --kernel                <string>  file name of kernel function (default uses: exp(-t^2/4))
    -s, --singular-values                 print singular values
    -w, --weights                         print weights
    -h, --help                            print this help message

The minimum required precision can be estimated by the parameter $n$. The algorithm involves the computation of $C(4n,k)$ and $2^{4n}$. The number of precision bits shall be at least $4n+\log_2C(4n,2n)$. In the implementation, this number will be further multiplied by the parameter $m$.

Example

The default kernel is exp(-t^2/4). One can run the application with the following command:

./vpmr -n 30

The output is:

Using the following parameters:
       terms = 30.
    exponent = 4.
   precision = 355.
 quad. order = 500.
  multiplier = 1.0500e+00.
   tolerance = 1.0000e-08.
      kernel = exp(-t*t/4).

[1/6] Computing weights... [60/60]
[2/6] Solving Lyapunov equation...
[3/6] Solving SVD...
[4/6] Transforming (P=+9)...
[5/6] Solving eigen decomposition...
[6/6] Done.

M = 
+1.1745193571738943e+01+6.4196555242161141e-106j
-5.5143304351134397e+00+5.7204056791636839e+00j
-5.5143304351134397e+00-5.7204056791636839e+00j
-1.6161617424833762e-02+2.3459542440459513e+00j
-1.6161617424833762e-02-2.3459542440459513e+00j
+1.6338578576177487e-01+1.9308431539218418e-01j
+1.6338578576177487e-01-1.9308431539218418e-01j
-5.4905134221689715e-03+2.2104939243740062e-03j
-5.4905134221689715e-03-2.2104939243740062e-03j
S = 
+1.8757961592204051e+00-0.0000000000000000e+00j
+1.8700580506914817e+00+6.2013413918954552e-01j
+1.8700580506914817e+00-6.2013413918954552e-01j
+1.8521958553280000e+00-1.2601975249082220e+00j
+1.8521958553280000e+00+1.2601975249082220e+00j
+1.8197653300065935e+00+1.9494562062795735e+00j
+1.8197653300065935e+00-1.9494562062795735e+00j
+1.7655956664692953e+00-2.7555720406099038e+00j
+1.7655956664692953e+00+2.7555720406099038e+00j

Running time: 2044 ms.

exp(-t^2/4)

Arbitrary Kernel

For arbitrary kernel, it is necessary to provide the kernel function in a text file. The file should contain the kernel expressed as a function of variable t.

The exprtk is used to parse the expression and compute the value. The provided kernel function must be valid and supported by exprtk. Check the documentation regarding how to write a valid expression.

For example, to compute the approximation of exp(-t^2/10), one can create a file kernel.txt with the following content:

exp(-t*t/10)

In the following, the kernel function is echoed to a file and then used as an input to the application.

echo "exp(-t*t/10)" > kernel.txt
 ./vpmr -n 60 -k kernel.txt -e 1e-12

exp(-t^2/10)

Performance

The majority of the algorithm is parallelised to extract the maximum performance. The following is a typical performance profile on a i7-10750H platform using the ./vpmr -n 80.

profiling

Compilation

[!WARNING] The application relies on eigen and exprtk, which depend on very heavy usage of templates. The compilation would take minutes and around 2 GB memory. You need to install libraries gmp, mpfr and tbb before compiling.

Docker

To avoid the hassle of installing dependencies, you can use the provided Dockerfile. For example,

wget -q https://raw.githubusercontent.com/TLCFEM/vpmr/master/Dockerfile
docker build -t vpmr -f Dockerfile .

Or you simply pull using the following command.

docker pull tlcfem/vpmr
# or using GitHub Container Registry
docker pull ghcr.io/tlcfem/vmpr

Windows

Use the following instructions based on MSYS2, or follow the Linux instructions below with WSL.

# install necessary packages
pacman -S git mingw-w64-x86_64-cmake mingw-w64-x86_64-tbb mingw-w64-x86_64-gcc mingw-w64-x86_64-ninja mingw-w64-x86_64-gmp mingw-w64-x86_64-mpfr
# clone the repository
git clone --recurse-submodules --depth 1 https://github.com/TLCFEM/vpmr.git
cd vpmr
# apply patch to enable parallel evaluation of some loops in SVD
cd eigen && git apply --ignore-space-change --ignore-whitespace ../patch_size.patch && cd ..
# configure and compile
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .
ninja

Linux

The following is based on Fedora.

sudo dnf install gcc g++ gfortran cmake git -y
sudo dnf install tbb-devel mpfr-devel gmp-devel -y
git clone --recurse-submodules --depth 1 https://github.com/TLCFEM/vpmr.git
cd vpmr
cd eigen && git apply --ignore-space-change --ignore-whitespace ../patch_size.patch && cd ..
cmake -DCMAKE_BUILD_TYPE=Release .
make

Binary

The binary requires available gmp, mpfr and tbb libraries.

 ldd vpmr
    linux-vdso.so.1 (0x00007ffec2fa0000)
    libtbb.so.12 => /lib/x86_64-linux-gnu/libtbb.so.12 (0x00007fd1dcb13000)
    libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fd1dca92000)
    libmpfr.so.6 => /lib/x86_64-linux-gnu/libmpfr.so.6 (0x00007fd1dc9d8000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd1dac00000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd1daf20000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd1daf00000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd1daa1f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fd1dcb78000)

The distributed appimage is portable.

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

pyvpmr-250527.tar.gz (2.6 MB view details)

Uploaded Source

Built Distributions

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

pyvpmr-250527-cp313-cp313-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyvpmr-250527-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pyvpmr-250527-cp313-cp313-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

pyvpmr-250527-cp313-cp313-macosx_13_0_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

pyvpmr-250527-cp312-cp312-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyvpmr-250527-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pyvpmr-250527-cp312-cp312-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

pyvpmr-250527-cp312-cp312-macosx_13_0_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

pyvpmr-250527-cp311-cp311-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyvpmr-250527-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pyvpmr-250527-cp311-cp311-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

pyvpmr-250527-cp311-cp311-macosx_13_0_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

pyvpmr-250527-cp310-cp310-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pyvpmr-250527-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pyvpmr-250527-cp310-cp310-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

pyvpmr-250527-cp310-cp310-macosx_13_0_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

pyvpmr-250527-cp39-cp39-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pyvpmr-250527-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pyvpmr-250527-cp39-cp39-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

pyvpmr-250527-cp39-cp39-macosx_13_0_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.9macOS 13.0+ x86-64

pyvpmr-250527-cp38-cp38-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pyvpmr-250527-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pyvpmr-250527-cp38-cp38-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.8macOS 14.0+ ARM64

pyvpmr-250527-cp38-cp38-macosx_13_0_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.8macOS 13.0+ x86-64

File details

Details for the file pyvpmr-250527.tar.gz.

File metadata

  • Download URL: pyvpmr-250527.tar.gz
  • Upload date:
  • Size: 2.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyvpmr-250527.tar.gz
Algorithm Hash digest
SHA256 506d3a7e4300503060644809d992aafb54bd42832c1f895f154287a610b69a6b
MD5 a295cf3dff2ca98b7f40c88209471c08
BLAKE2b-256 bf8e01147798fa0229dda84fb9e854e1b1abe1abe991eb6924f8d3d9c027443f

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9a06594213205f4759ff104fa5ef7b9bcd6cc49e85fc55b57b60383a7e119ced
MD5 5c26404c4e0fa0b4876aa20a7c098348
BLAKE2b-256 366202a0d03983bfc4016450ae4dafcf69b69710ca9a7bb6a2f2db3724f23a1a

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4b7eb7c3972a671adec7c2052dda88e258f4c2c4f531c2c4b4238e54790a419d
MD5 903a2451bf4cf3f21190f7abdd96da7d
BLAKE2b-256 45ccd137f7284f62d5bcdf643209d1a2a05d7325c751c84d20fcf0325894a060

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 42420a799048fc8bb0f7660c6dbbd8fda39e20fbdd0f5d99148ff176993c761b
MD5 e7e8cc67d2ca4ddc01321d9a80150002
BLAKE2b-256 ddd92c7f8247e884ca277dc7a0174e24b244f59bfc764884435041ca75ec36a4

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 a2834079a958d984cc6172e94c74ae2390ee19478c41c803810e274215997f34
MD5 98da438dd9f2eea25845db9f13f7f024
BLAKE2b-256 f82213e1289581a0cce55fe111f493f337d3fc9d9dc707737af8f4e63adb1a81

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8f00fa190d3c3880d6bd53b146069a19742ab1c395f892b097a48b16cf58660a
MD5 0aa4e86bd3f6b325e3ad03a9b94cd6f1
BLAKE2b-256 e51318ce67233eacd8796bd2f980f6f512ced6cb3eb1ae5fdd5f213eb76bbc43

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f1e414e2cfe79758f29e8ba5f32d4fe92fdbc8e6ac5849cc74192f7bb81dd897
MD5 77cb4b2fac546f3d0a3a30c1b1ead8cc
BLAKE2b-256 ba2877da970ea303ba85b7a5c92a9d84bccc22660393323761e9eb8c2f911809

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ffcc71e1087c7beb7f7755d670917116ef25aefd98977e1b0bb5a8b56d70e3ad
MD5 a81d59301ef29aa81fbd4b9c6415f1f1
BLAKE2b-256 8645223eaf7a410e6c8c89d057d071062583ce9a5a3af1f78e286ad0f6e7f46a

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c5dffef84d3162fe806e20997b9d42e853c93882d1969865b06cbf6fb9fb7c00
MD5 5980aa7e63107217ad8aa4d0f2fb376d
BLAKE2b-256 82703474bb78af11dee8400354af7d9d2088d3e15f23d3855004af62b1596c75

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 819ad5baa1fd83a1a882fcd01723edb2e5ee1f7db96fe7584e97a4eafea092f6
MD5 f6eb650daf4eed07be136bc81082c314
BLAKE2b-256 d117c6098a357152615cd834296625b9502776a0ecbfffed46eff871203ab9bb

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 83cfeec9d65b9198a23eecc540eba025975daf4b51d67b937dc259ff0dfd57b0
MD5 ef54bace85dfffcbb5e3ddf567dc8d90
BLAKE2b-256 ff66202d851eb50cf488ae28e2924c65f61ebaba28636581df135e64a71f2c1b

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 dfb03aa040d5b2b50e0bcbb2e1e054b45b6bd1a60a7bdcd3b00d9418580e16b0
MD5 506e3261c8bb54f18e73dfecc146493d
BLAKE2b-256 6a8b33a43d753f417436c1de68e9c9f58645daae5d8f803493f085107764f7f4

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 04aa8bb0ae75c909e4d871fc63f994d42fc3a8827fcadf41d5e530cb6d60d233
MD5 f422acee1c387aed78dbd82a490d6858
BLAKE2b-256 029ca8e3b44f6e823119d226f34f69fdbd89071d81d1d2115793982118ff4e01

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 90af0d7c4f8b574dd09ffa65ed50bf97d280251d64d3a4042f048a96d4b391b7
MD5 e5b5986c28233f302006d79a28baf181
BLAKE2b-256 e1b4956bf37880cca3ae290ff3e63d67664f1bb28611eec73e41ba4b02a42f96

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8ee7097465be1dc0039ab849fb0f28300c3c6f69565ff2247480c8a28ed37b71
MD5 a8d751b608707e55198e070c8f682ec9
BLAKE2b-256 711f9fbcd7a870e31ac0311ff35f485576ddf9757b4cae263d13c0a022d174e9

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 74cc7cebea371b89724ebcf5f50db6b62965a89db9742bfde4e6e26ccc696871
MD5 a5dd6f772d630c11095b955cd58fd6cd
BLAKE2b-256 5aa9607a5ad5c3d2de5b74081635c01ba411e1fd82f0a86d4772e58ad81dbe84

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3907fbf44d741b726c960f52e7c8c879d39af95b42b91901524ac519292b055e
MD5 5373aae0f5db4941dd2e2770fb4a534d
BLAKE2b-256 453773c5a96b62ff4edc02e8315991559b156cc20032a7a96a2aab48245342c2

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dfa448544b6a1490f1acafb61904b2a7109956fda17f0f23b0c25fa79c097db9
MD5 2bbb88f5c8e99efdc3cfb985c6bd775b
BLAKE2b-256 9c854bbeb9c60744b043cd7807988c431fe4670f6810eb2e6997166b922ea723

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 28a78d71deb2ad1988bc99a96003d5901df3c581bac51f65a17547dcbb5501ed
MD5 575dc362cd93d39d61607b60cbd6d248
BLAKE2b-256 7849e67d309d89378e3684ec159f19d963d560c0e0a28a5484cf9d4373e6bed1

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7be415f0678d249e28178061c456036764a009335926118f68cfe70c93286400
MD5 0d96b537cfa736c1dcd1e920ad61a6b7
BLAKE2b-256 b74a173f6c98d7f0caedeea852f869cceb1e96c26296fb90fa2ebe8c9cddcbc0

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 6277e47fae17ca62f2de7c8e4ce0a74380bd96de13b3182d0d743e8a71c1cdea
MD5 6cdd5026c7bba8ae40f5ea4ba955dd78
BLAKE2b-256 031ff0a1e9db52455ef8d2bc520f4bfc1f4604b9bb6c3ba1a7b4b0c0834a8787

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 85427041199eb9186a89b9514e0eb00aaea17b5739c73e248a8f28864fcd74f0
MD5 d6f39b4f59b45496cde5661af3581c5b
BLAKE2b-256 04d871dac5b5f292661c91f682ce0c86589e00f65a72c790ffdb0c0be780817d

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2bcaf90d860ad357df2256c0cd157b374cdbc083a54d4e0bd04d4f52ccb0a0fe
MD5 af4e0866d329561ceb1635df85c64c56
BLAKE2b-256 b15df56f7ddd4a9697a00e672591deff2402fe39bfac6ebbd9319c8a2ed3b18b

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp38-cp38-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 66a7b71373488b6c3dd51ace4284d22b2c6e863b88ecaa0157ce1d94ae091504
MD5 31a17c7c03b12d8b6fb2a01822881802
BLAKE2b-256 41abccea807122c46532f0af5ca5648beaaa1efde47f967b018744583d1025f2

See more details on using hashes here.

File details

Details for the file pyvpmr-250527-cp38-cp38-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250527-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 7bf185ce57da0f23b4b0ae266537a257b1e3eb58353aae6ddc4c76188098227c
MD5 4ae9f640734eb47ad6d38b691283fb5b
BLAKE2b-256 bc326677e1ab900c93b6107314681fb3b1704a43b10d9bdbd2723a3f49274f99

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