Skip to main content

Python wrapper for CHarm, a C library to work with spherical harmonics up to almost arbitrarily high degrees

Project description

CHarm is a C library to work with spherical harmonics up to almost arbitrarily high degrees. The library is accompanied by a Python wrapper called PyHarm.

Features

  • Supports real-valued fully-normalized surface and solid spherical harmonics (the geodetic norm).

  • Performs FFT-based surface spherical harmonic analysis and solid spherical harmonic synthesis with minimized memory requirements.

  • Stable up to high degrees and orders (tens of thousands and beyond).

  • Available in single, double and quadruple precision.

  • Supports point and mean data values (both analysis and synthesis).

  • Supports synthesis at grids and at scattered points/cells. Grid-wise computations are done by FFT whenever possible. If FFT cannot be applied, the less efficient Chebyshev recurrences are used along the latitude parallels instead.

  • Computes the full first- and second-order gradients at evaluation points (e.g., the gravitational vector and the gravitational tensor).

  • Supports the Gauss–Legendre and Driscoll–Healy quadratures.

  • Implements spectral gravity forward modelling of band-limited topographic masses with an arbitrary integration radius and 3D density. [1]

  • Evaluates integrals of solid spherical harmonic expansions (e.g., of the gravitational potential) on band-limited irregular surfaces (e.g., on the Earth’s surface). [1]

  • Computes Fourier coefficients of fully-normalized associated Legendre functions of the first kind up to ultra-high harmonic degrees.

  • Supports SIMD parallelization on the level of a single CPU core (SSE4.1, AVX, AVX2, AVX-512 and NEON).

  • Supports OpenMP parallelization for shared-memory architectures.

  • Supports MPI parallelization for shared- and distributed-memory architectures.

  • Performs discrete FFT by FFTW.

  • For spectral gravity forward modelling with spatially limited integration radius, MPFR is used to enable arbitrary precision arithmetic on floating point numbers.

  • Ships with a Python wrapper to enable high-level programming while retaining the efficiency of the C language. The wrapper, called PyHarm, wraps CHarm using ctypes and is fully integrated with numpy.

Installation

  • PyHarm (Python wrapper): On Linux (x86_64), macOS (x86_64, ARM64) and Windows (x86_64), install PyHarm using pip:

    pip install pyharm

    This will install PyHarm together will all the dependencies. These include a pre-compiled CHarm library, which is internally called by PyHarm, some other C libraries (FFTW and OpenMP library) and the Python package NumPy.

  • CHarm (C library): If you are interested in the C API, you have to build CHarm from source. This step is not required if you plan to use the Python interface only.

Further installation details at https://www.charmlib.org/build/html/install.html.

Installation

  • PyHarm (Python wrapper): On Linux (x86_64), macOS (x86_64, ARM64) and Windows (x86_64), install PyHarm using pip:

    pip install pyharm

    This will install PyHarm together will all the dependencies. These include a pre-compiled CHarm library, which is internally called by PyHarm, some other C libraries (FFTW, MPFR, GMP and OpenMP libraries) and the Python package NumPy.

  • CHarm (C library): If you are interested in the C API, you have to build CHarm from source. This step is not required if you plan to use the Python interface only.

Further installation details at https://www.charmlib.org/build/html/install.html.

Source code

GitHub: https://github.com/blazej-bucha/charm

Documentation

The documentation of the latest version from the master branch is available at https://www.charmlib.org.

A pre-compiled HTML documentation is also available in docs/build/html. Alternatively, it can be built by executing make html after the configure call (requires --enable-python, --enable-mpi, --enable-mpfr, doxygen and Python modules sphinx, sphinx_book_theme and breathe). Other formats of the documentation, for instance, a PDF file, can be built with cd docs && make latexpdf, etc. To list all available formats, execute cd docs && make help.

Contact

Should you have any comments, questions, bug report or criticism, please feel free to contact the author, Blažej Bucha, at blazej.bucha@stuba.sk. Further products developed by the author can be found at https://www.blazejbucha.com.

Pronunciation

We prefer to pronounce CHarm and PyHarm like the words see harm and pie harm. But it is indeed quite charming to pronounce CHarm like the word charm, especially when the library works like a charm.

Other spherical-harmonic-based libraries

Many other libraries for working with spherical harmonics are available, each having its pros and cons. Explore! A few examples are:

  • SHTOOLS: Fortran95 library with Python API,

  • SHTns: a C library for spherical harmonic transforms,

  • ISPACK: a Fortran library for spherical harmonic transforms,

  • Libsharp: a C99 library for spherical harmonic transforms,

  • healpy: a Python package to handle pixelated data on the sphere building on the HEALPix C++ library,

  • HARMONIC_SYNTH: a Fortran code for spherical harmonic synthesis written by the EGM2008 development team.

  • SPHEREPACK: a Fortran library of spherical harmonic transforms,

  • SHAVEL: a program for the spherical harmonic analysis of a horizontal vector field sampled in an equiangular grid on a sphere

  • ICGEM: Online calculation service for working with Earth and celestial gravitational models,

  • FaVeST: Fast Vector Spherical Harmonic Transforms in MATLAB.

  • SHBundle: Spherical harmonic analysis and synthesis in MATLAB up to high degrees and orders,

  • Spherical Harmonics Manipulator: Spherical harmonic synthesis in sparse points and grids (no longer maintained),

  • GrafLab and isGrafLab: MATLAB-based software packages for spherical harmonic synthesis of gravity field functionals up to high degrees and orders (tens of thousands and well beyond).

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

