Skip to main content

OxiZ Python Bindings

Version: 0.3.1 | Status: Alpha | Tests: 11 Rust + 117 Python (pytest, not re-run this release) | Rust LoC: 1,842 (8 source files under src/)

Python bindings for the OxiZ SMT (Satisfiability Modulo Theories) solver.

Installation

From PyPI (when published)

pip install oxiz

From Source

Requires Rust and maturin:

# Install maturin
pip install maturin

# Build and install
cd oxiz-py
maturin develop --release

Quick Start

import oxiz

# Create a term manager and solver
tm = oxiz.TermManager()
solver = oxiz.Solver()

# Create integer variables
x = tm.mk_var("x", "Int")
y = tm.mk_var("y", "Int")

# Create constants
ten = tm.mk_int(10)
five = tm.mk_int(5)

# Create constraints: x + y = 10, x > 5
sum_xy = tm.mk_add([x, y])
constraint1 = tm.mk_eq(sum_xy, ten)
constraint2 = tm.mk_gt(x, five)

# Assert constraints
solver.assert_term(constraint1, tm)
solver.assert_term(constraint2, tm)

# Check satisfiability
result = solver.check_sat(tm)
print(f"Result: {result}")  # sat

if result == oxiz.SolverResult.Sat:
    model = solver.get_model(tm)
    print(f"x = {model['x']}, y = {model['y']}")

API Reference

TermManager

The TermManager creates and manages terms (expressions).

tm = oxiz.TermManager()

# Variables
x = tm.mk_var("x", "Int")      # Integer variable
b = tm.mk_var("b", "Bool")     # Boolean variable
r = tm.mk_var("r", "Real")     # Real variable

# Constants
t = tm.mk_bool(True)           # Boolean true
f = tm.mk_bool(False)          # Boolean false
n = tm.mk_int(42)              # Integer constant
q = tm.mk_real(3, 4)           # Rational 3/4

# Boolean operations
not_b = tm.mk_not(b)
and_term = tm.mk_and([b, t])
or_term = tm.mk_or([b, f])
implies = tm.mk_implies(b, t)

# Arithmetic operations
sum_term = tm.mk_add([x, n])
diff = tm.mk_sub(x, n)
prod = tm.mk_mul([x, n])
neg = tm.mk_neg(x)
div = tm.mk_div(x, n)
mod = tm.mk_mod(x, n)

# Comparisons
eq = tm.mk_eq(x, n)            # x = 42
lt = tm.mk_lt(x, n)            # x < 42
le = tm.mk_le(x, n)            # x <= 42
gt = tm.mk_gt(x, n)            # x > 42
ge = tm.mk_ge(x, n)            # x >= 42

# Other
ite = tm.mk_ite(b, x, n)       # if b then x else 42
distinct = tm.mk_distinct([x, n])  # x != 42

Solver

The Solver checks satisfiability of constraints.

solver = oxiz.Solver()

# Set logic (optional)
solver.set_logic("QF_LIA")  # Quantifier-free Linear Integer Arithmetic

# Add constraints
solver.assert_term(constraint, tm)

# Check satisfiability
result = solver.check_sat(tm)

# Get model (if sat)
if result == oxiz.SolverResult.Sat:
    model = solver.get_model(tm)

# Push/pop for incremental solving
solver.push()
solver.assert_term(additional_constraint, tm)
result = solver.check_sat(tm)
solver.pop()  # Removes additional_constraint

# Reset solver
solver.reset()

SolverResult

result = solver.check_sat(tm)

# Compare with enum values
if result == oxiz.SolverResult.Sat:
    print("Satisfiable")
elif result == oxiz.SolverResult.Unsat:
    print("Unsatisfiable")
elif result == oxiz.SolverResult.Unknown:
    print("Unknown")

# Use properties
if result.is_sat:
    model = solver.get_model(tm)

Examples

Sudoku Solver

import oxiz

