Skip to main content

MDescriptor

MDescriptor is a batch-oriented periodic atomic-descriptor library. The numerical kernels are implemented in C++17 and all Python descriptors share one input/result/lifecycle contract.

MDescriptor 是面向批量周期结构的原子描述符库。数值核心使用 C++17;所有 Python 描述符共享统一的输入、结果和生命周期契约。

Layout / 布局

The public namespace is intentionally small:

src/mdescriptor/             installable package
src/mdescriptor/core/         Descriptor, StructureBatch, DescriptorResult
src/mdescriptor/descriptors/
  standalone/                 no model required (matrices/, many_body/, local/, rotational/)
  model_backed/               graph seam plus NEP, DPA4, DPA4C
src/mdescriptor/models/assets/ packaged, hash-verified model resources

standalone descriptors never require a model file. model_backed descriptors always resolve a model resource (a packaged default or an explicit model= path). There are no network downloads or implicit model discovery.

standalone 中的描述符不需要模型文件;model_backed 中的 NEP、DPA4、DPA4C 始终解析模型资源(内置默认模型或显式 model= 路径)。不会联网下载,也不会 扫描目录自动发现模型。

Installation / 安装

The base package requires Python 3.10+, NumPy and array-api-compat. ASE is optional and is only needed for StructureBatch.from_ase or direct ASE input. Sparse output is provided as SciPy CSR by the optional sparse extra.

基础包需要 Python 3.10+、NumPy 和 array-api-compat。ASE 只在使用 StructureBatch.from_ase 或直接传入 ASE 对象时需要;稀疏输出由可选的 sparse extra 提供。

python -m pip install .
python -m pip install ".[ase]"
python -m pip install ".[sparse]"

DPA4 and DPA4C are CPU-only pure-NumPy implementations. Their official .pt checkpoints are parsed by the bundled restricted reader without importing or installing Torch. No network model download is performed.

Input contract / 输入契约

import numpy as np
from mdescriptor import StructureBatch

batch = StructureBatch(
    numbers=np.array([1, 8], dtype=np.int32),
    positions=np.array([[0., 0., 0.], [1., 0., 0.]]),
    cells=np.eye(3, dtype=np.float64)[None] * 12,
    pbc=np.ones((1, 3), dtype=np.int32),
    offsets=np.array([0, 2], dtype=np.int64),
    ids=("water-0",),
)

StructureBatch validates contiguous arrays, finite positions/cells, nonsingular cells, positive atomic numbers, monotonic offsets and fully periodic pbc == (1, 1, 1). ASE conversion is available through StructureBatch.from_ase(...).

Descriptor API / 描述符 API

Algorithm classes live under mdescriptor.descriptors and use canonical names:

from mdescriptor.descriptors import SOAP

soap = SOAP(species=[1, 8], r_cut=4.5, n_max=4, l_max=3, average="off")
result = soap.compute(batch)

assert result.level == "atom"
assert result.values.shape == (batch.atoms, soap.feature_count)
assert len(result.labels) == result.values.shape[1]

with SOAP(species=[1, 8], r_cut=4.5, n_max=2, l_max=2) as descriptor:
    result = descriptor.compute(batch)

Every descriptor has idempotent close(), a closed property and synchronous context-manager support. Computing after close raises ClosedDescriptorError. Instances are synchronous and not promised to be thread-safe.

每个描述符都提供幂等 close()closed 属性和同步上下文管理器;关闭后计算 会抛出 ClosedDescriptorError。实例是同步的,不承诺线程安全。

DescriptorResult contains values, level (atom, structure, or pair), structure_ids, row offsets, stable labels, JSON-safe metadata, per-row samples, and feature_count. The descriptor itself also retains the latest JSON-safe metadata and its configuration after close(). The standard shapes are (N, F), (S, F), and (P, F) for atom, structure and pair outputs respectively.

Registry / 注册表

Built-ins come from one explicit immutable specification list. Imports are lazy and no decorator or filesystem scan is used.

import mdescriptor
from mdescriptor.descriptors import SOAP

print(mdescriptor.list_descriptors())
soap = SOAP(species=[1, 8], r_cut=4.5, n_max=2, l_max=2)
rebuilt = mdescriptor.create_descriptor(soap.configuration)

child = mdescriptor.DescriptorRegistry(parent=mdescriptor.builtin_registry)
child.register(my_spec)

