Skip to main content

A fast units and dimensions library with support for static dimensionality checking and protobuffer serialization.

Project description

TUnits - Fast Python Units

Continuous Integration

Implements unit of measurement arithmetic, where a number is associated with a product of powers of base units and values with compatible units can be added.

The library is written in Cython for speed. The library provides the ability to statically check dimensionality type (see below) and a limited protobuffer serialization support for select units (see below). Contributions to extend support for more units are welcome.

A precompiled wheel can be installed using pip install typedunits [--pre].

Example

>> import tunits
>> from tunits.units import meter, km, N, MHz

>> print(3*MHz)
Frequency(3, 'MHz')

>> print(5*meter + km)
Length(1005.0, 'm')

>> print(N/meter)
N/m

>> print((N/meter).in_base_units())
kg/s^2

>> print(2*km / tunits.Value(3, 's'))
0.666666666667 km/s

Static Type Check

TypedUnits provides the ability to statically check the dimensionality of variables and parameters. For example mypy would complain about incompatible types for the following code.

from tunits import Frequency, LengthArray
from tunits.units import meter, km, MHz

def frequency_fn(f: Frequency) -> Frequency:
    return 3*f

x = 2 * meter
x_arr = LengthArray([1, 2], km)
y = 3 * km
f = 7 * MHz

# okay
print(frequency_fn(f))
print(x + y)
print(x_arr - y)

# not okay
print(frequency_fn(x))
print(f + x)
print(x - f)
frequency_fn(x_arr)
$ mypy my_code.py
my_code.py:18: error: Argument 1 to "frequency_fn" has incompatible type "Length"; expected "Frequency"  [arg-type]
my_code.py:19: error: No overload variant of "__add__" of "Value" matches argument type "Length"  [operator]
my_code.py:19: note: Possible overload variants:
my_code.py:19: note:     def __add__(self, int | float | complex | number[Any], /) -> Frequency
my_code.py:19: note:     def __add__(self, ValueArray | list[Any] | tuple[Any] | ndarray[Any, dtype[Any]], /) -> ValueArray
my_code.py:19: note:     def __add__(self, Frequency, /) -> Frequency
my_code.py:20: error: No overload variant of "__sub__" of "Value" matches argument type "Frequency"  [operator]
my_code.py:20: note: Possible overload variants:
my_code.py:20: note:     def __sub__(self, int | float | complex | number[Any], /) -> Length
my_code.py:20: note:     def __sub__(self, list[Any] | tuple[Any] | ndarray[Any, dtype[Any]], /) -> ValueArray
my_code.py:20: note:     def __sub__(self, Length, /) -> Length
my_code.py:21: error: Argument 1 to "frequency_fn" has incompatible type "LengthArray"; expected "Frequency"  [arg-type]
Found 4 errors in 1 file (checked 1 source file)

Serialization support

TypedUnits provides protobuffer serialization support for selected units. Contributions are welcome to increase serialization coverage.

>> from tunits import Frequency
>> from tunits.units import MHz
>>
>> v = 3*MHz
>> msg = v.to_proto()
>> print(msg)
units {
  unit: HERTZ
  scale: MEGA
}
real_value: 3

>> Frequency.from_proto(msg)
Frequency(3.0, 'MHz')

Installation

  1. To install a precompiled wheel (add --pre for prelease version)

    pip install typedunits # [--pre] 
    
  2. To locally build the latest version from the main branch

    pip install git+https://github.com/quantumlib/TypedUnits
    
  3. For a local editable copy

    git clone https://github.com/quantumlib/TypedUnits
    cd TypedUnits
    pip install -e .
    

Development and Testing

  1. Clone the repository.

    git clone https://github.com/quantumlib/TypedUnits
    
    cd TypedUnits
    

    All future steps assume you are in the repository's directory.

  2. Install dev environment dependencies.

    pip install -r dev_tools/dev.env.txt
    
  3. Install TUnits

    pip install -e .
    
  4. Test.

    pytest
    

Formatting

dev_tools/format.sh  # to format
dev_tools/format.sh --check  # to verify format

Note: This is not an officially supported Google product

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 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.

typedunits-0.0.1.dev20250924190402-cp313-cp313-win_amd64.whl (738.1 kB view details)

Uploaded CPython 3.13Windows x86-64

typedunits-0.0.1.dev20250924190402-cp313-cp313-win32.whl (683.8 kB view details)

Uploaded CPython 3.13Windows x86

typedunits-0.0.1.dev20250924190402-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

typedunits-0.0.1.dev20250924190402-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

