Compare commits

...

No commits in common. "c8-stream-3.8" and "c10s" have entirely different histories.

12 changed files with 545 additions and 880 deletions

1
.fmf/version Normal file
View File

@ -0,0 +1 @@
1

46
.gitignore vendored
View File

@ -1 +1,45 @@
SOURCES/scipy-1.3.1.tar.gz
scipy-0.7.2.tar.gz
/scipy-0.9.0.tar.gz
/scipy-0.10.0.tar.gz
/scipy-0.10.1.tar.gz
/scipy-0.11.0rc2.tar.gz
/scipy-0.11.0.tar.gz
/scipy-0.12.0b1.tar.gz
/scipy-0.12.0.tar.gz
/scipy-0.13.0b1.tar.gz
/scipy-0.13.0rc1.tar.gz
/scipy-0.13.0.tar.gz
/scipy-0.13.1.tar.gz
/scipy-0.13.2.tar.gz
/scipy-0.13.3.tar.gz
/scipy-0.14.0b1.tar.gz
/scipy-0.14.0.tar.gz
/scipy-0.14.1.tar.gz
/scipy-0.15.1.tar.gz
/scipy-0.16.0.tar.gz
/scipy-0.16.1.tar.gz
/scipy-0.17.0.tar.gz
/scipy-0.18.0.tar.xz
/scipy-0.19.0.tar.xz
/scipy-0.19.1.tar.xz
/scipy-1.0.0.tar.xz
/scipy-1.1.0.tar.gz
/scipy-1.2.0.tar.gz
/scipy-1.2.1.tar.gz
/scipy-1.3.1.tar.gz
/scipy-1.4.1.tar.gz
/scipy-1.5.0.tar.gz
/scipy-1.5.2.tar.gz
/scipy-1.5.3.tar.gz
/scipy-1.5.4.tar.gz
/scipy-1.6.0.tar.gz
/scipy-1.6.1.tar.gz
/scipy-1.6.2.tar.gz
/scipy-1.7.0.tar.gz
/scipy-1.7.3.tar.gz
/scipy-1.8.0.tar.gz
/scipy-1.8.1.tar.gz
/scipy-1.10.0.tar.gz
/scipy-1.10.1.tar.gz
/scipy-1.11.1.tar.gz
/scipy-1.11.3.tar.gz

View File

@ -1 +0,0 @@
3c079c09ecb614d8056135edd1cc6da51d18df0a SOURCES/scipy-1.3.1.tar.gz

28
19443.patch Normal file
View File

@ -0,0 +1,28 @@
From 28413806316049c09bb4b0182f652cce0ba82a50 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
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

View File

@ -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

View File

