Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-bitarray for openSUSE:Factory 
checked in at 2023-06-12 15:25:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-bitarray (Old)
 and      /work/SRC/openSUSE:Factory/.python-bitarray.new.15902 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-bitarray"

Mon Jun 12 15:25:58 2023 rev:18 rq:1092275 version:2.7.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-bitarray/python-bitarray.changes  
2023-03-07 16:50:42.485702589 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-bitarray.new.15902/python-bitarray.changes   
    2023-06-12 15:26:51.051193781 +0200
@@ -1,0 +2,9 @@
+Sun Jun 11 11:51:40 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 2.7.5:
+  * fix for pypy3.9-v7.3.11
+  * register ``bitarray`` as ``abc.MutableSequence``
+  * improve documentation regarding type when indexing single
+  * bitarray items
+
+-------------------------------------------------------------------

Old:
----
  bitarray-2.7.3.tar.gz

New:
----
  bitarray-2.7.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-bitarray.spec ++++++
--- /var/tmp/diff_new_pack.krW5sz/_old  2023-06-12 15:26:52.027199555 +0200
+++ /var/tmp/diff_new_pack.krW5sz/_new  2023-06-12 15:26:52.035199602 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-bitarray
-Version:        2.7.3
+Version:        2.7.5
 Release:        0
 Summary:        Efficient Arrays of Booleans
 License:        Python-2.0

++++++ bitarray-2.7.3.tar.gz -> bitarray-2.7.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/.github/workflows/build_wheels.yml 
new/bitarray-2.7.5/.github/workflows/build_wheels.yml
--- old/bitarray-2.7.3/.github/workflows/build_wheels.yml       2023-02-21 
00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/.github/workflows/build_wheels.yml       2023-06-10 
21:56:55.000000000 +0200
@@ -8,7 +8,7 @@
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        os: [ubuntu-20.04, windows-2019, macos-10.15]
+        os: [ubuntu-20.04, windows-2019, macos-11]
 
     steps:
       - uses: actions/checkout@v2
@@ -25,7 +25,6 @@
         env:
           # configure cibuildwheel to build native archs ('auto'), and some
           # emulated ones
-          CIBW_SKIP: pp*
           CIBW_ARCHS_LINUX: auto aarch64 ppc64le s390x
           CIBW_ARCHS_MACOS: x86_64 universal2 arm64
           CIBW_TEST_COMMAND: python -c "import bitarray; assert 
bitarray.test().wasSuccessful()"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/CHANGE_LOG 
new/bitarray-2.7.5/CHANGE_LOG
--- old/bitarray-2.7.3/CHANGE_LOG       2023-02-21 00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/CHANGE_LOG       2023-06-10 21:56:55.000000000 +0200
@@ -1,3 +1,18 @@
+2023-06-10   2.7.5:
+-------------------
+  * fix for pypy3.9-v7.3.11, #198 (fixes #188)
+  * enable building wheels for PyPy
+
+
+2023-05-29   2.7.4:
+-------------------
+  * register `bitarray` as `abc.MutableSequence`, see #196
+  * cibuildwheel: update macOS version to 11 from unsupported 10.15, see
+    https://github.com/actions/runner-images/issues/5583
+  * improve documentation regarding type when indexing single
+    bitarray items, #192
+
+
 2023-02-20   2.7.3:
 -------------------
   * fix popcount64 name conflict on NetBSD, #189
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/README.rst 
new/bitarray-2.7.5/README.rst
--- old/bitarray-2.7.3/README.rst       2023-02-21 00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/README.rst       2023-06-10 21:56:55.000000000 +0200
@@ -63,7 +63,7 @@
 
     $ python -c 'import bitarray; bitarray.test()'
     bitarray is installed in: /Users/ilan/bitarray/bitarray
-    bitarray version: 2.7.3
+    bitarray version: 2.7.5
     sys.version: 3.11.0 (main, Oct 25 2022) [Clang 14.0.4]
     sys.prefix: /Users/ilan/Mini3/envs/py311
     pointer size: 64 bit
@@ -76,7 +76,7 @@
     .........................................................................
     ................................................................
     ----------------------------------------------------------------------
-    Ran 467 tests in 0.460s
+    Ran 468 tests in 0.460s
 
     OK
 
@@ -118,6 +118,12 @@
     >>> 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
@@ -401,7 +407,7 @@
 Reference
 =========
 
