Library to handle sparse bytes within a virtual memory space
Project description
docs |
|
---|---|
tests |
|
package |
Library to handle sparse bytes within a virtual memory space.
Free software: BSD 2-Clause License
Objectives
This library aims to provide utilities to work with a virtual memory, which consists of a virtual addressing space where sparse chunks of data can be stored.
In order to be easy to use, its interface should be close to that of a bytearray, which is the closest pythonic way to store dynamic data. The main downside of a bytearray is that it requires a contiguous data allocation starting from address 0. This is not good when sparse data have to be stored, such as when emulating the addressing space of a generic microcontroller.
The main idea is to provide a bytearray-like class with the possibility to internally hold the sparse blocks of data. A block is ideally a tuple (start, data) where start is the start address and data is the container of data items (e.g. bytearray). The length of the block is len(data). Those blocks are usually not overlapping nor contiguous, and sorted by start address.
Python implementation
This library is the Cython complement to the Python implementation provided by the bytesparse Python package. Please refer to its own documentation for more details.
The bytesparse package provides the following virtual memory types:
bytesparse.Memory, a generic virtual memory with infinite address range.
bytesparse.bytesparse, a subclass behaving more like bytearray.
All the implementations inherit the behavior of collections.abc.MutableSequence and collections.abc.MutableMapping. Please refer to the collections.abc reference manual for more information about the interface API methods and capabilities.
Cython implementation
The library provides an experimental Cython implementation. It tries to mimic the same algorithms of the Python implementation, while exploiting the speedup of compiled C code.
Beware that the Cython implementation is meant to be potentially faster than the pure Python one, but there might be even faster ad-hoc implementations of virtual memory highly optimized for the underlying hardware.
The addressing space is limited to that of an uint_fast64_t, so it is not possible to have an infinite addressing space, nor negative addresses. To keep the implementation code simple enough, the highest address (i.e. 0xFFFFFFFFFFFFFFFF) is reserved.
Block data chunks cannot be greater than the maximum ssize_t value (typically half of the addressing space).
The Cython implementation is optional, and potentially useful only when the Python implementation seems too slow for the user’s algorithms, within the limits stated above.
If in doubt about using the Cython implementation, just stick with the Python one, which is much easier to integrate and debug.
More details can be found within cbytesparse.c.
Examples
Here’s a quick usage example of bytesparse objects:
>>> from cbytesparse import Memory >>> from cbytesparse import bytesparse >>> # ---------------------------------------------------------------- >>> m = bytesparse(b'Hello, World!') # creates from bytes >>> len(m) # total length 13 >>> str(m) # string representation, with bounds and data blocks "<[[0, b'Hello, World!']]>" >>> bytes(m) # exports as bytes b'Hello, World!' >>> m.to_bytes() # exports the whole range as bytes b'Hello, World!' >>> # ---------------------------------------------------------------- >>> m.extend(b'!!') # more emphasis!!! >>> bytes(m) b'Hello, World!!!' >>> # ---------------------------------------------------------------- >>> i = m.index(b',') # gets the address of the comma >>> m[:i] = b'Ciao' # replaces 'Hello' with 'Ciao' >>> bytes(m) b'Ciao, World!!!' >>> # ---------------------------------------------------------------- >>> i = m.index(b',') # gets the address of the comma >>> m.insert(i, b'ne') # inserts 'ne' to make 'Ciaone' ("big ciao") >>> bytes(m) b'Ciaone, World!!!' >>> # ---------------------------------------------------------------- >>> i = m.index(b',') # gets the address of the comma >>> m[(i - 2):i] = b' ciao' # makes 'Ciaone' --> 'Ciao ciao' >>> bytes(m) b'Ciao ciao, World!!!' >>> # ---------------------------------------------------------------- >>> m.pop() # less emphasis --> 33 == ord('!') 33 >>> bytes(m) b'Ciao ciao, World!!' >>> # ---------------------------------------------------------------- >>> del m[m.index(b'l')] # makes 'World' --> 'Word' >>> bytes(m) b'Ciao ciao, Word!!' >>> # ---------------------------------------------------------------- >>> m.popitem() # less emphasis --> pops 33 (== '!') at address 16 (16, 33) >>> bytes(m) b'Ciao ciao, Word!' >>> # ---------------------------------------------------------------- >>> m.remove(b' ciao') # self-explanatory >>> bytes(m) b'Ciao, Word!' >>> # ---------------------------------------------------------------- >>> i = m.index(b',') # gets the address of the comma >>> m.clear(start=i, endex=(i + 2)) # makes empty space between the words >>> m.to_blocks() # exports as data block list [[0, b'Ciao'], [6, b'Word!']] >>> m.contiguous # multiple data blocks (emptiness inbetween) False >>> m.content_parts # two data blocks 2 >>> m.content_size # excluding emptiness 9 >>> len(m) # including emptiness 11 >>> # ---------------------------------------------------------------- >>> m.flood(pattern=b'.') # replaces emptiness with dots >>> bytes(m) b'Ciao..Word!' >>> m[-2] # 100 == ord('d') 100 >>> # ---------------------------------------------------------------- >>> m.peek(-2) # 100 == ord('d') 100 >>> m.poke(-2, b'k') # makes 'Word' --> 'Work' >>> bytes(m) b'Ciao..Work!' >>> # ---------------------------------------------------------------- >>> m.crop(start=m.index(b'W')) # keeps 'Work!' >>> m.to_blocks() [[6, b'Work!']] >>> m.span # address range of the whole memory (6, 11) >>> m.start, m.endex # same as above (6, 11) >>> # ---------------------------------------------------------------- >>> m.bound_span = (2, 10) # sets memory address bounds >>> str(m) "<2, [[6, b'Work']], 10>" >>> m.to_blocks() [[6, b'Work']] >>> # ---------------------------------------------------------------- >>> m.shift(-6) # shifts to the left; NOTE: address bounds will cut 2 bytes! >>> m.to_blocks() [[2, b'rk']] >>> str(m) "<2, [[2, b'rk']], 10>" >>> # ---------------------------------------------------------------- >>> a = bytesparse(b'Ma') >>> a.write(0, m) # writes [2, b'rk'] --> 'Mark' >>> a.to_blocks() [[0, b'Mark']] >>> # ---------------------------------------------------------------- >>> b = Memory.from_bytes(b'ing', offset=4) >>> b.to_blocks() [[4, b'ing']] >>> # ---------------------------------------------------------------- >>> a.write(0, b) # writes [4, b'ing'] --> 'Marking' >>> a.to_blocks() [[0, b'Marking']] >>> # ---------------------------------------------------------------- >>> a.reserve(4, 2) # inserts 2 empty bytes after 'Mark' >>> a.to_blocks() [[0, b'Mark'], [6, b'ing']] >>> # ---------------------------------------------------------------- >>> a.write(4, b'et') # --> 'Marketing' >>> a.to_blocks() [[0, b'Marketing']] >>> # ---------------------------------------------------------------- >>> a.fill(1, -1, b'*') # fills asterisks between the first and last letters >>> a.to_blocks() [[0, b'M*******g']] >>> # ---------------------------------------------------------------- >>> v = a.view(1, -1) # creates a memory view spanning the asterisks >>> v[::2] = b'1234' # replaces even asterisks with numbers >>> a.to_blocks() [[0, b'M1*2*3*4g']] >>> a.count(b'*') # counts all the asterisks 3 >>> v.release() # release memory view >>> # ---------------------------------------------------------------- >>> c = a.copy() # creates a (deep) copy >>> c == a True >>> c is a False >>> # ---------------------------------------------------------------- >>> del a[a.index(b'*')::2] # deletes every other byte from the first asterisk >>> a.to_blocks() [[0, b'M1234']] >>> # ---------------------------------------------------------------- >>> a.shift(3) # moves away from the trivial 0 index >>> a.to_blocks() [[3, b'M1234']] >>> list(a.keys()) [3, 4, 5, 6, 7] >>> list(a.values()) [77, 49, 50, 51, 52] >>> list(a.items()) [(3, 77), (4, 49), (5, 50), (6, 51), (7, 52)] >>> # ---------------------------------------------------------------- >>> c.to_blocks() # reminder [[0, b'M1*2*3*4g']] >>> c[2::2] = None # clears (empties) every other byte from the first asterisk >>> c.to_blocks() [[0, b'M1'], [3, b'2'], [5, b'3'], [7, b'4']] >>> list(c.intervals()) # lists all the block ranges [(0, 2), (3, 4), (5, 6), (7, 8)] >>> list(c.gaps()) # lists all the empty ranges [(None, 0), (2, 3), (4, 5), (6, 7), (8, None)] >>> # ---------------------------------------------------------------- >>> c.flood(pattern=b'xy') # fills empty spaces >>> c.to_blocks() [[0, b'M1x2x3x4']] >>> # ---------------------------------------------------------------- >>> t = c.cut(c.index(b'1'), c.index(b'3')) # cuts an inner slice >>> t.to_blocks() [[1, b'1x2x']] >>> c.to_blocks() [[0, b'M'], [5, b'3x4']] >>> t.bound_span # address bounds of the slice (automatically activated) (1, 5) >>> # ---------------------------------------------------------------- >>> k = bytesparse.from_blocks([[4, b'ABC'], [9, b'xy']], start=2, endex=15) # bounded >>> str(k) # shows summary "<2, [[4, b'ABC'], [9, b'xy']], 15>" >>> k.bound_span # defined at creation (2, 15) >>> k.span # superseded by bounds (2, 15) >>> k.content_span # actual content span (min/max addresses) (4, 11) >>> len(k) # superseded by bounds 13 >>> k.content_size # actual content size 5 >>> # ---------------------------------------------------------------- >>> k.flood(pattern=b'.') # floods between span >>> k.to_blocks() [[2, b'..ABC..xy....']]
Documentation
For the full documentation, please refer to:
Installation
From PyPI (might not be the latest version found on github):
$ pip install cbytesparse
From the source code root directory:
$ pip install .
Development
To run the all the tests:
$ pip install tox
$ tox
To regenerate the Cython files manually, run the following commands:
$ python scripts/cython_build_src.py
$ python scripts/cython_build_tests.py
or alternatively:
$ tox -e cythonize
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file cbytesparse-0.0.6.tar.gz
.
File metadata
- Download URL: cbytesparse-0.0.6.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a27bad3908681ab53c4b47057b0f5fa0bb145f3246de9f4c5f91c026363a0950 |
|
MD5 | 703a27c36484763ae21229aa494b64c3 |
|
BLAKE2b-256 | 064c592594fde7e408e82acbf2543bc7a9cec874d83c658796ad12ede67696a6 |
File details
Details for the file cbytesparse-0.0.6-cp311-cp311-win_amd64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a1521c80d0f9beb28b3c933494b0824d39d65437f1c682278f13a182256f3fe3 |
|
MD5 | ac2a69764031d62e4ebfc174645a306f |
|
BLAKE2b-256 | aee88cd37067c73e02bb797aeeb139c6010c4d62161a946a9c9fe6c2ff080650 |
File details
Details for the file cbytesparse-0.0.6-cp311-cp311-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp311-cp311-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.11, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9b17b62c359238dd8b8e562dee36a0fa7f9056e79ec6b319f78a5e99db27d11 |
|
MD5 | a0f73293747293d202cfd163564a0c7e |
|
BLAKE2b-256 | 092faff595e450e04c0ab8a7f59de3564ced49948339e6fa54cb8378640cded1 |
File details
Details for the file cbytesparse-0.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.7 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ebd728bdd2c38b91b8281a373e7a339eb2b5c96ebde2d81c62fc202361e04ac0 |
|
MD5 | 3cc4745982baefcefaf4c0d57adb7a04 |
|
BLAKE2b-256 | 02aabec2fa3ed179ab873a72217ffd66bd10b3273143c941ed8a6491e9dd5ac0 |
File details
Details for the file cbytesparse-0.0.6-cp311-cp311-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8f4ad5f91bc69e1636b6a691269f0d8e9f767bf36acd629eb6ddcd5ac0a3aa46 |
|
MD5 | f1aeaf8139718424e5a6966bcecdc5d7 |
|
BLAKE2b-256 | 5c63b06f07b036a702f8abac9bb380b72511277a2d231b53149680c7f697361f |
File details
Details for the file cbytesparse-0.0.6-cp310-cp310-win_amd64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1355a5b917ea5e1ba1099e328d1ba2ee41645ccdfdb5bf569a51f4a7058d121d |
|
MD5 | 7747e5260a200f12d134cc582e4e1fb3 |
|
BLAKE2b-256 | 4e2695165484d99d34a95cef662c8ea10cfab41add39cf3049eaa4d509ea24a2 |
File details
Details for the file cbytesparse-0.0.6-cp310-cp310-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp310-cp310-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1382948da797d19e8158cdd39dfbcfd1f573f6fb7e89e36c18867cee0f95ee8c |
|
MD5 | 4a4b2ec80b46011bdbaa9153b01360a2 |
|
BLAKE2b-256 | 4ec57b6c0590b4e5a4c3ac7526008ed212dba4663aae97275cd99c9bb5af862f |
File details
Details for the file cbytesparse-0.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1840f9212ec48ed3cd5596442f8255906329365652cb0dcf9b498883e93def0 |
|
MD5 | fd1230bd44e8ac4214c0e10ee156f686 |
|
BLAKE2b-256 | 3abac616bf3649cab7be0ba94fbed2040d91caee70c9dec5a068be51f5cdd0b7 |
File details
Details for the file cbytesparse-0.0.6-cp310-cp310-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4bf69dd17bd7ca11a154aa5397562baa795fc2342ef25a05c89fe4e99b3bb25b |
|
MD5 | a7d724c10235cd33296330abc3f0150c |
|
BLAKE2b-256 | cc5b991ece4de033bfd8b311dfac49ba37b102503e4edaa259108c0a9cdd37e6 |
File details
Details for the file cbytesparse-0.0.6-cp39-cp39-win_amd64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 78b4f2fdb512eb3e84cdd06c773a581404d5d8a36cb6cca1263f6cfe0469ef4c |
|
MD5 | bff4d656e0413b03b87d7832c0431505 |
|
BLAKE2b-256 | b274f3c61789f0726f9d226e19b643ca592696a40cb05bdb4cad3e5cc937d5fb |
File details
Details for the file cbytesparse-0.0.6-cp39-cp39-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp39-cp39-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 66f31a47dc947f4858f4032e0bdee6c2855448df999acaad717df6a51caeb5d6 |
|
MD5 | 90825f45e93bef4631b09900e0efd13e |
|
BLAKE2b-256 | e02abbfde3c7b315de6b9c861f15d7ce07d9f17c9506924faa49263827968008 |
File details
Details for the file cbytesparse-0.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 28f2e1966288c2f5bc28bac93ff88eede26d83aa52c2d16261c637aefd45d7bb |
|
MD5 | 91fce67c98b7431988280c82644270f3 |
|
BLAKE2b-256 | ca405ba90b32705c1bd4fe6cf4c1954884e832331e6f7bdf388d237c19bc2d1a |
File details
Details for the file cbytesparse-0.0.6-cp39-cp39-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0bb07d98499e3452f2ecef063c3a3ce007a2737639664579f5df67dfa6fd07d3 |
|
MD5 | 207abae8650f98adb3f3f14ef84df86f |
|
BLAKE2b-256 | 5cdfb20c2a68cb58ebc05cd2a234d616d9dea8ce0827ec50b5dd405f16944d6b |
File details
Details for the file cbytesparse-0.0.6-cp38-cp38-win_amd64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8648cd86a8eb631ceca55cfd02db2aa63ccaa5de0336fa7e2dc48c149dedcf4f |
|
MD5 | 8c87514c0b878f5b6ff47bb421bc04aa |
|
BLAKE2b-256 | 8a616e4c59d9a7beb3f9ee33be3cc9878452173cc06f60fbfddc616e0e46e50c |
File details
Details for the file cbytesparse-0.0.6-cp38-cp38-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp38-cp38-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 3.7 MB
- Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8cc30346e8d50d0bd31fb489e60dec26c683a8ce8f47949940c3145816e2468f |
|
MD5 | 046129c8166ed239d324e163fe7d4945 |
|
BLAKE2b-256 | 2f597d34944ef45212498eece8a31d15de1091fae2991abed71709e0c71225b5 |
File details
Details for the file cbytesparse-0.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73ff43c04681d482a6e65b58b3afb742728c2d1d9e0effc67468e6fd3f6591c0 |
|
MD5 | cc82adcd98a8abaa80f59b58ff435803 |
|
BLAKE2b-256 | 60caa1dfb295e86a2a684185cb6114340a5587876b62c2cc715bf07c3ed05610 |
File details
Details for the file cbytesparse-0.0.6-cp38-cp38-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp38-cp38-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.8, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 226d00c965d484a2113fd87d5233035f5cf6834b518ab9c4214ef67dca8e683a |
|
MD5 | 8f3bf3819f267ecaaf9aef123bc2ea50 |
|
BLAKE2b-256 | 47715313b6d430fef324f84aca27e34d7e89374a2c26ed917ff4168840293fe7 |
File details
Details for the file cbytesparse-0.0.6-cp37-cp37m-win_amd64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp37-cp37m-win_amd64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.7m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5241eb2748edac79f631f9c0f59cde34ba516f8a45be695ededac3491d3ad899 |
|
MD5 | c262a3d837fd29318e149ac88efb96e0 |
|
BLAKE2b-256 | f1e79eefa3bc105c4e632a23d6fcc9e569a6a6d220843d0c32f4b830574830a3 |
File details
Details for the file cbytesparse-0.0.6-cp37-cp37m-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp37-cp37m-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e4c3cb7a7b619ffd2d7f10fa4499424a21390927b36cb3a54d8d4c451c49df62 |
|
MD5 | 879819a66d63bb66ebdaaa028ab5b9e9 |
|
BLAKE2b-256 | 361bef46f9137d1e8d77d4ae184e1c74139a82bf7e46a2cea34ccf774bbaf1f0 |
File details
Details for the file cbytesparse-0.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.3 MB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f1c0766b82df479f8cc9055515c4312a73f51aea1bfb5f25d0074d8e9be877ee |
|
MD5 | 8213933c7fe6d6c4a1801ba157428db1 |
|
BLAKE2b-256 | 7794446bc28d3c67ed13d367fae7776143796471036c1a8d5c7940dbeab72028 |
File details
Details for the file cbytesparse-0.0.6-cp37-cp37m-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cbytesparse-0.0.6-cp37-cp37m-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.7m, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d4c658b0799c6e356488d517b5792ebb986a2747b49dea4c1acf2654c7bb337 |
|
MD5 | 90421b32b68b97e9514455dcf9ab9411 |
|
BLAKE2b-256 | 401aa794fa681ca888990c5fdb3c081d9633b11b533f13abeeb82626e5845179 |