Skip to main content

coxdev

A high-performance C++ for computing Cox proportional hazards model deviance, gradients, and Hessian information matrices. Built with Eigen for ease of use in R and Python, this library provides efficient survival analysis computations with support for different tie-breaking methods.

Features

  • High Performance: C++ implementation with Eigen linear algebra library
  • Comprehensive Support: Handles both Efron and Breslow tie-breaking methods
  • Left-Truncated Data: Support for left-truncated survival data
  • Efficient Computations: Optimized algorithms for deviance, gradient, and Hessian calculations
  • Memory Efficient: Uses linear operators for large-scale computations
  • Sampling the Score: Draws of the score from the fitted model (multinomial, Bernoulli or Fisher noncentral hypergeometric draws of the failures at each event time) or from its score residuals (a wild bootstrap), reproducible from a seed on every platform
  • Cross-Platform: Works on Linux, macOS, and Windows

Installation

Prerequisites

This package requires the Eigen C++ library headers. The Eigen library is included as a git submodule.

  1. Initialize Eigen submodule: The Eigen library is included as a git submodule. Make sure it's initialized:
    git submodule update --init --recursive
    

Standard Installation

pip install .

With Custom Eigen Path

If you have Eigen installed elsewhere, you can specify its location:

env EIGEN_LIBRARY_PATH=/path/to/eigen pip install .

Development Installation

pip install .[dev]
pip install -e . --no-build-isolation

Quick Start

import numpy as np
from coxdev import CoxDeviance

# Generate sample survival data
n_samples = 1000
event_times = np.random.exponential(1.0, n_samples)
status = np.random.binomial(1, 0.7, n_samples)  # 70% events, 30% censored
linear_predictor = np.random.normal(0, 1, n_samples)

# Create CoxDeviance object
coxdev = CoxDeviance(event=event_times, status=status, tie_breaking='efron')

# Compute deviance and related quantities
result = coxdev(linear_predictor)

print(f"Deviance: {result.deviance:.4f}")
print(f"Saturated log-likelihood: {result.loglik_sat:.4f}")
print(f"Gradient norm: {np.linalg.norm(result.gradient):.4f}")

R Package

The R package in R/coxdev runs the same C++ code, with the interface of the Python package. Install it from a clone of the repository:

R CMD INSTALL R/coxdev

or with remotes::install_github("jonathan-taylor/coxdev", subdir = "R/coxdev").

library(coxdev)
set.seed(1)
n <- 1000
X <- matrix(rnorm(n * 3), n, 3)
eta <- drop(X %*% c(0.5, -0.5, 0.25))
event <- rexp(n, exp(eta))
status <- rbinom(n, 1, 0.7)

cox <- CoxDeviance$new(event = event, status = status, tie_breaking = "efron")
# or with a Surv response: Surv(time, status) or Surv(start, stop, status),
# with strata from glmnet::stratifySurv() if set
cox <- CoxDeviance$new(survival::Surv(event, status), tie_breaking = "efron")

res <- cox$compute(eta)          # Python: coxdev(eta)
res$deviance                     # the objective
res$gradient                     # its gradient in eta
res$diag_hessian                 # the diagonal of its Hessian

I <- cox$information(eta)        # a matrix-free operator, never n x n
I %*% X                          # or I$multiply(X); t(X) %*% I also works
info_beta <- crossprod(X, I %*% X)

draws <- cox$sample_score(eta, method = "fisher", n_draws = 2000, seed = 1)
G <- rnorm(n)
w <- cox$wild_score(eta, G)
Python R
CoxDeviance(event=, status=, start=, strata=, sample_weight=, tie_breaking=) CoxDeviance$new(event =, status =, start =, strata =, sample_weight =, tie_breaking =)
CoxDeviance$new(Surv(...), strata =, sample_weight =, tie_breaking =)
coxdev(eta, sample_weight) cox$compute(eta, sample_weight)
coxdev.information(eta, sample_weight) (a LinearOperator) cox$information(eta, sample_weight) (a CoxInformation, with %*%, $multiply(), $diagonal(), $to_dense(), dim())
coxdev.sample_score(eta, sample_weight, method, n_draws, seed) cox$sample_score(eta, sample_weight, method, n_draws, seed)
coxdev.wild_score(eta, multipliers, sample_weight) cox$wild_score(eta, multipliers, sample_weight)
coxdev.score_residuals(eta, X, sample_weight) cox$score_residuals(eta, X, sample_weight)
coxdev.baseline_hazard(eta, sample_weight) (a BaselineHazard) cox$baseline_hazard(eta, sample_weight) (a data frame, with stratum labels as given)

