Your message dated Sat, 11 Mar 2017 17:43:27 +0100
with message-id <[email protected]>
and subject line Re: Bug#857266: unblock: bottleneck/1.2.0-6
has caused the Debian Bug report #857266,
regarding unblock: bottleneck/1.2.0-6
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
857266: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=857266
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: [email protected]
Usertags: unblock

Please unblock package bottleneck

The last upload of src:bottleneck which migrated to Stretch (1.2.0-4)
suffers regressions (including a segfault) with the latest release of
Numpy (1.12.x).

These were found later after the freeze deadline when I started
packaging src:python-xarray. Its test suite reveiled the regressions,
which were not caught by the upstream one. The regressions have now been
fixed after iterating with both upstream and Numpy.

I have cherry-picked the relevant fixes onto the packaging in unstable
(1.2.0-5, 1.2.0-6). Please consider applying the debdiff between 1.2.0-4
and 1.2.0-6 attached below.

Cheers,
Ghis

unblock bottleneck/1.2.0-6

-- System Information:
Debian Release: 9.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.9.0-2-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
diff -Nru bottleneck-1.2.0/debian/changelog bottleneck-1.2.0/debian/changelog
--- bottleneck-1.2.0/debian/changelog   2017-01-25 12:24:12.000000000 +0000
+++ bottleneck-1.2.0/debian/changelog   2017-02-26 13:58:26.000000000 +0000
@@ -1,3 +1,22 @@
+bottleneck (1.2.0-6) unstable; urgency=medium
+
+  * Cherry-pick upstream fix for segfaults happening while running the tests.
+    New patch 0003-Fix-segfault-caused-by-bad-refcount.patch (Closes: #856141)
+  * Run autopkgtests for all supported Python versions
+
+ -- Ghislain Antony Vaillant <[email protected]>  Sun, 26 Feb 2017 13:58:26 
+0000
+
+bottleneck (1.2.0-5) unstable; urgency=medium
+
+  [ Ghislain Antony Vaillant ]
+  * Cherry-pick upstream fix for Numpy 1.12
+    - New patch 0002-Fix-issue-with-relaxed-strides.patch
+
+  [ Pietro Battiston ]
+  * Added Ghislain Antony Vaillant as Uploader
+
+ -- Pietro Battiston <[email protected]>  Tue, 31 Jan 2017 13:49:00 +0100
+
 bottleneck (1.2.0-4) unstable; urgency=medium
 
   [ Ghislain Antony Vaillant ]
diff -Nru bottleneck-1.2.0/debian/control bottleneck-1.2.0/debian/control
--- bottleneck-1.2.0/debian/control     2017-01-19 20:30:29.000000000 +0000
+++ bottleneck-1.2.0/debian/control     2017-02-07 07:39:59.000000000 +0000
@@ -1,5 +1,6 @@
 Source: bottleneck
 Maintainer: Pietro Battiston <[email protected]>
+Uploaders: Ghislain Antony Vaillant <[email protected]>
 Section: python
 Priority: optional
 Build-Depends: dh-python, python-setuptools (>= 0.6b3), python3-setuptools,
diff -Nru 
bottleneck-1.2.0/debian/patches/0002-Fix-issue-with-relaxed-strides.patch 
bottleneck-1.2.0/debian/patches/0002-Fix-issue-with-relaxed-strides.patch
--- bottleneck-1.2.0/debian/patches/0002-Fix-issue-with-relaxed-strides.patch   
1970-01-01 01:00:00.000000000 +0100
+++ bottleneck-1.2.0/debian/patches/0002-Fix-issue-with-relaxed-strides.patch   
2017-02-07 07:39:59.000000000 +0000
@@ -0,0 +1,43 @@
+From: Keith Goodman <[email protected]>
+Date: Sun, 29 Jan 2017 07:19:35 -0800
+Subject: Fix issue with relaxed strides
+
+---
+ bottleneck/src/iterators.h | 6 ++++--
+ bottleneck/tests/util.py   | 1 +
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/bottleneck/src/iterators.h b/bottleneck/src/iterators.h
+index 3ac68cb..5bb88d6 100644
+--- a/bottleneck/src/iterators.h
++++ b/bottleneck/src/iterators.h
+@@ -81,13 +81,15 @@ init_iter_all(iter *it, PyArrayObject *a, int ravel, int 
anyorder)
+         it->length = 1;
+         it->astride = 0;
+     }
+-    else if (C_CONTIGUOUS(a)) {
++    /* The &&! in the next two else ifs is to deal with relaxed
++     * stride checking introduced in numpy 1.12.0; see gh #161 */
++    else if (C_CONTIGUOUS(a) && !F_CONTIGUOUS(a)) {
+         it->ndim_m2 = -1;
+         it->axis = ndim - 1;
+         it->length = PyArray_SIZE(a);
+         it->astride = strides[ndim - 1];
+     }
+-    else if (F_CONTIGUOUS(a)) {
++    else if (F_CONTIGUOUS(a) && !C_CONTIGUOUS(a)) {
+         if (anyorder || !ravel) {
+             it->ndim_m2 = -1;
+             it->length = PyArray_SIZE(a);
+diff --git a/bottleneck/tests/util.py b/bottleneck/tests/util.py
+index 7f1f2a7..15e4238 100644
+--- a/bottleneck/tests/util.py
++++ b/bottleneck/tests/util.py
+@@ -155,6 +155,7 @@ def array_generator(func_name, dtypes):
+                     yield a.reshape(shape)
+ 
+     # non-contiguous arrays
++    yield np.array([[1, 2], [3, 4]])[:, [1]]  # gh 161
+     for dtype in dtypes:
+         # 1d
+         a = np.arange(12).astype(dtype)
diff -Nru 
bottleneck-1.2.0/debian/patches/0003-Fix-segfaults-caused-by-bad-refcount.patch 
bottleneck-1.2.0/debian/patches/0003-Fix-segfaults-caused-by-bad-refcount.patch
--- 
bottleneck-1.2.0/debian/patches/0003-Fix-segfaults-caused-by-bad-refcount.patch 
    1970-01-01 01:00:00.000000000 +0100
+++ 
bottleneck-1.2.0/debian/patches/0003-Fix-segfaults-caused-by-bad-refcount.patch 
    2017-02-26 13:58:26.000000000 +0000
@@ -0,0 +1,124 @@
+From: Keith Goodman <[email protected]>
+Date: Thu, 9 Feb 2017 12:39:01 -0800
+Subject: Fix segfaults caused by bad refcount
+
+---
+ bottleneck/src/iterators.h       | 11 +++++++++--
+ bottleneck/src/reduce_template.c | 12 ++++++++++++
+ 2 files changed, 21 insertions(+), 2 deletions(-)
+
+diff --git a/bottleneck/src/iterators.h b/bottleneck/src/iterators.h
+index 5bb88d6..563a823 100644
+--- a/bottleneck/src/iterators.h
++++ b/bottleneck/src/iterators.h
+@@ -21,6 +21,7 @@ struct _iter {
+     npy_intp   astrides[NPY_MAXDIMS]; /* a.strides, a.strides[axis] removed */
+     npy_intp   shape[NPY_MAXDIMS];    /* a.shape, a.shape[axis] removed */
+     char       *pa;     /* pointer to data corresponding to indices */
++    PyArrayObject *a_ravel; /* NULL or pointer to ravelled input array */
+ };
+ typedef struct _iter iter;
+ 
+@@ -59,6 +60,11 @@ init_iter_one(iter *it, PyArrayObject *a, int axis)
+     }
+ }
+ 
++/*
++ * If both ravel != 0 and it.a_ravel != NULL then you are responsible for
++ * calling Py_DECREF(it.a_ravel) after you are done with the iterator.
++ * See nanargmin for an example.
++ */
+ static BN_INLINE void
+ init_iter_all(iter *it, PyArrayObject *a, int ravel, int anyorder)
+ {
+@@ -70,6 +76,7 @@ init_iter_all(iter *it, PyArrayObject *a, int ravel, int 
anyorder)
+     it->axis = 0;
+     it->its = 0;
+     it->nits = 1;
++    it->a_ravel = NULL;
+ 
+     if (ndim == 1) {
+         it->ndim_m2 = -1;
+@@ -101,7 +108,7 @@ init_iter_all(iter *it, PyArrayObject *a, int ravel, int 
anyorder)
+             } else {
+                 a = (PyArrayObject *)PyArray_Ravel(a, NPY_CORDER);
+             }
+-            Py_DECREF(a);
++            it->a_ravel = a;
+             it->length = PyArray_DIM(a, 0);
+             it->astride = PyArray_STRIDE(a, 0);
+         }
+@@ -113,7 +120,7 @@ init_iter_all(iter *it, PyArrayObject *a, int ravel, int 
anyorder)
+         } else {
+             a = (PyArrayObject *)PyArray_Ravel(a, NPY_CORDER);
+         }
+-        Py_DECREF(a);
++        it->a_ravel = a;
+         it->length = PyArray_DIM(a, 0);
+         it->astride = PyArray_STRIDE(a, 0);
+     }
+diff --git a/bottleneck/src/reduce_template.c 
b/bottleneck/src/reduce_template.c
+index 3d5183e..2bdf8dc 100644
+--- a/bottleneck/src/reduce_template.c
++++ b/bottleneck/src/reduce_template.c
+@@ -11,6 +11,12 @@
+     iter it; \
+     init_iter_all(&it, a, 1, 0);
+ 
++/* used with INIT_ALL_RAVEL */
++#define DECREF_INIT_ALL_RAVEL \
++    if (it.a_ravel != NULL) { \
++        Py_DECREF(it.a_ravel); \
++    }
++
+ #define INIT_ONE(dtype0, dtype1) \
+     iter it; \
+     PyObject *y; \
+@@ -545,6 +551,7 @@ REDUCE_ALL(NAME, DTYPE0)
+     Py_ssize_t idx = 0;
+     INIT_ALL_RAVEL
+     if (SIZE == 0) {
++        DECREF_INIT_ALL_RAVEL
+         VALUE_ERR("numpy.NAME raises on a.size==0 and axis=None; "
+                   "So Bottleneck too.");
+         return NULL;
+@@ -559,6 +566,7 @@ REDUCE_ALL(NAME, DTYPE0)
+         }
+     }
+     BN_END_ALLOW_THREADS
++    DECREF_INIT_ALL_RAVEL
+     if (allnan) {
+         VALUE_ERR("All-NaN slice encountered");
+         return NULL;
+@@ -613,6 +621,7 @@ REDUCE_ALL(NAME, DTYPE0)
+     npy_DTYPE0 ai, extreme = BIG_INT;
+     INIT_ALL_RAVEL
+     if (SIZE == 0) {
++        DECREF_INIT_ALL_RAVEL
+         VALUE_ERR("numpy.NAME raises on a.size==0 and axis=None; "
+                   "So Bottleneck too.");
+         return NULL;
+@@ -626,6 +635,7 @@ REDUCE_ALL(NAME, DTYPE0)
+         }
+     }
+     BN_END_ALLOW_THREADS
++    DECREF_INIT_ALL_RAVEL
+     return PyInt_FromLong(idx);
+ }
+ 
+@@ -844,6 +854,7 @@ REDUCE_ALL(NAME, DTYPE0)
+     done:
+     BUFFER_DELETE
+     BN_END_ALLOW_THREADS
++    DECREF_INIT_ALL_RAVEL
+     return PyFloat_FromDouble(med);
+ }
+ 
+@@ -888,6 +899,7 @@ REDUCE_ALL(median, DTYPE0)
+         BUFFER_DELETE
+     }
+     BN_END_ALLOW_THREADS
++    DECREF_INIT_ALL_RAVEL
+     return PyFloat_FromDouble(med);
+ }
+ 
diff -Nru bottleneck-1.2.0/debian/patches/series 
bottleneck-1.2.0/debian/patches/series
--- bottleneck-1.2.0/debian/patches/series      2017-01-19 20:30:29.000000000 
+0000
+++ bottleneck-1.2.0/debian/patches/series      2017-02-26 13:58:26.000000000 
+0000
@@ -1 +1,3 @@
 0001_normalize_version.patch
