Skip to main content

within

within provides high-performance solvers for projecting out high-dimensional fixed effects from regression problems.

By the Frisch-Waugh-Lovell theorem, estimating a regression of the form y = Xβ + Dα + ε reduces to a sequence of least-squares projections, one for y and one for each column of X, followed by a cheap regression fit on the resulting residuals. The projection step of solving the normal equations D'Dx = D'z is the computational bottleneck, which is the problem within is designed to solve.

within's solvers are tailored to the structure of fixed effects problems, which can be represented as a graph (as first noted by Correia, 2016). Concretely, within uses modified LSMR with a domain decomposition (Schwarz) preconditioner, backed by approximate Cholesky local solvers (Gao et al, 2025).

Scope

within is a low-level fixed-effects kernel. Callers pass categorical labels as uint32 F-order (column-major) arrays. Labels need not be contiguous: observed labels are compacted internally, while result layouts retain the caller-visible labels. Formula-level convenience — DataFrames, string/object categoricals, pandas.factorize, and formula parsing — is intentionally out of scope and belongs to a frontend layer built on top. The pyfixest-style workflow is served by such a frontend calling within underneath.

Installation

You can install Python bindings from PyPi by running

pip install within_py

Wheels ship for CPython 3.9+ (one abi3 wheel per platform), free-threaded CPython 3.14+ (cp314t; PyO3 dropped experimental 3.13t support), and PyPy 3.11 (PyO3's minimum supported PyPy version; earlier PyPy releases are rejected at build time). CPython 3.15's abi3t (PEP 803, PyO3/maturin#3064) will let the free-threaded build fold back into a single wheel per platform.

musllinux ships no PyPy wheel at all — the musllinux_1_2 build image bundles no PyPy interpreter.

Python Quickstart

within's main user-facing function is solve. Provide a 2-D uint32 array of category codes (one column per fixed-effect factor) and a response vector y. The solver finds x in the normal equations D'D x = D'y, where D is the sparse categorical design matrix.

import numpy as np
from within import solve, solve_batch, LsmrOptions, PreconditionerConfig

np.random.seed(1)
n = 100_000
fe = np.asfortranarray(np.column_stack([
    np.random.randint(0, 500, n).astype(np.uint32),
    np.random.randint(0, 200, n).astype(np.uint32),
]))
y = np.random.randn(n)

# Default: the adaptive diagonal→Schwarz ladder + LSMR
result = solve(fe, y)

# Custom tolerance / iteration cap
result = solve(fe, y, options=LsmrOptions(tol=1e-10, maxiter=2000))

# Weighted solve
result = solve(fe, y, weights=np.ones(n))

# Opt into diagonal/Jacobi preconditioning
result = solve(fe, y, preconditioner=PreconditionerConfig.Diagonal())

FWL regression example

beta_true = np.array([1.0, -2.0, 0.5])
X = np.random.randn(n, 3)
y = X @ beta_true + np.random.randn(n)

result = solve_batch(fe, np.column_stack([y, X]))
y_tilde, X_tilde = result.demeaned[:, 0], result.demeaned[:, 1:]
beta_hat = np.linalg.lstsq(X_tilde, y_tilde, rcond=None)[0]
print(np.round(beta_hat, 4))  # [ 0.9982 -2.006   0.5005]

Varying slopes

Pass a list of Effect terms instead of a categories array. Each term is a factor's level codes plus an optional intercept and zero or more slope covariates (per-level slopes, as in fixest's f[z] notation).

from within import solve, Effect

firm = np.random.randint(0, 500, n).astype(np.uint32)
year = np.random.randint(0, 20, n).astype(np.uint32)
x = np.random.randn(n)  # covariate whose slope varies by firm

result = solve(
    [
        Effect(firm, intercept=True, slopes=[x]),  # firm intercept + firm-specific x slope
        Effect(year, intercept=True),              # year intercept
    ],
    y,
)

# Read firm level 3's x-slope via the layout map (column 0 = intercept, 1 = first slope):
i = result.layout.index(0, 3, 1)
print(result.x[i])

Python API

High-level functions

Function Description
solve(design, y, weights?, options?, preconditioner?) Solve a single right-hand side. Returns SolveResult.
solve_batch(design, Y, weights?, options?, preconditioner?) Solve multiple RHS vectors in parallel. Y has shape (n_obs, k). Returns BatchSolveResult.

design is a persistent Design, a 2-D uint32 array of shape (n_obs, n_factors), or a list of Effect terms (see Varying slopes). A UserWarning is emitted when a C-contiguous categories array is passed — use np.asfortranarray(design) for best performance.

Persistent solver

For repeated solves with the same design matrix, Design reuses the preprocessed observation storage and Solver builds the weight-dependent state and preconditioner once.

from within import Design, Solver, solve

design = Design(fe)
solver = Solver(design)
r = solver.solve(y)                            # reuses preconditioner
r = solver.solve_batch(np.column_stack([y, X]))

precond = solver.preconditioner                # picklable property
solver2 = Solver(design, preconditioner=precond)  # skip re-factorization

# Reuse design preprocessing while rebuilding weight-dependent solver state.
weighted = solve(design, y, weights=np.ones(n))
Property / Method Description
Design(design) Build an owned native design for reuse across solves and solvers.
Solver(design, weights?, preconditioner?) Build solver. Factorizes the preconditioner at construction.
.solve(y, options?) Solve a single RHS with the given LSMR tuning. Returns SolveResult.
.solve_batch(Y, options?) Solve multiple RHS columns in parallel. Returns BatchSolveResult.
.preconditioner Return the built Preconditioner (picklable), or None. Reuse via Solver(design, preconditioner=p).

Solver configuration

Class Description
LsmrOptions(tol=1e-8, maxiter=1000, local_size=None) Modified LSMR. local_size enables windowed reorthogonalization.

Preconditioners

The preconditioner argument accepts any of:

Form Meaning
None (default) Library default — Adaptive: diagonal, escalating to additive Schwarz on a stalled contraction.
PreconditionerConfig.Off() Explicit identity — solve unpreconditioned.
PreconditionerConfig.Additive() Additive Schwarz shortcut, built up front.
PreconditionerConfig.Diagonal() Diagonal/Jacobi preconditioner using diag(D^T W D)^{-1}.
PreconditionerConfig.Additive(local_solver?, reduction?) Tuned additive Schwarz. Argument types import from within.config.
PreconditionerConfig.Adaptive(local_solver?, reduction?, stall?) Tuned form of the default; the factorization is built only on escalation.
Preconditioner instance Reuse a previously-built preconditioner across solvers.

PreconditionerConfig is a tagged union: each variant is a subclass, so instances support match/case and compare by value. A built preconditioner exposes the configuration used to construct it as .config and its original build duration in seconds as .build_duration_seconds; both are preserved across pickling and reuse.

Local solver configuration (advanced — within.config)

Class Description
LocalSolverConfig(approx_chol?, schur?, dense_threshold=24, scaling?) Schur reduction + approximate Cholesky. Omit schur for the library-default approximate variant; pass schur=Schur.exact() to request an exact Schur (slower, used for validation).
Schur.approximate(config?) / Schur.exact() Schur-reduction mode passed as LocalSolverConfig(schur=...).
ApproxCholConfig(seed=0, split_merge=None) Approximate Cholesky parameters.
ApproxSchurConfig(seed=0, split=1) Approximate Schur complement sampling parameters.
ReductionStrategy Auto (default), AtomicScatter, ParallelReduction (class attributes, not an Enum).

Result types

SolveResult: x (coefficients), unidentified (directions the data cannot identify, as UnidentifiedDirection(term, level, column) records), layout (a CoefficientLayout mapping a (term, level, column) address to its flat x index and back), demeaned (residuals), converged, iterations, residual, time_total, time_setup, time_solve.

BatchSolveResult: Same fields, with converged, iterations, residual, and time_solve as lists (one entry per RHS).

Coefficients for unidentified directions are pinned to the minimal-norm value 0 (never NaN). This is why x can differ from reference tools that instead drop a reference level; the identified fit — demeaned — is unaffected by the choice.

Rust API

use ndarray::Array2;
use within::{solve, LsmrOptions, PreconditionerConfig};
use within::config::{LocalSolverConfig, ReductionStrategy};

let categories = /* Array2<u32> of shape (n_obs, n_factors) */;
let y: &[f64] = /* response vector */;

// Default: LSMR + the adaptive ladder (None → library default)
let r = solve(categories.view(), &y, None, &LsmrOptions::default(), None)?;
assert!(r.converged);

// Tighter tolerance with an explicit additive preconditioner
let lsmr = LsmrOptions { tol: 1e-10, ..LsmrOptions::default() };
let precond = PreconditionerConfig::Additive {
    local_solver: LocalSolverConfig::default(),
    reduction: ReductionStrategy::default(),
};
let r = solve(categories.view(), &y, None, &lsmr, &precond)?;

// Opt into diagonal/Jacobi preconditioning
let diagonal = PreconditionerConfig::Diagonal;
let r = solve(categories.view(), &y, None, &lsmr, &diagonal)?;

Persistent solver — build once, solve many:

use ndarray::array;
use within::{solve, Channel, CoefficientAddress, Design, Solver};

// Caller labels are deliberately non-contiguous.
let categories = array![
    [10_u32, 100],
    [20, 100],
    [10, 900],
    [20, 900],
];
let y = [1.0, 2.0, 3.0, 4.0];

// Build and compact the design once, then share it across solvers.
let design = Design::from_categories(categories.view())?;
let unweighted = Solver::new(&design, None, None)?;
let weights = [1.0, 2.0, 1.0, 2.0];
let weighted = Solver::new(&design, Some(&weights), None)?;

let result = unweighted.solve(&y, None)?;
let weighted_result = weighted.solve(&y, None)?;
let one_shot_result = solve(&design, &y, None, None, None)?;
assert!(weighted_result.converged && one_shot_result.converged);

// Internal factor positions stay private; result lookup uses caller labels.
let address = CoefficientAddress {
    channel: Channel { term: 1, column: 0 },
    level: 900,
};
let slot = result.layout.index(address).expect("observed label");
assert_eq!(result.layout.address(slot), Some(address));
assert_eq!(result.x.len(), 4); // two observed levels in each of two factors

solve and Solver::new take the preconditioner as impl Into<PreconditionerInput>: None (library default), a &PreconditionerConfig or owned PreconditionerConfig (e.g. PreconditionerConfig::Off for the identity), or an owned/borrowed Preconditioner for reuse. LSMR options are impl Into<Option<&LsmrOptions>>, so None accepts the defaults and &opts overrides them.

Type Variants / Fields
Design Reusable immutable design; build with Design::from_categories or Design::new, then share via Solver::new(&design, ...) or solve(&design, ...).
LsmrOptions { tol: f64, maxiter: usize, local_size: Option<usize> }
PreconditionerConfig Off | Additive { local_solver: LocalSolverConfig, reduction: ReductionStrategy } | Diagonal (#[non_exhaustive])
LocalSolverConfig { approx_chol, schur: SchurMode, dense_threshold, scaling }
SchurMode Approximate(ApproxSchurConfig) | Exact
Preconditioner Opaque built handle — reuse via Solver::new(.., precond) (owned or &)
Effect Effect::new(levels: &[u32], intercept: bool, slopes: impl IntoIterator<Item = &[f64]>) -> Result<Self, BuildError>
CoefficientAddress { channel: Channel { term, column }, level: u32 }
CoefficientLayout index(CoefficientAddress) -> Option<usize>, address(usize) -> Option<CoefficientAddress>, n_dofs(), n_terms(), n_levels(term), n_columns(term)

Varying slopes

Pass a Vec<Effect> instead of a categories array. Each term is a factor's level codes plus an optional intercept and zero or more slope covariates (per-level slopes, as in fixest's f[z] notation).

use within::{solve, Channel, CoefficientAddress, Effect};

let firm: &[u32] = /* level codes */;
let year: &[u32] = /* level codes */;
let x: &[f64] = /* covariate whose slope varies by firm */;

let terms = vec![
    Effect::new(firm, true, [x])?,  // firm intercept + firm-specific x slope
    Effect::new(year, true, [])?,   // year intercept
];
let r = solve(terms, &y, None, None, None)?;

// Read firm level 3's x-slope via the layout map (column 0 = intercept, 1 = first slope):
let at = CoefficientAddress { channel: Channel { term: 0, column: 1 }, level: 3 };
println!("{}", r.x[r.layout.index(at).unwrap()]);

Solver::new takes the same Vec<Effect>, so a slope design can be reused across solves like any other.

Lower-level access

Module Visibility Key types
within::config public LsmrOptions, PreconditionerConfig, LocalSolverConfig, SchurMode, ApproxCholConfig, ApproxSchurConfig, ScalingConfig, ReductionStrategy
within::error public WithinError, BuildError, SolveError
block_elim / channel / csr_block / domain / linalg / operator / solver pub(crate) implementation layers — public items are re-exported at the crate root

Project structure

crates/
  schwarz-precond/   Generic domain decomposition library (traits, solvers, Schwarz preconditioners)
  within/            Core fixed-effects solver (designs, domains, operators, solver)
  within-py/         PyO3 bridge (cdylib → within._within)
python/within/       Python package re-exporting the Rust extension
benchmarks/          Python benchmark framework

Development

Uses pixi as the task runner.

pixi run develop                         # Build Rust extension (release mode)
pixi run test                            # Rebuild + pytest
cargo test --workspace                   # Rust tests only
cargo bench -p within                    # Criterion benchmarks
pixi run python -m benchmarks run all    # Python benchmarks

Rust changes require rebuilding before running Python code (pixi run develop).

License

MIT

References

  • Correia, Sergio. "A feasible estimator for linear models with multi-way fixed effects." Preprint at http://scorreia.com/research/hdfe.pdf (2016).
  • Gao, Y., Kyng, R. & Spielman, D. A. (2025). AC(k): Robust Solution of Laplacian Equations by Randomized Approximate Cholesky Factorization. SIAM Journal on Scientific Computing.
  • Toselli & Widlund (2005). Domain Decomposition Methods — Algorithms and Theory. Springer.
  • Xu, J. (1992). Iterative Methods by Space Decomposition and Subspace Correction. SIAM Review, 34(4), 581--613.

Metadata

Release files for within-py 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for within-py 0.4.0
File Size Uploaded Provenance
within_py-0.4.0.tar.gz 251.5 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for within-py 0.4.0
File
within_py-0.4.0-pp311-pypy311_pp73-win_amd64.whl PyPy 3.11 PyPy 3.11 7.3 Windows x86-64 Details
within_py-0.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.17+ x86-64 Details
within_py-0.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.17+ ARM64 Details
within_py-0.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl PyPy 3.11 PyPy 3.11 7.3 macOS 11.0+ ARM64 Details
within_py-0.4.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 macOS 10.12+ x86-64 Details
within_py-0.4.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
within_py-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
within_py-0.4.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
within_py-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details
within_py-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
within_py-0.4.0-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
within_py-0.4.0-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details
within_py-0.4.0-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
within_py-0.4.0-cp39-abi3-win32.whl CPython 3.9 abi3 Windows x86-32 Details
within_py-0.4.0-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details
within_py-0.4.0-cp39-abi3-musllinux_1_2_i686.whl CPython 3.9 abi3 Linux musl 1.2+ x86-32 Details
within_py-0.4.0-cp39-abi3-musllinux_1_2_armv7l.whl CPython 3.9 abi3 Linux musl 1.2+ ARMv7l Details
within_py-0.4.0-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details
within_py-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
within_py-0.4.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl CPython 3.9 abi3 Linux glibc 2.17+ IBM System/390x Details
within_py-0.4.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl CPython 3.9 abi3 Linux glibc 2.17+ PowerPC 64-le Details
within_py-0.4.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.9 abi3 Linux glibc 2.17+ ARMv7l Details
within_py-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
within_py-0.4.0-cp39-abi3-manylinux_2_12_i686.manylinux2010_i686.whl CPython 3.9 abi3 Linux glibc 2.12+ x86-32 Details
within_py-0.4.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
within_py-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 22.8 MB

Release files / within_py-0.4.0.tar.gz

Download URL within_py-0.4.0.tar.gz
Size 251.5 kB
Tags Source
SHA-256 checksum
How to use checksums
87f887a78d6ac844b4f0c869c858fd888d0257fd139ad2fb133b7f2cb0ea1b96
BLAKE2b-256 checksum
How to use checksums
dbccbb97ad36eaa60cabcde4176e69334d50ba699e0f32a2292bd37228c82ba7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-pp311-pypy311_pp73-win_amd64.whl

Download URL within_py-0.4.0-pp311-pypy311_pp73-win_amd64.whl
Size 752.7 kB
Tags PyPy 3.11 PyPy 3.11 7.3 Windows x86-64
SHA-256 checksum
How to use checksums
cabd3567ae17e93ca05b3876c3ab53f6a2a7a4769ddbe3bd714f3b2e0eb1e98f
BLAKE2b-256 checksum
How to use checksums
5e77e25a8499ec98177f5133e3d4d5c68dba9f314ff95311f91c0a7dc90bb2d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL within_py-0.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 864.4 kB
Tags Linux glibc 2.17+ x86-64 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
ca76a40254e09348246d94306d601774295fd25c4e9af29c7cb0a3c55fb2ca2c
BLAKE2b-256 checksum
How to use checksums
14e7ce206c1587415f6360dfb5b6bc576d4040f1227a1aa025ea0778cd21fcfd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL within_py-0.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 829.1 kB
Tags Linux glibc 2.17+ ARM64 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
32e4743cd157104f1e803bd22dabbd5b127de0b77cab4568f4f3eb544aae79a3
BLAKE2b-256 checksum
How to use checksums
b5181239c12f3f19d4a583710edc1a9fc857527dc609f957d8aa6bfce528d884
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl

Download URL within_py-0.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl
Size 796.4 kB
Tags PyPy 3.11 PyPy 3.11 7.3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
11ad049bb3f95cddf403a3e49d94fee65da813ddd2b6e2bbbe8c53aef9d480c1
BLAKE2b-256 checksum
How to use checksums
63bf004fab6a10f7e248310f1a72dc0ee2597ea6611a3b8e8377d3194639c378
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl

Download URL within_py-0.4.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Size 822.1 kB
Tags PyPy 3.11 PyPy 3.11 7.3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
389983245dd8651a08e7e7bdd604746dd5383e2c21f335243864c58cf5e230af
BLAKE2b-256 checksum
How to use checksums
886f72dcd72c1555164649578214c8c9ce660848e1c703aaa5198e5d138df1ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp314-cp314t-win_amd64.whl

Download URL within_py-0.4.0-cp314-cp314t-win_amd64.whl
Size 743.2 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
59c6eafef09b4bcc8919d561d3b836cbd74dd74dc58759e343fdbd8db92d6269
BLAKE2b-256 checksum
How to use checksums
c0787d538df8507bc6dd7820513c86f678897ef376cef5291324a51d2890cc67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL within_py-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 1.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
aad3d15f962f12d29ad5ac083b73ec0f44e8bab841e2710ecc4a3a851ac98fdc
BLAKE2b-256 checksum
How to use checksums
766aeaf4f3508001cf1b9fe4395e203d7e2e09baf838b0e21aeff021eb940f27
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL within_py-0.4.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 858.3 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1136b6183d2229745e07c8a6adfbc36d0d10e1b9675c2ab63819371b1f17850a
BLAKE2b-256 checksum
How to use checksums
a7a2fe82979bd1b3e6ce4d3094176abd5b999d59d932fee0006df4a07ba640ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL within_py-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 821.0 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
bd021a14f3c103e6bc863765a44c9ee2b1973c2145886dc39e8da1448abfca27
BLAKE2b-256 checksum
How to use checksums
ef9da9b3a9289a1a78347aed5cc74601fa327630c8548eea4d2c418cca7b1390
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL within_py-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 786.7 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
15a405ea354183573de84fcee52ba3bb5358e1bcdce14b549aedf0015cd91032
BLAKE2b-256 checksum
How to use checksums
45eac297a5d0af41f7e863bd2f3aab42e8548a39bb92036c7b99b8e5ae7d7eea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL within_py-0.4.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 819.9 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
51e37f6dcfc9cde004ec2e104d892be979a909ece7f5923587750a5a095024ba
BLAKE2b-256 checksum
How to use checksums
99948da7d3ee14f8ec440a400883dcfe9c04005906586211d9979d273a1ea17f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-win_arm64.whl

Download URL within_py-0.4.0-cp39-abi3-win_arm64.whl
Size 700.2 kB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
1cbb9d89487f545bb4ef929a0db7002b3eb5ba4aa25dad7427775e67708466fa
BLAKE2b-256 checksum
How to use checksums
19a57a083af17264c0083febfdf8bc467120aa7366b9c23fdb73f31cd72ddf65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-win_amd64.whl

Download URL within_py-0.4.0-cp39-abi3-win_amd64.whl
Size 753.6 kB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
7f6879aa024666928ed39de81de3eb696234cd4d2f681a90c0ffc686a2305a12
BLAKE2b-256 checksum
How to use checksums
d6930f507fe0062c12d4c559877f2897d082adb56e518c5a8e4f58650955fe76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-win32.whl

Download URL within_py-0.4.0-cp39-abi3-win32.whl
Size 659.2 kB
Tags CPython 3.9 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
a693cca8f58ae16b41aeecc1983cdc19ef9c301477053a37315bffd301481dec
BLAKE2b-256 checksum
How to use checksums
e1068a9657ea74002f79032b64e0f66b481bec0634e62e9f03253f15c32daaa3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL within_py-0.4.0-cp39-abi3-musllinux_1_2_x86_64.whl
Size 1.1 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
7cfb5e15e10487549ad35a15a351cbb077e84d2dcfdd31cfe21cc7dd8c70a450
BLAKE2b-256 checksum
How to use checksums
5b98d7b15a3357594651470e8a68a38ebaca4cbed87ccc24b2f9ee6e4a5dd6ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-musllinux_1_2_i686.whl

Download URL within_py-0.4.0-cp39-abi3-musllinux_1_2_i686.whl
Size 1.1 MB
Tags CPython 3.9 Linux musl 1.2+ x86-32 abi3
SHA-256 checksum
How to use checksums
23ac23db720df0cb7ae0e17945bbccd9c2d0908bc3bc1108d200216eeb7117d3
BLAKE2b-256 checksum
How to use checksums
648686092d94955d4e590e65173856ca47e3e0e82f443c0b617cec4bd3348820
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-musllinux_1_2_armv7l.whl

Download URL within_py-0.4.0-cp39-abi3-musllinux_1_2_armv7l.whl
Size 1.1 MB
Tags CPython 3.9 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
6adac5bb6a25ba1ebf67decdd7fde44e232717d990a0bc2e8b26ccc58d4c2047
BLAKE2b-256 checksum
How to use checksums
ef33666161104be41788f1acab27a7b74012cc1644cfec86ede9763eb29b86a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL within_py-0.4.0-cp39-abi3-musllinux_1_2_aarch64.whl
Size 1.0 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
d01e3805ea27580439c30bccfd66667aeda7c237c22329a9b1e1ee1835c5e8ee
BLAKE2b-256 checksum
How to use checksums
b0a56aa96e88ca6d7b2a1dd74598d7a3f2db5593421dbbc8ba169474ffd70b06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL within_py-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 866.3 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
9293688e0bf521104bee06b906b6538bb1de811c98587dd15726753555823a77
BLAKE2b-256 checksum
How to use checksums
12dbdfad58f009d88e21a3c30ca0f152e31bdec4aad84527ae7f8e8c1fa3e7ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL within_py-0.4.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 962.3 kB
Tags CPython 3.9 Linux glibc 2.17+ IBM System/390x abi3
SHA-256 checksum
How to use checksums
b8fb6123a731db284cd398f635fb5941031115a024ed4ddbf935cbc5f7ea2891
BLAKE2b-256 checksum
How to use checksums
c29818f007705892cfd6e566b326a0b1c0c8c99da96602afe448ac43eaf63124
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL within_py-0.4.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 957.2 kB
Tags CPython 3.9 Linux glibc 2.17+ PowerPC 64-le abi3
SHA-256 checksum
How to use checksums
8803cb18ced8790f8399ac2ff83241d739b54e791abcbbf691d1d3fe9cd4fac8
BLAKE2b-256 checksum
How to use checksums
79a604bc27d6890d2e61f339cc8496eb0f6c3f330b14d1d0792073e2e6411ea3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL within_py-0.4.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 847.6 kB
Tags CPython 3.9 Linux glibc 2.17+ ARMv7l abi3
SHA-256 checksum
How to use checksums
3e943c70884ec3ea87b51765fe03d6a3c0a06287c9e3662f1a80ac35c4a818ba
BLAKE2b-256 checksum
How to use checksums
6a3bd47df5c8b5c16f74d416045f2a57b52a7c3e91f85f0835338f4fc73d9f22
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL within_py-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 831.0 kB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
7a9c28dff5be025a0b45854dc6476a0eb5b6cbf22df27fe76c28814e2d88440a
BLAKE2b-256 checksum
How to use checksums
ef0c0e45a40db2bd2158a8480ebb3ef2a5a89b76be38101c2a36597617741f20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-manylinux_2_12_i686.manylinux2010_i686.whl

Download URL within_py-0.4.0-cp39-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Size 887.1 kB
Tags CPython 3.9 Linux glibc 2.12+ x86-32 abi3
SHA-256 checksum
How to use checksums
a46a679afe3078bfd5167cf10cb8e24d0a301c0c9e942b1b3045f8b5575a48f6
BLAKE2b-256 checksum
How to use checksums
656263768705f79db4215960afca555b5e719274f4a4e35e8e1cd26df8dbe144
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-macosx_11_0_arm64.whl

Download URL within_py-0.4.0-cp39-abi3-macosx_11_0_arm64.whl
Size 799.5 kB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b27e156547684523ddafca5f96a5555d7aa79634fc099015bca0b04908e7da1c
BLAKE2b-256 checksum
How to use checksums
948d3d5822079bf326db940d4284a00e092901e51c4d7083241293a59f011c62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / within_py-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl

Download URL within_py-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl
Size 823.5 kB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c6fc10dc1af40005f95f01f05949e76048d973a1c23e0d4ce74a910394b04e8c
BLAKE2b-256 checksum
How to use checksums
04215eba00d739714c31ca01f9a37c05f775e506dc30c3caa9fc7b5d92f132db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Security for within-py 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 27 files in this release have been uploaded with provenance metadata.

Select from 27 files

Attestation for within_py-0.4.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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