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. BigInt BigInt arbitrary large integer for combinatorial number, included
  3. Eigen for matrix decomposition, included
  4. exprtk for expression parsing, included
  5. 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 --depth 1 https://github.com/TLCFEM/vpmr.git
# initialise submodules
cd vpmr
git submodule update --init --recursive
# 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 --depth 1 https://github.com/TLCFEM/vpmr.git
cd vpmr
git submodule update --init --recursive
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 (0x00007ffcf3121000)
     libgmp.so.10 => /lib64/libgmp.so.10 (0x00007f72087e8000)
     libmpfr.so.6 => /lib64/libmpfr.so.6 (0x00007f7208736000)
     libtbb.so.2 => /lib64/libtbb.so.2 (0x00007f72086f2000)
     libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f7208400000)
     libm.so.6 => /lib64/libm.so.6 (0x00007f7208320000)
     libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f72086d0000)
     libc.so.6 => /lib64/libc.so.6 (0x00007f7208143000)
     /lib64/ld-linux-x86-64.so.2 (0x00007f72088a1000)

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-241217.tar.gz (2.5 MB view details)

Uploaded Source

Built Distributions

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

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

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 13.0+ x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.12macOS 13.0+ x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.11macOS 13.0+ x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.10macOS 13.0+ x86-64

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

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.9macOS 14.0+ ARM64

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

Uploaded CPython 3.9macOS 13.0+ x86-64

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

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.8macOS 14.0+ ARM64

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

File metadata

  • Download URL: pyvpmr-241217.tar.gz
  • Upload date:
  • Size: 2.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for pyvpmr-241217.tar.gz
