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.2.dev20250924193248-cp313-cp313-win_amd64.whl (738.1 kB view details)

Uploaded CPython 3.13Windows x86-64

typedunits-0.0.2.dev20250924193248-cp313-cp313-win32.whl (683.8 kB view details)

Uploaded CPython 3.13Windows x86

typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-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.2.dev20250924193248-cp313-cp313-macosx_11_0_arm64.whl (755.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

typedunits-0.0.2.dev20250924193248-cp313-cp313-macosx_10_13_x86_64.whl (798.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

typedunits-0.0.2.dev20250924193248-cp312-cp312-win_amd64.whl (734.5 kB view details)

Uploaded CPython 3.12Windows x86-64

typedunits-0.0.2.dev20250924193248-cp312-cp312-win32.whl (684.6 kB view details)

Uploaded CPython 3.12Windows x86

typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-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.2.dev20250924193248-cp312-cp312-macosx_11_0_arm64.whl (755.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

typedunits-0.0.2.dev20250924193248-cp312-cp312-macosx_10_13_x86_64.whl (804.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

typedunits-0.0.2.dev20250924193248-cp311-cp311-win_amd64.whl (814.8 kB view details)

Uploaded CPython 3.11Windows x86-64

typedunits-0.0.2.dev20250924193248-cp311-cp311-win32.whl (749.1 kB view details)

Uploaded CPython 3.11Windows x86

typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-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.2.dev20250924193248-cp311-cp311-macosx_11_0_arm64.whl (782.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

typedunits-0.0.2.dev20250924193248-cp311-cp311-macosx_10_9_x86_64.whl (849.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

typedunits-0.0.2.dev20250924193248-cp310-cp310-win_amd64.whl (814.8 kB view details)

Uploaded CPython 3.10Windows x86-64

typedunits-0.0.2.dev20250924193248-cp310-cp310-win32.whl (719.7 kB view details)

Uploaded CPython 3.10Windows x86

typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-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.2.dev20250924193248-cp310-cp310-macosx_11_0_arm64.whl (745.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fe60eaa33d2a506b8bb1c7b5d811006abced073f9ffbfae8fc3348237da8beca
MD5 f67c80c4f644b47a33444d8485e56f1c
BLAKE2b-256 27c6edc8e53fc1fa3e41cb0d6524f965aacd2807941ee541405448283410a63e

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 4523fee4d470656f0562d13e21ca29813e01f5307ed137c2e8dbd3e5a4318d64
MD5 be376e33c36cf7761fda865582c3df17
BLAKE2b-256 d3b38c00486925ea1c25c229718596d495d46e770c4ab90bcea129a3d4c7e4ca

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8202ece3c29eec9cce61013a7f285a4d5e2ee4accc5ff50c1d82fe7aadef9334
MD5 fcb3d7f9f618344d9c12d40380baf6f1
BLAKE2b-256 5d64dff1325bbc7849df35873bbb0fa7d4f9bc66a2d4f4338f654c5c356ed9d8

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1d654176a1e1013a923f9a7f55bff49ca5e5a800de401797e79f62a60d9ac0ee
MD5 513ee4592bedcffc09624d72c391d8fa
BLAKE2b-256 638ec557201ed363bd3b8c442bc1c4e18d4517f663581236b3849b5328b912f1

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb0e3969351226560fd942d41e1b4349122e2785fb2f108338d8845380d589a3
MD5 0b97aec8cc401009c351de4e6f2cbc30
BLAKE2b-256 738ea05c85547672db0aad110c6af6e2a2c79b1df35f7b77542d4fb9494e727a

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b69f91d8a54675cf27b725abcf10e412da58ca59b560848ff82cad98258285f8
MD5 fb3518d1fadd7099bb1d780998ddeca1
BLAKE2b-256 7fbdf91d454ad7695560890add9af4fb5f4a31c15a2a0ac9185b972c756bc601

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ada81293771027b9a472213b97ae94578497dec832c0c66fe799bbd415d10c57
MD5 a79935b6bc7361e684fa38aa90f9809b
BLAKE2b-256 bebec60434622b418bab983a25ba3d199eb7e62e100124925f24b8faaeca202c

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 2b79cd4de94f263bdb97be1701c50c7c1206e48085a18dc87fa7857a79f26ef1
MD5 9f89bba4fa9adfb642e9e6f07a6d023a
BLAKE2b-256 7a8a3e5f5e19a59dc75baa9e7105738253d926612b7cf31fb02977241b69232a

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f07ff5b7badaca41a70d23b6a6bd3a47aa875057fa123d6d7e006aafd55f248b
MD5 db60440006c387eeba5f33c41216422d
BLAKE2b-256 d20c6d50fadc6f8a16e173b6f0929f9aa820d086eafd709ae64b6ee410a285f3

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c73462368435c2a03ac978bb5b2f052bc2650875848ab4037373d16462506170
MD5 b35959da0d46501341438250d673e91e
BLAKE2b-256 1a0af03cba1a24614d3788228bef0e0ad78e261a710608adfdb16aa0ecbd146c

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f8a21015923bc527c0b862e9d9da9551da21f5cdbe46f74f683c20cdfce5989c
MD5 3c57ddd5fb0718d6101e8595b8b8b09b
BLAKE2b-256 ada0921812fd7460bf37e2756bc401f500b672d9c8319e113263124bc3c3e1f0

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b893d6283b107415201bf092b65fe5650562b43d2d93adba760e402bcd29dc6a
MD5 fe5b5b64a37da698ac31e763f92f3615
BLAKE2b-256 504c231cef7574eae51908aa3c1c76db4266c79b073539ee96f74703bd68466b

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b24158bc6b15f02e4dcf067da5b4ff5a7b83b38e9b807754bc2fb32bb803117b
MD5 3009449749ac5d3f06bf71a973cd2d44
BLAKE2b-256 2da9afc646133bea406f35633435e89c8fa7cfad86b91494899c8b91ab87fae3

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 f052a2b37d6483faa13c94ec8e980f892ff7b7c0fb60d95d52b4c8d020d8ee2f
MD5 30a9ef101c12ccbd346ddd39acea4ff6
BLAKE2b-256 fc77f3d8deeddb54a31d4c03c28c04624408fb4614bffb1d8f2ecab16c15f77a

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 88de2fbbb87079009bb53611d12fea193f1571309147332a50e40d3f9d970653
MD5 eeb1eb483bc20ba0d084897db7f1db7d
BLAKE2b-256 23f54e68d19f216822f982dc9bcd2e93dbb6115f389c1fe421458061d21004af

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6f548348067afd743467d10ba9125c2e226cac9d3bf366f1d7f3707cf71b47c0
MD5 2fea375b8aeeef5533be8224f578e862
BLAKE2b-256 1a360e6aea46d313210425de43cdac25b6236fa59bd3401b01562022956ebac7

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5c596da0ee2ec88600d331af74662eca2cbce03fa6119c43fd59a1b5ad3b1fe
MD5 273a0bf31e898c52a334fcd8e2e238c2
BLAKE2b-256 b089ee8aed09a0482d16c52c0838e3e8afdb40972e37bdaa4c236fb3d532a660

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2ea5d3f410c5daf9780f09ddb1e68b4f880467cf82af16d58c2f9dcfaeca6281
MD5 def52a75fef21bad707361379660918a
BLAKE2b-256 e51b1a5cf091cbade29c0d5f832c5e4b00aa9e7314bb47a70912e7fe82787865

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ef41a089808112813eb4586e99b6e8e4b5d8846b46c276e8c2538bacb8befe8e
MD5 bfbc25b1d86faae1c2d1a6a5009ec544
BLAKE2b-256 e71b2c43a36273bdae2415fd06ddfeb06ab7c84d04caa6253c598d71b4d0acfe

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 3d4024bfafcda9bc777ae76bac7689b998fcf3af7140d40df3c1f12731e46564
MD5 b9c89fbc89e8a901fe720cca92d1b006
BLAKE2b-256 96cc76f0f17f3ffc978912623e5d4b7d4f327217457704291bbefd603c8c6819

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-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.2.dev20250924193248-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 62b36aea184386e689c0721ecd7d7a0e85477c6b55eeb45c72afd235b42ae34a
MD5 477ecb554d50be50795f3dea6d08fe4e
BLAKE2b-256 a9ce0bf2b2274eae51e5b13c736cc9470db57e33a72c2e371177083daee3230b

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 72283d502f329e809a09904705c746d37532804ae72ad00d58e293a0d0aec2e4
MD5 5d151e0b117309c27e60a826d4defea9
BLAKE2b-256 e74ee86ba2cbb8b0891bc3c221bbc58b8b6560d8287c8452550f90297c521c9b

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 677f408551069b15ed57bdf267af92bb9213f8c5ca0b98a24564a292465de773
MD5 b5928ede9be3a035d37dae1c3132caa5
BLAKE2b-256 c32e38cf74b6846d4da747ea07f545f973907e2fe04ad521f34a03826afc0e68

See more details on using hashes here.

File details

Details for the file typedunits-0.0.2.dev20250924193248-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for typedunits-0.0.2.dev20250924193248-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4413520fa7b0b6122600f03edd307c08994acbe8613782fcd64bdc8c4d9d39f8
MD5 d1ee01fc3a48aca86a98f95c1c3a7eec
BLAKE2b-256 cc6ce22b79e1f4639f567f2db51eff4c600f34bcf9a2b0fd00dfaaf42072f6d1

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