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.5)
    -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.5000e+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.4089561283054790e-107j
-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: 3112 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 computation of weights, that involves integrals, and SVD are parallelised. A typical profiling would yield something similar to the following.

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-250523.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-250523-cp313-cp313-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyvpmr-250523-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pyvpmr-250523-cp313-cp313-macosx_14_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

pyvpmr-250523-cp313-cp313-macosx_13_0_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

pyvpmr-250523-cp312-cp312-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyvpmr-250523-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pyvpmr-250523-cp312-cp312-macosx_14_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

pyvpmr-250523-cp312-cp312-macosx_13_0_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

pyvpmr-250523-cp311-cp311-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyvpmr-250523-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pyvpmr-250523-cp311-cp311-macosx_14_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

pyvpmr-250523-cp311-cp311-macosx_13_0_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

pyvpmr-250523-cp310-cp310-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pyvpmr-250523-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pyvpmr-250523-cp310-cp310-macosx_14_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

pyvpmr-250523-cp310-cp310-macosx_13_0_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

pyvpmr-250523-cp39-cp39-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pyvpmr-250523-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pyvpmr-250523-cp39-cp39-macosx_14_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

pyvpmr-250523-cp39-cp39-macosx_13_0_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.9macOS 13.0+ x86-64

pyvpmr-250523-cp38-cp38-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pyvpmr-250523-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pyvpmr-250523-cp38-cp38-macosx_14_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.8macOS 14.0+ ARM64

pyvpmr-250523-cp38-cp38-macosx_13_0_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.8macOS 13.0+ x86-64

File details

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

File metadata

  • Download URL: pyvpmr-250523.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-250523.tar.gz
