Skip to main content

Center-based hierarchical clustering framework using 3 steps: compute a Similarity, build an Hierarchy, and lastly extract a clustering using a Partitioning method.

Project description

Similarity-Hierarchical-Partitioning (SHiP) Clustering Framework

PyPI version Tests Docs

This repository is the official implementation of the Similarity-Hierarchical-Partitioning (SHiP) clustering framework proposed in Ultrametric Cluster Hierarchies: I Want `em All! This framework provides a comprehensive approach to clustering by leveraging similarity trees, $(k,z)$-hierarchies, and various partitioning objective functions.

The whole project is implemented in C++ and Python bindings enable the usage within Python.

Overview

The SHiP framework operates in three main stages: SHiP framework overview

  1. Similarity Tree Construction: A similarity tree is built for the given dataset. This tree represents the relationships and proximities between data points. Note that the default constructed tree corresponds to the $k$-center hierarchy (Section 3 in the paper).
  2. $(k,z)$-Hierarchy Construction: Using the similarity tree, a $(k,z)$-hierarchy can be constructed. These hierarchies correlate to common center based clustering methods, as e.g., $k$-median or $k$-means (Section 4).
  3. Partitioning: Finally, the data is partitioned based on the constructed hierarchy and a user-selected partitioning objective function (Section 5).

Features

  • Similarity Trees: The package provides a set of similarity/ultrametric tree implementations:

    • DCTree [1]
    • HST [2]
    • CoverTree [3]
    • KDTree [3]
    • MeanSplitKDTree [3]
    • BallTree [3]
    • MeanSplitBallTree [3]
    • RPTree [3]
    • MaxRPTree [3]
    • UBTree [3]
    • RTree [3]
    • RStarTree [3]
    • XTree [3]
    • HilbertRTree [3]
    • RPlusTree [3]
    • RPlusPlusTree [3]
    • Or use LoadTree to load a precomputed tree
  • $(k,z)$-Hierarchies: It supports all possible $(k,z)$-hierarchies, allowing flexibility in choosing the most suitable hierarchy for a given dataset.

    • $z = 0$ → $k$-center (actually in theory: $z = ∞$, but in this implementation we use 0 for $∞$)
    • $z = 1$ → $k$-median
    • $z = 2$ → $k$-means
    • ...
  • Partitioning Functions: A wide range of partitioning functions are available, enabling users to select the most appropriate function based on their specific needs:

    • K
    • Elbow
    • Threshold
    • ThresholdElbow
    • QCoverage
    • QCoverageElbow
    • QStem
    • QStemElbow
    • LcaNoiseElbow
    • LcaNoiseElbowNoTriangle
    • MedianOfElbows
    • MeanOfElbows
    • Stability
    • NormalizedStability
  • Customization: Users can customize the framework by selecting from the available similarity trees, $(k,z)$- hierarchies, and partitioning functions.

    • E.g., DCTree with $k$-means ($z=2$)-hierarchy and the Elbow partitioning method.

      from SHiP import SHiP
      
      # Build the `DCTree`
      ship = SHiP(data=data_points, treeType="DCTree")
      # Extract the clustering from the $k$-median hierarchy and the `Elbow` partitioning method
      labels = ship.fit_predict(hierarchy=2, partitioningMethod="Elbow")
      
    • Or to get clustering with exact $k$ clusters:

      from SHiP import SHiP
      
      ship = SHiP(data=data_points, treeType="DCTree")
      # Extract the clustering from the $k$-median hierarchy and get `k` clusters
      ship.k = k # Set k here
      labels = ship.fit_predict(hierarchy=2, partitioningMethod="K")
      

Installation

Stable Version

The current stable version can be installed by the following command:
pip install SHiP-framework

Note that a gcc compiler is required for installation. Therefore, in case of an installation error, make sure that:

  • Windows: Microsoft C++ Build Tools is installed
  • Linux/Mac: Python dev is installed (e.g., by running apt-get install python-dev - the exact command may differ depending on the linux distribution)

The error messages may look like this:

error: command 'gcc' failed: No such file or directory
Could not build wheels for SHiP-framework, which is required to install pyproject.toml-based projects
Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools

Development Version

The current development version can be installed directly from git by executing:
sudo pip install git+https://github.com/pasiweber/SHiP-framework.git

Alternatively, clone the repository, go to the root directory and execute:
pip install .

Code Example

from SHiP import SHiP

ship = SHiP(data=data, treeType="DCTree")

# or to load a saved tree
ship = SHiP(data=data, treeType="LoadTree", config={"json_tree_filepath": "<file_path>"}) 
# or additionally specify the tree_type of the loaded tree by adding {"tree_type": "DCTree"}

ship.hierarchy = 0
ship.partitioningMethod = "K"
labels = ship.fit_predict()

# or in one line
labels = ship.fit_predict(hierarchy = 1, partitioningMethod = "Elbow")

# optional: save the current computed tree
json = ship.get_tree().to_json()

Results

Our framework achieves the following performance:

Dataset DC-0-Stab. DC-1-MoE DC-2-Elb. CT-0-Stab. CT-1-MoE CT-2-Elb. $k$-means SCAR Ward AMD-DBSCAN DPC
Boxes 90.1 99.3 97.9 2.6 42.1 ± 4.7 24.2 ± 1.6 93.5 ± 4.3 0.1 ± 0.1 95.8 63.9 25.9
D31 79.7 42.7 82.9 46.5 ± 1.8 62.0 ± 5.4 67.7 ± 3.2 92.0 ± 2.7 41.7 ± 5.4 92.0 86.4 18.5
airway 38.0 65.9 58.8 0.8 18.2 ± 2.4 12.0 ± 1.4 39.9 ± 2.0 -0.9 ± 0.5 43.7 31.7 65.1
lactate 41.0 41.0 67.5 0.1 4.1 ± 0.6 1.7 ± 0.2 28.6 ± 1.1 1.5 ± 1.0 27.7 71.5 0.0
HAR 30.0 46.9 52.8 14.7 ± 8.8 14.2 ± 4.7 9.6 ± 2.2 46.0 ± 4.5 5.5 ± 3.2 49.1 0.0 33.2
letterrec. 12.1 16.6 17.9 5.8 ± 0.2 7.2 ± 0.6 6.2 ± 0.3 12.9 ± 0.6 0.4 ± 0.1 14.7 ± 0.9 7.9 0.0
PenDigits 66.4 73.1 75.4 8.0 ± 0.8 12.0 ± 0.6 8.9 ± 0.5 55.3 ± 3.2 0.9 ± 0.3 55.2 55.6 28.8 ± 1.1
COIL20 81.2 72.8 72.6 46.4 ± 4.4 46.6 ± 2.1 47.7 ± 2.0 58.2 ± 2.8 33.5 ± 2.0 68.6 39.2 35.9 ± 0.1
COIL100 80.1 66.8 70.0 44.6 ± 4.2 46.6 ± 1.5 50.1 ± 1.2 56.1 ± 1.4 16.7 ± 0.8 61.4 14.2 0.2
cmu_faces 60.2 56.6 66.5 8.6 ± 3.1 37.1 ± 4.1 34.2 ± 2.1 53.2 ± 4.7 38.5 ± 2.9 61.6 0.7 0.6
OptDigits 55.3 77.0 77.0 40.9 ± 3.5 20.9 ± 2.3 18.1 ± 2.4 61.3 ± 6.6 14.4 ± 4.1 74.6 ± 2.4 63.2 0.0
USPS 33.7 29.3 29.3 12.0 ± 1.7 8.7 ± 1.0 11.2 ± 1.5 52.3 ± 1.7 2.9 ± 0.9 63.9 0.0 21.0
MNIST 19.7 41.7 46.0 11.1 ± 1.7 5.4 ± 0.6 5.4 ± 0.6 36.9 ± 1.0 1.3 ± 0.4 52.7 0.0 -

License

The project is licensed under the BSD 3-Clause License (see LICENSE.txt).

References

[1] Connecting the Dots -- Density-Connectivity Distance unifies DBSCAN, k-Center and Spectral Clustering
[2] HST+: An Efficient Index for Embedding Arbitrary Metric Spaces (Github)
[3] mlpack 4: a fast, header-only C++ machine learning library (Github)

Project details


Download files

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

Source Distribution

ship_framework-0.1.5.tar.gz (23.6 MB view details)

Uploaded Source

Built Distributions

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

ship_framework-0.1.5-cp314-cp314t-win_amd64.whl (796.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

ship_framework-0.1.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ship_framework-0.1.5-cp314-cp314-win_amd64.whl (781.6 kB view details)

Uploaded CPython 3.14Windows x86-64

ship_framework-0.1.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (996.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ship_framework-0.1.5-cp313-cp313-win_amd64.whl (758.6 kB view details)

Uploaded CPython 3.13Windows x86-64

ship_framework-0.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (995.6 kB view details)

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

ship_framework-0.1.5-cp312-cp312-win_amd64.whl (758.6 kB view details)

Uploaded CPython 3.12Windows x86-64

ship_framework-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (995.7 kB view details)

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

ship_framework-0.1.5-cp311-cp311-win_amd64.whl (757.9 kB view details)

Uploaded CPython 3.11Windows x86-64

ship_framework-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (993.5 kB view details)

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

ship_framework-0.1.5-cp310-cp310-win_amd64.whl (757.4 kB view details)

Uploaded CPython 3.10Windows x86-64

ship_framework-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (992.8 kB view details)

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

ship_framework-0.1.5-cp39-cp39-win_amd64.whl (765.3 kB view details)

Uploaded CPython 3.9Windows x86-64

ship_framework-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (992.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file ship_framework-0.1.5.tar.gz.

File metadata

  • Download URL: ship_framework-0.1.5.tar.gz
  • Upload date:
  • Size: 23.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ship_framework-0.1.5.tar.gz
Algorithm Hash digest
SHA256 b069fb7ef52ac7f48d6c67e19305c721cb6c0c2d7f4b610f108e6cd8931ebb06
MD5 4a2890a9d36b21b443974516c9581a31
BLAKE2b-256 abb6bf07f1b3a40c141125b6bdd4c553ec21aa7f104a5b0483ea8e74dc0c1332

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5.tar.gz:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 97c408959832d405bc0b9a573020101212cbb5b8ae414b102ce0a7455f563903
MD5 72179b9db7fb0f8421e59311674097ee
BLAKE2b-256 e0c5fe7a1cf651e0cbfe89f4aac0c85c7f7c5b09e03a745d4ae384d825952b9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp314-cp314t-win_amd64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 69c14f0830ec7e851bce9a19334589360f51ef3b18a60393da064832360fd198
MD5 49449a14b754d14e47fd2907519658b8
BLAKE2b-256 d35390b63d4c48f8b75e609b6281ca254a51a97c62648579485dcdc0749361aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3ca65918ef171498746b91334b91caf3c895fcbaa3bb9bcb76638a7a1191f871
MD5 73efe29ab494f0aaa89b88177263c2ab
BLAKE2b-256 3df849ae3e5bb08da6781d5ea0cdbb6dee7a8e3a16fea0d8d473b53d1503eec1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp314-cp314-win_amd64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e2f6f0de137a30c99c420339ae8c1a51d9295c6aa6934b70f70f794983d7b7da
MD5 3b675c015413bdb3f7220604c25b173e
BLAKE2b-256 cbce362b27376f86f544794fd84751c4036763e446d98f02742f3d65ffd2d5db

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 dd2232dc1aa2ad08e077fd21722a65c5ea767d3fe5027be2ab73dad63a683721
MD5 aaf59c04779a6ccb80c809d9a36b2747
BLAKE2b-256 1017d80444df351c733347d1eb0d1acd90b320c31dd326e30fea6895e2360a00

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp313-cp313-win_amd64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b74c5ac89c508f9ac7b86cc2945e7cdad3e7b405da4fdd99f870594366e65cf5
MD5 cca5744b4fbd68a44092440f27c89707
BLAKE2b-256 47b6be2cfb2ba945bd58e1fb94605e9f86ee3239fb952e125b9c9de9494ad900

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3a166194c1b00a5e56cfd017397818662a90e8c065a6d88ccfcbcac108f29824
MD5 7f143ed86dc2ed37c4aba326332cf91f
BLAKE2b-256 e496ab0564f23a8c4d1b2247a62e83978dfd42de5a8fc3d0e8af7afef5c0bb64

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp312-cp312-win_amd64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ca93ddd24c100a239adf3e97056d1a0d6c5ede6b9ec6da21cf6d064d0e876002
MD5 a37bc5faf7636c6d5c1688a49743fe66
BLAKE2b-256 bb7f2d103fa6481777086f23e56d1da588ede0c43b2f240d97f9d45e6df64cef

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f71a1a8353f29b61a4f7a0400f42b42026a6a1a0d9c188a38ceaffb00a59e934
MD5 91a1786e27c7856068b8c3557373a942
BLAKE2b-256 19ec0c697afbf76c4296db3235d261c0d90657ebed87d9cbdc2a48ed4275b4e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp311-cp311-win_amd64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b9cc541f4ca1d41b0effe3ab13d9eb06eae225d482f1c3c84c3857f6968c18da
MD5 c7e26466c6dc8185f01237f159f1918d
BLAKE2b-256 dffc95879ea1dee40f404df6ab70c8ecb5c33aea105d962790a06d67f930e920

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 322e32843860cc849d415d932012cae4bf4e089b12c97be95ac8571bc45fcd6c
MD5 beb6628528b798827c325465c8c29435
BLAKE2b-256 3e468588f838f97020efe74c528f6d69da6e10ee48b6fb8d361441c3c48ca6a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp310-cp310-win_amd64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e766f7edb88dd6df1a898a4ee050b4669000453409719ab7f031df33323bedd2
MD5 5a261d836d81cef974c74ef66fd80ca2
BLAKE2b-256 3c97df491439fa060802e7677361e42f6d03b63278a98ab5dfc5ff8064313f74

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5b829f2b33506affcd050bfc2b8957a9d5a9838abf2523c1c77723849069fd19
MD5 34cdd03b96b2008a60f11870c717517e
BLAKE2b-256 d23c8aef133b25d0eaa7076d95fae093041b466d19963044958a46d87cc01364

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp39-cp39-win_amd64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ship_framework-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ship_framework-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4b291714c4ef6b0b294bd0f05350f7e6ce58673e3b6fd2f0b24bb6ac3349c83c
MD5 ad04c9bc4bfd0e61784783362b3818ca
BLAKE2b-256 832450732235ac060743ef981e1455f0d8ca73e1b80be71f8e098e59226b20ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for ship_framework-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_to_pypi.yml on pasiweber/SHiP-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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