The same seed gives the same draws from R and Python. In R, a seed is a whole number up to 2^53, or a string of digits for any seed below 2^64; with seed = NULL it is drawn from R's generator, so set.seed() makes the draws reproducible. Strata may be integers, a factor or character. %*% with the operator needs R 4.4.0 or later; $multiply() works on any version.

The C++ sources in R/coxdev/src and R/coxdev/inst/include are copies of those in cpp/, so that the R package is self-contained: after editing cpp/, run R/coxdev/tools/sync_cpp.sh (CI checks that the copies agree).

Notebooks

doc/using_coxdev.md (fitting by Newton's method with the information operator, robust standard errors, the baseline hazard and survival curves, and what keeping state saves) and doc/sampling.md (the methods of sample_score compared) are jupytext notebooks, with executed copies in doc/*.ipynb. The R package has the same two as vignettes.

Advanced Usage

Left-Truncated Data

# With start times (left-truncated data)
start_times = np.random.exponential(0.5, n_samples)
coxdev = CoxDeviance(
    event=event_times, 
    status=status, 
    start=start_times,
    tie_breaking='efron'
)

Computing Information Matrix

# Get information matrix as a linear operator
info_matrix = coxdev.information(linear_predictor)

# Matrix-vector multiplication
v = np.random.normal(0, 1, n_samples)
result_vector = info_matrix @ v

# For small problems, you can compute the full matrix
X = np.random.normal(0, 1, (n_samples, 10))
beta = np.random.normal(0, 1, 10)
eta = X @ beta

# Information matrix for coefficients: X^T @ I @ X
I = info_matrix @ X
information_matrix = X.T @ I

Sampling the Score

sample_score draws the score at a linear predictor. Each draw has one entry per observation, on the scale of the score -gradient / 2, so for a design X the vector X.T @ draw is a draw of the score of the coefficients. Ties, start times and strata are handled as for the deviance.

X = np.random.normal(0, 1, (n_samples, 3))
eta = X @ np.array([0.5, -0.5, 0.25])
coxdev = CoxDeviance(event=event_times, status=status, tie_breaking='efron')

# 2000 draws of the score of the coefficients
draws = X.T @ coxdev.sample_score(eta, method='multinomial', n_draws=2000, seed=1)

# their covariance is about the (Breslow) information: the ratios are near 1
I = coxdev.information(eta)
information_matrix = X.T @ (I @ X)
print(np.diag(np.cov(draws)) / np.diag(information_matrix))

The methods are:

method Draw Score of the draw Covariance
'multinomial' the d failures at each event time drawn with replacement from the risk set, with probabilities proportional to sample_weight * exp(eta) under Breslow's (1974) likelihood, of which this is the sampling model the Breslow information
'bernoulli' each subject at risk fails independently with probability min(1, d * p), a Cox-model analogue of the weird bootstrap (Andersen et al., 1993; Burr, 1994) Breslow's, with the number of failures drawn less than the information when ties are heavy
'fisher' the set of d failures at each event time drawn from Fisher's noncentral hypergeometric distribution (Harkness, 1965; Fog, 2008): independent Bernoullis given d failures, P(A) proportional to the product of exp(eta_j) over the set A under the exact discrete partial likelihood (Cox, 1972; Kalbfleisch and Prentice, 2002), of which this is the sampling model, centered at its exact mean the information of the exact likelihood
'wild' the score residuals of the observations times independent standard normals (Lin, Wei and Ying, 1993; Kline and Santos, 2012) of the likelihood set by tie_breaking (Breslow, 1974; Efron, 1977) the sandwich, the sum of the outer products of the score residuals (Lin and Wei, 1989)

Each model-based draw is the score of failures drawn from the model: at each event time, the sum over the failures of x_j minus their expected sum. For 'multinomial' and 'fisher' the draw is from the model whose likelihood gives the score, so every draw has mean exactly zero. For 'bernoulli' this holds only while d * p < 1 for every subject at risk: the cap min(1, d * p) biases it when ties are heavy. The methods differ only at tied event times: with one failure at each event time all three draw the same failure distribution. The model-based methods (all but 'wild') need equal positive weights and do not depend on tie_breaking. 'wild' does not rely on the model: its covariance is the sandwich, which is right even when the proportional hazards model is not.

'fisher' samples and centers with the elementary symmetric polynomials of the risk weights, computed on the log scale by the recursion of Gail, Lubin and Rubinstein (1981), the one used for the exact partial likelihood by R's survival package and SAS PROC PHREG. Each event time with d tied failures among m at risk costs O(m d) once, and O(m) per draw.

wild_score gives the wild draw for given multipliers: with multipliers G, X.T @ coxdev.wild_score(eta, G) is the sum over observations of G[i] times the score residual of observation i. With G all one it is the score.

References

  • Andersen, P. K., Borgan, Ø., Gill, R. D. and Keiding, N. (1993). Statistical Models Based on Counting Processes. Springer, New York.
  • Breslow, N. E. (1974). Covariance analysis of censored survival data. Biometrics, 30(1), 89–99.
  • Burr, D. (1994). A comparison of certain bootstrap confidence intervals in the Cox model. Journal of the American Statistical Association, 89(428), 1290–1302.
  • Cox, D. R. (1972). Regression models and life-tables (with discussion). Journal of the Royal Statistical Society, Series B, 34(2), 187–220.
  • Efron, B. (1977). The efficiency of Cox's likelihood function for censored data. Journal of the American Statistical Association, 72(359), 557–565.
  • Fog, A. (2008). Sampling methods for Wallenius' and Fisher's noncentral hypergeometric distributions. Communications in Statistics: Simulation and Computation, 37(2), 241–257.
  • Gail, M. H., Lubin, J. H. and Rubinstein, L. V. (1981). Likelihood calculations for matched case-control studies and survival studies with tied death times. Biometrika, 68(3), 703–707.
  • Harkness, W. L. (1965). Properties of the extended hypergeometric distribution. The Annals of Mathematical Statistics, 36(3), 938–945.
  • Kalbfleisch, J. D. and Prentice, R. L. (2002). The Statistical Analysis of Failure Time Data, 2nd edition. Wiley, Hoboken, NJ.
  • Kline, P. and Santos, A. (2012). A score based approach to wild bootstrap inference. Journal of Econometric Methods, 1(1), 23–41.
  • Lin, D. Y. and Wei, L. J. (1989). The robust inference for the Cox proportional hazards model. Journal of the American Statistical Association, 84(408), 1074–1078.
  • Lin, D. Y., Wei, L. J. and Ying, Z. (1993). Checking the Cox model with cumulative sums of martingale-based residuals. Biometrika, 80(3), 557–572.

The random numbers come from the C++ code, from the bits of std::mt19937_64, so the same seed gives the same draws on every platform. With seed=None, a fresh seed is drawn.

Score Residuals and the Baseline Hazard

# the score residuals of a design: row i is observation i's contribution
# to the score of the coefficients
U = coxdev.score_residuals(eta, X)
I = X.T @ (coxdev.information(eta) @ X)
robust_cov = np.linalg.solve(I, np.linalg.solve(I, U.T @ U).T)   # the sandwich

# Breslow's (or, with Efron's ties, Efron's) baseline hazard, for eta as given
H = coxdev.baseline_hazard(eta)
H.time, H.hazard, H.cumulative_hazard, H.stratum

The cumulative hazard of observation i at time t is the cumulative_hazard at the last failure time <= t (in its stratum) times exp(eta[i]). Both agree with R's survival (residuals(fit, type = "score"), which is per unit weight, and basehaz(fit, centered = FALSE)).

Schoenfeld Residuals and Expected Survival at Exit

# Schoenfeld residuals: for each failure, x_i less the mean of x over its
# risk set; zero rows for the observations that do not fail
R = coxdev.schoenfeld_residuals(eta, X)

# the expected number of events of each observation over (start, event],
# and the probability of surviving to event, given survival to start
E = coxdev.expected_events(eta)
S = coxdev.survival_at_exit(eta)          # exp(-E)
martingale = status - E

The Schoenfeld residual of a failure is its covariates less their mean over its risk set, with weights sample_weight * exp(eta) (Schoenfeld, 1982). With Efron's ties the mean is the average over the tied failures of their Efron means, as in R's survival. Weighted by sample_weight, they sum to the score. Plotted against time, or against a function of time, they check the proportional hazards assumption (Grambsch and Therneau, 1994; Therneau and Grambsch, 2000, Chapter 6). As for the score residuals, the C++ takes one covariate, an n-vector, at a time, and schoenfeld_residuals loops over the columns of X, dense or sparse.

risk_set_variance(eta, Z) gives, for each failure, the variance of each column of Z over its risk set, the V_z by which Grambsch and Therneau (1994) scale the Schoenfeld residuals: for one covariate, beta + r / V_z has mean about beta(t) at the failure time t. Weighted by sample_weight, the variances sum to the diagonal of the information. The covariance of two columns follows by polarization, (V(y + z) - V(y - z)) / 4.

The expected number of events of observation i is exp(eta[i]) times the increase of the baseline cumulative hazard (Breslow, 1972) over (start[i], event[i]], with Efron's share at a tied failure time for the failures there. status - E is the martingale residual (Barlow and Prentice, 1988; Therneau, Grambsch and Fleming, 1990), and exp(-E) the expected survival probability at exit (Therneau and Grambsch, 2000, Chapter 4). These agree with R's survival: residuals(fit, type = "schoenfeld") (which has the rows of the failures only, in order of failure time), predict(fit, type = "expected"), residuals(fit, type = "martingale") and predict(fit, type = "survival").

References

  • Barlow, W. E. and Prentice, R. L. (1988). Residuals for relative risk regression. Biometrika, 75(1), 65–74.
  • Breslow, N. E. (1972). Discussion of Professor Cox's paper. Journal of the Royal Statistical Society, Series B, 34(2), 216–217.
  • Grambsch, P. M. and Therneau, T. M. (1994). Proportional hazards tests and diagnostics based on weighted residuals. Biometrika, 81(3), 515–526.
  • Schoenfeld, D. (1982). Partial residuals for the proportional hazards regression model. Biometrika, 69(1), 239–241.
  • Therneau, T. M. and Grambsch, P. M. (2000). Modeling Survival Data: Extending the Cox Model. Springer, New York.
  • Therneau, T. M., Grambsch, P. M. and Fleming, T. R. (1990). Martingale-based residuals for survival models. Biometrika, 77(1), 147–160.

The C-index

C = coxdev.c_index(eta)          # Harrell's concordance index

Harrell's concordance index (Harrell et al., 1982; Harrell, Lee and Mark, 1996): for each failure i at time t, every j at risk at t is compared with it, except the other failures at t; the pair has weight w_i * w_j, is concordant if eta[i] > eta[j], and counts half if they are tied. With strata, only pairs within a stratum are compared. It is R's survival::concordance(y ~ -eta, weights = w) and, without strata, glmnet::Cindex. A two-dimensional eta gives one C-index per column.

It takes O(n log n), by the algorithm of the survival package's concordance vignette (Therneau and Atkinson): the subjects in decreasing time, with the weights of the risk set in a Fenwick tree (Fenwick, 1994) over the ranks of the predictor, counting the ordered pairs as Knight (1966) does for Kendall's tau.

References

  • Fenwick, P. M. (1994). A new data structure for cumulative frequency tables. Software: Practice and Experience, 24(3), 327–336.
  • Harrell, F. E., Califf, R. M., Pryor, D. B., Lee, K. L. and Rosati, R. A. (1982). Evaluating the yield of medical tests. JAMA, 247(18), 2543–2546.
  • Harrell, F. E., Lee, K. L. and Mark, D. B. (1996). Multivariable prognostic models: issues in developing models, evaluating assumptions and adequacy, and measuring and reducing errors. Statistics in Medicine, 15(4), 361–387.
  • Knight, W. R. (1966). A computer method for calculating Kendall's tau with ungrouped data. Journal of the American Statistical Association, 61(314), 436–439.
  • Therneau, T. M. and Atkinson, E. J. The concordance statistic. Vignette of the R package survival.

Different Tie-Breaking Methods

# Efron's method (default)
coxdev_efron = CoxDeviance(event=event_times, status=status, tie_breaking='efron')

# Breslow's method
coxdev_breslow = CoxDeviance(event=event_times, status=status, tie_breaking='breslow')

API Reference

CoxDeviance

The main class for computing Cox model quantities.

Parameters

  • event: Event times (failure times) for each observation
  • status: Event indicators (1 for event occurred, 0 for censored)
  • start: Start times for left-truncated data (optional)
  • strata: Stratum labels (optional): integers, strings or any sortable values; baseline_hazard reports each stratum by its label
  • tie_breaking: Method for handling tied event times ('efron' or 'breslow')

Methods

  • __call__(linear_predictor, sample_weight=None): Compute deviance and related quantities
  • information(linear_predictor, sample_weight=None): Get information matrix as linear operator
  • sample_score(linear_predictor, sample_weight=None, method='multinomial', n_draws=None, seed=None): Draws of the score, one entry per observation: a vector if n_draws is None, else an (n, n_draws) array. See Sampling the Score
  • wild_score(linear_predictor, multipliers, sample_weight=None): The wild draw of the score for given multipliers
  • score_residuals(linear_predictor, X, sample_weight=None): The (n, p) score residuals of a design X
  • baseline_hazard(linear_predictor, sample_weight=None): The baseline hazard, a BaselineHazard with time, hazard, cumulative_hazard and stratum
  • schoenfeld_residuals(linear_predictor, X, sample_weight=None): The (n, p) Schoenfeld residuals of a design X, zero for the observations that do not fail
  • risk_set_variance(linear_predictor, Z, sample_weight=None): The (n, p) risk-set variances of the columns of Z at each failure, zero for the observations that do not fail
  • c_index(linear_predictor, sample_weight=None): Harrell's concordance index (C-index) of a linear predictor, or one per column
  • expected_events(linear_predictor, sample_weight=None): The expected number of events of each observation over (start, event]
  • survival_at_exit(linear_predictor, sample_weight=None): The expected survival probability of each observation at its exit, exp(-expected_events)

CoxDevianceResult

Result object containing computation results.

Attributes

  • linear_predictor: The linear predictor values used
  • sample_weight: Sample weights used
  • loglik_sat: Saturated log-likelihood value
  • deviance: Computed deviance value
  • gradient: Gradient of deviance with respect to linear predictor
  • diag_hessian: Diagonal of Hessian matrix

Performance

The library is optimized for performance:

  • C++ Implementation: Core computations in C++ with Eigen
  • Memory Efficient: Reuses buffers and uses linear operators
  • Vectorized Operations: Leverages Eigen's optimized linear algebra
  • Minimal Python Overhead: Heavy computations done in C++

Building from Source

Prerequisites

  • C++ compiler with C++17 support
  • Eigen library headers
  • For Python library: Python >= 3.9 + pybind11

C++ API

The Python package (and the R package in R/coxdev) wrap the C++ classes CoxDeviance and StratifiedCoxDeviance in cpp/include/coxdev.h. After compute_deviance(eta, weights), besides the gradient, the diagonal of the Hessian, products with the information and draws of the score, they give:

  • score_residuals(x): for one covariate x (an n-vector), the n-vector of score residuals, each observation's contribution to the score x^T (-gradient / 2), centered within each risk set (with Efron's weights for ties if efron). They are linear in x, with wild_score the adjoint: G^T score_residuals(x) is x^T wild_score(G). The C++ never sees a design: applied to each column of X they give the n x p matrix U, whose crossproduct U^T U is the middle of the robust (sandwich) variance (Lin and Wei, 1989).
  • baseline_hazard(): the estimate of the baseline hazard, Breslow's (1972) or, with Efron's ties, Efron's (1977), at each distinct failure time (within each stratum): its increments and cumulative sum, for the linear predictor as given, so that the cumulative hazard of observation i at time t is cumulative_hazard(t) * exp(eta_i).