@ -1,140 +0,0 @@
From d945dfa4063c5cd7169acd117c15f23ba68027ed Mon Sep 17 00:00:00 2001
From: Pauli Virtanen <pav@iki.fi>
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 = <np.intp_t> self.buf.size()
if NPY_LIKELY(n > 0):
- pr = &self.buf.front()
+ pr = self.buf.data()
uintptr = <np.uintp_t> (<void*> pr)
dtype = np.dtype(np.uint8)
self.__array_interface__ = dict(
@@ -213,7 +213,7 @@ cdef class coo_entries:
dict res_dict
n = <np.intp_t> 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 = <np.intp_t> self.buf.size()
if NPY_LIKELY(n > 0):
- pr = &self.buf.front()
+ pr = self.buf.data()
uintptr = <np.uintp_t> (<void*> 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 = <np.intp_t> 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 = <np.intp_t> (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(<char[:size]> <char*> &cself.tree_buffer.front())
+ cdef np.ndarray tree = np.asarray(<char[:size]> <char*> 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(<char[:tree.size]> <char*> &cself.tree_buffer.front())
+ mytree = np.asarray(<char[:tree.size]> <char*> cself.tree_buffer.data())
# set raw pointers
self._pre_init()
From ad0f91438f49bfe277e32d2689aefeb0c11c789f Mon Sep 17 00:00:00 2001
From: Pauli Virtanen <pav@iki.fi>
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')],

View File

@ -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);

7
gating.yaml Normal file
View File

@ -0,0 +1,7 @@
--- !Policy
product_versions:
- rhel-10
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

11
plans/tier0.fmf Normal file
View File

@ -0,0 +1,11 @@
discover:
- name: Smoke-tests
how: shell
tests:
- name: python-import-test
test: python3 -c 'import scipy'
require:
- python3-scipy
duration: 1m
execute:
how: tmt

3
rpminspect.yaml Normal file
View File

@ -0,0 +1,3 @@
annocheck:
extra_opts:
- hardened: --skip-fortify --skip-lto --skip-implicit-values

View File

@ -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.
# <https://github.com/scipy/scipy/issues/19993>
%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: 17%{?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,438 @@ 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 <cstratak@redhat.com> - 1.3.1-5
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 1.11.3-17
- Bump release for October 2024 mass rebuild:
Resolves: RHEL-64018
* Wed Oct 02 2024 Pavel Simovec <psimovec@redhat.com> - 1.11.3-16
- Waive annocheck results: --skip-implicit-values
- Resolves: RHEL-33519
* Mon Jul 29 2024 Pavel Simovec <psimovec@redhat.com> - 1.11.3-15
- Waive annocheck results: --skip-fortify and --skip-lto
- Resolves: RHEL-33519
* Thu Jun 27 2024 Pavel Simovec <psimovec@redhat.com> - 1.11.3-14
- rebuilt
* Wed Jun 26 2024 Pavel Simovec <psimovec@redhat.com> - 1.11.3-13
- Waive annocheck results: --skip-fortify and --skip-lto
- Resolves: RHEL-33519
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 1.11.3-12
- Bump release for June 2024 mass rebuild
* Fri Jun 07 2024 Pavel Simovec <psimovec@redhat.com> - 1.11.3-11
- Fix python-pooch not fully removed
- Resolves: RHEL-35429
* Fri Jun 07 2024 Richard W.M. Jones <rjones@redhat.com> - 1.11.3-10
- Enable riscv64
* Tue May 28 2024 Pavel Simovec <psimovec@redhat.com> - 1.11.3-9
- Remove python-pooch optional dependency from RHEL
- Related: RHELMISC-5321
* Thu May 02 2024 Pavel Simovec <psimovec@redhat.com> - 1.11.3-8
- Build without pythran in RHEL by default
- Resolves: RHEL-33955
* Fri Apr 26 2024 Pavel Simovec <psimovec@redhat.com> - 1.11.3-7
- Fully remove pythran dependency
- Resolves: RHEL-33955
* Tue Jan 30 2024 Miro Hrončok <mhroncok@redhat.com> - 1.11.3-6
- Skip fewer tests during build
* Mon Jan 29 2024 Florian Weimer <fweimer@redhat.com> - 1.11.3-5
- Disable incompatible-pointer-types errors on i686 (#2258823)
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.11.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Thu Nov 30 2023 Karolina Surma <ksurma@redhat.com> - 1.11.3-3
- Fix the build without pythran
* Wed Nov 01 2023 Benjamin A. Beasley <code@musicinmybrain.net> - 1.11.3-2
- Patch error collecting tests with pytest-xdist
* Wed Oct 11 2023 Jerry James <loganjerry@gmail.com> - 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 <psimovec@redhat.com> - 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 <python-maint@redhat.com> - 1.10.1-5
- Rebuilt for Python 3.12
* Wed Jun 14 2023 Python Maint <python-maint@redhat.com> - 1.10.1-4
- Bootstrap for Python 3.12
* Tue May 23 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 1.10.1-3
- Avoid pytest-xdist dependency in RHEL builds
* Wed Mar 15 2023 Pavel Šimovec <psimovec@redhat.com> - 1.10.1-2
- Remove workaround for linking issue on x86_64
- resolves: #2068530
* Wed Feb 22 2023 Pavel Šimovec <psimovec@redhat.com> - 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 <releng@fedoraproject.org> - 1.8.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.8.1-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sun Jul 3 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.8.1-5
- Fix linalg.lapack syevr segfault (#2099102)
* Fri Jun 17 2022 Python Maint <python-maint@redhat.com> - 1.8.1-4
- Rebuilt for Python 3.11
* Tue Jun 14 2022 Python Maint <python-maint@redhat.com> - 1.8.1-3
- Bootstrap for Python 3.11
* Tue Jun 14 2022 Python Maint <python-maint@redhat.com> - 1.8.1-2
- Rebuilt for Python 3.11
* Thu Jun 09 2022 Nikola Forró <nforro@redhat.com> - 1.8.1-1
- New upstream release 1.8.1
resolves: #2088437
* Sat Mar 26 2022 Nikola Forró <nforro@redhat.com> - 1.8.0-3
- Skip test_cython_api also on armv7hl
* Sat Mar 26 2022 Nikola Forró <nforro@redhat.com> - 1.8.0-2
- Disable pythran on armv7hl as well
* Mon Feb 07 2022 Nikola Forró <nforro@redhat.com> - 1.8.0-1
- New upstream release 1.8.0
resolves: #2035126
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.7.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Tue Dec 21 2021 Nikola Forró <nforro@redhat.com> - 1.7.3-1
- New upstream release 1.7.3
resolves: #1988883
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.7.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Wed Jul 14 2021 Miro Hrončok <mhroncok@redhat.com> - 1.7.0-2
- Use the optional Pythran build dependency
* Wed Jun 23 2021 Nikola Forró <nforro@redhat.com> - 1.7.0-1
- New upstream release 1.7.0
resolves: #1953422
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 1.6.2-4
- Rebuilt for Python 3.10
* Fri Apr 23 2021 Nikola Forró <nforro@redhat.com> - 1.6.2-3
- Remove RPATH from certain shared object files
- Resolves: rhbz#2222717
* Thu Dec 12 2019 Tomas Orsava <torsava@redhat.com> - 1.3.1-4
- Exclude unsupported i686 arch
* Tue Mar 30 2021 Jonathan Wakely <jwakely@redhat.com> - 1.6.2-2
- Rebuilt for removed libstdc++ symbol (#1937698)
* Tue Dec 03 2019 Lumír Balhar <lbalhar@redhat.com> - 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ó <nforro@redhat.com> - 1.6.2-1
- New upstream release 1.6.2
resolves: #1942896
* Thu Nov 21 2019 Lumír Balhar <lbalhar@redhat.com> - 1.3.1-2
- Adjusted for Python 3.8 module in RHEL 8
* Thu Feb 18 2021 Nikola Forró <nforro@redhat.com> - 1.6.1-1
- New upstream release 1.6.1
resolves: #1929994
* Wed Feb 03 2021 Nikola Forró <nforro@redhat.com> - 1.6.0-3
- Increase test timeout on s390x
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.6.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Jan 04 2021 Nikola Forró <nforro@redhat.com> - 1.6.0-1
- New upstream release 1.6.0
resolves: #1906692
* Wed Nov 25 2020 Nikola Forró <nforro@redhat.com> - 1.5.4-2
- Skip factorial() float tests on Python 3.10
resolves: #1898157
* Thu Nov 05 2020 Nikola Forró <nforro@redhat.com> - 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ó <nforro@redhat.com> - 1.5.3-1
- New upstream release 1.5.3
resolves: #1889132
* Wed Sep 30 2020 Nikola Forró <nforro@redhat.com> - 1.5.2-2
- Skip one more test expected to fail on 32-bit architectures
* Mon Aug 31 2020 Nikola Forró <nforro@redhat.com> - 1.5.2-1
- New upstream release 1.5.2
resolves: #1853871 and #1840077
* Sun Aug 16 2020 Iñaki Úcar <iucar@fedoraproject.org> - 1.5.0-4
- https://fedoraproject.org/wiki/Changes/FlexiBLAS_as_BLAS/LAPACK_manager
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.0-3
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jun 23 2020 Elliott Sales de Andrade <quantum.analyst@gmail.com> - 1.5.0-1
- Update to latest version
* Mon May 25 2020 Miro Hrončok <mhroncok@redhat.com> - 1.4.1-2
- Rebuilt for Python 3.9
* Sun Mar 01 2020 Orion Poplawski <orion@nwra.com> - 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 <releng@fedoraproject.org> - 1.3.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Oct 18 2019 Miro Hrončok <mhroncok@redhat.com> - 1.3.1-1
- Update to 1.3.1 (#1674101)

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (scipy-1.11.3.tar.gz) = 6491c4e479d9f4f02e677396a25ddca947a0dc6c009fc2ec34c658012a6224c0b535f14045bb011fbde9973ea987d184574ed64e6760c31798ec860eb0896fcf