Skip to main content

An efficient implementation of Vantage Point Tree for Python 3

Project description

Introduction

PyNear is a python library, internally built in C++, for efficient KNN search using metric distance function such as L2 distance (see VPTreeL2Index) or Hamming distances (VPTreeBinaryIndex and BKTreeBinaryIndex) as well as other distance functions. It uses AVX2 instructions to optimize search performance.

PyNear aims on providing different efficient algorithms for nearest neighbor search. One of the differentials of PyNear is the adoption of Vantage Point Tree in order to mitigate (up to some point) the curse of dimensionality for high dimensional features (see VPTree* indices for more information in docs).

Installation

pip install pynear

Performance can dramatically decrease if this library is compiled without support to Open MP and AVX.

Requirement

This library needs OpenMP support to be built and installed. The whole compilation proccess occur automatically by performing the installation step above.

Features

For more features and all available index types, refer to docs.

Pickle serialization

vptree indices are pickle serializable:

import numpy as np
import pynear

np.random.seed(seed=42)

num_points = 20000
dimension = 32
num_queries = 2
data = np.random.rand(num_points, dimension).astype(dtype=np.uint8)

queries = np.random.rand(num_queries, dimension).astype(dtype=np.uint8)

vptree = pynear.VPTreeBinaryIndex()
vptree.set(data)

data = pickle.dumps(vptree)
recovered = pickle.loads(data)

String serialization

Sometimes to check state of tree is interesting to be able to print the whole tree including information about the size and balancing. By using to_string() method one can print the whole tree to string. Be aware that this method is really slow and should not be used for any performance demanding tasks.

print(vptree.to_string())

Output:

####################
# [VPTree state]
Num Data Points: 100
Total Memory: 8000 bytes
####################
[+] Root Level:
 Depth: 0
 Height: 14
 Num Sub Nodes: 100
 Index Start: 0
 Index End:   99
 Left Subtree Height: 12
 Right Subtree Height: 12
 [+] Left children:
.... Depth: 1
.... Height: 12
.... Num Sub Nodes: 49
.... Index Start: 1
.... Index End:   49
.... Left Subtree Height: 10
.... Right Subtree Height: 10
.... [+] Left children:
........ Depth: 2
........ Height: 10
........ Num Sub Nodes: 24
........ Index Start: 2
........ Index End:   25
........ Left Subtree Height: 8
........ Right Subtree Height: 8
........ [+] Left children:
............ Depth: 3
............ Height: 8
............ Num Sub Nodes: 11
............ Index Start: 3
............ Index End:   13
............ Left Subtree Height: 6
............ Right Subtree Height: 6
............ [+] Left children:

...

Notice that this output can be very large.

Benchmarks

To visualize, customize or regenerate the benchmarks as well as to see benchmark results, see benchmarks session.

Development

Building and installing localy

pip install .

Running Python Tests

make test

Debugging and Running C++ Code on Unix

For debugging and running C++ code independently from python module, CMake config files are provided in pynear/CMakeLists.txt. For building and running C++ tests run:

make cpp-test

Since tests are built in Debug mode (default CMakeLists build mode), one can debug tests with gdb using built test binary:

gdb ./build/tests/vptree-tests

Debugging and Running C++ Code on Windows

Install CMake (for example py -m pip install cmake) and pybind11 (py -m pip install pybind11).

mkdir build
cd build
cmake ..\pynear

You may have to specify some arguments like the correct generator -G "Visual Studio 15 2017 Win64" or paths for Python -DPYTHON_EXECUTABLE="C:\Program Files\Python38\python.exe" and pybind11 -Dpybind11_DIR="C:\Program Files\Python38\Lib\site-packages\pybind11\share\cmake\pybind11" for CMake to work correctly.

Build generated files using Visual Studio (or whichever generator you chose) and run vptree-tests.exe.

Formatting code

make fmt

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

pynear-0.1.1.tar.gz (29.8 kB view details)

Uploaded Source

Built Distributions

pynear-0.1.1-cp312-cp312-win_amd64.whl (157.6 kB view details)

Uploaded CPython 3.12 Windows x86-64

