From 7dc6bd0e2ed3d20ca4b2759f9e344d7e71e3152c26887e1fea95d884f404bffa Mon Sep 17 00:00:00 2001 From: Steve Kowalik Date: Fri, 26 May 2023 13:36:43 +0000 Subject: [PATCH] =?UTF-8?q?-=20Update=20to=200.57.0:=20=20=20*=20Support?= =?UTF-8?q?=20for=20Python=203.11=20(minimum=20is=20moved=20to=203.8)=20?= =?UTF-8?q?=20=20*=20Support=20for=20NumPy=201.24=20(minimum=20is=20moved?= =?UTF-8?q?=20to=201.21)=20=20=20*=20Python=20language=20support=20enhance?= =?UTF-8?q?ments:=20=20=20=20=20+=20Exception=20classes=20now=20support=20?= =?UTF-8?q?arguments=20that=20are=20not=20compile=20time=20=20=20=20=20=20?= =?UTF-8?q?=20constant.=20=20=20=20=20+=20The=20built-in=20functions=20has?= =?UTF-8?q?attr=20and=20getattr=20are=20supported=20for=20compile=20=20=20?= =?UTF-8?q?=20=20=20=20time=20constant=20attributes.=20=20=20=20=20+=20The?= =?UTF-8?q?=20built-in=20functions=20str=20and=20repr=20are=20now=20implem?= =?UTF-8?q?ented=20similarly=20to=20=20=20=20=20=20=20their=20Python=20imp?= =?UTF-8?q?lementations.=20Custom=20=5F=5Fstr=5F=5F=20and=20=5F=5Frepr=5F?= =?UTF-8?q?=5F=20functions=20=20=20=20=20=20=20can=20be=20associated=20wit?= =?UTF-8?q?h=20types=20and=20work=20as=20expected.=20=20=20=20=20+=20Numba?= =?UTF-8?q?=E2=80=99s=20unicode=20functionality=20in=20str.startswith=20no?= =?UTF-8?q?w=20supports=20kwargs=20=20=20=20=20=20=20start=20and=20end.=20?= =?UTF-8?q?=20=20=20=20+=20min=20and=20max=20now=20support=20boolean=20typ?= =?UTF-8?q?es.=20=20=20=20=20+=20Support=20is=20added=20for=20the=20dict(i?= =?UTF-8?q?terable)=20constructor.=20-=20Dropped=20patches:=20=20=20*=20nu?= =?UTF-8?q?mba-pr8620-np1.24.patch=20=20=20*=20update-tbb-backend-calls-20?= =?UTF-8?q?21.6.patch=20-=20Rebased=20existing=20patch.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:numeric/python-numba?expand=0&rev=67 --- _multibuild | 1 + numba-0.56.4.tar.gz | 3 - numba-0.57.0.tar.gz | 3 + numba-pr8620-np1.24.patch | 415 -------------------------- python-numba.changes | 23 ++ python-numba.spec | 26 +- skip-failing-tests.patch | 28 +- update-tbb-backend-calls-2021.6.patch | 72 ----- 8 files changed, 54 insertions(+), 517 deletions(-) delete mode 100644 numba-0.56.4.tar.gz create mode 100644 numba-0.57.0.tar.gz delete mode 100644 numba-pr8620-np1.24.patch delete mode 100644 update-tbb-backend-calls-2021.6.patch diff --git a/_multibuild b/_multibuild index 3717f3d..8cf2769 100644 --- a/_multibuild +++ b/_multibuild @@ -1,4 +1,5 @@ test-py39 test-py310 + test-py311 diff --git a/numba-0.56.4.tar.gz b/numba-0.56.4.tar.gz deleted file mode 100644 index f6e7b70..0000000 --- a/numba-0.56.4.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32d9fef412c81483d7efe0ceb6cf4d3310fde8b624a9cecca00f790573ac96ee -size 2418748 diff --git a/numba-0.57.0.tar.gz b/numba-0.57.0.tar.gz new file mode 100644 index 0000000..c50c68b --- /dev/null +++ b/numba-0.57.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2af6d81067a5bdc13960c6d2519dbabbf4d5d597cf75d640c5aeaefd48c6420a +size 2549269 diff --git a/numba-pr8620-np1.24.patch b/numba-pr8620-np1.24.patch deleted file mode 100644 index 2100f9a..0000000 --- a/numba-pr8620-np1.24.patch +++ /dev/null @@ -1,415 +0,0 @@ -Index: numba-0.56.4/numba/cuda/tests/cudapy/test_intrinsics.py -=================================================================== ---- numba-0.56.4.orig/numba/cuda/tests/cudapy/test_intrinsics.py -+++ numba-0.56.4/numba/cuda/tests/cudapy/test_intrinsics.py -@@ -619,7 +619,7 @@ class TestCudaIntrinsic(CUDATestCase): - arg2 = np.float16(4.) - compiled[1, 1](ary, arg1, arg2) - np.testing.assert_allclose(ary[0], arg2) -- arg1 = np.float(5.) -+ arg1 = np.float16(5.) - compiled[1, 1](ary, arg1, arg2) - np.testing.assert_allclose(ary[0], arg1) - -@@ -631,7 +631,7 @@ class TestCudaIntrinsic(CUDATestCase): - arg2 = np.float16(4.) - compiled[1, 1](ary, arg1, arg2) - np.testing.assert_allclose(ary[0], arg1) -- arg1 = np.float(5.) -+ arg1 = np.float16(5.) - compiled[1, 1](ary, arg1, arg2) - np.testing.assert_allclose(ary[0], arg2) - -Index: numba-0.56.4/numba/np/arraymath.py -=================================================================== ---- numba-0.56.4.orig/numba/np/arraymath.py -+++ numba-0.56.4/numba/np/arraymath.py -@@ -4177,6 +4177,10 @@ iinfo = namedtuple('iinfo', _iinfo_suppo - # This module is imported under the compiler lock which should deal with the - # lack of thread safety in the warning filter. - def _gen_np_machar(): -+ # NumPy 1.24 removed np.MachAr -+ if numpy_version >= (1, 24): -+ return -+ - np122plus = numpy_version >= (1, 22) - w = None - with warnings.catch_warnings(record=True) as w: -Index: numba-0.56.4/numba/np/ufunc/_internal.c -=================================================================== ---- numba-0.56.4.orig/numba/np/ufunc/_internal.c -+++ numba-0.56.4/numba/np/ufunc/_internal.c -@@ -285,9 +285,7 @@ static struct _ufunc_dispatch { - PyCFunctionWithKeywords ufunc_accumulate; - PyCFunctionWithKeywords ufunc_reduceat; - PyCFunctionWithKeywords ufunc_outer; --#if NPY_API_VERSION >= 0x00000008 - PyCFunction ufunc_at; --#endif - } ufunc_dispatch; - - static int -@@ -303,10 +301,8 @@ init_ufunc_dispatch(int *numpy_uses_fast - if (strncmp(crnt_name, "accumulate", 11) == 0) { - ufunc_dispatch.ufunc_accumulate = - (PyCFunctionWithKeywords)crnt->ml_meth; --#if NPY_API_VERSION >= 0x00000008 - } else if (strncmp(crnt_name, "at", 3) == 0) { - ufunc_dispatch.ufunc_at = crnt->ml_meth; --#endif - } else { - result = -1; - } -@@ -326,10 +322,15 @@ init_ufunc_dispatch(int *numpy_uses_fast - } else if (strncmp(crnt_name, "reduceat", 9) == 0) { - ufunc_dispatch.ufunc_reduceat = - (PyCFunctionWithKeywords)crnt->ml_meth; -+ } else if (strncmp(crnt_name, "resolve_dtypes", 15) == 0) { -+ /* Ignored */ - } else { - result = -1; - } - break; -+ case '_': -+ // We ignore private methods -+ break; - default: - result = -1; /* Unknown method */ - } -@@ -341,6 +342,8 @@ init_ufunc_dispatch(int *numpy_uses_fast - *numpy_uses_fastcall = crnt->ml_flags & METH_FASTCALL; - } - else if (*numpy_uses_fastcall != (crnt->ml_flags & METH_FASTCALL)) { -+ PyErr_SetString(PyExc_RuntimeError, -+ "ufunc.at() flags do not match numpy_uses_fastcall"); - return -1; - } - } -@@ -351,11 +354,13 @@ init_ufunc_dispatch(int *numpy_uses_fast - && (ufunc_dispatch.ufunc_accumulate != NULL) - && (ufunc_dispatch.ufunc_reduceat != NULL) - && (ufunc_dispatch.ufunc_outer != NULL) --#if NPY_API_VERSION >= 0x00000008 - && (ufunc_dispatch.ufunc_at != NULL) --#endif - ); -+ } else { -+ char const * const fmt = "Unexpected ufunc method %s()"; -+ PyErr_Format(PyExc_RuntimeError, fmt, crnt_name); - } -+ - return result; - } - -@@ -425,13 +430,11 @@ dufunc_outer_fast(PyDUFuncObject * self, - } - - --#if NPY_API_VERSION >= 0x00000008 - static PyObject * - dufunc_at(PyDUFuncObject * self, PyObject * args) - { - return ufunc_dispatch.ufunc_at((PyObject*)self->ufunc, args); - } --#endif - - static PyObject * - dufunc__compile_for_args(PyDUFuncObject * self, PyObject * args, -@@ -609,11 +612,9 @@ static struct PyMethodDef dufunc_methods - {"outer", - (PyCFunction)dufunc_outer, - METH_VARARGS | METH_KEYWORDS, NULL}, --#if NPY_API_VERSION >= 0x00000008 - {"at", - (PyCFunction)dufunc_at, - METH_VARARGS, NULL}, --#endif - {"_compile_for_args", - (PyCFunction)dufunc__compile_for_args, - METH_VARARGS | METH_KEYWORDS, -@@ -643,11 +644,9 @@ static struct PyMethodDef dufunc_methods - {"outer", - (PyCFunction)dufunc_outer_fast, - METH_FASTCALL | METH_KEYWORDS, NULL}, --#if NPY_API_VERSION >= 0x00000008 - {"at", - (PyCFunction)dufunc_at, - METH_VARARGS, NULL}, --#endif - {"_compile_for_args", - (PyCFunction)dufunc__compile_for_args, - METH_VARARGS | METH_KEYWORDS, -@@ -791,9 +790,7 @@ MOD_INIT(_internal) - if (PyModule_AddIntMacro(m, PyUFunc_One) - || PyModule_AddIntMacro(m, PyUFunc_Zero) - || PyModule_AddIntMacro(m, PyUFunc_None) --#if NPY_API_VERSION >= 0x00000007 - || PyModule_AddIntMacro(m, PyUFunc_ReorderableNone) --#endif - ) - return MOD_ERROR_VAL; - -Index: numba-0.56.4/numba/stencils/stencilparfor.py -=================================================================== ---- numba-0.56.4.orig/numba/stencils/stencilparfor.py -+++ numba-0.56.4/numba/stencils/stencilparfor.py -@@ -21,6 +21,7 @@ from numba.core.ir_utils import (get_cal - find_callname, require, find_const, GuardException) - from numba.core.errors import NumbaValueError - from numba.core.utils import OPERATORS_TO_BUILTINS -+from numba.np import numpy_support - - - def _compute_last_ind(dim_size, index_const): -@@ -264,7 +265,11 @@ class StencilPass(object): - dtype_g_np_assign = ir.Assign(dtype_g_np, dtype_g_np_var, loc) - init_block.body.append(dtype_g_np_assign) - -- dtype_np_attr_call = ir.Expr.getattr(dtype_g_np_var, return_type.dtype.name, loc) -+ return_type_name = numpy_support.as_dtype( -+ return_type.dtype).type.__name__ -+ if return_type_name == 'bool': -+ return_type_name = 'bool_' -+ dtype_np_attr_call = ir.Expr.getattr(dtype_g_np_var, return_type_name, loc) - dtype_attr_var = ir.Var(scope, mk_unique_var("$np_attr_attr"), loc) - self.typemap[dtype_attr_var.name] = types.functions.NumberClass(return_type.dtype) - dtype_attr_assign = ir.Assign(dtype_np_attr_call, dtype_attr_var, loc) -Index: numba-0.56.4/numba/tests/test_array_methods.py -=================================================================== ---- numba-0.56.4.orig/numba/tests/test_array_methods.py -+++ numba-0.56.4/numba/tests/test_array_methods.py -@@ -1193,7 +1193,7 @@ class TestArrayMethods(MemoryLeakMixin, - pyfunc = array_sum_dtype_kws - cfunc = jit(nopython=True)(pyfunc) - all_dtypes = [np.float64, np.float32, np.int64, np.int32, np.uint32, -- np.uint64, np.complex64, np.complex128, TIMEDELTA_M] -+ np.uint64, np.complex64, np.complex128] - all_test_arrays = [ - [np.ones((7, 6, 5, 4, 3), arr_dtype), - np.ones(1, arr_dtype), -@@ -1207,8 +1207,7 @@ class TestArrayMethods(MemoryLeakMixin, - np.dtype('uint32'): [np.float64, np.int64, np.float32], - np.dtype('uint64'): [np.float64, np.int64], - np.dtype('complex64'): [np.complex64, np.complex128], -- np.dtype('complex128'): [np.complex128], -- np.dtype(TIMEDELTA_M): [np.dtype(TIMEDELTA_M)]} -+ np.dtype('complex128'): [np.complex128]} - - for arr_list in all_test_arrays: - for arr in arr_list: -@@ -1216,15 +1215,15 @@ class TestArrayMethods(MemoryLeakMixin, - subtest_str = ("Testing np.sum with {} input and {} output" - .format(arr.dtype, out_dtype)) - with self.subTest(subtest_str): -- self.assertPreciseEqual(pyfunc(arr, dtype=out_dtype), -- cfunc(arr, dtype=out_dtype)) -+ self.assertPreciseEqual(pyfunc(arr, dtype=out_dtype), -+ cfunc(arr, dtype=out_dtype)) - - def test_sum_axis_dtype_kws(self): - """ test sum with axis and dtype parameters over a whole range of dtypes """ - pyfunc = array_sum_axis_dtype_kws - cfunc = jit(nopython=True)(pyfunc) - all_dtypes = [np.float64, np.float32, np.int64, np.int32, np.uint32, -- np.uint64, np.complex64, np.complex128, TIMEDELTA_M] -+ np.uint64, np.complex64, np.complex128] - all_test_arrays = [ - [np.ones((7, 6, 5, 4, 3), arr_dtype), - np.ones(1, arr_dtype), -@@ -1238,9 +1237,7 @@ class TestArrayMethods(MemoryLeakMixin, - np.dtype('uint32'): [np.float64, np.int64, np.float32], - np.dtype('uint64'): [np.float64, np.uint64], - np.dtype('complex64'): [np.complex64, np.complex128], -- np.dtype('complex128'): [np.complex128], -- np.dtype(TIMEDELTA_M): [np.dtype(TIMEDELTA_M)], -- np.dtype(TIMEDELTA_Y): [np.dtype(TIMEDELTA_Y)]} -+ np.dtype('complex128'): [np.complex128]} - - for arr_list in all_test_arrays: - for arr in arr_list: -Index: numba-0.56.4/numba/tests/test_comprehension.py -=================================================================== ---- numba-0.56.4.orig/numba/tests/test_comprehension.py -+++ numba-0.56.4/numba/tests/test_comprehension.py -@@ -11,6 +11,7 @@ from numba import jit, typed - from numba.core import types, utils - from numba.core.errors import TypingError, LoweringError - from numba.core.types.functions import _header_lead -+from numba.np.numpy_support import numpy_version - from numba.tests.support import tag, _32bit, captured_stdout - - -@@ -360,6 +361,7 @@ class TestArrayComprehension(unittest.Te - self.check(comp_nest_with_array_conditional, 5, - assert_allocate_list=True) - -+ @unittest.skipUnless(numpy_version < (1, 24), 'Removed in NumPy 1.24') - def test_comp_nest_with_dependency(self): - def comp_nest_with_dependency(n): - l = np.array([[i * j for j in range(i+1)] for i in range(n)]) -Index: numba-0.56.4/numba/tests/test_linalg.py -=================================================================== ---- numba-0.56.4.orig/numba/tests/test_linalg.py -+++ numba-0.56.4/numba/tests/test_linalg.py -@@ -1122,6 +1122,32 @@ class TestLinalgSvd(TestLinalgBase): - Tests for np.linalg.svd. - """ - -+ # This checks that A ~= U*S*V**H, i.e. SV decomposition ties out. This is -+ # required as NumPy uses only double precision LAPACK routines and -+ # computation of SVD is numerically sensitive. Numba uses type-specific -+ # routines and therefore sometimes comes out with a different answer to -+ # NumPy (orthonormal bases are not unique, etc.). -+ -+ def check_reconstruction(self, a, got, expected): -+ u, sv, vt = got -+ -+ # Check they are dimensionally correct -+ for k in range(len(expected)): -+ self.assertEqual(got[k].shape, expected[k].shape) -+ -+ # Columns in u and rows in vt dictates the working size of s -+ s = np.zeros((u.shape[1], vt.shape[0])) -+ np.fill_diagonal(s, sv) -+ -+ rec = np.dot(np.dot(u, s), vt) -+ resolution = np.finfo(a.dtype).resolution -+ np.testing.assert_allclose( -+ a, -+ rec, -+ rtol=10 * resolution, -+ atol=100 * resolution # zeros tend to be fuzzy -+ ) -+ - @needs_lapack - def test_linalg_svd(self): - """ -@@ -1150,34 +1176,8 @@ class TestLinalgSvd(TestLinalgBase): - # plain match failed, test by reconstruction - use_reconstruction = True - -- # if plain match fails then reconstruction is used. -- # this checks that A ~= U*S*V**H -- # i.e. SV decomposition ties out -- # this is required as numpy uses only double precision lapack -- # routines and computation of svd is numerically -- # sensitive, numba using the type specific routines therefore -- # sometimes comes out with a different answer (orthonormal bases -- # are not unique etc.). - if use_reconstruction: -- u, sv, vt = got -- -- # check they are dimensionally correct -- for k in range(len(expected)): -- self.assertEqual(got[k].shape, expected[k].shape) -- -- # regardless of full_matrices cols in u and rows in vt -- # dictates the working size of s -- s = np.zeros((u.shape[1], vt.shape[0])) -- np.fill_diagonal(s, sv) -- -- rec = np.dot(np.dot(u, s), vt) -- resolution = np.finfo(a.dtype).resolution -- np.testing.assert_allclose( -- a, -- rec, -- rtol=10 * resolution, -- atol=100 * resolution # zeros tend to be fuzzy -- ) -+ self.check_reconstruction(a, got, expected) - - # Ensure proper resource management - with self.assertNoNRTLeak(): -@@ -1238,8 +1238,11 @@ class TestLinalgSvd(TestLinalgBase): - got = func(X, False) - np.testing.assert_allclose(X, X_orig) - -- for e_a, g_a in zip(expected, got): -- np.testing.assert_allclose(e_a, g_a) -+ try: -+ for e_a, g_a in zip(expected, got): -+ np.testing.assert_allclose(e_a, g_a) -+ except AssertionError: -+ self.check_reconstruction(X, got, expected) - - - class TestLinalgQr(TestLinalgBase): -Index: numba-0.56.4/numba/tests/test_mathlib.py -=================================================================== ---- numba-0.56.4.orig/numba/tests/test_mathlib.py -+++ numba-0.56.4/numba/tests/test_mathlib.py -@@ -516,7 +516,7 @@ class TestMathLib(TestCase): - with warnings.catch_warnings(): - warnings.simplefilter("error", RuntimeWarning) - self.assertRaisesRegexp(RuntimeWarning, -- 'overflow encountered in .*_scalars', -+ 'overflow encountered in .*scalar', - naive_hypot, val, val) - - def test_hypot_npm(self): -Index: numba-0.56.4/numba/tests/test_np_functions.py -=================================================================== ---- numba-0.56.4.orig/numba/tests/test_np_functions.py -+++ numba-0.56.4/numba/tests/test_np_functions.py -@@ -932,11 +932,11 @@ class TestNPFunctions(MemoryLeakMixin, T - yield np.inf, None - yield np.PINF, None - yield np.asarray([-np.inf, 0., np.inf]), None -- yield np.NINF, np.zeros(1, dtype=np.bool) -- yield np.inf, np.zeros(1, dtype=np.bool) -- yield np.PINF, np.zeros(1, dtype=np.bool) -+ yield np.NINF, np.zeros(1, dtype=np.bool_) -+ yield np.inf, np.zeros(1, dtype=np.bool_) -+ yield np.PINF, np.zeros(1, dtype=np.bool_) - yield np.NINF, np.empty(12) -- yield np.asarray([-np.inf, 0., np.inf]), np.zeros(3, dtype=np.bool) -+ yield np.asarray([-np.inf, 0., np.inf]), np.zeros(3, dtype=np.bool_) - - pyfuncs = [isneginf, isposinf] - for pyfunc in pyfuncs: -@@ -4775,6 +4775,7 @@ def foo(): - eval(compile(funcstr, '', 'exec')) - return locals()['foo'] - -+ @unittest.skipIf(numpy_version >= (1, 24), "NumPy < 1.24 required") - def test_MachAr(self): - attrs = ('ibeta', 'it', 'machep', 'eps', 'negep', 'epsneg', 'iexp', - 'minexp', 'xmin', 'maxexp', 'xmax', 'irnd', 'ngrd', -@@ -4817,7 +4818,8 @@ def foo(): - cfunc = jit(nopython=True)(iinfo) - cfunc(np.float64(7)) - -- @unittest.skipUnless(numpy_version >= (1, 22), "Needs NumPy >= 1.22") -+ @unittest.skipUnless((1, 22) <= numpy_version < (1, 24), -+ "Needs NumPy >= 1.22, < 1.24") - @TestCase.run_test_in_subprocess - def test_np_MachAr_deprecation_np122(self): - # Tests that Numba is replaying the NumPy 1.22 deprecation warning -Index: numba-0.56.4/setup.py -=================================================================== ---- numba-0.56.4.orig/setup.py -+++ numba-0.56.4/setup.py -@@ -23,7 +23,7 @@ min_python_version = "3.7" - max_python_version = "3.11" # exclusive - min_numpy_build_version = "1.11" - min_numpy_run_version = "1.18" --max_numpy_run_version = "1.24" -+max_numpy_run_version = "1.25" # exclusive - min_llvmlite_version = "0.39.0dev0" - max_llvmlite_version = "0.40" - -Index: numba-0.56.4/numba/__init__.py -=================================================================== ---- numba-0.56.4.orig/numba/__init__.py -+++ numba-0.56.4/numba/__init__.py -@@ -142,8 +142,8 @@ def _ensure_critical_deps(): - - if numpy_version < (1, 18): - raise ImportError("Numba needs NumPy 1.18 or greater") -- elif numpy_version > (1, 23): -- raise ImportError("Numba needs NumPy 1.23 or less") -+ elif numpy_version > (1, 24): -+ raise ImportError("Numba needs NumPy 1.24 or less") - - try: - import scipy diff --git a/python-numba.changes b/python-numba.changes index bcb4201..5c4c252 100644 --- a/python-numba.changes +++ b/python-numba.changes @@ -1,3 +1,26 @@ +------------------------------------------------------------------- +Fri May 26 13:28:26 UTC 2023 - Steve Kowalik + +- Update to 0.57.0: + * Support for Python 3.11 (minimum is moved to 3.8) + * Support for NumPy 1.24 (minimum is moved to 1.21) + * Python language support enhancements: + + Exception classes now support arguments that are not compile time + constant. + + The built-in functions hasattr and getattr are supported for compile + time constant attributes. + + The built-in functions str and repr are now implemented similarly to + their Python implementations. Custom __str__ and __repr__ functions + can be associated with types and work as expected. + + Numba’s unicode functionality in str.startswith now supports kwargs + start and end. + + min and max now support boolean types. + + Support is added for the dict(iterable) constructor. +- Dropped patches: + * numba-pr8620-np1.24.patch + * update-tbb-backend-calls-2021.6.patch +- Rebased existing patch. + ------------------------------------------------------------------- Wed Apr 12 05:53:24 UTC 2023 - Steve Kowalik diff --git a/python-numba.spec b/python-numba.spec index 716b34a..a25ef1a 100644 --- a/python-numba.spec +++ b/python-numba.spec @@ -17,13 +17,9 @@ %define skip_python2 1 -# Not compatible with Python 3.11 yet. If this changes, and the python311 -# flavor is active, make sure to expand the multibuild test flavors -# https://github.com/numba/numba/issues/8304 -%define skip_python311 1 %define plainpython python # upper bound is exclusive: min-numpy_ver <= numpy < max_numpy_ver -%define min_numpy_ver 1.18 +%define min_numpy_ver 1.21 %define max_numpy_ver 1.25 %global flavor @BUILD_FLAVOR@%{nil} @@ -43,22 +39,24 @@ %define skip_python311 1 %bcond_without test %endif +%if "%{flavor}" == "test-py311" +%define psuffix -test-py311 +%define skip_python39 1 +%define skip_python310 1 +%bcond_without test +%endif Name: python-numba%{?psuffix} -Version: 0.56.4 +Version: 0.57.0 Release: 0 Summary: NumPy-aware optimizing compiler for Python using LLVM License: BSD-2-Clause URL: https://numba.pydata.org/ # SourceRepository: https://github.com/numba/numba Source: https://files.pythonhosted.org/packages/source/n/numba/numba-%{version}.tar.gz -# PATCH-FIX-UPSTREAM numba-pr8620-np1.24.patch gh#numba/numba#8620 + raising upper bound in setup.py and numba/__init__.py -Patch1: numba-pr8620-np1.24.patch # PATCH-FIX-OPENSUSE skip tests failing due to OBS specifics Patch3: skip-failing-tests.patch -# PATCH-FIX-OPENSUSE update-tbb-backend-calls-2021.6.patch, based on gh#numba/numba#7608 -Patch4: update-tbb-backend-calls-2021.6.patch -BuildRequires: %{python_module devel >= 3.7} +BuildRequires: %{python_module devel >= 3.8} BuildRequires: %{python_module numpy-devel >= %{min_numpy_ver} with %python-numpy-devel < %{max_numpy_ver}} BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools} @@ -67,7 +65,7 @@ BuildRequires: fdupes BuildRequires: gcc-c++ BuildRequires: python-rpm-macros BuildRequires: (tbb-devel >= 2021) -Requires: (python-llvmlite >= 0.39 with python-llvmlite < 0.40) +Requires: (python-llvmlite >= 0.40 with python-llvmlite < 0.41) Requires: (python-numpy >= %{min_numpy_ver} with python-numpy < %{max_numpy_ver}) Requires(post): update-alternatives Requires(postun):update-alternatives @@ -147,7 +145,6 @@ sed 's|^%{buildroot}||' devel-files0-%{$python_bin_suffix}.files > devel-files-% sed 's|^%{buildroot}|%%exclude |' devel-files0-%{$python_bin_suffix}.files > devel-files-exclude-%{$python_bin_suffix}.files } %python_clone -a %{buildroot}%{_bindir}/numba -%python_clone -a %{buildroot}%{_bindir}/pycc %endif %check @@ -164,7 +161,7 @@ popd %if !%{with test} %post -%python_install_alternative numba pycc +%python_install_alternative numba %postun %python_uninstall_alternative numba @@ -173,7 +170,6 @@ popd %license LICENSE %doc CHANGE_LOG README.rst %python_alternative %{_bindir}/numba -%python_alternative %{_bindir}/pycc %{python_sitearch}/numba/ %{python_sitearch}/numba-%{version}.dist-info diff --git a/skip-failing-tests.patch b/skip-failing-tests.patch index 1e72984..0732fbd 100644 --- a/skip-failing-tests.patch +++ b/skip-failing-tests.patch @@ -3,9 +3,11 @@ numba/tests/test_parfors_passes.py | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) ---- a/numba/tests/test_parfors.py -+++ b/numba/tests/test_parfors.py -@@ -1174,6 +1174,7 @@ class TestParforNumPy(TestParforsBase): +Index: numba-0.57.0/numba/tests/test_parfors.py +=================================================================== +--- numba-0.57.0.orig/numba/tests/test_parfors.py ++++ numba-0.57.0/numba/tests/test_parfors.py +@@ -1190,6 +1190,7 @@ class TestParforNumPy(TestParforsBase): self.check_variants(test_impl2, data_gen) self.count_parfors_variants(test_impl2, data_gen) @@ -13,16 +15,16 @@ def test_ndarray_fill(self): def test_impl(x): x.fill(7.0) -@@ -4396,7 +4397,7 @@ class TestParforsVectorizer(TestPrangeBa - # to check vsqrtpd operates on zmm - match_vsqrtpd_on_zmm = re.compile('\n\s+vsqrtpd\s+.*zmm.*\n') +@@ -4479,7 +4480,7 @@ class TestParforsVectorizer(TestPrangeBa + + return asm - @linux_only + @unittest.skip("Our x86_64 asm is most probably different from the upstream one.") def test_vectorizer_fastmath_asm(self): """ This checks that if fastmath is set and the underlying hardware is suitable, and the function supplied is amenable to fastmath based -@@ -4439,7 +4440,7 @@ class TestParforsVectorizer(TestPrangeBa +@@ -4519,7 +4520,7 @@ class TestParforsVectorizer(TestPrangeBa # check no zmm addressing is present self.assertTrue('zmm' not in v) @@ -31,8 +33,10 @@ def test_unsigned_refusal_to_vectorize(self): """ This checks that if fastmath is set and the underlying hardware is suitable, and the function supplied is amenable to fastmath based ---- a/numba/tests/test_parfors_passes.py -+++ b/numba/tests/test_parfors_passes.py +Index: numba-0.57.0/numba/tests/test_parfors_passes.py +=================================================================== +--- numba-0.57.0.orig/numba/tests/test_parfors_passes.py ++++ numba-0.57.0/numba/tests/test_parfors_passes.py @@ -516,6 +516,7 @@ class TestConvertLoopPass(BaseTest): str(raises.exception), ) @@ -41,10 +45,10 @@ def test_init_prange(self): def test_impl(): n = 20 -Index: numba-0.56.2/numba/tests/test_cli.py +Index: numba-0.57.0/numba/tests/test_cli.py =================================================================== ---- numba-0.56.2.orig/numba/tests/test_cli.py -+++ numba-0.56.2/numba/tests/test_cli.py +--- numba-0.57.0.orig/numba/tests/test_cli.py ++++ numba-0.57.0/numba/tests/test_cli.py @@ -264,6 +264,7 @@ class TestGDBCLIInfoBrokenGdbs(TestCase) self.assertIn("No such file or directory", stdout) self.assertIn(path, stdout) diff --git a/update-tbb-backend-calls-2021.6.patch b/update-tbb-backend-calls-2021.6.patch deleted file mode 100644 index 4b07df2..0000000 --- a/update-tbb-backend-calls-2021.6.patch +++ /dev/null @@ -1,72 +0,0 @@ ---- - numba/np/ufunc/tbbpool.cpp | 29 ++++++++++++++++++++++++----- - 1 file changed, 24 insertions(+), 5 deletions(-) - ---- a/numba/np/ufunc/tbbpool.cpp -+++ b/numba/np/ufunc/tbbpool.cpp -@@ -12,6 +12,7 @@ Implement parallel vectorize workqueue o - #undef _XOPEN_SOURCE - #endif - -+#include - #include - #include - #include -@@ -27,10 +28,28 @@ Implement parallel vectorize workqueue o - * from here: - * https://github.com/intel/tbb/blob/2019_U5/include/tbb/tbb_stddef.h#L29 - */ --#if (TBB_INTERFACE_VERSION >= 12060) || (TBB_INTERFACE_VERSION < 12010) --#error "TBB version is incompatible, 2021.1 through to 2021.5 required, i.e. 12010 <= TBB_INTERFACE_VERSION < 12060" -+#if TBB_INTERFACE_VERSION < 12010 -+#error "TBB version is too old, 2021 update 1, i.e. TBB_INTERFACE_VERSION >= 12010 required" - #endif - -+static tbb::task_scheduler_handle tbb_tsh_attach() -+{ -+#if TBB_INTERFACE_VERSION >= 12060 -+ return tbb::attach(); -+#else -+ return tbb::task_scheduler_handle::get(); -+#endif -+} -+ -+static void tbb_tsh_release(tbb::task_scheduler_handle& tsh) -+{ -+#if TBB_INTERFACE_VERSION >= 12060 -+ tsh.release(); -+#else -+ tbb::task_scheduler_handle::release(tsh); -+#endif -+} -+ - #define _DEBUG 0 - #define _TRACE_SPLIT 0 - -@@ -235,7 +254,7 @@ static void prepare_fork(void) - { - if (!tbb::finalize(tsh, std::nothrow)) - { -- tbb::task_scheduler_handle::release(tsh); -+ tbb_tsh_release(tsh); - puts("Unable to join threads to shut down before fork(). " - "This can break multithreading in child processes.\n"); - } -@@ -260,7 +279,7 @@ static void reset_after_fork(void) - - if(need_reinit_after_fork) - { -- tsh = tbb::task_scheduler_handle::get(); -+ tbb_tsh_attach(); - set_main_thread(); - tsh_was_initialized = true; - need_reinit_after_fork = false; -@@ -298,7 +317,7 @@ static void launch_threads(int count) - if(count < 1) - count = tbb::task_arena::automatic; - -- tsh = tbb::task_scheduler_handle::get(); -+ tsh = tbb_tsh_attach(); - tsh_was_initialized = true; - - tg = new tbb::task_group;