cbits


Namecbits JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
SummaryHigh-performance BitVector with C backend.
upload_time2025-10-10 13:35:35
maintainerNone
docs_urlNone
authorlambdaphoenix
requires_python>=3.8
licenseNone
keywords bitvector c-extension python bits
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![Doxygen](https://img.shields.io/badge/docs-doxygen-2c4aa8.svg?logo=doxygen)](https://lambdaphoenix.github.io/cbits/)
[![PyPI - Implementation](https://img.shields.io/pypi/implementation/cbits.svg)](https://pypi.org/project/cbits/)
[![PyPI - Version](https://img.shields.io/pypi/v/cbits.svg)](https://pypi.org/project/cbits/)
[![PyPI - Format](https://img.shields.io/pypi/format/cbits.svg)](https://pypi.org/project/cbits/#files)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/cbits.svg)](https://pypi.org/project/cbits/)
[![Changelog](https://img.shields.io/badge/CHANGELOG-md-blue.svg)](https://github.com/lambdaphoenix/cbits/blob/main/CHANGELOG.md)
[![GitHub License](https://img.shields.io/github/license/lambdaphoenix/cbits.svg)](https://github.com/lambdaphoenix/cbits/blob/main/LICENSE)

# cbits

> High-performance BitVector for Python.


## Description
cbits implements a powerful bit vector type in C that is accessible via a Python API. It stores bits contiguously in memory and minimizes overhead compared to a list of Boolean values. Core operations such as setting, clearing, flipping and counting bits run in constant or near-constant time per word, making it ideal for extensive bit manipulation.


## Installation

```bash
pip install cbits
```

## Quick Start
```python
from cbits import BitVector

# Create a 64-bit vector
bv = BitVector(64)

# Set bits, clear, flip, query
bv.set(3)
bv.clear(3)
bv.flip(0)
print(bv.get(0))                # → True or False
print(len(bv), bv.bits)

# Range operations
bv.set_range(10, 5)             # set bits 10..14
bv.clear_range(12, 2)           # clear bits 12..13
bv.flip_range(0, 64)            # toggle all bits

# Negative indexing
bv.set(-1)
print(bv.get(63))

# Boolean test & rank
print(bool(bv))
print(bv.rank(32))              # count of set bits up to index 32

# Copy & deepcopy
import copy
bv2 = bv.copy()
bv3 = copy.deepcopy(bv)

# Bitwise operations
a = BitVector(8); b = BitVector(8)
a.set(0); a.set(2)
b.set(1); b.set(2)
print((a & b)[0], (a | b)[0], (a ^ b)[0], (~a)[0])

# Sequence & iteration
bv[5] = True
print(bv[5])
print([i for i, bit in enumerate(bv) if bit])

# Slicing
sv = bv[2:10]                   # positions 2..9
print([sv.get(i) for i in range(len(sv))])
sv2 = bv[:5]                    # first five bits
sv3 = bv[5:]                    # bits from 5 to end
sv4 = bv[::2]                   # every other bit
sv_rev = bv[::-1]               # reversed vector
print([sv4.get(i) for i in range(len(sv4))])
print([sv_rev.get(i) for i in range(len(sv_rev))])

# Slice assignment from iterables or BitVector
bv[0:4] = [True, False, True, False]
print([bv.get(i) for i in range(4)])

bv[4:8] = BitVector(4)          # assign via another BitVector
print([bv.get(i) for i in range(4, 8)])

# Negative-step assignment
bv[9:5:-1] = (i % 2 == 0 for i in range(4))
print([bv.get(i) for i in range(9, 5, -1)])

# Contains
a = BitVector(8); b = BitVector(4)
a.set(0); a.set(2); a.set(5)    # 10100100
b.set(0); b.set(3)              # 1001
print(b in a)
```

## API Reference
### Class: BitVector
```python
class BitVector:
    def __init__(self, size: int)

    @property
    def bits(self) -> int

    def get(self, index: int) -> bool
    def set(self, index: int) -> None
    def clear(self, index: int) -> None
    def flip(self, index: int) -> None
    def set_range(self, start: int, length: int) -> None
    def clear_range(self, start: int, length: int) -> None
    def flip_range(self, start: int, length: int) -> None
    def rank(self, index: int) -> int

    def copy(self) -> BitVector
    def __copy__(self) -> BitVector
    def __deepcopy__(self, memo) -> BitVector

    # Sequence protocol
    def __len__(self) -> int

    # Single-index access
    def __getitem__(self, index: int) -> bool
    def __setitem__(self, index: int, value: bool) -> None

    # Slicing access & assignment
    def __getitem__(self, s: slice) -> BitVector
    def __setitem__(self, s: slice, value: Iterable[bool]) -> None

    def __contains__(self, other: BitVector) -> bool
    def __iter__(self) -> Iterator[bool]

    # Numeric & bitwise protocol
    def __and__(self, other: BitVector) -> BitVector
    def __iand__(self, other: BitVector) -> BitVector
    def __or__(self, other: BitVector) -> BitVector
    def __ior__(self, other: BitVector) -> BitVector
    def __xor__(self, other: BitVector) -> BitVector
    def __ixor__(self, other: BitVector) -> BitVector
    def __invert__(self) -> BitVector
    def __bool__(self) -> bool

    def __repr__(self) -> str
    def __str__(self) -> str
```

## License
Apache License 2.0 See [LICENSE](https://github.com/lambdaphoenix/cbits/blob/main/LICENSE) for details.

## Project Links
- [📖 Documentation & Source](https://github.com/lambdaphoenix/cbits)
- [🐛 Issues](https://github.com/lambdaphoenix/cbits/issues)
- [📋 Changelog](https://github.com/lambdaphoenix/cbits/blob/main/CHANGELOG.md)
- [📦 PyPI](https://pypi.org/project/cbits/)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "cbits",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "bitvector, c-extension, python, bits",
    "author": "lambdaphoenix",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/b2/ae/0918b7e4a7f29254215f82f88d6a62a5d1f63a30f2fabaa6c42f8d3c41cf/cbits-0.2.0.tar.gz",
    "platform": null,
    "description": "[![Doxygen](https://img.shields.io/badge/docs-doxygen-2c4aa8.svg?logo=doxygen)](https://lambdaphoenix.github.io/cbits/)\n[![PyPI - Implementation](https://img.shields.io/pypi/implementation/cbits.svg)](https://pypi.org/project/cbits/)\n[![PyPI - Version](https://img.shields.io/pypi/v/cbits.svg)](https://pypi.org/project/cbits/)\n[![PyPI - Format](https://img.shields.io/pypi/format/cbits.svg)](https://pypi.org/project/cbits/#files)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/cbits.svg)](https://pypi.org/project/cbits/)\n[![Changelog](https://img.shields.io/badge/CHANGELOG-md-blue.svg)](https://github.com/lambdaphoenix/cbits/blob/main/CHANGELOG.md)\n[![GitHub License](https://img.shields.io/github/license/lambdaphoenix/cbits.svg)](https://github.com/lambdaphoenix/cbits/blob/main/LICENSE)\n\n# cbits\n\n> High-performance BitVector for Python.\n\n\n## Description\ncbits implements a powerful bit vector type in C that is accessible via a Python API. It stores bits contiguously in memory and minimizes overhead compared to a list of Boolean values. Core operations such as setting, clearing, flipping and counting bits run in constant or near-constant time per word, making it ideal for extensive bit manipulation.\n\n\n## Installation\n\n```bash\npip install cbits\n```\n\n## Quick Start\n```python\nfrom cbits import BitVector\n\n# Create a 64-bit vector\nbv = BitVector(64)\n\n# Set bits, clear, flip, query\nbv.set(3)\nbv.clear(3)\nbv.flip(0)\nprint(bv.get(0))                # \u2192 True or False\nprint(len(bv), bv.bits)\n\n# Range operations\nbv.set_range(10, 5)             # set bits 10..14\nbv.clear_range(12, 2)           # clear bits 12..13\nbv.flip_range(0, 64)            # toggle all bits\n\n# Negative indexing\nbv.set(-1)\nprint(bv.get(63))\n\n# Boolean test & rank\nprint(bool(bv))\nprint(bv.rank(32))              # count of set bits up to index 32\n\n# Copy & deepcopy\nimport copy\nbv2 = bv.copy()\nbv3 = copy.deepcopy(bv)\n\n# Bitwise operations\na = BitVector(8); b = BitVector(8)\na.set(0); a.set(2)\nb.set(1); b.set(2)\nprint((a & b)[0], (a | b)[0], (a ^ b)[0], (~a)[0])\n\n# Sequence & iteration\nbv[5] = True\nprint(bv[5])\nprint([i for i, bit in enumerate(bv) if bit])\n\n# Slicing\nsv = bv[2:10]                   # positions 2..9\nprint([sv.get(i) for i in range(len(sv))])\nsv2 = bv[:5]                    # first five bits\nsv3 = bv[5:]                    # bits from 5 to end\nsv4 = bv[::2]                   # every other bit\nsv_rev = bv[::-1]               # reversed vector\nprint([sv4.get(i) for i in range(len(sv4))])\nprint([sv_rev.get(i) for i in range(len(sv_rev))])\n\n# Slice assignment from iterables or BitVector\nbv[0:4] = [True, False, True, False]\nprint([bv.get(i) for i in range(4)])\n\nbv[4:8] = BitVector(4)          # assign via another BitVector\nprint([bv.get(i) for i in range(4, 8)])\n\n# Negative-step assignment\nbv[9:5:-1] = (i % 2 == 0 for i in range(4))\nprint([bv.get(i) for i in range(9, 5, -1)])\n\n# Contains\na = BitVector(8); b = BitVector(4)\na.set(0); a.set(2); a.set(5)    # 10100100\nb.set(0); b.set(3)              # 1001\nprint(b in a)\n```\n\n## API Reference\n### Class: BitVector\n```python\nclass BitVector:\n    def __init__(self, size: int)\n\n    @property\n    def bits(self) -> int\n\n    def get(self, index: int) -> bool\n    def set(self, index: int) -> None\n    def clear(self, index: int) -> None\n    def flip(self, index: int) -> None\n    def set_range(self, start: int, length: int) -> None\n    def clear_range(self, start: int, length: int) -> None\n    def flip_range(self, start: int, length: int) -> None\n    def rank(self, index: int) -> int\n\n    def copy(self) -> BitVector\n    def __copy__(self) -> BitVector\n    def __deepcopy__(self, memo) -> BitVector\n\n    # Sequence protocol\n    def __len__(self) -> int\n\n    # Single-index access\n    def __getitem__(self, index: int) -> bool\n    def __setitem__(self, index: int, value: bool) -> None\n\n    # Slicing access & assignment\n    def __getitem__(self, s: slice) -> BitVector\n    def __setitem__(self, s: slice, value: Iterable[bool]) -> None\n\n    def __contains__(self, other: BitVector) -> bool\n    def __iter__(self) -> Iterator[bool]\n\n    # Numeric & bitwise protocol\n    def __and__(self, other: BitVector) -> BitVector\n    def __iand__(self, other: BitVector) -> BitVector\n    def __or__(self, other: BitVector) -> BitVector\n    def __ior__(self, other: BitVector) -> BitVector\n    def __xor__(self, other: BitVector) -> BitVector\n    def __ixor__(self, other: BitVector) -> BitVector\n    def __invert__(self) -> BitVector\n    def __bool__(self) -> bool\n\n    def __repr__(self) -> str\n    def __str__(self) -> str\n```\n\n## License\nApache License 2.0 See [LICENSE](https://github.com/lambdaphoenix/cbits/blob/main/LICENSE) for details.\n\n## Project Links\n- [\ud83d\udcd6 Documentation & Source](https://github.com/lambdaphoenix/cbits)\n- [\ud83d\udc1b Issues](https://github.com/lambdaphoenix/cbits/issues)\n- [\ud83d\udccb Changelog](https://github.com/lambdaphoenix/cbits/blob/main/CHANGELOG.md)\n- [\ud83d\udce6 PyPI](https://pypi.org/project/cbits/)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "High-performance BitVector with C backend.",
    "version": "0.2.0",
    "project_urls": {
        "Documentation": "https://lambdaphoenix.github.io/cbits/",
        "Homepage": "https://github.com/lambdaphoenix/cbits",
        "Issue Tracker": "https://github.com/lambdaphoenix/cbits/issues",
        "Source": "https://github.com/lambdaphoenix/cbits.git"
    },
    "split_keywords": [
        "bitvector",
        " c-extension",
        " python",
        " bits"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5237b9022edb1f7b320731bfa6f52e14856912439fe6560d932b32e3245f4ebc",
                "md5": "1ea1cc2ea8f6e58019a5a506439c37bc",
                "sha256": "02fb8b67e954225b2950209fc8de5e3ed93d9596bdf957e0b6d4215212c7a9e1"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "1ea1cc2ea8f6e58019a5a506439c37bc",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 17970,
            "upload_time": "2025-10-10T13:35:00",
            "upload_time_iso_8601": "2025-10-10T13:35:00.522503Z",
            "url": "https://files.pythonhosted.org/packages/52/37/b9022edb1f7b320731bfa6f52e14856912439fe6560d932b32e3245f4ebc/cbits-0.2.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d50e343ca1970e4506b5fa950d40cd867a5c5b1b9a2baad08a0662fe94c5b2f3",
                "md5": "58bb78cfa3c2bb7cecd1432ad8e22314",
                "sha256": "508b0cc776a1481b515e68abd7085aa57ddd92dd222f66499bb8a9c7e91bfcbd"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "58bb78cfa3c2bb7cecd1432ad8e22314",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 25082,
            "upload_time": "2025-10-10T13:35:01",
            "upload_time_iso_8601": "2025-10-10T13:35:01.893529Z",
            "url": "https://files.pythonhosted.org/packages/d5/0e/343ca1970e4506b5fa950d40cd867a5c5b1b9a2baad08a0662fe94c5b2f3/cbits-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4e3858acd364f9d412e397b31da109fad0ecef22b9c28cec473a5fc9481a73f0",
                "md5": "6d20c2c88b1bbea32af8f82ed2692eca",
                "sha256": "95023cf39d5ec7860eadb03d0a7d215c7e82fc9ccfd34ace24e2b246eb35541d"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6d20c2c88b1bbea32af8f82ed2692eca",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 25083,
            "upload_time": "2025-10-10T13:35:02",
            "upload_time_iso_8601": "2025-10-10T13:35:02.920703Z",
            "url": "https://files.pythonhosted.org/packages/4e/38/58acd364f9d412e397b31da109fad0ecef22b9c28cec473a5fc9481a73f0/cbits-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "787e8f057088c3fcdedbd7507ed718b797e57ad81f006252e01b1cf840afba75",
                "md5": "65b0a3c3d5c7a9b17082db629b875b3e",
                "sha256": "02d1984eaa33dbb4056f33ee59c4f880b5c72fb789c967efd58ef7bef29d14d1"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "65b0a3c3d5c7a9b17082db629b875b3e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 20209,
            "upload_time": "2025-10-10T13:35:04",
            "upload_time_iso_8601": "2025-10-10T13:35:04.162820Z",
            "url": "https://files.pythonhosted.org/packages/78/7e/8f057088c3fcdedbd7507ed718b797e57ad81f006252e01b1cf840afba75/cbits-0.2.0-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f221a50fe0318a83b4df89273554deecc6e460ae452efb74d7af040aa5c53186",
                "md5": "ad6d6fdceabc585067a0bc7bd1c717f7",
                "sha256": "898114b797a7a3697d0ae47a6fe2135bdafc34d6949497682995f19bf7849049"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ad6d6fdceabc585067a0bc7bd1c717f7",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 21128,
            "upload_time": "2025-10-10T13:35:05",
            "upload_time_iso_8601": "2025-10-10T13:35:05.904315Z",
            "url": "https://files.pythonhosted.org/packages/f2/21/a50fe0318a83b4df89273554deecc6e460ae452efb74d7af040aa5c53186/cbits-0.2.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "511b6a363c11a729eae9940d7262438500bc29ddd055119e2b3a91e6ef2ae823",
                "md5": "697ff5c4051b60e94bd6abda144e4031",
                "sha256": "06781e6fadbff3afadcad290c68e67716d1c0981497850c92d6b1e47dc87e0d2"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "697ff5c4051b60e94bd6abda144e4031",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 17942,
            "upload_time": "2025-10-10T13:35:07",
            "upload_time_iso_8601": "2025-10-10T13:35:07.383454Z",
            "url": "https://files.pythonhosted.org/packages/51/1b/6a363c11a729eae9940d7262438500bc29ddd055119e2b3a91e6ef2ae823/cbits-0.2.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1dd1446164864ecb0d0b2bd9adc4fccf60c80ae1fc680e93638959550cb2bd6",
                "md5": "ff74db1b715f31deebc3623b551f4187",
                "sha256": "d9641f6ceae91ad1dc44062b06533bc116c06f70b14bfc7e8c0b9c179b1a1809"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ff74db1b715f31deebc3623b551f4187",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 25046,
            "upload_time": "2025-10-10T13:35:08",
            "upload_time_iso_8601": "2025-10-10T13:35:08.683758Z",
            "url": "https://files.pythonhosted.org/packages/e1/dd/1446164864ecb0d0b2bd9adc4fccf60c80ae1fc680e93638959550cb2bd6/cbits-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "545eef129f98429a8f9bc4e53311aa96b4eba4183b49bc10f606c3c35c45f397",
                "md5": "97a1a17ac3968d41b1435f3bf06bc747",
                "sha256": "8d22272344c8c7f4a4f9423b94d927c32e612f7f960ba416cda4031296302dd3"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "97a1a17ac3968d41b1435f3bf06bc747",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 25071,
            "upload_time": "2025-10-10T13:35:09",
            "upload_time_iso_8601": "2025-10-10T13:35:09.941397Z",
            "url": "https://files.pythonhosted.org/packages/54/5e/ef129f98429a8f9bc4e53311aa96b4eba4183b49bc10f606c3c35c45f397/cbits-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ec8c0fa9002d16799f26037e9b1784353b3aa2d60f37d6ebb4b86bbca1a5ba32",
                "md5": "b2c36a4272f7dc1754d6179f14f9327c",
                "sha256": "6637be8172377f8a42fc5a8b099b0a35ef0517c9079f307b7238a4c540a3b8c8"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "b2c36a4272f7dc1754d6179f14f9327c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 20167,
            "upload_time": "2025-10-10T13:35:11",
            "upload_time_iso_8601": "2025-10-10T13:35:11.197585Z",
            "url": "https://files.pythonhosted.org/packages/ec/8c/0fa9002d16799f26037e9b1784353b3aa2d60f37d6ebb4b86bbca1a5ba32/cbits-0.2.0-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f6081ac4df0043467757b4cd42dc8afd4d11e850b8894a4093741745891956e6",
                "md5": "4cfc15d05c6738d7c1b2c816b19884fa",
                "sha256": "854a728281e5b26ad58d9086f324a2defc148560c4c508abfad892aa46683325"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4cfc15d05c6738d7c1b2c816b19884fa",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 21109,
            "upload_time": "2025-10-10T13:35:12",
            "upload_time_iso_8601": "2025-10-10T13:35:12.369736Z",
            "url": "https://files.pythonhosted.org/packages/f6/08/1ac4df0043467757b4cd42dc8afd4d11e850b8894a4093741745891956e6/cbits-0.2.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2faa30cd713cb3ec7d282935816c588b6748918e9865819146d23a7c3a6dc435",
                "md5": "b9d5f00f316a068eb8ba579b80878d1e",
                "sha256": "8d7acf4e8abf8b74fc4613250032bb26c05939cefe328edcfec4df4465e3f8e6"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "b9d5f00f316a068eb8ba579b80878d1e",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 17954,
            "upload_time": "2025-10-10T13:35:13",
            "upload_time_iso_8601": "2025-10-10T13:35:13.601721Z",
            "url": "https://files.pythonhosted.org/packages/2f/aa/30cd713cb3ec7d282935816c588b6748918e9865819146d23a7c3a6dc435/cbits-0.2.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b67ddb5c4916ce8390945c55ad1dc435788ca40940bcb9d1aa34673a8a2a3f72",
                "md5": "0e92347aaf6144c9615edfd8e5001b81",
                "sha256": "420057d9ab67209cf4efa28b35438249f4c532ab05261ebf5c3b00baf165cd30"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0e92347aaf6144c9615edfd8e5001b81",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 24961,
            "upload_time": "2025-10-10T13:35:14",
            "upload_time_iso_8601": "2025-10-10T13:35:14.564560Z",
            "url": "https://files.pythonhosted.org/packages/b6/7d/db5c4916ce8390945c55ad1dc435788ca40940bcb9d1aa34673a8a2a3f72/cbits-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "82f173c01a5aae2694199b461260ac9c6d009f714c44f4dfc0696b79fe4b4de0",
                "md5": "90852e831d32b93b77d47378eaf0701e",
                "sha256": "b0ca0b1d776f95432a4d595f81aa133d5ca9583a7a3cf735a8d0fdd849d6e230"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "90852e831d32b93b77d47378eaf0701e",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 24995,
            "upload_time": "2025-10-10T13:35:15",
            "upload_time_iso_8601": "2025-10-10T13:35:15.870568Z",
            "url": "https://files.pythonhosted.org/packages/82/f1/73c01a5aae2694199b461260ac9c6d009f714c44f4dfc0696b79fe4b4de0/cbits-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8a7de7d5f689ee44831fdaf848f693e98570834915d30a92cc0e0cf4be4f7d62",
                "md5": "42d803566f9506f4a253d5631fb42585",
                "sha256": "8b81f0e7bd1fdd661d1db812c5e47bfcf8b9be43e750eb089ad3eace367d1521"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "42d803566f9506f4a253d5631fb42585",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 20207,
            "upload_time": "2025-10-10T13:35:16",
            "upload_time_iso_8601": "2025-10-10T13:35:16.804025Z",
            "url": "https://files.pythonhosted.org/packages/8a/7d/e7d5f689ee44831fdaf848f693e98570834915d30a92cc0e0cf4be4f7d62/cbits-0.2.0-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d7acd5157d4c1131f1ffec7673153c9ff1aa5d711c3d14db02dd7276e7f0da2e",
                "md5": "16378f244281116fdbc2bd0ae8fd78d5",
                "sha256": "20fca8de9d26444b3db98913267df03dc06a3e2919e778bc1f25d9997ca7ec3b"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "16378f244281116fdbc2bd0ae8fd78d5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 21021,
            "upload_time": "2025-10-10T13:35:18",
            "upload_time_iso_8601": "2025-10-10T13:35:18.213838Z",
            "url": "https://files.pythonhosted.org/packages/d7/ac/d5157d4c1131f1ffec7673153c9ff1aa5d711c3d14db02dd7276e7f0da2e/cbits-0.2.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "605ee0161e17c2b8b31ed19785966370bd08bea9d1aa8b26ba32ede5646e4b1c",
                "md5": "9516250965bfb31f43f2753f26cbc63b",
                "sha256": "41821ccb43c967912c49a67ede62567ddb4a584d5d92927eaab39760f487649e"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "9516250965bfb31f43f2753f26cbc63b",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 17952,
            "upload_time": "2025-10-10T13:35:19",
            "upload_time_iso_8601": "2025-10-10T13:35:19.414571Z",
            "url": "https://files.pythonhosted.org/packages/60/5e/e0161e17c2b8b31ed19785966370bd08bea9d1aa8b26ba32ede5646e4b1c/cbits-0.2.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ecce3612c19798de3bfcd64f9a3d7673ace80c6a2559ecaa1c1fc6547e840a51",
                "md5": "fa19f88b476c304de65d237bbecab9e3",
                "sha256": "dd3461f103b1d9f2cea53e52e20bd14af8f0c640f319b70738de58d5cf688410"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fa19f88b476c304de65d237bbecab9e3",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 24947,
            "upload_time": "2025-10-10T13:35:20",
            "upload_time_iso_8601": "2025-10-10T13:35:20.344090Z",
            "url": "https://files.pythonhosted.org/packages/ec/ce/3612c19798de3bfcd64f9a3d7673ace80c6a2559ecaa1c1fc6547e840a51/cbits-0.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d11db0e555cea0b24d25c0aa504530b022a47ca561324d82c007cfb40b3728e4",
                "md5": "44141178bcd7109b1b555a77f428e732",
                "sha256": "37edbe31501db10e98e1e0cd8ac8c787f3ffbfddae4e9cd38da9309b083299b1"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "44141178bcd7109b1b555a77f428e732",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 24992,
            "upload_time": "2025-10-10T13:35:21",
            "upload_time_iso_8601": "2025-10-10T13:35:21.261235Z",
            "url": "https://files.pythonhosted.org/packages/d1/1d/b0e555cea0b24d25c0aa504530b022a47ca561324d82c007cfb40b3728e4/cbits-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "46b08668f522e0b4c9e771b981a66e5446c8e26d59976eb595bc84484fc5aa3e",
                "md5": "ef5c2632034252482196a2dbc0d59608",
                "sha256": "82810bf52a0d67a4df8d49429eb1a2cbb0d1647df97841e0d3474a1f09f01b53"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "ef5c2632034252482196a2dbc0d59608",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 20197,
            "upload_time": "2025-10-10T13:35:23",
            "upload_time_iso_8601": "2025-10-10T13:35:23.427982Z",
            "url": "https://files.pythonhosted.org/packages/46/b0/8668f522e0b4c9e771b981a66e5446c8e26d59976eb595bc84484fc5aa3e/cbits-0.2.0-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "81ec95b1e9cb0804e3ace6538916a7fbf1b64fec578d37ebb967366eae01e9f9",
                "md5": "06caba4e1e9edcd62edbb2c89146d758",
                "sha256": "fff38d71640cfbdacf92d352fc307a0dde44afb494e644399706170969977193"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "06caba4e1e9edcd62edbb2c89146d758",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 21016,
            "upload_time": "2025-10-10T13:35:24",
            "upload_time_iso_8601": "2025-10-10T13:35:24.385209Z",
            "url": "https://files.pythonhosted.org/packages/81/ec/95b1e9cb0804e3ace6538916a7fbf1b64fec578d37ebb967366eae01e9f9/cbits-0.2.0-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dc545b0f19d372e6f3808a34d239023e52ba9e4c490f7a458a27ead4194021bd",
                "md5": "068eb44983ddd21151346bfa161d1d4c",
                "sha256": "6cd3b0a70bc7a869da8ff5ba20120307a6f2e481df15a036e28d8314529eda69"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "068eb44983ddd21151346bfa161d1d4c",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 25020,
            "upload_time": "2025-10-10T13:35:25",
            "upload_time_iso_8601": "2025-10-10T13:35:25.516911Z",
            "url": "https://files.pythonhosted.org/packages/dc/54/5b0f19d372e6f3808a34d239023e52ba9e4c490f7a458a27ead4194021bd/cbits-0.2.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1293d7026665b2afe00e2ee1dd49693a34ce05ea643a840ff1cb2d75b3dc866",
                "md5": "a144c1cfde1337620d4bcfb14656887c",
                "sha256": "39198425972714e8848e41138edf9b54ac602b37ec5b07742a24662c3f2c95b0"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a144c1cfde1337620d4bcfb14656887c",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 25071,
            "upload_time": "2025-10-10T13:35:26",
            "upload_time_iso_8601": "2025-10-10T13:35:26.833742Z",
            "url": "https://files.pythonhosted.org/packages/e1/29/3d7026665b2afe00e2ee1dd49693a34ce05ea643a840ff1cb2d75b3dc866/cbits-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fa3a042ebc5c3fcd7dfc49a4ecc9044e73a5f562b14650c43700ef600ffc287d",
                "md5": "80203743c24620a5894ab54785c2d238",
                "sha256": "45364fc56ee33735883e667be0e347fc86f82ce306a4a59ac5e06428d8b6d27b"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp38-cp38-win32.whl",
            "has_sig": false,
            "md5_digest": "80203743c24620a5894ab54785c2d238",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 20284,
            "upload_time": "2025-10-10T13:35:27",
            "upload_time_iso_8601": "2025-10-10T13:35:27.782602Z",
            "url": "https://files.pythonhosted.org/packages/fa/3a/042ebc5c3fcd7dfc49a4ecc9044e73a5f562b14650c43700ef600ffc287d/cbits-0.2.0-cp38-cp38-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "23d4f5c97cb355e2948d62f74f6a77bb410404d02273729b9ae44d3b01515367",
                "md5": "f41ce29c80b9a7be52f1eba733c26c7a",
                "sha256": "cc06f11a98a8c6b7f8dd9684507d9f408d8c4976b430321004810b9df302778d"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f41ce29c80b9a7be52f1eba733c26c7a",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 21178,
            "upload_time": "2025-10-10T13:35:29",
            "upload_time_iso_8601": "2025-10-10T13:35:29.219127Z",
            "url": "https://files.pythonhosted.org/packages/23/d4/f5c97cb355e2948d62f74f6a77bb410404d02273729b9ae44d3b01515367/cbits-0.2.0-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "517e0d062c55d6c4ec6d90a52baf8678c23a2139346ecc5acf6dc616b27b8138",
                "md5": "f1ca68dbbd011da8095a3ad643f9a902",
                "sha256": "4ed225800da0b85599f44db9193f1c087e561ec4513ef83ea779caf24feb3316"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "f1ca68dbbd011da8095a3ad643f9a902",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 17972,
            "upload_time": "2025-10-10T13:35:30",
            "upload_time_iso_8601": "2025-10-10T13:35:30.475846Z",
            "url": "https://files.pythonhosted.org/packages/51/7e/0d062c55d6c4ec6d90a52baf8678c23a2139346ecc5acf6dc616b27b8138/cbits-0.2.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fa733711e31601643c5a7bb23005056086dde05c2553f06432baa89fb0b0a08b",
                "md5": "ca1a7dd485aaae1885d5c5cfedac541c",
                "sha256": "7d638dbed842b4f59584f1c43edf1b31f60cca1924caf10ed5cf66556b25d426"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ca1a7dd485aaae1885d5c5cfedac541c",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 25095,
            "upload_time": "2025-10-10T13:35:31",
            "upload_time_iso_8601": "2025-10-10T13:35:31.431052Z",
            "url": "https://files.pythonhosted.org/packages/fa/73/3711e31601643c5a7bb23005056086dde05c2553f06432baa89fb0b0a08b/cbits-0.2.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b96ea82eb3be36c453a9ff93f4db4ee04706af9eefae35f4922fa5adbffaf054",
                "md5": "847ab60fbf82e2a022f33fd67ff6e927",
                "sha256": "a7b12026f26cfb283a804e864b1f050f10e25de17ac857bb87b65764d8658b3b"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "847ab60fbf82e2a022f33fd67ff6e927",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 25102,
            "upload_time": "2025-10-10T13:35:32",
            "upload_time_iso_8601": "2025-10-10T13:35:32.416977Z",
            "url": "https://files.pythonhosted.org/packages/b9/6e/a82eb3be36c453a9ff93f4db4ee04706af9eefae35f4922fa5adbffaf054/cbits-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5951f8edc6b0637203135a3f024a3e74fa1a7037ad61c8eb725e8fa4ab8a91de",
                "md5": "306bbafba9f63feadfcf52f51373b611",
                "sha256": "f7993f9097c9a91af21276f91aa40b7b2ac927f0bc7330466906743f9a27d63d"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "306bbafba9f63feadfcf52f51373b611",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 20271,
            "upload_time": "2025-10-10T13:35:33",
            "upload_time_iso_8601": "2025-10-10T13:35:33.372364Z",
            "url": "https://files.pythonhosted.org/packages/59/51/f8edc6b0637203135a3f024a3e74fa1a7037ad61c8eb725e8fa4ab8a91de/cbits-0.2.0-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9881ca9a797e10bab995125d438beb86099aac43fdface546954a002fcf5a20b",
                "md5": "8b123442f7c972ef51e72972b8c4a735",
                "sha256": "a6cd273f261de1054cd794cc14d7a5fa13f82eb4a827c9a4f574fe38a43a3cb4"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8b123442f7c972ef51e72972b8c4a735",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 21191,
            "upload_time": "2025-10-10T13:35:34",
            "upload_time_iso_8601": "2025-10-10T13:35:34.321238Z",
            "url": "https://files.pythonhosted.org/packages/98/81/ca9a797e10bab995125d438beb86099aac43fdface546954a002fcf5a20b/cbits-0.2.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b2ae0918b7e4a7f29254215f82f88d6a62a5d1f63a30f2fabaa6c42f8d3c41cf",
                "md5": "8126677ba10d5b8a487b2417e6413c5c",
                "sha256": "0e5168d91c26c92ec349c801eba654b548644be34a35648152d333e51fa92cca"
            },
            "downloads": -1,
            "filename": "cbits-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "8126677ba10d5b8a487b2417e6413c5c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 58458,
            "upload_time": "2025-10-10T13:35:35",
            "upload_time_iso_8601": "2025-10-10T13:35:35.234724Z",
            "url": "https://files.pythonhosted.org/packages/b2/ae/0918b7e4a7f29254215f82f88d6a62a5d1f63a30f2fabaa6c42f8d3c41cf/cbits-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-10 13:35:35",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "lambdaphoenix",
    "github_project": "cbits",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "cbits"
}
        
Elapsed time: 2.20252s