# libCacheSim Python Binding
[](https://github.com/cacheMon/libCacheSim-python/actions/workflows/build.yml)
[](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[](https://github.com/cacheMon/libCacheSim-python/actions/workflows/build.yml)\n[](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"
}