pynear-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl (837.3 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

pynear-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (332.8 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

pynear-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl (570.7 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

pynear-0.1.1-cp311-cp311-win_amd64.whl (157.8 kB view details)

Uploaded CPython 3.11 Windows x86-64

pynear-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl (840.9 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pynear-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pynear-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl (570.2 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

pynear-0.1.1-cp310-cp310-win_amd64.whl (157.1 kB view details)

Uploaded CPython 3.10 Windows x86-64

pynear-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl (839.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pynear-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (332.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pynear-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl (569.0 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pynear-0.1.1-cp39-cp39-win_amd64.whl (151.9 kB view details)

Uploaded CPython 3.9 Windows x86-64

pynear-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl (840.7 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pynear-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333.2 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pynear-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl (569.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pynear-0.1.1-cp38-cp38-win_amd64.whl (156.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

pynear-0.1.1-cp38-cp38-musllinux_1_1_x86_64.whl (839.9 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pynear-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (332.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pynear-0.1.1-cp38-cp38-macosx_10_9_x86_64.whl (568.8 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pynear-0.1.1-cp37-cp37m-win_amd64.whl (155.5 kB view details)

Uploaded CPython 3.7m Windows x86-64

pynear-0.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl (844.5 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pynear-0.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (338.9 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

pynear-0.1.1-cp37-cp37m-macosx_10_9_x86_64.whl (567.7 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file pynear-0.1.1.tar.gz.

File metadata

  • Download URL: pynear-0.1.1.tar.gz
  • Upload date:
  • Size: 29.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pynear-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7e8e488f613e726f19270e809d89125bae78202a4d3569ac83f0c123eeb92778
MD5 d133b38c929bd0259da2be6425bb9250
BLAKE2b-256 1aedf3db588acfd74da00dd075ca7077d556fd294a5d23315c89a07d5f0c6019

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pynear-0.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 157.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pynear-0.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 abc6f60c841e8c5e74529b22f3dc5581ae73d663c1142418f8c0042b9661da4a
MD5 cf340358b264f25b3e5c8a2d11e53b16
BLAKE2b-256 1318981a5fba1fbf42dddf18e52fdf95d63f92b0f3fbd334dd6f9c853203fc0a

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 d845cd5b934156830c1193d904315f75b1621e5a9f4af89e983d0194fd4e18db
MD5 b0c6d1bca9e460c0ed068c4b0ea2e9e1
BLAKE2b-256 0911be2713a57338c83245a4b2e7fbce1fbcbb8d347e8598a0db3fac7d5deb3a

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bdd5d944b1578d2c7fa49c4d26fcab02b5a92695395e52bc62c9ffb0ef5eec11
MD5 8340ef30652e82a4af24c2cfdd3a1e98
BLAKE2b-256 80f4fc5734b69538d1a0f87e7194d46e7f82fac639192219e301af0b6bd08f17

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4e332088565042a54da97ebc9cdd2605e4a9039ca4bb10a6a56f1bbbe0c39247
MD5 1ad077b42a5a975eb8c4c9436f21c1dc
BLAKE2b-256 dee85c55e1c4e6fc8c84fdce9f419a4992d4f085224ed148d813cd792eac37dd

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pynear-0.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 157.8 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pynear-0.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 406683addb9826cbed14921cd580b34554dc4ef8dafab2b181ce39679cfdfdb7
MD5 3a8e02bdc19b38ec2efb8086bf80e3d0
BLAKE2b-256 da5fa6ef52c15b55eb5b44359cc8e876672f544837d9137e57d73125cbf4e40c

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4a17d3ab9148c50c225e9544645f287987aa2e0c0d06472c3eb9c59b4da4d1d1
MD5 92c6ecbda8137349ea74106322e2e994
BLAKE2b-256 1472651fe6cf25eb1bfbfdd0618f9e2c26e60ebe60ffe602525a019262fccab5

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 06a367d1654fbbda7ce95ba7783f1344448d3272514b80afca9461ac201de85e
MD5 7be258d730484fbcd3f27aaae232ff45
BLAKE2b-256 4d89e78a60c70cc71450aa2c55e523a7e51677375946d82a3b2e19d416b7d2e9

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 098f3c008543bf9ecf12d004a6e24f8a47f8fa56869c2cceb78d9de376878de6
MD5 47df7f3019c60a70b55fdd12f5d79109
BLAKE2b-256 deec7782f453f7b27f545a21d5aaf16d39eaf4e19c035e6346707eb65705fb30

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pynear-0.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 157.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pynear-0.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b4347f80028d3143713c1bf514a4619a6c63781ba16a9dd04a35cf7805d6d1ca
MD5 c04b29e17042865e71a9d76ea6c5024b
BLAKE2b-256 a23f6822fdb05c81cdcb1dc3bf9ca7d90c8dabc02e689faf6908431a913bbfd9

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 1288aed231b9813e6af772674821a8629c46a50c665a719cf9621c7a99653434
MD5 721e571f4b18ccd5f1de417071514dac
BLAKE2b-256 5cf0b367766c5cd118fbdfe8f153a0512a4e946d4f78b4121665a63144e7db64

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ad4cece19bf77c9a7aba063ec4115d7e719a28b67cb1732e22b95f8ccc271ed1
MD5 ddf0bb59c3d184019d3bb8d25ed9dec3
BLAKE2b-256 972a8625277e9ca224e24e768de9c41ebdff70516c046223fc4037f4f1647113

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c1fad817ae091ea9ac7cc88ff6ed8f02dbcf19ba14be7e2db93689e6ed739994
MD5 33472197764bcf0cfb0e24d3223d0ef4
BLAKE2b-256 7fb076be91ca107fc08bd362153e0bb6043777a7c534170c1b2149354938bdc8

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pynear-0.1.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 151.9 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pynear-0.1.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a70c8578404113053be013357fea6792487eca08b31e7a06465ea65da395d73b
MD5 3a990ad346b9e6be85129da573349f53
BLAKE2b-256 dcb3f22dae0106bf04a17821f889827207aad31bd86cdabe8acb2163d8fdd7fa

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4062c81c4fef5353101940c3d25da250d51e9fca42b01c68606488b4d7cc11d9
MD5 0f91399a16cba82ced34da3391ad067e
BLAKE2b-256 f951047e64a1a81b8b455b0ef1d700aba0316500baf4acd8d1e8374ac97d79a1

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4d8e07abf946b27ee66b282672d8f273a0d00c0b5b29561294e5588e7f4fa182
MD5 dd009356d67879e5b282f13a40926e76
BLAKE2b-256 f5c9ba251168853097621ca14685089e783f384341a3fd17db7779c57f2f5d5c

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 581253fa23bab185d2338241062fe94a1095f5955acfb64809e4a1d3accbd879
MD5 cd5ae9c037fc50cdd4c6361d692d9752
BLAKE2b-256 126c4b66b7fad9f02e3fd9f07257efaf4e2237849658d2c989665663d7ac6494

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pynear-0.1.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 156.9 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pynear-0.1.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 6fd5a2f71f3539715244af1ab05d70056e0e9481217c1843b07e69b72931aa1d
MD5 6bd1a85a27cc6673de1eb0a3be59fb0a
BLAKE2b-256 221e6e494791b46a6fa64b2850d63959dc193b2acb4a9471a60897ebd5951f7b

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5928e40a3ea5fa84e4b6bf79cd1363e2a4c26d9cc10787d2a472d2b373935c5f
MD5 6dfe786227edb41f0af2444718514f12
BLAKE2b-256 3d607bb314240c85066196457d8aa5357e7b4ee263dce708236535acd6b3b7a5

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 18810a1fda41702fb0da62409460ec923e5de09ba103f792ff821a986e66d8da
MD5 8264b70c7bc6035db7d86cb8edea633f
BLAKE2b-256 c10fd72cf291dcc507a808382a5b657b9e292baac0be21e0de5fa8c776896bb4

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c18e28904a08f7eff6123272bb8cc0a5f4f67e8e19f45d867b1115d6eb208624
MD5 fdf9aed0c596f00166950b992b651408
BLAKE2b-256 0ee8c61e3f15331ea87ce3107fad376cce2b5edfe256a9f9e6e6a862f431db40

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pynear-0.1.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 155.5 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pynear-0.1.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 31cfbca1936cbd3d69ff8c5e32aefd042be03f9cdd9580a1ab7767414c2bd12a
MD5 7f2f151a1de8de17422b1c8c67cfbb42
BLAKE2b-256 068706c37b5fa398d5661965c9f0ad55458263d0b4ffb4e247cf1375c8ab37e3

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 33e43882b7ab03ad2727b84d3b99c9ca77586844a1b5f8d12e68eb9a3ceae8c9
MD5 fd0bdd9f4e32bdbbfd6a47cf4b94b898
BLAKE2b-256 faf5e66cf09dc2b2abbc3001d86be8fd5012b3c78919140a402f12094ff4ed1a

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 480a8b4fd7c2268004fd6251c348cadbf2eb3c8871d15ebfb964d5a3b27dd37a
MD5 3de98b3bce3f07e5e09076f3c84c3d98
BLAKE2b-256 884a75466593cd91de290b5d1641b68b57becfaecbed41a85c2b21f8eefc0e4a

See more details on using hashes here.

File details

Details for the file pynear-0.1.1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-0.1.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5b58e005f640b3280104e6ad3d33b7ccf8e8d640449f76488763afe1491b4234
MD5 876c4ce6610591f719b7e2e789938ba2
BLAKE2b-256 eaa7c7ee818de9a456f22d148d8e233d738c7d67826dce335eab938080e0fb42

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page