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

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 13.0+ x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.12macOS 13.0+ x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.11macOS 13.0+ x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.10macOS 13.0+ x86-64

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

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.9macOS 14.0+ ARM64

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

Uploaded CPython 3.9macOS 13.0+ x86-64

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

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.8macOS 14.0+ ARM64

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

File metadata

  • Download URL: pyvpmr-250420.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-250420.tar.gz
Algorithm Hash digest
SHA256 ce66cff22cf566130855c63ff7ac351c5de5764a760d5980b1d590d0466c1230
MD5 d7ae11d95d410d20c8b7b4e077e1e96b
BLAKE2b-256 134ab4e8c0264cc8093fc06ebd5b79f5858e00b8494ecba5e84ba9bc8eec98c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5c1c7213bf66d337535b5ee8373c12d88c6c03ea570a6f8950b8c9f924049b30
MD5 6d5f63370e3821fb3c4e0e225ae9bca7
BLAKE2b-256 fefa351afab864fdd7e865cd71119e817d8b5444a121f8aea49613987c876cd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2506fc7ece374e40cce712c156d3f9153e707c5a7e65f8df82597174582e6f43
MD5 33048b86d9ba45361b0ad83166055483
BLAKE2b-256 9604a95f722942fde2d72e7b6d88c611a703d22282ca4c71a538d03da9dc6b80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 afbcb3de6e1e4bab104c7b622a0e2684cee5937a72e5a1e3d14507a2ebdc3b55
MD5 cda45bfbe74be55ec4d8cf74943f62f4
BLAKE2b-256 9a9da8d1748e920a49ac6dbf6da685483d8a23a7d91deddf8f66dc1199438f68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f883e44ebfb92c1c02fa34bb73ee2971c9eeaf5aafd8f5b4be9ec49fcaf3f08e
MD5 ddf0da230df3493120be15e30d0efecf
BLAKE2b-256 8d82d3c29e9563946e17789c27bbbc90ac35f627b49245b628ad29db110c9779

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0cfd1e8fbed7410ae40f99d96ed99f82f176cadeb8db9424d07bfaaef641e63e
MD5 c14ae8e1a61b4a8c0a7da062a6da379f
BLAKE2b-256 57e37fd0098e9985143b56a22bd9ead76752f2d8363d2abc0196c265afd15a22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f675e92279474b637943f3320a15a0505500a4fc786591ea1715355f293ef110
MD5 ca40491f753d49b178d961d4a4426a2f
BLAKE2b-256 f6626927260c841563406a6c68a61d1e1c09683fbb9712846633bf50b5096775

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 b11b742681d228764e3d202df22dc98de2e2936b417645333e42032155516324
MD5 bf2e366d0662f887195547a2bb3194f1
BLAKE2b-256 7e61178178bfb8b3db6354acf7caaaf1d624c0eacc52c66a7f663d0650448bb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c9fb8722bc1bc2dae74b2d5112d732763b0084799b369d68f84dd7781dde6df8
MD5 a89175a545096e9b2ed10275244dc177
BLAKE2b-256 48401df81366286cdc39ed20fe9e572716f1b33b91f7f4eace2b5ffa0a1720d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1625480252f3950774b110ac31c3df68e55e03300a0a88db459a29f13652f470
MD5 f2d9ed8aecbe55f262b34948c73020a3
BLAKE2b-256 f82e995cd4963fffb0c36931c4ceaa0774d9f55fcd8d1b27ec04535b8ea8d181

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e533c851889943281666eeca8fb548f938ddf27135fbf9558042511c484082ab
MD5 fc8b0f67a47ee68b1f1c391308730445
BLAKE2b-256 bfe74c09585b0ec3158a33162ae616bb05047274111ebbda9af438782c263b2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 3f3cb5330a25d477e08c9f49f8d993d35a521f2b62e7049347bf0950d7df375d
MD5 054aa9418f07af405375710610ccfdf1
BLAKE2b-256 726fb8b50866261c720e080475381694fc2d822b9351d61f3b4039545e5df54c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 99c96fb3272b1d02825d5b2da8cdb436097cdaf1dfccd64bd72a30b120dcbf88
MD5 77d07f76de98754ff94fe3caff028a84
BLAKE2b-256 5f9c0af6620b6a0fad2c0c4d5ae328a9909cca8948320acfb6a12b40b693852e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 37e484cf4e987023c27e5e2042d160d1d06802c97a717df74c68920a0f9737a3
MD5 ffcdef4a25765f910ba309f7e2f4bbe8
BLAKE2b-256 23c064f5b84a2c9a06ab83b556db85e50afa73c517fe755d7017314ef672a22f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 138e114cb4ea5afbe32788f7510bc7b2fc07abc73154773a271e9bb7ad40f9bc
MD5 f6f180643fdb59b1e55a455ec1383e4a
BLAKE2b-256 b077fea67c226b2c0a82101e2667a1f5ff56ce0adcff30de68ab93e913994d3a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 28da8436bcbae96859ff620fa507f13fe8f928d030edd819c137dcc674f950bf
MD5 b263f8ae438ee4ef8dfec8220fc7f29e
BLAKE2b-256 ee7392f56f9edb63a384eae5eebdba566a2fb59c80aa9b058316c3bd85dc42e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 38e315307044a81659829fc848f1dda261183958b3df3a346c056fff5e2cda55
MD5 fbd4568b4ce6b0b0dbdf318650db9b47
BLAKE2b-256 5b0d7e1a029258fa20f01fd11998cf3fc46c359f462f602be252012fe34c52c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8da9c7bb83f0f63a0138d2e64b225acc311d684441e9383ff00f8bade73beece
MD5 1d752e932071f13266844fb019058280
BLAKE2b-256 d9fd1dc89eef3eb67537eb435b743f53e685d1801a65d18a22f1f959766c8da4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5477858b4089694b42d7c3d8721babdaa5c3f8a7706fd6f6597356583cb2b052
MD5 bd6f4df5de83e93e994c66398a7e7c78
BLAKE2b-256 5521ae9481cda62e2b31908efd9a08295e44bb2a6840d20a820c2131996164a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e8ea8b4957fafa561945df39192b474c141183c9c264cad8c8106ce5365014fa
MD5 d6d0ad34d0ddc12e43837369bbacdfaa
BLAKE2b-256 28d1e8d1c0c82c8abd55906752b2dad8c3177db7923fe2f63effe3db24275737

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 223979c2ef517eb469b482eb197d57df87ce0305c6e79247c5999cee1e8f90c7
MD5 c4a65e86e7c6d50993287994d6b92fdb
BLAKE2b-256 feb1373ee47c026827098ead2a29f4a10c50c1d00cef3726e65a7424c94c0e0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a7cc276fecad66cf852f5a2259b030d6469cb503fded64c081718e7e9f981d0d
MD5 8de6dfaae71f8b809158dc65c4a86e8a
BLAKE2b-256 a2bccf8a06bbd3282680011e585ee069177362a88b82d1922a404e891b8925c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e0cecd0f61b3ff35bea206734c4d9ba081ee9f8d033916c8e6c614cb9e51905b
MD5 33dc5b6c6cd9248cbf78e192b77fac93
BLAKE2b-256 ea1a9fdfda2e2453056f8f15b21da2804ef62f52ffa182b084b255590d7de285

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5f6b0d31b2799e870a993ac38336e0982c8b8eb9e0cfce73526812063f8c2c57
MD5 52595f29fb8c6da60d5f4bf67117a9fa
BLAKE2b-256 b2dbb22cf32c662a30df56fb3a2d0b0fb628306dc5500bc8819db5c28524ff47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyvpmr-250420-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 65fefe19bef43f7b6999a7ea69a1ed6fdc244aaba62f5be0674540e2431af5d7
MD5 8c3b44f21feab64b8408ae10b18a38e7
BLAKE2b-256 5b712614863fe4502ab330669943b48974e6f1d3d268dcf7cf7c3a221654e6a9

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