blob: 6a97795d7d0881d88ad08059ba8fbcc1951182e7 [file] [log] [blame]
"""
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:
http://pypi.python.org/pypi/bitarray/
Author: Ilan Schnell
"""
from bitarray._bitarray import _bitarray, bitdiff, bits2bytes, _sysinfo
__version__ = '0.9.0'
def _check_codedict(codedict):
if not isinstance(codedict, dict):
raise TypeError("dictionary expected")
if len(codedict) == 0:
raise ValueError("prefix code empty")
for k, v in codedict.items():
if not isinstance(v, bitarray):
raise TypeError("bitarray expected for dictionary value")
if v.length() == 0:
raise ValueError("non-empty bitarray expected")
class bitarray(_bitarray):
"""bitarray([initial], [endian=string])
Return a new bitarray object whose items are bits initialized from
the optional initial, and endianness.
If no object is provided, the bitarray is initialized to have length zero.
The initial object may be of the following types:
int, long
Create bitarray of length given by the integer. The initial values
in the array are random, because only the memory allocated.
string
Create bitarray from a string of '0's and '1's.
list, tuple, iterable
Create bitarray from a sequence, each element in the sequence is
converted to a bit using truth value value.
bitarray
Create bitarray from another bitarray. This is done by copying the
memory holding the bitarray data, and is hence very fast.
The optional keyword arguments 'endian' specifies the bit endianness of the
created bitarray object.
Allowed values are 'big' and 'little' (default is 'big').
Note that setting the bit endianness only has an effect when accessing the
machine representation of the bitarray, i.e. when using the methods: tofile,
fromfile, tobytes, frombytes."""
def fromstring(self, string):
"""fromstring(string)
Append from a string, interpreting the string as machine values.
Deprecated since version 0.4.0, use ``frombytes()`` instead."""
return self.frombytes(string.encode())
def tostring(self):
"""tostring() -> string
Return the string representing (machine values) of the bitarray.
When the length of the bitarray is not a multiple of 8, the few remaining
bits (1..7) are set to 0.
Deprecated since version 0.4.0, use ``tobytes()`` instead."""
return self.tobytes().decode()
def decode(self, codedict):
"""decode(code) -> list
Given a prefix code (a dict mapping symbols to bitarrays),
decode the content of the bitarray and return the list of symbols."""
_check_codedict(codedict)
return self._decode(codedict)
def iterdecode(self, codedict):
"""iterdecode(code) -> iterator
Given a prefix code (a dict mapping symbols to bitarrays),
decode the content of the bitarray and iterate over the symbols."""
_check_codedict(codedict)
return self._iterdecode(codedict)
def encode(self, codedict, iterable):
"""encode(code, iterable)
Given a prefix code (a dict mapping symbols to bitarrays),
iterate over the iterable object with symbols, and extend the bitarray
with the corresponding bitarray for each symbols."""
_check_codedict(codedict)
self._encode(codedict, iterable)
def __int__(self):
raise TypeError("int() argument cannot be a bitarray")
def __long__(self):
raise TypeError("long() argument cannot be a bitarray")
def __float__(self):
raise TypeError("float() argument cannot be a bitarray")
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)