Skip to main content

Symbolic Regression/Equation Discovery Toolkit

Project description

SRToolkit: Symbolic Regression / Equation Discovery Benchmark Toolkit

SRToolkit logo

CI PyPI Python License: GPL v3 Docs

Documentation:: https://smeznar.github.io/SymbolicRegressionToolkit

What is SRToolkit?

The SRToolkit is a comprehensive Python toolkit designed to accelerate research and development in Symbolic Regression (SR) / Equation Discovery (ED). It provides a robust, easy-to-use framework for benchmarking, rapid prototyping, and mathematical expression manipulation.

Core Features

SRToolkit provides a straightforward interface for:

  • Implementing new Symbolic Regression approaches and evaluating their performance against other approaches.

  • Benchmarking Symbolic Regression approaches using built-in benchmarks (currently Feynman and Nguyen) or custom data.

  • Experiment organization and postprocessing of results.

  • Converting expressions into expression trees or fast, callable NumPy functions.

  • Generating random expressions by defining the symbol space or a grammar.

  • Estimating constant parameters of expressions against real-world data.

  • Comparing and measuring the distance between expressions.

Installation

To install the latest stable release of the package, run the following command in your terminal:

pip install symbolic-regression-toolkit

Some built-in approaches (currently EDHiE) require extra dependencies (PyTorch and pymoo). To install them alongside the package, use the approaches extra:

pip install 'symbolic-regression-toolkit[approaches]'

Alternatively, you can install the latest build directly from the repository with the command (Recommended):

pip install git+https://github.com/smeznar/SymbolicRegressionToolkit

Examples

1. Expression Manipulation (The Toolkit Core)

SRToolkit offers fundamental utilities for working with mathematical expressions as tokens, trees, and executable code—the building blocks for any SR approach.

import numpy as np
from SRToolkit.utils import compile_expr, tokens_to_tree, SymbolLibrary, expr_to_latex

# Create an executable function from the expression
expr = compile_expr(["X_0", "+", "X_1", "*", "C"])

# Calculate the output at two points (1, 2) and (2, 5) with C=3
data_points = np.array([[1, 2], [2, 5]])
constants = [3]
output = expr(data_points, constants)
# Variable "output" should now contain np.array([7, 17])

# Use a SymbolLibrary as a context manager to avoid passing it to every call
with SymbolLibrary.default_symbols(num_variables=2) as sl:
    # Create an expression tree from the token list
    expr_tree = tokens_to_tree(["X_0", "+", "X_1", "*", "C"])

    # Transform the expression into a list of symbols in postfix notation
    postfix_expr = expr_tree.to_list(notation="postfix")

    # Create a LaTeX string of the expression for clear presentation
    expr_latex = expr_to_latex(expr_tree)

2. Benchmarking and Evaluation (The Main Use Case)

The primary advantage of SRToolkit is its robust benchmarking framework, allowing you to quickly evaluate and compare different Symbolic Regression approaches.

from SRToolkit.approaches import EDHiE, ProGED
from SRToolkit.dataset import Feynman
from SRToolkit.evaluation import LoggingCallback
from SRToolkit.experiments import ExperimentGrid

# Load the Feynman benchmark and pick two 2-variable datasets to run on.
bm = Feynman()
ds_names = bm.list_datasets(num_variables=2, verbose=False)
dataset1 = bm.create_dataset(ds_names[0])
dataset2 = bm.create_dataset(ds_names[1])

# Define the SR approaches to benchmark.
# EDHiE requires a pre-trained/adapted model state; ProGED needs no time consuming adaptation.
edhie = EDHiE()
proged = ProGED()

# Map each (approach, dataset) pair to a file where the adapted model state will
# be saved. Both datasets reuse the same file here because they share the same
# number of variables, so one adapted state covers both.
adapted_states = {edhie.name: {ds_names[0]: "adapted_state_2_vars.pt", ds_names[1]: "adapted_state_2_vars.pt"}}

# Build the experiment grid: every combination of approach × dataset will be run
# num_experiments times (with different random seeds). Results are written under
# results_dir, specifically to "results_dir/{dataset}/{approach}/exp_{seed}.json".
eg = ExperimentGrid(
    approaches=[proged, edhie],
    datasets=[dataset1, dataset2],
    num_experiments=2,
    results_dir="../results/",
    adapted_states=adapted_states,
)

