Skip to main content

eqbool

Python package CI C/C++ CI PyPI Python License: MIT

Testing boolean expressions for equivalence.

eqbool is a C++ and Python rewrite of code originally developed as part of a symbolic gate-level Z80 simulator in pure Python, where increasingly complex Boolean expressions representing gate states need to be repeatedly checked for equivalence. Z3 and several other existing libraries were tried and quickly proven too slow for such use, so a custom solution had to be developed.

The library is specifically designed to reduce overall equivalence-check times by simplifying expressions in ways that never increase the diversity of SAT clauses.

Where equivalence cannot be trivially established via simplifications, eqbool uses the CaDiCaL solver. As the workload is very many small solves rather than a few hard ones, the bundled CaDiCaL version is chosen by measuring on traces of real runs, and is not necessarily the latest release.

#include "eqbool.h"

int main() {
    eqbool::term_set<std::string> terms;
    eqbool::eqbool_context eqbools(terms);
    eqbool::order_context orders(eqbools);
    using eqbool::eqbool;

    eqbool eqfalse = eqbools.get_false();
    eqbool eqtrue = eqbools.get_true();

    // Constants are evaluated and eliminated right away.
    assert((eqfalse | ~eqfalse) == eqtrue);

    // Expressions get simplified on construction.
    eqbool a = eqbools.get(terms.add("a"));
    eqbool b = eqbools.get(terms.add("b"));
    assert((~b | ~eqbools.ifelse(a, b, ~b)) == (~a | ~b));

    // Identical, but differently spelled expressions are uniquified.
    eqbool c = eqbools.get(terms.add("c"));
    assert(((a | b) | c) == (a | (b | c)));

    // Speed is king, so simplifications that require deep traversals,
    // restructuring of existing nodes and increasing the diversity of
    // SAT clauses are intentionally omitted.
    eqbool d = eqbools.get(terms.add("d"));
    eqbool e1 = a & ((b | c) | (~a | ((~b | (d | ~c)) & (c | ~b))));
    eqbool e2 = a;
    assert(!eqbools.is_trivially_equiv(e1, e2));

    // The equivalence can still be established using SAT.
    assert(eqbools.is_equiv(e1, e2));

    // From there on, the expressions are considered identical.
    assert(eqbools.is_trivially_equiv(e1, e2));

    // They then can be propagated to their simplest known forms.
    assert(e1 != e2);

    e1.propagate();
    e2.propagate();
    assert(e1 == e2);

    // Order terms are ordinary terms stating that one of two
    // given values comes before the other; the opposite order
    // is the negation of the same term.
    eqbool a_b = eqbools.get(terms.add("a<b"));
    eqbool b_c = eqbools.get(terms.add("b<c"));
    eqbool a_c = eqbools.get(terms.add("a<c"));
    orders.register_order(a_b, terms.add("a"), terms.add("b"));
    orders.register_order(b_c, terms.add("b"), terms.add("c"));
    orders.register_order(a_c, terms.add("a"), terms.add("c"));

    // Orderings whose terms chain into a cycle are impossible.
    assert(orders.is_never(a_b & b_c & ~a_c));
    assert(orders.is_possible(a_b & b_c));

    // Under consistent orders, spelling out the ordering
    // implied by transitivity changes nothing...
    assert(orders.is_equiv(a_b & b_c, a_b & b_c & a_c));

    // ...but as plain propositions the two expressions differ,
    // and the order context never confuses the two views.
    assert(!eqbools.is_equiv(a_b & b_c, a_b & b_c & a_c));
}

example.cpp

In Python

pip install eqbool
import eqbool


