Skip to main content

Python bindings for ModelSolver library

Project description

dTwin

dTwin is a Python interface to a high‑performance C++ nonlinear model solver capable of solving:

  • Static problems

    • Nonlinear algebraic equations (NLE)
    • Weighted Least Squares (WLS)
  • Dynamic problems

    • Ordinary Differential Equations (ODE)
    • Nonlinear Differential‑Algebraic Equations (DAE)

It is built using the C++ modelSolver library (part of the dTwin framework).

This README explains how to install, understand, and use dTwin step by step, with real working examples.


1. Installation

Install from PyPI repository:

pip install dTwin

Verify installation

import dTwin
from dTwin import modelSolver
print(dTwin.__doc__)

2. What does dTwin.modelSolver solve?

Problem type Description
Static (NLE) Systems of nonlinear algebraic equations
Static (WLS) Weighted least squares estimation
Dynamic (ODE) Time‑domain simulation of ODE systems
Dynamic (DAE) Time‑domain simulation of nonlinear DAEs

Models are described using .dmodl files, a domain‑specific language for defining variables, parameters, equations, limits, controllers, and submodels.


3. Core Python API overview

Enumerations

dTwin.StaticProblem.NLE
dTwin.StaticProblem.WLS

dTwin.DynamicProblem.ODE
dTwin.DynamicProblem.DAE

dTwin.Solution.OK

Vector types (C++ backed)

These are zero‑copy wrappers around C++ memory:

dTwin.DoubleVector
dTwin.StringVector
dTwin.UintVector

They behave like Python vectors:

v = dTwin.DoubleVector(3)
v[0] = 1.0
print(len(v), v)

##4. Examples

There are several examples in the models subfolder.

4.1 Static model example (Power‑flow NLE)

Model file: PF_PV_03.dmodl

This model solves a power‑flow problem with:

  • PV and PQ buses
  • Generator voltage regulation (PV node with limits)
  • Reactive power limits

(Details: see associated arXiv paper.)

Python usage

import dTwin
from pathlib import Path

p_log = dTwin.getConsoleLogger()

# Create real‑valued static model (NLE)
p_model = dTwin.createRealStaticModel(
    dTwin.StaticProblem.NLE,
    p_log
)

# Load model
p_model.initFromFile("PF_PV_03.dmodl")

# Obtain solver
p_solver = p_model.getSolverInterface()

# Solve
status = p_solver.solve()
assert status == dTwin.Solution.OK

# Extract outputs
out_indices = p_model.getOutputSymbolIndices()
out_names   = p_model.getOutputSymbolNames(out_indices)
out_values  = p_model.getOutputSymbolValues(out_indices)

for i in range(len(out_names)):
    print(out_names[i], out_values[i])

p_model.release()

Parameter manipulation

idx = p_model.getParameterIndex("P3_inj")
vals = p_model.getParameterValues(dTwin.UintVector([idx]))
vals[0] -= 0.1
p_model.setParameterValues(dTwin.UintVector([idx]), vals)

p_solver.solve()

4.2 Dynamic DAE example (Generator frequency regulation)

Model file: FreqReg_01.dmodl

This model simulates:

  • Synchronous generator swing equation
  • PI frequency controller
  • Nonlinear network algebraic equations
  • Initial power‑flow solved via a SubModel
  • Fully nonlinear time‑domain simulation

Python usage

import dTwin

p_log = dTwin.getConsoleLogger()

p_model = dTwin.createRealDynamicModel(
    dTwin.DynamicProblem.DAE,
    p_log
)

p_model.initFromFile("FreqReg_01.dmodl")

p_solver = p_model.getSolverInterface()

# Time step (optional)
dt = p_solver.getStepSize()
if dt <= 0:
    p_solver.setStepSize(0.001)    

# Initialize
p_solver.reset(0.0)

out_idx   = p_model.getOutputSymbolIndices()
out_names = p_model.getOutputSymbolNames(out_idx)

# Time loop
t = 0.0
T_END = 20.0

while t <= T_END:
    #change model parameter to simulate transients
    sol = p_solver.step()
    assert sol == dTwin.Solution.OK

    values = p_model.getOutputSymbolValues(out_idx)
    print(t, list(values))
    t += dt

p_model.release()

