libcachesim


Namelibcachesim JSON
Version 0.3.3.post3 PyPI version JSON
download
home_pageNone
SummaryPython bindings for libCacheSim
upload_time2025-08-23 17:40:23
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords performance cache simulator
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # libCacheSim Python Binding

[![Build](https://github.com/cacheMon/libCacheSim-python/actions/workflows/build.yml/badge.svg)](https://github.com/cacheMon/libCacheSim-python/actions/workflows/build.yml)
[![Documentation](https://github.com/cacheMon/libCacheSim-python/actions/workflows/docs.yml/badge.svg)](docs.libcachesim.com/python)


libCacheSim is fast with the features from [underlying libCacheSim lib](https://github.com/1a1a11a/libCacheSim):

- **High performance** - over 20M requests/sec for a realistic trace replay
- **High memory efficiency** - predictable and small memory footprint
- **Parallelism out-of-the-box** - uses the many CPU cores to speed up trace analysis and cache simulations

libCacheSim is flexible and easy to use with:

- **Seamless integration** with [open-source cache dataset](https://github.com/cacheMon/cache_dataset) consisting of thousands traces hosted on S3
- **High-throughput simulation** with the [underlying libCacheSim lib](https://github.com/1a1a11a/libCacheSim)
- **Detailed cache requests** and other internal data control
- **Customized plugin cache development** without any compilation

## Installation

### Quick Install

Binary installers for the latest released version are available at the [Python Package Index (PyPI)](https://pypi.org/project/libcachesim).

```bash
pip install libcachesim
```

Visit our [documentation](https://cachemon.github.io/libCacheSim-python/getting_started/quickstart/) to learn more.

### Installation from sources

If there are no wheels suitable for your environment, consider building from source.

```bash
git clone https://github.com/cacheMon/libCacheSim-python.git
cd libCacheSim-python
bash scripts/install.sh
```

Run all tests to ensure the package works.

```bash
python -m pytest tests/
```

## Quick Start

### Cache Simulation

With libcachesim installed, you can start cache simulation for some eviction algorithm and cache traces:

```python
import libcachesim as lcs

# Step 1: Open a trace hosted on S3 (find more via https://github.com/cacheMon/cache_dataset)
URI = "s3://cache-datasets/cache_dataset_oracleGeneral/2007_msr/msr_hm_0.oracleGeneral.zst"
reader = lcs.TraceReader(
    trace = URI,
    trace_type = lcs.TraceType.ORACLE_GENERAL_TRACE,
    reader_init_params = lcs.ReaderInitParam(ignore_obj_size=False)
)

# Step 2: Initialize cache
cache = lcs.S3FIFO(
    cache_size=1024*1024,
    # Cache specific parameters
    small_size_ratio=0.2,
    ghost_size_ratio=0.8,
    move_to_main_threshold=2,
)

# Step 3: Process entire trace efficiently (C++ backend)
req_miss_ratio, byte_miss_ratio = cache.process_trace(reader)
print(f"Request miss ratio: {req_miss_ratio:.4f}, Byte miss ratio: {byte_miss_ratio:.4f}")

# Step 3.1: Process the first 1000 requests
cache = lcs.S3FIFO(
    cache_size=1024 * 1024,
    # Cache specific parameters
    small_size_ratio=0.2,
    ghost_size_ratio=0.8,
    move_to_main_threshold=2,
)
req_miss_ratio, byte_miss_ratio = cache.process_trace(reader, start_req=0, max_req=1000)
print(f"Request miss ratio: {req_miss_ratio:.4f}, Byte miss ratio: {byte_miss_ratio:.4f}")
```

## Plugin System

libCacheSim allows you to develop your own cache eviction algorithms and test them via the plugin system without any C/C++ compilation required.

### Plugin Cache Overview

The `PluginCache` allows you to define custom caching behavior through Python callback functions. You need to implement these callback functions:

| Function | Signature | Description |
|----------|-----------|-------------|
| `init_hook` | `(common_cache_params: CommonCacheParams) -> Any` | Initialize your data structure |
| `hit_hook` | `(data: Any, request: Request) -> None` | Handle cache hits |
| `miss_hook` | `(data: Any, request: Request) -> None` | Handle cache misses |
| `eviction_hook` | `(data: Any, request: Request) -> int` | Return object ID to evict |
| `remove_hook` | `(data: Any, obj_id: int) -> None` | Clean up when object removed |
| `free_hook` | `(data: Any) -> None` | [Optional] Final cleanup |

### Example: Implementing LRU via Plugin System

```python
from collections import OrderedDict
from typing import Any

from libcachesim import PluginCache, LRU, CommonCacheParams, Request, SyntheticReader

def init_hook(_: CommonCacheParams) -> Any:
    return OrderedDict()

def hit_hook(data: Any, req: Request) -> None:
    data.move_to_end(req.obj_id, last=True)

def miss_hook(data: Any, req: Request) -> None:
    data.__setitem__(req.obj_id, req.obj_size)

def eviction_hook(data: Any, _: Request) -> int:
    return data.popitem(last=False)[0]

def remove_hook(data: Any, obj_id: int) -> None:
    data.pop(obj_id, None)

def free_hook(data: Any) -> None:
    data.clear()

plugin_lru_cache = PluginCache(
    cache_size=128,
    cache_init_hook=init_hook,
    cache_hit_hook=hit_hook,
    cache_miss_hook=miss_hook,
    cache_eviction_hook=eviction_hook,
    cache_remove_hook=remove_hook,
    cache_free_hook=free_hook,
    cache_name="Plugin_LRU",
)

reader = SyntheticReader(
    num_objects=1000, num_of_req=10000, obj_size=1, alpha=1.0, dist="zipf"
)
req_miss_ratio, byte_miss_ratio = plugin_lru_cache.process_trace(reader)
```

By defining custom hook functions for cache initialization, hit, miss, eviction, removal, and cleanup, users can easily prototype and test their own cache eviction algorithms.

### Getting Help

- Check [project documentation](https://docs.libcachesim.com/python) for detailed guides
- Open issues on [GitHub](https://github.com/cacheMon/libCacheSim-python/issues/new/choose)
- Review [examples](/examples) in the main repository

---
## Reference
<details>
<summary> Please cite the following papers if you use libCacheSim. </summary>

```
@inproceedings{yang2020-workload,
    author = {Juncheng Yang and Yao Yue and K. V. Rashmi},
    title = {A large-scale analysis of hundreds of in-memory cache clusters at Twitter},
    booktitle = {14th USENIX Symposium on Operating Systems Design and Implementation (OSDI 20)},
    year = {2020},
    isbn = {978-1-939133-19-9},
    pages = {191--208},
    url = {https://www.usenix.org/conference/osdi20/presentation/yang},
    publisher = {USENIX Association},
}

@inproceedings{yang2023-s3fifo,
  title = {FIFO Queues Are All You Need for Cache Eviction},
  author = {Juncheng Yang and Yazhuo Zhang and Ziyue Qiu and Yao Yue and K.V. Rashmi},
  isbn = {9798400702297},
  publisher = {Association for Computing Machinery},
  booktitle = {Symposium on Operating Systems Principles (SOSP'23)},
  pages = {130–149},
  numpages = {20},
  year={2023}
}

@inproceedings{yang2023-qdlp,
  author = {Juncheng Yang and Ziyue Qiu and Yazhuo Zhang and Yao Yue and K.V. Rashmi},
  title = {FIFO Can Be Better than LRU: The Power of Lazy Promotion and Quick Demotion},
  year = {2023},
  isbn = {9798400701955},
  publisher = {Association for Computing Machinery},
  doi = {10.1145/3593856.3595887},
  booktitle = {Proceedings of the 19th Workshop on Hot Topics in Operating Systems (HotOS23)},
  pages = {70–79},
  numpages = {10},
}
```
If you used libCacheSim in your research, please cite the above papers.

</details>

---

## License
See [LICENSE](LICENSE) for details.

---

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "libcachesim",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "performance, cache, simulator",
    "author": null,
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/0a/9b/84e56be805dce8fb9ab9859b9666b672ad16f440769afe79ce6bd6a58951/libcachesim-0.3.3.post3.tar.gz",
    "platform": null,
    "description": "# libCacheSim Python Binding\n\n[![Build](https://github.com/cacheMon/libCacheSim-python/actions/workflows/build.yml/badge.svg)](https://github.com/cacheMon/libCacheSim-python/actions/workflows/build.yml)\n[![Documentation](https://github.com/cacheMon/libCacheSim-python/actions/workflows/docs.yml/badge.svg)](docs.libcachesim.com/python)\n\n\nlibCacheSim is fast with the features from [underlying libCacheSim lib](https://github.com/1a1a11a/libCacheSim):\n\n- **High performance** - over 20M requests/sec for a realistic trace replay\n- **High memory efficiency** - predictable and small memory footprint\n- **Parallelism out-of-the-box** - uses the many CPU cores to speed up trace analysis and cache simulations\n\nlibCacheSim is flexible and easy to use with:\n\n- **Seamless integration** with [open-source cache dataset](https://github.com/cacheMon/cache_dataset) consisting of thousands traces hosted on S3\n- **High-throughput simulation** with the [underlying libCacheSim lib](https://github.com/1a1a11a/libCacheSim)\n- **Detailed cache requests** and other internal data control\n- **Customized plugin cache development** without any compilation\n\n## Installation\n\n### Quick Install\n\nBinary installers for the latest released version are available at the [Python Package Index (PyPI)](https://pypi.org/project/libcachesim).\n\n```bash\npip install libcachesim\n```\n\nVisit our [documentation](https://cachemon.github.io/libCacheSim-python/getting_started/quickstart/) to learn more.\n\n### Installation from sources\n\nIf there are no wheels suitable for your environment, consider building from source.\n\n```bash\ngit clone https://github.com/cacheMon/libCacheSim-python.git\ncd libCacheSim-python\nbash scripts/install.sh\n```\n\nRun all tests to ensure the package works.\n\n```bash\npython -m pytest tests/\n```\n\n## Quick Start\n\n### Cache Simulation\n\nWith libcachesim installed, you can start cache simulation for some eviction algorithm and cache traces:\n\n```python\nimport libcachesim as lcs\n\n# Step 1: Open a trace hosted on S3 (find more via https://github.com/cacheMon/cache_dataset)\nURI = \"s3://cache-datasets/cache_dataset_oracleGeneral/2007_msr/msr_hm_0.oracleGeneral.zst\"\nreader = lcs.TraceReader(\n    trace = URI,\n    trace_type = lcs.TraceType.ORACLE_GENERAL_TRACE,\n    reader_init_params = lcs.ReaderInitParam(ignore_obj_size=False)\n)\n\n# Step 2: Initialize cache\ncache = lcs.S3FIFO(\n    cache_size=1024*1024,\n    # Cache specific parameters\n    small_size_ratio=0.2,\n    ghost_size_ratio=0.8,\n    move_to_main_threshold=2,\n)\n\n# Step 3: Process entire trace efficiently (C++ backend)\nreq_miss_ratio, byte_miss_ratio = cache.process_trace(reader)\nprint(f\"Request miss ratio: {req_miss_ratio:.4f}, Byte miss ratio: {byte_miss_ratio:.4f}\")\n\n# Step 3.1: Process the first 1000 requests\ncache = lcs.S3FIFO(\n    cache_size=1024 * 1024,\n    # Cache specific parameters\n    small_size_ratio=0.2,\n    ghost_size_ratio=0.8,\n    move_to_main_threshold=2,\n)\nreq_miss_ratio, byte_miss_ratio = cache.process_trace(reader, start_req=0, max_req=1000)\nprint(f\"Request miss ratio: {req_miss_ratio:.4f}, Byte miss ratio: {byte_miss_ratio:.4f}\")\n```\n\n## Plugin System\n\nlibCacheSim allows you to develop your own cache eviction algorithms and test them via the plugin system without any C/C++ compilation required.\n\n### Plugin Cache Overview\n\nThe `PluginCache` allows you to define custom caching behavior through Python callback functions. You need to implement these callback functions:\n\n| Function | Signature | Description |\n|----------|-----------|-------------|\n| `init_hook` | `(common_cache_params: CommonCacheParams) -> Any` | Initialize your data structure |\n| `hit_hook` | `(data: Any, request: Request) -> None` | Handle cache hits |\n| `miss_hook` | `(data: Any, request: Request) -> None` | Handle cache misses |\n| `eviction_hook` | `(data: Any, request: Request) -> int` | Return object ID to evict |\n| `remove_hook` | `(data: Any, obj_id: int) -> None` | Clean up when object removed |\n| `free_hook` | `(data: Any) -> None` | [Optional] Final cleanup |\n\n### Example: Implementing LRU via Plugin System\n\n```python\nfrom collections import OrderedDict\nfrom typing import Any\n\nfrom libcachesim import PluginCache, LRU, CommonCacheParams, Request, SyntheticReader\n\ndef init_hook(_: CommonCacheParams) -> Any:\n    return OrderedDict()\n\ndef hit_hook(data: Any, req: Request) -> None:\n    data.move_to_end(req.obj_id, last=True)\n\ndef miss_hook(data: Any, req: Request) -> None:\n    data.__setitem__(req.obj_id, req.obj_size)\n\ndef eviction_hook(data: Any, _: Request) -> int:\n    return data.popitem(last=False)[0]\n\ndef remove_hook(data: Any, obj_id: int) -> None:\n    data.pop(obj_id, None)\n\ndef free_hook(data: Any) -> None:\n    data.clear()\n\nplugin_lru_cache = PluginCache(\n    cache_size=128,\n    cache_init_hook=init_hook,\n    cache_hit_hook=hit_hook,\n    cache_miss_hook=miss_hook,\n    cache_eviction_hook=eviction_hook,\n    cache_remove_hook=remove_hook,\n    cache_free_hook=free_hook,\n    cache_name=\"Plugin_LRU\",\n)\n\nreader = SyntheticReader(\n    num_objects=1000, num_of_req=10000, obj_size=1, alpha=1.0, dist=\"zipf\"\n)\nreq_miss_ratio, byte_miss_ratio = plugin_lru_cache.process_trace(reader)\n```\n\nBy defining custom hook functions for cache initialization, hit, miss, eviction, removal, and cleanup, users can easily prototype and test their own cache eviction algorithms.\n\n### Getting Help\n\n- Check [project documentation](https://docs.libcachesim.com/python) for detailed guides\n- Open issues on [GitHub](https://github.com/cacheMon/libCacheSim-python/issues/new/choose)\n- Review [examples](/examples) in the main repository\n\n---\n## Reference\n<details>\n<summary> Please cite the following papers if you use libCacheSim. </summary>\n\n```\n@inproceedings{yang2020-workload,\n    author = {Juncheng Yang and Yao Yue and K. V. Rashmi},\n    title = {A large-scale analysis of hundreds of in-memory cache clusters at Twitter},\n    booktitle = {14th USENIX Symposium on Operating Systems Design and Implementation (OSDI 20)},\n    year = {2020},\n    isbn = {978-1-939133-19-9},\n    pages = {191--208},\n    url = {https://www.usenix.org/conference/osdi20/presentation/yang},\n    publisher = {USENIX Association},\n}\n\n@inproceedings{yang2023-s3fifo,\n  title = {FIFO Queues Are All You Need for Cache Eviction},\n  author = {Juncheng Yang and Yazhuo Zhang and Ziyue Qiu and Yao Yue and K.V. Rashmi},\n  isbn = {9798400702297},\n  publisher = {Association for Computing Machinery},\n  booktitle = {Symposium on Operating Systems Principles (SOSP'23)},\n  pages = {130\u2013149},\n  numpages = {20},\n  year={2023}\n}\n\n@inproceedings{yang2023-qdlp,\n  author = {Juncheng Yang and Ziyue Qiu and Yazhuo Zhang and Yao Yue and K.V. Rashmi},\n  title = {FIFO Can Be Better than LRU: The Power of Lazy Promotion and Quick Demotion},\n  year = {2023},\n  isbn = {9798400701955},\n  publisher = {Association for Computing Machinery},\n  doi = {10.1145/3593856.3595887},\n  booktitle = {Proceedings of the 19th Workshop on Hot Topics in Operating Systems (HotOS23)},\n  pages = {70\u201379},\n  numpages = {10},\n}\n```\nIf you used libCacheSim in your research, please cite the above papers.\n\n</details>\n\n---\n\n## License\nSee [LICENSE](LICENSE) for details.\n\n---\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python bindings for libCacheSim",
    "version": "0.3.3.post3",
    "project_urls": null,
    "split_keywords": [
        "performance",
        " cache",
        " simulator"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c12f0a14c03f627a04b2ec230d9bbca5be6ee019f5d83bcd56e345209d871858",
                "md5": "87e14270f7a878dd81b29e975fde4d4b",
                "sha256": "afba47d6aebffcde48bc58de64b1810dd58b284e43fc44837cc01792f5d08edd"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp310-cp310-macosx_15_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "87e14270f7a878dd81b29e975fde4d4b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 4392944,
            "upload_time": "2025-08-23T17:40:04",
            "upload_time_iso_8601": "2025-08-23T17:40:04.284029Z",
            "url": "https://files.pythonhosted.org/packages/c1/2f/0a14c03f627a04b2ec230d9bbca5be6ee019f5d83bcd56e345209d871858/libcachesim-0.3.3.post3-cp310-cp310-macosx_15_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9136b284c9af5f4cc7242b5407287435d5445bdeadd35ccd6f5952a269dc0b8e",
                "md5": "ef2b90fc52f8893701f43e01681ca9f7",
                "sha256": "3eae78258b9f3047630223c2d93615972c7c0f1730924b9b7bb12f31c9e749d5"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp310-cp310-manylinux_2_34_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ef2b90fc52f8893701f43e01681ca9f7",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 9764827,
            "upload_time": "2025-08-23T17:40:06",
            "upload_time_iso_8601": "2025-08-23T17:40:06.313453Z",
            "url": "https://files.pythonhosted.org/packages/91/36/b284c9af5f4cc7242b5407287435d5445bdeadd35ccd6f5952a269dc0b8e/libcachesim-0.3.3.post3-cp310-cp310-manylinux_2_34_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a6b0cfa425601519a8104a9109e0bc2a90b55365bf09321f9c7ecff01006991f",
                "md5": "8c1c57deb20e9cc1507293471f62bfb4",
                "sha256": "ffade39d2019560891b56eccc104672eda4ffd28cb4f8c958788a0e6cbc24b3c"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp311-cp311-macosx_15_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "8c1c57deb20e9cc1507293471f62bfb4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 4394255,
            "upload_time": "2025-08-23T17:40:08",
            "upload_time_iso_8601": "2025-08-23T17:40:08.138738Z",
            "url": "https://files.pythonhosted.org/packages/a6/b0/cfa425601519a8104a9109e0bc2a90b55365bf09321f9c7ecff01006991f/libcachesim-0.3.3.post3-cp311-cp311-macosx_15_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7cfa5ec69308ba767f99c60f02e23079693b8716cde55ac8417afbf7c9d734df",
                "md5": "969eb6aeb47d8505f73669b5b1c525bf",
                "sha256": "43dc55f1243d65a97cc3ed49a692d6defa92a36fc10a56fd06c8fbe5c875dc8c"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp311-cp311-manylinux_2_34_x86_64.whl",
            "has_sig": false,
            "md5_digest": "969eb6aeb47d8505f73669b5b1c525bf",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 9766292,
            "upload_time": "2025-08-23T17:40:09",
            "upload_time_iso_8601": "2025-08-23T17:40:09.820863Z",
            "url": "https://files.pythonhosted.org/packages/7c/fa/5ec69308ba767f99c60f02e23079693b8716cde55ac8417afbf7c9d734df/libcachesim-0.3.3.post3-cp311-cp311-manylinux_2_34_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c98e568f11ec9a26d766c672956e052b9142d2d147bd970a1b53df4e1e17ebbf",
                "md5": "d0b9d077e0a658dfdb49b93775cf126b",
                "sha256": "0109f6aa8f85b3c27261fdcd223bdd7aefc21f7cf42be101835ff1a497556d47"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp312-cp312-macosx_15_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "d0b9d077e0a658dfdb49b93775cf126b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 4395815,
            "upload_time": "2025-08-23T17:40:11",
            "upload_time_iso_8601": "2025-08-23T17:40:11.912318Z",
            "url": "https://files.pythonhosted.org/packages/c9/8e/568f11ec9a26d766c672956e052b9142d2d147bd970a1b53df4e1e17ebbf/libcachesim-0.3.3.post3-cp312-cp312-macosx_15_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8ef427df81a1f441079c1a0b47760d5c2a418231d282425b80e3faec0c7bdba1",
                "md5": "908d34bda4cc303e0fa75f4671db9a8d",
                "sha256": "d186741f444e881921f3a33fcd7c83d36bd8bb50ef665c5e624e5a70138c461c"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp312-cp312-manylinux_2_34_x86_64.whl",
            "has_sig": false,
            "md5_digest": "908d34bda4cc303e0fa75f4671db9a8d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 9768314,
            "upload_time": "2025-08-23T17:40:13",
            "upload_time_iso_8601": "2025-08-23T17:40:13.491769Z",
            "url": "https://files.pythonhosted.org/packages/8e/f4/27df81a1f441079c1a0b47760d5c2a418231d282425b80e3faec0c7bdba1/libcachesim-0.3.3.post3-cp312-cp312-manylinux_2_34_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "34db5f02cccd58bb36b55d15584945599c7392e6ad572adf418efbeb0ad36787",
                "md5": "4895cbf1fa339338b356c77660283061",
                "sha256": "9a45b7e8db394b2677b48c589f55005744ba1fefd64ab1fcdd9e390b15235add"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp313-cp313-macosx_15_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "4895cbf1fa339338b356c77660283061",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 4395845,
            "upload_time": "2025-08-23T17:40:15",
            "upload_time_iso_8601": "2025-08-23T17:40:15.803093Z",
            "url": "https://files.pythonhosted.org/packages/34/db/5f02cccd58bb36b55d15584945599c7392e6ad572adf418efbeb0ad36787/libcachesim-0.3.3.post3-cp313-cp313-macosx_15_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "67515053a9def725cd1029654db2c263a5009110a5b11251bbdcb101bf52a40c",
                "md5": "119fea91c1d2b37a5a860bb250cf24d0",
                "sha256": "4477948040ea5a74c15361e64b29437c154a6645bfd5f3bf1e2b8a909e8e854f"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp313-cp313-manylinux_2_34_x86_64.whl",
            "has_sig": false,
            "md5_digest": "119fea91c1d2b37a5a860bb250cf24d0",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 9768983,
            "upload_time": "2025-08-23T17:40:17",
            "upload_time_iso_8601": "2025-08-23T17:40:17.251406Z",
            "url": "https://files.pythonhosted.org/packages/67/51/5053a9def725cd1029654db2c263a5009110a5b11251bbdcb101bf52a40c/libcachesim-0.3.3.post3-cp313-cp313-manylinux_2_34_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "61ba0f0ad27d9b277aa511eccebf02632522a9f0495411b8ce2b5277990fa24d",
                "md5": "826eab2036edcb9b82de496cfb2d548b",
                "sha256": "f574c866e728abbc5657949801d628c8dac61ee8f539149461dd7acb8ee5550c"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp39-cp39-macosx_15_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "826eab2036edcb9b82de496cfb2d548b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 4392938,
            "upload_time": "2025-08-23T17:40:19",
            "upload_time_iso_8601": "2025-08-23T17:40:19.415809Z",
            "url": "https://files.pythonhosted.org/packages/61/ba/0f0ad27d9b277aa511eccebf02632522a9f0495411b8ce2b5277990fa24d/libcachesim-0.3.3.post3-cp39-cp39-macosx_15_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2237f982a6f45d2fd621ef0151ffa02d7800bb3906982ddf98d7336751e62a42",
                "md5": "80cb6c06033d49daae2856050c03a4bc",
                "sha256": "3228fe6edcb6a9a661be04a422ccbe2d03bf909a249ab1ac471b2b4732ee56ed"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3-cp39-cp39-manylinux_2_34_x86_64.whl",
            "has_sig": false,
            "md5_digest": "80cb6c06033d49daae2856050c03a4bc",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 9765533,
            "upload_time": "2025-08-23T17:40:21",
            "upload_time_iso_8601": "2025-08-23T17:40:21.006363Z",
            "url": "https://files.pythonhosted.org/packages/22/37/f982a6f45d2fd621ef0151ffa02d7800bb3906982ddf98d7336751e62a42/libcachesim-0.3.3.post3-cp39-cp39-manylinux_2_34_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0a9b84e56be805dce8fb9ab9859b9666b672ad16f440769afe79ce6bd6a58951",
                "md5": "5b519d50818a4b5a03f3c6fc7751f763",
                "sha256": "04b1fc6f1108295985664e692f47189a50643185b7b8e956e2ce74b8d4a72312"
            },
            "downloads": -1,
            "filename": "libcachesim-0.3.3.post3.tar.gz",
            "has_sig": false,
            "md5_digest": "5b519d50818a4b5a03f3c6fc7751f763",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 80699749,
            "upload_time": "2025-08-23T17:40:23",
            "upload_time_iso_8601": "2025-08-23T17:40:23.760240Z",
            "url": "https://files.pythonhosted.org/packages/0a/9b/84e56be805dce8fb9ab9859b9666b672ad16f440769afe79ce6bd6a58951/libcachesim-0.3.3.post3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-23 17:40:23",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "libcachesim"
}
        
Elapsed time: 2.40189s