Skip to main content

Morphological tree learning utilities with a stable morphology facade

Project description

MTLearn

CI Package

MTLearn (Morphological Tree Learning) is a C++/Python research library for learnable connected operators based on morphological trees. The Python package is published as mtlearn.

The library explores a simple idea: connected morphology can become a structural prior for deep neural networks. Instead of processing images only through local pixel-wise operations, connected operators reason over components, regions, shape, contrast, and hierarchy. This makes them naturally interpretable and well-suited for tasks where structure matters.

Classical connected filters are powerful, but they usually depend on hard keep/discard decisions and manually selected attribute thresholds. This limits their integration into end-to-end trainable neural architectures.

MTLearn provides a stable implementation platform for this research direction. It currently includes Connected Filter Preprocessing (CFP), and is intended to grow toward trainable connected-operator layers, differentiable or learnable attribute criteria, self-dual tree representations, intermediate network insertions, and scalable implementations.

Main Features

  • Connected Filter Preprocessing (CFP): the current main model, available as mtlearn.layers.ConnectedFilterPreprocessingLayer. CFP replaces hard connected-filter decisions with a differentiable sigmoid gate over normalized tree-node attributes.

  • Stable morphology interface: mtlearn.morphology builds max-trees, min-trees, and tree-of-shapes through a backend-independent API.

  • Trainable connected morphology: designed as an implementation platform for connected morphology as a learnable structural prior in deep neural networks.

  • Research-ready validation: includes C++ tests, Python tests, gradient checks, reference implementations, notebook validations, and public dataset download helpers.

Install

The Python package is available from PyPI as mtlearn:

pip install mtlearn

See docs/installation.md for installation instructions and docs/development.md for source builds, validation, and releases.

Quick Start

Build a morphology tree and compute attributes:

import numpy as np
from mtlearn import morphology

image = np.array([[1, 2], [3, 4]], dtype=np.uint8)
tree = morphology.create_max_tree(image)

_, attributes = morphology.compute_attributes(
    tree,
    [morphology.AttributeType.AREA, morphology.AttributeType.COMPACTNESS],
)

print(attributes.shape)

Create a CFP layer and run a forward pass:

import torch
from mtlearn import morphology
from mtlearn.layers import ConnectedFilterPreprocessingLayer

cfp_layer = ConnectedFilterPreprocessingLayer(
    in_channels=1,
    attributes_spec=[(
        morphology.AttributeType.AREA,
        morphology.AttributeType.CIRCULARITY,
    )],
    tree_type="max-tree",
    device="cpu",
)

x = torch.tensor([[[[1, 2], [3, 4]]]], dtype=torch.float32)
y = cfp_layer(x)

assert y.shape == x.shape

Examples and Notebooks

Executable examples are available in notebooks/.

Install notebook dependencies with:

pip install "mtlearn[notebooks]"

The main public experiment example is:

notebooks/experiments/Example_screws_filtering.ipynb

Implementation Notes

ConnectedFilterPreprocessingLayer is the recommended implementation for new CFP experiments.

Tensor operations, trainable parameters, and cached attributes can live on CUDA when device="cuda". Morphology-tree construction is still performed by the C++ backend on CPU.

The main implementation uses an implicit Jacobian formulation. The dense region-pixel matrix is not materialized during normal training; tree-ordering metadata is used to perform the equivalent reconstruction and backward accumulation more compactly. This reduces memory pressure compared with explicit region-pixel Jacobian construction.

Reference implementations based on explicit Jacobians and CPU tree traversals remain available for gradient checks, comparisons, and debugging.

MTLearn uses a C++ morphology backend internally through mtlearn::morphology. User code should interact with morphology through the public Python facade mtlearn.morphology, rather than depending on backend-specific APIs.

The backend is MorphologicalAttributeFilters / mmcfilters, but the top-level Python package mmcfilters is not required as a runtime dependency of mtlearn.

Current Scope

MTLearn is a research-oriented library. CFP is the first validated member of a broader planned family of trainable connected-operator layers. The current implementation supports max-tree and min-tree CFP workflows, multi-attribute groups, dataset-level attribute normalization, cached preprocessing, and PyTorch forward/backward for CFP parameters on CPU or CUDA tensors.

Citation

If you use the CFP layer in your work, please cite:

Wonder A. L. Alves, Lucas de P. O. Santos, Ronaldo F. Hashimoto, Nicolas Passat, Anderson H. R. Souza, Dennis J. Silva, Yukiko Kenmochi. A trainable connected filter preprocessing layer based on component trees. International Conference on Pattern Recognition (ICPR), 2026, Lyon, France. ⟨hal-05575141

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

mtlearn-1.0.6.tar.gz (233.8 kB view details)

Uploaded Source

Built Distributions

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

mtlearn-1.0.6-cp314-cp314-win_amd64.whl (485.4 kB view details)

Uploaded CPython 3.14Windows x86-64

mtlearn-1.0.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (507.9 kB view details)

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