def solve_sudoku(grid):
    tm = oxiz.TermManager()
    solver = oxiz.Solver()

    # Create variables for each cell (1-9)
    cells = {}
    for i in range(9):
        for j in range(9):
            cells[(i, j)] = tm.mk_var(f"cell_{i}_{j}", "Int")

    one = tm.mk_int(1)
    nine = tm.mk_int(9)

    # Each cell is between 1 and 9
    for (i, j), cell in cells.items():
        solver.assert_term(tm.mk_ge(cell, one), tm)
        solver.assert_term(tm.mk_le(cell, nine), tm)

    # Row constraints: all different
    for i in range(9):
        row_cells = [cells[(i, j)] for j in range(9)]
        solver.assert_term(tm.mk_distinct(row_cells), tm)

    # Column constraints: all different
    for j in range(9):
        col_cells = [cells[(i, j)] for i in range(9)]
        solver.assert_term(tm.mk_distinct(col_cells), tm)

    # 3x3 box constraints: all different
    for box_i in range(3):
        for box_j in range(3):
            box_cells = []
            for i in range(3):
                for j in range(3):
                    box_cells.append(cells[(box_i*3 + i, box_j*3 + j)])
            solver.assert_term(tm.mk_distinct(box_cells), tm)

    # Given values
    for i in range(9):
        for j in range(9):
            if grid[i][j] != 0:
                val = tm.mk_int(grid[i][j])
                solver.assert_term(tm.mk_eq(cells[(i, j)], val), tm)

    # Solve
    if solver.check_sat(tm) == oxiz.SolverResult.Sat:
        model = solver.get_model(tm)
        result = [[int(model[f"cell_{i}_{j}"]) for j in range(9)] for i in range(9)]
        return result
    return None

Boolean Satisfiability

import oxiz

tm = oxiz.TermManager()
solver = oxiz.Solver()

# Create boolean variables
p = tm.mk_var("p", "Bool")
q = tm.mk_var("q", "Bool")
r = tm.mk_var("r", "Bool")

# Assert: (p OR q) AND (NOT p OR r) AND (NOT q OR NOT r)
clause1 = tm.mk_or([p, q])
clause2 = tm.mk_or([tm.mk_not(p), r])
clause3 = tm.mk_or([tm.mk_not(q), tm.mk_not(r)])

solver.assert_term(clause1, tm)
solver.assert_term(clause2, tm)
solver.assert_term(clause3, tm)

result = solver.check_sat(tm)
if result == oxiz.SolverResult.Sat:
    model = solver.get_model(tm)
    print(f"p={model['p']}, q={model['q']}, r={model['r']}")

Supported Sorts

  • "Bool" - Boolean values
  • "Int" - Arbitrary precision integers
  • "Real" - Rational numbers
  • "BitVec[N]" - Bit vectors of width N (e.g., "BitVec[32]")

Bitvector Operations

tm = oxiz.TermManager()

# Create bitvector constants
bv8 = tm.mk_bv(42, 8)       # 8-bit bitvector with value 42
bv16 = tm.mk_bv(1000, 16)   # 16-bit bitvector

# Bitwise operations
not_x = tm.mk_bv_not(x)         # Bitwise NOT
and_xy = tm.mk_bv_and(x, y)     # Bitwise AND
or_xy = tm.mk_bv_or(x, y)       # Bitwise OR

# Arithmetic operations
sum_xy = tm.mk_bv_add(x, y)     # Addition (modulo 2^width)
diff_xy = tm.mk_bv_sub(x, y)    # Subtraction
prod_xy = tm.mk_bv_mul(x, y)    # Multiplication
neg_x = tm.mk_bv_neg(x)         # Two's complement negation

# Comparisons (unsigned)
ult = tm.mk_bv_ult(x, y)        # x <u y (unsigned less than)
ule = tm.mk_bv_ule(x, y)        # x <=u y (unsigned less or equal)

# Comparisons (signed)
slt = tm.mk_bv_slt(x, y)        # x <s y (signed less than)
sle = tm.mk_bv_sle(x, y)        # x <=s y (signed less or equal)