Algorithm Hash digest
SHA256 6f4708b37ae0a18f66b73cbbed011dfead7f2c7ad2f60a10eb4ddd4b9eaa321c
MD5 f616960c5ee09c2066a502fa3ce9a495
BLAKE2b-256 5d6c170bb73055d323712774f34ef47803da7c1465bbf22cfacc1c6dc08848fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6e4401e168bff7f7228f9c9c386c836a4ca897ad8890a94c15a43ee9b029275f
MD5 524c6cba301edf145e65fd1c096283c5
BLAKE2b-256 27fb7e3d23fb5bca0b3089a89a41feba9c0afd1dfc4be044778f2f5ef4bd4c7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0a5dab3002a7caa0b1c6c40e23c0ca0859c90f2cb8b5dcfe0eec4b9851965231
MD5 999144277ba2d647b24b84cad2da65b3
BLAKE2b-256 e919c4fe77b6971b7946a625b0a4a8593dfbd0cc9573d4ed568c3c89ec64d6ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5c3c150c8e490bb8203e2f61216cfff290eaf55c911dafefa086566b94e830af
MD5 7f4e326ff9ac4d40128b3ab179342bef
BLAKE2b-256 96ca388578c1501b9705b9f3db0ebef2dee9ea8cc7f4359bbd397d2d6a70c831

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 bb278f80f239ab614c81ed01ed966ea0f331ff5f0c02ff9942e2034f67903d84
MD5 0fe5b7a35a465e9c93bdba868b7b36d0
BLAKE2b-256 5239243f1cedbebd126e0683fd8cf0c6c037c17371f728ca1931172251ba0851

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 800107ae4bc8b40f4647f0172412192a7b3e438737d29d1e73f94e945c9a559a
MD5 4199cabb27515689ece6d8f88e1b5949
BLAKE2b-256 5c08d4aebc3e7188ac3e4593f3c796fd66e30ae2a518cd766b0fd60edd0ba01a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aed975b2725743820c6b0596a7a86900bd721fd2f66dc60b70e44fff528bb7af
MD5 177e718448d068e36dd8eb66908fc6c1
BLAKE2b-256 01ee75b62355b4ad612d26660e845279de0888d22979aff28f953548917e2808

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 593d5101bdc42a39e8271d325c44fbb59c12773b36681d1a2e15cc34e0e18eed
MD5 7d52483a8467cbe53d4445deb887b886
BLAKE2b-256 81dacb8b7b969c6976d0daa3d809367929344a42e479464701df11fe7ec69f7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 5d9ab59c76b6ad9b777468c43289486648bdbfdbaba4cab58bb0e202989c431a
MD5 c88cae411fc3ccf355dee69389907842
BLAKE2b-256 b77497dc9ca3c1351fe952b08f7849c894cf5ab12db02da9b1fce999bacf4c91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d64bbf07e872b8205e34c3599ea71a0dfa0ee2338836a2d182cde882a5628a86
MD5 5e3c05895c01f4d2704ec4777eeeeb1f
BLAKE2b-256 f5ccd5b1369146107c63b9710e61313fb3bac0ceb3bbf1f4ddab35cd2c448af8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 58761b50adad0d34b629e1d67c97db218445bf85b4235a569caaeafa04003691
MD5 86e9da1ba7e07a364eb5c3e2ee754e57
BLAKE2b-256 343f19a7b82593cfe4bda976e4258f2c474787dc855a1ef4efcbfa94de7dc9d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 627f2eb2c8044c4961b7712cc56e1bbdbfb4033b881fac58d78a31de3664d318
MD5 8ba753aa6b0a833a1066ed6e65afc3f0
BLAKE2b-256 29d21652e962b1711930760ca186e759c44afe8264b7e334128123b7b0fecf62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 d839686a95db40943267f9385451bbdfcf228a96e960706cca3afe2dc5ffb946
MD5 01defe754878cd8c38abb810c16618f3
BLAKE2b-256 b3ca78b2e30434a4d7d2fcee1131911bec855cfb1ec1d7d40a7d588fc904645c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e0b4025f4afd8978105302d877778043d456cefe10ee1f7f5aea2ce0dedbfdb7
MD5 1f9653a7090f3ac5e2d0889539a94e0c
BLAKE2b-256 b22d0590c4e9e7922d1fb156aac3c78f2d31597b8f47b5ba2f666b8cae25f2d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bbe87086bde22ba6a2bae5a9be784e6348c13b25c53f00e61808b3f3bb8dadc7
MD5 bf821b98cce3be97252119940cf16271
BLAKE2b-256 2fc95d2b84447fe0b70785b993d8e840a8b03d8b8d1aef08f2bbee188d5ae0b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 b4a2c06d4a6b80d7353fd2dc5a7ea2ae53a2b6346ae536b5122ae4992a3b4025
MD5 4248654daa843eda6d6538e3358b43ce
BLAKE2b-256 e3e6d5020f98611aab8aced38b7e1f31412cbde1149f14940e21943c1473431f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 7c5063e4722f6b1bfa349a5929bbbaddef67f3dde7e2773d09be56ab7821071f
MD5 a9e66e0f30a7259bd2e3398806d8d0e3
BLAKE2b-256 3ca5717fce9f34c5a5afbb131249056c97b98eae7c22557075b6941fcbbc2c35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 68c1d0e1babaeb2b8d5c35e6119aa308af353f35ad58283bf44162f220a6340b
MD5 0d2971513a9a1b647bfb0ae330d90ccf
BLAKE2b-256 44108b5fe619abfd8470599172b39d4616800e49520a2075c77b4fc8624d6ce1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4ac8c10fc175c2b00c7be8df699a25f430a425db363a0b8b40628012e1d58fe9
MD5 5cb77681d092c8b942d2e002d0125444
BLAKE2b-256 52873902fa6be56c2e4bdb882f6dd5cf4ac480ec5dc90c0f4d5497377d1e23b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 269ec4efece732068c9daeb4332e8f3ec84017ff4a032828abc1a8c01f243166
MD5 60dd15460930aa785fea419d204e293f
BLAKE2b-256 737a9376286e978b778b94c925d76b758a815770ecd5f1a66bf67ab199d31f1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 40c1052d3c10903fe1a3b79997c50f3e15e739b923b69d94cfa8595ef1f14356
MD5 bb88e505abbe9b64d4ff6603af96bff7
BLAKE2b-256 73085bb0c403cafb62568646105642b3bdef009f0e195a9d74810f1cad91d645

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 82d6c19571a7819d018f36fe8569f341f53425adb69d06482a8775b8e3a21494
MD5 8493958ada9c268b16b20b621cae4b0d
BLAKE2b-256 22fb551d41d3181bb07fd35573f8ac43a9ed9992da86923549bd0b868d24596f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f17962f2a0a450a60c4187d33d49d92252f7bda38e96b0352593bd8e20c3ccd2
MD5 70e19371dacc9c179d123b9ace059770
BLAKE2b-256 00f763c8ebb0c196448f316f027c1dbc31dbedccf833ec5fddf4c9fcab5b1855

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 def0bc940c98223aa8b6476bd50379520a8c78a10ceae9a01bebdbe201e98749
MD5 9fc9f1def4ad3a4a24e118b02c5b6ad1
BLAKE2b-256 8f5fd9dd6df69748dd8d26c6816585a9bdd83969e6fa514645b910fd223be73f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-241217-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f792bef38e8234edca4b1cbbc7a51427c4f14848dfd5c08399c49ac0e2c06607
MD5 d3062ba52e5c6714b3e88ab3df10a01a
BLAKE2b-256 7081b8f19929285f25ba1924e5a522d82e3247aa05699bfc93e65ca23fdf64a3

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