4.3 Dynamic model with transfer functions (Dorf's example)

Model file: TF_Dorf_E760_PD_Disk_RK4.dmodl.

Features:

  • Laplace transfer functions (TFs)
  • PID (PD) controller
  • Implicit RK4/RK6 integration

No Python code changes are required — simply load the model and simulate as shown above.


5. Memory management (important)

Models are C++ objects.

  • They are automatically released when garbage‑collected
  • You may explicitly free memory (optional):
p_model.release()

This is recommended for long simulations or batch runs.


6. Design notes (advanced users)

  • All vectors are backed by natID's fast cnt::SafeFullVector<T>
  • No implicit memory copies between Python and C++
  • td::String (natID) is transparently convertible to/from Python str
  • Dynamic solvers support implicit DAE solving
  • SubModels allow hierarchical initialization and reuse

7. Requirements

  • Python 3.9+
  • Windows: visual C++ runtimes
  • NumPy (optional, for post‑processing)
  • OS‑specific native libraries bundled in internally

8. License & citation

If you use dTwin in academic work, please cite the accompanying paper (see arXiv link).


9. Summary

dTwin enables research‑grade nonlinear modeling directly from Python while retaining ultra-fast C++ performance.

It is suitable for:

  • Digital twinning
  • Simulation
  • Dynamic simulation
  • Power systems
  • Control systems
  • Nonlinear estimation

Happy modeling 🚀

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

dtwin-1.2.0-cp314-cp314-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.14Windows x86-64

dtwin-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

dtwin-1.2.0-cp314-cp314-macosx_14_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

dtwin-1.2.0-cp314-cp314-macosx_12_0_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.14macOS 12.0+ x86-64

dtwin-1.2.0-cp313-cp313-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.13Windows x86-64

dtwin-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

dtwin-1.2.0-cp313-cp313-macosx_14_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

dtwin-1.2.0-cp313-cp313-macosx_12_0_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 12.0+ x86-64

dtwin-1.2.0-cp312-cp312-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.12Windows x86-64

dtwin-1.2.0-cp312-cp312-macosx_14_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

dtwin-1.2.0-cp312-cp312-macosx_12_0_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 12.0+ x86-64

dtwin-1.2.0-cp311-cp311-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.11Windows x86-64

dtwin-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

dtwin-1.2.0-cp311-cp311-macosx_14_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

dtwin-1.2.0-cp311-cp311-macosx_12_0_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 12.0+ x86-64

dtwin-1.2.0-cp310-cp310-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.10Windows x86-64

dtwin-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

dtwin-1.2.0-cp310-cp310-macosx_14_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

dtwin-1.2.0-cp310-cp310-macosx_12_0_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10macOS 12.0+ x86-64

dtwin-1.2.0-cp39-cp39-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.9Windows x86-64

dtwin-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

dtwin-1.2.0-cp39-cp39-macosx_14_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

dtwin-1.2.0-cp39-cp39-macosx_12_0_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9macOS 12.0+ x86-64

File details

Details for the file dtwin-1.2.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: dtwin-1.2.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for dtwin-1.2.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 004585c983ff19f4ee1384dde143b8c999355956cdd7418100bf99eb4052777f
MD5 e294437ec140e5d3c078e5f6d91c7d2d
BLAKE2b-256 c255d4f5a42be5d2b45eeceb3f6576569fdb32dc9cc5dd40e8ebd1b724c2fd89

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8f59e9b0d00661173e497798c13514bb983a2752776c20282115c5258bfb4861
MD5 78da95b25a66d8f24158975a26cf9ace
BLAKE2b-256 4167ebf22b7340ab71fdaa5f236afe0dcc2ae9ac23096a6416f4b33d92b33119

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 1f469ae4b454f15f8d44bfcadfbc6cc905cfa64a15e150cab6841ea88db75faa
MD5 344de952ca1e32c25b425bee042c0e53
BLAKE2b-256 021185f98d9b5d78300e32c952eb577fde3b9969734a0b6c1b2c05746189dc51

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp314-cp314-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp314-cp314-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 16b76841e3b28e9a73bbc84b3bcedcb0e79a10e53386c53df5e5ed09d11f76aa
MD5 82af8c2485ede15cd084092ee03b9ed0
BLAKE2b-256 e045a4ae4547931508d9e9ece6c61e0f67b7bdd18d729eef4584415ea92d2eae

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: dtwin-1.2.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for dtwin-1.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c695e9c8b99304b131dcc58bfba365d71778c3fbd3491627c36257fd8a9f15c6
MD5 836fe6b7c17c198cfaec2ef6f456f9ff
BLAKE2b-256 a80b5bba8ddd518ad0f88908a7492188649bcef4ea44fc5a9e74b1f81c223efb

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a6f1e76b9d336d597e03374c0852b9ec30a71afc5a3a525cabc692918f5bcaa0
MD5 be3e2744d5597a1679fa189d2c7d979b
BLAKE2b-256 02603284e6dd0b14503e5d6addce1643ccfe2db814a5af9c5cdbfd5a1402390d

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 0473e5e9efe686ae909d8778a3d01da4c5814b2cc9c52283c2b8c6560c300f6a
MD5 59cc0d101a757427d8847c670997af35
BLAKE2b-256 159de8b1eec13a840b03fa104f8737fd4fec49d3f63ed48a08e408e7f004e9fc

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp313-cp313-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp313-cp313-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 f3823085475ccf4486a4bb7eea33a71c4c4e4e5215584b313c58020b71282ff5
MD5 ac8ea38e3d2cddd9aa9326eccac9e14c
BLAKE2b-256 56789b2a0b12cd0d162f6cf9447ebc2782a5a5ddf047458421eb60ad2dcf3dff

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: dtwin-1.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for dtwin-1.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d7000953d159845c5d618ca6b282e098117ba86733ccfeded161693a7676ad8e
MD5 9daecf45784502f265a911076a8266ad
BLAKE2b-256 86e2bca5b1303c664aa5e9ada54a0f7de823d8f57788353f08ce072a03a2a813

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7e129020c86aa244820c8609e8e98adf770e02e2e17031ed851173893896382e
MD5 82429507bcb6d789f71d1532c7bb0cbe
BLAKE2b-256 04d1fdf72967edebfc257f40e4971f6a342202e77bbcaed1f90a2bc404a08941

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp312-cp312-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp312-cp312-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 a054c58d2e73d65c6476743040209b9df37d3a10c017c44cd9738168c3f04625
MD5 1a01be0da65f0cb8ff898fa41dfee031
BLAKE2b-256 90e67cf5f75f9cb953ac60d975a6e20f144a7022031680364bee044c5eec42ca

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: dtwin-1.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for dtwin-1.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b07f432bd4c17b1415fc8f51afcb6686f156f60d7e4331469bd7c2157cdbabc6
MD5 e34ede5059c6f5d6929512cda4b1415f
BLAKE2b-256 265bc1ab1b157ecd8a4217c4311af5c19543581c3c2e2da98135c49a3f4f5b2d

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 90033d42441178eb205ad5a0ac7d408b41b522afa15c36f5e7e584c4a518ff18
MD5 8d8ec4a8e79bc6060b7c8ae2a0984c95
BLAKE2b-256 54c86267be6d4cda5fe8bf1ebf881a72d27422503e922a596583387a463ab1d1

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c8b21250ded94e23e3c748b1feef83c6b6db3045194daea20c981e6dddde2fa5
MD5 b10d58421945d2b07a509863cb7f2250
BLAKE2b-256 f400fe74348037d691fd3c18b38b89f6ddc3192f2c823e0211c0ba13c8e16c97

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp311-cp311-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp311-cp311-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 3a30772d53477a3250ecea44746e2b2d0773537b81d4c0ae1dc0cc42d7dc5ab9
MD5 183e749b0bf29e857466d3f1a719ae65
BLAKE2b-256 642be35f0e77b1f36189b8c49c84cae16db82464baaff303c6c6820dfa13acf2

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: dtwin-1.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for dtwin-1.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ad1b41034991a4a2461233f96833078161e66724d4c7cd69e2f744c77968a32c
MD5 2d196086f2f0bd2cf19ee102bd9c643b
BLAKE2b-256 08abf1b9f7f794f9c68b8fe65e7820e38dc00fc686e71159b564624ef3d687ae

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a426b22d58aee079bdbeba328eb78753c981cb502ad0318b2b04a1899399d5a2
MD5 13ccafc926804d60865f5b7d5b9e0f9d
BLAKE2b-256 2a66ecfd17223083c22d198ae9d4a9737884deabdb991c10279c43d2b8712471

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 be98bb5131dc528538244e9330958decf730a07519f389a105206a6d148cc854
MD5 3018bc770d3bdaaaab2a4f597ed4da96
BLAKE2b-256 f9e0a2694070545eaf3594c5d988291b1194bf9c143ac96d4fb6ebcfb533f27f

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp310-cp310-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp310-cp310-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 368cbd7d6f9916230a339a3de54e48c810b615ccb476220d95e6c86761507bd6
MD5 00df351ed664458358c343b6c94bc344
BLAKE2b-256 8f09eb4a10d27eb45fb71c91fa6f2acef5252c22f8c873e6e3253a5f25dca677

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: dtwin-1.2.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for dtwin-1.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ec7416ed057945ab3a6e2a8c408957554263772ac71cfba33a7943a184d54ae8
MD5 65cfa968799057d908b9383cfd8b5be6
BLAKE2b-256 c2e7bbd0bc673313fdf6519a93929c0843df9bc11dbe7a6ed64250d4d5a9187b

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c5be9923e132c7f0337f1e1dfdfc616a09236440bffc9eb452d623de281e471a
MD5 22c7f9c2beb4baa73b0d148bd8da66c0
BLAKE2b-256 5a5de38dbce9eefdf7ff61b1a1b1ebf844bd38cc015804dca9e426aac8b77168

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

  • Download URL: dtwin-1.2.0-cp39-cp39-macosx_14_0_arm64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.9, macOS 14.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for dtwin-1.2.0-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ac009007ce7def1efdf269e52117b4577918a3cbf2b3b26973bf285293fc0811
MD5 ed311eaa2f49755fbf8e18dfdda60166
BLAKE2b-256 1fe2e38b15dd04d559b40b3f5b51b3c370c9a5af583463877bbbdcccda09ba6d

See more details on using hashes here.

File details

Details for the file dtwin-1.2.0-cp39-cp39-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for dtwin-1.2.0-cp39-cp39-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 8a23b540206501c1605563ee48638e209a50b63a63bb4a729c0ad318fd2fdb9f
MD5 63a93335a98fc3ff376702765b847d5c
BLAKE2b-256 500021499a2bc25b61d1fa8db250ea545a078e62ba6b4deae2c3a014b627efc3

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