Skip to main content

Python bindings for Voro++ (3D Voronoi and Laguerre tessellations) with periodic and topology utilities.

Project description

pyvoro2

CI Docs PyPI Python Versions License Documentation: https://IvanChernyshov.github.io/pyvoro2/


pyvoro2 is a Python interface to the C++ library Voro++ for computing 3D tessellations around a set of points:

  • Voronoi tessellations (standard, unweighted)
  • power / Laguerre tessellations (weighted Voronoi, via per-site radii)

The focus is not only on computing polyhedra, but on making the results useful in scientific settings that are common in chemistry, materials science, and condensed matter physics — especially periodic boundary conditions and neighbor graphs.

pyvoro2 is designed to be honest and predictable:

  • it vendors and wraps an upstream Voro++ snapshot (with a small numeric robustness patch for power/Laguerre diagrams);
  • the core tessellation modes are standard Voronoi and power/Laguerre.

Quickstart

1) Standard Voronoi in a bounding box

For 3D visualization, install the optional dependency: pip install "pyvoro2[viz]".

import numpy as np
import pyvoro2 as pv
from pyvoro2.viz3d import view_tessellation

points = np.random.default_rng(0).uniform(-1.5, 1.5, size=(10, 3))
box = pv.Box(((-2, 2), (-2, 2), (-2, 2)))
cells = pv.compute(points, domain=box, mode='standard')

view_tessellation(
    cells,
    domain=box,
    show_vertices=False,
)
Voronoi tessellation in a box

2) Power/Laguerre tessellation (weighted Voronoi)

radii = np.full(len(points), 1.2)

cells = pv.compute(
    points,
    domain=box,
    mode='power',
    radii=radii,
    include_empty=True,  # power diagrams can have zero-volume cells
)

3) Periodic crystal cell with neighbor image shifts

cell = pv.PeriodicCell(
    vectors=(
        (10.0, 0.0, 0.0),
        (2.0,  9.0, 0.0),
        (1.0,  0.5, 8.0),
    )
)

cells = pv.compute(points, domain=cell, return_face_shifts=True)

# Each face can include:
#   adjacent_cell  (neighbor id)
#   adjacent_shift (which periodic image produced the face)

Numerical safety notes

Voro++ uses a few fixed absolute tolerances internally (most importantly a hard near-duplicate check around ~1e-5 in container distance units). For very small or very large coordinate systems, this can lead to hard process termination or loss of accuracy.

pyvoro2 does not silently rescale your coordinates. If you work in unusual units, rescale explicitly before calling into the C++ layer.

As an additional safety net, you can ask pyvoro2 to run a fast Python-side near-duplicate pre-check before entering the C++ layer:

cells = pv.compute(points, domain=cell, duplicate_check='raise')

For stricter post-hoc checks, see:

  • pyvoro2.validate_tessellation(..., level='strict')
  • pyvoro2.validate_normalized_topology(..., level='strict')

Note: pyvoro2 vendors a Voro++ snapshot that includes the upstream numeric robustness fix for power/Laguerre mode (radical pruning). This avoids rare cross-platform edge cases where fully periodic power tessellations could yield a non-reciprocal face/neighbor graph under aggressive floating-point codegen.

Why use pyvoro2

Voro++ is fast and feature-rich, but it is a C++ library with a low-level API. pyvoro2 aims to be a scientific interface that stays close to Voro++ while adding practical pieces that are easy to get wrong:

  • triclinic periodic cells (PeriodicCell) with robust coordinate mapping
  • partially periodic orthorhombic cells (OrthorhombicCell) for slabs and wires
  • optional per-face periodic image shifts (adjacent_shift) for building periodic graphs
  • diagnostics and normalization utilities for reproducible topology work
  • convenience operations beyond full tessellation:
    • locate(...) (owner lookup for arbitrary query points)
    • ghost_cells(...) (probe cell at a query point without inserting it)
    • inverse fitting utilities for fitting power weights from desired pairwise plane locations

Documentation overview