cpp/tests has tests of these against direct computations:

c++ -std=c++17 -O2 -Ieigen -Icpp/include cpp/src/coxdev.cpp cpp/tests/test_residuals_hazard.cpp -o test_residuals_hazard
./test_residuals_hazard

Testing

Most of the tests compare coxdev with R's survival and glmnet packages, through rpy2. If rpy2, R or those packages are missing, those tests are skipped and the run still passes, so check the summary for skipped tests.

Running the full test suite in a fresh environment

  1. Install R (4.x), and in it survival and glmnet 5.0 or later (the tests use glmnet::coxnet.deviance and glmnet:::coxgrad with cox.ties):

    Rscript -e 'install.packages(c("survival", "glmnet"), repos = "https://cloud.r-project.org")'
    Rscript -e 'packageVersion("glmnet")'   # 5.0 or later
    
  2. Clone the repository with its Eigen submodule, and make a new virtual environment:

    git clone --recurse-submodules https://github.com/jonathan-taylor/coxdev.git
    cd coxdev
    python -m venv .venv
    source .venv/bin/activate          # on Windows: .venv\Scripts\activate
    python -m pip install --upgrade pip
    

    (In an existing clone without the submodule, run git submodule update --init --recursive.)

  3. Build and install coxdev (this needs a C++17 compiler), with the test dependencies and rpy2:

    pip install ".[test]" rpy2
    
  4. Check that rpy2 finds R and the two packages:

    python -c "from rpy2.robjects.packages import importr; importr('survival'); importr('glmnet'); print('R is ready')"
    
    • If rpy2 first prints Error importing in API mode ... Trying to import in ABI mode, its compiled interface was built for another version of R. ABI mode works; export RPY2_CFFI_MODE=ABI skips the attempt and the message.
    • If rpy2 cannot find R, set R_HOME: export R_HOME=$(R RHOME).
  5. From the top of the repository, run the tests, reporting any skipped:

    python -m pytest tests -rs
    

    It takes a couple of minutes, and should end with every test passed and none skipped.