mtlearn-1.0.6-cp314-cp314-macosx_11_0_arm64.whl (401.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

mtlearn-1.0.6-cp313-cp313-win_amd64.whl (473.7 kB view details)

Uploaded CPython 3.13Windows x86-64

mtlearn-1.0.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (507.7 kB view details)

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

mtlearn-1.0.6-cp313-cp313-macosx_11_0_arm64.whl (400.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

mtlearn-1.0.6-cp312-cp312-win_amd64.whl (473.7 kB view details)

Uploaded CPython 3.12Windows x86-64

mtlearn-1.0.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (507.6 kB view details)

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

mtlearn-1.0.6-cp312-cp312-macosx_11_0_x86_64.whl (434.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

mtlearn-1.0.6-cp312-cp312-macosx_11_0_arm64.whl (400.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

mtlearn-1.0.6-cp311-cp311-win_amd64.whl (471.5 kB view details)

Uploaded CPython 3.11Windows x86-64

mtlearn-1.0.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (508.8 kB view details)

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

mtlearn-1.0.6-cp311-cp311-macosx_11_0_x86_64.whl (430.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

mtlearn-1.0.6-cp311-cp311-macosx_11_0_arm64.whl (399.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

mtlearn-1.0.6-cp310-cp310-win_amd64.whl (470.3 kB view details)

Uploaded CPython 3.10Windows x86-64

mtlearn-1.0.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (508.0 kB view details)

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

mtlearn-1.0.6-cp310-cp310-macosx_11_0_x86_64.whl (429.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

mtlearn-1.0.6-cp310-cp310-macosx_11_0_arm64.whl (398.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

mtlearn-1.0.6-cp39-cp39-win_amd64.whl (478.2 kB view details)

Uploaded CPython 3.9Windows x86-64

mtlearn-1.0.6-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (505.8 kB view details)

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

mtlearn-1.0.6-cp39-cp39-macosx_11_0_x86_64.whl (429.5 kB view details)

Uploaded CPython 3.9macOS 11.0+ x86-64

mtlearn-1.0.6-cp39-cp39-macosx_11_0_arm64.whl (398.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file mtlearn-1.0.6.tar.gz.

File metadata

  • Download URL: mtlearn-1.0.6.tar.gz
  • Upload date:
  • Size: 233.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mtlearn-1.0.6.tar.gz
Algorithm Hash digest
SHA256 1efcfd2ca932b68c929280905ed6f63a6432d602e18f0d5fd6be09d960e4fd96
MD5 4e1cedd8db8dc9fc40bd06b192440179
BLAKE2b-256 ee934b5c8b840d49bca9afbfe7318321543d62bd4e20bc15224e7c2b57f8d9c7

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: mtlearn-1.0.6-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 485.4 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mtlearn-1.0.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 965844dc6138cb150268f576f26e48e08aa11784069f719436a998a14a398239
MD5 e33e9286d4c036802be3ed618d064a27
BLAKE2b-256 39df0a0fd84b96d3d0246dba369abcb5a4e99a7259d568c4eb6535813c420fc7

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fe8add1a48ac9d6c205894d59062e1ef599ad690a638c3eb5bffe61e832861a7
MD5 c48913bf53257768a1fb4d3cbdba64ea
BLAKE2b-256 0121a4abd79b15c7ce0fdb06914725a30d73cbf907839e7b408c3264921c0c58

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b19cbe8a7c87d9a638ce8a4a5e488bbc2c5ed06d4e70e5b37d7454bf6d22771
MD5 850fea3b52b51fccd052785d50ee3e0e
BLAKE2b-256 575e14f485b983834bb33d6d9b84a7d1360fd5216fbfbe4b8d1f14c536878f76

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: mtlearn-1.0.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 473.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mtlearn-1.0.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7310d140980ab9a5c2aaec1c5224593a37ec2b969cdbc27a0ea946cc3787470a
MD5 10c202a42145eebeb396f69698899fe3
BLAKE2b-256 037690cbc92e63c0f7ff2f3b4544487018d04bb7ebba9bc33a4c0029d65d58c0

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2a574392cb4b499f04c696222d8865c4e2e722d067bb5ca2be84378c5c81fe36
MD5 024e65acc1f1d7a83ec9e61feb895cf3
BLAKE2b-256 23f3886ceb4b77682860f622d68f55e5b8f2ea69184df480d757093643a9a78c

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b74d2b51f8a94748ed7d5b2b6ea37ab2f512e819f82e11dd15a0b9c69b809da7
MD5 23ed6a5b4c78debba07167ac109a4bc7
BLAKE2b-256 44f790a2cc95c2675c1cca1070dabfba2534903d245384e19dacdcabd46be7a6

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: mtlearn-1.0.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 473.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mtlearn-1.0.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c3df18421f2c50f1818bf2cc874612a6854fd691526843a629c98bcf1b2db1c3
MD5 30e8b256323797da2507595caa8bc2a4
BLAKE2b-256 a058a930363ef7d27abf41b92eab35b0c1ac10cf7c333c5db30c6fcf1147a8a8

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 531c871174225cd83fd55e162a517680c2366753ccb584cf47545d1af297e541
MD5 99d7cf1a4c5fc73fbe28755450a9c69c
BLAKE2b-256 68cdbf434e8964677e0e5cb95f7c1d2902493edfed17ba7e14242303a34c1ad9

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 9b99cc6f5c0862e01a212881c47cea11e73595748a8951d95d831afa66200ab8
MD5 ba8253f8f2fbe43c189b4eb9adbce370
BLAKE2b-256 0e4c891f266415df49264c23bb782f6d0f43b0229925eab60336f3942f8ac162

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a458b25f41aeb6ae09b5fa470dc6d9c10a27ae8baf0e7ec10347565958ab8151
MD5 439269f0c9fd66f1c172849177493b38
BLAKE2b-256 56ba96462fcc3955478857d4109142415e9e4415de57676e14c8e04b9a3c30b3

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: mtlearn-1.0.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 471.5 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mtlearn-1.0.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c1b4eb4f6f3cefd356d9a3b510cb052c7db71bd74ce050bda5b4a41e76a0aa2e
MD5 9af8d21427554d3db64014c8bc7632aa
BLAKE2b-256 ccfea0543d0e3b66f0a83b50e3b264403ec639ee1fa2068f815f5f8399f901ac

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f8a3791efab9503d35ab3887279403faa7a637e65cc400dbf27000cc395bcbbe
MD5 763fe57c87598f02a78db47aa1be5e30
BLAKE2b-256 8307da62c4a05daa403526729a4671ee1c47e123189d04259fbcf62d2941ae29

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d502f186231581098f705e4d901e4d69503b25dbb0bdd098e1b5226cea9bb06e
MD5 fd38a04135c35df3e1543fe84d1a0d76
BLAKE2b-256 9248159fb569df6273f664318e120483fbaf6adfd6e2ea168a864b10bd306eea

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 645d2e49d59d97e65b4b1311c548bf204dcb23fd7664885165740a0163eae5e5
MD5 4527ef92dbcb7e0f1a611c6379a70a65
BLAKE2b-256 db7bd695b4d0fc9d276e5b1ee08e46eb1ac167708f509bdf10c698d23b35c34e

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: mtlearn-1.0.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 470.3 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mtlearn-1.0.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 319b0c40794f1480fdbdca11e0c408ad089b49d63d3fd2e3b9ab627594070ed1
MD5 29fde98c746622dfa5007d5d186f1ccc
BLAKE2b-256 eff1024583aeccb50ab16c037ac2c0b95f4c8f2949bdedd119872e39426734ee

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 938412d5d5af500d4683fd1bc459e1228d23e01e6174e84d03867a3409f5e0a4
MD5 c2ae843e22f43a2ea6f250035d358ba7
BLAKE2b-256 5c1f1acad79bceba56b807a3860d19793b8cea1b46195a3f17858c580fa635f1

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 54f6d634e4bd96a23dfcb5006ea31427d27ca10e9306413038b1b6e2861c4c03
MD5 5a7b7d3c65ef033254ce35d50c262912
BLAKE2b-256 6726a11dcad21984b10fdf82b556a2419898a07eb8f1717a81c0bb6683dff0d4

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15fb8888898cb53a6d25d944e5be420b7a569c7a6e572b33c8fd4068512979ab
MD5 83fecda4025970471eb50e071291ddd6
BLAKE2b-256 c613f8a6cc529506d6a7f500b6e326a4e5c08e02c229fd59184eeb14bbf1f174

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: mtlearn-1.0.6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 478.2 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mtlearn-1.0.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3657b8d776c97f18c721186dccb8b38dbbb244460f9916361de0010a8e96c364
MD5 7ca2d923d03ee91b275cad49511c3a90
BLAKE2b-256 3ec271dcdbe7a586cc372c8d8cc0ced2da4003a7c52e9aa0a1c0b0ea0956e121

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e9f9c84f1ee0eb4616106b0c80320488c17552ff3337c37c3c2c40b16a44f175
MD5 3d4255cf6091801c8f96232f4188a3f9
BLAKE2b-256 dfa64b2b6751ae6f5854d7dfbc2b13b68630ab2c7f265424a3a7e07ed91863e0

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 affa0f051c312eccc8a312b92b60091e63591b5096b8a5305994d744bf66b6bb
MD5 b3027c61c0a6c739b702eb4c68685aeb
BLAKE2b-256 897c71bb99e6c1347e5210d64fe71f6d23b6a4c07573771e41d3d15adaa72819

See more details on using hashes here.

File details

Details for the file mtlearn-1.0.6-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtlearn-1.0.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b67bf29a5e0bcd69dffe6e1775bdc0f3b7656195ac8e9ce2fbe0e131b68c8e8
MD5 651c6a090329bb4d0cb12b221693e110
BLAKE2b-256 8492cf1395aff2adc7327db353bc75ca7327ebafea126984e391e0d4eff4a2c9

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