The documentation is written as a short scientific tutorial: it starts with the geometric ideas, then explains domains and operations, and only then dives into implementation-oriented details.

Section What it contains
Concepts What Voronoi and power/Laguerre tessellations are, and what you can expect from them.
Domains Which containers exist (Box, OrthorhombicCell, PeriodicCell) and how to choose between them.
Operations How to compute tessellations, assign query points, and compute probe (ghost) cells.
Topology and graphs How to build a neighbor graph that respects periodic images, and how normalization helps.
Inverse fitting Fit power/Laguerre radii from desired pairwise plane positions (with optional constraints/penalties).
Visualization Optional py3Dmol helpers for debugging and exploratory analysis.
Examples (notebooks) End-to-end examples that combine the pieces above.
API reference The full reference (docstrings).

Installation

Most users should install a prebuilt wheel:

pip install pyvoro2

To build from source (requires a C++ compiler and Python development headers):

pip install -e .

Testing

pyvoro2 uses pytest. The default test suite is intended to be fast and deterministic:

pip install -e ".[test]"
pytest

Additional test groups are opt-in:

  • Fuzz/property tests (randomized):

    pytest -m fuzz --fuzz-n 100
    
  • Cross-check tests vs pyvoro (requires installing pyvoro first):

    pip install pyvoro
    pytest -m pyvoro --fuzz-n 100
    
  • Slow tests (if any are added in the future):

    pytest -m slow
    

Tip: you can combine markers, e.g. pytest -m "fuzz and pyvoro" --fuzz-n 100.

Project status

pyvoro2 is currently in beta.

The core tessellation modes (standard and power/Laguerre) are stable, and a large part of the work in this repository focuses on tests and documentation. A future 1.0 release is planned once the inverse-fitting workflow is more mature and native 2D support is added.

AI-assisted development

Some parts of the implementation, tests, and documentation were developed with AI assistance (OpenAI ChatGPT). The maintainer reviews and integrates changes, and remains responsible for the resulting code and scientific claims.

Details are documented in the AI usage page.

License

  • pyvoro2 is released under the MIT License.
  • Voro++ is vendored and redistributed under its original license (see the project pages).

This README is auto-generated from the MkDocs sources in docs/. To update it, edit the docs pages and re-run: python tools/gen_readme.py.

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

pyvoro2-0.4.2.tar.gz (573.0 kB view details)

Uploaded Source

Built Distributions

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

pyvoro2-0.4.2-cp313-cp313-win_amd64.whl (212.3 kB view details)

Uploaded CPython 3.13Windows x86-64

pyvoro2-0.4.2-cp313-cp313-win32.whl (194.0 kB view details)

Uploaded CPython 3.13Windows x86

