CHANGE_LOG
2021-08-15 2.3.0:
-------------------
* add optional `buffer` argument to `bitarray()` to import the buffer of
another object, #141, #146, see also: [buffer protocol](buffer.rst)
* update `.buffer_info()` to include: a read-only flag, an imported buffer
flag, and the number of buffer exports
* add optional start and stop arguments to `util.rindex()`
* add [memory-mapped file](../examples/mmapped-file.py) example
* ignore underscore (`_`) in string input, e.g. `bitarray('1100_0111')`
* add missing type hinting for new `.bytereverse()` arguments
* fix `.extend()` type annotations, #145
* avoid `.reverse()` using temporary memory
* make `.unpack()`, `util.serialize()`, `util.vl_encode()`
and `.__reduce__()` more memory efficient
* add and improve tests
2021-08-07 2.2.5:
-------------------
* speedup `find_bit()` and `find_last()` using uint64 checking, this means
a speedup for `.find()`, `.index()`, `.search()` and `util.rindex()`
* add optional start and stop arguments to `.bytereverse()`
* add example to illustrate how
[unaligned copying](../examples/copy_n.py) works internally
* add documentation
* add tests
2021-07-29 2.2.4:
-------------------
* use shift operations to speedup all unaligned copy operations, #142
* expose functionality to Python level only in debug mode for testing
* add and improve tests
2021-07-22 2.2.3:
-------------------
* speedup `repeat()`, #136
* speedup shift operations, #139
* optimize slice assignment with negative step, e.g.: `a[::-1] = 1`
* add tests
2021-07-16 2.2.2:
-------------------
* speedup slice assignment, see #132 and #135
* speedup bitwise operations, #133
* optimize `getbit()` and `setbit()` in `bitarray.h`
* fix TypeError messages when bitarray or int (0, 1) are expected (bool
is a subclass of int)
* add and improve tests
2021-07-06 2.2.1:
-------------------
* improve documentation
* speedup `vl_encode()`
* `bitarray.h`: make `getbit()` always an (inline) function
* add assertions in C code
2021-07-03 2.2.0:
-------------------
* add `bitarray.util.vl_encode()` and `bitarray.util.vl_decode()` which
uses a [variable length bitarray format](variable_length.rst), #131
2021-06-15 2.1.3:
-------------------
* Fix building with MSVC / Bullseye, #129
2021-06-13 2.1.2:
-------------------
* support type hinting for all Python 3 versions (that bitarray supports,
3.5 and higher currently), fixed #128
* add explicit endianness to two tests, fixes #127
2021-06-11 2.1.1:
-------------------
* add type hinting (see PEP 484, 561) using stub (`.pyi`) files
* add tests
2021-05-05 2.1.0:
-------------------
* add `.find()` method, see #122
* `.find()`, `.index()`, `.search()` and `.itersearch()` now all except
both (sub-) bitarray as well as bool items to be searched for
* improve encode/decode error messages
* add [lexicographical permutations example](../examples/lexico.py)
* add tests
2021-04-19 2.0.1:
-------------------
* update documentation
* improve some error messages
2021-04-14 2.0.0:
-------------------
* require more specific objects, int (0 or 1) or bool, see #119
* items are always returned as int 0 or 1, #119
* remove `.length()` method (deprecated since 1.5.1 - use `len()`)
* in `.unpack()` the `one` argument now defaults to 0x01 (was 0xff)
* `.tolist()` now always returns a list of integers (0 or 1)
* fix frozenbitarray hash function, see #121
* fix frozenbitarray being mutable by `<<=` and `>>=`
* support sequence protocol in `.extend()` (and bitarray creation)
* improve OverflowError messages from `util.int2ba()`
* add [hexadecimal example](../examples/hexadecimal.py)
2021-04-10 1.9.2:
-------------------
* update pythoncapi_compat: Fix support with PyPy 3.7, #120
* update readme
2021-04-05 1.9.1:
-------------------
* switch documentation from markdown to reStructuredText
* add tests
2021-04-03 1.9.0:
-------------------
* add shift operations (`<<`, `>>`, `<<=`, `>>=`), see #117
* add `bitarray.util.ba2base()` and `bitarray.util.base2ba()`,
see last paragraph in [Bitarray representations](represent.rst)
* documentation and tests
2021-03-31 1.8.2:
-------------------
* fix crash caused by unsupported types in binary operations, #116
* speedup initializing or extending a bitarray from another with different
bit endianness
* add formatting options to `bitarray.util.pprint()`
* add documentation on [bitarray representations](represent.rst)
* add and improve tests (all 291 tests run in less than half a second on
a modern machine)
2021-03-25 1.8.1:
-------------------
* moved implementation of and `hex2ba()` and `ba2hex()` to C-level
* add `bitarray.util.parity()`
2021-03-21 1.8.0:
-------------------
* add `bitarray.util.serialize()` and `bitarray.util.deserialize()`
* allow whitespace (ignore space and `\n\r\t\v`) in input strings,
e.g. `bitarray('01 11')` or `a += '10 00'`
* add `bitarray.util.pprint()`
* When initializing a bitarray from another with different bit endianness,
e.g. `a = bitarray('110', 'little')` and `b = bitarray(a, 'big')`,
the buffer used to be simply copied, with consequence that `a == b` would
result in `False`. This is fixed now, that is `a == b` will always
evaluate to `True`.
* add test for loading existing pickle file (created using bitarray 1.5.0)
* add example showing how to [jsonize bitarrays](../examples/extend_json.py)
* add tests
2021-03-12 1.7.1:
-------------------
* fix issue #114, raise TypeError when incorrect index is used during
assignment, e.g. `a[1.5] = 1`
* raise TypeError (not IndexError) when assigning slice to incorrect type,
e.g. `a[1:4] = 1.2`
* improve some docstrings and tests
2021-02-27 1.7.0:
-------------------
* add `bitarray.util.urandom()`
* raise TypeError when trying to extend bitarrays from bytes on Python 3,
ie. `bitarray(b'011')` and `.extend(b'110')`. (Deprecated since 1.4.1)
2021-01-20 1.6.3:
-------------------
* add missing .h files to sdist tarball, #113
2021-01-20 1.6.2:
-------------------
* use `Py_SET_TYPE()` and `Py_SET_SIZE()` for Python 3.10, #109
* add official Python 3.10 support
* fix slice assignment to same object,
e.g. `a[2::] = a` or `a[::-1] = a`, #112
* add bitarray.h, #110
2020-11-05 1.6.1:
-------------------
* use PyType_Ready for all types: bitarray, bitarrayiterator,
decodeiterator, decodetree, searchiterator
2020-10-17 1.6.0:
-------------------
* add `decodetree` object, for speeding up consecutive calls
to `.decode()` and `.iterdecode()`, in particular when dealing
with large prefix codes, see #103
* add optional parameter to `.tolist()` which changes the items in the
returned list to integers (0 or 1), as opposed to Booleans
* remove deprecated `bitdiff()`, which has been deprecated since version
1.2.0, use `bitarray.util.count_xor()` instead
* drop Python 2.6 support
* update license file, #104
2020-08-24 1.5.3:
-------------------
* add optional index parameter to `.index()` to invert single bit
* fix `sys.getsizeof(bitarray)` by adding `.__sizeof__()`, see issue #100
2020-08-16 1.5.2:
-------------------
* add PyType_Ready usage, issue #66
* speedup search() for bitarrays with length 1 in sparse bitarrays,
see issue #67
* add tests
2020-08-10 1.5.1:
-------------------
* support signed integers in `util.ba2int()` and `util.int2ba()`,
see issue #85
* deprecate `.length()` in favor of `len()`
2020-08-05 1.5.0:
-------------------
* Use `Py_ssize_t` for bitarray index. This means that on 32bit
systems, the maximum number of elements in a bitarray is 2 GBits.
We used to have a special 64bit index type for all architectures, but
this prevented us from using Python's sequence, mapping and number
methods, and made those method lookups slow.
* speedup slice operations when step size = 1 (if alignment allows
copying whole bytes)
* Require equal endianness for operations: `&`, `|`, `^`, `&=`, `|=`, `^=`.
This should have always been the case but was overlooked in the past.
* raise TypeError when trying to create bitarray from boolean
* This will be last release to still support Python 2.6 (which was retired
in 2013). We do NOT plan to stop support for Python 2.7 anytime soon.
2020-07-15 1.4.2:
-------------------
* add more tests
* C-level:
- simplify pack/unpack code
- fix memory leak in `~` operation (bitarray_cpinvert)
2020-07-14 1.4.1:
-------------------
* add official Python 3.9 support
* improve many docstrings
* add DeprecationWarning for `bitdiff()`
* add DeprecationWarning when trying to extend bitarrays
from bytes on Python 3 (`bitarray(b'011')` and `.extend(b'110')`)
* C-level:
- Rewrote `.fromfile()` and `.tofile()` implementation,
such that now the same code is used for Python 2 and 3.
The new implementation is more memory efficient on
Python 3.
- use `memcmp()` in `richcompare()` to shortcut EQ/NE, when
comparing two very large bitarrays for equality the
speedup can easily be 100x
- simplify how unpacking is handled
* add more tests
2020-07-11 1.4.0:
-------------------
* add `.clear()` method (Python 3.3 added this method to lists)
* avoid over-allocation when bitarray objects are initially created
* raise BufferError when resizing bitarrays which is exporting buffers
* add example to study the resize() function
* improve some error messages
* add more tests
* raise `NotImplementedError` with (useful message) when trying to call
the `.fromstring()` or `.tostring()` methods, which have been removed
in the last release
2020-07-06 1.3.0:
-------------------
* add `bitarray.util.make_endian()`
* `util.ba2hex()` and `util.hex2ba()` now also support little-endian
* add `bitarray.get_default_endian()`
* made first argument of initializer a positional-only parameter
* remove `.fromstring()` and `.tostring()` methods, these have been
deprecated 8 years ago, since version 0.4.0
* add `__all__` in `bitarray/__init__.py`
* drop Python 3.3 and 3.4 support
2020-05-18 1.2.2:
-------------------
* `util.ba2hex()` now always return a string object (instead of bytes
object for Python 3), see issue #94
* `util.hex2ba` allows a unicode object as input on Python 2
* Determine 64-bitness of interpreter in a cross-platform fashion #91,
in order to better support PyPy
2020-01-06 1.2.1:
-------------------
* simplify markdown of readme so PyPI renders better
* make tests for bitarray.util required (instead of warning when
they cannot be imported)
2019-12-06 1.2.0:
-------------------
* add bitarray.util module which provides useful utility functions
* deprecate `bitarray.bitdiff()` in favor of `bitarray.util.count_xor`
* use markdown for documentation
* fix bug in `.count()` on 32bit systems in special cases when array size
is 2^29 bits or larger
* simplified tests by using bytes syntax
* update smallints and sieve example to use new utility module
* simplified mandel example to use numba
* use file context managers in tests
2019-11-07 1.1.0:
-------------------
* add frozenbitarray object
* add optional start and stop arguments to `.count()` method
* add official Python 3.8 support
* optimize `setrange()` C-function by using `memset()`
* fix issue #74, bitarray is hashable on Python 2
* fix issue #68, `unittest.TestCase.assert_` deprecated
* improved test suite - tests should run in about 1 second
* update documentation to use positional-only syntax in docstrings
* update readme to pass Python 3 doctest
* add utils module to examples
2019-07-19 1.0.1:
-------------------
* fix readme to pass `twine check`
2019-07-15 1.0.0:
-------------------
* fix bitarrays beings created from unicode in Python 2
* use `PyBytes_*` in C code, treating the Py3k function names as default,
which also removes all redefinitions of `PyString_*`
* handle negative arguments of .index() method consistently with how
they are treated for lists
* add a few more comments to the C code
* move imports outside tests: pickle, io, etc.
* drop Python 2.5 support
2019-05-20 0.9.3:
-------------------
* refactor resize() - only shrink allocated memory if new size falls
lower than half the allocated size
* improve error message when trying to initialize from float or complex
2019-04-29 0.9.2:
-------------------
* fix to compile on Windows with VS 2015, issue #72
2019-04-28 0.9.1:
-------------------
* fix types to actually be types, #29
* check for ambiguous prefix codes when building binary tree for decoding
* remove Python level methods: encode, decode, iterdecode (in favor of
having these implemented on the C-level along with check_codedict)
* fix self tests for Python 2.5 and 2.6
* move all Huffman code related example code into examples/huffman
* add code to generate graphviz .dot file of Huffman tree to examples
2019-04-22 0.9.0:
-------------------
* more efficient decode and iterdecode by using C-level binary tree
instead of a python one, #54
* added buffer protocol support for Python 3, #55
* fixed invalid pointer exceptions in pypy, #47
* made all examples Py3k compatible
* add gene sequence example
* add official Python 3.7 support
* drop Python 2.4, 3.1 and 3.2 support
2018-07-06 0.8.3:
-------------------
* add exception to setup.py when README.rst cannot be opened
2018-05-30 0.8.2:
-------------------
* add official Python 3.6 support (although it was already working)
* fix description of `fill()`, #52
* handle extending self correctly, #28
* copy_n: fast copy with memmove fixed, #43
* minor clarity/wording changes to README, #23
2013-03-30 0.8.1:
-------------------
* fix issue #10, i.e. `int(bitarray())` segfault
* added tests for using a bitarray object as an argument to functions
like int, long (on Python 2), float, list, tuple, dict
2012-04-04 0.8.0:
-------------------
* add Python 2.4 support
* add (module level) function bitdiff for calculating the difference
between two bitarrays
2012-02-15 0.7.0:
-------------------
* add iterdecode method (C level), which returns an iterator but is
otherwise like the decode method
* improve memory efficiency and speed of pickling large bitarray objects
2012-02-06 0.6.0:
-------------------
* add buffer protocol to bitarray objects (Python 2.7 only)
* allow slice assignment to 0 or 1, e.g. `a[::3] = 0` (in addition to
booleans)
* moved implementation of itersearch method to C level (Lluis Pamies)
* search, itersearch now only except bitarray objects,
whereas `__contains__` excepts either booleans or bitarrays
* use a priority queue for Huffman tree example (thanks to Ushma Bhatt)
* improve documentation
2012-02-02 0.5.2:
-------------------
* fixed MSVC compile error on Python 3 (thanks to Chris Gohlke)
* add missing start and stop optional parameters to index() method
* add examples/compress.py
2012-01-31 0.5.1:
-------------------
* update documentation to use tobytes and frombytes, rather than tostring
and fromstring (which are now deprecated)
* simplified how tests are run
2012-01-23 0.5.0:
-------------------
* added itersearch method
* added Bloom filter example
* minor fixes in docstrings, added more tests
2011-12-29 0.4.0:
-------------------
* porting to Python 3.x (Roland Puntaier)
* introduced tobytes, frombytes (tostring, fromstring are now deprecated)
* updated development status
* added sieve prime number example
* moved project to github: https://github.com/ilanschnell/bitarray
2009-04-06 0.3.5:
-------------------
* fixed reference counts bugs
* added possibility to slice assign to True or False, e.g. a[::3] = True
will set every third element to True
2009-01-15 0.3.4:
-------------------
* Made C code less ambiguous, such that the package compiles on
Visual Studio, with all tests passing.
2008-12-14 0.3.3:
-------------------
* Made changes to the C code to allow compilation with more compilers.
Compiles on Visual Studio, although there are still a few tests failing.
2008-10-19 0.3.2:
-------------------
* Added sequential search method.
* The special method `__contains__` now also takes advantage of the
sequential search.
2008-10-12 0.3.1:
-------------------
* Simplified state information for pickling. Argument for count is now
optional, defaults to True. Fixed typos.
2008-09-30 0.3.0:
-------------------
* Fixed a severe bug for 64-bit machines. Implemented all methods in C,
improved tests.
* Removed deprecated methods from01 and fromlist.
2008-09-23 0.2.5:
-------------------
* Added section in README about prefix codes. Implemented _multiply method
for faster __mul__ and __imul__. Fixed some typos.
2008-09-22 0.2.4:
-------------------
* Implemented encode and decode method (in C) for variable-length prefix
codes.
* Added more examples, wrote README for the examples.
* Added more tests, fixed some typos.
2008-09-16 0.2.3:
-------------------
* Fixed a memory leak, implemented a number of methods in C.
These include __getitem__, __setitem__, __delitem__, pop, remove,
insert. The methods implemented on the Python level is very limit now.
* Implemented bitwise operations.
2008-09-09 0.2.2:
-------------------
* Rewrote parts of the README
* Implemented memory efficient algorithm for the reverse method
* Fixed typos, added a few tests, more C refactoring.
2008-09-07 0.2.1:
-------------------
* Improved tests, in particular added checking for memory leaks.
* Refactored many things on the C level.
* Implemented a few more methods.
2008-09-02 0.2.0:
-------------------
* Added bit endianness property to the bitarray object
* Added the examples to the release package.
2008-08-17 0.1.0:
-------------------
* First official release; put project to
http://pypi.python.org/pypi/bitarray/
May 2008:
---------
Wrote the initial code, and put it on my personal web-site:
http://ilan.schnell-web.net/prog/