Algorithm Hash digest
SHA256 197335a35df3db5191bb27ea4df967a58f033e7a0ca00afb1f91b81623580799
MD5 ebd06551e11b013b7cdff2b188c21a66
BLAKE2b-256 2cfda6e656068b4a8572c711eda8985078d5b1e7b3ba982645826c9d8d56b522

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 44b78e5df8fbf90456b30e93cd6a0a996b4490ce6838136b981b90f0fc7d6997
MD5 5cf4d403a8d41f2a85b1d1d526ac10c7
BLAKE2b-256 99956a5e14d9df700762dea78377b01ba70fd69304be58f894ed7ea7190bec2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7f62ab99334618062df0ba48c0ed7a1aacc3706f2137054811834c4ff6d40ba9
MD5 ad99585113b2afe33d3f06ee920a6729
BLAKE2b-256 165a33ab487cd5c8e8e3ad294731a640ae6c0b1624510c38fc5ef63fbc20f4a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6a1756c1d029211d8c46a1697d8ba30ec6231f62675f60aaf6a2bfcfb9dc42a7
MD5 9b20389bc3c10c59cc565188e7038253
BLAKE2b-256 fc43de01be81b2cb24bc2211dd37bdd7a283d594c24558d21ac44d2e6fcd4cd5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3113dc6a220e35b2bf0afc03437d43bee3d00d728c1832f9b137b55ee7b22e32
MD5 1d25d39223060a4c1298c75a1ef878b8
BLAKE2b-256 b4cdaedbd610cbc44921e3d4177ea84fba15fa5abfd94b79bd3f7f3b99095733

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5a3b807b5fadc2f51aec21be62e1796b529fdbde6b0b0ae68eeae17f7e65041b
MD5 2dcef0e67abcaab0476d90a9f0ebba9c
BLAKE2b-256 4cb05d5a7e7579f886bdc6db0b87184d5c726f12c99ea025b716d04b48ef3723

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 48fc978f6ca232b6db823a586edaa5c1da2194469e543620c954e77a1f5515e0
MD5 0b3cae13954e729ccdeee6a6b0ee7feb
BLAKE2b-256 c3a02e230e1da80cc1dcc75102c38e38fdb4363730809dc67c9fb16476c5c753

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f6240b745a5da6ca0c61b53035c8367d75e59bfb067113cd9fca2bf5ece228ee
MD5 b448fa9daff869f89c95732d1badf13a
BLAKE2b-256 cae8ccd42d282b0619025e25da650c6b2767cc0891a8ae6fd1241325caa01b27

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 05632673d086447f6793b5804e2ed99eb95e3ba396507aeef619a4806bb35e07
MD5 8d117bc90289cd83afee4c3aa5b29a8b
BLAKE2b-256 343445c01ea3f5f44678a9b2d902ff0b31c20c92f622cc77705d7681ee7e5000

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f1372e05be55a7979327b23e3eb463b9b34ffc9f8f784505be2ccbd98ea1944f
MD5 aa210da1b08b5895e83e8ad08100a804
BLAKE2b-256 58f822d44b2321c3b7940b911856ad8c8c8245d3564a4ca3f49c80ffa286c6d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3538f2232706c8f64dfe7aa54de1f954fcd845539d07423de7594bc64aeb2036
MD5 d955a47afb81e3ea66004ea084323fcc
BLAKE2b-256 a99ac1ecc49e31f4a6d13c3d8bb618ecd3ce16cb7f0cb305f9d068f392dd1cea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c28799d15081269eb854c4299f0ff2ebc6e0cfd3ca1f7840615cff0660296c46
MD5 55afd13b03e62a83402d6149c39c03c0
BLAKE2b-256 75a718a76e1de3ced75a097ae9b09cecde8c8509c86a6b6a335907f498b9ce77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f1cdd2a2da301a25abc92228a471e7f14889f222f9099b402fc2b82e92d57bad
MD5 5589adee1b946d1f790e935435528178
BLAKE2b-256 67d11af2ee6d055db3453a648b68ed954dee7845dc63da259a92e6804ddb659f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 66918283bcbc93a53b5af2d86214ebfe958fcb004044c6ee2146b35d357fb37d
MD5 12083315d182e8afaf4e5b0e156cfc69
BLAKE2b-256 2d895b000d0793eb122979674be04079779761f926d12171b9d4473c5093ed16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f126e7e53b2ef4b9ab41717a04996247c1174ac556849aacf5644fb9c7098854
MD5 6b18b95dcbb4adfef7efd4d737542e64
BLAKE2b-256 db2b2f843b9e84c25d9f336f7d035d0ed9aa91680cd4a538f5ecce41ee565eba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7bf3f127ffb9857e4541f2ec24a1b9eabbfcdddee4453a0e249dd1a68fd5e149
MD5 641a7a929d7bd6317ef5e8180293901c
BLAKE2b-256 b4070e70a0e434efaf91bbcd7a3f1c4a903322e21c47d21a6fe3ba086a372937

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ca7b57f3916cee0634e8fba212f33057f3b141f0a10a5a7d29d2e5217d6e26cc
MD5 5a15a2e5182f18329257d3e4a8833f9e
BLAKE2b-256 377cc95ebf31bff9673c735576775a79e30a6b895ad3f15c594e52bf944a02a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5bf33ff7221eba66130693db796b255666262883751bf23bc3c1c7930cc1b46f
MD5 b69a5f243a5618dc72ac747778e88d5c
BLAKE2b-256 dc6f6db9906fcc4ccdc775cd9fd89f1d5004951ecf90f7bf0135b4837d9a7f97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d5409f2120c94b4fc372939b1600b66f32f601437407157f54bbdb4eed49225d
MD5 ca0c4629d1495f61f172c1cdbd3f5dd3
BLAKE2b-256 cfbe1502efc9c9dd44598f14f8a37feee0903148e2c54aaecac554bf8785aba1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 29a0c4f934958dafa075d34b4506ac777a08d8a700e081b77fe4ef2dc95d97d0
MD5 3b50b11338b4013637f738a3d6850911
BLAKE2b-256 797e8cf56fc6a4b42582cdf8561bd38491c705e2b2430a6abfcdbf09ae42dca4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ec12a3960092b2ad6a4103ea46fec27c4d45971de85b160981cfb534ddcc925f
MD5 0a053742cdd9d28a3f84cc0f9ed5ee2c
BLAKE2b-256 541c98755094a23a22b09799caab3010389c0d5ba985bafc5bcef8e14a2c1e23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c1d0daed1106e464904e282c1c4680c4d82ee7ef07913894c157a875dbdde45f
MD5 1ba9009761c4b4900eda57959cedc868
BLAKE2b-256 648c3d7bf89900501c87572003d61d121c547929e096a133d067b6c15833fb01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bd76bfd42572d9391c5e1bd7593a44e740992dd8da984483240c1e1581f43197
MD5 8d8c824e0e0fe1f70f71454674216581
BLAKE2b-256 48e814996c1a8fb5c212fc8e5a7a358dc6e5ff398268bab0d95c5a60ed9bd07c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 4f120536a10bba0225a8636c10c81dbeff45eb655d5821be96d32daffe09350f
MD5 b72c48d20e77b059141a0da5e2311b65
BLAKE2b-256 160ab81e64631c9e20901f119e3288e016f504b5e4630264254fb019aa02f46c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250523-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 1fb7f331195996b515fe17463e4aee28c35e0da18048272bc024f2ee8c45a038
MD5 239556dcf396af3bc1a1630c7014f17f
BLAKE2b-256 515a1a99aedd19c88580c1bee8e3dab3abd4f9a0c40c1245587536fbcafa560b

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