pyvoro2-0.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (272.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pyvoro2-0.4.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (277.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

pyvoro2-0.4.2-cp313-cp313-macosx_11_0_arm64.whl (203.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyvoro2-0.4.2-cp312-cp312-win_amd64.whl (212.3 kB view details)

Uploaded CPython 3.12Windows x86-64

pyvoro2-0.4.2-cp312-cp312-win32.whl (193.9 kB view details)

Uploaded CPython 3.12Windows x86

pyvoro2-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (273.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pyvoro2-0.4.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (277.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

pyvoro2-0.4.2-cp312-cp312-macosx_11_0_arm64.whl (203.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyvoro2-0.4.2-cp311-cp311-win_amd64.whl (211.4 kB view details)

Uploaded CPython 3.11Windows x86-64

pyvoro2-0.4.2-cp311-cp311-win32.whl (193.3 kB view details)

Uploaded CPython 3.11Windows x86

pyvoro2-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (273.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pyvoro2-0.4.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (277.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

pyvoro2-0.4.2-cp311-cp311-macosx_11_0_arm64.whl (203.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pyvoro2-0.4.2-cp310-cp310-win_amd64.whl (210.7 kB view details)

Uploaded CPython 3.10Windows x86-64

pyvoro2-0.4.2-cp310-cp310-win32.whl (192.2 kB view details)

Uploaded CPython 3.10Windows x86

pyvoro2-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (270.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pyvoro2-0.4.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (276.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

pyvoro2-0.4.2-cp310-cp310-macosx_11_0_arm64.whl (202.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file pyvoro2-0.4.2.tar.gz.

File metadata

  • Download URL: pyvoro2-0.4.2.tar.gz
  • Upload date:
  • Size: 573.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2.tar.gz
Algorithm Hash digest
SHA256 94cb4220cac14eb277ad0d8fc006343498097d1deeb172e071e254e9bd43cee6
MD5 a6534ff3166657a9db08b27d235a30ca
BLAKE2b-256 e385c461147e624548a81a089653ab3204a855fe44980e6740c17dcfe2755dba

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyvoro2-0.4.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 212.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 bed05b37b1c9865ea78d40dd0f4885ac107657b95cff848b5ae34c16857fe8f0
MD5 48b9590ac949613726eeb1eeccaf61c6
BLAKE2b-256 ef8b46257ebdaa79c287e02b157fba685dde9ba46e6bbfeef9e02d76c9f3cd9e

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp313-cp313-win32.whl.

File metadata

  • Download URL: pyvoro2-0.4.2-cp313-cp313-win32.whl
  • Upload date:
  • Size: 194.0 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 67c27152c08feac89db31ee5933a336b84d64792b9239c3cdc5923839c7bc5eb
MD5 315a5b19b841b2531bad0373b8c614c1
BLAKE2b-256 51c089b3c54b461d032bd4a683afdfa5bdacf431500e3f605bdab88dada2065e

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8177910d73a20a3c1c5bc8fde972231cce01ca6dc56dcbe078d45cba28313c2d
MD5 930846fb3c634a43371f86b8d3758ea5
BLAKE2b-256 a0aad9db3b8c520371f8a13558fce2697f6f9a11bdff301c8307bc502e4198dd

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 787b0036d7d4e2df90158d6de38b1e4227d16da056207b13d6c3d8a0b9bcc366
MD5 80b62dc3fb29730854537c47a15d10d1
BLAKE2b-256 38fa995efb9ca564dcba7ee4abdc4e0773f5d7acc3b01d9b7bb7ae5153c514c0

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9796b8dc8c982e091c681060b109ea663a74f4bd0c3b96f29d129306fa4a7e1a
MD5 25c0fabbdbe1dc4307f9844a3ddb598e
BLAKE2b-256 fca26103bcd87c81dec262795c18a5ad9b64db56f9fd58d68ca2a0224c525056

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyvoro2-0.4.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 212.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 77f9a4931b27a68ecdc065f8ba41c90bd65036b900bf0bfd177e6ed6e2fe5a77
MD5 c5d3d022b8892b3cd833d9a364cac5d7
BLAKE2b-256 950b677000b98f690584a3e0b6ad1774414734e6f09fbdf7df4aba1c70136717

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp312-cp312-win32.whl.

File metadata

  • Download URL: pyvoro2-0.4.2-cp312-cp312-win32.whl
  • Upload date:
  • Size: 193.9 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 bd23cc5ef66f8ff6ed7cfa7f14658c6b12fd1a9d7b683e124554d0fe03fab7bc
MD5 9b3588c1ae89e5c2230b4a00717311e2
BLAKE2b-256 07557841dca60374c93dd9c3e7c0d210eb55b334f0fcd212260ae2c5ea4dafc9

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a4c23991a40ba8dedc5f491e8490f46dff54959c1f979743a8dc3209a3505e92
MD5 1a0afe96568ba945271f19f663c7212d
BLAKE2b-256 5730259f2855439fded1b43b07b734660b044abf6b5609976b8e45988b7034ae

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 84b0dc391bbe0184029fda3a90d817c48135f5bc7b3aeea9aeece3c9a17b5afe
MD5 ed14bca6b835d5d8c57feaef000a3ec8
BLAKE2b-256 e20e583a57ad5b729c9d6b28e3a7cdf430a3a20ba20a32c74f62014616c7766d

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b745ab53a22c4609cd9e35d804f5aa7c2f1db45fb59f09a92e85ff38fd9bf9c
MD5 4da832784d1847b841d13f79ddb558cc
BLAKE2b-256 6a90d7413de24dd863e39cf0ea21ff8df8282627f6793a69b6bb980ec4a61ce0

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyvoro2-0.4.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 211.4 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 58612f02f2405d81bbbf1b273165fec58bc320762731061b597c2fbdbd963d52
MD5 458292e5a241268e501d66fa729db7c7
BLAKE2b-256 893748d7c9dbe09d496f75efe31caf1463f7eb812b25e46d3d44d69ae2ebb323

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp311-cp311-win32.whl.

File metadata

  • Download URL: pyvoro2-0.4.2-cp311-cp311-win32.whl
  • Upload date:
  • Size: 193.3 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 4dd9710974a668a6894ab3bd74de50ee4324bf9ce71fcdba2fb705b8a09f3efa
MD5 1d7b631bcda8b7174462efb50913df38
BLAKE2b-256 efe2d7e252ac0e084b3310b4a4936543c00e517f6e8aecd69e525e079a230c50

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 79ab1be111c34b325fbcaad380ccb44cf8f442766165f0d4d9ad731daf006725
MD5 9ab5e99dfbe95b6bdaee28e4686c3b8e
BLAKE2b-256 a58cf4a39dafb2b0da62cc103cc18ddd4491cbd057bee12a44f68509ed2094e9

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 08e36e3f5fdc0573a5f7427b3f0981dd4d5cf04a86015c232725dcf1ffda9b27
MD5 8897d3989d6425c28ae94c81d76ca58a
BLAKE2b-256 7e499341d5b26c10027a8a0230ca81544fbaf71c2b4921c6d4e27a1837bb59b5

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 94b628d8e79ebe2ce1b9f3a2afc5b8243aceb3f20bf087ba15693776bb2b6f97
MD5 2fed60dd12ae6b8dd4c2fb99bddce2f9
BLAKE2b-256 11528806286cd8aaee1e51408df41b4423a5a678c05260a36d40ee3b8401d3b4

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pyvoro2-0.4.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 210.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 faf037c13f2c5de630aafff1b3fd107a943426659e9c5f57fa54347b8fbadcb1
MD5 3919d7d036ab69babd3a8cf2cf0973b8
BLAKE2b-256 38969378f1b482b203188a6a4b00b7070d0362939fa89e894419f7dd7deac6ce

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp310-cp310-win32.whl.

File metadata

  • Download URL: pyvoro2-0.4.2-cp310-cp310-win32.whl
  • Upload date:
  • Size: 192.2 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for pyvoro2-0.4.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 02916a3be7140cbe302ea59dad9baaa97697eca7df94c5b2509a9c942834e053
MD5 9229003ed58b17050ba609cb0ec73319
BLAKE2b-256 b052766b268cff31227afdfde5809120551bd8fe8158b66e55d9bcdc137e20e0

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 909839bf02939dc0052731ab75029a87e1d99c6573d5fa920ca3679961d0fee1
MD5 292cfe8a5b2502eab1d495fa4bad4fbc
BLAKE2b-256 ea132b49a536f472ede11e833b414e72c825dcc814cb58cb34040b78d84159ae

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 02693e3f37f1dd971457b58a17bb91df76d85026f8290af607daae1cb8fff286
MD5 4e44aba19684342a346b180a6dd1b4e9
BLAKE2b-256 584741a8f65a78d68a52daea86a799e2d82bc48e849ac2b284c58cb2727e92ba

See more details on using hashes here.

File details

Details for the file pyvoro2-0.4.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyvoro2-0.4.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2e4dc3ad3cb34cd4f956c12cbd4ecc699079b2152e4e4c069834321fc32a85a0
MD5 28f0451787280c99540c6596139df322
BLAKE2b-256 118181925e3ba438866359e2398a8e52eeabcb20c38cbd988a658eabac33f23b

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