Spaces:
Running
Running
# Copyright (c) 2008 - 2022, Ilan Schnell; All Rights Reserved | |
""" | |
This package defines an object type which can efficiently represent | |
a bitarray. Bitarrays are sequence types and behave very much like lists. | |
Please find a description of this package at: | |
https://github.com/ilanschnell/bitarray | |
Author: Ilan Schnell | |
""" | |
from __future__ import absolute_import | |
from bitarray._bitarray import (bitarray, decodetree, _sysinfo, | |
get_default_endian, _set_default_endian, | |
__version__) | |
__all__ = ['bitarray', 'frozenbitarray', 'decodetree', 'bits2bytes'] | |
class frozenbitarray(bitarray): | |
"""frozenbitarray(initializer=0, /, endian='big', buffer=None) -> \ | |
frozenbitarray | |
Return a frozenbitarray object, which is initialized the same way a bitarray | |
object is initialized. A frozenbitarray is immutable and hashable. | |
Its contents cannot be altered after it is created; however, it can be used | |
as a dictionary key. | |
""" | |
def __init__(self, *args, **kwargs): | |
self._freeze() | |
def __repr__(self): | |
return 'frozen' + bitarray.__repr__(self) | |
def __hash__(self): | |
"Return hash(self)." | |
if getattr(self, '_hash', None) is None: | |
# ensure hash is independent of endianness, also the copy will be | |
# mutable such that .tobytes() can zero out the pad bits | |
a = bitarray(self, 'big') | |
self._hash = hash((len(a), a.tobytes())) | |
return self._hash | |
# Technically the code below is not necessary, as all these methods will | |
# raise a TypeError on read-only memory. However, with a different error | |
# message. | |
def __delitem__(self, *args, **kwargs): | |
"" # no docstring | |
raise TypeError("frozenbitarray is immutable") | |
append = bytereverse = clear = extend = encode = fill = __delitem__ | |
frombytes = fromfile = insert = invert = pack = pop = __delitem__ | |
remove = reverse = setall = sort = __setitem__ = __delitem__ | |
__iadd__ = __iand__ = __imul__ = __ior__ = __ixor__ = __delitem__ | |
__ilshift__ = __irshift__ = __delitem__ | |
def bits2bytes(__n): | |
"""bits2bytes(n, /) -> int | |
Return the number of bytes necessary to store n bits. | |
""" | |
import sys | |
if not isinstance(__n, (int, long) if sys.version_info[0] == 2 else int): | |
raise TypeError("integer expected") | |
if __n < 0: | |
raise ValueError("non-negative integer expected") | |
return (__n + 7) // 8 | |
def test(verbosity=1, repeat=1): | |
"""test(verbosity=1, repeat=1) -> TextTestResult | |
Run self-test, and return unittest.runner.TextTestResult object. | |
""" | |
from bitarray import test_bitarray | |
return test_bitarray.run(verbosity=verbosity, repeat=repeat) | |