# Write a shell script of CLI commands that can be executed in parallel, e.g.:
#   cat commands.sh | parallel -j 4
eg.save_commands("commands.sh")

# Run adaptation for any approach/dataset pair whose adapted state file is missing.
# This is a no-op if all state files already exist.
eg.adapt_if_missing()

# Collect all pending jobs (skip any whose result file already exists on disk).
jobs = eg.create_jobs(skip_completed=True)

# Run each job sequentially in this process. To parallelize, use the generated
# commands.sh instead.
for job in jobs:
    job.run()

# See how many jobs are completed
eg.progress()

Additional examples can be found in the examples folder or in the official documentation.

Roadmap 🗺️

In future releases, our primary focus will:

  • Expanded Library of Approaches: Add more Symbolic Regression approaches to the toolkit.

  • Result Visualization: Implement a robust visualization and result aggregation framework for SR results.

  • Simplification: Implement a better (more accurate, efficient, and stable) simplification system for expressions.

  • Constraints: Implement more robust expression generation constraints using techniques like attribute grammars.

  • Improved Benchmarking: Improve the robustness and efficiency of the benchmarking framework (continuous).

  • Advanced Expressions (Distant Plan): Implement support for different types of expressions, such as ODEs and PDEs.

Contributing 🤝

We welcome contributions! Whether you're adding a new benchmark, implementing an SR approach, fixing a bug, or improving the documentation, please feel free to open a issue on the Github page or submit a Pull Request (PR) with a clear description of your changes.

We are especially looking for contributions of:

  • New Benchmarks and Datasets.

  • Implementations of additional Symbolic Regression Approaches (once the core framework for comparison is finalized).

Instructions on how to contribute can be found in the Contribution Guide.

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

symbolic_regression_toolkit-1.6.0.tar.gz (363.8 kB view details)

Uploaded Source

Built Distributions

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

symbolic_regression_toolkit-1.6.0-cp313-cp313-win_amd64.whl (457.3 kB view details)

Uploaded CPython 3.13Windows x86-64