+0002-Fix-issue-with-relaxed-strides.patch
+0003-Fix-segfaults-caused-by-bad-refcount.patch
diff -Nru bottleneck-1.2.0/debian/tests/control 
bottleneck-1.2.0/debian/tests/control
--- bottleneck-1.2.0/debian/tests/control       2017-01-22 13:08:05.000000000 
+0000
+++ bottleneck-1.2.0/debian/tests/control       2017-02-26 13:58:26.000000000 
+0000
@@ -1,9 +1,17 @@
-Test-Command: cd $AUTOPKGTEST_TMP
- ; python -c "import bottleneck as bn; bn.test()"
-Depends: python-bottleneck, python-nose
+Test-Command: set -e
+ ; for py in $(pyversions -r 2>/dev/null)
+ ; do cd "$AUTOPKGTEST_TMP"
+ ; echo "Testing with $py:"
+ ; $py -c "import bottleneck as bn; bn.test()"
+ ; done
+Depends: python-all, python-bottleneck, python-nose
 Restrictions: allow-stderr
 
-Test-Command: cd $AUTOPKGTEST_TMP
- ; python3 -c "import bottleneck as bn; bn.test()"
-Depends: python3-bottleneck, python3-nose
+Test-Command: set -e
+ ; for py in $(py3versions -r 2>/dev/null)
+ ; do cd "$AUTOPKGTEST_TMP"
+ ; echo "Testing with $py:"
+ ; $py -c "import bottleneck as bn; bn.test()"
+ ; done
+Depends: python3-all, python3-bottleneck, python3-nose
 Restrictions: allow-stderr

--- End Message ---
--- Begin Message ---
On 09/03/17 11:45, Ghislain Antony Vaillant wrote:
> Package: release.debian.org
> Severity: normal
> User: [email protected]
> Usertags: unblock
> 
> Please unblock package bottleneck
> 
> The last upload of src:bottleneck which migrated to Stretch (1.2.0-4)
> suffers regressions (including a segfault) with the latest release of
> Numpy (1.12.x).
> 
> These were found later after the freeze deadline when I started
> packaging src:python-xarray. Its test suite reveiled the regressions,
> which were not caught by the upstream one. The regressions have now been
> fixed after iterating with both upstream and Numpy.
> 
> I have cherry-picked the relevant fixes onto the packaging in unstable
> (1.2.0-5, 1.2.0-6). Please consider applying the debdiff between 1.2.0-4
> and 1.2.0-6 attached below.

This is already in testing:

bottleneck | 1.2.0-6       | testing        | source
bottleneck | 1.2.0-6       | unstable       | source

Cheers,
Emilio

--- End Message ---

Reply via email to