coxdev


Namecoxdev JSON
Version 0.1.4 PyPI version JSON
download
home_pageNone
SummaryLibrary for computing Cox deviance
upload_time2025-07-11 20:38:45
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseBSD-3-Clause
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # coxdev

A high-performance Python library for computing Cox proportional hazards model deviance, gradients, and Hessian information matrices. Built with C++ and Eigen for optimal performance, 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
- **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:
   ```bash
   git submodule update --init --recursive
   ```

2. **Check Eigen availability**: Run the check script to verify Eigen headers are available:
   ```bash
   python check_eigen.py
   ```

### Standard Installation

```bash
pip install .
```

### With Custom Eigen Path

If you have Eigen installed elsewhere, you can specify its location:
```bash
env EIGEN_LIBRARY_PATH=/path/to/eigen pip install .
```

### Development Installation

```bash
pip install -e .
```

## Quick Start

```python
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}")
```

## Advanced Usage

### Left-Truncated Data

```python
# 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

```python
# 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
```

### Different Tie-Breaking Methods

```python
# 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)
- **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

### 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

- Python 3.9+
- C++ compiler with C++17 support
- Eigen library headers
- pybind11

### Build Steps

1. Clone the repository with submodules:
   ```bash
   git clone --recursive https://github.com/jonathan-taylor/coxdev.git
   cd coxdev
   ```

2. Install build dependencies:
   ```bash
   pip install build wheel setuptools pybind11 numpy
   ```

3. Build the package:
   ```bash
   python -m build
   ```

### Building Wheels

For wheel building:
```bash
# Standard wheel build
python -m build

# With custom Eigen path
env EIGEN_LIBRARY_PATH=/path/to/eigen python -m build
```

## Testing

Run the test suite:
```bash
python -m pytest tests/
```

## 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](LICENSE) file for details.

## Citation

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