pyharm-0.4.6-pp310-pypy310_pp73-win_amd64.whl (1.5 MB view details)

Uploaded PyPyWindows x86-64

pyharm-0.4.6-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

pyharm-0.4.6-pp310-pypy310_pp73-macosx_11_0_x86_64.whl (2.1 MB view details)

Uploaded PyPymacOS 11.0+ x86-64

pyharm-0.4.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded PyPymacOS 11.0+ ARM64

pyharm-0.4.6-cp313-cp313-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.13Windows x86-64

pyharm-0.4.6-cp313-cp313-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyharm-0.4.6-cp313-cp313-manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

pyharm-0.4.6-cp313-cp313-macosx_11_0_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

pyharm-0.4.6-cp313-cp313-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyharm-0.4.6-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12Windows x86-64

pyharm-0.4.6-cp312-cp312-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyharm-0.4.6-cp312-cp312-manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

pyharm-0.4.6-cp312-cp312-macosx_11_0_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

pyharm-0.4.6-cp312-cp312-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyharm-0.4.6-cp311-cp311-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.11Windows x86-64

pyharm-0.4.6-cp311-cp311-musllinux_1_2_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyharm-0.4.6-cp311-cp311-manylinux_2_28_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

pyharm-0.4.6-cp311-cp311-macosx_11_0_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

pyharm-0.4.6-cp311-cp311-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pyharm-0.4.6-cp310-cp310-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10Windows x86-64

pyharm-0.4.6-cp310-cp310-musllinux_1_2_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pyharm-0.4.6-cp310-cp310-manylinux_2_28_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

pyharm-0.4.6-cp310-cp310-macosx_11_0_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

pyharm-0.4.6-cp310-cp310-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file pyharm-0.4.6-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 c3b114fe0f1bdefc9b3b9760c9328edfc71ea03646b045eb47b2300a1548c8e0
MD5 f8e3b5d5618d3a90484e7f3b7eb2fecc
BLAKE2b-256 f20106ecef7ebbfa04f4e874ae8f14ea7af0ae5092167a35ea1a9ff3181963a1

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d5b620bbab8a048aff3b43f59f7628ff0a23a989c19c351bc106742c49af0002
MD5 e157af816ded4ff96ba91bb49dc7c8b5
BLAKE2b-256 c58adf5290ff77485c310da241237ccaa4f5e9b213221baf7e70a8c6e0a53800

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-pp310-pypy310_pp73-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-pp310-pypy310_pp73-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f9d09b6f0927b0106f17d5031c1bea6598e01f2d9cb7b2baabaea38781974e5e
MD5 bfd699bdfe8353a245b7746aad8565ba
BLAKE2b-256 746746fea0bc66fb66c7fc00d7515a2914e10849065da1e877301ced9f83c854

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0e7ed88a11d3db60ffd05d2ff204f403f6a55e094eb62b8d931e4661e8515a11
MD5 8929fdfe32af19e3d9713b9cbf0b9f5b
BLAKE2b-256 04e01f309c1831381593312c9648ca23df735f9798ce64d13a50cebd2448edf3

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyharm-0.4.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.2

File hashes

Hashes for pyharm-0.4.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9ec376875ff526f62529bac98a72ee895341a8610b87dce9614e82cc111194c6
MD5 b77af101e258788d5adaeb3980f1377c
BLAKE2b-256 e76c575a3df00d5d41219dcd83577e718e00f456bd8f736fd562c4e43950eaf5

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 174d2bf8912a2506cd0a0d143397a086a81425f8a0354842d7b9e1f680b88831
MD5 36122002a8e735c27428bc168dde1583
BLAKE2b-256 2083ad579b18ac4fe8d5654e7980a90e3db585e7363c5a27c209e6da38cc708a

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6e7c5e5617c12af6c93921a6055475bfc000693050b31d1d334a03784e1212f0
MD5 95a2e527948a1cae28b03a722a3632ac
BLAKE2b-256 f1fccc8a8739510294205ddd61dc31d0086ec96182c41c7831bb0f51664d3aba

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 c2e8134d89798d16eff886dcc7f20cdae4ded18354ba85d8405e92849668baeb
MD5 16171cdfe23e1cfe535e0fa699a3db4a
BLAKE2b-256 eeec95effdcb329dbacbcbb8143144290007249bea9f88991706df11c58736d9

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6428e91bc4a5e320edc0637dc3a88a48a334b07a8950668d2fc8a29d08388062
MD5 47091ff6310476ee17f7130bdc97cb99
BLAKE2b-256 e63012ad3096da408cd2b7ad00d2124899ecdf3ec7f6e10ef3528e406e74cdac

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyharm-0.4.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.2

