Skip to main content

A refreshing functional take on deep learning, compatible with your favorite libraries

Project description

Thinc: A refreshing functional take on deep learning, compatible with your favorite libraries

From the makers of spaCy, Prodigy and FastAPI

Thinc is a lightweight deep learning library that offers an elegant, type-checked, functional-programming API for composing models, with support for layers defined in other frameworks such as PyTorch, TensorFlow and MXNet. You can use Thinc as an interface layer, a standalone toolkit or a flexible way to develop new models. Previous versions of Thinc have been running quietly in production in thousands of companies, via both spaCy and Prodigy. We wrote the new version to let users compose, configure and deploy custom models built with their favorite framework.

Azure Pipelines Current Release Version PyPi Version conda Version Python wheels Code style: black Open demo in Colab

🔥 Features

  • Type-check your model definitions with custom types and mypy plugin.
  • Wrap PyTorch, TensorFlow and MXNet models for use in your network.
  • Concise functional-programming approach to model definition, using composition rather than inheritance.
  • Optional custom infix notation via operator overloading.
  • Integrated config system to describe trees of objects and hyperparameters.
  • Choice of extensible backends.
  • Read more →

🚀 Quickstart

Thinc is compatible with Python 3.6+ and runs on Linux, macOS and Windows. The latest releases with binary wheels are available from pip. Before you install Thinc and its dependencies, make sure that your pip, setuptools and wheel are up to date. For the most recent releases, pip 19.3 or newer is recommended.

pip install -U pip setuptools wheel
pip install thinc

See the extended installation docs for details on optional dependencies for different backends and GPU. You might also want to set up static type checking to take advantage of Thinc's type system.

⚠️ If you have installed PyTorch and you are using Python 3.7+, uninstall the package dataclasses with pip uninstall dataclasses, since it may have been installed by PyTorch and is incompatible with Python 3.7+.

📓 Selected examples and notebooks

Also see the /examples directory and usage documentation for more examples. Most examples are Jupyter notebooks – to launch them on Google Colab (with GPU support!) click on the button next to the notebook name.

Notebook Description
intro_to_thinc
Open in Colab
Everything you need to know to get started. Composing and training a model on the MNIST data, using config files, registering custom functions and wrapping PyTorch, TensorFlow and MXNet models.
transformers_tagger_bert
Open in Colab
How to use Thinc, transformers and PyTorch to train a part-of-speech tagger. From model definition and config to the training loop.
pos_tagger_basic_cnn
Open in Colab
Implementing and training a basic CNN for part-of-speech tagging model without external dependencies and using different levels of Thinc's config system.
parallel_training_ray
Open in Colab
How to set up synchronous and asynchronous parameter server training with Thinc and Ray.

View more →

📖 Documentation & usage guides

Documentation Description
Introduction Everything you need to know.
Concept & Design Thinc's conceptual model and how it works.
Defining and using models How to compose models and update state.
Configuration system Thinc's config system and function registry.
Integrating PyTorch, TensorFlow & MXNet Interoperability with machine learning frameworks
Layers API Weights layers, transforms, combinators and wrappers.
Type Checking Type-check your model definitions and more.

🗺 What's where

Module Description
thinc.api User-facing API. All classes and functions should be imported from here.
thinc.types Custom types and dataclasses.
thinc.model The Model class. All Thinc models are an instance (not a subclass) of Model.
thinc.layers The layers. Each layer is implemented in its own module.
thinc.shims Interface for external models implemented in PyTorch, TensorFlow etc.
thinc.loss Functions to calculate losses.
thinc.optimizers Functions to create optimizers. Currently supports "vanilla" SGD, Adam and RAdam.
thinc.schedules Generators for different rates, schedules, decays or series.
thinc.backends Backends for numpy and cupy.
thinc.config Config parsing and validation and function registry system.
thinc.util Utilities and helper functions.

🐍 Development notes

Thinc uses black for auto-formatting, flake8 for linting and mypy for type checking. All code is written compatible with Python 3.6+, with type hints wherever possible. See the type reference for more details on Thinc's custom types.

👷‍♀️ Building Thinc from source

Building Thinc from source requires the full dependencies listed in requirements.txt to be installed. You'll also need a compiler to build the C extensions.

git clone https://github.com/explosion/thinc
cd thinc
python -m venv .env
source .env/bin/activate
pip install -U pip setuptools wheel
pip install -r requirements.txt
pip install --no-build-isolation .

Alternatively, install in editable mode:

pip install -r requirements.txt
pip install --no-build-isolation --editable .

Or by setting PYTHONPATH:

export PYTHONPATH=`pwd`
pip install -r requirements.txt
python setup.py build_ext --inplace

🚦 Running tests

Thinc comes with an extensive test suite. The following should all pass and not report any warnings or errors:

python -m pytest thinc    # test suite
python -m mypy thinc      # type checks
python -m flake8 thinc    # linting

