Skip to main content

Fast histogramming in Python built on pybind11 and OpenMP.

Project description

pygram11

Documentation Status Actions Status PyPI version Conda Forge Python Version

Simple and fast histogramming in Python accelerated with OpenMP with help from pybind11.

pygram11 provides functions for very fast histogram calculations (and the variance in each bin) in one and two dimensions. The API is very simple; documentation can be found here (you'll also find some benchmarks there).

Installing

From PyPI

Binary wheels are provided for Linux and macOS. They can be installed from PyPI via pip:

pip install pygram11

From conda-forge

For installation via the conda package manager pygram11 is part of conda-forge.

conda install pygram11 -c conda-forge

Please note that on macOS the OpenMP libraries from LLVM (libomp) and Intel (libiomp) may clash if your conda environment includes the Intel Math Kernel Library (MKL) package distributed by Anaconda. You may need to install the nomkl package to prevent the clash (Intel MKL accelerates many linear algebra operations, but does not impact pygram11):

conda install nomkl ## sometimes necessary fix (macOS only)

From Source

You need is a C++14 compiler and OpenMP. If you are using a relatively modern GCC release on Linux then you probably don't have to worry about the OpenMP dependency. If you are on macOS, you can install libomp from Homebrew (pygram11 does compile on Apple Silicon devices with Python version >= 3.9 and libomp installed from Homebrew). With those dependencies met, simply run:

git clone https://github.com/douglasdavis/pygram11.git --recurse-submodules
cd pygram11
pip install .

Or let pip handle the cloning procedure:

pip install git+https://github.com/douglasdavis/pygram11.git@main

Tests are run on Python versions >= 3.7 and binary wheels are provided for those versions.

In Action

A histogram (with fixed bin width) of weighted data in one dimension:

>>> rng = np.random.default_rng(123)
>>> x = rng.standard_normal(10000)
>>> w = rng.uniform(0.8, 1.2, x.shape[0])
>>> h, err = pygram11.histogram(x, bins=40, range=(-4, 4), weights=w)

A histogram with fixed bin width which saves the under and overflow in the first and last bins:

>>> x = rng.standard_normal(1000000)
>>> h, __ = pygram11.histogram(x, bins=20, range=(-3, 3), flow=True)

where we've used __ to catch the None returned when weights are absent. A histogram in two dimensions with variable width bins:

>>> x = rng.standard_normal(1000)
>>> y = rng.standard_normal(1000)
>>> xbins = [-2.0, -1.0, -0.5, 1.5, 2.0, 3.1]
>>> ybins = [-3.0, -1.5, -0.1, 0.8, 2.0, 2.8]
>>> h, err = pygram11.histogram2d(x, y, bins=[xbins, ybins])

Manually controlling OpenMP acceleration with context managers:

>>> with pygram11.omp_disabled():  # disable all thresholds.
...     result, _ = pygram11.histogram(x, bins=10, range=(-3, 3))
...
>>> with pygram11.omp_forced(key="thresholds.var1d"):  # force a single threshold.
...     result, _ = pygram11.histogram(x, bins=[-3, -2, 0, 2, 3])
...

Histogramming multiple weight variations for the same data, then putting the result in a DataFrame (the input pandas DataFrame will be interpreted as a NumPy array):

>>> N = 10000
>>> weights = pd.DataFrame({"weight_a": np.abs(rng.standard_normal(N)),
...                         "weight_b": rng.uniform(0.5, 0.8, N),
...                         "weight_c": rng.uniform(0.0, 1.0, N)})
>>> data = rng.standard_normal(N)
>>> count, err = pygram11.histogram(data, bins=20, range=(-3, 3), weights=weights, flow=True)
>>> count_df = pd.DataFrame(count, columns=weights.columns)
>>> err_df = pd.DataFrame(err, columns=weights.columns)

I also wrote a blog post with some simple examples.

Other Libraries

  • boost-histogram provides Pythonic object oriented histograms.
  • Simple and fast histogramming in Python using the NumPy C API: fast-histogram (no variance or overflow support).
  • To calculate histograms in Python on a GPU, see cupy.histogram.

If there is something you'd like to see in pygram11, please open an issue or pull request.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pygram11-0.13.1.tar.gz (495.0 kB view details)

Uploaded Source

Built Distributions

pygram11-0.13.1-cp311-cp311-win_amd64.whl (693.0 kB view details)

Uploaded CPython 3.11 Windows x86-64

pygram11-0.13.1-cp311-cp311-win32.whl (561.9 kB view details)

Uploaded CPython 3.11 Windows x86

pygram11-0.13.1-cp311-cp311-musllinux_1_1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pygram11-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (718.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pygram11-0.13.1-cp311-cp311-macosx_12_0_arm64.whl (898.1 kB view details)

Uploaded CPython 3.11 macOS 12.0+ ARM64

pygram11-0.13.1-cp311-cp311-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

pygram11-0.13.1-cp310-cp310-win_amd64.whl (692.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

pygram11-0.13.1-cp310-cp310-win32.whl (561.9 kB view details)

Uploaded CPython 3.10 Windows x86

pygram11-0.13.1-cp310-cp310-musllinux_1_1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pygram11-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (718.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pygram11-0.13.1-cp310-cp310-macosx_12_0_arm64.whl (898.0 kB view details)

Uploaded CPython 3.10 macOS 12.0+ ARM64

pygram11-0.13.1-cp310-cp310-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pygram11-0.13.1-cp39-cp39-win_amd64.whl (680.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

pygram11-0.13.1-cp39-cp39-win32.whl (559.4 kB view details)

Uploaded CPython 3.9 Windows x86

pygram11-0.13.1-cp39-cp39-musllinux_1_1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pygram11-0.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (719.8 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pygram11-0.13.1-cp39-cp39-macosx_12_0_arm64.whl (898.1 kB view details)

Uploaded CPython 3.9 macOS 12.0+ ARM64

pygram11-0.13.1-cp39-cp39-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pygram11-0.13.1-cp38-cp38-win_amd64.whl (692.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

pygram11-0.13.1-cp38-cp38-win32.whl (561.9 kB view details)

Uploaded CPython 3.8 Windows x86

pygram11-0.13.1-cp38-cp38-musllinux_1_1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pygram11-0.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (719.7 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pygram11-0.13.1-cp38-cp38-macosx_12_0_arm64.whl (898.1 kB view details)

Uploaded CPython 3.8 macOS 12.0+ ARM64

pygram11-0.13.1-cp38-cp38-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

File details

Details for the file pygram11-0.13.1.tar.gz.

File metadata

  • Download URL: pygram11-0.13.1.tar.gz
  • Upload date:
  • Size: 495.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for pygram11-0.13.1.tar.gz
Algorithm Hash digest
SHA256 e89b1e82c133fd0212956ca1d5e3c129e702a8b03a6133475a50c13ab15bb4e5
MD5 653bdfa8d3961a5f52294ec199495ce2
BLAKE2b-256 41da19a3d66c65720d4ea1dde66b1bdbc0c153dfb7dff2a3313a74440655d97d

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 46129d696d8911b565be720ff253a1e78ba57d2ad9f475921c436623b76bf126
MD5 713bfe88790afef9fc58b65062aaadc9
BLAKE2b-256 65f5cb41652234231a0315a581625483d4192cf6702bf3ec04adb24bf9b710d8

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp311-cp311-win32.whl.

File metadata

  • Download URL: pygram11-0.13.1-cp311-cp311-win32.whl
  • Upload date:
  • Size: 561.9 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for pygram11-0.13.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 923594f1c4e115020c25c050e8980ea952c7dce1bf4176d8392eec690b1a3e01
MD5 9eb6ad029dcf4d24beeb2a4b7b072f81
BLAKE2b-256 9427feeea5ebbd66d51baf5cb4117d5a7c88e18aea8e9b700150a5d38691d57f

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 b43531877a5d846085a2cc67fcaf6ab079601cf6610aef4bafe5d62b85d46b65
MD5 14a23bc66bbf83ea280523c07ee806ed
BLAKE2b-256 ac51d708aec4b1054b7cf1143575bbdd655d719d4b2a9648eae3ece5dc6c2a23

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3f3abf2057c4b0b8cf8a0e09c67dfc0994b7a271e3ecb34747c63ed6f0225760
MD5 75478cf26b6afd67a9c712a9e3756d45
BLAKE2b-256 4ed5d0a658b3cf733bacd5a8582d80ee9375a8194a592d5c37d1816d5dcd8659

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp311-cp311-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp311-cp311-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 1ec276c27eb76331183e316db2be341f8eea53848895a1eb3b96cfba4535e876
MD5 e0a5494cdd567daef1e1d26760bca803
BLAKE2b-256 372ddc4bd7217ca60af443041abb7a00a1e7bc0f0aa4d482794cebd1dba408bd

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3f24ebd75dce55eda3741b142093da9f8305d847be6c4b5fda2a45927e833bb6
MD5 d620c2e1b7f0345a1c9648db165497be
BLAKE2b-256 400eb89547cd6110f09d799601dc9e2fe5939cd85983870e5484e8a00139d01c

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 214231283e756201155d067aee9b59f5c00e0b2caf532f6be38c11b1c62fa12b
MD5 e8c5d0e1709f497df043b436ea2af907
BLAKE2b-256 d23222ad054ba12b1e7c0a2ef359cbafc602ba490c006f6367750ae9a75cda11

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp310-cp310-win32.whl.

File metadata

  • Download URL: pygram11-0.13.1-cp310-cp310-win32.whl
  • Upload date:
  • Size: 561.9 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for pygram11-0.13.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 e8fb163c90d81bd7cfdc64daf2daef2e72f4cf3c8ff58b9a9594033736fa3619
MD5 d3f8d923d298900b9bf1193095debad0
BLAKE2b-256 55f363bd2c2228e54df0e08c03111bf87bd50825d65a6fa674fd98216a542cc5

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8a904e2f018d65919246c1b1cfb076e8e28cef732d2ca0315ba8029c36f6bba2
MD5 50afdb1dd9babd74f02fd19213a6912e
BLAKE2b-256 2979bc60507d027d530b03b1b2f78355ddaf44760282bd9897f523cb505b4c1f

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 50ac49c0a3a49ca97554d2645345042b52332eab24128b7ec7205a8fa2261f80
MD5 a72a0de7462145d4f1f62981f811b05f
BLAKE2b-256 cc905adf080722f99411d283e28d6893930b61cd401f4d2e595b401025144435

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp310-cp310-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp310-cp310-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 5f190e8d1d744ed6eab79d7488c8cccff5db0539f4a1b7dac14adbd5845f2ebd
MD5 40aa846b5437013966f1dec4e65afaea
BLAKE2b-256 76934bf00d69f05381e779c3d7556f21bc168ece43a8278689ed4ce4c9dbe0e6

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 426d9e3f294a2d97aa111d2ce48eb75b5ddd21c81f8d43b79f89e05ddb49e455
MD5 f171cd9a154e74dc14635a2b386e0499
BLAKE2b-256 c83caa37563f138acfae6042e058e307c72c383655e674c48a063dfe5d7171dc

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pygram11-0.13.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 680.0 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for pygram11-0.13.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 688f2ebaa5a1f993acc80e1a8648d9a3680afb528b8a2a685cf82c1c76f499ce
MD5 a44662081b84ba88aaf1ecf6b8c18dd5
BLAKE2b-256 799e43f917587844868daf4a7553b884b6ec0ef5546545bab969f88f42e47018

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp39-cp39-win32.whl.

File metadata

  • Download URL: pygram11-0.13.1-cp39-cp39-win32.whl
  • Upload date:
  • Size: 559.4 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for pygram11-0.13.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 3199695a63113f6c760ac9eb3be88551d3977f27e5dfb2be521323984bbbec37
MD5 00eba4cf16d316e8074e99a933ccf43b
BLAKE2b-256 8e6c04b948f5d52a3bf672aff2a8a7713197fa748912cda280fda52f5d3ca2cc

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 eaf7489dc36f6e497ad9895e7152fdb9328a69b54f4c8b32e4ee6326601c92f4
MD5 9ca4d3ebe6de29bbb0323732e30d4c98
BLAKE2b-256 95df15aa43e2c27975713dfa3386f2e4da0063ccebd66d53b2a5b5bfa03c38f7

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a7897564b2f50500fad9a4c14a46bc9cc49715c0bb9b53794e5bac02fc8bdda8
MD5 245dd45eed7cc9350fcaef6cb6923ff4
BLAKE2b-256 32304cc07a802a30ff50c72551a271d03827012c16a766d7fb1671fac64f2734

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp39-cp39-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp39-cp39-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 a5831d818602fc45d2e827549ced4f7484846161238b1756019a1e7fbbec0990
MD5 d162a2ec5d7f6c2fc824b2b2fe05152a
BLAKE2b-256 7c5b935cfe425c754ddebb27c8ad5a10a750e20ede8bbb055e5a0620a66033b6

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 874022b2b20b369bda17bee7e11be9ba11c21a3c27308c1af023e95d91291e02
MD5 52b8296dd9b82f07fc99b10cf767ca96
BLAKE2b-256 4376e5bc9a098510f2d532355fbde84070ae16e73a18138a988a4ab477cf0abf

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pygram11-0.13.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 692.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for pygram11-0.13.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 3394e4f4f9552fb1b916842db7539b08c6c29892861aa1a95d75c1dac97201a6
MD5 875138afc745236165712bdd35be6d46
BLAKE2b-256 68f4db7da2feeecddc40fd69537a87d9e1d184606ec99df23ee26077ce51f742

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp38-cp38-win32.whl.

File metadata

  • Download URL: pygram11-0.13.1-cp38-cp38-win32.whl
  • Upload date:
  • Size: 561.9 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for pygram11-0.13.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 055d8ecd9f16ba75583e70a6ed58325cc0d64b03c505f1a1f611b5999ac3ae6a
MD5 2ced25fb5bc05bdf02c2f4fcc4e92000
BLAKE2b-256 4f2d5487c0c9b7c14068a9209ff3d7dbd8c9365aa38be33dfd179abe03fd8a9e

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 549953716189ba7cc5446e75915fa4f0d678b02c9090c32066a910fbaa968bc9
MD5 53a5f4c81e32bfbd97665fdfb7edb89d
BLAKE2b-256 114aebede73b4b4787bcd903ca721a2b1ded2b463eb6526243d025aa5842720c

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a1fa0f839fc5ae328c47d845670601d294546b2fe17fd9543343728b33997ba5
MD5 14d99a116777b3fdeb8830403a5e5770
BLAKE2b-256 a02a4e013c30ad97466e063f9676f0f23dc8a1786d8bbb50b9388bb2c83166dd

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp38-cp38-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp38-cp38-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 ba64f08dc0589143584c7370a0c0727836e852ece6581d6b51c1bf5496054c26
MD5 2cf480cfd6d832282a3b331917f96955
BLAKE2b-256 7c9d39318673091555a96648beee8bceaee1b815449dc13d4d5a4191be459f3f

See more details on using hashes here.

File details

Details for the file pygram11-0.13.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pygram11-0.13.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8b3e171aceee1c89fb10d9fd7d8d26b1be7574d9279499b5cea7f12166c036e1
MD5 b00a0859f239df7c630a8d95dc7cd845
BLAKE2b-256 00ada0aee15b442bddbaddf25fa854d13a029af8758a7fed155b00c503750060

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