-bitarray version: 2.7.3 -- `change log 
<https://github.com/ilanschnell/bitarray/blob/master/doc/changelog.rst>`__
+bitarray version: 2.7.5 -- `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.
@@ -535,10 +541,12 @@
 
 
 ``fromfile(f, n=-1, /)``
-   Extend bitarray with up to n bytes read from the file object f.
-   When n is omitted or negative, reads all data until EOF.
-   When n is provided and positive but exceeds the data available,
-   ``EOFError`` is raised (but the available data is still read and appended.
+   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, all bytes until EOF are read.  When ``n`` is non-negative but
+   exceeds the data available, ``EOFError`` is raised (but the available data
+   is still read and appended).
 
 
 ``index(sub_bitarray, start=0, stop=<end of array>, /)`` -> int
@@ -582,7 +590,7 @@
 
 
 ``pop(index=-1, /)`` -> item
-   Return the i-th (default last) element and delete it from the bitarray.
+   Remove and return item at ``index`` (default last).
    Raises ``IndexError`` if index is out of range.
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/bitarray/_bitarray.c 
new/bitarray-2.7.5/bitarray/_bitarray.c
--- old/bitarray-2.7.3/bitarray/_bitarray.c     2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/bitarray/_bitarray.c     2023-06-10 21:56:55.000000000 
+0200
@@ -1540,10 +1540,12 @@
 PyDoc_STRVAR(fromfile_doc,
 "fromfile(f, n=-1, /)\n\
 \n\
-Extend bitarray with up to n bytes read from the file object f.\n\
-When n is omitted or negative, reads all data until EOF.\n\
-When n is provided and positive but exceeds the data available,\n\
-`EOFError` is raised (but the available data is still read and appended.");
+Extend bitarray with up to `n` bytes read from file object `f` (or any\n\
+other binary stream what supports a `.read()` method, e.g. `io.BytesIO`).\n\
+Each read byte will add eight bits to the bitarray.  When `n` is omitted or\n\
+negative, all bytes until EOF are read.  When `n` is non-negative but\n\
+exceeds the data available, `EOFError` is raised (but the available data\n\
+is still read and appended).");
 
 
 static PyObject *
@@ -1688,7 +1690,7 @@
 PyDoc_STRVAR(pop_doc,
 "pop(index=-1, /) -> item\n\
 \n\
-Return the i-th (default last) element and delete it from the bitarray.\n\
+Remove and return item at `index` (default last).\n\
 Raises `IndexError` if index is out of range.");
 
 
@@ -1987,7 +1989,7 @@
    functionality inside bitarray_ass_subscr() would make the function
    incomprehensibly long. */
 
-/* set elements in self, specified by slice, to other bitarray */
+/* set items in self, specified by slice, to other bitarray */
 static int
 setslice_bitarray(bitarrayobject *self, PyObject *slice,
                   bitarrayobject *other)
@@ -2046,7 +2048,7 @@
     return res;
 }
 
-/* set elements in self, specified by slice, to value */
+/* set items in self, specified by slice, to value */
 static int
 setslice_bool(bitarrayobject *self, PyObject *slice, PyObject *value)
 {
@@ -2082,7 +2084,7 @@
     return 0;
 }
 
-/* delete elements in self, specified by slice */
+/* delete items in self, specified by slice */
 static int
 delslice(bitarrayobject *self, PyObject *slice)
 {
@@ -3852,6 +3854,30 @@
 /******************************* Install Module ***************************/
 
 #if IS_PY3K
+/* register bitarray as collections.abc.MutableSequence */
+static int
+register_abc(void)
+{
+    PyObject *abc_module, *mutablesequence, *res;
+
+    if ((abc_module = PyImport_ImportModule("collections.abc")) == NULL)
+        return -1;
+
+    mutablesequence = PyObject_GetAttrString(abc_module, "MutableSequence");
+    Py_DECREF(abc_module);
+    if (mutablesequence == NULL)
+        return -1;
+
+    res = PyObject_CallMethod(mutablesequence, "register", "O",
+                              (PyObject *) &Bitarray_Type);
+    Py_DECREF(mutablesequence);
+    if (res == NULL)
+        return -1;
+
+    Py_DECREF(res);
+    return 0;
+}
+
 static PyModuleDef moduledef = {
     PyModuleDef_HEAD_INIT, "_bitarray", 0, -1, module_functions,
 };
@@ -3882,6 +3908,11 @@
     Py_INCREF((PyObject *) &Bitarray_Type);
     PyModule_AddObject(m, "bitarray", (PyObject *) &Bitarray_Type);
 
+#if IS_PY3K
+    if (register_abc() < 0)
+        goto error;
+#endif
+
     if (PyType_Ready(&DecodeTree_Type) < 0)
         goto error;
     Py_SET_TYPE(&DecodeTree_Type, &PyType_Type);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/bitarray/_util.c 
new/bitarray-2.7.5/bitarray/_util.c
--- old/bitarray-2.7.3/bitarray/_util.c 2023-02-21 00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/bitarray/_util.c 2023-06-10 21:56:55.000000000 +0200
@@ -33,7 +33,7 @@
 }
 
 /* return new bitarray of length `nbits` (with uninitialized buffer) and
-   endianness given by the PyObject 'endian' */
+   endianness given by the PyObject 'endian' (which may be Py_None) */
 static bitarrayobject *
 new_bitarray(Py_ssize_t nbits, PyObject *endian)
 {
@@ -43,7 +43,7 @@
     if ((args = PyTuple_New(2)) == NULL)
         return NULL;
 
-    /* PyTuple_SET_ITEM “steals” a reference to item */
+    /* PyTuple_SET_ITEM "steals" a reference to item */
     PyTuple_SET_ITEM(args, 0, PyLong_FromSsize_t(nbits));
     Py_INCREF(endian);
     PyTuple_SET_ITEM(args, 1, endian);
@@ -2001,7 +2001,7 @@
                   (PyCFunction) chdi_new,  METH_VARARGS, chdi_doc},
 #ifndef NDEBUG
     /* functionality exposed in debug mode for testing */
-    {"_sc_rts",   (PyCFunction) sc_rts,     METH_O,       0},
+    {"_sc_rts",   (PyCFunction) sc_rts,    METH_O,       0},
 #endif
     {NULL,        NULL}  /* sentinel */
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/bitarray/bitarray.h 
new/bitarray-2.7.5/bitarray/bitarray.h
--- old/bitarray-2.7.3/bitarray/bitarray.h      2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/bitarray/bitarray.h      2023-06-10 21:56:55.000000000 
+0200
@@ -4,7 +4,7 @@
 
    Author: Ilan Schnell
 */
-#define BITARRAY_VERSION  "2.7.3"
+#define BITARRAY_VERSION  "2.7.5"
 
 #ifdef STDC_HEADERS
 #include <stddef.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/bitarray/pythoncapi_compat.h 
new/bitarray-2.7.5/bitarray/pythoncapi_compat.h
--- old/bitarray-2.7.3/bitarray/pythoncapi_compat.h     2023-02-21 
00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/bitarray/pythoncapi_compat.h     2023-06-10 
21:56:55.000000000 +0200
@@ -390,7 +390,8 @@
 
 
 // bpo-37194 added PyObject_CallNoArgs() to Python 3.9.0a1
-#if PY_VERSION_HEX < 0x030900A1 || defined(PYPY_VERSION)
+// PyObject_CallNoArgs() added to PyPy 3.9.16-v7.3.11
+#if !defined(PyObject_CallNoArgs) && PY_VERSION_HEX < 0x030900A1
 PYCAPI_COMPAT_STATIC_INLINE(PyObject*)
 PyObject_CallNoArgs(PyObject *func)
 {
@@ -401,7 +402,8 @@
 
 // bpo-39245 made PyObject_CallOneArg() public (previously called
 // _PyObject_CallOneArg) in Python 3.9.0a4
-#if PY_VERSION_HEX < 0x030900A4 || defined(PYPY_VERSION)
+// PyObject_CallOneArg() added to PyPy 3.9.16-v7.3.11
+#if !defined(PyObject_CallOneArg) && PY_VERSION_HEX < 0x030900A4
 PYCAPI_COMPAT_STATIC_INLINE(PyObject*)
 PyObject_CallOneArg(PyObject *func, PyObject *arg)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/bitarray/test_bitarray.py 
new/bitarray-2.7.5/bitarray/test_bitarray.py
--- old/bitarray-2.7.3/bitarray/test_bitarray.py        2023-02-21 
00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/bitarray/test_bitarray.py        2023-06-10 
21:56:55.000000000 +0200
@@ -1580,6 +1580,17 @@
         self.assertRaises(TypeError, hash, a)
         self.assertRaises(TypeError, dict, [(a, 'foo')])
 
+    @skipIf(sys.version_info[0] == 2)
+    def test_abc(self):
+        from collections import abc
+
+        a = bitarray('001')
+        self.assertIsInstance(a, abc.Sequence)
+        self.assertIsInstance(a, abc.MutableSequence)
+        if sys.platform != "win32":
+            self.assertFalse(isinstance(a, abc.Hashable))
+
+
 tests.append(MiscTests)
 
 # ---------------------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/bitarray/test_util.py 
new/bitarray-2.7.5/bitarray/test_util.py
--- old/bitarray-2.7.3/bitarray/test_util.py    2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/bitarray/test_util.py    2023-06-10 21:56:55.000000000 
+0200
@@ -1429,8 +1429,9 @@
 
     @skipIf(not DEBUG)
     def test_rts_empty(self):
-        a = bitarray()
-        self.assertEqual(_sc_rts(a), [0])
+        rts = _sc_rts(bitarray())
+        self.assertEqual(len(rts), 1)
+        self.assertEqual(rts, [0])
 
     @skipIf(_SEGSIZE != 32)
     def test_rts_example(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/doc/changelog.rst 
new/bitarray-2.7.5/doc/changelog.rst
--- old/bitarray-2.7.3/doc/changelog.rst        2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/doc/changelog.rst        2023-06-10 21:56:55.000000000 
+0200
@@ -1,6 +1,21 @@
 Change log
 ==========
 
+**2.7.5** (2023-06-10):
+
+* fix for pypy3.9-v7.3.11, `#198 
<https://github.com/ilanschnell/bitarray/issues/198>`__ (fixes `#188 
<https://github.com/ilanschnell/bitarray/issues/188>`__)
+* enable building wheels for PyPy
+
+
+**2.7.4** (2023-05-29):
+
+* register ``bitarray`` as ``abc.MutableSequence``, see `#196 
<https://github.com/ilanschnell/bitarray/issues/196>`__
+* cibuildwheel: update macOS version to 11 from unsupported 10.15, see
+  https://github.com/actions/runner-images/issues/5583
+* improve documentation regarding type when indexing single
+  bitarray items, `#192 <https://github.com/ilanschnell/bitarray/issues/192>`__
+
+
 **2.7.3** (2023-02-20):
 
 * fix popcount64 name conflict on NetBSD, `#189 
<https://github.com/ilanschnell/bitarray/issues/189>`__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/doc/reference.rst 
new/bitarray-2.7.5/doc/reference.rst
--- old/bitarray-2.7.3/doc/reference.rst        2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/doc/reference.rst        2023-06-10 21:56:55.000000000 
+0200
@@ -1,7 +1,7 @@
 Reference
 =========
 
