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-250804.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-250804-cp314-cp314t-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pyvpmr-250804-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pyvpmr-250804-cp314-cp314t-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

pyvpmr-250804-cp314-cp314t-macosx_13_0_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.14tmacOS 13.0+ x86-64

pyvpmr-250804-cp314-cp314-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pyvpmr-250804-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

pyvpmr-250804-cp314-cp314-macosx_14_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

pyvpmr-250804-cp314-cp314-macosx_13_0_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.14macOS 13.0+ x86-64

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

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyvpmr-250804-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 13.0+ x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyvpmr-250804-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

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

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.12macOS 13.0+ x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyvpmr-250804-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

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

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.11macOS 13.0+ x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pyvpmr-250804-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.10macOS 13.0+ x86-64

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

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pyvpmr-250804-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.9macOS 14.0+ ARM64

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

Uploaded CPython 3.9macOS 13.0+ x86-64

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

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pyvpmr-250804-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.8macOS 14.0+ ARM64

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

File metadata

  • Download URL: pyvpmr-250804.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-250804.tar.gz
Algorithm Hash digest
SHA256 5921adfeca54f992484a98b9d0e58b122d4e65ada99ece58047f10ac5acb2575
MD5 e548b3037d97b30e20bea3057ec1f44a
BLAKE2b-256 38fc42744f5a68636f33b83f97e5e670637a13af08f7d7174f15b6f1634186e9

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3b1057bc4e66f18d5649e8a6a360c5f5c8f6899a6a6db398c367bcf324c7ff88
MD5 c20e459757d9f2017b67943a68050663
BLAKE2b-256 c7369cfe09ac7f34847c0e6a9503f316ea0f4bbf4d96fbab0d70ea4eefb2fb9b

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a991e127fa24128af455676126c57120b5677b1745162226bafc365fc5bcb2c5
MD5 0107887933094c9001a391fa1787cbe5
BLAKE2b-256 5571539cb24e653866f89d3dbc1d92ce2038660d9266b65de0d794e69b4c86fb

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp314-cp314t-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 141f8a08947f2415b0a416d3d4892bb0230a70cdd666f7ea1837411332589d64
MD5 abfdb2b890c051a6f04908bcc74c2e4d
BLAKE2b-256 58fb862688e2b96b7b4de34f07323576441d5e36ee09ce072ac8ad6e93fd84b6

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp314-cp314t-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp314-cp314t-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3fa3392c5250011734abe0bc3d84184415ee36352e4d8cb02afc5302aa643923
MD5 c22f39b302aebddecd9c0c45a1a6ab54
BLAKE2b-256 b5ece92819a1634f724a80697b211f37b26c67d7ba4fc6ae1d9daa604619ee44

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 54938f8995e76ccdce87016c2a18709909d4cb064e34b50f6a04731856938979
MD5 a09b41a701fd6df075208790568fd2ed
BLAKE2b-256 3cf2a07d3e30edc6a87040c0d249c53c4d0f3e12ab47e9e4323b36b2b81df039

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e3158a5a60097d09c997797c6cd7ab6b710c09764a72d70d7f689e31aa704170
MD5 4231e9a6ab9ff9a344aa257cd481f44b
BLAKE2b-256 65483cef5f1ccfe22be54470890475b1fd067896828a772e0b3e1f0f9821a72a

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 cc8a34da6a903ae0bbed9e405ae854bcbbc9a9735122dc4dea459a7c0a187b9f
MD5 17e3b59d8015a31921c6ffe55e97d554
BLAKE2b-256 c37e69cefc7b9fc0671b1b88485e3413547c36789f7fd7f548cc7e964a277ed7

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp314-cp314-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp314-cp314-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 9127bc943fb5e75f6be37a7cd3c85579dbe55b472152600f0557a4d1eccac983
MD5 0b0172b5e2f86edabda976fc5367670f
BLAKE2b-256 a9410e78ac803e446893f7c3b40bda10bbe3cc5558704e5cd6292b8251b638f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1a0d51695d54298f1abc9b1aceea21d211e2eb15435f1078b671a645c9adcb04
MD5 c885738b19ebe85fe2f14e6d11cf5968
BLAKE2b-256 bd2d6816b4cb46842455d33d7c81fd2c80ccd6fec32685d4536fa9027ff11772

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1aa9eeb9f6db68a72523c7a5fd0c265b434d2710380e139cfd1076190467b00d
MD5 0a45ac1f8ceb1b10c054567d6a055f45
BLAKE2b-256 9f110df4867954d222ca1b0394bf8fc438433229b2349750b6e2106eb5c01cdb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c2ff66dacd0b59a149460d9cf6e43db9ec28a3b285f6d9b131d5d20e910b13fd
MD5 851986b2a49c45a100533f167398b538
BLAKE2b-256 4047ce421dc4b472fa25f44486713a7420895585d67ce810d1e247793c371cc4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3c89320c058c45ef1c51d711f99132c0671f8e3049e0717910b45125bfa94f75
MD5 ba1fa6b574430bab5855c3a89429b8ae
BLAKE2b-256 d082abae1209c6c22f45a0d9b4a99564e242d96b5a6bcce0c5f774d9891bc17b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0b6999b7fd304952b1d5b2edc64d2c722a4637f8688b5feca1eeec3882ac4244
MD5 fef9dc392efa1309ad4ef8ce459a739d
BLAKE2b-256 ec78fdc6273e3214906f78626d7c33f9432d8e2b534b95557e8f39d09c986bc5

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ee2e452ff92a335d95f07a9dfb462acf5165dd78a2e9a68d4e73e517227127e9
MD5 6a68fde51d38575596c32fee8d0d6a22
BLAKE2b-256 ce4b3876d81bdc0fa31d7d7cc97007cc0cd87fcb4e02b373ce9d0c52e0aa9e5e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c2278b93c5ba230d828e091655c810df6c5f423fa80f75875c2feb9c9cdf9065
MD5 0b48b1300e9e25298aaddd452d6c20e3
BLAKE2b-256 6ef4d74687a5f78ecb9aaf4404f344ad9deebfef3a664b3b8714426c1ba3f3ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c52bcaf7d241c09a77d4a38d0b0d9c5e2c95014275fc3125dd442ff5ecbeb031
MD5 c06ed939ae9b68954e3bb6eb43d14853
BLAKE2b-256 5bd23485326ab7a7f4d97132cc6f4be2dcb922eb9c510d50247a30f5b8276f92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f446f23fda625a0fd82a3b64194d9ad000737740a4f7c0bb6472a3c66f48cfaf
MD5 d96a4439e077ef8519b3878e7da8b2cf
BLAKE2b-256 3964f9a3a6c8e0036db1fc598f00dee4722f054e422ff01fc93daa02a1bbf65b

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 75d82c750a19c8e52450991e050cb457f02598e89b524f657b9ef0ad1ccf0fa2
MD5 95802f8aa9bcd63e5963f485e2a419a0
BLAKE2b-256 355c46e3c0f9186be2316dbfe501fae66c534d28a558576761c92091e4b520de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 8b0ac319fb98c2c2472a6fe144a23b2bc64af5065ff0e52cdf5bc61216a2ee75
MD5 e27ea1eaa603221605037673dc98a093
BLAKE2b-256 79ebacb6f982d75d83d8227e99629dd1fbe385829ea2097a5e3d3ddcd6b3ab99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3b72385ea9b5e06cdcf45367270d8033d4df9d73c6e90728a0aa0b7dfefe619b
MD5 1b12c0eb1c0a5b0cadfcea375699855a
BLAKE2b-256 f5494c726e8e4e7ba3835de5287d15313c49beba7292c98fde4885dd55630298

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 711db66f20043baf3c1122f3033b7009dd1541dbbc64412de1303feb197bd553
MD5 a8779df74e4a77e10e80ceb13d580c2e
BLAKE2b-256 3350fa24d693ce6581d71dd1e057926c34e8bf359ce11249f756df0b9dffbb7c

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8d61ae2783e59239527d2654aec16225d6724f2b1e7651623320e57e84923a9d
MD5 56030eccb29d0cf01b598e0e0d025d25
BLAKE2b-256 17294692b3e3e69a8ebf44267ea96d92d5a151ebac31d271542cd8f093ea3b8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 9bb27ad58a85a5f705d5d7ace3380dc499d4e314a30a5e0462ee9fbf9a7c1263
MD5 d1a6a70e4429231bb37dd8ac90991101
BLAKE2b-256 4f2d657bd4c956c80a5977f84051866ee90133989e6fb106b967b1bc5124db52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b7d7b41c16ad1076a0e27ef4eff700b957844a86b2b1d8b29f515bff1e60bdd9
MD5 e978142be2dfcc17d81489bb43c48217
BLAKE2b-256 beeaf107bcd97262a1d3dc29f5375fbcc44f31b08e9861cb131614a064e45292

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7ef7f20b5ef603307ef987fb5f79ee3e071e7cf0670b9241316f67eb69aeb608
MD5 394087227610643bc0c8971fddde9841
BLAKE2b-256 233986adf0d6080d019efab165689e10174e2ea5e311d631d41308913488cb11

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d3d562d69f8212e993c345de116579d4bf8ff201ca69507da2cd163a9ee34138
MD5 839d6082056b0b77cc7e8358ab0745ff
BLAKE2b-256 b5d187d1c07200f47e323b7e55e9fba0e8227661eb9196ca0dda8bf7319bec5c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 9fef56f6ac3de0767d3fb85aab82a478ccbe31805f70a4164cf41eefe0ff3d13
MD5 a5039f1049276797ca1ba70e2e48ff33
BLAKE2b-256 27fea1bb8d096bcc13efffe687695ae21960a62e22b8fe2635c056a609e43c08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c978e748bd487c7b8b4f8592fa70bcc12d327c95c57b6423156d183d3b235116
MD5 d7f627d55c5ca52d16183d475aadd8d1
BLAKE2b-256 d6e92dce0757b91428deb9984772f8b78f86100a1bb8f653cc662c89d387f705

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ae363938492c978f08b39e136dd190c7b70702ff11d72b28157e7977a5b6503a
MD5 4e75a019cd6886b2f9bad6b72a95ec55
BLAKE2b-256 4ff7408dd20d283af0a74c47fd256ff47402e2d525527a57c8246fe57fd9be7d

See more details on using hashes here.

File details

Details for the file pyvpmr-250804-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvpmr-250804-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 216bc1691efd8feca0791e7dcac5956f92c0c09c05ed0d01d416e34f941bf3e6
MD5 64196752186bbee7a244ed33fad1b5b8
BLAKE2b-256 1d2c6f30becd3a8fd87f9639af0080b79ba98af7962379aa47ab6567fa32c94b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7ece8906c0890b350c36bfec5baee76092490ec2237d60eb9a9ba3b4ef403897
MD5 8ac939f31d607022c314dfdcd3fa32ac
BLAKE2b-256 bb0dc28cfbca549e245735771b5f61010ee1e397acf765552031b416d4a7c2f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250804-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b9723d6702eb3af6a1ba3edf70272efd02a6a2a8d7aa2f2e435bc75f24dd511b
MD5 46d361e435d140f007354ac21fd6535f
BLAKE2b-256 2bcdaca41d4e23a3846817e9236868f16a0deb2ba3c43da63c0ef543a0f4e920

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