Skip to main content

MARS: a tensor-based unified framework for large-scale data computation.

Project description

PyPI version Docs Build Coverage Quality License

Mars is a tensor-based unified framework for large-scale data computation which scales Numpy, Pandas and Scikit-learn. Documentation.

Installation

Mars is easy to install by

pip install pymars

When you need to install dependencies needed by the distributed version, you can use the command below.

pip install 'pymars[distributed]'

For now, distributed version is only available on Linux and Mac OS.

Developer Install

When you want to contribute code to Mars, you can follow the instructions below to install Mars for development:

git clone https://github.com/mars-project/mars.git
cd mars
pip install -e ".[dev]"

More details about installing Mars can be found at getting started section in Mars document.

Mars tensor

Mars tensor provides a familiar interface like Numpy.

Numpy

Mars tensor

import numpy as np
a = np.random.rand(1000, 2000)
(a + 1).sum(axis=1)
import mars.tensor as mt
a = mt.random.rand(1000, 2000)
(a + 1).sum(axis=1).execute()

The following is a brief overview of supported subset of Numpy interface.

  • Arithmetic and mathematics: +, -, *, /, exp, log, etc.

  • Reduction along axes (sum, max, argmax, etc).

  • Most of the array creation routines (empty, ones_like, diag, etc). What’s more, Mars does not only support create array/tensor on GPU, but also support create sparse tensor.

  • Most of the array manipulation routines (reshape, rollaxis, concatenate, etc.)

  • Basic indexing (indexing by ints, slices, newaxes, and Ellipsis)

  • Advanced indexing (except combing boolean array indexing and integer array indexing)

  • universal functions for elementwise operations.

  • Linear algebra functions, including product (dot, matmul, etc.) and decomposition (cholesky, svd, etc.).

However, Mars has not implemented entire Numpy interface, either the time limitation or difficulty is the main handicap. Any contribution from community is sincerely welcomed. The main feature not implemented are listed below:

  • Tensor with unknown shape does not support all operations.

  • Only small subset of np.linalg are implemented.

  • Mars tensor doesn’t implement interface like tolist and nditer etc, because the iteration or loops over a large tensor is very inefficient.

Mars DataFrame

Mars DataFrame provides a familiar interface like pandas.

Pandas

Mars DataFrame

import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(100000000, 4),
                  columns=list('abcd')
