Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-numba for openSUSE:Factory checked in at 2023-01-04 17:51:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-numba (Old) and /work/SRC/openSUSE:Factory/.python-numba.new.1563 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-numba" Wed Jan 4 17:51:09 2023 rev:36 rq:1046630 version:0.56.4 Changes: -------- --- /work/SRC/openSUSE:Factory/python-numba/python-numba.changes 2022-10-11 18:05:22.438067751 +0200 +++ /work/SRC/openSUSE:Factory/.python-numba.new.1563/python-numba.changes 2023-01-04 17:51:31.829802424 +0100 @@ -1,0 +2,32 @@ +Tue Jan 3 12:13:00 UTC 2023 - Ben Greiner <c...@bnavigator.de> + +- Split out python flavors into testing multibuilds. Depending on + the obs worker, the test suite can take almost an hour per + flavor. +- Replace allow-numpy-1.24.patch with an updated + numba-pr8620-np1.24.patch to also work with still present numpy + 1.23 in Factory (discussed upstream in gh#numba/numba#8620) +- Merge fix-cli-test.patch into skip-failing-tests.patch + +------------------------------------------------------------------- +Mon Jan 2 21:27:24 UTC 2023 - Ben Greiner <c...@bnavigator.de> + +- Clean up the specfile + * restore the multibuild + * Patch allow-numpy-1.24.patch is the WIP gh#numba/numba#8620 + +------------------------------------------------------------------- +Sun Jan 1 11:41:11 UTC 2023 - Matej Cepl <mc...@suse.com> + +- Update to 0.56.4: + - This is a bugfix release to fix a regression in the CUDA + target in relation to the .view() method on CUDA device + arrays that is present when using NumPy version 1.23.0 or + later. + - This is a bugfix release to remove the version restriction + applied to the setuptools package and to fix a bug in the + CUDA target in relation to copying zero length device arrays + to zero length host arrays. +- Add allow-numpy-1.24.patch to allow work with numpy 1.24 + +------------------------------------------------------------------- Old: ---- fix-cli-test.patch numba-0.56.2.tar.gz New: ---- numba-0.56.4.tar.gz numba-pr8620-np1.24.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-numba.spec ++++++ --- /var/tmp/diff_new_pack.XWJ64l/_old 2023-01-04 17:51:32.765807941 +0100 +++ /var/tmp/diff_new_pack.XWJ64l/_new 2023-01-04 17:51:32.797808129 +0100 @@ -1,7 +1,7 @@ # # spec file # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,35 +16,59 @@ # -%{?!python_module:%define python_module() python3-%{**}} %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 max_numpy_ver 1.24 +%define max_numpy_ver 1.25 + %global flavor @BUILD_FLAVOR@%{nil} -%if "%{flavor}" == "test" -%define psuffix -test -%bcond_without test -%else +%if "%{flavor}" == "" %define psuffix %{nil} %bcond_with test %endif -Name: python-numba%{psuffix} -Version: 0.56.2 +%if "%{flavor}" == "test-py38" +%define psuffix -test-py38 +%define skip_python39 1 +%define skip_python310 1 +%bcond_without test +%endif +%if "%{flavor}" == "test-py39" +%define psuffix -test-py39 +%define skip_python38 1 +%define skip_python310 1 +%bcond_without test +%endif +%if "%{flavor}" == "test-py310" +%define psuffix -test-py310 +%define skip_python38 1 +%define skip_python39 1 +%bcond_without test +%endif + +Name: python-numba%{?psuffix} +Version: 0.56.4 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 -Patch2: fix-cli-test.patch 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 numpy-devel >= %{min_numpy_ver} with %python-numpy-devel < %{max_numpy_ver}} +BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: gcc-c++ BuildRequires: python-rpm-macros @@ -116,19 +140,18 @@ %build %if !%{with test} export CFLAGS="%{optflags} -fPIC" -%python_build +%pyproject_wheel %endif %install %if !%{with test} -%python_install +%pyproject_install %{python_expand # %fdupes %{buildroot}%{$python_sitearch} find %{buildroot}%{$python_sitearch} -name '*.[ch]' > devel-files0-%{$python_bin_suffix}.files sed 's|^%{buildroot}||' devel-files0-%{$python_bin_suffix}.files > devel-files-%{$python_bin_suffix}.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 @@ -139,7 +162,7 @@ mkdir emptytestdir pushd emptytestdir %{python_expand # numbatests: check specific tests with `osc build -M test --define="numbatests <testnames>"` -%{_bindir}/numba-%{$python_bin_suffix} -s +%{_bindir}/numba-%%{$python_bin_suffix} -s $python -m numba.runtests -v -b --exclude-tags='long_running' -m %{_smp_build_ncpus} -- %{?!numbatests:numba.tests}%{?numbatests} } popd @@ -158,7 +181,7 @@ %python_alternative %{_bindir}/numba %python_alternative %{_bindir}/pycc %{python_sitearch}/numba/ -%{python_sitearch}/numba-%{version}-py*.egg-info +%{python_sitearch}/numba-%{version}.dist-info %files %{python_files devel} -f devel-files-%{python_bin_suffix}.files %license LICENSE ++++++ _multibuild ++++++ --- /var/tmp/diff_new_pack.XWJ64l/_old 2023-01-04 17:51:33.097809898 +0100 +++ /var/tmp/diff_new_pack.XWJ64l/_new 2023-01-04 17:51:33.125810063 +0100 @@ -1,4 +1,6 @@ <multibuild> - <package>test</package> + <package>test-py38</package> + <package>test-py39</package> + <package>test-py310</package> </multibuild> ++++++ numba-0.56.2.tar.gz -> numba-0.56.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/CHANGE_LOG new/numba-0.56.4/CHANGE_LOG --- old/numba-0.56.2/CHANGE_LOG 2022-09-02 05:48:15.974872600 +0200 +++ new/numba-0.56.4/CHANGE_LOG 2022-11-03 16:41:43.800891400 +0100 @@ -1,3 +1,43 @@ +Version 0.56.4 (3 November, 2022) +--------------------------------- + +This is a bugfix release to fix a regression in the CUDA target in relation to +the ``.view()`` method on CUDA device arrays that is present when using NumPy +version 1.23.0 or later. + +Pull-Requests: + +* PR `#8537 <https://github.com/numba/numba/pull/8537>`_: Make ol_compatible_view accessible on all targets (`gmarkall <https://github.com/gmarkall>`_) +* PR `#8552 <https://github.com/numba/numba/pull/8552>`_: Update version support table for 0.56.4. (`stuartarchibald <https://github.com/stuartarchibald>`_) +* PR `#8553 <https://github.com/numba/numba/pull/8553>`_: Update CHANGE_LOG for 0.56.4 (`stuartarchibald <https://github.com/stuartarchibald>`_) +* PR `#8570 <https://github.com/numba/numba/pull/8570>`_: Release 0.56 branch: Fix overloads with ``target="generic"`` for CUDA (`gmarkall <https://github.com/gmarkall>`_) +* PR `#8571 <https://github.com/numba/numba/pull/8571>`_: Additional update to CHANGE_LOG for 0.56.4 (`stuartarchibald <https://github.com/stuartarchibald>`_) + +Authors: + +* `gmarkall <https://github.com/gmarkall>`_ +* `stuartarchibald <https://github.com/stuartarchibald>`_ + +Version 0.56.3 (13 October, 2022) +--------------------------------- + +This is a bugfix release to remove the version restriction applied to the +``setuptools`` package and to fix a bug in the CUDA target in relation to +copying zero length device arrays to zero length host arrays. + +Pull-Requests: + +* PR `#8475 <https://github.com/numba/numba/pull/8475>`_: Remove setuptools version pin (`gmarkall <https://github.com/gmarkall>`_) +* PR `#8482 <https://github.com/numba/numba/pull/8482>`_: Fix #8477: Allow copies with different strides for 0-length data (`gmarkall <https://github.com/gmarkall>`_) +* PR `#8486 <https://github.com/numba/numba/pull/8486>`_: Restrict the TBB development package to supported version in Azure. (`stuartarchibald <https://github.com/stuartarchibald>`_) +* PR `#8503 <https://github.com/numba/numba/pull/8503>`_: Update version support table for 0.56.3 (`stuartarchibald <https://github.com/stuartarchibald>`_) +* PR `#8504 <https://github.com/numba/numba/pull/8504>`_: Update CHANGE_LOG for 0.56.3 (`stuartarchibald <https://github.com/stuartarchibald>`_) + +Authors: + +* `gmarkall <https://github.com/gmarkall>`_ +* `stuartarchibald <https://github.com/stuartarchibald>`_ + Version 0.56.2 (1 September, 2022) ---------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/PKG-INFO new/numba-0.56.4/PKG-INFO --- old/numba-0.56.2/PKG-INFO 2022-09-02 05:48:23.630758300 +0200 +++ new/numba-0.56.4/PKG-INFO 2022-11-03 16:41:52.920761300 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: numba -Version: 0.56.2 +Version: 0.56.4 Summary: compiling Python code using LLVM Home-page: https://numba.pydata.org License: BSD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/docs/source/user/installing.rst new/numba-0.56.4/docs/source/user/installing.rst --- old/numba-0.56.2/docs/source/user/installing.rst 2022-09-02 05:48:15.978872500 +0200 +++ new/numba-0.56.4/docs/source/user/installing.rst 2022-11-03 16:41:43.808891300 +0100 @@ -194,14 +194,14 @@ * Required build time: - * ``setuptools<60`` + * ``setuptools`` * ``numpy`` * ``llvmlite`` * Compiler toolchain mentioned above * Required run time: - * ``setuptools<60`` + * ``setuptools`` * ``numpy`` * ``llvmlite`` @@ -278,6 +278,10 @@ +===========+==============+===========================+============================+==============================+===================+=============================+ | 0.57.x | TBC | 3.8.x <= version < 3.12 | 1.19 <= version < 1.24 | 0.40.x | 11.x | 2021.x | +-----------+--------------+---------------------------+----------------------------+------------------------------+-------------------+-----------------------------+ +| 0.56.4 | 2022-11-03 | 3.7.x <= version < 3.11 | 1.18 <= version < 1.24 | 0.39.x | 11.x | 2021.x | ++-----------+--------------+---------------------------+----------------------------+------------------------------+-------------------+-----------------------------+ +| 0.56.3 | 2022-10-13 | 3.7.x <= version < 3.11 | 1.18 <= version < 1.24 | 0.39.x | 11.x | 2021.x | ++-----------+--------------+---------------------------+----------------------------+------------------------------+-------------------+-----------------------------+ | 0.56.2 | 2022-09-01 | 3.7.x <= version < 3.11 | 1.18 <= version < 1.24 | 0.39.x | 11.x | 2021.x | +-----------+--------------+---------------------------+----------------------------+------------------------------+-------------------+-----------------------------+ | 0.56.0 | 2022-07-25 | 3.7.x <= version < 3.11 | 1.18 <= version < 1.23 | 0.39.x | 11.x | 2021.x | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/numba/_version.py new/numba-0.56.4/numba/_version.py --- old/numba-0.56.2/numba/_version.py 2022-09-02 05:48:23.630758300 +0200 +++ new/numba-0.56.4/numba/_version.py 2022-11-03 16:41:52.920761300 +0100 @@ -4,8 +4,8 @@ # unpacked source archive. Distribution tarballs contain a pre-generated copy # of this file. -version_version = '0.56.2' -version_full = 'd6731f6d22f6695ee7abc305f81f81115639e2a4' +version_version = '0.56.4' +version_full = '288a38bbd5a15418a211bf067878dfdf3c139509' def get_versions(default={}, verbose=False): return {'version': version_version, 'full': version_full} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/numba/cuda/compiler.py new/numba-0.56.4/numba/cuda/compiler.py --- old/numba-0.56.2/numba/cuda/compiler.py 2022-09-02 05:48:15.978872500 +0200 +++ new/numba-0.56.4/numba/cuda/compiler.py 2022-11-03 16:41:43.816891200 +0100 @@ -207,14 +207,16 @@ flags.nvvm_options = nvvm_options # Run compilation pipeline - cres = compiler.compile_extra(typingctx=typingctx, - targetctx=targetctx, - func=pyfunc, - args=args, - return_type=return_type, - flags=flags, - locals={}, - pipeline_class=CUDACompiler) + from numba.core.target_extension import target_override + with target_override('cuda'): + cres = compiler.compile_extra(typingctx=typingctx, + targetctx=targetctx, + func=pyfunc, + args=args, + return_type=return_type, + flags=flags, + locals={}, + pipeline_class=CUDACompiler) library = cres.library library.finalize() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/numba/cuda/cudadrv/devicearray.py new/numba-0.56.4/numba/cuda/cudadrv/devicearray.py --- old/numba-0.56.2/numba/cuda/cudadrv/devicearray.py 2022-09-02 05:48:15.882874000 +0200 +++ new/numba-0.56.4/numba/cuda/cudadrv/devicearray.py 2022-11-03 16:41:43.660893400 +0100 @@ -895,6 +895,8 @@ if ary1sq.shape != ary2sq.shape: raise ValueError('incompatible shape: %s vs. %s' % (ary1.shape, ary2.shape)) - if ary1sq.strides != ary2sq.strides: + # We check strides only if the size is nonzero, because strides are + # irrelevant (and can differ) for zero-length copies. + if ary1.size and ary1sq.strides != ary2sq.strides: raise ValueError('incompatible strides: %s vs. %s' % (ary1.strides, ary2.strides)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/numba/cuda/tests/cudadrv/test_cuda_ndarray.py new/numba-0.56.4/numba/cuda/tests/cudadrv/test_cuda_ndarray.py --- old/numba-0.56.2/numba/cuda/tests/cudadrv/test_cuda_ndarray.py 2022-09-02 05:48:15.886874000 +0200 +++ new/numba-0.56.4/numba/cuda/tests/cudadrv/test_cuda_ndarray.py 2022-11-03 16:41:43.664893400 +0100 @@ -420,6 +420,41 @@ got = np.asarray(dary) self.assertEqual(got.dtype, dary.dtype) + @skip_on_cudasim('DeviceNDArray class not present in simulator') + def test_issue_8477(self): + # Ensure that we can copy a zero-length device array to a zero-length + # host array when the strides of the device and host arrays differ - + # this should be possible because the strides are irrelevant when the + # length is zero. For more info see + # https://github.com/numba/numba/issues/8477. + + # Create a device array with shape (0,) and strides (8,) + dev_array = devicearray.DeviceNDArray(shape=(0,), strides=(8,), + dtype=np.int8) + + # Create a host array with shape (0,) and strides (0,) + host_array = np.ndarray(shape=(0,), strides=(0,), dtype=np.int8) + + # Sanity check for this test - ensure our destination has the strides + # we expect, because strides can be ignored in some cases by the + # ndarray constructor - checking here ensures that we haven't failed to + # account for unexpected behaviour across different versions of NumPy + self.assertEqual(host_array.strides, (0,)) + + # Ensure that the copy succeeds in both directions + dev_array.copy_to_host(host_array) + dev_array.copy_to_device(host_array) + + # Ensure that a device-to-device copy also succeeds when the strides + # differ - one way of doing this is to copy the host array across and + # use that for copies in both directions. + dev_array_from_host = cuda.to_device(host_array) + self.assertEqual(dev_array_from_host.shape, (0,)) + self.assertEqual(dev_array_from_host.strides, (0,)) + + dev_array.copy_to_device(dev_array_from_host) + dev_array_from_host.copy_to_device(dev_array) + class TestRecarray(CUDATestCase): def test_recarray(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/numba/np/arrayobj.py new/numba-0.56.4/numba/np/arrayobj.py --- old/numba-0.56.2/numba/np/arrayobj.py 2022-09-02 05:48:15.982872500 +0200 +++ new/numba-0.56.4/numba/np/arrayobj.py 2022-11-03 16:41:43.820891100 +0100 @@ -2420,7 +2420,7 @@ pass -@overload(_compatible_view) +@overload(_compatible_view, target='generic') def ol_compatible_view(a, dtype): """Determines if the array and dtype are compatible for forming a view.""" # NOTE: NumPy 1.23+ uses this check. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/numba/testing/main.py new/numba-0.56.4/numba/testing/main.py --- old/numba-0.56.2/numba/testing/main.py 2022-09-02 05:48:15.906873700 +0200 +++ new/numba-0.56.4/numba/testing/main.py 2022-11-03 16:41:43.824891000 +0100 @@ -207,7 +207,8 @@ parser.add_argument('-g', '--gitdiff', dest='gitdiff', type=git_diff_str, default=False, nargs='?', help=('Run tests from changes made against ' - 'origin/main as identified by `git diff`. ' + 'origin/release0.56 as identified by' + '`git diff`. ' 'If set to "ancestor", the diff compares ' 'against the common ancestor.')) return parser @@ -399,9 +400,9 @@ path = os.path.join('numba', 'tests') if use_common_ancestor: print(f"Git diff by common ancestor") - target = 'origin/main...HEAD' + target = 'origin/release0.56...HEAD' else: - target = 'origin/main..HEAD' + target = 'origin/release0.56..HEAD' gdiff_paths = repo.git.diff(target, path, name_only=True).split() # normalise the paths as they are unix style from repo.git.diff gdiff_paths = [os.path.normpath(x) for x in gdiff_paths] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numba-0.56.2/setup.py new/numba-0.56.4/setup.py --- old/numba-0.56.2/setup.py 2022-09-02 05:48:15.990872400 +0200 +++ new/numba-0.56.4/setup.py 2022-11-03 16:41:43.832891000 +0100 @@ -375,7 +375,7 @@ install_requires = [ 'llvmlite >={},<{}'.format(min_llvmlite_version, max_llvmlite_version), 'numpy >={},<{}'.format(min_numpy_run_version, max_numpy_run_version), - 'setuptools<60', + 'setuptools', 'importlib_metadata; python_version < "3.9"', ] ++++++ numba-pr8620-np1.24.patch ++++++ 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, '<string>', '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 ++++++ skip-failing-tests.patch ++++++ --- /var/tmp/diff_new_pack.XWJ64l/_old 2023-01-04 17:51:34.229816570 +0100 +++ /var/tmp/diff_new_pack.XWJ64l/_new 2023-01-04 17:51:34.265816782 +0100 @@ -1,8 +1,11 @@ -Index: numba-0.54.0/numba/tests/test_parfors.py -=================================================================== ---- numba-0.54.0.orig/numba/tests/test_parfors.py -+++ numba-0.54.0/numba/tests/test_parfors.py -@@ -1146,6 +1146,7 @@ class TestParforNumPy(TestParforsBase): +--- + numba/tests/test_parfors.py | 5 +++-- + 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): self.check_variants(test_impl2, data_gen) self.count_parfors_variants(test_impl2, data_gen) @@ -10,7 +13,7 @@ def test_ndarray_fill(self): def test_impl(x): x.fill(7.0) -@@ -3890,7 +3891,7 @@ class TestParforsVectorizer(TestPrangeBa +@@ -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') @@ -19,7 +22,7 @@ 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 -@@ -3933,7 +3934,7 @@ class TestParforsVectorizer(TestPrangeBa +@@ -4439,7 +4440,7 @@ class TestParforsVectorizer(TestPrangeBa # check no zmm addressing is present self.assertTrue('zmm' not in v) @@ -28,10 +31,8 @@ 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 -Index: numba-0.54.0/numba/tests/test_parfors_passes.py -=================================================================== ---- numba-0.54.0.orig/numba/tests/test_parfors_passes.py -+++ numba-0.54.0/numba/tests/test_parfors_passes.py +--- a/numba/tests/test_parfors_passes.py ++++ b/numba/tests/test_parfors_passes.py @@ -516,6 +516,7 @@ class TestConvertLoopPass(BaseTest): str(raises.exception), ) @@ -40,4 +41,16 @@ def test_init_prange(self): def test_impl(): n = 20 +Index: numba-0.56.2/numba/tests/test_cli.py +=================================================================== +--- numba-0.56.2.orig/numba/tests/test_cli.py ++++ numba-0.56.2/numba/tests/test_cli.py +@@ -264,6 +264,7 @@ class TestGDBCLIInfoBrokenGdbs(TestCase) + self.assertIn("No such file or directory", stdout) + self.assertIn(path, stdout) + ++ @unittest.skip("Fails on type check in OBS") + def test_nonsense_gdb_binary(self): + # Tests that a nonsense binary specified as gdb it picked up ok + env = os.environ.copy() ++++++ update-tbb-backend-calls-2021.6.patch ++++++ --- /var/tmp/diff_new_pack.XWJ64l/_old 2023-01-04 17:51:34.405817608 +0100 +++ /var/tmp/diff_new_pack.XWJ64l/_new 2023-01-04 17:51:34.441817820 +0100 @@ -1,7 +1,9 @@ -Index: numba-0.56.2/numba/np/ufunc/tbbpool.cpp -=================================================================== ---- numba-0.56.2.orig/numba/np/ufunc/tbbpool.cpp -+++ numba-0.56.2/numba/np/ufunc/tbbpool.cpp +--- + 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