Compare commits

...

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

7 changed files with 1643 additions and 931 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/scipy-1.3.1.tar.gz
SOURCES/scipy-1.0.0.tar.xz

View File

@ -1 +1 @@
3c079c09ecb614d8056135edd1cc6da51d18df0a SOURCES/scipy-1.3.1.tar.gz
c78fe8a0b7b7f19e086d82b87d9ee58af9791ca5 SOURCES/scipy-1.0.0.tar.xz

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

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +1,40 @@
# without means enabled
%bcond_with doc
%bcond_with python36_module
%bcond_with tests
%bcond_without python2
%bcond_without python3
# Disabled docs due to missing BuildRequires: python2/3-numpydoc
%global with_doc 0
%{?filter_setup:
%filter_provides_in %{python2_sitearch}.*\.so$
%filter_provides_in %{python3_sitearch}.*\.so$
%filter_setup
}
# Set to pre-release version suffix if building pre-release, else %%{nil}
%global rcver %{nil}
Summary: Scientific Tools for Python
Name: scipy
Version: 1.3.1
Release: 5%{?dist}
Version: 1.0.0
Release: 21%{?dist}
Group: Development/Libraries
# BSD -- whole package except:
# Boost -- scipy/special/cephes/scipy_iv.c
# Public Domain -- scipy/odr/__odrpack.c
License: BSD and Boost and Public Domain
Url: http://www.scipy.org/scipylib/index.html
Source0: https://github.com/scipy/scipy/releases/download/v%{version}/scipy-%{version}.tar.gz
Source0: https://github.com/scipy/scipy/releases/download/v%{version}/scipy-%{version}.tar.xz
# 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
Patch0: scipy-1.0.0-six.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
# Bugfix of cKDTree
# PR: https://github.com/scipy/scipy/pull/10567
# Issue: https://github.com/scipy/scipy/issues/11021
Patch2: ckdtree_bugfix.patch
# 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
%if %{with python2}
BuildRequires: python2-numpy, python2-devel, python2-numpy-f2py
BuildRequires: python2-pytest
BuildRequires: python2-six
# Disabled BR on pytest-xdist since it doesn't seem to be actually needed
# BuildRequires: python2-pytest-xdist
%endif
BuildRequires: fftw-devel, blas-devel, lapack-devel, suitesparse-devel
%ifarch %{openblas_arches}
@ -45,28 +44,35 @@ BuildRequires: atlas-devel
%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 python3}
%if %{with python36_module}
BuildRequires: python36-devel
BuildRequires: python36-rpm-macros
%else
BuildRequires: python3-devel
%endif
%if %{with doc}
BuildRequires: python%{python3_pkgversion}-sphinx
BuildRequires: python%{python3_pkgversion}-matplotlib
BuildRequires: python%{python3_pkgversion}-numpydoc
BuildRequires: python3-numpy, python3-f2py
BuildRequires: python3-setuptools
BuildRequires: python3-pytest
BuildRequires: python3-six
# Disabled BR on pytest-xdist since it doesn't seem to be actually needed
# BuildRequires: python3-pytest-xdist
%endif
%if 0%{?with_doc}
%if %{with python2}
BuildRequires: python2-sphinx
BuildRequires: python2-matplotlib
BuildRequires: python2-numpydoc
%endif
%if %{with python3}
BuildRequires: python3-sphinx
BuildRequires: python3-matplotlib
BuildRequires: python3-numpydoc
%endif # with python3
%endif # with_doc
%global _description %{expand:
%description
Scipy is open-source software for mathematics, science, and
engineering. The core library is NumPy which provides convenient and
fast N-dimensional array manipulation. The SciPy library is built to
@ -75,27 +81,72 @@ numerical routines such as routines for numerical integration and
optimization. Together, they run on all popular operating systems, are
quick to install, and are free of charge. NumPy and SciPy are easy to
use, but powerful enough to be depended upon by some of the world's
leading scientists and engineers.}
leading scientists and engineers.
%description %_description
%package -n python%{python3_pkgversion}-scipy
%if %{with python2}
%package -n python2-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: python2-numpy, python2-numpy-f2py
Requires: python2-six
%{?python_provide:%python_provide python2-scipy}
Obsoletes: scipy <= 0.16.0
%description -n python2-scipy
Scipy is open-source software for mathematics, science, and
engineering. The core library is NumPy which provides convenient and
fast N-dimensional array manipulation. The SciPy library is built to
work with NumPy arrays, and provides many user-friendly and efficient
numerical routines such as routines for numerical integration and
optimization. Together, they run on all popular operating systems, are
quick to install, and are free of charge. NumPy and SciPy are easy to
use, but powerful enough to be depended upon by some of the world's
leading scientists and engineers.
%if %{with doc}
%package -n python%{python3_pkgversion}-scipy-doc
Summary: Scientific Tools for Python - documentation
Requires: python%{python3_pkgversion}-scipy = %{version}-%{release}
%description -n python%{python3_pkgversion}-scipy-doc
HTML documentation for Scipy
%endif
%if 0%{?with_doc}
%if %{with python2}
%package -n python2-scipy-doc
Summary: Scientific Tools for Python - documentation
Requires: python2-scipy = %{version}-%{release}
%description -n python2-scipy-doc
HTML documentation for Scipy
%endif # with python2
%if %{with python3}
%package -n python3-scipy-doc
Summary: Scientific Tools for Python - documentation
Requires: python3-scipy = %{version}-%{release}
%description -n python3-scipy-doc
HTML documentation for Scipy
%endif # with python3
%endif # with_doc
%if %{with python3}
%package -n python3-scipy
Summary: Scientific Tools for Python
Group: Development/Libraries
License: BSD and LGPLv2+
Requires: python3-numpy, python3-f2py
Requires: python3-six
%{?python_provide:%python_provide python3-scipy}
%description -n python3-scipy
Scipy is open-source software for mathematics, science, and
engineering. The core library is NumPy which provides convenient and
fast N-dimensional array manipulation. The SciPy library is built to
work with NumPy arrays, and provides many user-friendly and efficient
numerical routines such as routines for numerical integration and
optimization. Together, they run on all popular operating systems, are
quick to install, and are free of charge. NumPy and SciPy are easy to
use, but powerful enough to be depended upon by some of the world's
leading scientists and engineers.
%endif # with _python3
%prep
%autosetup -p1 -n %{name}-%{version}%{?rcver}
%setup -q -n %{name}-%{version}%{?rcver}
%patch0 -p1
cat > site.cfg << EOF
[amd]
@ -110,156 +161,188 @@ umfpack_libs = umfpack
%ifarch %{openblas_arches}
[openblas]
libraries = openblasp
library_dirs = %{_libdir}
openblas_libs = openblasp
%endif
EOF
# Docs won't build unless the .dat files are specified here
sed -i 's/metadata = dict(/metadata = dict(package_data={"": ["*.dat"]},/' setup.py
# remove bundled numpydoc
rm doc/sphinxext -r
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 \
%if %{with python3}
env CFLAGS="$RPM_OPT_FLAGS -lm" \
FFLAGS="$RPM_OPT_FLAGS -fPIC -cpp" \
LDFLAGS="$RPM_LD_FLAGS -shared" \
%ifarch %{openblas_arches}
OPENBLAS=%{_libdir} \
%else
ATLAS=%{_libdir}/atlas \
%endif
FFTW=%{_libdir} BLAS=%{_libdir} LAPACK=%{_libdir} \
%__python3 setup.py config_fc \
--fcompiler=gnu95 --noarch \
%if 0%{?with_doc}
build_sphinx
rm -r build/sphinx/html/.buildinfo
mv build/sphinx build/sphinx-%{python3_version}
%else
build
%endif # with_doc
%endif # with _python3
%if %{with python2}
env CFLAGS="$RPM_OPT_FLAGS" \
FFLAGS="$RPM_OPT_FLAGS -fPIC -cpp" \
LDFLAGS="$RPM_LD_FLAGS -shared" \
%ifarch %{openblas_arches}
OPENBLAS=%{_libdir} \
%else
ATLAS=%{_libdir}/atlas \
%endif
FFTW=%{_libdir} BLAS=%{_libdir} LAPACK=%{_libdir} \
%__python2 setup.py config_fc \
--fcompiler=gnu95 --noarch \
%if 0%{?with_doc}
build_sphinx
rm -r build/sphinx/html/.buildinfo
mv build/sphinx build/sphinx-%{python2_version}
%else
build
%endif # with_doc
%endif # with python2
%if %{with doc}
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
%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}
# first install python3 so the binaries are overwritten by the python2 ones
%if %{with python3}
env CFLAGS="$RPM_OPT_FLAGS -lm" \
FFLAGS="$RPM_OPT_FLAGS -fPIC -cpp" \
LDFLAGS="$RPM_LD_FLAGS -shared" \
%ifarch %{openblas_arches}
OPENBLAS=%{_libdir} \
%else
ATLAS=%{_libdir}/atlas \
%endif
FFTW=%{_libdir} BLAS=%{_libdir} LAPACK=%{_libdir} \
%__python3 setup.py install --root=$RPM_BUILD_ROOT
%endif # with python3
%if %{with python2}
env CFLAGS="$RPM_OPT_FLAGS" \
FFLAGS="$RPM_OPT_FLAGS -fPIC -cpp" \
LDFLAGS="$RPM_LD_FLAGS -shared" \
%ifarch %{openblas_arches}
OPENBLAS=%{_libdir} \
%else
ATLAS=%{_libdir}/atlas \
%endif
FFTW=%{_libdir} BLAS=%{_libdir} LAPACK=%{_libdir} \
%__python2 setup.py install --root=$RPM_BUILD_ROOT
%endif # with python2
%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.
%ifarch s390x
exit 0
%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
%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"
%endif
# Do not create -PYTEST.pyc files
export PYTHONDONTWRITEBYTECODE=1
# Skip all tests on s390x because they hangs unexpectedly and randomly
# and pytest-timeout has no effect. Note that the outcome of the tests
# is ignored anyway so by disabling the test for s390x we are not doing
# anything more dangerous.
%ifnarch s390x
%if %{with python3}
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
# Remove test remnants
rm -rf gram{A,B}
py.test-%{python3_version} -k "not test_denormals" scipy || :
popd
%endif
%endif # with python3
%files -n python%{python3_pkgversion}-scipy
%if %{with python2}
pushd %{buildroot}/%{python2_sitearch}
py.test-%{python2_version} -k "not test_denormals" scipy || :
popd
%endif # with python2
%endif # ifnarch s390x
%if %{with python2}
%files -n python2-scipy
%doc LICENSE.txt
%{python3_sitearch}/scipy/
%{python2_sitearch}/scipy
%{python2_sitearch}/*.egg-info
%if 0%{?with_doc}
%files -n python2-scipy-doc
%license LICENSE.txt
%doc build/sphinx-%{python2_version}/html
%endif # with_doc
%endif # with python2
%if %{with python3}
%files -n python3-scipy
%doc LICENSE.txt
%{python3_sitearch}/scipy
%{python3_sitearch}/*.egg-info
%if %{with doc}
%files -n python%{python3_pkgversion}-scipy-doc
%if 0%{?with_doc}
%files -n python3-scipy-doc
%license LICENSE.txt
%doc doc/build-%{python3_version}/html
%endif
%doc build/sphinx-%{python3_version}/html
%endif # with_doc
%endif # with python3
%changelog
* Fri Jul 14 2023 Charalampos Stratakis <cstratak@redhat.com> - 1.3.1-5
- Remove RPATH from certain shared object files
- Resolves: rhbz#2222717
* Thu Mar 04 2021 Nikola Forró <nforro@redhat.com> - 1.0.0-21
- Do not create -PYTEST.pyc files
- Resolves: rhbz#1934199
* Thu Dec 12 2019 Tomas Orsava <torsava@redhat.com> - 1.3.1-4
- Exclude unsupported i686 arch
* Tue Jun 04 2019 Nikola Forró <nforro@redhat.com> - 1.0.0-20
- Fix python{2,3}-six Requires
- Resolves: rhbz#1709599
* Tue Dec 03 2019 Lumír Balhar <lbalhar@redhat.com> - 1.3.1-3
- Specify LDFLAGS explicitly
* Thu Apr 25 2019 Tomas Orsava <torsava@redhat.com> - 1.0.0-19
- Bumping due to problems with modular RPM upgrade path
- Resolves: rhbz#1695587
* Thu Nov 15 2018 Nikola Forró <nforro@redhat.com> - 1.0.0-18
- Unbundle six
- Resolves: rhbz#1647341
* Wed Oct 10 2018 Tomas Orsava <torsava@redhat.com> - 1.0.0-17
- Fix f2py requires
- Resolves: rhbz#1628242
* Tue Oct 09 2018 Lumír Balhar <lbalhar@redhat.com> - 1.0.0-16
- Remove unversioned provides
- Resolves: rhbz#1628242
* Tue Oct 02 2018 Lumír Balhar <lbalhar@redhat.com> - 1.0.0-15
- Fix unversioned requires/buildrequires
- Resolves: rhbz#1628242
* Thu Sep 20 2018 Nikola Forró <nforro@redhat.com> - 1.0.0-14
- Build with $RPM_LD_FLAGS
- Related: rhbz#1624172
* Tue Sep 11 2018 Nikola Forró <nforro@redhat.com> - 1.0.0-13
- Force preprocessing of Fortran sources to make annobin record proper flags
- Resolves: rhbz#1778983
- Resolves: rhbz#1624172
* Thu Nov 21 2019 Lumír Balhar <lbalhar@redhat.com> - 1.3.1-2
- Adjusted for Python 3.8 module in RHEL 8
* Fri Aug 17 2018 Lumír Balhar <lbalhar@redhat.com> - 1.0.0-12
- Add bconds for python2
- Resolves: rhbz#1615727
* Fri Oct 18 2019 Miro Hrončok <mhroncok@redhat.com> - 1.3.1-1
- Update to 1.3.1 (#1674101)
- Drop Python 2 packages (not supported by SciPy >= 1.3)
- Backported upstream patch for cKDTree (fixes FTBFS)
* Fri Aug 17 2018 Lumír Balhar <lbalhar@redhat.com> - 1.0.0-11
- Different BR for python36 module build
- Resolves: rhbz#1615727
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 1.2.1-8
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Tue Jul 31 2018 Lumír Balhar <lbalhar@redhat.com> - 1.0.0-10
- Switch Python 3 conditionals to bcond
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 1.2.1-7
- Rebuilt for Python 3.8
* Mon Jun 25 2018 Tomas Orsava <torsava@redhat.com> - 1.0.0-9
- Removed test dependency python2/3-pytest-timeout, since it's not strictly needed and it's not available in RHEL8
* Tue Jul 30 2019 Petr Viktorin <pviktori@redhat.com> - 1.2.1-6
- Remove build dependency on python2-pytest-xdist and python2-pytest-timeout
- Enable parallel tests in Python 3 %%check
- Use macros for Python interpreter in tests
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.2.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Mon Jun 10 2019 Marcel Plch <mplch@redhat.com> - 1.2.1-4
- Fix FTBFS with Py3.8 (#1606315)
* Thu May 16 2019 Orion Poplawski <orion@nwra.com> - 1.2.1-3
- Build only against openblasp (bugz#1709161)
* Fri Apr 26 2019 Orion Poplawski <orion@nwra.com> - 1.2.1-2
- Do not create *-PYTEST.pyc files
* Tue Apr 23 2019 Orion Poplawski <orion@nwra.com> - 1.2.1-1
- Update to 1.2.1
- Drop scipy2-doc
* Wed Feb 06 2019 Charalampos Stratakis <cstratak@redhat.com> - 1.2.0-1
- Update to 1.2.0
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Sat Jun 23 2018 Miro Hrončok <mhroncok@redhat.com> - 1.1.0-2
- Don't ignore the tests results but rather have a tolerance rate
- Skip test_decomp on ppc64le as it currently segfaults
* Fri Jun 22 2018 Miro Hrončok <mhroncok@redhat.com> - 1.1.0-1
- Update to 1.1.0 (#1560265, #1594355)
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 1.0.0-8
- Rebuilt for Python 3.7
* Fri Apr 27 2018 Tomas Orsava <torsava@redhat.com> - 1.0.0-8
- Disabled docs building due to missing BuildRequires: python2/3-numpydoc
- Disabled BuildRequires on pytest-xdist since it's not available in RHEL8
right now and doesn't seem to be actually needed for the build
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.0-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
@ -313,7 +396,7 @@ popd
* Tue Jul 26 2016 Than Ngo <than@redhat.com> - 0.18.0-1
- 0.18.0
- %%check: make non-fatal as temporary workaround for scipy build on arm
- %%check: make non-fatal as temporary workaround for scipy build on arm
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.17.0-2
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
@ -603,3 +686,4 @@ popd
- Add changelog
- Removed Prefix, Vendor
- Fix Source0