| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991 |
- Metadata-Version: 2.4
- Name: bitarray
- Version: 3.7.2
- Summary: efficient arrays of booleans -- C extension
- Home-page: https://github.com/ilanschnell/bitarray
- Author: Ilan Schnell
- Author-email: ilanschnell@gmail.com
- License: PSF-2.0
- Classifier: Development Status :: 6 - Mature
- Classifier: Intended Audience :: Developers
- Classifier: Operating System :: OS Independent
- Classifier: Programming Language :: C
- Classifier: Programming Language :: Python :: 3
- Classifier: Programming Language :: Python :: 3.6
- Classifier: Programming Language :: Python :: 3.7
- Classifier: Programming Language :: Python :: 3.8
- Classifier: Programming Language :: Python :: 3.9
- Classifier: Programming Language :: Python :: 3.10
- Classifier: Programming Language :: Python :: 3.11
- Classifier: Programming Language :: Python :: 3.12
- Classifier: Programming Language :: Python :: 3.13
- Classifier: Programming Language :: Python :: 3.14
- Classifier: Topic :: Utilities
- License-File: LICENSE
- Dynamic: author
- Dynamic: author-email
- Dynamic: classifier
- Dynamic: description
- Dynamic: home-page
- Dynamic: license
- Dynamic: license-file
- Dynamic: summary
- bitarray: efficient arrays of booleans
- ======================================
- This library provides an object type which efficiently represents an array
- of booleans. Bitarrays are sequence types and behave very much like usual
- lists. Eight bits are represented by one byte in a contiguous block of
- memory. The user can select between two representations: little-endian
- and big-endian. All functionality is implemented in C.
- Methods for accessing the machine representation are provided, including the
- ability to import and export buffers. This allows creating bitarrays that
- are mapped to other objects, including memory-mapped files.
- Key features
- ------------
- * The bit-endianness can be specified for each bitarray object, see below.
- * Sequence methods: slicing (including slice assignment and deletion),
- operations ``+``, ``*``, ``+=``, ``*=``, the ``in`` operator, ``len()``
- * Bitwise operations: ``~``, ``&``, ``|``, ``^``, ``<<``, ``>>`` (as well as
- their in-place versions ``&=``, ``|=``, ``^=``, ``<<=``, ``>>=``).
- * Fast methods for encoding and decoding variable bit length prefix codes.
- * Bitarray objects support the buffer protocol (both importing and
- exporting buffers).
- * Packing and unpacking to other binary data formats, e.g. ``numpy.ndarray``.
- * Pickling and unpickling of bitarray objects.
- * Immutable ``frozenbitarray`` objects which are hashable
- * Sequential search
- * Type hinting
- * Extensive test suite with about 600 unittests
- * Utility module ``bitarray.util``:
- * conversion to and from hexadecimal strings
- * generating random bitarrays
- * pretty printing
- * conversion to and from integers
- * creating Huffman codes
- * compression of sparse bitarrays
- * (de-) serialization
- * various count functions
- * other helpful functions
- Installation
- ------------
- Python wheels are are available on PyPI for all major platforms and Python
- versions. Which means you can simply:
- .. code-block:: shell-session
- $ pip install bitarray
- Once you have installed the package, you may want to test it:
- .. code-block:: shell-session
- $ python -c 'import bitarray; bitarray.test()'
- bitarray is installed in: /Users/ilan/bitarray/bitarray
- bitarray version: 3.7.2
- sys.version: 3.13.5 (main, Jun 16 2025) [Clang 18.1.8]
- sys.prefix: /Users/ilan/miniforge
- pointer size: 64 bit
- sizeof(size_t): 8
- sizeof(bitarrayobject): 80
- HAVE_BUILTIN_BSWAP64: 1
- default bit-endianness: big
- machine byte-order: little
- Py_DEBUG: 0
- DEBUG: 0
- .........................................................................
- .........................................................................
- ................................................................
- ----------------------------------------------------------------------
- Ran 597 tests in 0.165s
- OK
- The ``test()`` function is part of the API. It will return
- a ``unittest.runner.TextTestResult`` object, such that one can verify that
- all tests ran successfully by:
- .. code-block:: python
- import bitarray
- assert bitarray.test().wasSuccessful()
- Usage
- -----
- As mentioned above, bitarray objects behave very much like lists, so
- there is not too much to learn. The biggest difference from list
- objects (except that bitarray are obviously homogeneous) is the ability
- to access the machine representation of the object.
- When doing so, the bit-endianness is of importance; this issue is
- explained in detail in the section below. Here, we demonstrate the
- basic usage of bitarray objects:
- .. code-block:: python
- >>> from bitarray import bitarray
- >>> a = bitarray() # create empty bitarray
- >>> a.append(1)
- >>> a.extend([1, 0])
- >>> a
- bitarray('110')
- >>> x = bitarray(2 ** 20) # bitarray of length 1048576 (initialized to 0)
- >>> len(x)
- 1048576
- >>> bitarray('1001 011') # initialize from string (whitespace is ignored)
- bitarray('1001011')
- >>> lst = [1, 0, False, True, True]
- >>> a = bitarray(lst) # initialize from iterable
- >>> a
- bitarray('10011')
- >>> a[2] # indexing a single item will always return an integer
- 0
- >>> a[2:4] # whereas indexing a slice will always return a bitarray
- bitarray('01')
- >>> a[2:3] # even when the slice length is just one
- bitarray('0')
- >>> a.count(1)
- 3
- >>> a.remove(0) # removes first occurrence of 0
- >>> a
- bitarray('1011')
- Like lists, bitarray objects support slice assignment and deletion:
- .. code-block:: python
- >>> a = bitarray(50)
- >>> a.setall(0) # set all elements in a to 0
- >>> a[11:37:3] = 9 * bitarray('1')
- >>> a
- bitarray('00000000000100100100100100100100100100000000000000')
- >>> del a[12::3]
- >>> a
- bitarray('0000000000010101010101010101000000000')
- >>> a[-6:] = bitarray('10011')
- >>> a
- bitarray('000000000001010101010101010100010011')
- >>> a += bitarray('000111')
- >>> a[9:]
- bitarray('001010101010101010100010011000111')
- In addition, slices can be assigned to booleans, which is easier (and
- faster) than assigning to a bitarray in which all values are the same:
- .. code-block:: python
- >>> a = 20 * bitarray('0')
- >>> a[1:15:3] = True
- >>> a
- bitarray('01001001001001000000')
- This is easier and faster than:
- .. code-block:: python
- >>> a = 20 * bitarray('0')
- >>> a[1:15:3] = 5 * bitarray('1')
- >>> a
- bitarray('01001001001001000000')
- Note that in the latter we have to create a temporary bitarray whose length
- must be known or calculated. Another example of assigning slices to Booleans,
- is setting ranges:
- .. code-block:: python
- >>> a = bitarray(30)
- >>> a[:] = 0 # set all elements to 0 - equivalent to a.setall(0)
- >>> a[10:25] = 1 # set elements in range(10, 25) to 1
- >>> a
- bitarray('000000000011111111111111100000')
- As of bitarray version 2.8, indices may also be lists of arbitrary
- indices (like in NumPy), or bitarrays that are treated as masks,
- see `Bitarray indexing <https://github.com/ilanschnell/bitarray/blob/master/doc/indexing.rst>`__.
- Bitwise operators
- -----------------
- Bitarray objects support the bitwise operators ``~``, ``&``, ``|``, ``^``,
- ``<<``, ``>>`` (as well as their in-place versions ``&=``, ``|=``, ``^=``,
- ``<<=``, ``>>=``). The behavior is very much what one would expect:
- .. code-block:: python
- >>> a = bitarray('101110001')
- >>> ~a # invert
- bitarray('010001110')
- >>> b = bitarray('111001011')
- >>> a ^ b # bitwise XOR
- bitarray('010111010')
- >>> a &= b # inplace AND
- >>> a
- bitarray('101000001')
- >>> a <<= 2 # in-place left-shift by 2
- >>> a
- bitarray('100000100')
- >>> b >> 1 # return b right-shifted by 1
- bitarray('011100101')
- The C language does not specify the behavior of negative shifts and
- of left shifts larger or equal than the width of the promoted left operand.
- The exact behavior is compiler/machine specific.
- This Python bitarray library specifies the behavior as follows:
- * the length of the bitarray is never changed by any shift operation
- * blanks are filled by 0
- * negative shifts raise ``ValueError``
- * shifts larger or equal to the length of the bitarray result in
- bitarrays with all values 0
- It is worth noting that (regardless of bit-endianness) the bitarray left
- shift (``<<``) always shifts towards lower indices, and the right
- shift (``>>``) always shifts towards higher indices.
- Bit-endianness
- --------------
- For many purposes the bit-endianness is not of any relevance to the end user
- and can be regarded as an implementation detail of bitarray objects.
- However, there are use cases when the bit-endianness becomes important.
- These use cases involve explicitly reading and writing the bitarray buffer
- using ``.tobytes()``, ``.frombytes()``, ``.tofile()`` or ``.fromfile()``,
- importing and exporting buffers. Also, a number of utility functions
- in ``bitarray.util`` will return different results depending on
- bit-endianness, such as ``ba2hex()`` or ``ba2int``.
- To better understand this topic, please read `bit-endianness <https://github.com/ilanschnell/bitarray/blob/master/doc/endianness.rst>`__.
- Buffer protocol
- ---------------
- Bitarray objects support the buffer protocol. They can both export their
- own buffer, as well as import another object's buffer. To learn more about
- this topic, please read `buffer protocol <https://github.com/ilanschnell/bitarray/blob/master/doc/buffer.rst>`__. There is also an example that shows how
- to memory-map a file to a bitarray: `mmapped-file.py <https://github.com/ilanschnell/bitarray/blob/master/examples/mmapped-file.py>`__
- Variable bit length prefix codes
- --------------------------------
- The ``.encode()`` method takes a dictionary mapping symbols to bitarrays
- and an iterable, and extends the bitarray object with the encoded symbols
- found while iterating. For example:
- .. code-block:: python
- >>> d = {'H':bitarray('111'), 'e':bitarray('0'),
- ... 'l':bitarray('110'), 'o':bitarray('10')}
- ...
- >>> a = bitarray()
- >>> a.encode(d, 'Hello')
- >>> a
- bitarray('111011011010')
- Note that the string ``'Hello'`` is an iterable, but the symbols are not
- limited to characters, in fact any immutable Python object can be a symbol.
- Taking the same dictionary, we can apply the ``.decode()`` method which will
- return an iterable of the symbols:
- .. code-block:: python
- >>> list(a.decode(d))
- ['H', 'e', 'l', 'l', 'o']
- >>> ''.join(a.decode(d))
- 'Hello'
- Symbols are not limited to being characters.
- The above dictionary ``d`` can be efficiently constructed using the function
- ``bitarray.util.huffman_code()``. I also wrote `Huffman coding in Python
- using bitarray <http://ilan.schnell-web.net/prog/huffman/>`__ for more
- background information.
- When the codes are large, and you have many decode calls, most time will
- be spent creating the (same) internal decode tree objects. In this case,
- it will be much faster to create a ``decodetree`` object, which can be
- passed to bitarray's ``.decode()`` method, instead of passing the prefix
- code dictionary to those methods itself:
- .. code-block:: python
- >>> from bitarray import bitarray, decodetree
- >>> t = decodetree({'a': bitarray('0'), 'b': bitarray('1')})
- >>> a = bitarray('0110')
- >>> list(a.decode(t))
- ['a', 'b', 'b', 'a']
- The sole purpose of the immutable ``decodetree`` object is to be passed
- to bitarray's ``.decode()`` method.
- Frozenbitarrays
- ---------------
- A ``frozenbitarray`` object is very similar to the bitarray object.
- The difference is that this a ``frozenbitarray`` is immutable, and hashable,
- and can therefore be used as a dictionary key:
- .. code-block:: python
- >>> from bitarray import frozenbitarray
- >>> key = frozenbitarray('1100011')
- >>> {key: 'some value'}
- {frozenbitarray('1100011'): 'some value'}
- >>> key[3] = 1
- Traceback (most recent call last):
- ...
- TypeError: frozenbitarray is immutable
- Reference
- =========
- bitarray version: 3.7.2 -- `change log <https://github.com/ilanschnell/bitarray/blob/master/doc/changelog.rst>`__
- In the following, ``item`` and ``value`` are usually a single bit -
- an integer 0 or 1.
- Also, ``sub_bitarray`` refers to either a bitarray, or an ``item``.
- The bitarray object:
- --------------------
- ``bitarray(initializer=0, /, endian='big', buffer=None)`` -> bitarray
- Return a new bitarray object whose items are bits initialized from
- the optional initializer, and bit-endianness.
- The initializer may be one of the following types:
- a.) ``int`` bitarray, initialized to zeros, of given length
- b.) ``bytes`` or ``bytearray`` to initialize buffer directly
- c.) ``str`` of 0s and 1s, ignoring whitespace and "_"
- d.) iterable of integers 0 or 1.
- Optional keyword arguments:
- ``endian``: Specifies the bit-endianness of the created bitarray object.
- Allowed values are ``big`` and ``little`` (the default is ``big``).
- The bit-endianness effects the buffer representation of the bitarray.
- ``buffer``: Any object which exposes a buffer. When provided, ``initializer``
- cannot be present (or has to be ``None``). The imported buffer may be
- read-only or writable, depending on the object type.
- New in version 2.3: optional ``buffer`` argument
- New in version 3.4: allow initializer ``bytes`` or ``bytearray`` to set buffer directly
- bitarray methods:
- -----------------
- ``all()`` -> bool
- Return ``True`` when all bits in bitarray are 1.
- ``a.all()`` is a faster version of ``all(a)``.
- ``any()`` -> bool
- Return ``True`` when any bit in bitarray is 1.
- ``a.any()`` is a faster version of ``any(a)``.
- ``append(item, /)``
- Append ``item`` to the end of the bitarray.
- ``buffer_info()`` -> BufferInfo
- Return named tuple with following fields:
- 0. ``address``: memory address of buffer
- 1. ``nbytes``: buffer size (in bytes)
- 2. ``endian``: bit-endianness as a string
- 3. ``padbits``: number of pad bits
- 4. ``alloc``: allocated memory for buffer (in bytes)
- 5. ``readonly``: memory is read-only (bool)
- 6. ``imported``: buffer is imported (bool)
- 7. ``exports``: number of buffer exports
- New in version 3.7: return named tuple
- ``bytereverse(start=0, stop=<end of buffer>, /)``
- For each byte in byte-range(``start``, ``stop``) reverse bits in-place.
- The start and stop indices are given in terms of bytes (not bits).
- Also note that this method only changes the buffer; it does not change the
- bit-endianness of the bitarray object. Pad bits are left unchanged such
- that two consecutive calls will always leave the bitarray unchanged.
- New in version 2.2.5: optional start and stop arguments
- ``clear()``
- Remove all items from bitarray.
- New in version 1.4
- ``copy()`` -> bitarray
- Return copy of bitarray (with same bit-endianness).
- ``count(value=1, start=0, stop=<end>, step=1, /)`` -> int
- Number of occurrences of ``value`` bitarray within ``[start:stop:step]``.
- Optional arguments ``start``, ``stop`` and ``step`` are interpreted in
- slice notation, meaning ``a.count(value, start, stop, step)`` equals
- ``a[start:stop:step].count(value)``.
- The ``value`` may also be a sub-bitarray. In this case non-overlapping
- occurrences are counted within ``[start:stop]`` (``step`` must be 1).
- New in version 1.1.0: optional start and stop arguments
- New in version 2.3.7: optional step argument
- New in version 2.9: add non-overlapping sub-bitarray count
- ``decode(code, /)`` -> iterator
- Given a prefix code (a dict mapping symbols to bitarrays, or ``decodetree``
- object), decode content of bitarray and return an iterator over
- corresponding symbols.
- See also: `Bitarray 3 transition <https://github.com/ilanschnell/bitarray/blob/master/doc/bitarray3.rst>`__
- New in version 3.0: returns iterator (equivalent to past ``.iterdecode()``)
- ``encode(code, iterable, /)``
- Given a prefix code (a dict mapping symbols to bitarrays),
- iterate over the iterable object with symbols, and extend bitarray
- with corresponding bitarray for each symbol.
- ``extend(iterable, /)``
- Append items from to the end of the bitarray.
- If ``iterable`` is a (Unicode) string, each ``0`` and ``1`` are appended as
- bits (ignoring whitespace and underscore).
- New in version 3.4: allow ``bytes`` object
- ``fill()`` -> int
- Add zeros to the end of the bitarray, such that the length will be
- a multiple of 8, and return the number of bits added [0..7].
- ``find(sub_bitarray, start=0, stop=<end>, /, right=False)`` -> int
- Return lowest (or rightmost when ``right=True``) index where sub_bitarray
- is found, such that sub_bitarray is contained within ``[start:stop]``.
- Return -1 when sub_bitarray is not found.
- New in version 2.1
- New in version 2.9: add optional keyword argument ``right``
- ``frombytes(bytes, /)``
- Extend bitarray with raw bytes from a bytes-like object.
- Each added byte will add eight bits to the bitarray.
- New in version 2.5.0: allow bytes-like argument
- ``fromfile(f, n=-1, /)``
- Extend bitarray with up to ``n`` bytes read from file object ``f`` (or any
- other binary stream what supports a ``.read()`` method, e.g. ``io.BytesIO``).
- Each read byte will add eight bits to the bitarray. When ``n`` is omitted
- or negative, reads and extends all data until EOF.
- When ``n`` is non-negative but exceeds the available data, ``EOFError`` is
- raised. However, the available data is still read and extended.
- ``index(sub_bitarray, start=0, stop=<end>, /, right=False)`` -> int
- Return lowest (or rightmost when ``right=True``) index where sub_bitarray
- is found, such that sub_bitarray is contained within ``[start:stop]``.
- Raises ``ValueError`` when sub_bitarray is not present.
- New in version 2.9: add optional keyword argument ``right``
- ``insert(index, value, /)``
- Insert ``value`` into bitarray before ``index``.
- ``invert(index=<all bits>, /)``
- Invert all bits in bitarray (in-place).
- When the optional ``index`` is given, only invert the single bit at ``index``.
- New in version 1.5.3: optional index argument
- ``pack(bytes, /)``
- Extend bitarray from a bytes-like object, where each byte corresponds
- to a single bit. The byte ``b'\x00'`` maps to bit 0 and all other bytes
- map to bit 1.
- This method, as well as the ``.unpack()`` method, are meant for efficient
- transfer of data between bitarray objects to other Python objects (for
- example NumPy's ndarray object) which have a different memory view.
- New in version 2.5.0: allow bytes-like argument
- ``pop(index=-1, /)`` -> item
- Remove and return item at ``index`` (default last).
- Raises ``IndexError`` if index is out of range.
- ``remove(value, /)``
- Remove the first occurrence of ``value``.
- Raises ``ValueError`` if value is not present.
- ``reverse()``
- Reverse all bits in bitarray (in-place).
- ``search(sub_bitarray, start=0, stop=<end>, /, right=False)`` -> iterator
- Return iterator over indices where sub_bitarray is found, such that
- sub_bitarray is contained within ``[start:stop]``.
- The indices are iterated in ascending order (from lowest to highest),
- unless ``right=True``, which will iterate in descending order (starting with
- rightmost match).
- See also: `Bitarray 3 transition <https://github.com/ilanschnell/bitarray/blob/master/doc/bitarray3.rst>`__
- New in version 2.9: optional start and stop arguments - add optional keyword argument ``right``
- New in version 3.0: returns iterator (equivalent to past ``.itersearch()``)
- ``setall(value, /)``
- Set all elements in bitarray to ``value``.
- Note that ``a.setall(value)`` is equivalent to ``a[:] = value``.
- ``sort(reverse=False)``
- Sort all bits in bitarray (in-place).
- ``to01(group=0, sep=' ')`` -> str
- Return bitarray as (Unicode) string of ``0``s and ``1``s.
- The bits are grouped into ``group`` bits (default is no grouping).
- When grouped, the string ``sep`` is inserted between groups
- of ``group`` characters, default is a space.
- New in version 3.3: optional ``group`` and ``sep`` arguments
- ``tobytes()`` -> bytes
- Return the bitarray buffer (pad bits are set to zero).
- ``tofile(f, /)``
- Write bitarray buffer to file object ``f``.
- ``tolist()`` -> list
- Return bitarray as list of integers.
- ``a.tolist()`` equals ``list(a)``.
- Note that the list object being created will require 32 or 64 times more
- memory (depending on the machine architecture) than the bitarray object,
- which may cause a memory error if the bitarray is very large.
- ``unpack(zero=b'\x00', one=b'\x01')`` -> bytes
- Return bytes that contain one byte for each bit in the bitarray,
- using specified mapping.
- bitarray data descriptors:
- --------------------------
- Data descriptors were added in version 2.6.
- ``endian`` -> str
- bit-endianness as Unicode string
- New in version 3.4: replaces former ``.endian()`` method
- ``nbytes`` -> int
- buffer size in bytes
- ``padbits`` -> int
- number of pad bits
- ``readonly`` -> bool
- bool indicating whether buffer is read-only
- Other objects:
- --------------
- ``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.
- New in version 1.1
- ``decodetree(code, /)`` -> decodetree
- Given a prefix code (a dict mapping symbols to bitarrays),
- create a binary tree object to be passed to ``.decode()``.
- New in version 1.6
- Functions defined in the `bitarray` module:
- -------------------------------------------
- ``bits2bytes(n, /)`` -> int
- Return the number of bytes necessary to store n bits.
- ``get_default_endian()`` -> str
- Return the default bit-endianness for new bitarray objects being created.
- Unless ``_set_default_endian('little')`` was called, the default
- bit-endianness is ``big``.
- New in version 1.3
- ``test(verbosity=1)`` -> TextTestResult
- Run self-test, and return ``unittest.runner.TextTestResult`` object.
- Functions defined in `bitarray.util` module:
- --------------------------------------------
- This sub-module was added in version 1.2.
- ``any_and(a, b, /)`` -> bool
- Efficient implementation of ``any(a & b)``.
- New in version 2.7
- ``ba2base(n, bitarray, /, group=0, sep=' ')`` -> str
- Return a string containing the base ``n`` ASCII representation of
- the bitarray. Allowed values for ``n`` are 2, 4, 8, 16, 32 and 64.
- The bitarray has to be multiple of length 1, 2, 3, 4, 5 or 6 respectively.
- For ``n=32`` the RFC 4648 Base32 alphabet is used, and for ``n=64`` the
- standard base 64 alphabet is used.
- When grouped, the string ``sep`` is inserted between groups
- of ``group`` characters, default is a space.
- See also: `Bitarray representations <https://github.com/ilanschnell/bitarray/blob/master/doc/represent.rst>`__
- New in version 1.9
- New in version 3.3: optional ``group`` and ``sep`` arguments
- ``ba2hex(bitarray, /, group=0, sep=' ')`` -> hexstr
- Return a string containing the hexadecimal representation of
- the bitarray (which has to be multiple of 4 in length).
- When grouped, the string ``sep`` is inserted between groups
- of ``group`` characters, default is a space.
- New in version 3.3: optional ``group`` and ``sep`` arguments
- ``ba2int(bitarray, /, signed=False)`` -> int
- Convert the given bitarray to an integer.
- The bit-endianness of the bitarray is respected.
- ``signed`` indicates whether two's complement is used to represent the integer.
- ``base2ba(n, asciistr, /, endian=None)`` -> bitarray
- Bitarray of base ``n`` ASCII representation.
- Allowed values for ``n`` are 2, 4, 8, 16, 32 and 64.
- For ``n=32`` the RFC 4648 Base32 alphabet is used, and for ``n=64`` the
- standard base 64 alphabet is used. Whitespace is ignored.
- See also: `Bitarray representations <https://github.com/ilanschnell/bitarray/blob/master/doc/represent.rst>`__
- New in version 1.9
- New in version 3.3: ignore whitespace
- ``byteswap(a, n=<buffer size>, /)``
- Reverse every ``n`` consecutive bytes of ``a`` in-place.
- By default, all bytes are reversed. Note that ``n`` is not limited to 2, 4
- or 8, but can be any positive integer.
- Also, ``a`` may be any object that exposes a writable buffer.
- Nothing about this function is specific to bitarray objects.
- We should mention that Python's ``array.array`` object has a
- method ``.byteswap()`` with similar functionality. However, unlike
- bitarray's ``util.byteswap()`` function, this method is limited to
- swapping 2, 4, or 8 consecutive bytes.
- New in version 3.4
- ``canonical_decode(bitarray, count, symbol, /)`` -> iterator
- Decode bitarray using canonical Huffman decoding tables
- where ``count`` is a sequence containing the number of symbols of each length
- and ``symbol`` is a sequence of symbols in canonical order.
- See also: `Canonical Huffman Coding <https://github.com/ilanschnell/bitarray/blob/master/doc/canonical.rst>`__
- New in version 2.5
- ``canonical_huffman(dict, /)`` -> tuple
- Given a frequency map, a dictionary mapping symbols to their frequency,
- calculate the canonical Huffman code. Returns a tuple containing:
- 0. the canonical Huffman code as a dict mapping symbols to bitarrays
- 1. a list containing the number of symbols of each code length
- 2. a list of symbols in canonical order
- Note: the two lists may be used as input for ``canonical_decode()``.
- See also: `Canonical Huffman Coding <https://github.com/ilanschnell/bitarray/blob/master/doc/canonical.rst>`__
- New in version 2.5
- ``correspond_all(a, b, /)`` -> tuple
- Return tuple with counts of: ~a & ~b, ~a & b, a & ~b, a & b
- New in version 3.4
- ``count_and(a, b, /)`` -> int
- Return ``(a & b).count()`` in a memory efficient manner,
- as no intermediate bitarray object gets created.
- ``count_n(a, n, value=1, /)`` -> int
- Return lowest index ``i`` for which ``a[:i].count(value) == n``.
- Raises ``ValueError`` when ``n`` exceeds total count (``a.count(value)``).
- New in version 2.3.6: optional value argument
- ``count_or(a, b, /)`` -> int
- Return ``(a | b).count()`` in a memory efficient manner,
- as no intermediate bitarray object gets created.
- ``count_xor(a, b, /)`` -> int
- Return ``(a ^ b).count()`` in a memory efficient manner,
- as no intermediate bitarray object gets created.
- This is also known as the Hamming distance.
- ``deserialize(bytes, /)`` -> bitarray
- Return a bitarray given a bytes-like representation such as returned
- by ``serialize()``.
- See also: `Bitarray representations <https://github.com/ilanschnell/bitarray/blob/master/doc/represent.rst>`__
- New in version 1.8
- New in version 2.5.0: allow bytes-like argument
- ``gen_primes(n, /, endian=None, odd=False)`` -> bitarray
- Generate a bitarray of length ``n`` in which active indices are prime numbers.
- By default (``odd=False``), active indices correspond to prime numbers directly.
- When ``odd=True``, only odd prime numbers are represented in the resulting
- bitarray ``a``, and ``a[i]`` corresponds to ``2*i+1`` being prime or not.
- Apart from working with prime numbers, this function is useful for
- testing, as it provides a simple way to create a well-defined bitarray
- of any length.
- New in version 3.7
- ``hex2ba(hexstr, /, endian=None)`` -> bitarray
- Bitarray of hexadecimal representation. hexstr may contain any number
- (including odd numbers) of hex digits (upper or lower case).
- Whitespace is ignored.
- New in version 3.3: ignore whitespace
- ``huffman_code(dict, /, endian=None)`` -> dict
- Given a frequency map, a dictionary mapping symbols to their frequency,
- calculate the Huffman code, i.e. a dict mapping those symbols to
- bitarrays (with given bit-endianness). Note that the symbols are not limited
- to being strings. Symbols may be any hashable object.
- ``int2ba(int, /, length=None, endian=None, signed=False)`` -> bitarray
- Convert the given integer to a bitarray (with given bit-endianness,
- and no leading (big-endian) / trailing (little-endian) zeros), unless
- the ``length`` of the bitarray is provided. An ``OverflowError`` is raised
- if the integer is not representable with the given number of bits.
- ``signed`` determines whether two's complement is used to represent the integer,
- and requires ``length`` to be provided.
- ``intervals(bitarray, /)`` -> iterator
- Compute all uninterrupted intervals of 1s and 0s, and return an
- iterator over tuples ``(value, start, stop)``. The intervals are guaranteed
- to be in order, and their size is always non-zero (``stop - start > 0``).
- New in version 2.7
- ``ones(n, /, endian=None)`` -> bitarray
- Create a bitarray of length ``n``, with all values ``1``, and optional
- bit-endianness (``little`` or ``big``).
- New in version 2.9
- ``parity(a, /)`` -> int
- Return parity of bitarray ``a``.
- ``parity(a)`` is equivalent to ``a.count() % 2`` but more efficient.
- New in version 1.9
- ``pprint(bitarray, /, stream=None, group=8, indent=4, width=80)``
- Pretty-print bitarray object to ``stream``, defaults is ``sys.stdout``.
- By default, bits are grouped in bytes (8 bits), and 64 bits per line.
- Non-bitarray objects are printed using ``pprint.pprint()``.
- New in version 1.8
- ``random_k(n, /, k, endian=None)`` -> bitarray
- Return (pseudo-) random bitarray of length ``n`` with ``k`` elements
- set to one. Mathematically equivalent to setting (in a bitarray of
- length ``n``) all bits at indices ``random.sample(range(n), k)`` to one.
- The random bitarrays are reproducible when giving Python's ``random.seed()``
- a specific seed value.
- New in version 3.6
- ``random_p(n, /, p=0.5, endian=None)`` -> bitarray
- Return (pseudo-) random bitarray of length ``n``, where each bit has
- probability ``p`` of being one (independent of any other bits). Mathematically
- equivalent to ``bitarray((random() < p for _ in range(n)), endian)``, but much
- faster for large ``n``. The random bitarrays are reproducible when giving
- Python's ``random.seed()`` with a specific seed value.
- This function requires Python 3.12 or higher, as it depends on the standard
- library function ``random.binomialvariate()``. Raises ``NotImplementedError``
- when Python version is too low.
- See also: `Random Bitarrays <https://github.com/ilanschnell/bitarray/blob/master/doc/random_p.rst>`__
- New in version 3.5
- ``sc_decode(stream, /)`` -> bitarray
- Decompress binary stream (an integer iterator, or bytes-like object) of a
- sparse compressed (``sc``) bitarray, and return the decoded bitarray.
- This function consumes only one bitarray and leaves the remaining stream
- untouched. Use ``sc_encode()`` for compressing (encoding).
- See also: `Compression of sparse bitarrays <https://github.com/ilanschnell/bitarray/blob/master/doc/sparse_compression.rst>`__
- New in version 2.7
- ``sc_encode(bitarray, /)`` -> bytes
- Compress a sparse bitarray and return its binary representation.
- This representation is useful for efficiently storing sparse bitarrays.
- Use ``sc_decode()`` for decompressing (decoding).
- See also: `Compression of sparse bitarrays <https://github.com/ilanschnell/bitarray/blob/master/doc/sparse_compression.rst>`__
- New in version 2.7
- ``serialize(bitarray, /)`` -> bytes
- Return a serialized representation of the bitarray, which may be passed to
- ``deserialize()``. It efficiently represents the bitarray object (including
- its bit-endianness) and is guaranteed not to change in future releases.
- See also: `Bitarray representations <https://github.com/ilanschnell/bitarray/blob/master/doc/represent.rst>`__
- New in version 1.8
- ``strip(bitarray, /, mode='right')`` -> bitarray
- Return a new bitarray with zeros stripped from left, right or both ends.
- Allowed values for mode are the strings: ``left``, ``right``, ``both``
- ``subset(a, b, /)`` -> bool
- Return ``True`` if bitarray ``a`` is a subset of bitarray ``b``.
- ``subset(a, b)`` is equivalent to ``a | b == b`` (and equally ``a & b == a``) but
- more efficient as no intermediate bitarray object is created and the buffer
- iteration is stopped as soon as one mismatch is found.
- ``sum_indices(a, /, mode=1)`` -> int
- Return sum of indices of all active bits in bitarray ``a``.
- Equivalent to ``sum(i for i, v in enumerate(a) if v)``.
- ``mode=2`` sums square of indices.
- New in version 3.6
- New in version 3.7: add optional mode argument
- ``urandom(n, /, endian=None)`` -> bitarray
- Return random bitarray of length ``n`` (uses ``os.urandom()``).
- New in version 1.7
- ``vl_decode(stream, /, endian=None)`` -> bitarray
- Decode binary stream (an integer iterator, or bytes-like object), and
- return the decoded bitarray. This function consumes only one bitarray and
- leaves the remaining stream untouched. Use ``vl_encode()`` for encoding.
- See also: `Variable length bitarray format <https://github.com/ilanschnell/bitarray/blob/master/doc/variable_length.rst>`__
- New in version 2.2
- ``vl_encode(bitarray, /)`` -> bytes
- Return variable length binary representation of bitarray.
- This representation is useful for efficiently storing small bitarray
- in a binary stream. Use ``vl_decode()`` for decoding.
- See also: `Variable length bitarray format <https://github.com/ilanschnell/bitarray/blob/master/doc/variable_length.rst>`__
- New in version 2.2
- ``xor_indices(a, /)`` -> int
- Return xor reduced indices of all active bits in bitarray ``a``.
- This is essentially equivalent to
- ``reduce(operator.xor, (i for i, v in enumerate(a) if v))``.
- New in version 3.2
- ``zeros(n, /, endian=None)`` -> bitarray
- Create a bitarray of length ``n``, with all values ``0``, and optional
- bit-endianness (``little`` or ``big``).
|