# Division and remainder
udiv = tm.mk_bv_udiv(x, y)      # Unsigned division
sdiv = tm.mk_bv_sdiv(x, y)      # Signed division
urem = tm.mk_bv_urem(x, y)      # Unsigned remainder
srem = tm.mk_bv_srem(x, y)      # Signed remainder

# Bit manipulation
concat = tm.mk_bv_concat(high, low)    # Concatenate bitvectors
extract = tm.mk_bv_extract(7, 4, x)    # Extract bits[7:4]

Array Operations

tm = oxiz.TermManager()

# Array select and store
value = tm.mk_select(array, index)              # array[index]
new_array = tm.mk_store(array, index, value)    # array with array[index] = value

Optimization

OxiZ supports optimization (minimize/maximize) using the Optimizer class:

tm = oxiz.TermManager()
opt = oxiz.Optimizer()
opt.set_logic("QF_LIA")

# Variables
x = tm.mk_var("x", "Int")
y = tm.mk_var("y", "Int")

# Constraints
zero = tm.mk_int(0)
ten = tm.mk_int(10)
sum_xy = tm.mk_add([x, y])

opt.assert_term(tm.mk_ge(sum_xy, ten))  # x + y >= 10
opt.assert_term(tm.mk_ge(x, zero))       # x >= 0
opt.assert_term(tm.mk_ge(y, zero))       # y >= 0

# Objective: minimize x + y
opt.minimize(sum_xy)

# Solve
result = opt.optimize(tm)
if result == oxiz.OptimizationResult.Optimal:
    model = opt.get_model(tm)
    print(f"Optimal: x={model['x']}, y={model['y']}")  # Should be x=0, y=10 or x=10, y=0

Optimization Results

  • OptimizationResult.Optimal - Optimal solution found
  • OptimizationResult.Unbounded - Objective is unbounded (no finite optimum)
  • OptimizationResult.Unsat - No feasible solution exists
  • OptimizationResult.Unknown - Timeout or incomplete

Examples

See the examples/ directory for complete demos:

  • basic_sat.py - Boolean satisfiability
  • bitvec_example.py - Bitvector operations
  • optimization_example.py - Optimization (min/max)
  • sudoku.py - Sudoku solver

Testing

Run the test suite with pytest:

# Install the package in development mode
maturin develop --release

# Run tests
pytest tests/ -v

License

Apache-2.0

Download files

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

Source Distribution

oxiz-0.3.1.tar.gz (4.1 MB view details)

Uploaded Source

Built Distributions

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

