From 360e8eada96a3c23a2da2eb57bf28e79e7ee5779 Mon Sep 17 00:00:00 2001 From: eabdullin Date: Wed, 20 Nov 2024 13:32:36 +0000 Subject: [PATCH] import RHEL 10 Beta scipy-1.11.3-11.el10 --- .gitignore | 2 +- .scipy.metadata | 1 - 19443.patch | 28 ++ SOURCES/acceptable_failure_rate.patch | 28 -- SOURCES/ckdtree_bugfix.patch | 140 ------ SOURCES/numpy-deprecation-warnings.patch | 589 ----------------------- SPECS/scipy.spec => scipy.spec | 548 ++++++++++++++++----- sources | 1 + 8 files changed, 457 insertions(+), 880 deletions(-) delete mode 100644 .scipy.metadata create mode 100644 19443.patch delete mode 100644 SOURCES/acceptable_failure_rate.patch delete mode 100644 SOURCES/ckdtree_bugfix.patch delete mode 100644 SOURCES/numpy-deprecation-warnings.patch rename SPECS/scipy.spec => scipy.spec (54%) create mode 100644 sources diff --git a/.gitignore b/.gitignore index 8a96a81..405de7c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/scipy-1.3.1.tar.gz +scipy-1.11.3.tar.gz diff --git a/.scipy.metadata b/.scipy.metadata deleted file mode 100644 index 3337b48..0000000 --- a/.scipy.metadata +++ /dev/null @@ -1 +0,0 @@ -3c079c09ecb614d8056135edd1cc6da51d18df0a SOURCES/scipy-1.3.1.tar.gz diff --git a/19443.patch b/19443.patch new file mode 100644 index 0000000..af9c880 --- /dev/null +++ b/19443.patch @@ -0,0 +1,28 @@ +From 28413806316049c09bb4b0182f652cce0ba82a50 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Fri, 27 Oct 2023 16:47:37 -0400 +Subject: [PATCH] TST: Fix #19442 minimally + +Use a sorted version of the set REAL_DTYPES to parameterize +test_b_orthonormalize. +--- + scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py b/scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py +index c17d37051fca..fd6f166dc62d 100644 +--- a/scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py ++++ b/scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py +@@ -101,9 +101,9 @@ def test_MikotaPair(): + + @pytest.mark.parametrize("n", [50]) + @pytest.mark.parametrize("m", [1, 2, 10]) +-@pytest.mark.parametrize("Vdtype", REAL_DTYPES) +-@pytest.mark.parametrize("Bdtype", REAL_DTYPES) +-@pytest.mark.parametrize("BVdtype", REAL_DTYPES) ++@pytest.mark.parametrize("Vdtype", sorted(REAL_DTYPES, key=str)) ++@pytest.mark.parametrize("Bdtype", sorted(REAL_DTYPES, key=str)) ++@pytest.mark.parametrize("BVdtype", sorted(REAL_DTYPES, key=str)) + def test_b_orthonormalize(n, m, Vdtype, Bdtype, BVdtype): + """Test B-orthonormalization by Cholesky with callable 'B'. + The function '_b_orthonormalize' is key in LOBPCG but may diff --git a/SOURCES/acceptable_failure_rate.patch b/SOURCES/acceptable_failure_rate.patch deleted file mode 100644 index a476409..0000000 --- a/SOURCES/acceptable_failure_rate.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/scipy/conftest.py b/scipy/conftest.py -index e5fac23..1a971e8 100644 ---- a/scipy/conftest.py -+++ b/scipy/conftest.py -@@ -3,6 +3,7 @@ from __future__ import division, absolute_import, print_function - - import os - import pytest -+import _pytest - import warnings - - from distutils.version import LooseVersion -@@ -37,3 +38,15 @@ def check_fpu_mode(request): - warnings.warn("FPU mode changed from {0:#x} to {1:#x} during " - "the test".format(old_mode, new_mode), - category=FPUModeChangeWarning, stacklevel=0) -+ -+ -+ACCEPTABLE_FAILURE_RATE = int(os.environ.get('ACCEPTABLE_FAILURE_RATE', 0)) -+ -+ -+@pytest.hookimpl() -+def pytest_sessionfinish(session, exitstatus): -+ if exitstatus != _pytest.main.EXIT_TESTSFAILED: -+ return -+ failure_rate = (100.0 * session.testsfailed) / session.testscollected -+ if failure_rate <= ACCEPTABLE_FAILURE_RATE: -+ session.exitstatus = 0 diff --git a/SOURCES/ckdtree_bugfix.patch b/SOURCES/ckdtree_bugfix.patch deleted file mode 100644 index 071bf07..0000000 --- a/SOURCES/ckdtree_bugfix.patch +++ /dev/null @@ -1,140 +0,0 @@ -From d945dfa4063c5cd7169acd117c15f23ba68027ed Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Wed, 31 Jul 2019 23:31:22 +0300 -Subject: [PATCH 1/2] BUG: spatial: use c++11 construct for getting start of - vector - -gcc 9.1.1 on Fedora throws asserts and crashes at runtime on -`&x.front()` when `x` is empty, so use a different construct for getting -the beginning of the data block. ---- - scipy/spatial/ckdtree.pyx | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - -diff --git a/scipy/spatial/ckdtree.pyx b/scipy/spatial/ckdtree.pyx -index e2eea8c9097..884d49e1d34 100644 ---- a/scipy/spatial/ckdtree.pyx -+++ b/scipy/spatial/ckdtree.pyx -@@ -190,7 +190,7 @@ cdef class coo_entries: - res_dtype = np.dtype(_dtype, align = True) - n = self.buf.size() - if NPY_LIKELY(n > 0): -- pr = &self.buf.front() -+ pr = self.buf.data() - uintptr = ( pr) - dtype = np.dtype(np.uint8) - self.__array_interface__ = dict( -@@ -213,7 +213,7 @@ cdef class coo_entries: - dict res_dict - n = self.buf.size() - if NPY_LIKELY(n > 0): -- pr = &self.buf.front() -+ pr = self.buf.data() - res_dict = dict() - for k in range(n): - i = pr[k].i -@@ -263,7 +263,7 @@ cdef class ordered_pairs: - np.intp_t n - n = self.buf.size() - if NPY_LIKELY(n > 0): -- pr = &self.buf.front() -+ pr = self.buf.data() - uintptr = ( pr) - dtype = np.dtype(np.intp) - self.__array_interface__ = dict( -@@ -284,7 +284,7 @@ cdef class ordered_pairs: - np.intp_t i, n - set results - results = set() -- pair = &self.buf.front() -+ pair = self.buf.data() - n = self.buf.size() - if sizeof(long) < sizeof(np.intp_t): - # Needed for Python 2.x on Win64 -@@ -593,7 +593,7 @@ cdef class cKDTree: - cself = self.cself - # finalize the tree points, this calls _post_init_traverse - -- cself.ctree = &cself.tree_buffer.front() -+ cself.ctree = cself.tree_buffer.data() - - # set the size attribute after tree_buffer is built - cself.size = cself.tree_buffer.size() -@@ -971,7 +971,7 @@ cdef class cKDTree: - m = (vvres[i].size()) - tmp = m * [None] - -- cur = &vvres[i].front() -+ cur = vvres[i].data() - for j in range(m): - tmp[j] = cur[0] - cur += 1 -@@ -1067,7 +1067,7 @@ cdef class cKDTree: - tmp = m * [None] - with nogil: - sort(vvres[i].begin(), vvres[i].end()) -- cur = &vvres[i].front() -+ cur = vvres[i].data() - for j in range(m): - tmp[j] = cur[0] - cur += 1 -@@ -1492,7 +1492,7 @@ cdef class cKDTree: - cdef ckdtree * cself = self.cself - size = cself.tree_buffer.size() * sizeof(ckdtreenode) - -- cdef np.ndarray tree = np.asarray( &cself.tree_buffer.front()) -+ cdef np.ndarray tree = np.asarray( cself.tree_buffer.data()) - - state = (tree.copy(), self.data.copy(), self.n, self.m, self.leafsize, - self.maxes, self.mins, self.indices.copy(), -@@ -1511,7 +1511,7 @@ cdef class cKDTree: - cself.tree_buffer = new vector[ckdtreenode]() - cself.tree_buffer.resize(tree.size // sizeof(ckdtreenode)) - -- mytree = np.asarray( &cself.tree_buffer.front()) -+ mytree = np.asarray( cself.tree_buffer.data()) - - # set raw pointers - self._pre_init() - -From ad0f91438f49bfe277e32d2689aefeb0c11c789f Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Wed, 31 Jul 2019 23:41:40 +0300 -Subject: [PATCH 2/2] BLD: spatial: set c++ std flags for ckdtree - ---- - scipy/spatial/setup.py | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/scipy/spatial/setup.py b/scipy/spatial/setup.py -index d7e334876df..19d78593c5e 100644 ---- a/scipy/spatial/setup.py -+++ b/scipy/spatial/setup.py -@@ -4,6 +4,13 @@ - import glob - - -+def pre_build_hook(build_ext, ext): -+ from scipy._build_utils.compiler_helper import get_cxx_std_flag -+ std_flag = get_cxx_std_flag(build_ext._cxx_compiler) -+ if std_flag is not None: -+ ext.extra_compile_args.append(std_flag) -+ -+ - def configuration(parent_package='', top_path=None): - from numpy.distutils.misc_util import Configuration, get_numpy_include_dirs - from numpy.distutils.misc_util import get_info as get_misc_info -@@ -55,10 +62,12 @@ def configuration(parent_package='', top_path=None): - ckdtree_headers = [join('ckdtree', 'src', x) for x in ckdtree_headers] - - ckdtree_dep = ['ckdtree.cxx'] + ckdtree_headers + ckdtree_src -- config.add_extension('ckdtree', -+ ext = config.add_extension('ckdtree', - sources=['ckdtree.cxx'] + ckdtree_src, - depends=ckdtree_dep, - include_dirs=inc_dirs + [join('ckdtree', 'src')]) -+ ext._pre_build_hook = pre_build_hook -+ - # _distance_wrap - config.add_extension('_distance_wrap', - sources=[join('src', 'distance_wrap.c')], diff --git a/SOURCES/numpy-deprecation-warnings.patch b/SOURCES/numpy-deprecation-warnings.patch deleted file mode 100644 index 5099879..0000000 --- a/SOURCES/numpy-deprecation-warnings.patch +++ /dev/null @@ -1,589 +0,0 @@ -diff -ru scipy-1.2.1/scipy/odr/__odrpack.c scipy-1.2.1_patched/scipy/odr/__odrpack.c ---- scipy-1.2.1/scipy/odr/__odrpack.c 2019-01-28 04:57:51.000000000 +0100 -+++ scipy-1.2.1_patched/scipy/odr/__odrpack.c 2019-06-06 16:11:32.947892754 +0200 -@@ -9,6 +9,8 @@ - * - */ - -+#define PY_SSIZE_T_CLEAN -+#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION - #include "odrpack.h" - - -@@ -44,7 +46,7 @@ - double *fjacb, double *fjacd, int *istop) - { - PyObject *arg01, *arglist; -- PyObject *result; -+ PyObject *result = NULL; - PyArrayObject *result_array = NULL; - PyArrayObject *pyXplusD; - void *beta_dst; -@@ -57,14 +59,14 @@ - dim2[0] = *m; - dim2[1] = *n; - pyXplusD = (PyArrayObject *) PyArray_SimpleNew(2, dim2, NPY_DOUBLE); -- memcpy(pyXplusD->data, (void *)xplusd, (*m) * (*n) * sizeof(double)); -+ memcpy(PyArray_DATA(pyXplusD), (void *)xplusd, (*m) * (*n) * sizeof(double)); - } - else - { - npy_intp dim1[1]; - dim1[0] = *n; - pyXplusD = (PyArrayObject *) PyArray_SimpleNew(1, dim1, NPY_DOUBLE); -- memcpy(pyXplusD->data, (void *)xplusd, (*n) * sizeof(double)); -+ memcpy(PyArray_DATA(pyXplusD), (void *)xplusd, (*n) * sizeof(double)); - } - - PyTuple_SetItem(arg01, 0, odr_global.pyBeta); -@@ -84,7 +86,7 @@ - Py_DECREF(arg01); - *istop = 0; - -- beta_dst = ((PyArrayObject *) (odr_global.pyBeta))->data; -+ beta_dst = (PyArray_DATA((PyArrayObject *) odr_global.pyBeta)); - if (beta != beta_dst) { - memcpy(beta_dst, (void *)beta, (*np) * sizeof(double)); - } -@@ -121,7 +123,7 @@ - "Result from function call is not a proper array of floats."); - } - -- memcpy((void *)f, result_array->data, (*n) * (*nq) * sizeof(double)); -+ memcpy((void *)f, PyArray_DATA(result_array), (*n) * (*nq) * sizeof(double)); - Py_DECREF(result_array); - } - -@@ -161,7 +163,7 @@ - { - /* result_array should be rank-3 */ - -- if (result_array->nd != 3) -+ if (PyArray_NDIM(result_array) != 3) - { - Py_DECREF(result_array); - PYERR2(odr_error, "Beta Jacobian is not rank-3"); -@@ -171,14 +173,14 @@ - { - /* result_array should be rank-2 */ - -- if (result_array->nd != 2) -+ if (PyArray_NDIM(result_array) != 2) - { - Py_DECREF(result_array); - PYERR2(odr_error, "Beta Jacobian is not rank-2"); - } - } - -- memcpy((void *)fjacb, result_array->data, -+ memcpy((void *)fjacb, PyArray_DATA(result_array), - (*n) * (*nq) * (*np) * sizeof(double)); - Py_DECREF(result_array); - -@@ -220,7 +222,7 @@ - { - /* result_array should be rank-3 */ - -- if (result_array->nd != 3) -+ if (PyArray_NDIM(result_array) != 3) - { - Py_DECREF(result_array); - PYERR2(odr_error, "xplusd Jacobian is not rank-3"); -@@ -230,7 +232,7 @@ - { - /* result_array should be rank-2 */ - -- if (result_array->nd != 2) -+ if (PyArray_NDIM(result_array) != 2) - { - Py_DECREF(result_array); - PYERR2(odr_error, "xplusd Jacobian is not rank-2"); -@@ -240,14 +242,14 @@ - { - /* result_array should be rank-1 */ - -- if (result_array->nd != 1) -+ if (PyArray_NDIM(result_array) != 1) - { - Py_DECREF(result_array); - PYERR2(odr_error, "xplusd Jacobian is not rank-1"); - } - } - -- memcpy((void *)fjacd, result_array->data, -+ memcpy((void *)fjacd, PyArray_DATA(result_array), - (*n) * (*nq) * (*m) * sizeof(double)); - Py_DECREF(result_array); - } -@@ -291,7 +293,7 @@ - return NULL; - } - -- lwkmn = work->dimensions[0]; -+ lwkmn = PyArray_DIMS(work)[0]; - - F_FUNC(dwinf,DWINF)(&n, &m, &np, &nq, &ldwe, &ld2we, &isodr, - &delta, &eps, &xplus, &fn, &sd, &vcv, &rvar, &wss, &wssde, -@@ -352,15 +354,15 @@ - wrk6--; - wrk7--; - -- dim1[0] = beta->dimensions[0]; -+ dim1[0] = PyArray_DIMS(beta)[0]; - sd_beta = (PyArrayObject *) PyArray_SimpleNew(1, dim1, NPY_DOUBLE); -- dim2[0] = beta->dimensions[0]; -- dim2[1] = beta->dimensions[0]; -+ dim2[0] = PyArray_DIMS(beta)[0]; -+ dim2[1] = PyArray_DIMS(beta)[0]; - cov_beta = (PyArrayObject *) PyArray_SimpleNew(2, dim2, NPY_DOUBLE); - -- memcpy(sd_beta->data, (void *)((double *)(work->data) + sd), -+ memcpy(PyArray_DATA(sd_beta), (void *)((double *)(PyArray_DATA(work)) + sd), - np * sizeof(double)); -- memcpy(cov_beta->data, (void *)((double *)(work->data) + vcv), -+ memcpy(PyArray_DATA(cov_beta), (void *)((double *)(PyArray_DATA(work)) + vcv), - np * np * sizeof(double)); - - if (!full_output) -@@ -427,21 +429,21 @@ - fnA = (PyArrayObject *) PyArray_SimpleNew(2, dim2, NPY_DOUBLE); - } - -- memcpy(deltaA->data, (void *)((double *)(work->data) + delta), -+ memcpy(PyArray_DATA(deltaA), (void *)((double *)(PyArray_DATA(work)) + delta), - m * n * sizeof(double)); -- memcpy(epsA->data, (void *)((double *)(work->data) + eps), -+ memcpy(PyArray_DATA(epsA), (void *)((double *)(PyArray_DATA(work)) + eps), - nq * n * sizeof(double)); -- memcpy(xplusA->data, (void *)((double *)(work->data) + xplus), -+ memcpy(PyArray_DATA(xplusA), (void *)((double *)(PyArray_DATA(work)) + xplus), - m * n * sizeof(double)); -- memcpy(fnA->data, (void *)((double *)(work->data) + fn), -+ memcpy(PyArray_DATA(fnA), (void *)((double *)(PyArray_DATA(work)) + fn), - nq * n * sizeof(double)); - -- res_var = *((double *)(work->data) + rvar); -- sum_square = *((double *)(work->data) + wss); -- sum_square_delta = *((double *)(work->data) + wssde); -- sum_square_eps = *((double *)(work->data) + wssep); -- inv_condnum = *((double *)(work->data) + rcond); -- rel_error = *((double *)(work->data) + eta); -+ res_var = *((double *)(PyArray_DATA(work)) + rvar); -+ sum_square = *((double *)(PyArray_DATA(work)) + wss); -+ sum_square_delta = *((double *)(PyArray_DATA(work)) + wssde); -+ sum_square_eps = *((double *)(PyArray_DATA(work)) + wssep); -+ inv_condnum = *((double *)(PyArray_DATA(work)) + rcond); -+ rel_error = *((double *)(PyArray_DATA(work)) + eta); - - retobj = - Py_BuildValue -@@ -623,7 +625,7 @@ - PYERR(PyExc_ValueError, - "y could not be made into a suitable array"); - } -- n = y->dimensions[y->nd - 1]; /* pick the last dimension */ -+ n = PyArray_DIMS(y)[PyArray_NDIM(y) - 1]; /* pick the last dimension */ - if ((x = - (PyArrayObject *) PyArray_CopyFromObject(px, NPY_DOUBLE, 1, - 2)) == NULL) -@@ -631,18 +633,18 @@ - PYERR(PyExc_ValueError, - "x could not be made into a suitable array"); - } -- if (n != x->dimensions[x->nd - 1]) -+ if (n != PyArray_DIMS(x)[PyArray_NDIM(x) - 1]) - { - PYERR(PyExc_ValueError, - "x and y don't have matching numbers of observations"); - } -- if (y->nd == 1) -+ if (PyArray_NDIM(y) == 1) - { - nq = 1; - } - else - { -- nq = y->dimensions[0]; -+ nq = PyArray_DIMS(y)[0]; - } - - ldx = ldy = n; -@@ -664,17 +666,17 @@ - "x could not be made into a suitable array"); - } - -- n = x->dimensions[x->nd - 1]; -+ n = PyArray_DIMS(x)[PyArray_NDIM(x) - 1]; - ldx = n; - } - -- if (x->nd == 1) -+ if (PyArray_NDIM(x) == 1) - { - m = 1; - } - else - { -- m = x->dimensions[0]; -+ m = PyArray_DIMS(x)[0]; - } /* x, y */ - - if ((beta = -@@ -684,14 +686,14 @@ - PYERR(PyExc_ValueError, - "initbeta could not be made into a suitable array"); - } -- np = beta->dimensions[0]; -+ np = PyArray_DIMS(beta)[0]; - - if (pwe == NULL) - { - ldwe = ld2we = 1; - dim1[0] = n; - we = (PyArrayObject *) PyArray_SimpleNew(1, dim1, NPY_DOUBLE); -- ((double *)(we->data))[0] = -1.0; -+ ((double *)(PyArray_DATA(we)))[0] = -1.0; - } - else if (PyNumber_Check(pwe) && !PyArray_Check(pwe)) - { -@@ -711,11 +713,11 @@ - we = (PyArrayObject *) PyArray_SimpleNew(3, dim3, NPY_DOUBLE); - if (implicit) - { -- ((double *)(we->data))[0] = val; -+ ((double *)(PyArray_DATA(we)))[0] = val; - } - else - { -- ((double *)(we->data))[0] = -val; -+ ((double *)(PyArray_DATA(we)))[0] = -val; - } - ldwe = ld2we = 1; - } -@@ -730,29 +732,29 @@ - PYERR(PyExc_ValueError, "could not convert we to a suitable array"); - } - -- if (we->nd == 1 && nq == 1) -+ if (PyArray_NDIM(we) == 1 && nq == 1) - { - - ldwe = n; - ld2we = 1; - } -- else if (we->nd == 1 && we->dimensions[0] == nq) -+ else if (PyArray_NDIM(we) == 1 && PyArray_DIMS(we)[0] == nq) - { - /* we is a rank-1 array with diagonal weightings to be broadcast - * to all observations */ - ldwe = 1; - ld2we = 1; - } -- else if (we->nd == 3 && we->dimensions[0] == nq -- && we->dimensions[1] == nq && we->dimensions[2] == 1) -+ else if (PyArray_NDIM(we) == 3 && PyArray_DIMS(we)[0] == nq -+ && PyArray_DIMS(we)[1] == nq && PyArray_DIMS(we)[2] == 1) - { - /* we is a rank-3 array with the covariant weightings - to be broadcast to all observations */ - ldwe = 1; - ld2we = nq; - } -- else if (we->nd == 2 && we->dimensions[0] == nq -- && we->dimensions[1] == nq) -+ else if (PyArray_NDIM(we) == 2 && PyArray_DIMS(we)[0] == nq -+ && PyArray_DIMS(we)[1] == nq) - { - /* we is a rank-2 array with the full covariant weightings - to be broadcast to all observations */ -@@ -760,16 +762,16 @@ - ld2we = nq; - } - -- else if (we->nd == 2 && we->dimensions[0] == nq -- && we->dimensions[1] == n) -+ else if (PyArray_NDIM(we) == 2 && PyArray_DIMS(we)[0] == nq -+ && PyArray_DIMS(we)[1] == n) - { - /* we is a rank-2 array with the diagonal elements of the - covariant weightings for each observation */ - ldwe = n; - ld2we = 1; - } -- else if (we->nd == 3 && we->dimensions[0] == nq -- && we->dimensions[1] == nq && we->dimensions[2] == n) -+ else if (PyArray_NDIM(we) == 3 && PyArray_DIMS(we)[0] == nq -+ && PyArray_DIMS(we)[1] == nq && PyArray_DIMS(we)[2] == n) - { - /* we is the full specification of the covariant weights - for each observation */ -@@ -788,7 +790,7 @@ - - dim1[0] = m; - wd = (PyArrayObject *) PyArray_SimpleNew(1, dim1, NPY_DOUBLE); -- ((double *)(wd->data))[0] = -1.0; -+ ((double *)(PyArray_DATA(wd)))[0] = -1.0; - } - else if (PyNumber_Check(pwd) && !PyArray_Check(pwd)) - { -@@ -806,7 +808,7 @@ - dim3[1] = 1; - dim3[2] = m; - wd = (PyArrayObject *) PyArray_SimpleNew(3, dim3, NPY_DOUBLE); -- ((double *)(wd->data))[0] = -val; -+ ((double *)(PyArray_DATA(wd)))[0] = -val; - ldwd = ld2wd = 1; - } - else if (PySequence_Check(pwd)) -@@ -820,12 +822,12 @@ - PYERR(PyExc_ValueError, "could not convert wd to a suitable array"); - } - -- if (wd->nd == 1 && m == 1) -+ if (PyArray_NDIM(wd) == 1 && m == 1) - { - ldwd = n; - ld2wd = 1; - } -- else if (wd->nd == 1 && wd->dimensions[0] == m) -+ else if (PyArray_NDIM(wd) == 1 && PyArray_DIMS(wd)[0] == m) - { - /* wd is a rank-1 array with diagonal weightings to be broadcast - * to all observations */ -@@ -833,16 +835,16 @@ - ld2wd = 1; - } - -- else if (wd->nd == 3 && wd->dimensions[0] == m -- && wd->dimensions[1] == m && wd->dimensions[2] == 1) -+ else if (PyArray_NDIM(wd) == 3 && PyArray_DIMS(wd)[0] == m -+ && PyArray_DIMS(wd)[1] == m && PyArray_DIMS(wd)[2] == 1) - { - /* wd is a rank-3 array with the covariant wdightings - to be broadcast to all observations */ - ldwd = 1; - ld2wd = m; - } -- else if (wd->nd == 2 && wd->dimensions[0] == m -- && wd->dimensions[1] == m) -+ else if (PyArray_NDIM(wd) == 2 && PyArray_DIMS(wd)[0] == m -+ && PyArray_DIMS(wd)[1] == m) - { - /* wd is a rank-2 array with the full covariant weightings - to be broadcast to all observations */ -@@ -850,16 +852,16 @@ - ld2wd = m; - } - -- else if (wd->nd == 2 && wd->dimensions[0] == m -- && wd->dimensions[1] == n) -+ else if (PyArray_NDIM(wd) == 2 && PyArray_DIMS(wd)[0] == m -+ && PyArray_DIMS(wd)[1] == n) - { - /* wd is a rank-2 array with the diagonal elements of the - covariant weightings for each observation */ - ldwd = n; - ld2wd = 1; - } -- else if (wd->nd == 3 && wd->dimensions[0] == m -- && wd->dimensions[1] == m && wd->dimensions[2] == n) -+ else if (PyArray_NDIM(wd) == 3 && PyArray_DIMS(wd)[0] == m -+ && PyArray_DIMS(wd)[1] == m && PyArray_DIMS(wd)[2] == n) - { - /* wd is the full specification of the covariant weights - for each observation */ -@@ -878,7 +880,7 @@ - { - dim1[0] = np; - ifixb = (PyArrayObject *) PyArray_SimpleNew(1, dim1, NPY_INT); -- *(int *)(ifixb->data) = -1; /* set first element negative */ -+ *(int *)(PyArray_DATA(ifixb)) = -1; /* set first element negative */ - } - else - { -@@ -892,7 +894,7 @@ - "could not convert ifixb to a suitable array"); - } - -- if (ifixb->dimensions[0] != np) -+ if (PyArray_DIMS(ifixb)[0] != np) - { - PYERR(PyExc_ValueError, - "could not convert ifixb to a suitable array"); -@@ -904,7 +906,7 @@ - dim2[0] = m; - dim2[1] = 1; - ifixx = (PyArrayObject *) PyArray_SimpleNew(2, dim2, NPY_INT); -- *(int *)(ifixx->data) = -1; /* set first element negative */ -+ *(int *)(PyArray_DATA(ifixx)) = -1; /* set first element negative */ - ldifx = 1; - } - else -@@ -919,16 +921,16 @@ - "could not convert ifixx to a suitable array"); - } - -- if (ifixx->nd == 1 && ifixx->dimensions[0] == m) -+ if (PyArray_NDIM(ifixx) == 1 && PyArray_DIMS(ifixx)[0] == m) - { - ldifx = 1; - } -- else if (ifixx->nd == 1 && ifixx->dimensions[0] == n && m == 1) -+ else if (PyArray_NDIM(ifixx) == 1 && PyArray_DIMS(ifixx)[0] == n && m == 1) - { - ldifx = n; - } -- else if (ifixx->nd == 2 && ifixx->dimensions[0] == m -- && ifixx->dimensions[1] == n) -+ else if (PyArray_NDIM(ifixx) == 2 && PyArray_DIMS(ifixx)[0] == m -+ && PyArray_DIMS(ifixx)[1] == n) - { - ldifx = n; - } -@@ -957,14 +959,14 @@ - { - dim1[0] = np; - stpb = (PyArrayObject *) PyArray_SimpleNew(1, dim1, NPY_DOUBLE); -- *(double *)(stpb->data) = 0.0; -+ *(double *)(PyArray_DATA(stpb)) = 0.0; - } - else /* pstpb is a sequence */ - { - if ((stpb = - (PyArrayObject *) PyArray_CopyFromObject(pstpb, NPY_DOUBLE, 1, - 1)) == NULL -- || stpb->dimensions[0] != np) -+ || PyArray_DIMS(stpb)[0] != np) - { - PYERR(PyExc_ValueError, - "could not convert stpb to a suitable array"); -@@ -976,7 +978,7 @@ - dim2[0] = 1; - dim2[1] = m; - stpd = (PyArrayObject *) PyArray_SimpleNew(2, dim2, NPY_DOUBLE); -- *(double *)(stpd->data) = 0.0; -+ *(double *)(PyArray_DATA(stpd)) = 0.0; - ldstpd = 1; - } - else -@@ -989,16 +991,16 @@ - "could not convert stpb to a suitable array"); - } - -- if (stpd->nd == 1 && stpd->dimensions[0] == m) -+ if (PyArray_NDIM(stpd) == 1 && PyArray_DIMS(stpd)[0] == m) - { - ldstpd = 1; - } -- else if (stpd->nd == 1 && stpd->dimensions[0] == n && m == 1) -+ else if (PyArray_NDIM(stpd) == 1 && PyArray_DIMS(stpd)[0] == n && m == 1) - { - ldstpd = n; - } -- else if (stpd->nd == 2 && stpd->dimensions[0] == n && -- stpd->dimensions[1] == m) -+ else if (PyArray_NDIM(stpd) == 2 && PyArray_DIMS(stpd)[0] == n && -+ PyArray_DIMS(stpd)[1] == m) - { - ldstpd = n; - } -@@ -1008,14 +1010,14 @@ - { - dim1[0] = np; - sclb = (PyArrayObject *) PyArray_SimpleNew(1, dim1, NPY_DOUBLE); -- *(double *)(sclb->data) = 0.0; -+ *(double *)(PyArray_DATA(sclb)) = 0.0; - } - else /* psclb is a sequence */ - { - if ((sclb = - (PyArrayObject *) PyArray_CopyFromObject(psclb, NPY_DOUBLE, 1, - 1)) == NULL -- || sclb->dimensions[0] != np) -+ || PyArray_DIMS(sclb)[0] != np) - { - PYERR(PyExc_ValueError, - "could not convert sclb to a suitable array"); -@@ -1027,7 +1029,7 @@ - dim2[0] = 1; - dim2[1] = n; - scld = (PyArrayObject *) PyArray_SimpleNew(2, dim2, NPY_DOUBLE); -- *(double *)(scld->data) = 0.0; -+ *(double *)(PyArray_DATA(scld)) = 0.0; - ldscld = 1; - } - else -@@ -1040,16 +1042,16 @@ - "could not convert stpb to a suitable array"); - } - -- if (scld->nd == 1 && scld->dimensions[0] == m) -+ if (PyArray_NDIM(scld) == 1 && PyArray_DIMS(scld)[0] == m) - { - ldscld = 1; - } -- else if (scld->nd == 1 && scld->dimensions[0] == n && m == 1) -+ else if (PyArray_NDIM(scld) == 1 && PyArray_DIMS(scld)[0] == n && m == 1) - { - ldscld = n; - } -- else if (scld->nd == 2 && scld->dimensions[0] == n && -- scld->dimensions[1] == m) -+ else if (PyArray_NDIM(scld) == 2 && PyArray_DIMS(scld)[0] == n && -+ PyArray_DIMS(scld)[1] == m) - { - ldscld = n; - } -@@ -1110,9 +1112,9 @@ - PYERR(PyExc_ValueError, - "could not convert work to a suitable array"); - } -- if (work->dimensions[0] < lwork) -+ if (PyArray_DIMS(work)[0] < lwork) - { -- printf("%d %d\n", work->dimensions[0], lwork); -+ printf("%ld %d\n", PyArray_DIMS(work)[0], lwork); - PYERR(PyExc_ValueError, "work is too small"); - } - } -@@ -1133,7 +1135,7 @@ - "could not convert iwork to a suitable array"); - } - -- if (iwork->dimensions[0] < liwork) -+ if (PyArray_DIMS(iwork)[0] < liwork) - { - PYERR(PyExc_ValueError, "iwork is too small"); - } -@@ -1170,19 +1172,18 @@ - Py_INCREF(beta); - odr_global.extra_args = extra_args; - Py_XINCREF(extra_args); -- -- /* now call DODRC */ -- F_FUNC(dodrc,DODRC)(fcn_callback, &n, &m, &np, &nq, (double *)(beta->data), -- (double *)(y->data), &ldy, (double *)(x->data), &ldx, -- (double *)(we->data), &ldwe, &ld2we, -- (double *)(wd->data), &ldwd, &ld2wd, -- (int *)(ifixb->data), (int *)(ifixx->data), &ldifx, -- &job, &ndigit, &taufac, &sstol, &partol, &maxit, -- &iprint, &lunerr, &lunrpt, -- (double *)(stpb->data), (double *)(stpd->data), &ldstpd, -- (double *)(sclb->data), (double *)(scld->data), &ldscld, -- (double *)(work->data), &lwork, (int *)(iwork->data), &liwork, -- &info); -+ /* now call DODRC */ -+ F_FUNC(dodrc,DODRC)(fcn_callback, &n, &m, &np, &nq, (double *)(PyArray_DATA(beta)), -+ (double *)(PyArray_DATA(y)), &ldy, (double *)(PyArray_DATA(x)), &ldx, -+ (double *)(PyArray_DATA(we)), &ldwe, &ld2we, -+ (double *)(PyArray_DATA(wd)), &ldwd, &ld2wd, -+ (int *)(PyArray_DATA(ifixb)), (int *)(PyArray_DATA(ifixx)), &ldifx, -+ &job, &ndigit, &taufac, &sstol, &partol, &maxit, -+ &iprint, &lunerr, &lunrpt, -+ (double *)(PyArray_DATA(stpb)), (double *)(PyArray_DATA(stpd)), &ldstpd, -+ (double *)(PyArray_DATA(sclb)), (double *)(PyArray_DATA(scld)), &ldscld, -+ (double *)(PyArray_DATA(work)), &lwork, (int *)(PyArray_DATA(iwork)), &liwork, -+ &info); - - result = gen_output(n, m, np, nq, ldwe, ld2we, - beta, work, iwork, isodr, info, full_output); diff --git a/SPECS/scipy.spec b/scipy.spec similarity index 54% rename from SPECS/scipy.spec rename to scipy.spec index 45fc6b5..92cd461 100644 --- a/SPECS/scipy.spec +++ b/scipy.spec @@ -1,69 +1,95 @@ # without means enabled %bcond_with doc -%bcond_with tests +# Pythran is an optional build dependency. +# When used, it makes some modules faster, +# but it is usually not available soon enough for new major Python versions. +%if 0%{?rhel} +%bcond_with pythran +%bcond_with pooch +%else +%bcond_without pythran +%bcond_without pooch +%endif + +# The code is not safe to build with LTO +%global _lto_cflags %{nil} + +%ifarch %{ix86} +# On i686, there is a confusion whether Fortran INTEGER should be +# translated as int or long. +# +%global build_type_safety_c 2 +%endif # Set to pre-release version suffix if building pre-release, else %%{nil} %global rcver %{nil} +%if 0%{?fedora} >= 33 || 0%{?rhel} >= 9 +%global blaslib flexiblas +%global blasvar %{nil} +%else +%global blaslib openblas +%global blasvar p +%endif + Summary: Scientific Tools for Python Name: scipy -Version: 1.3.1 -Release: 5%{?dist} +Version: 1.11.3 +Release: 11%{?dist} -# BSD -- whole package except: -# Boost -- scipy/special/cephes/scipy_iv.c -# Public Domain -- scipy/odr/__odrpack.c -License: BSD and Boost and Public Domain +# BSD-3-Clause -- whole package except: +# BSD-2-Clause -- scipy/_lib/_pep440.py +# scipy/_lib/decorator.py +# scipy/optimize/lbfgsb_src +# scipy/special/_ellip_harm.pxd +# MIT -- scipy/cluster/_optimal_leaf_ordering.pyx +# scipy/io/_idl.py +# scipy/linalg/_basic.py (in part) +# scipy/optimize/_highs +# scipy/optimize/_lbfgsb_py.py +# scipy/optimize/_tnc.py +# scipy/optimize/_trlib +# scipy/optimize/tnc +# scipy/special/Faddeeva.{cc,hh} +# BSL-1.0 -- scipy/_lib/boost_math +# scipy/special/cephes +# Boehm-GC -- scipy/sparse/linalg/_dsolve/SuperLU +# Qhull -- scipy/spatial/qhull_src +# LicenseRef-Fedora-Public-Domain -- scipy/odr/__odrpack.c +License: BSD-3-Clause AND BSD-2-Clause AND MIT AND BSL-1.0 AND Boehm-GC AND Qhull AND LicenseRef-Fedora-Public-Domain Url: http://www.scipy.org/scipylib/index.html Source0: https://github.com/scipy/scipy/releases/download/v%{version}/scipy-%{version}.tar.gz -# Previously we ignored the tests results, because they don't always pass -# Instead of ignoring the results entirely, we allow certain failure rate -# https://stackoverflow.com/a/47731333/1839451 -Patch0: acceptable_failure_rate.patch +# TST: Fix #19442 minimally +# https://github.com/scipy/scipy/pull/19443 +# +# Fixes: +# +# BUG: Error collecting tests due to inconsistent parameterization order in +# test_b_orthonormalize +# https://github.com/scipy/scipy/issues/19442 +Patch: https://github.com/scipy/scipy/pull/19443.patch -# The C API of PyArrayObject has changed in Python 3.8 and the -# structure fields accessed in __odrpack.c are now deprecated. -Patch1: numpy-deprecation-warnings.patch +BuildRequires: %{blaslib}-devel +BuildRequires: gcc-gfortran, gcc-c++ -# Bugfix of cKDTree -# PR: https://github.com/scipy/scipy/pull/10567 -# Issue: https://github.com/scipy/scipy/issues/11021 -Patch2: ckdtree_bugfix.patch +BuildRequires: pybind11-devel +BuildRequires: python3-devel, python3-numpy-f2py -# Exclude i686 arch. Due to a modularity issue it's being added to the -# x86_64 compose of CRB, but we don't want to ship it at all. -# See: https://projects.engineering.redhat.com/browse/RCM-72605 -ExcludeArch: i686 - -BuildRequires: fftw-devel, blas-devel, lapack-devel, suitesparse-devel -%ifarch %{openblas_arches} -BuildRequires: openblas-devel -%else -BuildRequires: atlas-devel +BuildRequires: python3-pytest +BuildRequires: python3-pytest-timeout +%if ! 0%{?rhel} +BuildRequires: python3-pytest-xdist %endif -BuildRequires: gcc-gfortran, swig, gcc-c++ -BuildRequires: qhull-devel -BuildRequires: /usr/bin/pathfix3.8.py - -BuildRequires: python%{python3_pkgversion}-devel -BuildRequires: python%{python3_pkgversion}-numpy -BuildRequires: python%{python3_pkgversion}-numpy-f2py -BuildRequires: python%{python3_pkgversion}-setuptools -BuildRequires: python%{python3_pkgversion}-Cython -BuildRequires: python%{python3_pkgversion}-rpm-macros - -%if %{with tests} -BuildRequires: python%{python3_pkgversion}-pytest -BuildRequires: python%{python3_pkgversion}-pytest-xdist -BuildRequires: python%{python3_pkgversion}-pytest-timeout +%if %{with pooch} +BuildRequires: python3-pooch %endif %if %{with doc} -BuildRequires: python%{python3_pkgversion}-sphinx -BuildRequires: python%{python3_pkgversion}-matplotlib -BuildRequires: python%{python3_pkgversion}-numpydoc +BuildRequires: python3-sphinx +BuildRequires: python3-matplotlib +BuildRequires: python3-numpydoc %endif %global _description %{expand: @@ -79,136 +105,416 @@ leading scientists and engineers.} %description %_description -%package -n python%{python3_pkgversion}-scipy +%package -n python3-scipy Summary: Scientific Tools for Python -Requires: python%{python3_pkgversion}-numpy, python%{python3_pkgversion}-numpy-f2py -%{?python_provide:%python_provide python%{python3_pkgversion}-scipy} -%description -n python%{python3_pkgversion}-scipy %_description +Requires: python3-numpy, python3-f2py +%if %{with pooch} +Requires: python3-pooch +%endif +Provides: bundled(arpack) = 3.3.0 +Provides: bundled(biasedurn) +Provides: bundled(boost-math) +Provides: bundled(coin-or-HiGHS) = 1.2 +Provides: bundled(Faddeeva) +Provides: bundled(id) +Provides: bundled(l-bfgs-b) = 3.0 +Provides: bundled(LAPJVsp) +Provides: bundled(python3-decorator) = 4.0.5 +Provides: bundled(python3-pep440) +Provides: bundled(python3-pypocketfft) = bf2c431c21213b7c5e23c2f542009b0bd3ec1445 +Provides: bundled(qhull) = 2019.1 +Provides: bundled(SuperLU) = 5.2.0 +Provides: bundled(unuran) = 1.8.1 +%description -n python3-scipy %_description %if %{with doc} -%package -n python%{python3_pkgversion}-scipy-doc +%package -n python3-scipy-doc Summary: Scientific Tools for Python - documentation -Requires: python%{python3_pkgversion}-scipy = %{version}-%{release} -%description -n python%{python3_pkgversion}-scipy-doc +Requires: python3-scipy = %{version}-%{release} +%description -n python3-scipy-doc HTML documentation for Scipy %endif +%package -n python3-scipy-tests +Summary: Scientific Tools for Python - test files +Requires: python3-scipy = %{version}-%{release} +Requires: python3-pytest +%description -n python3-scipy-tests +Scipy test files %prep %autosetup -p1 -n %{name}-%{version}%{?rcver} -cat > site.cfg << EOF -[amd] -library_dirs = %{_libdir} -include_dirs = /usr/include/suitesparse -amd_libs = amd - -[umfpack] -library_dirs = %{_libdir} -include_dirs = /usr/include/suitesparse -umfpack_libs = umfpack - -%ifarch %{openblas_arches} -[openblas] -libraries = openblasp -library_dirs = %{_libdir} +# Remove pythran dependency if not explicitly required +%if %{without pythran} +sed -i '/pythran/d' pyproject.toml %endif +%if %{without pooch} +sed -i 's/, "pooch"]/]/g' pyproject.toml +sed -i '/pooch/d' pyproject.toml +%endif + +cat >> pyproject.toml << EOF + +[tool.meson-python.args] +setup = ['-Dblas=%{blaslib}%{blasvar}', '-Dlapack=%{blaslib}%{blasvar}'%{!?with_pythran:, '-Duse-pythran=false'}] EOF -# Docs won't build unless the .dat files are specified here -sed -i 's/metadata = dict(/metadata = dict(package_data={"": ["*.dat"]},/' setup.py +# Enable build with Python 3.13+ +# Upstream only allows Python pre-releases in git HEAD, not in releases. +# However in Fedora, we actively build packages with Python pre-releases very soon. +sed -i 's/requires-python = ">=3.9,<3.13"/requires-python = ">=3.9"/' pyproject.toml -# remove bundled numpydoc -rm doc/sphinxext -r +# Docs won't build unless the .dat files are specified here +sed -i 's/metadata = dict(/metadata = dict(package_data={"": ["*.dat"]},/' _setup.py rm $(grep -rl '/\* Generated by Cython') PKG-INFO -%build -for PY in %{python3_version}; do - env CFLAGS="$RPM_OPT_FLAGS -lm" \ - FFLAGS="$RPM_OPT_FLAGS -fPIC -cpp" \ - LDFLAGS="$RPM_LD_FLAGS -shared" \ - %{_bindir}/python$PY setup.py config_fc \ - --fcompiler=gnu95 --noarch \ - build +# numpy no longer contains a copy of distutils +for f in $(grep -Frl numpy.distutils); do + sed -i.orig 's/numpy\.\(distutils\)/\1/g' $f + touch -r $f.orig $f + rm $f.orig +done - %if %{with doc} +# Do not do benchmarking or coverage testing for RPM builds +sed -i '/^[[:blank:]]*"(asv|pytest-cov)"/d' pyproject.toml + +# No scikit-umfpack in Fedora +sed -i '/^[[:blank:]]*"scikit-umfpack"/d' pyproject.toml + +# No pytest-xdist in RHEL +%if 0%{?rhel} +sed -i '/^[[:blank:]]*"pytest-xdist"/d' pyproject.toml +%endif + +# Loosen the lower bound on numpy +sed -i "/numpy.*python_version=='3.12'/s/1\.26\.0/1\.24\.4/" pyproject.toml + +# Loosen the upper bound on meson-python +sed -i '/meson-python/s/0\.15\.0/0\.16\.0/' pyproject.toml + +# Loosen the upper bound on Cython +sed -i '/Cython/s/3\.0/3\.1/' pyproject.toml + +# Loosen the upper bound on pybind11 +sed -i '/pybind11/s/2\.11\.1/2.12.0/' pyproject.toml + +# Work around failure to detect open_memstream. In glibc, open_memstream is +# not a real function. It is a weak alias to __open_memstream. +sed -i "s/\('has_openmemstream', \)'0'/\1'1'/" scipy/_lib/meson.build + +%generate_buildrequires +%pyproject_buildrequires -R + +%build +%pyproject_wheel + +%if %{with doc} +for PY in %{python3_version}; do pushd doc export PYTHONPATH=$(echo ../build/lib.linux-*-$PY/) make html SPHINXBUILD=sphinx-build-$PY rm -rf build/html/.buildinfo mv build build-$PY popd - %endif done +%endif %install -%py3_install -# Some files got ambiguous python shebangs, we fix them after everything else is done -pathfix3.8.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{python3_sitearch} +%pyproject_install +%pyproject_save_files scipy + +# Some files got ambiguous python shebangs, we fix them after everything else is done +%py3_shebang_fix %{buildroot}%{python3_sitearch} + +# Fix executable bits +chmod 0755 %{buildroot}%{python3_sitearch}/scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py -%if %{with tests} %check -# Skip all tests on s390x because they hangs unexpectedly and randomly -# and pytest-timeout has no effect. Note that the outcome of the tests -# was previously ignored anyway so by disabling the test for s390x we -# are not doing anything more dangerous. +# check against the reference BLAS/LAPACK +export FLEXIBLAS=netlib + +# default test timeout +TIMEOUT=500 + +# TestDatasets try to download from the internet +SKIP_ALL="not TestDatasets" +export PYTEST_ADDOPTS="-k '$SKIP_ALL'" + +%ifarch ppc64le +export PYTEST_ADDOPTS="-k '$SKIP_ALL and \ +not test_eigs and \ +not test_gees_trexc and \ +not test_gees_trsen and \ +not test_trexc_NAG and \ +not test_trsen_NAG and \ +not test_real_nonsymmetric_modes and \ +not test_real_eigs_real_k_subset and \ +not test_ticket_1459_arpack_crash'" +TIMEOUT=1000 +%endif + +%ifarch aarch64 +# TestConstructUtils::test_concatenate_int32_overflow is flaky on aarch64 +export PYTEST_ADDOPTS="-k '$SKIP_ALL and \ +not test_concatenate_int32_overflow'" +TIMEOUT=1000 +%endif + %ifarch s390x -exit 0 +# https://bugzilla.redhat.com/show_bug.cgi?id=1959353 +export PYTEST_ADDOPTS="-k '$SKIP_ALL and \ +not test_distance_transform_cdt05'" +TIMEOUT=1000 %endif %ifarch x86_64 -export ACCEPTABLE_FAILURE_RATE=0 -%else -# there are usually 10-21 test failing, so we allow 1% failure rate -export ACCEPTABLE_FAILURE_RATE=1 +%if 0%{?rhel} +export PYTEST_ADDOPTS="-k '$SKIP_ALL and \ +not test_list_of_problems and \ +not test_gh7799'" +%endif %endif -%ifarch ppc64le -# test_decomp segfaults on ppc64le -export k="not test_denormals and not test_decomp" -%else -# test_denormals tends to stuck -export k="not test_denormals" +%ifarch i686 +# https://github.com/scipy/scipy/issues/17213 +export PYTEST_ADDOPTS="-k '$SKIP_ALL and \ +not test_gh12218 and \ +not test_examples and \ +not test_shifts and \ +not test_svdp'" %endif -# Do not create -PYTEST.pyc files -export PYTHONDONTWRITEBYTECODE=1 +%ifarch riscv64 +export PYTEST_ADDOPTS="-k '$SKIP_ALL and \ +not TestSchur and \ +not test_gejsv_general and \ +not test_kendall_p_exact_large and \ +not test_gejsv_edge_arguments and \ +not test_gh12999 and \ +not test_propack and \ +not test_milp and \ +not test_gejsv_NAG'" +%endif pushd %{buildroot}/%{python3_sitearch} -# TODO TestIQR.test_scale fails on Python 3.8+ due to some warnings, investigate -%{__python3} -m pytest --timeout=300 -k "$k and not (TestIQR and test_scale)" scipy --numprocesses=auto +# Ignoring the datasets tests as we don't have the optional pooch +# dependency on RHEL. +%{pytest} %{!?with_pooch:--ignore=scipy/datasets/tests/test_data.py} --timeout=${TIMEOUT} scipy %{?!rhel:--numprocesses=auto} # Remove test remnants rm -rf gram{A,B} +rm -rf .pytest_cache popd -%endif -%files -n python%{python3_pkgversion}-scipy -%doc LICENSE.txt -%{python3_sitearch}/scipy/ -%{python3_sitearch}/*.egg-info +%files -n python3-scipy -f %{pyproject_files} +%license LICENSE.txt LICENSES_bundled.txt +%exclude %{python3_sitearch}/scipy/*/tests/ +%exclude %{python3_sitearch}/scipy/*/*/tests/ +%exclude %{python3_sitearch}/scipy/*/*/*/tests/ +%exclude %{python3_sitearch}/scipy/*/*/*/*/tests/ + +%files -n python3-scipy-tests +%{python3_sitearch}/scipy/*/tests/ +%{python3_sitearch}/scipy/*/*/tests/ +%{python3_sitearch}/scipy/*/*/*/tests/ +%{python3_sitearch}/scipy/*/*/*/*/tests/ %if %{with doc} -%files -n python%{python3_pkgversion}-scipy-doc +%files -n python3-scipy-doc %license LICENSE.txt %doc doc/build-%{python3_version}/html %endif %changelog -* Fri Jul 14 2023 Charalampos Stratakis - 1.3.1-5 +* Fri Jun 07 2024 Pavel Simovec - 1.11.3-11 +- Fix python-pooch not fully removed +- Resolves: RHEL-35429 + +* Fri Jun 07 2024 Richard W.M. Jones - 1.11.3-10 +- Enable riscv64 + +* Tue May 28 2024 Pavel Simovec - 1.11.3-9 +- Remove python-pooch optional dependency from RHEL +- Related: RHELMISC-5321 + +* Thu May 02 2024 Pavel Simovec - 1.11.3-8 +- Build without pythran in RHEL by default +- Resolves: RHEL-33955 + +* Fri Apr 26 2024 Pavel Simovec - 1.11.3-7 +- Fully remove pythran dependency +- Resolves: RHEL-33955 + +* Tue Jan 30 2024 Miro Hrončok - 1.11.3-6 +- Skip fewer tests during build + +* Mon Jan 29 2024 Florian Weimer - 1.11.3-5 +- Disable incompatible-pointer-types errors on i686 (#2258823) + +* Sat Jan 27 2024 Fedora Release Engineering - 1.11.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Nov 30 2023 Karolina Surma - 1.11.3-3 +- Fix the build without pythran + +* Wed Nov 01 2023 Benjamin A. Beasley - 1.11.3-2 +- Patch error collecting tests with pytest-xdist + +* Wed Oct 11 2023 Jerry James - 1.11.3-1 +- New upstream release 1.11.3 + resolves: #2211813 +- Convert License tag to SPDX +- Add Provides for bundled projects +- Disable LTO +- Pythran works on 32-bit architectures again +- Fix detection of open_memstream +- Use pyproject macros instead of the deprecated py3 macros +- Reenable some tests that work again +- Remove unused BuildRequires + +* Wed Jul 12 2023 psimovec - 1.11.1-1 +- New upstream release 1.11.1 + resolves: #2211813 +- Separate tests into subpackage python3-scipy-tests + +* Mon Jul 10 2023 Python Maint - 1.10.1-5 +- Rebuilt for Python 3.12 + +* Wed Jun 14 2023 Python Maint - 1.10.1-4 +- Bootstrap for Python 3.12 + +* Tue May 23 2023 Yaakov Selkowitz - 1.10.1-3 +- Avoid pytest-xdist dependency in RHEL builds + +* Wed Mar 15 2023 Pavel Šimovec - 1.10.1-2 +- Remove workaround for linking issue on x86_64 +- resolves: #2068530 + +* Wed Feb 22 2023 Pavel Šimovec - 1.10.1-1 +- New upstream release 1.10.1 + resolves: #2101172 +- Use the optional python3-pooch dependency + +* Sat Jan 21 2023 Fedora Release Engineering - 1.8.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Jul 23 2022 Fedora Release Engineering - 1.8.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* 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 + +* Tue Jun 14 2022 Python Maint - 1.8.1-3 +- Bootstrap for Python 3.11 + +* Tue Jun 14 2022 Python Maint - 1.8.1-2 +- Rebuilt for Python 3.11 + +* Thu Jun 09 2022 Nikola Forró - 1.8.1-1 +- New upstream release 1.8.1 + resolves: #2088437 + +* Sat Mar 26 2022 Nikola Forró - 1.8.0-3 +- Skip test_cython_api also on armv7hl + +* Sat Mar 26 2022 Nikola Forró - 1.8.0-2 +- Disable pythran on armv7hl as well + +* Mon Feb 07 2022 Nikola Forró - 1.8.0-1 +- New upstream release 1.8.0 + resolves: #2035126 + +* Sat Jan 22 2022 Fedora Release Engineering - 1.7.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Dec 21 2021 Nikola Forró - 1.7.3-1 +- New upstream release 1.7.3 + resolves: #1988883 + +* Fri Jul 23 2021 Fedora Release Engineering - 1.7.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jul 14 2021 Miro Hrončok - 1.7.0-2 +- Use the optional Pythran build dependency + +* Wed Jun 23 2021 Nikola Forró - 1.7.0-1 +- New upstream release 1.7.0 + resolves: #1953422 + +* Fri Jun 04 2021 Python Maint - 1.6.2-4 +- Rebuilt for Python 3.10 + +* Fri Apr 23 2021 Nikola Forró - 1.6.2-3 - Remove RPATH from certain shared object files -- Resolves: rhbz#2222717 -* Thu Dec 12 2019 Tomas Orsava - 1.3.1-4 -- Exclude unsupported i686 arch +* Tue Mar 30 2021 Jonathan Wakely - 1.6.2-2 +- Rebuilt for removed libstdc++ symbol (#1937698) -* Tue Dec 03 2019 Lumír Balhar - 1.3.1-3 -- Specify LDFLAGS explicitly -- Force preprocessing of Fortran sources to make annobin record proper flags -- Resolves: rhbz#1778983 +* Thu Mar 25 2021 Nikola Forró - 1.6.2-1 +- New upstream release 1.6.2 + resolves: #1942896 -* Thu Nov 21 2019 Lumír Balhar - 1.3.1-2 -- Adjusted for Python 3.8 module in RHEL 8 +* Thu Feb 18 2021 Nikola Forró - 1.6.1-1 +- New upstream release 1.6.1 + resolves: #1929994 + +* Wed Feb 03 2021 Nikola Forró - 1.6.0-3 +- Increase test timeout on s390x + +* Wed Jan 27 2021 Fedora Release Engineering - 1.6.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jan 04 2021 Nikola Forró - 1.6.0-1 +- New upstream release 1.6.0 + resolves: #1906692 + +* Wed Nov 25 2020 Nikola Forró - 1.5.4-2 +- Skip factorial() float tests on Python 3.10 + resolves: #1898157 + +* Thu Nov 05 2020 Nikola Forró - 1.5.4-1 +- New upstream release 1.5.4 +- Increase test timeout, 300 seconds is not always enough + for test_logpdf_overflow on s390x + resolves: #1894887 + +* Mon Oct 19 2020 Nikola Forró - 1.5.3-1 +- New upstream release 1.5.3 + resolves: #1889132 + +* Wed Sep 30 2020 Nikola Forró - 1.5.2-2 +- Skip one more test expected to fail on 32-bit architectures + +* Mon Aug 31 2020 Nikola Forró - 1.5.2-1 +- New upstream release 1.5.2 + resolves: #1853871 and #1840077 + +* Sun Aug 16 2020 Iñaki Úcar - 1.5.0-4 +- https://fedoraproject.org/wiki/Changes/FlexiBLAS_as_BLAS/LAPACK_manager + +* Sat Aug 01 2020 Fedora Release Engineering - 1.5.0-3 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jul 29 2020 Fedora Release Engineering - 1.5.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jun 23 2020 Elliott Sales de Andrade - 1.5.0-1 +- Update to latest version + +* Mon May 25 2020 Miro Hrončok - 1.4.1-2 +- Rebuilt for Python 3.9 + +* Sun Mar 01 2020 Orion Poplawski - 1.4.1-1 +- Update to 1.4.1 (bz#1771154) +- Workaround FTBFS with gcc 10 (bz#1800078) + +* Thu Jan 30 2020 Fedora Release Engineering - 1.3.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild * Fri Oct 18 2019 Miro Hrončok - 1.3.1-1 - Update to 1.3.1 (#1674101) diff --git a/sources b/sources new file mode 100644 index 0000000..366df92 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (scipy-1.11.3.tar.gz) = 6491c4e479d9f4f02e677396a25ddca947a0dc6c009fc2ec34c658012a6224c0b535f14045bb011fbde9973ea987d184574ed64e6760c31798ec860eb0896fcf