File hashes

Hashes for pyharm-0.4.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e79d1b1c7d54bbf6c25e81b16f11c013d86b3e806f66f5a9ca0ccaad5aa1ced0
MD5 df4413e61346a5ed6dd0449d04b82fa6
BLAKE2b-256 3b0438d7e55e9d5678fdee274ffb0686436bf0de489525d5e3bd7a898d23fdf4

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 12a3c4131d7af0ceca14d793a69f933dca367ed42f53e27c12ebbc71ea83adac
MD5 ca6d81640161d35e0babbe6cc0e73ef0
BLAKE2b-256 ef48d2f19ffbb3f8dc633bace73c96539ea82d71f895b694716a8980e3fb8158

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7f8fd76fea85540fcae8469f674a90d1427ec41d7cf12624cfe9815883c5a9d5
MD5 a3f2738350eb264ee3ecbe95423fcccf
BLAKE2b-256 aed41a1f49763405f1633c3b1e4996999269efefec1d6f22aacd881b1106d26b

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 fbaf91c9b9276ffc0c5b48cdafff00c17610ebec7332883faa7831955abd41ae
MD5 f14cdc37668462c87ccbe4effe15b1b6
BLAKE2b-256 cac9efacc5913b027a4bebd4bdb5dbe426d4d74da4fb1b3b8981987cb3bc5049

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72f022fa9466daa2e14152ee4f5eee223bc13c610b9f5cc335a794085e474906
MD5 c7354405a298d26679167dceb5cf75c7
BLAKE2b-256 fcaa2bdd3dad4eabe2c08bcdb828520836d00b92e721a6285b18caa078170975

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyharm-0.4.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.2

File hashes

Hashes for pyharm-0.4.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9696da7a75304338dfdbf86a09b3acd16c16613164573f9ce1dcdc63b334850e
MD5 ea73e71c3f6bc7b6583aee57ff68ca60
BLAKE2b-256 aac16783bcd3ef87044f02959319c56ad7898b79a51a640d2096cd6c6ad1060e

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 334521215b6e40231d4d87cf521fde87b9c7e7837086942530a3d669fcea2444
MD5 03049dc8e504091c9343d864ef046fa6
BLAKE2b-256 03709afe2ad821c5ee91a050fc5505fed398d86bee5fdca8d03b85c0014fb68a

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5d7c09f167645a8c7571be01bcf49a34b71ace1df2c185aa8d60dad7177a3542
MD5 cb85266989eca8a4397eecf0a0c52747
BLAKE2b-256 2247e3be330e04d166188f21c5329e275e414f5b2646fbf77d2f7038942cc1de

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 49b23c1181980c6016c7a70904e60357362c1140154371cc37252a141c39438f
MD5 27f02637cf3a9b29ae4373aff45c90fe
BLAKE2b-256 90c1a95f098c596104bed2feed317801becebb17f75a1002db78bced557e7a09

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 831a6e443c3a1507bc36293efaf7b80ade59aa3bd02198461f3676d8d039babf
MD5 1b1a2526eabdf8c66a55a57ff1cd03a0
BLAKE2b-256 1dfb06e473760045b2d05f1fda1580934a9c08a985b3a5181a7a6d602a7696e3

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pyharm-0.4.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.2

File hashes

Hashes for pyharm-0.4.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0615b347bf7b584fd59f845d6db6572ebe237e2afe5aef8ede8286e503265ad0
MD5 f5cff2c16d1a849dfe3330088fad9634
BLAKE2b-256 5692304d8139601b1e71709bbab6d152ce537703869b83949dca77a5efefa766

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 871241b0e5b930128860de5249bb4d554434fbf6a0f96c8fb59ec85aa65b148b
MD5 735d0c7ad5fa3423496dfb3c0e7a4903
BLAKE2b-256 dc11e4dc42ee62bdd91a90302096d3a9ffc2e5d60bde0cdfed8fe4f0b322f5b8

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cb5da40c5fe7cff0d984899fd388e2abcea2478ea299e622dd80db74c763cf25
MD5 382e101de437e3dc156763df2d540557
BLAKE2b-256 16eedfcaa6d54c981eea67815b1daf2dacc8996d319b6d24715ce5103f4ac03a

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f7d72865d45d60d032695bb6eace13b7f69817023e282e52678496cf0eed1d78
MD5 c8fcb41b1678138895b78ca4e77e85ba
BLAKE2b-256 bbb24077dfb465107e5b1e22fe1ee4dbd3bd42bdb9e60aefaabe0704939678c0

See more details on using hashes here.

File details

Details for the file pyharm-0.4.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyharm-0.4.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5cd7e6a29588b76e20c4e3306d62119a624fef2223a0861b3fe8ad33f1fb23d
MD5 fb7415ca339bda21f50873c014a439d5
BLAKE2b-256 3703f9c816c19e59eae7a55fcdaacac614654949ea3b5765c1ba95cfa1be42cb

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