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

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyvpmr-250526-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-250526-cp313-cp313-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 13.0+ x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyvpmr-250526-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-250526-cp312-cp312-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.12macOS 13.0+ x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyvpmr-250526-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-250526-cp311-cp311-macosx_14_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.11macOS 13.0+ x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pyvpmr-250526-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-250526-cp310-cp310-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.10macOS 13.0+ x86-64

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

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pyvpmr-250526-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-250526-cp39-cp39-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

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

Uploaded CPython 3.9macOS 13.0+ x86-64

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

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pyvpmr-250526-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-250526-cp38-cp38-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.8macOS 14.0+ ARM64

pyvpmr-250526-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-250526.tar.gz.

File metadata

  • Download URL: pyvpmr-250526.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-250526.tar.gz
Algorithm Hash digest
SHA256 fc86ed58e61fa405dab3ffb7c7ddcf5c05e84dfafdf4433e7e880a019afccb12
MD5 ca01f957000d368ba110b2640fdde60d
BLAKE2b-256 57a831fa0c02da7d5d62017a2b77788897f22ef99aba93b9dbf46a8e17736c14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ad38f5ce9687178e8b2e1e1de90956f290167d1dc2a82bcbd0a6a196af06b9d5
MD5 651210f112fc45c2ab7ff116bfd74ec6
BLAKE2b-256 99be33dbbd9ae8da5745b1ea2fad81d360b09551143525d223c152e1afeecb4a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f801a37c52a8bab3d1e8163f0f292ebb190c1b5bcc14e8d54294a9bcd7f12299
MD5 9fc9fb9846f1fa38cff9643a77ae68f2
BLAKE2b-256 69b74053ae3564cd4d6fbdd39509ce324d65fa20ee03fb586aeaefb06190c7f7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 8f00a5489cd6673907f7817356d1c30b2c3ea62fdcf4cda6ec8e31e64dd99494
MD5 05ae346178477b29219cca99f4c7b9e5
BLAKE2b-256 394ca9ea5f309bbe611f9086d7d51c97b8214cdab4fa1e973ab80a34fdef05fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b2e6665ac0d481752feb9b18e2151ecf14fe852fc5ec816cd60b3f548ac20a49
MD5 10ab5765c5177d3e0b1c5c15428a11f9
BLAKE2b-256 027b52fcb24a9ce7f1eec09f65a0062428a342dcd4de2e03758119037a960a5a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 42f86608737f49462dd46568e141476a1ffacae4267d2066ad941263f869406f
MD5 c1910e3305f648b90ac7a756a5c0bc2a
BLAKE2b-256 0755f5df7955be86bb50b7c7febc1b7da9468688fb438d07824c368b3af59f3f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cc2a5676b07df8a77e2f81d83754cceab28adfead9f43432292cfe9e7f35ff06
MD5 c6e25206af62d8dcbb3b1da0e68bda8e
BLAKE2b-256 bac7f15e6f270b9df77550d8649ba94740d84030937894d62537e30acf8e6e47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e135930b5225386de7163ebed82f078ccd4a7277b47e5a02a67a376222a2cba3
MD5 de02d49a5d5529659d1936b625440c42
BLAKE2b-256 19528166cab21be251f437903f31949f5517bfa296c89f643f401f68341f5d80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ed4eee2463e978bc1b904e705d341c722455bd840290ac943be5d5082e44c616
MD5 06dce88cfaed042be7a153dc5427fafa
BLAKE2b-256 8066d990c8409a815e62dc94d38e06cb5e20ee8dda57bf14dae6ce2cea1563f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6909d75b31c372172ab1a9d4a5baec7f0b2e4f7bead15063b049fc43f130a74f
MD5 20ecba64a8879ad032d0af8e909ae218
BLAKE2b-256 5a313ca911f8651bd68116c6917fd41392dba304fc8ed6a7c968334189896df7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1d7ea168d907886d4267ef542775a1a76b3c11baf89a9ff00990111f456faa14
MD5 cb133787faf7f77d878a06a89c74fc4e
BLAKE2b-256 4c3cfc09bb620b47fd582ff3a0d4737765649abe00145c271214bc9b63ab6d3a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a6ddf70c38f200c80d02561d2f01e75ae5da3a90071bf5063bf2a4f840f3848e
MD5 539a584e9b72eb024b00557f09f89ffc
BLAKE2b-256 5f9348d3735de4c9363c1bed4f630eaab1e1aed2cf4a79cc78357532a0390f82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 88357941566533cfd5fb118a4a799e3419d00d9b4dc094f166cd63d408681548
MD5 4722ef9b9e18a12af04487685d4c8769
BLAKE2b-256 44a491792e8da534feabb4ed433bccce356af6bc2eba6475ba646b0c6d3fc6bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 01283aed92525f50fd54579d61081402a342f556cdd0e1a08732d78441d94c93
MD5 97f443e856ee9a86d2cf41fbc4f43912
BLAKE2b-256 a907518b5518b7baee293c6ddf25e9bb44da8f6b9ef661fd03b23a35460e546f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24529553225119a1bfd93256932065103d312aad7c6db9a58c2a4dfe168f194f
MD5 7001887e71e6538e6c912896c12f3db0
BLAKE2b-256 34eb4c91a53ba183936a20acb00c4739b6fd489668d3c24f3f6d4f1853942cd2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 271d2342ddc8da623918826a0e40dc5adf324901122a752399033a46e88e825f
MD5 656725aa7942c4cd9ab63c02a816e3f1
BLAKE2b-256 e57bfcf7f510127555358b909eeb13ff094e85136e6118364164d12d571fe443

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 0f424939c41f4a6c7e2a294df758b41760e4bfed1f04e66a4a9fc4904a5b72b9
MD5 733321623f1480233ec4e28ba3bd2051
BLAKE2b-256 65b417f81e20af07a48ac876f26ec31f6b812048470be6ae8719c7ed0787c1db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 68675b9a5d4815998fff0499871334edb7a7190fa63890469c7f42c0ea6c0129
MD5 4b69bda8096abc9793df92b01f55ad63
BLAKE2b-256 1b00dc046cfc732f42286b17be279fb41d7b3cc0fbfe1e7f5340eb358aaa7f75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 05d366947683b80f85c50a8e8ede95894ad9aacb6fed7ccbc426085d5d346680
MD5 62f43b3281028998f2a16f2bb8510482
BLAKE2b-256 45b74c32f56085870e2535b94eeddd20a81a4bb37d48386b379c51df135533e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 64e2c6dfc81ea7fe872df82ed785314f499655a3918a3bbfb70b57d1f153c034
MD5 3f34fb72c777d4521f2f9d4b0f6e8d33
BLAKE2b-256 7ed0812d90b8335bae314d3a56c62d9dd030493d730b8517485806e5de76e23c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 585d5cb9d7a0071a35e2f221346fbe892cd10ace33d62cc5cf9b56cdccd067a1
MD5 67cb2fa17fa6580cbb972ed2db0ef8fa
BLAKE2b-256 f32e1e31ed0e27b084df031c59b45ec41390d7f4ce38235d2dbb120d7a2befda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4b9e9727d6ae2cd9b4d246389197f60ee8293a77d68d01154a0aa29c2dd3daf3
MD5 bad824bfef1a690012953b68aed47933
BLAKE2b-256 9f46d3805773e3033f01c0b6ef02e08fe5fa8b9bf804cb70a748d5b6db6619aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a36c2a379d00719d68f7f29a302444e11d8bfca3fdfec080691140a9efd8d297
MD5 9886d35b2bf6b2b2e96d013d8cfa27a9
BLAKE2b-256 a88617eb6b9414e16b946e0e294fce8f0397ff1547c36b7548acc5170379104e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 344cf5b4fe3e7910f6a92c32ff1773eb9fb13ca9612e797d61a17ea5f15f9084
MD5 6e5b1adc617f7ee778d8ce103d511f89
BLAKE2b-256 2fa15376b2102ef79083a5db50a214efb64c4e377e7ccad1bacc99b233e27c7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250526-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ba7ddb7b2b871198959fce4175845e06cfef148c15fa99853f07e8354871013b
MD5 fd97be8898635cf18277aa33e5df325d
BLAKE2b-256 993d780cb3a24d3f2729693de6f09c9d5db02e326ce7bbb88c4aa71d6a72ce6b

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