def main():
    # Undefined Bool objects have no associated value or context.
    assert eqbool.Bool().is_undef

    ctx = eqbool.Context()
    assert ctx.false | ~ctx.false == ctx.true

    # Terms can be any hashable objects.
    a = ctx.get('a')
    b = ctx.get('b')
    e = ~b | ~ctx.ifelse(a, b, ~b)
    assert e == ~a | ~b

    # Bool values can be verbalised as usual.
    print(e)

    c = ctx.get('c')
    assert (a | b) | c == a | (b | c)

    # In the Python API, all values get propagated automatically, so
    # simple equality can be used to test for trivial equivalence.
    d = ctx.get('d')
    e1 = a & ((b | c) | (~a | ((~b | (d | ~c)) & (c | ~b))))
    e2 = a
    assert e1 != e2

    assert ctx.is_equiv(e1, e2)

    # Bool objects compare by identity, for speed; established
    # equivalences are followed by the underlying node ids.
    assert e1 != e2
    assert e1.id == e2.id

    # Order terms are ordinary terms stating that one of two
    # given values comes before the other; the opposite order is
    # the negation of the same term.
    orders = eqbool.OrderContext(ctx)
    a_b, b_c, a_c = ctx.get('a<b'), ctx.get('b<c'), ctx.get('a<c')
    orders.register_order(a_b, 'a', 'b')
    orders.register_order(b_c, 'b', 'c')
    orders.register_order(a_c, 'a', 'c')

    # Orderings whose terms chain into a cycle are impossible.
    assert orders.is_never(a_b & b_c & ~a_c)
    assert orders.is_possible(a_b & b_c)

    # Under consistent orders, spelling out the ordering implied
    # by transitivity changes nothing...
    assert orders.is_equiv(a_b & b_c, a_b & b_c & a_c)

    # ...but as plain propositions the two expressions differ,
    # and the order context never confuses the two views.
    assert not ctx.is_equiv(a_b & b_c, a_b & b_c & a_c)

example.py

Download files

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

Source Distribution

eqbool-0.5.tar.gz (337.6 kB view details)

Uploaded Source

Built Distributions

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