print(df.sum())
import mars.tensor as mt
import mars.dataframe as md
df = md.DataFrame(mt.random.rand(100000000, 4),
                  columns=list('abcd')
print(df.sum().execute())

Mars learn

Mars learn provides a familiar interface like scikit-learn.

Scikit-learn

Mars learn

from sklearn.datasets import make_blobs
from sklearn.decomposition import PCA
X, y = make_blobs(
    n_samples=100000000, n_features=3,
    centers=[[3, 3, 3], [0, 0, 0],
             [1, 1, 1], [2, 2, 2]],
    cluster_std=[0.2, 0.1, 0.2, 0.2],
    random_state=9)
pca = PCA(n_components=3)
pca.fit(X)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
from mars.learn.datasets import make_blobs
from mars.learn.decomposition import PCA
X, y = make_blobs(
    n_samples=100000000, n_features=3,
    centers=[[3, 3, 3], [0, 0, 0],
              [1, 1, 1], [2, 2, 2]],
    cluster_std=[0.2, 0.1, 0.2, 0.2],
    random_state=9)
pca = PCA(n_components=3)
pca.fit(X)
print(pca.explained_variance_ratio_.execute())
print(pca.explained_variance_.execute())

Eager Mode

Mars supports eager mode which makes it friendly for developing and easy to debug.

Users can enable the eager mode by options, set options at the beginning of the program or console session.

>>> from mars.config import options
>>> options.eager_mode = True

Or use a context.

>>> from mars.config import option_context
>>> with option_context() as options:
>>>     options.eager_mode = True
>>>     # the eager mode is on only for the with statement
>>>     ...

If eager mode is on, tensor will be executed immediately by default session once it is created.

>>> import mars.tensor as mt
>>> from mars.config import options
>>> options.eager_mode = True
>>> t = mt.arange(6).reshape((2, 3))
>>> print(t)
Tensor(op=TensorRand, shape=(2, 3), data=
[[0 1 2]
[3 4 5]])

Easy to scale in and scale out

Mars can scale in to a single machine, and scale out to a cluster with thousands of machines. Both the local and distributed version share the same piece of code, it’s fairly simple to migrate from a single machine to a cluster due to the increase of data.

Running on a single machine including thread-based scheduling, local cluster scheduling which bundles the whole distributed components. Mars is also easy to scale out to a cluster by starting different components of mars distributed runtime on different machines in the cluster.

Threaded

execute method will by default run on the thread-based scheduler on a single machine.

>>> import mars.tensor as mt
>>> a = mt.ones((10, 10))
>>> a.execute()

Users can create a session explicitly.

>>> from mars.session import new_session
>>> session = new_session()
>>> session.run(a + 1)
>>> (a * 2).execute(session=session)
>>> # session will be released when out of with statement
>>> with new_session() as session2:
>>>     session2.run(a / 3)

Local cluster

Users can start the local cluster bundled with the distributed runtime on a single machine. Local cluster mode requires mars distributed version.

>>> from mars.deploy.local import new_cluster

>>> # cluster will create a session and set it as default
>>> cluster = new_cluster()

>>> # run on the local cluster
>>> (a + 1).execute()

>>> # create a session explicitly by specifying the cluster's endpoint
>>> session = new_session(cluster.endpoint)
>>> session.run(a * 3)

Distributed

After installing the distributed version on every node in the cluster, A node can be selected as scheduler and another as web service, leaving other nodes as workers. The scheduler can be started with the following command:

mars-scheduler -a <scheduler_ip> -p <scheduler_port>

Web service can be started with the following command:

mars-web -a <web_ip> -s <scheduler_endpoint> --ui-port <ui_port_exposed_to_user>

Workers can be started with the following command:

mars-worker -a <worker_ip> -p <worker_port> -s <scheduler_endpoint>

After all mars processes are started, users can run

>>> sess = new_session('http://<web_ip>:<ui_port>')
>>> a = mt.ones((2000, 2000), chunk_size=200)
>>> b = mt.inner(a, a)
>>> sess.run(b)

Getting involved

Thank you in advance for your contributions!

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

pymars-0.3.0.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

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

pymars-0.3.0-cp38-cp38-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.8Windows x86-64

pymars-0.3.0-cp38-cp38-manylinux1_x86_64.whl (8.6 MB view details)

Uploaded CPython 3.8

pymars-0.3.0-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.8macOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

pymars-0.3.0-cp37-cp37m-win_amd64.whl (3.3 MB view details)

Uploaded CPython 3.7mWindows x86-64

pymars-0.3.0-cp37-cp37m-manylinux1_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.7m

pymars-0.3.0-cp37-cp37m-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.7mmacOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

pymars-0.3.0-cp36-cp36m-win_amd64.whl (3.3 MB view details)

Uploaded CPython 3.6mWindows x86-64

pymars-0.3.0-cp36-cp36m-manylinux1_x86_64.whl (8.3 MB view details)

Uploaded CPython 3.6m

pymars-0.3.0-cp36-cp36m-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.6mmacOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

pymars-0.3.0-cp35-cp35m-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.5mWindows x86-64

pymars-0.3.0-cp35-cp35m-manylinux1_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.5m

pymars-0.3.0-cp35-cp35m-macosx_10_6_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.5mmacOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.6+ x86-64macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

pymars-0.3.0-cp27-cp27mu-manylinux1_x86_64.whl (7.4 MB view details)

Uploaded CPython 2.7mu

pymars-0.3.0-cp27-cp27m-manylinux1_x86_64.whl (7.4 MB view details)

Uploaded CPython 2.7m

pymars-0.3.0-cp27-cp27m-macosx_10_7_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.5 MB view details)

Uploaded CPython 2.7mmacOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.7+ x86-64macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

File details

Details for the file pymars-0.3.0.tar.gz.

File metadata

  • Download URL: pymars-0.3.0.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.8.1

File hashes

Hashes for pymars-0.3.0.tar.gz
Algorithm Hash digest
SHA256 05697bfe3c03a33d996983e1b99da89de29777405deaf3bdea1075143eedd8e9
MD5 9678e88563304c41c05dc1872894a60f
BLAKE2b-256 190b18c4f9869faf32365a74ddc96ae36c3da9e38731288893b4c6242428c2b6

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 3.4 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.8.1

File hashes

Hashes for pymars-0.3.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 f2c9353fbcafcb9f94b117649b082a019760e1696ca9fcb7c254d92e9c1b4fbb
MD5 996ad9cb37a8920d210e33527637ac57
BLAKE2b-256 6f110c33233d6c6725cd5666e3e334b8a385a501f086c5a69da5f5161527f76c

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 8.6 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.8.1

File hashes

Hashes for pymars-0.3.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 217c24934426e8638a4cbfc1891da1ceaebcca2a2348af5aeccfa5c90875b357
MD5 54777dc7c9e4b8583f5fd21a8f0edf96
BLAKE2b-256 5e7f879dc5b19b33b45e29dcedb599cd2b38f6d031c8d092834278fd97e8bb01

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for pymars-0.3.0-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 a1b2e81d8f7776e346aa516aef281b04b86e1cf2c3ad3256686e76235936f663
MD5 4157e207226478bd32928fe1aeb1e6fc
BLAKE2b-256 49f912a9b07d2450a392adb8009e0fbaa5602d8941c758cad71c0041c4ffe8a5

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 3.3 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.6