-bitarray version: 2.7.3 -- `change log 
<https://github.com/ilanschnell/bitarray/blob/master/doc/changelog.rst>`__
+bitarray version: 2.7.5 -- `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.
@@ -135,10 +135,12 @@
 
 
 ``fromfile(f, n=-1, /)``
-   Extend bitarray with up to n bytes read from the file object f.
-   When n is omitted or negative, reads all data until EOF.
-   When n is provided and positive but exceeds the data available,
-   ``EOFError`` is raised (but the available data is still read and appended.
+   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, all bytes until EOF are read.  When ``n`` is non-negative but
+   exceeds the data available, ``EOFError`` is raised (but the available data
+   is still read and appended).
 
 
 ``index(sub_bitarray, start=0, stop=<end of array>, /)`` -> int
@@ -182,7 +184,7 @@
 
 
 ``pop(index=-1, /)`` -> item
-   Return the i-th (default last) element and delete it from the bitarray.
+   Remove and return item at ``index`` (default last).
    Raises ``IndexError`` if index is out of range.
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/distance.py 
new/bitarray-2.7.5/examples/distance.py
--- old/bitarray-2.7.3/examples/distance.py     2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/examples/distance.py     2023-06-10 21:56:55.000000000 
+0200
@@ -3,7 +3,7 @@
 corresponding functions in the scipy.spatial.distance module.
 The functions in this module are typically around 10 to 50 times faster.
 """
-from time import time
+from time import perf_counter
 
 from bitarray.util import _correspond_all, count_and, count_xor, urandom
 
@@ -59,18 +59,19 @@
     for name in ['dice', 'hamming', 'jaccard', 'kulczynski1',
                  'rogerstanimoto', 'russellrao', 'sokalmichener',
                  'sokalsneath', 'yule']:
-        f1 = eval(name)
-        t0 = time()
+
+        f1 = eval(name)               # function defined above
+        t0 = perf_counter()
         x1 = f1(a, b)
-        t1 = time() - t0
-        print('%.14f  %9.6f sec  %s' % (x1, t1, name))
+        t1 = perf_counter() - t0
+        print('%.14f  %6.3f ms  %s' % (x1, 1000.0 * t1, name))
 
-        f2 = getattr(distance, name)
-        t0 = time()
+        f2 = getattr(distance, name)  # scipy.spatial.distance function
+        t0 = perf_counter()
         x2 = f2(aa, bb)
-        t2 = time() - t0
-        print('%.14f  %9.6f sec  %9.2f' % (x2, t2, t2 / t1))
+        t2 = perf_counter() - t0
+        print('%.14f  %6.3f ms  %9.2f' % (x2, 1000.0 * t2, t2 / t1))
 
         assert abs(x1 - x2) < 1E-14
 
-test(2 ** 25 + 67)
+test(2 ** 20 + 67)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/hexadecimal.py 
new/bitarray-2.7.5/examples/hexadecimal.py
--- old/bitarray-2.7.3/examples/hexadecimal.py  2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/examples/hexadecimal.py  2023-06-10 21:56:55.000000000 
+0200
@@ -1,4 +1,4 @@
-from time import time
+from time import perf_counter
 
 from bitarray import bitarray, get_default_endian
 from bitarray.util import urandom, ba2hex, hex2ba, ba2base, base2ba
@@ -42,16 +42,16 @@
     # g: function which takes hexstr and returns bitarray
     # n: size of random bitarray
     a = urandom(n, endian)
-    t0 = time()
+    t0 = perf_counter()
     s = f(a)
-    print('%s:  %9.6f sec' % (f.__name__, time() - t0))
-    t0 = time()
+    print('%s:  %6.3f ms' % (f.__name__, 1000.0 * (perf_counter() - t0)))
+    t0 = perf_counter()
     b = g(s, endian)
-    print('%s:  %9.6f sec' % (g.__name__, time() - t0))
+    print('%s:  %6.3f ms' % (g.__name__, 1000.0 * (perf_counter() - t0)))
     assert b == a
 
 if __name__ == '__main__':
-    n = 100 * 1000 * 1000 + 4
+    n = 1000 * 1000 + 4
     for endian in 'little', 'big':
         print('%s-endian:' % endian)
         for f in ba2hex, ba2_base16, prefix_ba2hex:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/huffman/decodetree.py 
new/bitarray-2.7.5/examples/huffman/decodetree.py
--- old/bitarray-2.7.3/examples/huffman/decodetree.py   2023-02-21 
00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/examples/huffman/decodetree.py   2023-06-10 
21:56:55.000000000 +0200
@@ -1,20 +1,20 @@
 from random import random, randint
-from time import time
+from time import perf_counter
 
 from bitarray import bitarray, decodetree
 from bitarray.util import huffman_code
 
 
-N = 1000 * 1000
+N = 100_000
 
 # create Huffman code for N symbols
 code = huffman_code({i: random() for i in range(N)})
 print(len(code))
 
 # create the decodetree object
-t0 = time()
+t0 = perf_counter()
 tree = decodetree(code)
-print('decodetree(code):  %9.6f sec' % (time() - t0))
+print('decodetree(code):  %9.6f ms' % (1000.0 * (perf_counter() - t0)))
 
 print(tree.nodes())
 plain = [randint(0, N - 1) for _ in range(100)]
@@ -23,14 +23,14 @@
 a.encode(code, plain)
 
 # decode using the code dictionary
-t0 = time()
+t0 = perf_counter()
 res = a.decode(code)
-print('decode(code):  %9.6f sec' % (time() - t0))
+print('decode(code):  %9.6f ms' % (1000.0 * (perf_counter() - t0)))
 assert res == plain
 
 # decode using the decodetree
-t0 = time()
+t0 = perf_counter()
 res = a.decode(tree)
-print('decode(tree):  %9.6f sec' % (time() - t0))
+print('decode(tree):  %9.6f ms' % (1000.0 * (perf_counter() - t0)))
 assert res == plain
 assert tree.todict() == code
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/huffman/decoding.py 
new/bitarray-2.7.5/examples/huffman/decoding.py
--- old/bitarray-2.7.3/examples/huffman/decoding.py     2023-02-21 
00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/examples/huffman/decoding.py     2023-06-10 
21:56:55.000000000 +0200
@@ -1,5 +1,5 @@
 from optparse import OptionParser
-from time import time
+from time import perf_counter
 from collections import Counter
 
 from bitarray import bitarray
@@ -31,13 +31,13 @@
     with open(filename, 'rb') as fi:
         plain = bytearray(fi.read())
 
-    t0 = time()
+    t0 = perf_counter()
     freq = Counter(plain)
-    print('count:     %9.6f sec' % (time() - t0))
+    print('count:     %9.3f ms' % (1000.0 * (perf_counter() - t0)))
 
-    t0 = time()
+    t0 = perf_counter()
     tree = _huffman_tree(freq)
-    print('tree:      %9.6f sec' % (time() - t0))
+    print('tree:      %9.3f ms' % (1000.0 * (perf_counter() - t0)))
 
     if opts.tree:
         write_dot(tree, 'tree.dot', 0 in plain)
@@ -50,22 +50,22 @@
 
     a = bitarray()
 
-    t0 = time()
+    t0 = perf_counter()
     a.encode(code, plain)
-    print('C encode:  %9.6f sec' % (time() - t0))
+    print('C encode:  %9.3f ms' % (1000.0 * (perf_counter() - t0)))
 
     # Time the decode function above
-    t0 = time()
+    t0 = perf_counter()
     res = bytearray(iterdecode(tree, a))
-    Py_time = time() - t0
-    print('Py decode: %9.6f sec' % Py_time)
+    Py_time = perf_counter() - t0
+    print('Py decode: %9.3f ms' % (1000.0 * Py_time))
     assert res == plain
 
     # Time the decode method which is implemented in C
-    t0 = time()
+    t0 = perf_counter()
     res = bytearray(a.iterdecode(code))
-    C_time = time() - t0
-    print('C decode:  %9.6f sec' % C_time)
+    C_time = perf_counter() - t0
+    print('C decode:  %9.3f ms' % (1000.0 * C_time))
     assert res == plain
 
     print('Ratio: %f' % (Py_time / C_time))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/puff/gunzip.py 
new/bitarray-2.7.5/examples/puff/gunzip.py
--- old/bitarray-2.7.3/examples/puff/gunzip.py  2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/examples/puff/gunzip.py  2023-06-10 21:56:55.000000000 
+0200
@@ -17,7 +17,7 @@
         12: "QDOS",   13: "Acorn RISCOS", 255: "Unknown",
     }
 
-    def read_null_terminated_string(self) -> str:
+    def read_nul_terminated_string(self) -> str:
         a = bytearray()
         while True:
             b: int = self.read_uint(8)
@@ -25,7 +25,12 @@
                 return a.decode("UTF-8")
             a.append(b)
 
-    def read_header(self) -> None:
+    def read_header(self, verbose=False) -> None:
+
+        def vprint(txt):
+            if verbose:
+                print(txt)
+
         if self.read_uint(16) != 0x8b1f:
             raise ValueError("Invalid GZIP magic number")
 
@@ -36,44 +41,44 @@
         # reserved flags
         flags: int = self.read_uint(8)
         if flags & 0xe0 != 0:
-            print("Reserved flags are set")
+            vprint("Reserved flags are set")
 
         # modification time
         mtime = self.read_uint(32)
         if mtime != 0:
             dt = datetime.datetime.fromtimestamp(mtime, datetime.timezone.utc)
-            print(f"Last modified: {dt}")
+            vprint(f"Last modified: {dt}")
         else:
-            print("Last modified: N/A")
+            vprint("Last modified: N/A")
 
         # extra flags
         extraflags = self.read_uint(8)
         if extraflags == 2:
-            print("Extra flags: Maximum compression")
+            vprint("Extra flags: Maximum compression")
         elif extraflags == 4:
-            print("Extra flags: Fastest compression")
+            vprint("Extra flags: Fastest compression")
         else:
-            print(f"Extra flags: Unknown ({extraflags})")
+            vprint(f"Extra flags: Unknown ({extraflags})")
 
         osbyte = self.read_uint(8)
         osstr: str = self.operating_system.get(osbyte, "Really unknown")
-        print(f"Operating system: {osstr}")
+        vprint(f"Operating system: {osstr}")
 
         # handle assorted flags
         if flags & 0x01:
-            print("Flag: Text")
+            vprint("Flag: Text")
         if flags & 0x04:
-            print("Flag: Extra")
+            vprint("Flag: Extra")
             count: int = self.read_uint(16)
             while count > 0:  # Skip extra data
                 self.read_uint(8)
                 count -= 1
         if flags & 0x08:
-            print(f"File name: {self.read_null_terminated_string()}")
+            vprint(f"File name: {self.read_nul_terminated_string()}")
         if flags & 0x02:
-            print(f"Header CRC-16: {self.read_uint(16):04X}")
+            vprint(f"Header CRC-16: {self.read_uint(16):04X}")
         if flags & 0x10:
-            print(f"Comment: {self.read_null_terminated_string()}")
+            vprint(f"Comment: {self.read_nul_terminated_string()}")
 
     def check_footer(self, decomp):
         self.align_byte_boundary()
@@ -104,7 +109,7 @@
     # gunzip: the output is accumulated in a bytearray
     output = bytearray()
     d = GunZip(input_bits, output)
-    d.read_header()
+    d.read_header(verbose=opts.verbose)
     stats = d.process_blocks(print_dot if opts.progress else None)
     d.check_footer(output)
 
@@ -119,26 +124,35 @@
 
 
 def main():
-    from optparse import OptionParser
+    from argparse import ArgumentParser
+
+    p = ArgumentParser()
 
-    p = OptionParser(usage="usage: %prog [options] IN_FILE.gz [OUT_FILE]")
+    p.add_argument('-p', '--progress', action="store_true",
+                   help="show progress while decoding")
 
-    p.add_option('-p', '--progress',
-                 action="store_true",
-                 help="show progress while decoding")
+    p.add_argument('-s', '--stats', action="store_true",
+                   help="show block statistics")
 
-    p.add_option('-s', '--stats',
-                 action="store_true",
-                 help="show block statistics")
+    p.add_argument('-v', '--verbose', action="store_true")
 
-    opts, args = p.parse_args()
+    p.add_argument('-o', '--out', action="store", dest='dst',
+                   help='output filename')
 
-    if len(args) not in (1, 2):
-        p.error("incorrect number of arguments")
+    p.add_argument(dest='src', metavar='SRC')
 
-    out_file = args[1] if len(args) == 2 else 'out'
+    args = p.parse_args()
+
+    if args.dst is None:
+        if args.src.endswith('.gz'):
+            args.dst = args.src[:-3]
+        elif args.src.endswith('.tgz'):
+            args.dst = '%s.tar' % args.src[:-4]
+        else:
+            p.error('cannot guess uncompressed filename from %r, '
+                    'please provide -o/-out option' % args.src)
 
-    decompress_file(args[0], out_file, opts)
+    decompress_file(args.src, args.dst, args)
 
 
 if __name__ == "__main__":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/puff/setup.py 
new/bitarray-2.7.5/examples/puff/setup.py
--- old/bitarray-2.7.3/examples/puff/setup.py   2023-02-21 00:10:29.000000000 
+0100
+++ new/bitarray-2.7.5/examples/puff/setup.py   2023-06-10 21:56:55.000000000 
+0200
@@ -1,4 +1,5 @@
 import sys
+from os.path import dirname
 
 if sys.version_info[:2] < (3, 6):
     sys.exit("This example requires Python 3.6 or higher")
@@ -8,12 +9,14 @@
 except ImportError:
     from distutils.core import setup, Extension
 
+import bitarray
+
 
 setup(
     name = "puff",
     ext_modules = [Extension(
         name = "_puff",
         sources = ["_puff.c"],
-        include_dirs = ["../../bitarray"],
+        include_dirs = [dirname(bitarray.__file__)],
     )],
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/sparse/Makefile 
new/bitarray-2.7.5/examples/sparse/Makefile
--- old/bitarray-2.7.3/examples/sparse/Makefile 1970-01-01 01:00:00.000000000 
+0100
+++ new/bitarray-2.7.5/examples/sparse/Makefile 2023-06-10 21:56:55.000000000 
+0200
@@ -0,0 +1,9 @@
+test:
+       python tests.py -
+       python tests.py flips
+       python tests.py ones
+
+
+clean:
+       rm -f *.pyc *~
+       rm -rf __pycache__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/sparse/compress.py 
new/bitarray-2.7.5/examples/sparse/compress.py
--- old/bitarray-2.7.3/examples/sparse/compress.py      2023-02-21 
00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/examples/sparse/compress.py      2023-06-10 
21:56:55.000000000 +0200
@@ -5,7 +5,7 @@
 import bz2
 import gzip
 import sys
-from time import time
+from time import perf_counter
 from collections import Counter
 from itertools import islice
 from random import random, randint
@@ -177,11 +177,11 @@
             ('gzip', gzip.compress, gzip.decompress),
             ('bz2', bz2.compress, bz2.decompress)]:
         x = a if name in ('serialize', 'vl', 'sc') else raw
-        t0 = time()
+        t0 = perf_counter()
         b = f_e(x)  # compression
-        t1 = time()
+        t1 = perf_counter()
         c = f_d(b)  # decompression
-        t2 = time()
+        t2 = perf_counter()
         print("    %-11s  %16.3f  %16.3f  %16.4f" %
               (name, 1000 * (t1 - t0), 1000 * (t2 - t1), len(b) / len(raw)))
         assert c == x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/utf-8.py 
new/bitarray-2.7.5/examples/utf-8.py
--- old/bitarray-2.7.3/examples/utf-8.py        1970-01-01 01:00:00.000000000 
+0100
+++ new/bitarray-2.7.5/examples/utf-8.py        2023-06-10 21:56:55.000000000 
+0200
@@ -0,0 +1,40 @@
+from bitarray import bitarray
+from bitarray.util import ba2int, pprint
+
+
+# See: https://en.wikipedia.org/wiki/UTF-8
+
+def code_point(u):
+    print('character:', u)
+    b = u.encode('utf-8')
+    print('hexadecimal:', ' '.join('%02x' % i for i in bytearray(b)))
+    a = bitarray(endian='big')
+    a.frombytes(b)
+    pprint(a)
+
+    # calculate binary code point from binary UTF-8 representation
+    if a[0:1] == bitarray('0'):
+        c = a[1:8]
+        assert len(a) == 8
+    elif a[0:3] == bitarray('110'):
+        c = a[3:8] + a[10:16]
+        assert a[8:10] == bitarray('10')
+        assert len(a) == 16
+    elif a[0:4] == bitarray('1110'):
+        c = a[4:8] + a[10:16] + a[18:24]
+        assert a[8:10] == a[16:18] == bitarray('10')
+        assert len(a) == 24
+    elif a[0:5] == bitarray('11110'):
+        c = a[5:8] + a[10:16] + a[18:24] + a[26:32]
+        assert a[8:10] == a[16:18] == a[24:26] == bitarray('10')
+        assert len(a) == 32
+    else:
+        raise
+    code_point = ba2int(c)
+
+    print('code point:', hex(code_point))
+    print()
+
+
+for u in u'\u0024 \u00a2 \u20ac \ud55c \U00010348 \U0010ffff'.split():
+    code_point(u)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitarray-2.7.3/examples/utf8.py 
new/bitarray-2.7.5/examples/utf8.py
--- old/bitarray-2.7.3/examples/utf8.py 2023-02-21 00:10:29.000000000 +0100
+++ new/bitarray-2.7.5/examples/utf8.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,41 +0,0 @@
-from __future__ import print_function
-from bitarray import bitarray
-from bitarray.util import ba2int, pprint
-
-
-# See: https://en.wikipedia.org/wiki/UTF-8
-
-def code_point(u):
-    print('character:', u)
-    b = u.encode('utf-8')
-    print('hexadecimal:', ' '.join('%02x' % i for i in bytearray(b)))
-    a = bitarray(endian='big')
-    a.frombytes(b)
-    pprint(a)
-
-    # calculate binary code point from binary UTF-8 representation
-    if a[0:1] == bitarray('0'):
-        c = a[1:8]
-        assert len(a) == 8
-    elif a[0:3] == bitarray('110'):
-        c = a[3:8] + a[10:16]
-        assert a[8:10] == bitarray('10')
-        assert len(a) == 16
-    elif a[0:4] == bitarray('1110'):
-        c = a[4:8] + a[10:16] + a[18:24]
-        assert a[8:10] == a[16:18] == bitarray('10')
-        assert len(a) == 24
-    elif a[0:5] == bitarray('11110'):
-        c = a[5:8] + a[10:16] + a[18:24] + a[26:32]
-        assert a[8:10] == a[16:18] == a[24:26] == bitarray('10')
-        assert len(a) == 32
-    else:
-        raise
-    code_point = ba2int(c)
-
-    print('code point:', hex(code_point))
-    print()
-
-
-for u in u'\u0024 \u00a2 \u20ac \ud55c \U00010348 \U0010ffff'.split():
-    code_point(u)

Reply via email to