typedunits-0.0.1.dev20250924190402-cp313-cp313-macosx_11_0_arm64.whl (755.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

typedunits-0.0.1.dev20250924190402-cp313-cp313-macosx_10_13_x86_64.whl (798.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

typedunits-0.0.1.dev20250924190402-cp312-cp312-win_amd64.whl (734.5 kB view details)

Uploaded CPython 3.12Windows x86-64

typedunits-0.0.1.dev20250924190402-cp312-cp312-win32.whl (684.6 kB view details)

Uploaded CPython 3.12Windows x86

typedunits-0.0.1.dev20250924190402-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

typedunits-0.0.1.dev20250924190402-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

typedunits-0.0.1.dev20250924190402-cp312-cp312-macosx_11_0_arm64.whl (755.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

typedunits-0.0.1.dev20250924190402-cp312-cp312-macosx_10_13_x86_64.whl (804.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

typedunits-0.0.1.dev20250924190402-cp311-cp311-win_amd64.whl (814.8 kB view details)

Uploaded CPython 3.11Windows x86-64

typedunits-0.0.1.dev20250924190402-cp311-cp311-win32.whl (749.1 kB view details)

Uploaded CPython 3.11Windows x86

typedunits-0.0.1.dev20250924190402-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

typedunits-0.0.1.dev20250924190402-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (2.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

typedunits-0.0.1.dev20250924190402-cp311-cp311-macosx_11_0_arm64.whl (782.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

typedunits-0.0.1.dev20250924190402-cp311-cp311-macosx_10_9_x86_64.whl (849.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

typedunits-0.0.1.dev20250924190402-cp310-cp310-win_amd64.whl (814.8 kB view details)

Uploaded CPython 3.10Windows x86-64

typedunits-0.0.1.dev20250924190402-cp310-cp310-win32.whl (719.7 kB view details)

Uploaded CPython 3.10Windows x86

typedunits-0.0.1.dev20250924190402-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

typedunits-0.0.1.dev20250924190402-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

typedunits-0.0.1.dev20250924190402-cp310-cp310-macosx_11_0_arm64.whl (745.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

typedunits-0.0.1.dev20250924190402-cp310-cp310-macosx_10_9_x86_64.whl (811.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8210e6494554e9ab49d543f08a5f0ae7de24f1f9f041f2b03664d98d6f46e186
MD5 bb8deab9c94cf6eef6bd062687eb3ffc
BLAKE2b-256 07a970061274c84774de1f2cdc4f0691d20538b17605334157df73b689b57c95

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 39b44c56ca017a4042a82fcc9f3279031a02d69609b778a09bbf77103223e3c7
MD5 0d8d0b761cc8d2ca372d3df8be89ff86
BLAKE2b-256 ec4d49ee5f36667b85359a6601fd944905212b2ab51c733d1bd5429e2f254da8

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 080a2cd369dc11c664d7b1e1e085d9fc096998b63a9a791b5f17174bffcbf01f
MD5 e9f117f9346e698dbfde25448a6f1413
BLAKE2b-256 21c0512bf231821eb3c1403cf61a73fddff4d2bb66a326fd6d70a51104a10fcb

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7b997e7b754f2a2672a25afead8906543420fe115ca6e968312bd6815a87d67c
MD5 0466d1363576f731c096202da3cd385a
BLAKE2b-256 b3a7164e4899cbd4659c535211bee976145f581fc2eafbf3376d42a25117b2b3

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f2c57c5f157c7530c8c75e2e1d50be911d2e00aaea0fdb889e4ec61b392d937c
MD5 08a97062b84a28ba567b1a8da4532a92
BLAKE2b-256 cd581d5a53acd05d5fb4879416ae1ac9b0ada895cc072913ef30f645c0eaec18

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 02ec05da612d2fd89dafcb1479bba5cecac3c43820de861a20fa8a753df3fa8f
MD5 b0262a1d62e04c6e4ccda9f4883f2864
BLAKE2b-256 6b4591bd0351de524e7e2c713e4adad9797379bdd2a401e8a582c396d5a5af3c

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7c62cd7d01747f25a80b8f0b2e0800f78454b88897f2d6ec025dd725101a7044
MD5 31681682627c485aa2604543f078ed67
BLAKE2b-256 8cd5e903b65bec6e48593684f8df2b1feba4fdbee932a30cd658d8fcce11c7e0

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 d3579a695b6aba1ec2535199fc1faf3191dcc8dcb0f2a512cf259035e04a4add
MD5 d4e4968715c40f0fc51e77f873b9880b
BLAKE2b-256 ea1c957a9bf80442fa1b72266a9db30743bc2f8a35a2a96b29f138ef7a152585

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 79298f4a72e2f851d80ef82924b10d269d64d0484cf49428e67a024b1f025f51
MD5 e40befa713d560cb015950c3a8879704
BLAKE2b-256 5aaa8faa2c4721158904fa9be2ece55f24b4a6553ac024a197d41a744ae47108

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8c83ab87ba95d87084f4ef9709b2d39920c7bac7df43386f0a9d64cb9b57a35a
MD5 3ddef2504370390899079242141a37b6
BLAKE2b-256 bb7134d9d217344974daf9bdd5bfc85bcbad89eecc43ed0c343939c0f5af4f88

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f97bf286f76a19f88862dc3813810f29a5fc8bac90bd3441196d35102cc7e93
MD5 e23fb293fcf533a6e2db71a72b439843
BLAKE2b-256 6d1296c60977e388e91832a0ce458a579912295cb5d2d5da40f9559c0e129742

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 30255b96be82e12e265adf1c74402727c08e8147572df43ac54dc01f5f7bf585
MD5 989d03d79c4bd35a321fe4e4722eff43
BLAKE2b-256 7aec668322a5a4cddc9ad739ec06c00498d26ed45ef4d30c3d06d235af91efd0

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 546894866f8ecd5f8dac60a984649469caf19c10633c16deedda39505e52e605
MD5 3b75bd8d6095638e32d71ec21d66aceb
BLAKE2b-256 e4884b5131446b2ddedcd78167885d5064d362444b68ffb0c0144e48c18abade

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 8c50d020677e6a4e80e735d84603cda186f123d5ac401d085024c869eb69c642
MD5 654b2294b02dafe8d63d552a11be1797
BLAKE2b-256 f49d74e0c100d8e3da1cd057c1bf4b5428146684c5e3a739eb39c6cfce63a160

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6db0a1392dee06bca8970fc1250afe1212b5de454ff880840e59ed9e975b534d
MD5 650b167865e89d8d90d7c1474f30c98d
BLAKE2b-256 cfe9deeab2aff09f2a54d8baf2284aff458bb54fd25e12fa28f25a9f809c0604

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b856cb2cf368ad3083161df551b536a14c46bd2c6bf086cdcae545143cf0489d
MD5 6fbba35d33bd1baa90854082e5e58217
BLAKE2b-256 21dfd67c48e14c1595498193b1cfe7f0b6468d12cc81d4f791abec21964cddc6

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c437ae3b9a8f6869f8cb839f636a29f45c7784d1e636b92a46be022a33c2e31
MD5 fd70b9d5b80a40add5a6e8cb145a2c35
BLAKE2b-256 70ed698cfb3c2978666c717333d9107714186f2905f6f2a9e9d8fdcefab47635

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5dd12be6eba1c0c2601f14561c28bcc6fae184e3f4b50918c93f83306413aed5
MD5 acec192ae6e70ed57292f6c4d6785df5
BLAKE2b-256 51f3373d856365cb56007d195d4ca7cd2da6c194e66649ed388d3e15a4303599

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4b74ef21a85c331fc49eec1114af9aa73b032beb50f1dbe1f33a1c34a183cbf4
MD5 cc7e8aa8d72b2d786ec4e81b1ed84651
BLAKE2b-256 ac756b732ee07613b61c51de1201b73a5abc3956d92658060fb18a2a8cdd3484

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 864e4c8ee4bdd828fa7dc5b5a5dd110a1727d8936af720c12d4e4e9db9cafb05
MD5 522f65aa5b4c9674695bbc9ddf1463ec
BLAKE2b-256 6a7be60b5051641cb44b7dde074fee331138383f010688a305c75f109d388183

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c2c5ca89414941ce449d2663c00ff265adbeeb7f42a27ba2c43407139ac05cae
MD5 4e722d3a1b34ff6e8ad6336a56fa7a5d
BLAKE2b-256 83ac60184fb6eb38bd2c2d012b5e60ed4af437a8616cbfb0617c05465ba64be5

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8f7398a3469f0604507b344bff1b7f6c26454237a340d84cecd8aa72e982f415
MD5 a9265e25ef6001e8b3c9fa4588850cff
BLAKE2b-256 af3d767a5bd02e9175f19cc4c110e646363211d07125132862156b4f85230a36

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a49a7df1cfd7c3126db7ac395d1897b19675d4b46a5c1529b28687299c73da3
MD5 61fd1dbd3f7868391804003e4bcf8ce8
BLAKE2b-256 7b71b5376320f52e77b13799d02664d71b2c8a218605ec0f175afff3a133fe26

See more details on using hashes here.

File details

Details for the file typedunits-0.0.1.dev20250924190402-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.1.dev20250924190402-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ddd6cc563141ea981fc63da253e93fc01fb994492ff2e59ffb2b8fecc778d794
MD5 2ad29fa24c0743565088d8a5881b7606
BLAKE2b-256 2e9c05806e02f0b3e1781ad7b0c9366311a8531c24b54011c4c36e9a204dbfc8

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