Registry / serialization / bytesparse

bytesparse

JSON →
library1.1.0pypypi✓ verified 86d ago

The `bytesparse` library provides utilities for managing sparse bytes within a virtual memory space. It offers an interface similar to Python's built-in `bytearray`, allowing for non-contiguous data allocation across a potentially infinite addressing space. Data chunks are stored internally using mutable `bytearray` objects. The library is currently at version 1.1.0 and exhibits an active release cadence, with several updates in the past year.

pip install bytesparse
INSTALL
IMPORT
SIG · BYTESPARSE
B
bytesparse
serializationpythonv1.1.0
Install
1.6s avg
Import
21ms
Disk
16MB
Pass rate
10/ 10
Env Coverage10 / 10
glibc
3.93.13
musl
3.93.13
Install & Compatibility
Where this runs
tested against v1.1.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
py 3.103.920 runs
installs and imports cleanly · install 0.0s · import 0.022s · 18.4MB
glibc
py 3.103.920 runs
installs and imports cleanly · install 1.6s · import 0.020s · 19MB
16MB installed
● package 16MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

Memory
from bytesparse import Memory
A generic virtual memory class with an infinite address range.
bytesparse
from bytesparse import bytesparse
A subclass of Memory that behaves more like a bytearray.

This quickstart demonstrates how to initialize `bytesparse` and `Memory` objects, perform basic read/write operations, and store data sparsely at arbitrary addresses. It shows how `bytesparse` can be initialized from bytes and how `poke` can be used for non-contiguous writes.

from bytesparse import bytesparse, Memory # Create a bytesparse object from existing bytes m = bytesparse(b'Hello, World!') print(f"Initial bytesparse: {m}") print(f"Length: {len(m)}") print(f"As bytes: {bytes(m)}") # Modify the content m[0:5] = b'Ciao ' print(f"After modification: {bytes(m)}") # Store data at a sparse, non-contiguous address m.poke(1000, b'remote data') print(f"After poking remote data: {m}") print(f"Virtual length increased: {len(m)}") # Accessing a generic Memory object mem = Memory() mem[0x100:0x105] = b'DATA_A' mem[0x200:0x205] = b'DATA_B' print(f"Memory object blocks: {mem.to_blocks()}") print(f"Memory at 0x100: {mem.peek(0x100, 5)}")
Debug
Known issues
gotchaThe companion `cbytesparse` (Cython) package has a limited addressing space (uint_fast64_t, typically 32-bit or 64-bit) and does not support infinite or negative addresses, unlike the pure Python `bytesparse` implementation. Users switching between implementations should be aware of this difference.
fix
Always use the pure Python `bytesparse` if infinite or negative addressing is required. If using `cbytesparse`, be mindful of its address space limitations.
affects: All versions of bytesparse when used in conjunction with cbytesparse
gotchaWhile the Cython implementation (`cbytesparse`) aims for speedup, it is labeled as 'experimental' and the documentation suggests that even faster 'ad-hoc' implementations for specific hardware might exist. Do not assume `cbytesparse` provides optimal performance for all scenarios without benchmarking.
fix
For critical performance paths, benchmark both the pure Python and Cython implementations with your specific workload. Consider alternative specialized memory management solutions if `cbytesparse` does not meet performance targets.
affects: All versions
gotchaBoth `Memory` and `bytesparse` classes inherit from `collections.abc.MutableSequence` and `collections.abc.MutableMapping` to provide familiar interfaces. However, their internal sparse storage mechanism means that certain operations might have different performance characteristics or behaviors compared to direct Python `list` or `dict` equivalents, especially for highly fragmented data.
fix
Consult the official documentation for specific method complexities. Be mindful of potential performance implications when performing operations that would be highly optimized on contiguous data structures (e.g., slicing large, sparse regions).
affects: All versions
Errors
Common errors & fixes
TypeError: a bytes-like object is required, not 'str'
Attempting to pass a Python string (`str`) to `bytesparse` methods or constructors that specifically expect a bytes-like object (`bytes` or `bytearray`).
fix
Encode strings to bytes before passing them to `bytesparse` methods (e.g., `my_string.encode('utf-8')`) or use byte literals (e.g., `b'hello'`).
Unexpected output from len() or bytes() for sparse data (e.g., len() is very large, bytes() contains many nulls).
`len(bytesparse_obj)` returns the total virtual address range covered by the object, not the size of only the physically stored data. `bytes(bytesparse_obj)` converts the *entire* virtual memory range (from the lowest to the highest address containing data) into a `bytes` object, filling unallocated regions with null bytes (`\x00`).
fix
To retrieve only the physically stored data blocks, use `bytesparse_obj.to_blocks()`. To get the span of the *allocated* memory, use `bytesparse_obj.span()`. Understand that `len()` represents the virtual length across the entire addressable range, not the compact size.
Performance degradation when performing many small, highly fragmented writes or deletions at distant addresses.
Frequent modifications at non-contiguous addresses can lead to an increase in the number of internal data blocks managed by `bytesparse`, which can add overhead to operations.
fix
For better performance, try to coalesce writes into larger contiguous blocks when possible. If highly fragmented writes are unavoidable, periodically analyze the internal block structure (e.g., using `bytesparse_obj.to_blocks()`) to understand the overhead. The library is optimized for sparse data, but extreme fragmentation is a general performance consideration for such structures.
Upgrade
Version history
1.1.0latest on PyPI · released Jul 4, 2025
Audit
Dependencies
pythonrequiredRequired runtime environment.
Agent activity
23 hits · last 30 days
node
18
Amazon
1
OpenAI (training)
1
Resources
bytesparse — pip install bytesparse · libregistry