From f824e735d7c8027a34334b04362b485703a6b642 Mon Sep 17 00:00:00 2001 From: Mamoru TASAKA Date: Jul 03 2022 07:24:35 +0000 Subject: Fix linalg.lapack syevr segfault (#2099102) --- diff --git a/scipy-1.8.1-syevr-operator-order-explicit.patch b/scipy-1.8.1-syevr-operator-order-explicit.patch new file mode 100644 index 0000000..590c1bb --- /dev/null +++ b/scipy-1.8.1-syevr-operator-order-explicit.patch @@ -0,0 +1,69 @@ +--- scipy-1.8.1/scipy/linalg/flapack_sym_herm.pyf.src.debug 2022-04-30 06:14:37.965527300 +0900 ++++ scipy-1.8.1/scipy/linalg/flapack_sym_herm.pyf.src 2022-07-01 22:51:14.057047006 +0900 +@@ -772,10 +772,10 @@ + integer intent(hide),dimension(liwork),depend(liwork) :: iwork + + intent(out),dimension(n),depend(n) :: w +- intent(out),dimension((compute_v?MAX(0,n):0),(compute_v?(*range=='I'?iu-il+1:MAX(1,n)):0)),depend(n,compute_v,range,iu,il) :: z ++ intent(out),dimension((compute_v?MAX(0,n):0),(compute_v?((*range=='I')?(iu-il+1):MAX(1,n)):0)),depend(n,compute_v,range,iu,il) :: z + integer intent(out) :: m + ! Only returned if range=='A' or range=='I' and il, iu = 1, n +- integer intent(out),dimension((compute_v?(2*(*range=='A'||(*range=='I' && iu-il+1==n)?n:0)):0)),depend(n,iu,il,compute_v,range) :: isuppz ++ integer intent(out),dimension((compute_v?(2*((*range=='A')||((*range=='I') && (iu-il+1==n))?n:0)):0)),depend(n,iu,il,compute_v,range) :: isuppz + integer intent(out) :: info + + end subroutine syevr +@@ -844,7 +844,7 @@ + integer intent(hide),dimension(liwork),depend(liwork) :: iwork + + intent(out),dimension(n),depend(n) :: w +- intent(out),dimension((compute_v?MAX(0,n):0),(compute_v?(*range=='I'?iu-il+1:MAX(1,n)):0)),depend(n,compute_v,range,iu,il) :: z ++ intent(out),dimension((compute_v?MAX(0,n):0),(compute_v?((*range=='I')?(iu-il+1):MAX(1,n)):0)),depend(n,compute_v,range,iu,il) :: z + integer intent(out) :: m + ! MKL implementation has a bug that still accesses isuppz array even if + ! range=='A' or range=='I' and il, iu = 1, n which is not the case for +@@ -852,7 +852,7 @@ + ! of the settings. It is wasteful but necessary. The bug is fixed in + ! mkl 2020 update 2 and when time comes change this line with + ! +- ! integer intent(out),dimension((compute_v?(2*(*range=='A'||(*range=='I' && iu-il+1==n)?n:0)):0)),depend(n,iu,il,range,compute_v) :: isuppz ++ ! integer intent(out),dimension((compute_v?(2*(*range=='A'||((*range=='I') && (iu-il+1==n))?n:0)):0)),depend(n,iu,il,range,compute_v) :: isuppz + ! + integer intent(out),dimension(2*max(1,n)),depend(n) :: isuppz + integer intent(out) :: info +@@ -919,7 +919,7 @@ + integer intent(hide),dimension(5*n),depend(n) :: iwork + + intent(out),dimension(n),depend(n) :: w +- intent(out),dimension((compute_v?MAX(0,n):0),(compute_v?(*range=='I'?iu-il+1:MAX(1,n)):0)),depend(n,compute_v,range,iu,il) :: z ++ intent(out),dimension((compute_v?MAX(0,n):0),(compute_v?((*range=='I')?(iu-il+1):MAX(1,n)):0)),depend(n,compute_v,range,iu,il) :: z + integer intent(out) :: m + integer intent(out),dimension((compute_v?n:0)),depend(compute_v,n):: ifail + integer intent(out) :: info +@@ -984,7 +984,7 @@ + intent(hide),dimension(7*n),depend(n) :: rwork + + intent(out),dimension(n),depend(n) :: w +- intent(out),dimension((compute_v*n),(compute_v?(*range=='I'?iu-il+1:MAX(1,n)):0)),depend(compute_v,range,n,iu,il) :: z ++ intent(out),dimension((compute_v*n),(compute_v?((*range=='I')?(iu-il+1):MAX(1,n)):0)),depend(compute_v,range,n,iu,il) :: z + integer intent(out) :: m + integer intent(out),dimension(compute_v*n),depend(compute_v,n):: ifail + integer intent(out) :: info +@@ -1222,7 +1222,7 @@ + integer intent(hide),dimension(5*n),depend(n) :: iwork + + intent(out),dimension(n),depend(n) :: w +- intent(out),dimension((jobz[0]=='V'?MAX(0,n):0),(jobz[0]=='V'?(range[0]=='I'?iu-il+1:MAX(1,n)):0)),depend(n,jobz,range,iu,il) :: z ++ intent(out),dimension((jobz[0]=='V'?MAX(0,n):0),(jobz[0]=='V'?((range[0]=='I')?(iu-il+1):MAX(1,n)):0)),depend(n,jobz,range,iu,il) :: z + integer intent(out) :: m + integer intent(out),dimension((jobz[0]=='N'?0:n)),depend(jobz,n):: ifail + integer intent(out) :: info +@@ -1293,7 +1293,7 @@ + intent(hide),dimension(7*n),depend(n) :: rwork + + intent(out),dimension(n),depend(n) :: w +- intent(out),dimension((jobz[0]=='V'?MAX(0,n):0),(jobz[0]=='V'?(range[0]=='I'?iu-il+1:MAX(1,n)):0)),depend(n,jobz,range,iu,il) :: z ++ intent(out),dimension((jobz[0]=='V'?MAX(0,n):0),(jobz[0]=='V'?((range[0]=='I')?(iu-il+1):MAX(1,n)):0)),depend(n,jobz,range,iu,il) :: z + integer intent(out) :: m + integer intent(out),dimension((jobz[0]=='N'?0:n)),depend(jobz,n):: ifail + integer intent(out) :: info diff --git a/scipy.spec b/scipy.spec index 6ca12ff..613a030 100644 --- a/scipy.spec +++ b/scipy.spec @@ -25,7 +25,7 @@ Summary: Scientific Tools for Python Name: scipy Version: 1.8.1 -Release: 4%{?dist} +Release: 5%{?dist} # BSD -- whole package except: # Boost -- scipy/special/cephes/scipy_iv.c @@ -33,6 +33,10 @@ Release: 4%{?dist} License: BSD and Boost and Public Domain Url: http://www.scipy.org/scipylib/index.html Source0: https://github.com/scipy/scipy/releases/download/v%{version}/scipy-%{version}.tar.gz +# https://bugzilla.redhat.com/show_bug.cgi?id=2099102 +# https://github.com/scipy/scipy/issues/16527 +# https://github.com/scipy/scipy/pull/16528 +Patch0: scipy-1.8.1-syevr-operator-order-explicit.patch BuildRequires: fftw-devel, suitesparse-devel BuildRequires: %{blaslib}-devel @@ -208,6 +212,9 @@ popd %endif %changelog +* Sun Jul 3 2022 Mamoru TASAKA - 1.8.1-5 +- Fix linalg.lapack syevr segfault (#2099102) + * Fri Jun 17 2022 Python Maint - 1.8.1-4 - Rebuilt for Python 3.11