summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2021-10-24 22:50:38 +0200
committerMichał Górny <mgorny@gentoo.org>2021-10-24 22:52:01 +0200
commitfb1e7ebd3b199eadab7869aca983bc5e8b3ead85 (patch)
tree276e01dc087a43a90918aa5730d2423f16a07d99
parentdev-python/sentry-sdk: Remove old (diff)
downloadgentoo-fb1e7ebd3b199eadab7869aca983bc5e8b3ead85.tar.gz
gentoo-fb1e7ebd3b199eadab7869aca983bc5e8b3ead85.tar.bz2
gentoo-fb1e7ebd3b199eadab7869aca983bc5e8b3ead85.zip
dev-python/numpy: Backport unaligned access fix
Closes: https://bugs.gentoo.org/805974 Signed-off-by: Michał Górny <mgorny@gentoo.org>
-rw-r--r--dev-python/numpy/files/numpy-1.21.3-unaligned-array.patch45
-rw-r--r--dev-python/numpy/numpy-1.21.1-r1.ebuild (renamed from dev-python/numpy/numpy-1.21.1.ebuild)1
-rw-r--r--dev-python/numpy/numpy-1.21.2-r1.ebuild (renamed from dev-python/numpy/numpy-1.21.3.ebuild)1
-rw-r--r--dev-python/numpy/numpy-1.21.3-r1.ebuild (renamed from dev-python/numpy/numpy-1.21.2.ebuild)1
4 files changed, 48 insertions, 0 deletions
diff --git a/dev-python/numpy/files/numpy-1.21.3-unaligned-array.patch b/dev-python/numpy/files/numpy-1.21.3-unaligned-array.patch
new file mode 100644
index 000000000000..8d04cc0968dc
--- /dev/null
+++ b/dev-python/numpy/files/numpy-1.21.3-unaligned-array.patch
@@ -0,0 +1,45 @@
+From d9bbd60d0f2896d1b1f865e6035dccb12db4b1a0 Mon Sep 17 00:00:00 2001
+From: Sebastian Berg <sebastian@sipsolutions.net>
+Date: Sat, 23 Oct 2021 22:54:21 -0500
+Subject: [PATCH] BUG: Do not use nonzero fastpath on unaligned arrays
+
+The fast-path does not handle unalgined access, previously only
+bools had a fast path (and bools are by definition always aligned
+since they are stored in a single byte/char).
+
+Closes gh-19592
+---
+ numpy/core/src/multiarray/item_selection.c | 19 +++++++------------
+ 1 file changed, 7 insertions(+), 12 deletions(-)
+
+diff --git a/numpy/core/src/multiarray/item_selection.c b/numpy/core/src/multiarray/item_selection.c
+index ee66378a938..33d378c2b58 100644
+--- a/numpy/core/src/multiarray/item_selection.c
++++ b/numpy/core/src/multiarray/item_selection.c
+@@ -2398,19 +2398,14 @@ PyArray_CountNonzero(PyArrayObject *self)
+ npy_intp *strideptr, *innersizeptr;
+ NPY_BEGIN_THREADS_DEF;
+
+- // Special low-overhead version specific to the boolean/int types
+ dtype = PyArray_DESCR(self);
+- switch(dtype->kind) {
+- case 'u':
+- case 'i':
+- case 'b':
+- if (dtype->elsize > 8) {
+- break;
+- }
+- return count_nonzero_int(
+- PyArray_NDIM(self), PyArray_BYTES(self), PyArray_DIMS(self),
+- PyArray_STRIDES(self), dtype->elsize
+- );
++ /* Special low-overhead version specific to the boolean/int types */
++ if (PyArray_ISALIGNED(self) && (
++ PyDataType_ISBOOL(dtype) || PyDataType_ISINTEGER(dtype))) {
++ return count_nonzero_int(
++ PyArray_NDIM(self), PyArray_BYTES(self), PyArray_DIMS(self),
++ PyArray_STRIDES(self), dtype->elsize
++ );
+ }
+
+ nonzero = PyArray_DESCR(self)->f->nonzero;
diff --git a/dev-python/numpy/numpy-1.21.1.ebuild b/dev-python/numpy/numpy-1.21.1-r1.ebuild
index 080c7b210c95..b25c2008d413 100644
--- a/dev-python/numpy/numpy-1.21.1.ebuild
+++ b/dev-python/numpy/numpy-1.21.1-r1.ebuild
@@ -45,6 +45,7 @@ BDEPEND="
PATCHES=(
"${FILESDIR}"/numpy-1.21.0-no-hardcode-blasv2.patch
+ "${FILESDIR}"/numpy-1.21.3-unaligned-array.patch
)
distutils_enable_tests pytest
diff --git a/dev-python/numpy/numpy-1.21.3.ebuild b/dev-python/numpy/numpy-1.21.2-r1.ebuild
index cd54f4bc4a63..be58d11ab9f4 100644
--- a/dev-python/numpy/numpy-1.21.3.ebuild
+++ b/dev-python/numpy/numpy-1.21.2-r1.ebuild
@@ -45,6 +45,7 @@ BDEPEND="
PATCHES=(
"${FILESDIR}"/numpy-1.21.0-no-hardcode-blasv2.patch
+ "${FILESDIR}"/numpy-1.21.3-unaligned-array.patch
)
distutils_enable_tests pytest
diff --git a/dev-python/numpy/numpy-1.21.2.ebuild b/dev-python/numpy/numpy-1.21.3-r1.ebuild
index cd54f4bc4a63..d9b1d09193dd 100644
--- a/dev-python/numpy/numpy-1.21.2.ebuild
+++ b/dev-python/numpy/numpy-1.21.3-r1.ebuild
@@ -45,6 +45,7 @@ BDEPEND="
PATCHES=(
"${FILESDIR}"/numpy-1.21.0-no-hardcode-blasv2.patch
+ "${FILESDIR}"/${P}-unaligned-array.patch
)
distutils_enable_tests pytest