eqbool-0.5-cp313-cp313-musllinux_1_2_x86_64.whl (12.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

eqbool-0.5-cp313-cp313-musllinux_1_2_i686.whl (12.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

eqbool-0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

eqbool-0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (11.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

eqbool-0.5-cp312-cp312-musllinux_1_2_x86_64.whl (12.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

eqbool-0.5-cp312-cp312-musllinux_1_2_i686.whl (12.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

eqbool-0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

eqbool-0.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (11.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

eqbool-0.5-cp311-cp311-musllinux_1_2_x86_64.whl (12.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

eqbool-0.5-cp311-cp311-musllinux_1_2_i686.whl (12.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

eqbool-0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

eqbool-0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (11.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

eqbool-0.5-cp310-cp310-musllinux_1_2_x86_64.whl (12.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

eqbool-0.5-cp310-cp310-musllinux_1_2_i686.whl (12.9 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

eqbool-0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

eqbool-0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (11.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

File details

Details for the file eqbool-0.5.tar.gz.

File metadata

  • Download URL: eqbool-0.5.tar.gz
  • Upload date:
  • Size: 337.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for eqbool-0.5.tar.gz
Algorithm Hash digest
SHA256 97fc89d8d76916e2de1845c9128e527d67856795190ca4ddff1eec90c3eabb4c
MD5 39c48f61129074eaa3edc9b43e3f836d
BLAKE2b-256 8918c4f951c23555f3df7836c7154f4d54095e4b8768e3e92b688b447e973f00

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5.tar.gz:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 80c65482133b56d86fd5cc13fa368aa10ebef0d14972ab70356dca88126b2c9f
MD5 e4d959b8a4637fd980b712761c86e26a
BLAKE2b-256 322b4543479d24d1fffe26be9eb6f02587e025f7eba04be9f7547ce96f532e01

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

  • Download URL: eqbool-0.5-cp313-cp313-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 12.9 MB
  • Tags: CPython 3.13, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for eqbool-0.5-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d6fd6d0b584cc179a72f974757e24d4eb1f8ae2d0d4d3157ad1366d415fc2efc
MD5 76366046d78df1368ac8959e885325a6
BLAKE2b-256 6d8710e58185ff3c2deb334d96f751dea6f467d3be4d68f0bd37705e3a788d56

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp313-cp313-musllinux_1_2_i686.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4d96b9f6e407a3bdd7dd6c29be838870d6ca449e600edd462f7f2491815059f2
MD5 dc807c661687dc1cb3cb6ce26aec7573
BLAKE2b-256 87af359c7b0428bd5c4abcad871f7ab71c53d127560aa77eb1b83b25ce4c6be3

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 27896f3fe4c55b967272e74b24615fc80b9c84284722e5ab119b3de8c78316ec
MD5 2a00cfbc0e18f80371aff6cff6ff06c5
BLAKE2b-256 098c1d200d10930a8f5d9c1fa3549c5829d580e4b8c4f67f5a394cb78fd47d67

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 019cca5487397e7820f9a7d8b5355c2e58c2f893aecf7abb488a49d668a19273
MD5 bec2d169763a996776dd13c77fbbd808
BLAKE2b-256 713e2eb92d490578ac8b954aebb6f14c7c88f4b84dcd3480c0c3af2c797899ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

  • Download URL: eqbool-0.5-cp312-cp312-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 12.9 MB
  • Tags: CPython 3.12, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for eqbool-0.5-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 2379d458792e9a6d7d365bd671a1d2c96c21058821597e3a81cf338cd80c482b
MD5 a7492af9213b519747412012745750ee
BLAKE2b-256 c18f5ee101b08796f5ef9a911be629249e15e24084df3246c0b35135a926fb98

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp312-cp312-musllinux_1_2_i686.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4af1c18f3dd786e06b11305d86ea6ee79d115b6d59ac57b3a722f4ef2ebf0787
MD5 dc490148bd6fd3f4fcf64a08a15386b6
BLAKE2b-256 d93bc7b7c83382a5e13ffb36615ac5b687e75922675bbc41b7e01ff4908a2ffd

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e81eab93e6aeafa10f4bb65308d442811535e8337a7aa0415bc610e05c7e5b8d
MD5 4c906bd0b70468abf46d1d0abc28dcdc
BLAKE2b-256 bfb76be0ff9cb7105d3bfdf8c4795b26e93e9f35e05d54a5470d72803eae9857

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 98bab600f2eb21bf758da20b2b46c90a901917a7d0f3bc89842d1bf1eee6c883
MD5 b0e64b7854a05183a9e9abf76db867ca
BLAKE2b-256 4bb4ea5760f1bb72f8d8c368306ef154360a61aabdb86c8bf1590c5ec32ef84b

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

  • Download URL: eqbool-0.5-cp311-cp311-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 12.9 MB
  • Tags: CPython 3.11, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for eqbool-0.5-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 23990566bc2a6683c8bdc49f2e707ca1f03f699f4bb6b820c558d220017874c6
MD5 fd5f140c615eb1a600dfe1382c600e64
BLAKE2b-256 0f5474e5c4d8f4597c179746b833bc0f9753814141bdc87ae7c6cb2b343e8bd4

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp311-cp311-musllinux_1_2_i686.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fbbf21f8acaa561ab28cc854c2ef1c7d26c8b14efdf72c183c918aa22dc37970
MD5 56a51d7cdb58c00e9728e883c1288751
BLAKE2b-256 fd76793beb337f21537cf546433c4bb8a7b9ca7a4899ad42c83dda9477e824db

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 da4ef4e968ff988bb1c0855104cf2d0588cac589229788cfc89b61c20882d853
MD5 1a34f0d8c59c6806ccb7a124513c3a68
BLAKE2b-256 11b9e0269daf9674cf16cbfd731d4737a72db3e700c91548e901cb8962aca30c

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f173986bd51c3903282116efa66189d77de0f3bbee961b096e5e29c110730a73
MD5 01d81489dbc6ba1407addce32e523710
BLAKE2b-256 e9490e45e0d5ea0028d95910fa21035114c5b34ca51ebb4d8d425cac7bfcd3fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

  • Download URL: eqbool-0.5-cp310-cp310-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 12.9 MB
  • Tags: CPython 3.10, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for eqbool-0.5-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 181f7d4523c0588983dbfb9b8e056f9b3e3c4c6a0ef869a1b17e0bfd7054712e
MD5 2a3e77ac0fe3bfdd3f3f49260ccf5196
BLAKE2b-256 ba1f94f28c0fc94192d49fe988a4eec793118bce98413ac1a124cfb3186f81fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp310-cp310-musllinux_1_2_i686.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a73cd065ab68226b9995a373263590685c164ed99104759654eca08afe0abf48
MD5 c27d6b59feb161b7c98fc96ff3f3e6d4
BLAKE2b-256 8b650084e35afab60aae0908cc4d37a6260d70438f9a4acbe338ace971185b1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on kosarev/eqbool

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

File details

Details for the file eqbool-0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for eqbool-0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 87ab3b24956c8c019b1b87930ef4dfbcb6a00608de9a8238ac4581bc01a8488f
MD5 33c63faa153ac4f87e9ea4050b34e1e3
BLAKE2b-256 889fd5ce204c6976424b8b22b6e81c95796dcb5101d4c906ae34bb55dafe65c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for eqbool-0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on kosarev/eqbool

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

Release history Release notifications | RSS feed

This release

0.5 This release

17 files

0.4

17 files

0.3

1 file

0.2

1 file

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