```bibtex
@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](http://eigen.tuxfamily.org/) for efficient linear algebra
- Uses [pybind11](https://pybind11.readthedocs.io/) for Python bindings
- Inspired by the R `glmnet` package for survival analysis

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "coxdev",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "Jonathan Taylor <jonathan.taylor@stanford.edu>",
    "keywords": null,
    "author": null,
    "author_email": "Jonathan Taylor <jonathan.taylor@stanford.edu>, Trevor Hastie <hastie@stanford.edu>, Balasubramanian Narasimhan <naras@stanford.edu>",
    "download_url": "https://files.pythonhosted.org/packages/81/75/a46bf83aac03c7678d7f4de9737d38370f86df68846bf932dc655b571cae/coxdev-0.1.4.tar.gz",
    "platform": null,
    "description": "# coxdev\n\nA high-performance Python library for computing Cox proportional hazards model deviance, gradients, and Hessian information matrices. Built with C++ and Eigen for optimal performance, this library provides efficient survival analysis computations with support for different tie-breaking methods.\n\n## Features\n\n- **High Performance**: C++ implementation with Eigen linear algebra library\n- **Comprehensive Support**: Handles both Efron and Breslow tie-breaking methods\n- **Left-Truncated Data**: Support for left-truncated survival data\n- **Efficient Computations**: Optimized algorithms for deviance, gradient, and Hessian calculations\n- **Memory Efficient**: Uses linear operators for large-scale computations\n- **Cross-Platform**: Works on Linux, macOS, and Windows\n\n## Installation\n\n### Prerequisites\n\nThis package requires the Eigen C++ library headers. The Eigen library is included as a git submodule.\n\n1. **Initialize Eigen submodule**: The Eigen library is included as a git submodule. Make sure it's initialized:\n   ```bash\n   git submodule update --init --recursive\n   ```\n\n2. **Check Eigen availability**: Run the check script to verify Eigen headers are available:\n   ```bash\n   python check_eigen.py\n   ```\n\n### Standard Installation\n\n```bash\npip install .\n```\n\n### With Custom Eigen Path\n\nIf you have Eigen installed elsewhere, you can specify its location:\n```bash\nenv EIGEN_LIBRARY_PATH=/path/to/eigen pip install .\n```\n\n### Development Installation\n\n```bash\npip install -e .\n```\n\n## Quick Start\n\n```python\nimport numpy as np\nfrom coxdev import CoxDeviance\n\n# Generate sample survival data\nn_samples = 1000\nevent_times = np.random.exponential(1.0, n_samples)\nstatus = np.random.binomial(1, 0.7, n_samples)  # 70% events, 30% censored\nlinear_predictor = np.random.normal(0, 1, n_samples)\n\n# Create CoxDeviance object\ncoxdev = CoxDeviance(event=event_times, status=status, tie_breaking='efron')\n\n# Compute deviance and related quantities\nresult = coxdev(linear_predictor)\n\nprint(f\"Deviance: {result.deviance:.4f}\")\nprint(f\"Saturated log-likelihood: {result.loglik_sat:.4f}\")\nprint(f\"Gradient norm: {np.linalg.norm(result.gradient):.4f}\")\n```\n\n## Advanced Usage\n\n### Left-Truncated Data\n\n```python\n# With start times (left-truncated data)\nstart_times = np.random.exponential(0.5, n_samples)\ncoxdev = CoxDeviance(\n    event=event_times, \n    status=status, \n    start=start_times,\n    tie_breaking='efron'\n)\n```\n\n### Computing Information Matrix\n\n```python\n# Get information matrix as a linear operator\ninfo_matrix = coxdev.information(linear_predictor)\n\n# Matrix-vector multiplication\nv = np.random.normal(0, 1, n_samples)\nresult_vector = info_matrix @ v\n\n# For small problems, you can compute the full matrix\nX = np.random.normal(0, 1, (n_samples, 10))\nbeta = np.random.normal(0, 1, 10)\neta = X @ beta\n\n# Information matrix for coefficients: X^T @ I @ X\nI = info_matrix @ X\ninformation_matrix = X.T @ I\n```\n\n### Different Tie-Breaking Methods\n\n```python\n# Efron's method (default)\ncoxdev_efron = CoxDeviance(event=event_times, status=status, tie_breaking='efron')\n\n# Breslow's method\ncoxdev_breslow = CoxDeviance(event=event_times, status=status, tie_breaking='breslow')\n```\n\n## API Reference\n\n### CoxDeviance\n\nThe main class for computing Cox model quantities.\n\n#### Parameters\n\n- **event**: Event times (failure times) for each observation\n- **status**: Event indicators (1 for event occurred, 0 for censored)\n- **start**: Start times for left-truncated data (optional)\n- **tie_breaking**: Method for handling tied event times ('efron' or 'breslow')\n\n#### Methods\n\n- **`__call__(linear_predictor, sample_weight=None)`**: Compute deviance and related quantities\n- **`information(linear_predictor, sample_weight=None)`**: Get information matrix as linear operator\n\n### CoxDevianceResult\n\nResult object containing computation results.\n\n#### Attributes\n\n- **linear_predictor**: The linear predictor values used\n- **sample_weight**: Sample weights used\n- **loglik_sat**: Saturated log-likelihood value\n- **deviance**: Computed deviance value\n- **gradient**: Gradient of deviance with respect to linear predictor\n- **diag_hessian**: Diagonal of Hessian matrix\n\n## Performance\n\nThe library is optimized for performance:\n\n- **C++ Implementation**: Core computations in C++ with Eigen\n- **Memory Efficient**: Reuses buffers and uses linear operators\n- **Vectorized Operations**: Leverages Eigen's optimized linear algebra\n- **Minimal Python Overhead**: Heavy computations done in C++\n\n## Building from Source\n\n### Prerequisites\n\n- Python 3.9+\n- C++ compiler with C++17 support\n- Eigen library headers\n- pybind11\n\n### Build Steps\n\n1. Clone the repository with submodules:\n   ```bash\n   git clone --recursive https://github.com/jonathan-taylor/coxdev.git\n   cd coxdev\n   ```\n\n2. Install build dependencies:\n   ```bash\n   pip install build wheel setuptools pybind11 numpy\n   ```\n\n3. Build the package:\n   ```bash\n   python -m build\n   ```\n\n### Building Wheels\n\nFor wheel building:\n```bash\n# Standard wheel build\npython -m build\n\n# With custom Eigen path\nenv EIGEN_LIBRARY_PATH=/path/to/eigen python -m build\n```\n\n## Testing\n\nRun the test suite:\n```bash\npython -m pytest tests/\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests for new functionality\n5. Ensure all tests pass\n6. Submit a pull request\n\n## License\n\nThis project is licensed under the BSD-3-Clause License - see the [LICENSE](LICENSE) file for details.\n\n## Citation\n\nIf you use this library in your research, please cite:\n\n```bibtex\n@software{coxdev2024,\n  title={coxdev: High-performance Cox proportional hazards deviance computation},\n  author={Taylor, Jonathan and Hastie, Trevor and Narasimhan, Balasubramanian},\n  year={2024},\n  url={https://github.com/jonathan-taylor/coxdev}\n}\n```\n\n## Acknowledgments\n\n- Built with [Eigen](http://eigen.tuxfamily.org/) for efficient linear algebra\n- Uses [pybind11](https://pybind11.readthedocs.io/) for Python bindings\n- Inspired by the R `glmnet` package for survival analysis\n",
    "bugtrack_url": null,
    "license": "BSD-3-Clause",
    "summary": "Library for computing Cox deviance",
    "version": "0.1.4",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b361b56c4584ad872dcf7c5073f20c7db600a81029d5650a539112fab0abd2ef",
                "md5": "551b6947c6d0f5c7f29f2fed0f9dea48",
                "sha256": "00346fb72adb4baea007906bba37a098c764af5ed68813918170e05020b092b4"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "551b6947c6d0f5c7f29f2fed0f9dea48",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 117105,
            "upload_time": "2025-07-11T20:38:12",
            "upload_time_iso_8601": "2025-07-11T20:38:12.060076Z",
            "url": "https://files.pythonhosted.org/packages/b3/61/b56c4584ad872dcf7c5073f20c7db600a81029d5650a539112fab0abd2ef/coxdev-0.1.4-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "71949a76a0d9b1888270fcebbfb9ff07c77fe3af83b4b1efa36ad4d4b8fcae34",
                "md5": "8fedd3a7dd0e3029f0745306942d78b5",
                "sha256": "12d8780ffaf5382aa1bc983098360f8c7c52af6c522b8332da6bfc78b7c1b98e"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8fedd3a7dd0e3029f0745306942d78b5",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2265415,
            "upload_time": "2025-07-11T20:38:13",
            "upload_time_iso_8601": "2025-07-11T20:38:13.753173Z",
            "url": "https://files.pythonhosted.org/packages/71/94/9a76a0d9b1888270fcebbfb9ff07c77fe3af83b4b1efa36ad4d4b8fcae34/coxdev-0.1.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "42a8c5d6fb466259fd42a06a31059bfa22508c91ecf2fbf5f693de9ad2aa66ce",
                "md5": "6a36451240917f4bb0222179e2dff2ec",
                "sha256": "2b2286cc6b22b433607edef1a8598da2a00f7ffab6845a95bd8be7f8231a6ffb"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6a36451240917f4bb0222179e2dff2ec",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 3288264,
            "upload_time": "2025-07-11T20:38:15",
            "upload_time_iso_8601": "2025-07-11T20:38:15.318641Z",
            "url": "https://files.pythonhosted.org/packages/42/a8/c5d6fb466259fd42a06a31059bfa22508c91ecf2fbf5f693de9ad2aa66ce/coxdev-0.1.4-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7f26578b1f828745197c80002fdef72febae08b4f2027af6aeafad3fb8e1d5d3",
                "md5": "6f2fe4ba79520c46062660d81c3a7e88",
                "sha256": "85ed73accfbde8ffeb9a5692eb25441186d7f60d5a8e3a57eabf10860dc7cf9e"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "6f2fe4ba79520c46062660d81c3a7e88",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 92982,
            "upload_time": "2025-07-11T20:38:17",
            "upload_time_iso_8601": "2025-07-11T20:38:17.049511Z",
            "url": "https://files.pythonhosted.org/packages/7f/26/578b1f828745197c80002fdef72febae08b4f2027af6aeafad3fb8e1d5d3/coxdev-0.1.4-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b8331fefcb3b7b287e2f70fa60b3c3edbcc53d611f569c78f6f2218da3be971a",
                "md5": "f952186f23b1da98c78809973525581a",
                "sha256": "124d3412bcde197d6325ef263c9c9d3daa0933fc30f8e79676a25ceae08e9d37"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f952186f23b1da98c78809973525581a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 101262,
            "upload_time": "2025-07-11T20:38:18",
            "upload_time_iso_8601": "2025-07-11T20:38:18.133466Z",
            "url": "https://files.pythonhosted.org/packages/b8/33/1fefcb3b7b287e2f70fa60b3c3edbcc53d611f569c78f6f2218da3be971a/coxdev-0.1.4-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "723ff0fe7c9ba7c847d95c1d1070957e30c29975511752f7944cdbb34dc98936",
                "md5": "e94db27e4186aae1b3206bd76d4660a0",
                "sha256": "940c1ac06bda089cd5fcca724e865d8fccc98e45335740380c41b6022d043595"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "e94db27e4186aae1b3206bd76d4660a0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 118571,
            "upload_time": "2025-07-11T20:38:19",
            "upload_time_iso_8601": "2025-07-11T20:38:19.178449Z",
            "url": "https://files.pythonhosted.org/packages/72/3f/f0fe7c9ba7c847d95c1d1070957e30c29975511752f7944cdbb34dc98936/coxdev-0.1.4-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fcf9e23da1ffc5cbd525b1bece3b91c75528a9fbe141d05c91809c5cb8e4d771",
                "md5": "1c80021dc4b08dda291d20598a88d114",
                "sha256": "0480b784e6147e3f0a166729aa56b2a1406b5c76816a36be06c26e77782e1efe"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1c80021dc4b08dda291d20598a88d114",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2275744,
            "upload_time": "2025-07-11T20:38:20",
            "upload_time_iso_8601": "2025-07-11T20:38:20.311392Z",
            "url": "https://files.pythonhosted.org/packages/fc/f9/e23da1ffc5cbd525b1bece3b91c75528a9fbe141d05c91809c5cb8e4d771/coxdev-0.1.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d0c5b6c11d444c3d807d150b274db74fe4ce6ca8dc19167be5e7e594eb1e5f7a",
                "md5": "fbd068c5ca2711bad7d236749aceb0d4",
                "sha256": "39c109afde633e874b686cadd9cd42d4e52db28a916c7dec9e7fed28b347ea57"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fbd068c5ca2711bad7d236749aceb0d4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 3298268,
            "upload_time": "2025-07-11T20:38:21",
            "upload_time_iso_8601": "2025-07-11T20:38:21.726598Z",
            "url": "https://files.pythonhosted.org/packages/d0/c5/b6c11d444c3d807d150b274db74fe4ce6ca8dc19167be5e7e594eb1e5f7a/coxdev-0.1.4-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "354d2486f6f242e77dc9438dc48e8b25a9f6c5a7014ed91c9d8cb0b92d7dc65c",
                "md5": "4f74aafc7a7cb7cc4e266af13ce6ae8d",
                "sha256": "d46b8517a0172c559ba27fef14976a9f94228b5ecbee7746487d0be648f9c24e"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "4f74aafc7a7cb7cc4e266af13ce6ae8d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 94277,
            "upload_time": "2025-07-11T20:38:23",
            "upload_time_iso_8601": "2025-07-11T20:38:23.473490Z",
            "url": "https://files.pythonhosted.org/packages/35/4d/2486f6f242e77dc9438dc48e8b25a9f6c5a7014ed91c9d8cb0b92d7dc65c/coxdev-0.1.4-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0f03cf67b45f4390a94531d14e626998a55d38e4e6a722c718c52e37d667d2f8",
                "md5": "3a78fda4bce8ea80376035dd3f70ff6a",
                "sha256": "1331c87c0c016f8dc27381bfe1322ce562f9222edf4e800cd56c1122e0b34073"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3a78fda4bce8ea80376035dd3f70ff6a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 101746,
            "upload_time": "2025-07-11T20:38:24",
            "upload_time_iso_8601": "2025-07-11T20:38:24.831409Z",
            "url": "https://files.pythonhosted.org/packages/0f/03/cf67b45f4390a94531d14e626998a55d38e4e6a722c718c52e37d667d2f8/coxdev-0.1.4-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c5eceb9a71c9bfb2cee2147c2bdcba9cd9a770646ec290edadf8c6eadb0adcc4",
                "md5": "9c148b6f5518270ed0ac0c5770f97368",
                "sha256": "a56c37f18df5ea67a4944a19a70f9535b0be46e32e17765a30185711e288ea17"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "9c148b6f5518270ed0ac0c5770f97368",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 120141,
            "upload_time": "2025-07-11T20:38:25",
            "upload_time_iso_8601": "2025-07-11T20:38:25.859727Z",
            "url": "https://files.pythonhosted.org/packages/c5/ec/eb9a71c9bfb2cee2147c2bdcba9cd9a770646ec290edadf8c6eadb0adcc4/coxdev-0.1.4-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "064d588fd88a90f78104858a9fbf6f54852cd849846c849810e7f13d23ac29de",
                "md5": "ce65b4519002c1e4ddacb026f7a26a89",
                "sha256": "47e6cc2059846f4a582a4fd19caebeff820f904bb568c7fd6bb7001f526517d2"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ce65b4519002c1e4ddacb026f7a26a89",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2293391,
            "upload_time": "2025-07-11T20:38:27",
            "upload_time_iso_8601": "2025-07-11T20:38:27.033272Z",
            "url": "https://files.pythonhosted.org/packages/06/4d/588fd88a90f78104858a9fbf6f54852cd849846c849810e7f13d23ac29de/coxdev-0.1.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f29b5a3c4ce153f41224bade2577b3f1318a26b3b1faa5c20e67a511de5e2c6b",
                "md5": "365c35e0a523417fb7fd54a1774d24d9",
                "sha256": "85064d5416cc809b28721c68ae0d69e8ea726fd16458671ddbc50ec14a4fee5f"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "365c35e0a523417fb7fd54a1774d24d9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 3318635,
            "upload_time": "2025-07-11T20:38:28",
            "upload_time_iso_8601": "2025-07-11T20:38:28.809970Z",
            "url": "https://files.pythonhosted.org/packages/f2/9b/5a3c4ce153f41224bade2577b3f1318a26b3b1faa5c20e67a511de5e2c6b/coxdev-0.1.4-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1f0c03c55102bb7260e49eff3fc330cd20f343d2e2178e278eeb3f1c7442e15",
                "md5": "46cc735bfd4a4d01fdd85a56bf62fa22",
                "sha256": "2858d6d05a31352b6359d7f11d0822009a2dcd5a92ae8c6e3d99f25d9bda6a54"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "46cc735bfd4a4d01fdd85a56bf62fa22",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 95293,
            "upload_time": "2025-07-11T20:38:30",
            "upload_time_iso_8601": "2025-07-11T20:38:30.109568Z",
            "url": "https://files.pythonhosted.org/packages/e1/f0/c03c55102bb7260e49eff3fc330cd20f343d2e2178e278eeb3f1c7442e15/coxdev-0.1.4-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0fa6da1c67ff454ebdb97ab85938287fb811049dc8574c3008dd47c9c44940a1",
                "md5": "31181cfbc1642d56f87bd337eb0159e9",
                "sha256": "8513c6a65bfa55ee7c26f6c83ef5e1e1cf19d620a057816d210206e5ff432fc5"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "31181cfbc1642d56f87bd337eb0159e9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 103125,
            "upload_time": "2025-07-11T20:38:31",
            "upload_time_iso_8601": "2025-07-11T20:38:31.477976Z",
            "url": "https://files.pythonhosted.org/packages/0f/a6/da1c67ff454ebdb97ab85938287fb811049dc8574c3008dd47c9c44940a1/coxdev-0.1.4-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1d177b76c9aba17a92f9591b5c39d9efbd019a72ccf09520fa47036083badc2d",
                "md5": "498a7c831de63794c2f3112ff12268d3",
                "sha256": "5ade73602ba795caf6ee53d53bc59206b0bfa824a4e8eea1b1b7fc6cf7bb1b5b"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "498a7c831de63794c2f3112ff12268d3",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 120164,
            "upload_time": "2025-07-11T20:38:32",
            "upload_time_iso_8601": "2025-07-11T20:38:32.883798Z",
            "url": "https://files.pythonhosted.org/packages/1d/17/7b76c9aba17a92f9591b5c39d9efbd019a72ccf09520fa47036083badc2d/coxdev-0.1.4-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "677393e1ab8aeb45d2574968ff52aeacdb224df96957ddb2a939308b468d181b",
                "md5": "b097db9f10521989a8124cc2de1d13dc",
                "sha256": "817d4079ebb075c72aec59ac328e78341194618c8714e83aeb91e4e036e58903"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b097db9f10521989a8124cc2de1d13dc",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 2295253,
            "upload_time": "2025-07-11T20:38:34",
            "upload_time_iso_8601": "2025-07-11T20:38:34.064418Z",
            "url": "https://files.pythonhosted.org/packages/67/73/93e1ab8aeb45d2574968ff52aeacdb224df96957ddb2a939308b468d181b/coxdev-0.1.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4bea0adadcc84d88936a5bbd21463db94b7e709de70bc6f22391d7a7b858b080",
                "md5": "1d06d783d7f8fb51c0c598d262c84b55",
                "sha256": "76fb27719022de4412afead2ed077d77db8fd7459e6f38ad7ecf21efafd3d138"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1d06d783d7f8fb51c0c598d262c84b55",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 3320972,
            "upload_time": "2025-07-11T20:38:35",
            "upload_time_iso_8601": "2025-07-11T20:38:35.507207Z",
            "url": "https://files.pythonhosted.org/packages/4b/ea/0adadcc84d88936a5bbd21463db94b7e709de70bc6f22391d7a7b858b080/coxdev-0.1.4-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a60208b28482b3647f8cff863a41c89247e9c0e3d9e332641c87276f156e8f32",
                "md5": "d447661d3655913ed572ada074f8187f",
                "sha256": "06b643d51eecc278123eda4ddf0274ae40d98517354370c1b671317e883cf84a"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "d447661d3655913ed572ada074f8187f",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 95270,
            "upload_time": "2025-07-11T20:38:36",
            "upload_time_iso_8601": "2025-07-11T20:38:36.770733Z",
            "url": "https://files.pythonhosted.org/packages/a6/02/08b28482b3647f8cff863a41c89247e9c0e3d9e332641c87276f156e8f32/coxdev-0.1.4-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d3a968c551bbf435501e2f495022b2689ae2e6bf41c65fc0408ece4d013c1a05",
                "md5": "310b5fca43c46f7c9f9bbc8fa506b62b",
                "sha256": "3c69ecc174ac5fa54816014762f634a31d4a84ea0255fd67f0de7d9b5be9ae97"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "310b5fca43c46f7c9f9bbc8fa506b62b",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 103126,
            "upload_time": "2025-07-11T20:38:37",
            "upload_time_iso_8601": "2025-07-11T20:38:37.758407Z",
            "url": "https://files.pythonhosted.org/packages/d3/a9/68c551bbf435501e2f495022b2689ae2e6bf41c65fc0408ece4d013c1a05/coxdev-0.1.4-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3515b6f86d6f166844ce0896c7095d434ce34def3863c10b5c3ef1cae7e79bbc",
                "md5": "d29f91e95d05ddb870424c571cf96e07",
                "sha256": "202e943df16b0f63cb5cc988a091ff7dbb675063b70a33c4ea7442bf365594b2"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "d29f91e95d05ddb870424c571cf96e07",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 117204,
            "upload_time": "2025-07-11T20:38:39",
            "upload_time_iso_8601": "2025-07-11T20:38:39.210601Z",
            "url": "https://files.pythonhosted.org/packages/35/15/b6f86d6f166844ce0896c7095d434ce34def3863c10b5c3ef1cae7e79bbc/coxdev-0.1.4-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "de71d835f6ad6cd9325c2e008fba14c0227ca4a3341ca35095bf04994b602b1e",
                "md5": "cd3dc751d6479cf824ccebe05058fdbf",
                "sha256": "9d57625dd41a24664b219d3b823ba9168c75780f59b83515c43f79d31b9a150f"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cd3dc751d6479cf824ccebe05058fdbf",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2264291,
            "upload_time": "2025-07-11T20:38:40",
            "upload_time_iso_8601": "2025-07-11T20:38:40.360674Z",
            "url": "https://files.pythonhosted.org/packages/de/71/d835f6ad6cd9325c2e008fba14c0227ca4a3341ca35095bf04994b602b1e/coxdev-0.1.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0124d8ec7bdaf97c830c34d35908ff66e623a057e6cd753b78dda0028687e956",
                "md5": "961e5ce578d8b9c6b080b8cd3cfb7198",
                "sha256": "1bf9867723555ed12211476adfb0720b3cd644241ee348844fbddc419c0eb669"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "961e5ce578d8b9c6b080b8cd3cfb7198",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 3286045,
            "upload_time": "2025-07-11T20:38:42",
            "upload_time_iso_8601": "2025-07-11T20:38:42.020481Z",
            "url": "https://files.pythonhosted.org/packages/01/24/d8ec7bdaf97c830c34d35908ff66e623a057e6cd753b78dda0028687e956/coxdev-0.1.4-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f5ce58dc18e6a09197dcc29ae2deb8b89d4c0c38713dcb31fb4158155e39d4ee",
                "md5": "ae3881d5129847b4c36c07c8b8956892",
                "sha256": "af3a86ba5e741acaa5f78eb308ad3fea219e070e64f6e77c0e26128e5884c450"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "ae3881d5129847b4c36c07c8b8956892",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 92871,
            "upload_time": "2025-07-11T20:38:43",
            "upload_time_iso_8601": "2025-07-11T20:38:43.308173Z",
            "url": "https://files.pythonhosted.org/packages/f5/ce/58dc18e6a09197dcc29ae2deb8b89d4c0c38713dcb31fb4158155e39d4ee/coxdev-0.1.4-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "24bc45ce6e8cba7cb75be6fa5a3a56e10ba939d08c17fca1d07ac87332d29324",
                "md5": "3976cb9b825707240db0c385eac1eb61",
                "sha256": "a1b5768ea0d7c850b4c2eff6aafb71687ac351f11e9f91c21747fa53f51cde78"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3976cb9b825707240db0c385eac1eb61",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 101169,
            "upload_time": "2025-07-11T20:38:44",
            "upload_time_iso_8601": "2025-07-11T20:38:44.316444Z",
            "url": "https://files.pythonhosted.org/packages/24/bc/45ce6e8cba7cb75be6fa5a3a56e10ba939d08c17fca1d07ac87332d29324/coxdev-0.1.4-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8175a46bf83aac03c7678d7f4de9737d38370f86df68846bf932dc655b571cae",
                "md5": "bc84fbe62eafbe4c749b6985cffbb5f4",
                "sha256": "912d77a060215d60fd421c45e1884faf73355b4bab2683558aaa8ede5c6d34d3"
            },
            "downloads": -1,
            "filename": "coxdev-0.1.4.tar.gz",
            "has_sig": false,
            "md5_digest": "bc84fbe62eafbe4c749b6985cffbb5f4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 30366,
            "upload_time": "2025-07-11T20:38:45",
            "upload_time_iso_8601": "2025-07-11T20:38:45.686406Z",
            "url": "https://files.pythonhosted.org/packages/81/75/a46bf83aac03c7678d7f4de9737d38370f86df68846bf932dc655b571cae/coxdev-0.1.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-11 20:38:45",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "coxdev"
}
        
Elapsed time: 0.88781s