File hashes

Hashes for pymars-0.3.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 380b8f33abed3300d3de6e4ba85d31e35deea34fbb039436c471817c9872ed07
MD5 72cdc861481796b7d50cf4a029e3eab6
BLAKE2b-256 a5d747e883bf87464db8f7376021dfbbb66430673d169697b383b6d68cac6e84

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 8.2 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.6

File hashes

Hashes for pymars-0.3.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 60c8f4a319bf7522686536627e930b62ec2f616d483e2c8cc95031ba101787af
MD5 69e40c41f08256508e9afaa89ece290c
BLAKE2b-256 4ece672b0078d06a12c214a2650a729bc38e56733c088668326b90eaba1a7280

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp37-cp37m-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for pymars-0.3.0-cp37-cp37m-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 1cb3c293691709b4a4906294aa97edaabecb53de71c83e2a718b42bcafa7015d
MD5 9fe9d1eaf751416de0765171f21f71b0
BLAKE2b-256 845aa9a650bca029df7a29e1788e3bd3faf461416d60a1449e8da8a6a4f7c788

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 3.3 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.6.10

File hashes

Hashes for pymars-0.3.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 ff01bc649aa4f1b90e4b504dc5fd656a688aed8eca2765b5aae0b08571acd41e
MD5 dedb9dc3378b7ac61b03466fe56a01c7
BLAKE2b-256 12d949d53e307aff731b1abd53bd0a5dbd5df123e1f1a45b3d3bf06acb4bac1c

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 8.3 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.6.10

File hashes

Hashes for pymars-0.3.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 33a24a94fcf6947bd847393020241de45f419ea038a1d32f10ab60257cb034d7
MD5 5d9b1c75cb6bd08d4f572a5fdf839368
BLAKE2b-256 3676c10bcad8978d66e30282824839a4db3300880a7e44cda062ab8979dd6ac9

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp36-cp36m-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for pymars-0.3.0-cp36-cp36m-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 75376274554104f447346185bcec421348c8262bb21b6ad14edb8789fed99791
MD5 7742b962f54e163b3d0751aa91affeb5
BLAKE2b-256 0cb86713e327d426a8975792974f53f810ae0a8b38e196b2711a4c83de914ddb

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.5.6

File hashes

Hashes for pymars-0.3.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 9f3bba07e726a7218ed86025e9dc0e3cba04612c76c79bd3a2bb93074416bc38
MD5 bc77076f9ed922830b2c7688e0cb0f81
BLAKE2b-256 a0486c12d4b47ad898c109995cc75837873a1824ec22c8b22a6d5f31e09b67cf

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 8.1 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.5.6

File hashes

Hashes for pymars-0.3.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 35f3ff051fab1a1a31d5c912c93ed3bedca9e8a9c2b85249691b5c11842874cb
MD5 e3a98faaba5bbb1b5ce5e611278cbcc8
BLAKE2b-256 a1e3116d206329022652985b6707c019f7466403dbced7cc82472908acd9533b

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp35-cp35m-macosx_10_6_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for pymars-0.3.0-cp35-cp35m-macosx_10_6_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 29497e2a03f1605a5bb31604fbe3a6c2e99b7e425f02ca174e21e0f978d8fb43
MD5 5f21eca38dc6bd98269f3d14380fe2fe
BLAKE2b-256 9f601e3fd062c72af3ebea2dd4a668dee0a2531d295f4b9feb8990f90a1d36ba

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.4 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/2.7.17

File hashes

Hashes for pymars-0.3.0-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 cdde4fb129a5e6e0b771b7357e3ab47f2b020c9891a0b47b3f71f528fe87535e
MD5 28a30908aaf91f061c8f7411e3731d65
BLAKE2b-256 0c4dba94dc516648f9a3820c8ad1754660c9e66c73bd891a45c94c59cf5b394d

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymars-0.3.0-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.4 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/2.7.17

File hashes

Hashes for pymars-0.3.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3c9d1b2f98b87d894715356c300a367bab40d0092d4b0d15c8d3b2450c996728
MD5 b8bd831c706813466f1451a6b63a9e59
BLAKE2b-256 e69cc4974e6eccc4f3822fd9a2aa7c470cfbcb666dbc59aa6fabd91402432257

See more details on using hashes here.

File details

Details for the file pymars-0.3.0-cp27-cp27m-macosx_10_7_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for pymars-0.3.0-cp27-cp27m-macosx_10_7_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 6d546f23303ce6bf8defcf679b6f8aa266c64a5c420869bd45f1b8e5d4fa7d49
MD5 e68dc0c82d12253fe12ac3e21baf51e0
BLAKE2b-256 5645d7d873ebe57ac83e3157fd208eda1953e969961d8f69b179149f98bc83ce

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