The built-in list separates AssetPolicy.NONE, OPTIONAL (for example MTP potentials), and REQUIRED (NEP/DPA4/DPA4C). The root package exposes stable contracts, registry functions and errors only; algorithm implementations are not re-exported from the root.

Model resources / 模型资源

ModelResource, ModelResolver, LoadedModel and ModelSession are the shared model-resource seam. Resolution is explicit, local and checksum-aware:

from pathlib import Path
from mdescriptor.descriptors import DPA4
from mdescriptor import ExecutionOptions

dpa4 = DPA4(
    model=Path("/path/to/official-checkpoint.pt"),
    execution=ExecutionOptions(device="cpu"),
)
result = dpa4.compute(batch)

The DPA4/DPA4C neural-network internals remain vendor/black-box adapters in this phase; they are intentionally isolated for a later dedicated DPA-series refactor.

Development / 开发

.venv/bin/python -m pip install -e . --no-build-isolation
.venv/bin/python -m pytest --import-mode=importlib tests -q

The extension is private (mdescriptor._native). C++ shared math and batch helpers live in named headers under cpp/include/mdescriptor/detail/.

MDescriptor is licensed under the GNU General Public License v3.0; see LICENSE.

Download files

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

Source Distribution

mdescriptor-0.2.1.tar.gz (26.3 MB view details)

Uploaded Source

Built Distributions

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

mdescriptor-0.2.1-cp314-cp314-win_amd64.whl (27.2 MB view details)

Uploaded CPython 3.14Windows x86-64

mdescriptor-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (26.9 MB view details)

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

