Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-numexpr for openSUSE:Factory checked in at 2024-02-06 16:35:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-numexpr (Old) and /work/SRC/openSUSE:Factory/.python-numexpr.new.1815 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-numexpr" Tue Feb 6 16:35:34 2024 rev:23 rq:1144513 version:2.9.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-numexpr/python-numexpr.changes 2023-12-18 22:56:34.933016150 +0100 +++ /work/SRC/openSUSE:Factory/.python-numexpr.new.1815/python-numexpr.changes 2024-02-06 16:36:22.567015248 +0100 @@ -1,0 +2,10 @@ +Tue Feb 6 09:32:12 UTC 2024 - Dirk Müller <dmuel...@suse.com> + +- update to 2.9.0: + * Support for PyPy (see PRs #467 and #740). The full test suite + should pass now, at least for the 3.10 version. + providing help and additional fixes. + * Fixed more sanitizer issues (see PR #469). + * Modernized the test suite to avoid some warnings. + +------------------------------------------------------------------- Old: ---- numexpr-2.8.8.tar.gz New: ---- numexpr-2.9.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-numexpr.spec ++++++ --- /var/tmp/diff_new_pack.5O7465/_old 2024-02-06 16:36:23.063033192 +0100 +++ /var/tmp/diff_new_pack.5O7465/_new 2024-02-06 16:36:23.067033337 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-numexpr # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-numexpr -Version: 2.8.8 +Version: 2.9.0 Release: 0 Summary: Numerical expression evaluator for NumPy License: MIT @@ -28,6 +28,7 @@ BuildRequires: %{python_module devel >= 3.7} BuildRequires: %{python_module numpy-devel >= 1.13.3} BuildRequires: %{python_module pip} +BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: gcc-c++ ++++++ numexpr-2.8.8.tar.gz -> numexpr-2.9.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/ANNOUNCE.rst new/numexpr-2.9.0/ANNOUNCE.rst --- old/numexpr-2.8.8/ANNOUNCE.rst 2023-12-11 13:56:26.000000000 +0100 +++ new/numexpr-2.9.0/ANNOUNCE.rst 2024-01-26 13:44:10.000000000 +0100 @@ -1,12 +1,13 @@ ======================== -Announcing NumExpr 2.8.8 +Announcing NumExpr 2.9.0 ======================== Hi everyone, -NumExpr 2.8.8 is a release to deal mainly with issues appearing with -upcoming `NumPy` 2.0. Also, some small fixes (support for simple complex -expressions like `ne.evaluate('1.5j')`) and improvements are included. +NumExpr 2.9.0 is a release offering support for latest versions of PyPy. +The full test suite should pass now, at least for the Python 3.10 version. +Thanks to @27rabbitlt for most of the work and @mgorny and @mattip for +providing help and additional fixes. Project documentation is available at: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/PKG-INFO new/numexpr-2.9.0/PKG-INFO --- old/numexpr-2.8.8/PKG-INFO 2023-12-11 14:06:59.466662000 +0100 +++ new/numexpr-2.9.0/PKG-INFO 2024-01-26 13:52:10.854595400 +0100 @@ -1,11 +1,11 @@ Metadata-Version: 2.1 Name: numexpr -Version: 2.8.8 +Version: 2.9.0 Summary: Fast numerical expression evaluator for NumPy Home-page: https://github.com/pydata/numexpr Author: David M. Cooke, Francesc Alted, and others -Maintainer: Robert A. McLeod -Maintainer-email: robbmcl...@gmail.com +Maintainer: Francesc Alted +Maintainer-email: fal...@gmail.com License: MIT Classifier: Development Status :: 6 - Mature Classifier: Intended Audience :: Financial and Insurance Industry diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/RELEASE_NOTES.rst new/numexpr-2.9.0/RELEASE_NOTES.rst --- old/numexpr-2.8.8/RELEASE_NOTES.rst 2023-12-11 13:56:26.000000000 +0100 +++ new/numexpr-2.9.0/RELEASE_NOTES.rst 2024-01-26 13:44:10.000000000 +0100 @@ -1,7 +1,20 @@ ==================================== -Release notes for NumExpr 2.8 series +Release notes for NumExpr 2.9 series ==================================== +Changes from 2.8.8 to 2.9.0 +--------------------------- + +* Support for PyPy (see PRs #467 and #740). The full test suite + should pass now, at least for the 3.10 version. Thanks to + @27rabbitlt for most of the work and @mgorny and @mattip for + providing help and additional fixes. Fixes #463. + +* Fixed more sanitizer issues (see PR #469). Thanks to @27rabbitlt. + +* Modernized the test suite to avoid some warnings. + + Changes from 2.8.7 to 2.8.8 --------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/numexpr/interpreter.cpp new/numexpr-2.9.0/numexpr/interpreter.cpp --- old/numexpr-2.8.8/numexpr/interpreter.cpp 2023-12-11 13:56:26.000000000 +0100 +++ new/numexpr-2.9.0/numexpr/interpreter.cpp 2024-01-26 13:44:10.000000000 +0100 @@ -1029,7 +1029,7 @@ memset(operands, 0, sizeof(operands)); memset(dtypes, 0, sizeof(dtypes)); - if (kwds) { + if (kwds && PyDict_Size(kwds) > 0) { tmp = PyDict_GetItemString(kwds, "casting"); // borrowed ref if (tmp != NULL && !PyArray_CastingConverter(tmp, &casting)) { return NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/numexpr/necompiler.py new/numexpr-2.9.0/numexpr/necompiler.py --- old/numexpr-2.8.8/numexpr/necompiler.py 2023-12-11 13:56:26.000000000 +0100 +++ new/numexpr-2.9.0/numexpr/necompiler.py 2024-01-26 13:44:10.000000000 +0100 @@ -278,7 +278,8 @@ # We also cannot ban `.\d*j`, where `\d*` is some digits (or none), e.g. 1.5j, 1.j if sanitize: no_whitespace = re.sub(r'\s+', '', s) - if _blacklist_re.search(no_whitespace) is not None: + skip_quotes = re.sub(r'(\'[^\']*\')', '', no_whitespace) + if _blacklist_re.search(skip_quotes) is not None: raise ValueError(f'Expression {s} has forbidden control characters.') old_ctx = expressions._context.get_current_context() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/numexpr/tests/test_numexpr.py new/numexpr-2.9.0/numexpr/tests/test_numexpr.py --- old/numexpr-2.8.8/numexpr/tests/test_numexpr.py 2023-12-11 13:56:26.000000000 +0100 +++ new/numexpr-2.9.0/numexpr/tests/test_numexpr.py 2024-01-26 13:44:10.000000000 +0100 @@ -19,7 +19,7 @@ import numpy as np from numpy import ( - array, arange, empty, zeros, int32, int64, uint16, complex_, float64, rec, + array, arange, empty, zeros, int32, int64, uint16, cdouble, float64, rec, copy, ones_like, where, all as alltrue, linspace, sum, prod, sqrt, fmod, floor, ceil, sin, cos, tan, arcsin, arccos, arctan, arctan2, @@ -296,7 +296,7 @@ b = b'a' * 40 res = evaluate('contains(a, b)') assert_equal(res, True) - + def test_where_scalar_bool(self): a = True b = array([1, 2]) @@ -307,7 +307,8 @@ res = evaluate('where(a, b, c)') assert_array_equal(res, c) - + @unittest.skipIf(hasattr(sys, "pypy_version_info"), + "PyPy does not have sys.getrefcount()") def test_refcount(self): # Regression test for issue #310 a = array([1]) @@ -317,7 +318,7 @@ def test_locals_clears_globals(self): # Check for issue #313, whereby clearing f_locals also clear f_globals - # if in the top-frame. This cannot be done inside `unittest` as it is always + # if in the top-frame. This cannot be done inside `unittest` as it is always # executing code in a child frame. script = r';'.join([ r"import numexpr as ne", @@ -333,7 +334,7 @@ ]) # Raises CalledProcessError on a non-normal exit check = subprocess.check_call([sys.executable, '-c', script]) - # Ideally this test should also be done against ipython but it's not + # Ideally this test should also be done against ipython but it's not # a requirement. @@ -443,7 +444,7 @@ def test_complex_expr(self): def complex(a, b): - c = zeros(a.shape, dtype=complex_) + c = zeros(a.shape, dtype=cdouble) c.real = a c.imag = b return c @@ -520,7 +521,7 @@ self.fail() # Forbid colon for lambda funcs - try: + try: evaluate('lambda x: x') except ValueError: pass @@ -576,7 +577,15 @@ evaluate('c.real') evaluate('c.imag') - + # pass imaginary unit j + evaluate('1.5j') + evaluate('3.j') + + # pass forbidden characters within quotes + x = np.array(['a', 'b'], dtype=bytes) + evaluate("x == 'b:'") + + def test_no_sanitize(self): try: # Errors on compile() after eval() evaluate('import os;', sanitize=False) @@ -596,7 +605,7 @@ def test_disassemble(self): assert_equal(disassemble(NumExpr( "where(m, a, -1)", [('m', bool), ('a', float)])), - [[b'where_fbff', b'r0', b'r1[m]', b'r2[a]', b'c3[-1.0]'], + [[b'where_fbff', b'r0', b'r1[m]', b'r2[a]', b'c3[-1.0]'], [b'noop', None, None, None]]) def test_constant_deduplication(self): @@ -615,18 +624,18 @@ assert_equal(ConstantNode(numpy.float32(1)).astKind, "float") assert_equal(ConstantNode(numpy.float32("nan")).astKind, "float") assert_equal(ConstantNode(numpy.float32(3)).value.dtype, numpy.dtype("float32")) - assert_array_equal(NumExpr(ConstantNode(numpy.float32(1))).run(), + assert_array_equal(NumExpr(ConstantNode(numpy.float32(1))).run(), numpy.array(1, dtype="float32")) def test_unaligned_singleton(self): - # Test for issue #397 whether singletons outputs assigned to consts must be + # Test for issue #397 whether singletons outputs assigned to consts must be # aligned or not. a = np.empty(5, dtype=np.uint8)[1:].view(np.int32) evaluate('3', out=a) assert_equal(a, 3) def test_negative_mod(self): - # Test for issue #413, modulus of negative integers. C modulus is + # Test for issue #413, modulus of negative integers. C modulus is # actually remainder op, and hence different from Python modulus. a = np.array([-500, -135, 0, 0, 135, 500], dtype=np.int32) n = np.array([-360, -360, -360, 360, 360, 360], dtype=np.int32) @@ -641,11 +650,11 @@ def test_negative_power_scalar(self): # Test for issue #428, where the power is negative and the base is an # integer. This was running afoul in the precomputation in `expressions.py:pow_op()` - base = np.array([-2, -1, 0, 1, 2, 3], dtype=np.int32) + base = np.array([-2, -1, 1, 2, 3], dtype=np.int32) out_i = evaluate('base ** -1.0') assert_equal(out_i, np.power(base, -1.0)) - base = np.array([-2, -1, 0, 1, 2, 3], dtype=np.int64) + base = np.array([-2, -1, 1, 2, 3], dtype=np.int64) out_l = evaluate('base ** -1.0') assert_equal(out_l, np.power(base, -1.0)) @@ -1111,7 +1120,7 @@ # Test cases for the threading configuration class test_threading_config(TestCase): def test_max_threads_unset(self): - # Has to be done in a subprocess as `importlib.reload` doesn't let us + # Has to be done in a subprocess as `importlib.reload` doesn't let us # re-initialize the threadpool script = '\n'.join([ "import os", @@ -1123,7 +1132,7 @@ subprocess.check_call([sys.executable, '-c', script]) def test_max_threads_set(self): - # Has to be done in a subprocess as `importlib.reload` doesn't let us + # Has to be done in a subprocess as `importlib.reload` doesn't let us # re-initialize the threadpool script = '\n'.join([ "import os", @@ -1238,7 +1247,7 @@ (sysname, nodename, release, os_version, machine, processor) = platform.uname() print('Platform: %s-%s-%s' % (sys.platform, machine, os_version)) try: - # cpuinfo doesn't work on OSX well it seems, so protect these outputs + # cpuinfo doesn't work on OSX well it seems, so protect these outputs # with a try block cpu_info = cpu.info[0] print('CPU vendor: %s' % cpu_info.get('VendorIdentifier', '')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/numexpr/version.py new/numexpr-2.9.0/numexpr/version.py --- old/numexpr-2.8.8/numexpr/version.py 2023-12-11 14:06:59.000000000 +0100 +++ new/numexpr-2.9.0/numexpr/version.py 2024-01-26 13:52:10.000000000 +0100 @@ -1,4 +1,4 @@ # THIS FILE IS GENERATED BY `SETUP.PY` -version = '2.8.8' -numpy_build_version = '1.26.1' +version = '2.9.0' +numpy_build_version = '1.26.2' platform_machine = 'AMD64' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/numexpr.egg-info/PKG-INFO new/numexpr-2.9.0/numexpr.egg-info/PKG-INFO --- old/numexpr-2.8.8/numexpr.egg-info/PKG-INFO 2023-12-11 14:06:59.000000000 +0100 +++ new/numexpr-2.9.0/numexpr.egg-info/PKG-INFO 2024-01-26 13:52:10.000000000 +0100 @@ -1,11 +1,11 @@ Metadata-Version: 2.1 Name: numexpr -Version: 2.8.8 +Version: 2.9.0 Summary: Fast numerical expression evaluator for NumPy Home-page: https://github.com/pydata/numexpr Author: David M. Cooke, Francesc Alted, and others -Maintainer: Robert A. McLeod -Maintainer-email: robbmcl...@gmail.com +Maintainer: Francesc Alted +Maintainer-email: fal...@gmail.com License: MIT Classifier: Development Status :: 6 - Mature Classifier: Intended Audience :: Financial and Insurance Industry diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/numexpr-2.8.8/setup.cfg new/numexpr-2.9.0/setup.cfg --- old/numexpr-2.8.8/setup.cfg 2023-12-11 14:06:59.466662000 +0100 +++ new/numexpr-2.9.0/setup.cfg 2024-01-26 13:52:10.854595400 +0100 @@ -1,10 +1,10 @@ [metadata] name = numexpr -version = 2.8.8 +version = 2.9.0 description = Fast numerical expression evaluator for NumPy author = David M. Cooke, Francesc Alted, and others -maintainer = Robert A. McLeod -maintainer_email = robbmcl...@gmail.com +maintainer = Francesc Alted +maintainer_email = fal...@gmail.com url = https://github.com/pydata/numexpr long_description = file: README.rst long_description_content_type = text/x-rst