To view test coverage, you can run python -m pytest thinc --cov=thinc. We aim for a 100% test coverage. This doesn't mean that we meticulously write tests for every single line – we ignore blocks that are not relevant or difficult to test and make sure that the tests execute all code paths.

Project details


Release history Release notifications | RSS feed

This version

8.1.1

Download files

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

Source Distribution

thinc-8.1.1.tar.gz (180.2 kB view details)

Uploaded Source

Built Distributions

thinc-8.1.1-cp310-cp310-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.10 Windows x86-64

thinc-8.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (804.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

thinc-8.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (759.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

thinc-8.1.1-cp310-cp310-macosx_11_0_arm64.whl (688.3 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

thinc-8.1.1-cp310-cp310-macosx_10_9_x86_64.whl (759.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

thinc-8.1.1-cp39-cp39-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.9 Windows x86-64

thinc-8.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (813.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

thinc-8.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (768.4 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

thinc-8.1.1-cp39-cp39-macosx_11_0_arm64.whl (692.0 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

thinc-8.1.1-cp39-cp39-macosx_10_9_x86_64.whl (766.4 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

thinc-8.1.1-cp38-cp38-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.8 Windows x86-64

thinc-8.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (817.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

thinc-8.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (768.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

thinc-8.1.1-cp38-cp38-macosx_11_0_arm64.whl (683.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

thinc-8.1.1-cp38-cp38-macosx_10_9_x86_64.whl (752.1 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

thinc-8.1.1-cp37-cp37m-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.7m Windows x86-64

thinc-8.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (803.9 kB view details)

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

thinc-8.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (762.2 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

thinc-8.1.1-cp37-cp37m-macosx_10_9_x86_64.whl (746.0 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

thinc-8.1.1-cp36-cp36m-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.6m Windows x86-64

thinc-8.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (807.0 kB view details)

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

thinc-8.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (764.7 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ARM64

File details

Details for the file thinc-8.1.1.tar.gz.

File metadata

  • Download URL: thinc-8.1.1.tar.gz
  • Upload date:
  • Size: 180.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.7.9

File hashes

Hashes for thinc-8.1.1.tar.gz
Algorithm Hash digest
SHA256 9b90282984f3cbaac98e0367df1b1af9e4836231bc063dfad7242a9d0dd52bcd
MD5 46d767d07f70d0f41e8ba2268485f614
BLAKE2b-256 a7b2de6c9fae8f9faf5f1830c0db3b8ed75adb83d6185bfde016e582e8840132

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: thinc-8.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.7.9

File hashes

Hashes for thinc-8.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6ecc0ff5305d4511d14c459fdf86ffa48eb512bd3c9afdb8c1009870901ebb6e
MD5 1b01958df18dd596014d57ed5f07d270
BLAKE2b-256 23e83fc6fbb300e9fe4212d5a914051983fd5bde65b4e7b1f6ad390f919c6507

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c01548bb1f567a32dacfdf3a324806c00db1abde457a21fcb185b48a3839ada4
MD5 6f8c8b118f69a41a89f18ba737ed6d2a
BLAKE2b-256 87d2b96a38e2e9bbf31294d2205083d3eb82e8e3f4b07b8704ae06ddabbc6cb2

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9ec354c2083af7fe35583ec3d5725e5ae174e0168f2f1491f43c60de8374b364
MD5 d2ab08d870db7624154ab7fa5ec90519
BLAKE2b-256 57ffa8928bf2692a7ffd6acad890dc1585f9c5e18182c8aa1466c857469249a6

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd47234d3741bc453a1b39832b6e0791521e9b8131e824c81a63fe515ee6e3f9
MD5 6bef2e3a387b4886dab3810bf9d896db
BLAKE2b-256 ca68ddbdc1109f50ba49ff7590ee534e4063b712b149ff5880eed26e02ad3d72

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5630387dcec82a71a7b53091bec8107c02880448e809e1cfbbbfd233dfcd332a
MD5 5758da6f03fbdc79bb79ae2a7465d62e
BLAKE2b-256 8bbaa0ef13426c0334ffcfa99ef60c04ff847e3868359e0a7ffbfb7d59f49966

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: thinc-8.1.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.7.9

File hashes

Hashes for thinc-8.1.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 2f98f1f117255d12026b3417fcd29c9ca05816ac7e824328995ca7bf63273a6c
MD5 18175aacdb0ec080325ea4de8b449194
BLAKE2b-256 ebe2743baea9eac3cd96ba0948b1dd29c9def62b1e7058467783d1bb2ff4def5

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7ff2fc01d3785a843ea74b311d376a5d931f25387731d1e1055c6f43fa25f930
MD5 a1a02c2889d200987a2346f7315690a0
BLAKE2b-256 950b1f4574e1b9c89c7fd9d31f378a40432fc8d2ff88af3cfa31d1853f8400e8

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f912660d2c10a215a7ba34485c9af3ebda52a581ae3b8ab23d10a4f6ab057af5
MD5 7104b0733c33f651fbb2d2506339779d
BLAKE2b-256 e6015aa554cf7e8cfd9a34902502aca46b2ea36a196cdb2680d9e30c1b4985d2

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 333e81f57ce5fbf38b9fa363eb04dcbeb38f619043716f6ea1d339cd707c8f30
MD5 dc04fc6118dc87d1657beaafb7dd90b7
BLAKE2b-256 748a333cb5ee1688bbf4c334c1b5e9f5f42108bd5a4842c965104e114367fb16

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b1a672d1f6e5f57534fce4da80f33efb005ee7727420e078578eb2f61ee09be6
MD5 63b81ce9b3238b133788e0208cd60131
BLAKE2b-256 92aabe8ab7df0f4646c760db84df69659ff2ef13aedc1111cfd9b9dc60052e7f

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: thinc-8.1.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.7.9

File hashes

Hashes for thinc-8.1.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 f6489fea9e9520c17a670ac198094b430cfbbd42be4dd02cad92e24938c2d2dd
MD5 4de6c1908acf6a065166d1a6dc79a4fb
BLAKE2b-256 812c943f0fb048888884acae5e167132d310978444eb47183863af17c5d8c4b1

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d3e978bbb8a4606f423b7128c2058d4ce6a2343b02fbdef22ce9a53bd9df9d7
MD5 be1a321cf5deec7ccfc99c5435861b34
BLAKE2b-256 ec65e814de3db631010c2330ee2f34f20db01093078fcdf2147324d99dbefb39

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cccb536fac787a24d500bb307f1b6eb44e2b27da50515f5e983ff9a6c516cc5a
MD5 f0bd726e51f72073b3c553cf281d37e6
BLAKE2b-256 598069331ef5e593de1df490482ae034526b9946b3d2b5d144c6532b3389428a

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a9352f65b7bc29b38473b81d619a0ae5de02b4b6a00ebc251e9362802f907bc9
MD5 882c6507d1966808d8bd5c46ffba86a8
BLAKE2b-256 7a9fa859bff2bde8a2812d849838905f55e32e242df8ca57db7db52453e5312e

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0266d81f780414f17d7f958ee0681af05b780a944d68f294deb13cf7f2543263
MD5 d79b5af87d0f9395f78f79f580c14ed7
BLAKE2b-256 a19fa0fc3e8d0f66476e6df5a4db19ae4e70d1a771a77c840ae26304ff7c354c

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: thinc-8.1.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.7.9

File hashes

Hashes for thinc-8.1.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a1c826e4c62be9091a931d25fce543fa009c9bff4b698e974312281d33308ba3
MD5 01d095611cf02add2ab46c0b6a03e5ee
BLAKE2b-256 384b2293a50593f56402b140da5040068004b7d4d742b96d7a49b314d3228a33

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a5fe36f246571cc88bf8edb16174f4c635488acbbbaf082ef45d25878e0b917
MD5 51b5d0b6f82682fe8160562d66a21634
BLAKE2b-256 66e2a94985a808344c9dcf94426dce992b7b36a5dead005ba29ae13d27408b3f

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e70bcaf9e4374ced1bd8587a5d9b472e2b48c00914277c507789e8f194c39756
MD5 562f47e6898f1e70882dd6d4f72643b3
BLAKE2b-256 69ba24b8c08ace1d2abdcb01707666ad223bfed78dd5e6ca2be19e4c80ed4350

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 76ed344151fa9dcf3e4195a2bba4c71a3caff3c9efaa78fe0d815db1ac869dda
MD5 538b8a173fcb58cfd9e87232e481632e
BLAKE2b-256 5e5b26d5868be4bc0ca98cf804700d7f3d557493c1a8222e3140b33c206ca8a7

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: thinc-8.1.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.7.9

File hashes

Hashes for thinc-8.1.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 7abedc86d7380e517dba40a3c20313614828a8dc9d54c53de2438a329e7d1769
MD5 7996e60bcc4f7818c328a9a410ef80d2
BLAKE2b-256 c0be30895d40ee51265816b5807a713e8471bee6c515fa0f06b6216e8bb92ce3

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0896fa0daaecc5cf657a14f053e114862dbd69dba077697815896c3de3812d24
MD5 4e385adb16b1aa81838bfc9747078560
BLAKE2b-256 1e1c07ec411f10f02511255cc3910c883c6cdc589cc4df71d88d985aa41792c1

See more details on using hashes here.

File details

Details for the file thinc-8.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for thinc-8.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b57883e9a9d68b88d5c3c96d6b3f07fb76d4c59a69c15379059ae5eebc63b68f
MD5 dc7fbe512e6244680a50d052007ec2cf
BLAKE2b-256 6e8290de42b7b1114e1a0833eed21d3f5d9373e67ae74267ea5a4c40e9955441

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