For a quick check, --test-size N runs a random sample of N of the (many) parametrized cases in each of the large comparison files:

python -m pytest tests -rs --test-size 50

Testing the R package

The R package has its own tests, against survival and glmnet, and tests/test_R_package.py checks that the R and Python packages agree (results, information and draws for the same seed). With the R package installed (R CMD INSTALL R/coxdev, which needs Rcpp, RcppEigen and R6, plus testthat for its tests):

Rscript -e 'testthat::test_local("R/coxdev")'
python -m pytest tests/test_R_package.py -rs

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass
  6. Submit a pull request

License

This project is licensed under the BSD-3-Clause License - see the LICENSE file for details.

Citation

If you use this library in your research, please cite:

@software{coxdev2024,
  title={coxdev: High-performance Cox proportional hazards deviance computation},
  author={Taylor, Jonathan and Hastie, Trevor and Narasimhan, Balasubramanian},
  year={2024},
  url={https://github.com/jonathan-taylor/coxdev}
}

Acknowledgments

  • Built with Eigen for efficient linear algebra
  • Uses pybind11 for Python bindings
  • Inspired by the R glmnet package for survival analysis

Metadata

Release files for coxdev 0.3.1

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

Source distribution (sdist)

Source distribution for coxdev 0.3.1
File Size Uploaded Provenance
coxdev-0.3.1.tar.gz 3.7 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for coxdev 0.3.1
File
coxdev-0.3.1-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
coxdev-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
coxdev-0.3.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
coxdev-0.3.1-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
coxdev-0.3.1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
coxdev-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details
coxdev-0.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
coxdev-0.3.1-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
coxdev-0.3.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
coxdev-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
coxdev-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
coxdev-0.3.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
coxdev-0.3.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
coxdev-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
coxdev-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
coxdev-0.3.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
coxdev-0.3.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
coxdev-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
coxdev-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
coxdev-0.3.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
coxdev-0.3.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
coxdev-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
coxdev-0.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
coxdev-0.3.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
coxdev-0.3.1-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
coxdev-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl CPython 3.9 CPython 3.9 Linux musl 1.2+ x86-64 Details
coxdev-0.3.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
coxdev-0.3.1-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details

Total release size: 18.5 MB

Release files / coxdev-0.3.1.tar.gz

Download URL coxdev-0.3.1.tar.gz
Size 3.7 MB
Tags Source
SHA-256 checksum
How to use checksums
78fa534e6d84e8fa778625e2cc092d6aeb8c3a317acee75085c264791a262bd2
BLAKE2b-256 checksum
How to use checksums
fd7ad133ec4f1f456d1620b6fe9c0d4daf32e28a8c7f54055b1e3626d91acf20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp314-cp314t-win_amd64.whl

Download URL coxdev-0.3.1-cp314-cp314t-win_amd64.whl
Size 357.4 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
574180c91d877a1be69adf7751fd6326956279f2dd2a6db43736494aa9ef1bf4
BLAKE2b-256 checksum
How to use checksums
ca9ea046a96a0c8b3f3cee3bfb77b3bc629990fabd59cda4be3e61b369995f02
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL coxdev-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
732f24c4922597e8b987e44675e3d7f784a2adf69151ff9bc46850640bc8f656
BLAKE2b-256 checksum
How to use checksums
eb666306c36b5dc2b20b44e57022f8b8fc8bd1f82640fd7934dbeccca2ce9278
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL coxdev-0.3.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 251.8 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
563ae5803e0f055cb97f13907e9768ad0a5c1b9a6e90dab0ed66011f21a4f171
BLAKE2b-256 checksum
How to use checksums
824e14c184ed10bcd6df5a72ec330a3c538763dc73b7a576f63aa026be5bdf1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp314-cp314t-macosx_11_0_arm64.whl

Download URL coxdev-0.3.1-cp314-cp314t-macosx_11_0_arm64.whl
Size 231.3 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e14fdf8e7e7c3545ebc71b46bca4c45b786922a509de8b19702727758010c88f
BLAKE2b-256 checksum
How to use checksums
fef40efd7216828443bfa1fcc42189ee2b374d5bac38350a1af4439404271445
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp314-cp314-win_amd64.whl

Download URL coxdev-0.3.1-cp314-cp314-win_amd64.whl
Size 351.4 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
1fbb4602da7cb3a1c4c47cfa7079c43345836ad351179c2c669a88c861ec8c0a
BLAKE2b-256 checksum
How to use checksums
adeeb334d5f56942cf005c34c03ada1f065d08eebbd92a8ffe0acc9c9fe8b778
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL coxdev-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
6a130014a9708a3bb8bdeeec23610fdf03b1b66becdf497b269adb1f960f1cff
BLAKE2b-256 checksum
How to use checksums
e89628448573b49e2e0c91b70ae1bd7562b2b3954223b305e9c8d3b6cf396501
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL coxdev-0.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 250.3 kB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
301d172cc1fa8ae4ecef23423c543c5bf55b1c12758a7be35e81663197230dc5
BLAKE2b-256 checksum
How to use checksums
2bdb744ff9b0a5234ba7ee4f82a708d47f6a0b9aa3020988d860aed62fb5316c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp314-cp314-macosx_11_0_arm64.whl

Download URL coxdev-0.3.1-cp314-cp314-macosx_11_0_arm64.whl
Size 221.5 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
445694c356e32968bf193a3b0ecce7117d57d83bb3d7b98d09cf03e15f520eb3
BLAKE2b-256 checksum
How to use checksums
86043de55493069845149d89506e851b5be301d9d53723579c8537822a901e36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp313-cp313-win_amd64.whl

Download URL coxdev-0.3.1-cp313-cp313-win_amd64.whl
Size 341.3 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
2f051be87b625c94d2fb2a8e847c2d798f68054c897b1b8eb0e50f7b262d268f
BLAKE2b-256 checksum
How to use checksums
5ce89df41ddb08ae79b91121986ff5d84263c34bc65f36fa17f2537517a6a8d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL coxdev-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
895d674fa396f22263c063c5801521c9d9f87e8916bb298b945dda6a17a53ee2
BLAKE2b-256 checksum
How to use checksums
c7c9ed87f3902795b7be4b16c6517ec9050ac5bf67a25773a1d534f5b1a49865
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL coxdev-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 250.2 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
09734e89af6fe9040e43bee83f4767ca7ec4c8999f1cb3c6ee91a4614f179d1b
BLAKE2b-256 checksum
How to use checksums
4c0ff2743efda6100362ca73b65738d7d9babf90fd226d7b02175618436fe810
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL coxdev-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
Size 221.2 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
54f63511e151576f96d0c2a17f208f34145fd8efe4faaed440fab4197f1ee9f8
BLAKE2b-256 checksum
How to use checksums
5bacf8bf64dc79796ed70ffb881190c32c2f869fcd52e3cba22817fff0f34977
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp312-cp312-win_amd64.whl

Download URL coxdev-0.3.1-cp312-cp312-win_amd64.whl
Size 341.3 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
4464791a33a18523374ae4c33b6b11950a1ebb40e0dc6e3c485dce7db0478cb3
BLAKE2b-256 checksum
How to use checksums
d75e1fa7ab858f69089e380c7d66159a12acee98367b3b123cb7a525b7e90586
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL coxdev-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
92c891b0ec2362067e693241a4609a02e58b459a979b7589b700fe75c67561bf
BLAKE2b-256 checksum
How to use checksums
1c3ae545b1497302d1fec4f2afacd726d6851f4dc7ea99d65c24bd109af83f3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL coxdev-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 250.2 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6ef3e52ef5b9390274bc5cfaf5bb9b6566c262137b31850ade34d199b856f704
BLAKE2b-256 checksum
How to use checksums
381e3e80998510e081f68e6f1c89104a55a38c08a11b2334132ab321dad97fb8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL coxdev-0.3.1-cp312-cp312-macosx_11_0_arm64.whl
Size 221.2 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
df251dcc15c1b53d33b572e706df73d46e712f8440bea2b6fd20f7f0ce0f7c47
BLAKE2b-256 checksum
How to use checksums
f3cab4544cbe863494cbd5a0d8c728f4c6f79827852febad11dc15b514790bad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp311-cp311-win_amd64.whl

Download URL coxdev-0.3.1-cp311-cp311-win_amd64.whl
Size 338.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
213a125d1d66a3d12dadfbcb3187e9598793beb395e77bff4a10fc65c98fa29a
BLAKE2b-256 checksum
How to use checksums
0b8f669522c9e86a815ac88661c5976226040c7a839e34d26c7ef4bd56294735
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL coxdev-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
bd3aa9da76922a53fbd483c16fb66497eead78cd2507ecb7a67047ded34abdeb
BLAKE2b-256 checksum
How to use checksums
e3984a2440522bcdf507b9d39fc8045ecd58826e359e95f452e5c9462bfa67ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL coxdev-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 248.6 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c098ee95014c297f72384bf6975834eb4bc86f4973388bff327c40a403a05069
BLAKE2b-256 checksum
How to use checksums
d53a90c360c516e63257fae3039d30523f64c9916a9dc8549c9e6950cac2b927
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL coxdev-0.3.1-cp311-cp311-macosx_11_0_arm64.whl
Size 219.8 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2cb16824ae5ad8e50115c67a0b0c1f8958f60906e7ae9c1757d4ecc62597c7b6
BLAKE2b-256 checksum
How to use checksums
0a944fc07353afe504f216ca4140a890cf8cb9e8c966dd318872786b61e60b4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp310-cp310-win_amd64.whl

Download URL coxdev-0.3.1-cp310-cp310-win_amd64.whl
Size 338.2 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4671aeb622b412e03295a5fd83e8f6c88d92ef9ae2f8c7507700254df15febdd
BLAKE2b-256 checksum
How to use checksums
6751406e750c06c795cdab37ec3af9685b3725f416ea6ccecf0708cafae266cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL coxdev-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
8420479a3b56d7ecef39126e29119d5d6f990d83c17a6a8d1d09c7a72ceb02c1
BLAKE2b-256 checksum
How to use checksums
1ca8627b1680086c0adcca25d48a5c8a1f0c684708fa59712b7a6cc882dacdad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL coxdev-0.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 247.8 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
009a5c8c2c55cd9982929604c3157b4287d9ed27fbdac282d5c7ff5d419c478b
BLAKE2b-256 checksum
How to use checksums
8d6ed48fb00205300c7329f350dd475e04169f8bd3d2ba91814c5936e0d804a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL coxdev-0.3.1-cp310-cp310-macosx_11_0_arm64.whl
Size 218.7 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2d050fc954b16de285b966e3362b61b847d770cc34c5b51d23a75947ad7dd4c6
BLAKE2b-256 checksum
How to use checksums
f1f5bd2c64a24357a5b6dcea746b4d5b1b66f773d62c1020ea320d0a01a304d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp39-cp39-win_amd64.whl

Download URL coxdev-0.3.1-cp39-cp39-win_amd64.whl
Size 336.5 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
67b986438e318b2762205ddaa0cbe5927503358a5ea2b1b23fee16acf2efbefe
BLAKE2b-256 checksum
How to use checksums
5600523b79a694f8764bfcd426a2a7faeda043f8ec90cc5165862b1468507ad9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl

Download URL coxdev-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
0ef9d3491282d57f341449a870c1851bfbef0195d95019d392196dcde4eec794
BLAKE2b-256 checksum
How to use checksums
ae588659fc8f4cbd5bd5028e80df1a4b3de7ce458101cabb2e44682496521254
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL coxdev-0.3.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 248.0 kB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cc7e1b2a3237d07748c6d69f6ece7f8fb9555666194fb93a0f335a2f737d6dd6
BLAKE2b-256 checksum
How to use checksums
e488c212cc6603d80704c27b352b22bca2f6ad1c8dacb30dc3dcdf817d2aee4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / coxdev-0.3.1-cp39-cp39-macosx_11_0_arm64.whl

Download URL coxdev-0.3.1-cp39-cp39-macosx_11_0_arm64.whl
Size 218.8 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3a1d67a47c74787b196f34ab755dc694d2cdfd53f67e4ba6fe70ed311254b777
BLAKE2b-256 checksum
How to use checksums
65a6f350d328f08ae3650c7adbccbb0f77a64690ff131c8abf79d5e7481b677f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Security for coxdev 0.3.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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