oxiz-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (977.0 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

oxiz-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (986.5 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

oxiz-0.3.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (975.4 kB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (975.2 kB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (975.4 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (983.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

oxiz-0.3.1-cp314-cp314-win_amd64.whl (773.6 kB view details)

Uploaded CPython 3.14Windows x86-64

oxiz-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (975.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (983.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

oxiz-0.3.1-cp314-cp314-macosx_11_0_arm64.whl (842.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

oxiz-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl (878.2 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

oxiz-0.3.1-cp313-cp313-win_amd64.whl (773.3 kB view details)

Uploaded CPython 3.13Windows x86-64

oxiz-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (974.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (982.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

oxiz-0.3.1-cp313-cp313-macosx_11_0_arm64.whl (841.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

oxiz-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl (877.6 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

oxiz-0.3.1-cp312-cp312-win_amd64.whl (773.4 kB view details)

Uploaded CPython 3.12Windows x86-64

oxiz-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (974.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (982.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

oxiz-0.3.1-cp312-cp312-macosx_11_0_arm64.whl (841.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

oxiz-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl (877.6 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

oxiz-0.3.1-cp311-cp311-win_amd64.whl (774.7 kB view details)

Uploaded CPython 3.11Windows x86-64

oxiz-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (976.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (985.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

oxiz-0.3.1-cp311-cp311-macosx_11_0_arm64.whl (841.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

oxiz-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl (877.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

oxiz-0.3.1-cp310-cp310-win_amd64.whl (774.7 kB view details)

Uploaded CPython 3.10Windows x86-64

oxiz-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (975.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (985.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

oxiz-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (977.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

oxiz-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (986.7 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

oxiz-0.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (986.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

File details

Details for the file oxiz-0.3.1.tar.gz.

File metadata

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

File hashes

Hashes for oxiz-0.3.1.tar.gz
Algorithm Hash digest
SHA256 0cb84fd450e0efaab52134289a207d796ac3a6b7d40bda888aee729b50933d52
MD5 fc6485cb558f4e9d198f9f992a0e9405
BLAKE2b-256 c4aa4cfd3b88d0fbbd74128ff0162689171b1cf3c31a10083ec2d29685e618c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1.tar.gz:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8561afc03725d95d9be67d1629902ba791a2d3728711543c3209123193cbb08b
MD5 c92898f69ce30ad69a6b01ff15f8a6b1
BLAKE2b-256 58ad74454a828f2300dc880ad8e4dd2b7290862bb141ee9a00126ef5e0568caf

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 956fbd20153a94e7784086d0c1316812ae05d6740711bd4d3b56a87f4db8f10e
MD5 2f3592e99c0e66e98c38ca49f1b44477
BLAKE2b-256 d367c89ddb723da5abacae34bb415d299cdffc290a4becfe5d89124708477da0

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cae23d321fcca285cdb5ed1470f2367447bfce8b681678ad36fb4cd7c9c88585
MD5 ed3b8d6d0c479d9d0e38e02290eb6306
BLAKE2b-256 faf2def6b7b74aba24dde9d730397c3341180c0dfcdc042aa50e88b1c7cce6af

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7175752cb0084cc808aea3b8ab50661dae11b09d1b471cc371e3d06600935d2b
MD5 540f4d8fb954874773f06ff8f66d99c0
BLAKE2b-256 a59575cdc520fedd12da9130200f997b7f31c579a8e143f1276fee350e10fe47

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df888e7a4959828b0cc6e63596cdd934ddb8ade1c35898cbe24333a6a84f4d4b
MD5 a260e8233cadfc9aaef8d80757e803ae
BLAKE2b-256 a835a35fab1471d9ca8b5541c8e9b523336d62a22d540feb38d5f10397a678d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cb77805a47ca100954d0ed1a972a213af9a1707182fe4ce403b584c9cf376393
MD5 ae5c400ad8245c150604057acd0c70b8
BLAKE2b-256 e4bb66d553d49369287751f374325f66570cbf230d22b2a98db2207978f4518d

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 773.6 kB
  • 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 oxiz-0.3.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 695a7c30fa0445acf98a901c5a464eeb4b014d652261194e4628e4aeb4654a20
MD5 a8807f836fb668aec199bf0d021e673a
BLAKE2b-256 790f17f5ba6488efceda36162019ddbbcdb955b8fc47eefe41b360ca99e3203f

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp314-cp314-win_amd64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 82c5663a56f3d43dd7e995d74776bc544e0db6bd8f3731ad1ffda26d310a4e9d
MD5 3d56539961e7a37a4c3f4d4abca40ef3
BLAKE2b-256 9b34f45c00196756fd994ec89618e5fc9051b9f507ee501dfec1b944c563d0ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4de5450042e72411857e04547fb162cda1f40ab6a8df1b4aa76ca034abec1e75
MD5 d88df5eeff93c7ffe6ec56e9f4b84fd4
BLAKE2b-256 183212ebb0a3242ee8bdf09915a376f513b29916ce4d7e8796ec149762040f55

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp314-cp314-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 842.3 kB
  • Tags: CPython 3.14, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for oxiz-0.3.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ed2c503f32fcf774668aa6c105a68fb7125e38f36b63972eb909cce09c43b957
MD5 15093fa07af8886f89d9f9d773b8c7ff
BLAKE2b-256 de0d56a04b9cbdf61db2438401820065fc9b6318944d81358a718e4cf6b35fe5

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 11be115da2f677c8231de76abbb829afcd565ace8759fb26073cf00c2ba323e6
MD5 acefbdc6b1b1240a3c0062c2d6913e57
BLAKE2b-256 a6542e6bc11d7f06aa5ebae3497fb2f741bc956bd427df6e2eebfd021cb0b540

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 773.3 kB
  • 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 oxiz-0.3.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3e61b6380d75692ac3f4b465926bd6daeeba3aef64c0d5e8050a4578f4687240
MD5 5d680a85795da9030f061f6910d63a83
BLAKE2b-256 df9a77d3f2b3c2529cece7c5f21fe2fd6c92ce557b2a0c2146f3298922fe82f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp313-cp313-win_amd64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1621065fee6e5e953bb14ceed671f6aca1f29d6ed3c7a2b6ea6410ba676fceaa
MD5 314fea59d6326e450d5929f7a45e36c0
BLAKE2b-256 70016be7876ceee35f22b1927b060561deee3c4fe9fe7c997eeee44ecbc7de30

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e8af2920994755425fa2202c46dd04e35b119111fac2923a8dee4f31cecfa52d
MD5 e2d40c112ada464939c37c58a4d17c5c
BLAKE2b-256 f8511e3cb1c4346aba031c83626b9b148f425c84b3ed9d1cedd7b83667240a4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 841.6 kB
  • Tags: CPython 3.13, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for oxiz-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5542beca409c637c5f38e9c27d16f76239521997ed52cc0b3a98409df4a993c
MD5 d9d02ee358e678a24225a6ec8eeab3d5
BLAKE2b-256 3e788b41e4ea0e301ac1a83da852b64db1b5844125ac8bfff34282fddfcb4084

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bf2b157194505d5f2dd03602be9da3622d85c3d70b2b2bce8f7ad25d3a91c424
MD5 54b0ee9bdd08e2489bba1144cc8f9332
BLAKE2b-256 bd1970a58477c4fc9ac1f87149de78e0268b83e3d581100bff172cb32cd248b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 773.4 kB
  • 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 oxiz-0.3.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a483bf10c5c0139870956f06ba2e7a38401ab6aff8fe86970484b42703d20cd2
MD5 1ad539333e4beb138d1f99602d3b2de9
BLAKE2b-256 4e7ff3d676d3e141a1f53cc9ed1de8ed1334108cff6b6cad5ec175272711634b

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp312-cp312-win_amd64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 68d0f983d4b1f31005f9685e52974d62d28d363c7152da3124e649bff3418c88
MD5 61f8760e3f3f7cb486050269e1b21434
BLAKE2b-256 fa5fa8d645d157fee93f4d50e934d129c1ba3059f24631162a88f077f69a5df2

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0ae1f005d71f434045a6e18c50438d43966b12c153b91ff51b2814e388fbfa2b
MD5 9e46f01bd27edf75dc3a814f3e2b37b9
BLAKE2b-256 09794638b4fedf3cfa4502aa90f2ab53ff9ee32a8be63b666835b7b515676996

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 841.7 kB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for oxiz-0.3.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 07fe931c5354758d59cc4ee0ade59799f8c9f5ab30913966713c8d55f8be88ef
MD5 55309b8da871e44ba1e3e39be74ce75f
BLAKE2b-256 5e6f3cab47a428b259bd883fbbc9441e4ab2bd68657ccfa65c6633d3d67cbbbc

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a7db40658575afc2ab805076727dad68ee32f8653d40c549b7fe610040bc9839
MD5 ad8157c86065b4a1356cc22c3685f482
BLAKE2b-256 c7072a99507272e90d8d150e0557c8bb6872113a3cc28035d6a2bca1498c2e13

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 774.7 kB
  • 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 oxiz-0.3.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0cf521d74937ae1fb51ecbfaa74978dc681f9853bf6e9b57ad46e4d1652ec133
MD5 00d71d32d66f925e357f54afec0d7a44
BLAKE2b-256 71a808c9add4861588c65745d7bdb658c800db81d2fef54121d2b279927fe7ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp311-cp311-win_amd64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 42b292f1a8d3a90b7fecfd0de01c22d9ad36fdf6a56872ba46a00f443ad12680
MD5 055f5b592ad278d97b9d6d08870ce9fd
BLAKE2b-256 825acdb16e5ca66f29a2bbd1b1d4ac87e4eec8881aebf71196f8f85ac28b424f

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4ef3809f73f4f79e8007f3bf9243a6dfca768e3de45e24963a40c4e45523c1e6
MD5 3c83c1bcd21c73d0989a35f20a741e8b
BLAKE2b-256 8f8528089841c22a67e187d5cdeb274358bf4412a397f04e8c866905d3e957ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 841.4 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for oxiz-0.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b405f71a5bb71bed4b105fdae1b953718773d97b1fdbdbc5aa7ca314ef1b72d2
MD5 5116a37859a4c2512a23713b848fa819
BLAKE2b-256 1cfab388f2fabebca77256e1856394da36199813a0972a1862986a1e650e807d

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 85d63c071a9e5f7c2cb97ddbd1d9f51a8ebf8543bb66629c2e152c299bcb4e8e
MD5 54a35ae204fbfde6088ff59fa1001d11
BLAKE2b-256 d4096789b0f3d697fb772dcfdc44eb43fea31cb3246b4e32fc3f8255e2d6d4dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: oxiz-0.3.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 774.7 kB
  • 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 oxiz-0.3.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e17b318e3466e32f9537963c8f61286652024f932a7170aa080235b3e4a23bd7
MD5 85221c02174f2556289b769e3d49d151
BLAKE2b-256 92298938a98c15f884de403f7d1fe53e2e3c8d45d93c7d3bead8208117f62f6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp310-cp310-win_amd64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24018a6682681d4669f4fa7189ed40449e31b56d64cd9349d5e92488b5337bc9
MD5 a8775a2c7a76a5318c85e36a58c5fcb5
BLAKE2b-256 7467b30cf8afb88c1f6809868ebd3632c8febbcf0ee02cec86d435f1b8362535

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9270993374e9a44cdeb43e93e139fa16b2fb724cffc24e7a728e21337b178270
MD5 abb25257d2e33a0e50be6d31eed29053
BLAKE2b-256 a4f3be2fc7d9b554adfb487a2b9213ab489e309caa292688a2b21a681e1bb865

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0605895166378ed335a1b8e23bc3020ee50033709a1467f1e94a095bacfeb867
MD5 2d1ea4bcb3eed1624a44ab477c0f5f11
BLAKE2b-256 b748be711634129feda53347825f60afb14ac4545d0b69026770a19668bd4777

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bf2ae6232f3ee3203f2bf4fa783d1090499dd986df5d50962233a07cb0a08a6e
MD5 904167ecb938a3835ab931c7d6deb85a
BLAKE2b-256 b2c44508677b230e9515ed661cf8ecd85122fd07ed342fa3a9a374e8cd99c8da

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

File details

Details for the file oxiz-0.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxiz-0.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ac2d873ad230acae79f1c3842a11a7fbc0dcf231d8bf9aefee0fd6e7e71df0b8
MD5 b9a09fc9449ee8506f9a4d7c331fe651
BLAKE2b-256 3d28f30682ce1c67a343bd4b22155fc2106a025e0e3b73d3906d2d2c000e83aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxiz-0.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: pypi-publish.yml on cool-japan/oxiz

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

33 files

0.3.2

33 files

This release

0.3.1 This release

33 files

0.3.0

33 files

0.2.4

33 files

0.2.3

32 files

0.2.2

32 files

0.2.1

32 files

0.1.3

32 files

0.1.2

32 files

0.1.0

32 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