| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- # Copyright (c) 2008 - 2025, 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 collections import namedtuple
- from bitarray._bitarray import (
- bitarray, decodetree, bits2bytes, _bitarray_reconstructor,
- get_default_endian, _set_default_endian, _sysinfo,
- BITARRAY_VERSION as __version__
- )
- __all__ = ['bitarray', 'frozenbitarray', 'decodetree', 'bits2bytes']
- BufferInfo = namedtuple('BufferInfo',
- ['address', 'nbytes', 'endian', 'padbits',
- 'alloc', 'readonly', 'imported', 'exports'])
- class frozenbitarray(bitarray):
- """frozenbitarray(initializer=0, /, endian='big', buffer=None) -> \
- frozenbitarray
- Return a `frozenbitarray` object. Initialized the same way a `bitarray`
- object is initialized. A `frozenbitarray` is immutable and hashable,
- and may therefore 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)."
- # ensure hash is independent of endianness
- a = bitarray(self, 'big')
- return hash((len(a), a.tobytes()))
- # 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 test(verbosity=1):
- """test(verbosity=1) -> TextTestResult
- Run self-test, and return `unittest.runner.TextTestResult` object.
- """
- from bitarray import test_bitarray
- return test_bitarray.run(verbosity=verbosity)
|