symbolic_regression_toolkit-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (903.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

symbolic_regression_toolkit-1.6.0-cp313-cp313-macosx_11_0_arm64.whl (466.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

symbolic_regression_toolkit-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl (465.7 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

symbolic_regression_toolkit-1.6.0-cp312-cp312-win_amd64.whl (458.1 kB view details)

Uploaded CPython 3.12Windows x86-64

symbolic_regression_toolkit-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (907.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

symbolic_regression_toolkit-1.6.0-cp312-cp312-macosx_11_0_arm64.whl (467.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

symbolic_regression_toolkit-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl (466.5 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

symbolic_regression_toolkit-1.6.0-cp311-cp311-win_amd64.whl (456.3 kB view details)

Uploaded CPython 3.11Windows x86-64

symbolic_regression_toolkit-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (920.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

symbolic_regression_toolkit-1.6.0-cp311-cp311-macosx_11_0_arm64.whl (465.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

symbolic_regression_toolkit-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl (466.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

symbolic_regression_toolkit-1.6.0-cp310-cp310-win_amd64.whl (455.8 kB view details)

Uploaded CPython 3.10Windows x86-64

symbolic_regression_toolkit-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (892.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

symbolic_regression_toolkit-1.6.0-cp310-cp310-macosx_11_0_arm64.whl (466.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

symbolic_regression_toolkit-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl (465.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file symbolic_regression_toolkit-1.6.0.tar.gz.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0.tar.gz
Algorithm Hash digest
SHA256 fa6d5930818175ad1008e923ac2a82ad9f6898d268a2613b53da70e841eee8e9
MD5 594e330b38152735592a7cd1350e8d1c
BLAKE2b-256 8fa789685c0673c35801e6d25051f71c692a18d8e6fab7780e877effe3d36372

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0.tar.gz:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 42c4356707f762ce80a527463d65f051863a24b8c8ea312b4befaa174105d1e4
MD5 9eeb627ae42914037c8afce7524721af
BLAKE2b-256 d34ee753ba6646375db6e5ca34a302f46a931df1ddcd80ca3e7a7d47dcc2d648

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ee82a3c48c45eaf5fec51832480a9d2c86eed13a0f25cb6ac304b2db4aa46a31
MD5 632e412cf155118f353b0e7c852783b5
BLAKE2b-256 367bca3d6322858036ab4bced7e79059aa96601f676e4401215aba1ae8771dd1

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9188335a0a2c08f2d16ea514d2294ff8a1a7a9fce95327ffb181584612601227
MD5 1cad35646f57206b716c2ad254c8b89c
BLAKE2b-256 400145a668525d8ac233627b597c2c94bc07350faa18aa2efb7dd10d16f174e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 00d9d7743f1b18ef795cd42a7d432ec3da41f908c7a40c04eb1b078c5752eb29
MD5 c35507650ababe70ca84880447662961
BLAKE2b-256 0020ef095262f23c6a291221c6d2ba3cf527509a3b90f2dfd2ad822a46f2fa67

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 62afaa973f1b61093c5cd0e56bcd8d360a40f66907d0c38315aaba26b3876a76
MD5 a9d0609b6c8cd71c85d0a37666ffab35
BLAKE2b-256 7bf34d836b928aa19923fb66aa983d3a3886d6a343bcd64f8e154c4a0aff0dd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87115a272f9016963d985ce62e6ad269945e1cd5173cd3b4526c155aff1358bf
MD5 2afb2bcd1d1f23a375cd0f6f587fa0c1
BLAKE2b-256 f07aabb359854f2b8a934fdd06bd6afbd6b9192e7b52f83cfde7b9e64921b1a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96322cf72db7fa58e8c2009126eb0aac7743c46a3cdc2693e0b8a8fb8ce19f7d
MD5 b856ce8c8f783b46407cae5f5935f68f
BLAKE2b-256 8c42446570eb36dd25995d2189b70f3e493cc7e1824716e20a89460bab5e827f

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 6602660e75fca9809d897562313d2b62b597088b3213d158c3a48ac8da4eaa37
MD5 a8d731a84cd3648777284f625848f5a6
BLAKE2b-256 7453250547da58f6ecd50ca21ca9313d56a9e2dba4a1f2ea3e0894872ac33499

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 09a731a486143e1bdf33fecc9f46fc6ec3967aa1a64989188a39fce026af96f3
MD5 cd25522745f1f0d2db911c5d63e614d0
BLAKE2b-256 a08d16eb4535e434f210d9ef27f91d1dc150074adc924a791dcb56b6d59f3f97

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c7796d61431467a0f3515de7fdcb41f04a560225c749a82cbf744363089de8fa
MD5 965809c39e5aa7ccd876a797cb3fe3e6
BLAKE2b-256 9d1807cebd5de14c04269ef737b5d889cebbbf9c0d380d78f26d694ee48f54f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ecee3443a7fe55a33908910ef3fb970cb28ec74078b0d42759666247fc94eb08
MD5 354a7b76a0e5741320a248e2f713d734
BLAKE2b-256 0047996d9cb19ab4eee5e883764bddf498d36a7ec2eebe155508cc2a9308e491

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d703e11ed33da99654dbabf24b1956d20a5f945d30a7cae3afbc4e68fd322fbe
MD5 3080b092804acddb2d484813c9c286b8
BLAKE2b-256 e4b6a5570feb736bcd0d8d9d997f5b9a2288661141fd612e29353074a4f6c37a

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 19df89c28a2c8c763ae5c208acc5ab859646674d6d27e013423e3d4f69f50266
MD5 b93d25b126767c01726a6da6c484daf7
BLAKE2b-256 612cebcdae85e0bb1eadb0752eca2b5d952ecd1fef296d8e063ca2827a1d71a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dae67a732f9e44b7ef269471f587f8a0f6aa22819fd61648fbfe097d42f2c280
MD5 2649d3594a2b6673030ed0544a7b8b33
BLAKE2b-256 792cf5a4fc77a9d815e83df1d5a9a93451a7f88264352163f5fca22b728204e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3bc50be6947aa5df869d7667535737aa520ba815969603cb9164695b3f60381a
MD5 7666dfa70637cb0dc6333b24b80cc860
BLAKE2b-256 7a74a2817dba7b8a3edd6d4377032d626d0ca7b3bc8b6714fb932589fd1e1bfa

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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

File details

Details for the file symbolic_regression_toolkit-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for symbolic_regression_toolkit-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 31edcb8adcd8058f5fce53284a433560e564e4636360949892885ad364070282
MD5 9109f3c9bcd575b1a73cccaa26197299
BLAKE2b-256 07fab76462669cbaa0076f262efa2f18134fd29200497b2c51141185d2686018

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_regression_toolkit-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: publish.yml on smeznar/SymbolicRegressionToolkit

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