mdescriptor-0.2.1-cp314-cp314-macosx_11_0_arm64.whl (26.7 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

mdescriptor-0.2.1-cp313-cp313-win_amd64.whl (27.1 MB view details)

Uploaded CPython 3.13Windows x86-64

mdescriptor-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (26.9 MB view details)

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

mdescriptor-0.2.1-cp313-cp313-macosx_11_0_arm64.whl (26.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

mdescriptor-0.2.1-cp312-cp312-win_amd64.whl (27.1 MB view details)

Uploaded CPython 3.12Windows x86-64

mdescriptor-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (26.9 MB view details)

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

mdescriptor-0.2.1-cp312-cp312-macosx_11_0_arm64.whl (26.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

mdescriptor-0.2.1-cp311-cp311-win_amd64.whl (27.1 MB view details)

Uploaded CPython 3.11Windows x86-64

mdescriptor-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (26.9 MB view details)

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

mdescriptor-0.2.1-cp311-cp311-macosx_11_0_arm64.whl (26.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

mdescriptor-0.2.1-cp310-cp310-win_amd64.whl (27.1 MB view details)

Uploaded CPython 3.10Windows x86-64

mdescriptor-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (26.9 MB view details)

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

mdescriptor-0.2.1-cp310-cp310-macosx_11_0_arm64.whl (26.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file mdescriptor-0.2.1.tar.gz.

File metadata

  • Download URL: mdescriptor-0.2.1.tar.gz
  • Upload date:
  • Size: 26.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mdescriptor-0.2.1.tar.gz
Algorithm Hash digest
SHA256 082281f750fd51322343cf54b6db5dda59a1cb7a926bfc2ad051e73f5d824732
MD5 4c6531a1e8a856ae7417ecb576732175
BLAKE2b-256 59ab1431cefabd8c63f48e8f014b1d3166e73046cac9d4d8263f430d72de7eac

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1.tar.gz:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: mdescriptor-0.2.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 27.2 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mdescriptor-0.2.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d9b3019704cb798f039b8339cb83fa0fc3d1f045df86f483ae7f930339f58302
MD5 54a68791b1eded546b8472101d040f3d
BLAKE2b-256 8429182b19c34dfbc7d624394ca255d6dbc2b9398a1c2904e38c24a14e23394c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp314-cp314-win_amd64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 59c9d522e3aae80cce9658653f0570972e6997a1f8fcec426d08f094f3fdf34f
MD5 949be477074c98a4465a96515dc45183
BLAKE2b-256 7ee523db9ae83c96a1e61d825526c06bcf0df7e7504afa60e9247a0ebcbbbb6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 797dfcb0d7d322ab493b5cfcb6e80438ffbaff27530f05e6ae8d60ffe25522cd
MD5 875b34dee05ff8b508ba3dc86600a7e0
BLAKE2b-256 51c7e522003b77da94b512d4b70cda0bcb4801fb9e5a097a2d28e1b4246bbafa

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: mdescriptor-0.2.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 27.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mdescriptor-0.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 440912ee8377104d20f4ec40c75dd3e6d4dd5e80c15530dad580d9a5546701f7
MD5 4b4bbaee48fa11b46fc585e9edff77b7
BLAKE2b-256 f6237fc2a62226bad280f59b96b42e160cacb2708636e5e2a7e0c2a46c7aa551

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp313-cp313-win_amd64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b87059525cd553a27ac9bcc277bf2fe0fa7f023ae92c434b711960c41ae7972a
MD5 e2b7662141c3fc4643062ba77fdeb2d9
BLAKE2b-256 667439161bb768615f9eeb25af965b6a728b3c764c980fca26744a2853a7d5d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 556bf0bd16ad9396a2adf3b78add5e8fdb018c8be73fa432f7821a6e61989b86
MD5 832be08e457bccd32144c545b63489a4
BLAKE2b-256 3c46d61d254e90db3579ce776b2e5e735fe98b141b23eaf5501e188179a41872

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: mdescriptor-0.2.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 27.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mdescriptor-0.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 823e1b4be3c69f95ac9c5070b855785e649a7505c299b7689647c975922ae190
MD5 11065962dc82dafadb45087f34289b2d
BLAKE2b-256 485297a4134bab6493b199e09513a76a8420466d054e052233c9d06a8fef2e29

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp312-cp312-win_amd64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 534cf2622f59d9f8d58e0afaf443114f906148d5fcea2cadc8bc0c1f65d0cbb5
MD5 c52350443523d17324bc1facf68cf7d7
BLAKE2b-256 3d2d0bea6e49b2635c4d18a74a653b394d2d635d63e7bf9d7b88835ab031742a

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5753f815a141eae362382529c17c8d012234df9a367be91d663d1e29e7a4870
MD5 40245cbd4415fc6f7f05e8c06aa461e2
BLAKE2b-256 fc7bf403b7388d6be2cb6b65ea39e0c7c66b832a7338e92bd34f6909d348b5e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: mdescriptor-0.2.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 27.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mdescriptor-0.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0a3fa939d3bdbb12cefa3e1b6c8275e11ab26a0a278dd930e0e0590dcd2a15f7
MD5 8203ec7a27ae3709f2d3719e0d36191a
BLAKE2b-256 7398040fa12b38009c121cae0625a4c4edb306c6102461562fec4b2243108082

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp311-cp311-win_amd64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 83789b353bf40444a7b04a2e83346b67afdef98c31f77d64bbc82070e0f65b58
MD5 b3439d5d14e2252e010b208095dbf48a
BLAKE2b-256 cb0f21bca1f722fc3d36deaaa99c7da8960760eb138928b099c8ec94eaeb5e1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 298135ffc3426ea20b7809954f928a1f19a482b291f374616ea6f7ee6581cf2b
MD5 8c07ed25a09d226875d86d5a3b27111a
BLAKE2b-256 7fa4eb39a19aca48c33baf702293d1194938231d19329260bed7ccb41c7c7136

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: mdescriptor-0.2.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 27.1 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mdescriptor-0.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 37df88a6efb701fe6519f758b9a045c70eab53c1ddbaa295700a824dbb5f3d28
MD5 f3ef94150dba70050f25dfa82fb651f2
BLAKE2b-256 e4959eecdfdc20d7ca0c2627e274e22c32b4b3c5b5ce55203a4b280e8e26919e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp310-cp310-win_amd64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 398078f6230f18d6a03b3e6250411ed9c1dc9032bf582fde07fb51fe7fd9b71b
MD5 8de32698973d9f01e906fe518cc4cbd0
BLAKE2b-256 534fa5acea986d494435e7e6a8182c70ece02992ac9d4ec8277d22291d14ce3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

File details

Details for the file mdescriptor-0.2.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mdescriptor-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6cb51fcf07fdafd6350259752d59827603b306455228f06d951058196a313471
MD5 bd8ad56bf40a0b938b614b6575479d50
BLAKE2b-256 bbf247b1439b322a2e4e298706b70b3eb44f6e9225ba1253d95448d388757f0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdescriptor-0.2.1-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on nicheal/MDescriptor

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

Release history Release notifications | RSS feed

0.3.3

16 files

0.3.2

16 files

0.3.1

16 files

0.3.0

16 files

0.2.8

16 files

0.2.7

16 files

0.2.6

16 files

0.2.5

16 files

0.2.4

16 files

0.2.3

16 files

0.2.2

16 files

This release

0.2.1 This release

16 files

0.1.0

21 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page