public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/pythran] rawhide: Update to 0.19.0
@ 2026-08-21 13:27 Charalampos Stratakis
  0 siblings, 0 replies; only message in thread
From: Charalampos Stratakis @ 2026-08-21 13:27 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/pythran
            Branch : rawhide
            Commit : 3ac8f2dc8ec8698d609e383425a6c7c6ab773b46
            Author : Charalampos Stratakis <cstratak@redhat.com>
            Date   : 2026-08-20T13:30:32+02:00
            Stats  : +3/-1085 in 12 file(s)
            URL    : https://src.fedoraproject.org/rpms/pythran/c/3ac8f2dc8ec8698d609e383425a6c7c6ab773b46?branch=rawhide

            Log:
            Update to 0.19.0

- Fixes: rhbz#2504608, rhbz#2517663

---
diff --git a/2375.patch b/2375.patch
deleted file mode 100644
index c20923d..0000000
--- a/2375.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 4441fba5c677e41eee9e49485ef0a38eaa5f0b96 Mon Sep 17 00:00:00 2001
-From: serge-sans-paille <serge.guelton@telecom-bretagne.eu>
-Date: Wed, 19 Nov 2025 10:18:09 +0100
-Subject: [PATCH] Don't test float128 when it does not exist in numpy
-
----
- pythran/tests/test_conversion.py | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/pythran/tests/test_conversion.py b/pythran/tests/test_conversion.py
-index 6aa0a829b..76dae7c4e 100644
---- a/pythran/tests/test_conversion.py
-+++ b/pythran/tests/test_conversion.py
-@@ -257,12 +257,14 @@ def test_builtin_type9(self):
- 
-     def test_simple_meta_types(self):
-         types = (complex, float, int, bool, str,
--                 np.float128, np.float64, np.float32,
--                 np.complex256, np.complex128, np.complex64,
-+                 np.float64, np.float32,
-+                 np.complex128, np.complex64,
-                  np.uint64, np.uint32, np.uint16, np.uint8,
-                  np.int64, np.int32, np.int16, np.int8,
-                  np.int64, np.int32, np.int16, np.int8,
-                  )
-+        if has_float128:
-+            types += np.float128, np.complex256
-         for i, ty in enumerate(types):
-             kwargs= {f"simple_meta_types_{i}": [Type[ty]]}
-             self.run_test(f"def simple_meta_types_{i}(obj): return obj()",

diff --git a/2398.patch b/2398.patch
deleted file mode 100644
index 7bace04..0000000
--- a/2398.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 3b199a603b3b1785332f9fe66379b5cd06422487 Mon Sep 17 00:00:00 2001
-From: Eli Schwartz <eschwartz@gentoo.org>
-Date: Sun, 18 Jan 2026 20:07:00 -0500
-Subject: [PATCH] mark numpy float128 tests as skippable when numpy lacks
- float128 support
-
-Signed-off-by: Eli Schwartz <eschwartz@gentoo.org>
----
- pythran/tests/test_numpy_func2.py | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/pythran/tests/test_numpy_func2.py b/pythran/tests/test_numpy_func2.py
-index 2b1f31bef..ce29bb92d 100644
---- a/pythran/tests/test_numpy_func2.py
-+++ b/pythran/tests/test_numpy_func2.py
-@@ -5,6 +5,12 @@
- 
- from pythran.typing import NDArray, List, Tuple
- 
-+try:
-+    numpy.float128
-+    has_float128 = True
-+except AttributeError:
-+    has_float128 = False
-+
- 
- np_version = version.parse(numpy.version.version)
- 
-@@ -206,6 +212,7 @@ def test_convolve_2(self):
-                   numpy.arange(10,dtype=float),
-                   np_convolve_2=[NDArray[float,:],NDArray[float,:]])
- 
-+    @unittest.skipIf(not has_float128, 'not float128')
-     def test_convolve_2b(self):
-         self.run_test("def np_convolve_2b(a,b):\n from numpy import convolve\n return convolve(a,b)",
-                   numpy.arange(12,dtype=numpy.float128),

diff --git a/2402.patch b/2402.patch
deleted file mode 100644
index f41de34..0000000
--- a/2402.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From a660da74a63039f33402162dd8907fae9ba4617d Mon Sep 17 00:00:00 2001
-From: serge-sans-paille <serge.guelton@telecom-bretagne.eu>
-Date: Wed, 28 Jan 2026 11:34:14 +0100
-Subject: [PATCH] [ply] Make pythran compatible with top-of-tree PLY version
-
-Fix #2393
----
- pythran/spec.py | 11 +++++++----
- 1 file changed, 7 insertions(+), 4 deletions(-)
-
-diff --git a/pythran/spec.py b/pythran/spec.py
-index 17e844f0e..1398bb4d2 100644
---- a/pythran/spec.py
-+++ b/pythran/spec.py
-@@ -6,6 +6,7 @@
- 
- from collections import defaultdict
- from itertools import product, chain
-+import inspect
- import re
- import ply.lex as lex
- import ply.yacc as yacc
-@@ -523,10 +524,12 @@ def p_error(self, p):
- 
-     def __init__(self):
-         self.lexer = lex.lex(module=self, debug=False)
--        # Do not write the table for better compatibility across ply version
--        self.parser = yacc.yacc(module=self,
--                                debug=False,
--                                write_tables=False)
-+
-+        yacc_kwargs = {'module': self, 'debug': False}
-+        # ply post-3.11 version removed the write_tables parameter
-+        if 'write_tables' in inspect.signature(yacc.yacc).parameters:
-+            yacc_kwargs['write_tables'] = False
-+        self.parser = yacc.yacc(**yacc_kwargs)
- 
-     def __call__(self, text, input_file=None):
-         self.exports = defaultdict(tuple)

diff --git a/2403.patch b/2403.patch
deleted file mode 100644
index 885db34..0000000
--- a/2403.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From cc01f7e0061a0f0a98d2586b651265c3746b785a Mon Sep 17 00:00:00 2001
-From: Charalampos Stratakis <cstratak@redhat.com>
-Date: Tue, 3 Feb 2026 03:04:41 +0100
-Subject: [PATCH] Rename the benchmark file
-
-The test_ prefix of the benchmark file was making
-pytest collect it and use the benchmarks directory as
-root, having the tests failing.
-
-Rename the file so it's not collected via the usual
-pytest runs.
----
- pythran/benchmarks/{test_benchmark.py => benchmark_runner.py} | 0
- 1 file changed, 0 insertions(+), 0 deletions(-)
- rename pythran/benchmarks/{test_benchmark.py => benchmark_runner.py} (100%)
-
-diff --git a/pythran/benchmarks/test_benchmark.py b/pythran/benchmarks/benchmark_runner.py
-similarity index 100%
-rename from pythran/benchmarks/test_benchmark.py
-rename to pythran/benchmarks/benchmark_runner.py
--- 
-2.52.0
-

diff --git a/2404.patch b/2404.patch
deleted file mode 100644
index 751e430..0000000
--- a/2404.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From e0ab7a6a1c5f838e95e47a03e599ebe51b3b2d64 Mon Sep 17 00:00:00 2001
-From: Charalampos Stratakis <cstratak@redhat.com>
-Date: Tue, 10 Feb 2026 20:29:11 +0100
-Subject: [PATCH 1/2] Add from_python/to_python specializations for longlong
- and ulonglong
-
-Commit 854197c67 added Python conversion specializations for all numpy
-type headers but missed longlong and ulonglong. On x86_64 this is
-harmless because int64_t is long, mapped through the int64 functor.
-
-On i686 int64_t is long long, so np.int64/np.uint64 resolve to the
-longlong/ulonglong functors which lack the conversion code, causing
-incomplete type errors during compilation.
----
- pythran/pythonic/include/numpy/longlong.hpp  | 19 ++++++++++++++
- pythran/pythonic/include/numpy/ulonglong.hpp | 19 ++++++++++++++
- pythran/pythonic/numpy/longlong.hpp          | 27 ++++++++++++++++++++
- pythran/pythonic/numpy/ulonglong.hpp         | 27 ++++++++++++++++++++
- 4 files changed, 92 insertions(+)
-
-diff --git a/pythran/pythonic/include/numpy/longlong.hpp b/pythran/pythonic/include/numpy/longlong.hpp
-index 393a0658f..2e3727fb8 100644
---- a/pythran/pythonic/include/numpy/longlong.hpp
-+++ b/pythran/pythonic/include/numpy/longlong.hpp
-@@ -26,4 +26,23 @@ namespace numpy
- } // namespace numpy
- PYTHONIC_NS_END
- 
-+#ifdef ENABLE_PYTHON_MODULE
-+
-+#include "pythonic/python/core.hpp"
-+
-+PYTHONIC_NS_BEGIN
-+
-+template <>
-+struct to_python<numpy::functor::longlong> {
-+  static PyObject *convert(numpy::functor::longlong const &c);
-+};
-+
-+template <>
-+struct from_python<numpy::functor::longlong> {
-+  static bool is_convertible(PyObject *obj);
-+  static numpy::functor::longlong convert(PyObject *obj);
-+};
-+PYTHONIC_NS_END
-+#endif
-+
- #endif
-diff --git a/pythran/pythonic/include/numpy/ulonglong.hpp b/pythran/pythonic/include/numpy/ulonglong.hpp
-index b78622d95..238db2dbb 100644
---- a/pythran/pythonic/include/numpy/ulonglong.hpp
-+++ b/pythran/pythonic/include/numpy/ulonglong.hpp
-@@ -26,4 +26,23 @@ namespace numpy
- } // namespace numpy
- PYTHONIC_NS_END
- 
-+#ifdef ENABLE_PYTHON_MODULE
-+
-+#include "pythonic/python/core.hpp"
-+
-+PYTHONIC_NS_BEGIN
-+
-+template <>
-+struct to_python<numpy::functor::ulonglong> {
-+  static PyObject *convert(numpy::functor::ulonglong const &c);
-+};
-+
-+template <>
-+struct from_python<numpy::functor::ulonglong> {
-+  static bool is_convertible(PyObject *obj);
-+  static numpy::functor::ulonglong convert(PyObject *obj);
-+};
-+PYTHONIC_NS_END
-+#endif
-+
- #endif
-diff --git a/pythran/pythonic/numpy/longlong.hpp b/pythran/pythonic/numpy/longlong.hpp
-index 1fe2865e2..10dcdddae 100644
---- a/pythran/pythonic/numpy/longlong.hpp
-+++ b/pythran/pythonic/numpy/longlong.hpp
-@@ -34,4 +34,31 @@ namespace numpy
- } // namespace numpy
- PYTHONIC_NS_END
- 
-+#ifdef ENABLE_PYTHON_MODULE
-+
-+#include "pythonic/python/core.hpp"
-+#include "numpy/arrayscalars.h"
-+
-+PYTHONIC_NS_BEGIN
-+
-+inline PyObject *
-+to_python<numpy::functor::longlong>::convert(numpy::functor::longlong const &c)
-+{
-+  return (PyObject*)&PyLongLongArrType_Type;
-+}
-+
-+inline bool from_python<numpy::functor::longlong>::is_convertible(PyObject *obj)
-+{
-+  return obj == (PyObject*)&PyLongLongArrType_Type;
-+}
-+
-+inline numpy::functor::longlong
-+from_python<numpy::functor::longlong>::convert(PyObject *obj)
-+{
-+  return {};
-+}
-+
-+PYTHONIC_NS_END
-+#endif
-+
- #endif
-diff --git a/pythran/pythonic/numpy/ulonglong.hpp b/pythran/pythonic/numpy/ulonglong.hpp
-index 4e536d973..1ad287648 100644
---- a/pythran/pythonic/numpy/ulonglong.hpp
-+++ b/pythran/pythonic/numpy/ulonglong.hpp
-@@ -34,4 +34,31 @@ namespace numpy
- } // namespace numpy
- PYTHONIC_NS_END
- 
-+#ifdef ENABLE_PYTHON_MODULE
-+
-+#include "pythonic/python/core.hpp"
-+#include "numpy/arrayscalars.h"
-+
-+PYTHONIC_NS_BEGIN
-+
-+inline PyObject *
-+to_python<numpy::functor::ulonglong>::convert(numpy::functor::ulonglong const &c)
-+{
-+  return (PyObject*)&PyULongLongArrType_Type;
-+}
-+
-+inline bool from_python<numpy::functor::ulonglong>::is_convertible(PyObject *obj)
-+{
-+  return obj == (PyObject*)&PyULongLongArrType_Type;
-+}
-+
-+inline numpy::functor::ulonglong
-+from_python<numpy::functor::ulonglong>::convert(PyObject *obj)
-+{
-+  return {};
-+}
-+
-+PYTHONIC_NS_END
-+#endif
-+
- #endif
-
-From 617d3bf83502d8c8ffb1f8eb46cde767603771e8 Mon Sep 17 00:00:00 2001
-From: Charalampos Stratakis <cstratak@redhat.com>
-Date: Wed, 11 Feb 2026 15:18:57 +0100
-Subject: [PATCH 2/2] Fix uint functor using wrong numpy C API type object
-
-The code was using PyUIntArrType_Type (unsigned int) instead of
-PyULongArrType_Type (unsigned long). Worked on 64-bit by accident
-through macro aliasing but fails on 32-bit with runtime TypeErrors.
----
- pythran/pythonic/numpy/uint.hpp | 10 ++--------
- 1 file changed, 2 insertions(+), 8 deletions(-)
-
-diff --git a/pythran/pythonic/numpy/uint.hpp b/pythran/pythonic/numpy/uint.hpp
-index 1fca195c6..0c504a8af 100644
---- a/pythran/pythonic/numpy/uint.hpp
-+++ b/pythran/pythonic/numpy/uint.hpp
-@@ -43,18 +43,12 @@ PYTHONIC_NS_BEGIN
- 
- inline PyObject *to_python<numpy::functor::uint>::convert(numpy::functor::uint const &c)
- {
--  return (PyObject *)&PyUIntArrType_Type;
-+  return (PyObject *)&PyULongArrType_Type;
- }
- 
- inline bool from_python<numpy::functor::uint>::is_convertible(PyObject *obj)
- {
--  return obj == (PyObject *)&PyUIntArrType_Type ||
--#if NPY_SIZEOF_INTP == NPY_SIZEOF_LONG
--         obj == (PyObject *)&PyUInt64ArrType_Type
--#else
--         obj == (PyObject *)&PyUInt32ArrType_Type
--#endif
--      ;
-+  return obj == (PyObject *)&PyULongArrType_Type;
- }
- 
- inline numpy::functor::uint from_python<numpy::functor::uint>::convert(PyObject *obj)

diff --git a/2407.patch b/2407.patch
deleted file mode 100644
index a4e3d61..0000000
--- a/2407.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 2d25a0ae4f8150480ec58836831ccf3518dc0ccc Mon Sep 17 00:00:00 2001
-From: Charalampos Stratakis <cstratak@redhat.com>
-Date: Tue, 17 Feb 2026 13:12:56 +0100
-Subject: [PATCH] Reduce test_numpy_random_bytes1 sample size to avoid 32-bit
- memory exhaustion
-
-The test allocates 10**8 random bytes then converts to float64, requiring
-~900 MB of contiguous memory. On 32-bit systems with ~3 GB address space
-this reliably fails. Reduce to 10**7 which still validates the statistical
-property well within 0.05 tolerance.
----
- pythran/tests/test_numpy_random.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/pythran/tests/test_numpy_random.py b/pythran/tests/test_numpy_random.py
-index 6547a2e92..4850748e3 100644
---- a/pythran/tests/test_numpy_random.py
-+++ b/pythran/tests/test_numpy_random.py
-@@ -641,7 +641,7 @@ def numpy_random_bytes1(n):
-                 from numpy import mean, frombuffer, uint8, asarray
-                 a = bytes(n)
-                 return (abs(mean(asarray(frombuffer(a, uint8), dtype=float)) - 127.5) < .05)""",
--                      10 ** 8, numpy_random_bytes1=[int])
-+                      10 ** 7, numpy_random_bytes1=[int])
- 
-     ###########################################################################
-     #Tests for numpy.random.exponential

diff --git a/2413.patch b/2413.patch
deleted file mode 100644
index dd59eb7..0000000
--- a/2413.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From d94cca046c7d64208a263d628a0edf974f4e8bc2 Mon Sep 17 00:00:00 2001
-From: Charalampos Stratakis <cstratak@redhat.com>
-Date: Wed, 25 Feb 2026 02:21:56 +0100
-Subject: [PATCH] Reduce C++ code generation during test runs
-
-Reuse the C++ output from generate_cxx for both the determinism check
-and compilation, removing a redundant regeneration through
-compile_pythrancode. Free the intermediate module object after
-stringification to reduce memory usage.
-
-The determinism check can be skipped by setting
-PYTHRAN_SKIP_DETERMINISM_CHECK=1 for resource-constrained environments
-(e.g. 32-bit systems).
----
- pythran/tests/__init__.py | 29 +++++++++++++++++++++--------
- 1 file changed, 21 insertions(+), 8 deletions(-)
-
-diff --git a/pythran/tests/__init__.py b/pythran/tests/__init__.py
-index 517347acb..fbdae84a8 100644
---- a/pythran/tests/__init__.py
-+++ b/pythran/tests/__init__.py
-@@ -26,9 +26,10 @@
- 
- from pythran import compile_pythrancode, spec_parser, load_specfile, frontend
- from pythran.backend import Python
-+from pythran.errors import PythranCompileError
- from pythran.middlend import refine
- from pythran.passmanager import PassManager
--from pythran.toolchain import _parse_optimization, generate_cxx
-+from pythran.toolchain import _parse_optimization, generate_cxx, compile_cxxcode
- from pythran.spec import Spec
- 
- logger = logging.getLogger("pythran")
-@@ -306,14 +307,26 @@ def run_test(self, code, *params, **interface):
- 
-         code = dedent(code)
- 
--        cxx0, _ = generate_cxx(modname, code, interface)
--        cxx1, _ = generate_cxx(modname, code, interface)
--        self.maxDiff, maxDiff = None, self.maxDiff
--        self.assertEqual(str(cxx0), str(cxx1))
--        self.maxDiff = maxDiff
-+        module, error_checker = generate_cxx(modname, code, interface)
-+        cxx_code = str(module)
-+        del module
- 
--        cxx_compiled = compile_pythrancode(
--            modname, code, interface, extra_compile_args=self.PYTHRAN_CXX_FLAGS)
-+        # Verify that code generation is deterministic by generating twice
-+        # and comparing. Set PYTHRAN_SKIP_DETERMINISM_CHECK=1 to disable
-+        # this check and reduce memory usage (e.g. for 32-bit systems).
-+        if not os.environ.get('PYTHRAN_SKIP_DETERMINISM_CHECK'):
-+            cxx1, _ = generate_cxx(modname, code, interface)
-+            self.maxDiff, maxDiff = None, self.maxDiff
-+            self.assertEqual(cxx_code, str(cxx1))
-+            self.maxDiff = maxDiff
-+            del cxx1
-+
-+        try:
-+            cxx_compiled = compile_cxxcode(modname, cxx_code,
-+                                           extra_compile_args=self.PYTHRAN_CXX_FLAGS)
-+        except PythranCompileError:
-+            error_checker()
-+            raise
- 
-         # FIXME Check should be done on input parameters after function call
-         python_ref = self.run_python(code, (name, copy.deepcopy(params)),

diff --git a/2414.patch b/2414.patch
deleted file mode 100644
index 5100ada..0000000
--- a/2414.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From e5fb5d9b58d8afc8dd8a004970bf701a501a1ba0 Mon Sep 17 00:00:00 2001
-From: Charalampos Stratakis <cstratak@redhat.com>
-Date: Wed, 25 Feb 2026 17:03:04 +0100
-Subject: [PATCH 1/2] Widen tolerance in test_numpy_random_bytes1
-
-The previous reduction from 10**8 to 10**7 samples (to avoid 32-bit
-memory exhaustion) increased the statistical variance. With 10**7
-samples and 0.05 tolerance there is roughly a 3% chance of
-the mean falling outside the bound on any given run. Since different
-architectures uses different random seeds, this can cause sporadic
-failures (observed in s390x, ppc64le).
-
-Widen to 0.1 which provides sufficient headroom to make random
-failures statistically negligible while still detecting a broken RNG.
----
- pythran/tests/test_numpy_random.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/pythran/tests/test_numpy_random.py b/pythran/tests/test_numpy_random.py
-index 4850748e3..3e86d3726 100644
---- a/pythran/tests/test_numpy_random.py
-+++ b/pythran/tests/test_numpy_random.py
-@@ -640,7 +640,7 @@ def numpy_random_bytes1(n):
-                 from numpy.random import bytes
-                 from numpy import mean, frombuffer, uint8, asarray
-                 a = bytes(n)
--                return (abs(mean(asarray(frombuffer(a, uint8), dtype=float)) - 127.5) < .05)""",
-+                return (abs(mean(asarray(frombuffer(a, uint8), dtype=float)) - 127.5) < .1)""",
-                       10 ** 7, numpy_random_bytes1=[int])
- 
-     ###########################################################################

diff --git a/2415.patch b/2415.patch
deleted file mode 100644
index 0353765..0000000
--- a/2415.patch
+++ /dev/null
@@ -1,542 +0,0 @@
-From b06f7a8270db8ec8d98c8f5b55234c0f534868f1 Mon Sep 17 00:00:00 2001
-From: Charalampos Stratakis <cstratak@redhat.com>
-Date: Wed, 25 Feb 2026 18:42:08 +0100
-Subject: [PATCH] Widen variance tolerance in random distribution tests
-
-The variance check in statistical tests used a tolerance of 0.05 which
-is too tight for the given sample sizes. This can cause sporadic
-failures across CI architectures since the Python and Pythran code use
-independent random seeds.
-
-Widen from 0.05 to 0.1 across all absolute variance checks, matching
-the tolerance already used by recently added tests.
----
- pythran/tests/test_numpy_random.py | 116 ++++++++++++++---------------
- 1 file changed, 58 insertions(+), 58 deletions(-)
-
-diff --git a/pythran/tests/test_numpy_random.py b/pythran/tests/test_numpy_random.py
-index 4850748e3..cd5782e6e 100644
---- a/pythran/tests/test_numpy_random.py
-+++ b/pythran/tests/test_numpy_random.py
-@@ -180,7 +180,7 @@ def numpy_binomial0(n, p, size):
-          from numpy.random import binomial
-          from numpy import var
-          a = [binomial(n, p) for x in range(size)]
--         return (abs(float(sum(a))/size - n * p) < .05 and abs(var(a) - n*p*(1-p)) < .05)
-+         return (abs(float(sum(a))/size - n * p) < .05 and abs(var(a) - n*p*(1-p)) < .1)
-         """
-         self.run_test(code, 10., .2, 10**5, numpy_binomial0=[float, float, int])
- 
-@@ -190,7 +190,7 @@ def numpy_binomial1(n, p, size):
-          from numpy.random import binomial
-          from numpy import var
-          a=binomial(n, p, size)
--         return (abs(float(sum(a))/size - n * p) < .05 and abs(var(a) - n*p*(1-p)) < .05)
-+         return (abs(float(sum(a))/size - n * p) < .05 and abs(var(a) - n*p*(1-p)) < .1)
-         """
-         self.run_test(code, 7., .2, 10**5, numpy_binomial1=[float, float, int])
- 
-@@ -200,7 +200,7 @@ def numpy_binomial2(n, p, size):
-          from numpy.random import binomial
-          from numpy import sum, var
-          a=binomial(n, p, (size, size))
--         return (abs(float(sum(a))/(size*size) - n * p) < .05 and abs(var(a) - n*p*(1-p)) < .05)
-+         return (abs(float(sum(a))/(size*size) - n * p) < .05 and abs(var(a) - n*p*(1-p)) < .1)
-         """
-         self.run_test(code, 9., .2, 10**3, numpy_binomial2=[float, float, int])
- 
-@@ -231,7 +231,7 @@ def numpy_standard_normal0(size):
-             from numpy import var, mean
-             a = [standard_normal() for x in range(size)]
-             print(mean(a))
--            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_standard_normal0=[int])
- 
-@@ -243,7 +243,7 @@ def numpy_standard_normal1(size):
-             from numpy import var, mean
-             a = standard_normal(size)
-             print(mean(a))
--            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_standard_normal1=[int])
- 
-@@ -255,7 +255,7 @@ def numpy_standard_normal2(size):
-             from numpy import mean, var
-             a = standard_normal((size, size))
-             print(mean(a))
--            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_standard_normal2=[int])
- 
-@@ -271,7 +271,7 @@ def numpy_normal0(size):
-             from numpy import var, mean
-             a = [normal() for x in range(size)]
-             print(mean(a))
--            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_normal0=[int])
- 
-@@ -283,7 +283,7 @@ def numpy_normal0a(size):
-             from numpy import var, mean
-             a = [normal(3.) for x in range(size)]
-             print(mean(a))
--            return (abs(mean(a)-3) < 0.05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)-3) < 0.05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_normal0a=[int])
- 
-@@ -310,7 +310,7 @@ def numpy_normal1(size):
-             from numpy import var, mean
-             a = normal(size=size)
-             print(mean(a))
--            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_normal1=[int])
- 
-@@ -322,7 +322,7 @@ def numpy_normal2(size):
-             from numpy import mean, var
-             a = normal(size=(size, size))
-             print(mean(a))
--            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_normal2=[int])
- 
-@@ -338,7 +338,7 @@ def numpy_poisson0(size):
-             from numpy import var, mean
-             a = [poisson() for x in range(size)]
-             print(mean(a))
--            return (abs(mean(a)-1) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)-1) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_poisson0=[int])
- 
-@@ -350,7 +350,7 @@ def numpy_poisson0a(size):
-             from numpy import var, mean
-             a = [poisson(3.) for x in range(size)]
-             print(mean(a))
--            return (abs(mean(a)-3) < .05 and abs(var(a) - 3) < .05)
-+            return (abs(mean(a)-3) < .05 and abs(var(a) - 3) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_poisson0a=[int])
- 
-@@ -377,7 +377,7 @@ def numpy_poisson1(size):
-             from numpy import var, mean
-             a = poisson(size=size)
-             print(mean(a))
--            return (abs(mean(a)-1) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)-1) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_poisson1=[int])
- 
-@@ -389,7 +389,7 @@ def numpy_poisson2(size):
-             from numpy import mean, var
-             a = poisson(size=(size, size))
-             print(mean(a))
--            return (abs(mean(a)-1) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)-1) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_poisson2=[int])
- 
-@@ -404,7 +404,7 @@ def numpy_randn0(n):
-                 from numpy.random import randn
-                 from numpy import mean, var
-                 a = [randn() for x in range(n)]
--                return (abs(mean(a)) < .05 and abs(var(a) - 1) < .05)""",
-+                return (abs(mean(a)) < .05 and abs(var(a) - 1) < .1)""",
-                       10 ** 5, numpy_randn0=[int])
- 
-     def test_numpy_randn1(self):
-@@ -414,7 +414,7 @@ def numpy_randn1(n):
-                 from numpy.random import randn
-                 from numpy import mean, var
-                 a = randn(n, n)
--                return (abs(mean(a)) < .05 and abs(var(a) - 1) < .05)""",
-+                return (abs(mean(a)) < .05 and abs(var(a) - 1) < .1)""",
-                       10 ** 3, numpy_randn1=[int])
- 
-     ###########################################################################
-@@ -654,7 +654,7 @@ def numpy_exponential0(size):
-             from numpy.random import exponential
-             from numpy import var, mean
-             a = [exponential() for x in range(size)]
--            return (abs(mean(a) -1) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a) -1) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_exponential0=[int])
- 
-@@ -666,7 +666,7 @@ def numpy_exponential0a(size):
-             from numpy import var, mean
-             scale = 2.
-             a = [exponential(scale) for x in range(size)]
--            return (abs(mean(a) - scale) < 0.05 and abs(var(a) - scale**2) < .05)
-+            return (abs(mean(a) - scale) < 0.05 and abs(var(a) - scale**2) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_exponential0a=[int])
- 
-@@ -689,7 +689,7 @@ def numpy_exponential1(size):
-             from numpy.random import exponential
-             from numpy import var, mean
-             a = exponential(size=size)
--            return (abs(mean(a) -1 )< .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a) -1 )< .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_exponential1=[int])
- 
-@@ -700,7 +700,7 @@ def numpy_exponential2(size):
-             from numpy.random import exponential
-             from numpy import mean, var
-             a = exponential(size=(size, size))
--            return (abs(mean(a)) -1 < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a)) -1 < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_exponential2=[int])
- 
-@@ -716,7 +716,7 @@ def numpy_chisquare0a(size):
-             from numpy import var, mean
-             df = 3.
-             a = [chisquare(df) for x in range(size)]
--            return (abs(mean(a) - df) < 0.05 and abs(var(a) - 2*df) < .05)
-+            return (abs(mean(a) - df) < 0.05 and abs(var(a) - 2*df) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_chisquare0a=[int])
- 
-@@ -728,7 +728,7 @@ def numpy_chisquare0b(size):
-             from numpy import var, mean, sqrt
-             df = 2
-             a = chisquare(df, size)
--            return (abs(mean(a) - df) < 0.05 and abs(var(a) - df*2 ) < .05)
-+            return (abs(mean(a) - df) < 0.05 and abs(var(a) - df*2 ) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_chisquare0b=[int])
- 
-@@ -740,7 +740,7 @@ def numpy_chisquare2(size):
-             from numpy import mean, var
-             df = 1
-             a = chisquare(df, size=(size, size))
--            return (abs(mean(a)) - df < .05 and abs(var(a) - 2*df) < .05)
-+            return (abs(mean(a)) - df < .05 and abs(var(a) - 2*df) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_chisquare2=[int])
- 
-@@ -768,7 +768,7 @@ def numpy_gamma0b(size):
-             from numpy import var, mean, sqrt
-             shape, scale = 1,2
-             a = gamma(shape, scale, size)
--            return (abs(mean(a) - shape*scale) < 0.05 and abs(var(a) - shape*scale**2) < .05)
-+            return (abs(mean(a) - shape*scale) < 0.05 and abs(var(a) - shape*scale**2) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_gamma0b=[int])
- 
-@@ -780,7 +780,7 @@ def numpy_gamma2(size):
-             from numpy import mean, var
-             shape = 2
-             a = gamma(shape = shape, size=(size, size))
--            return (abs(mean(a) - shape) < .05 and abs(var(a) - shape) < .05)
-+            return (abs(mean(a) - shape) < .05 and abs(var(a) - shape) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_gamma2=[int])
- 
-@@ -796,7 +796,7 @@ def numpy_weibull0a(size):
-             from numpy import var, mean
-             pa = 3.
-             a = [weibull(pa) for x in range(size)]
--            return (abs(mean(a) - pa) < 0.05 and abs(var(a) - 2*pa) < .05)
-+            return (abs(mean(a) - pa) < 0.05 and abs(var(a) - 2*pa) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_weibull0a=[int])
- 
-@@ -808,7 +808,7 @@ def numpy_weibull0b(size):
-             from numpy import var, mean, sqrt
-             pa = 2
-             a = weibull(pa, size)
--            return (abs(mean(a) - pa) < 0.05 and abs(var(a) - pa*2 ) < .05)
-+            return (abs(mean(a) - pa) < 0.05 and abs(var(a) - pa*2 ) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_weibull0b=[int])
- 
-@@ -820,7 +820,7 @@ def numpy_weibull2(size):
-             from numpy import mean, var
-             pa = 1
-             a = weibull(pa, size=(size, size))
--            return (abs(mean(a)) - pa < .05 and abs(var(a) - 2*pa) < .05)
-+            return (abs(mean(a)) - pa < .05 and abs(var(a) - 2*pa) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_weibull2=[int])
- 
-@@ -959,7 +959,7 @@ def numpy_pareto0a(size):
-             alpha = 10
-             rvar = alpha/((alpha-1)**2*(alpha-2))
-             a = [pareto(alpha) for x in range(size)]
--            return (abs(mean(a)- 0.5) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)- 0.5) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_pareto0a=[int])
- 
-@@ -972,7 +972,7 @@ def numpy_pareto0b(size):
-             alpha = 6
-             rvar = alpha/((alpha-1)**2*(alpha-2))
-             a = pareto(alpha, size)
--            return (abs(mean(a)- 0.5) < 0.05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)- 0.5) < 0.05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_pareto0b=[int])
- 
-@@ -985,7 +985,7 @@ def numpy_pareto2(size):
-             alpha = 5
-             rvar = alpha/((alpha-1)**2*(alpha-2))
-             a = pareto(alpha, size=(size, size))
--            return (abs(mean(a)- 0.5) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)- 0.5) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_pareto2=[int])
- 
-@@ -1003,7 +1003,7 @@ def numpy_power0a(size):
-             rmean = alpha / (alpha + 1)
-             rvar = alpha/((alpha+1)**2*(alpha+2))
-             a = [power(alpha) for x in range(size)]
--            return (abs(mean(a)- rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)- rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_power0a=[int])
- 
-@@ -1017,7 +1017,7 @@ def numpy_power0b(size):
-             rmean = alpha / (alpha + 1)
-             rvar = alpha/((alpha+1)**2*(alpha+2))
-             a = power(alpha, size)
--            return (abs(mean(a)- rmean) < 0.05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)- rmean) < 0.05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_power0b=[int])
- 
-@@ -1031,7 +1031,7 @@ def numpy_power2(size):
-             rmean = alpha / (alpha + 1)
-             rvar = alpha/((alpha+1)**2*(alpha+2))
-             a = power(alpha, size=(size, size))
--            return (abs(mean(a)- rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)- rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_power2=[int])
- 
-@@ -1049,7 +1049,7 @@ def numpy_rayleigh0(size):
-             s = 2
-             rmean = s*sqrt(pi/2)
-             rvar = ((4-pi)/2)*s**2
--            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_rayleigh0=[int])
- 
-@@ -1063,7 +1063,7 @@ def numpy_rayleigh0a(size):
-             a = [rayleigh(s) for x in range(size)]
-             rmean = s*sqrt(pi/2)
-             rvar = ((4-pi)/2)*s**2
--            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_rayleigh0a=[int])
- 
-@@ -1077,7 +1077,7 @@ def numpy_rayleigh0b(size):
-             a = rayleigh(s, size)
-             rmean = s*sqrt(pi/2)
-             rvar = ((4-pi)/2)*s**2
--            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_rayleigh0b=[int])
- 
-@@ -1091,7 +1091,7 @@ def numpy_rayleigh1(size):
-             s = 2
-             rmean = s*sqrt(pi/2)
-             rvar = ((4-pi)/2)*s**2
--            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_rayleigh1=[int])
- 
-@@ -1105,7 +1105,7 @@ def numpy_rayleigh2(size):
-             s = 2
-             rmean = s*sqrt(pi/2)
-             rvar = ((4-pi)/2)*s**2
--            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a)-rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_rayleigh2=[int])
- 
-@@ -1219,7 +1219,7 @@ def numpy_standard_exponential0(size):
-             from numpy.random import standard_exponential
-             from numpy import var, mean
-             a = [standard_exponential() for x in range(size)]
--            return (abs(mean(a) - 1) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a) - 1) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_standard_exponential0=[int])
- 
-@@ -1230,7 +1230,7 @@ def numpy_standard_exponential1(size):
-             from numpy.random import standard_exponential
-             from numpy import var, mean
-             a = standard_exponential(size)
--            return (abs(mean(a) - 1) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a) - 1) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_standard_exponential1=[int])
- 
-@@ -1241,7 +1241,7 @@ def numpy_standard_exponential2(size):
-             from numpy.random import standard_exponential
-             from numpy import mean, var
-             a = standard_exponential((size, size))
--            return (abs(mean(a) - 1) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a) - 1) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_standard_exponential2=[int])
- 
-@@ -1256,7 +1256,7 @@ def numpy_standard_gamma0(size):
-             from numpy.random import standard_gamma
-             from numpy import var, mean
-             a = [standard_gamma(1) for x in range(size)]
--            return (abs(mean(a) - 1) < .05 and abs(var(a) - 1) < .05)
-+            return (abs(mean(a) - 1) < .05 and abs(var(a) - 1) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_standard_gamma0=[int])
- 
-@@ -1267,7 +1267,7 @@ def numpy_standard_gamma1(size):
-             from numpy.random import standard_gamma
-             from numpy import var, mean
-             a = standard_gamma(2, size)
--            return (abs(mean(a) - 2) < .05 and abs(var(a) - 2) < .05)
-+            return (abs(mean(a) - 2) < .05 and abs(var(a) - 2) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_standard_gamma1=[int])
- 
-@@ -1278,7 +1278,7 @@ def numpy_standard_gamma2(size):
-             from numpy.random import standard_gamma
-             from numpy import mean, var
-             a = standard_gamma(3, (size, size))
--            return (abs(mean(a) - 3) < .05 and abs(var(a) - 3) < .05)
-+            return (abs(mean(a) - 3) < .05 and abs(var(a) - 3) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_standard_gamma2=[int])
- 
-@@ -1296,7 +1296,7 @@ def numpy_gumbel0(size):
-             rmean = u + 0.57721
-             rvar = (pi**2/6)
-             a = [gumbel() for x in range(size)]
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_gumbel0=[int])
- 
-@@ -1310,7 +1310,7 @@ def numpy_gumbel0a(size):
-             rmean = u + 0.57721
-             rvar = (pi**2/6)
-             a = [gumbel(u) for x in range(size)]
--            return (abs(mean(a) - rmean ) < 0.05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean ) < 0.05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_gumbel0a=[int])
- 
-@@ -1325,7 +1325,7 @@ def numpy_gumbel0b(size):
-             rmean = u + 0.57721*s
-             rvar = (pi**2/6)*s**2
-             a = gumbel(u, s, size)
--            return (abs(mean(a) - rmean) < 0.05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < 0.05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_gumbel0b=[int])
- 
-@@ -1341,7 +1341,7 @@ def numpy_gumbel1(size):
-             rmean = u + 0.57721*s
-             rvar = (pi**2/6)*s**2
-             a = gumbel(size=size)
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_gumbel1=[int])
- 
-@@ -1357,7 +1357,7 @@ def numpy_gumbel2(size):
-             rmean = u + 0.57721*s
-             rvar = (pi**2/6)*s**2
-             a = gumbel(size=(size, size))
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_gumbel2=[int])
- 
-@@ -1455,7 +1455,7 @@ def numpy_laplace0(size):
-             rmean = u
-             rvar = 2*s**2
-             a = [laplace() for x in range(size)]
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_laplace0=[int])
- 
-@@ -1470,7 +1470,7 @@ def numpy_laplace0a(size):
-             rmean = u
-             rvar = 2*s**2
-             a = [laplace(u) for x in range(size)]
--            return (abs(mean(a) - rmean ) < 0.05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean ) < 0.05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_laplace0a=[int])
- 
-@@ -1485,7 +1485,7 @@ def numpy_laplace0b(size):
-             rmean = u
-             rvar = 2*s**2
-             a = laplace(u, s, size)
--            return (abs(mean(a) - rmean) < 0.05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < 0.05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_laplace0b=[int])
- 
-@@ -1501,7 +1501,7 @@ def numpy_laplace1(size):
-             rmean = u
-             rvar = 2*s**2
-             a = laplace(size=size)
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 6, numpy_laplace1=[int])
- 
-@@ -1517,7 +1517,7 @@ def numpy_laplace2(size):
-             rmean = u
-             rvar = 2*s**2
-             a = laplace(size=(size, size))
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_laplace2=[int])
- 
-@@ -1535,7 +1535,7 @@ def numpy_logseries0(size):
-             rmean = s / (log(1 - s)*(s - 1))
-             rvar = -(s*(s+log(1-s)))/((s - 1)**2*(log(1-s))**2)      
-             a = [logseries(s) for x in range(size)]
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_logseries0=[int])
- 
-@@ -1549,7 +1549,7 @@ def numpy_logseries1(size):
-             rmean = s / (log(1 - s)*(s - 1))
-             rvar = -(s*(s+log(1-s)))/((s - 1)**2*(log(1-s))**2)             
-             a = logseries(s, size)
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 5, numpy_logseries1=[int])
- 
-@@ -1563,7 +1563,7 @@ def numpy_logseries2(size):
-             rmean = s / (log(1 - s)*(s - 1))
-             rvar = -(s*(s+log(1-s)))/((s - 1)**2*(log(1-s))**2)           
-             a = logseries(s, (size, size))
--            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .05)
-+            return (abs(mean(a) - rmean) < .05 and abs(var(a) - rvar) < .1)
-         """
-         self.run_test(code, 10 ** 3, numpy_logseries2=[int])
- 

diff --git a/2431.patch b/2431.patch
deleted file mode 100644
index b3be25c..0000000
--- a/2431.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From c812d05ee79fa95556e44b30d292a60baf5ac04f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
-Date: Tue, 26 May 2026 16:53:48 +0200
-Subject: [PATCH] Fix typing of array.typecodes for Python 3.15
-
-Python 3.15 changed array.typecodes from str to tuple to support
-type codes longer than 1 character (Zf and Zd).
-See https://github.com/python/cpython/issues/148675
-
-Pythran's fill_constants_types() uses type() introspection on live
-Python constants to set signatures, which now produces tuple instead
-of str. Meanwhile, the explicit ConstantIntr(signature=str) was
-silently ignored because ConstantIntr.__init__ never stored it.
-
-Fix ConstantIntr to preserve an explicitly provided signature, and
-skip introspection in fill_constants_types when one is already set.
-
-Without the fix, pytest pythran/tests/test_array.py -k test_typecodes
-fails with:
-
-        else:
->           raise NotImplementedError(t)
-E           NotImplementedError: <class 'tuple'>
-
-pythran/types/tog.py:480: NotImplementedError
-
-Assisted-By: Claude Opus 4.6
----
- pythran/intrinsic.py | 2 ++
- pythran/tables.py    | 7 ++++---
- 2 files changed, 6 insertions(+), 3 deletions(-)
-
-diff --git a/pythran/intrinsic.py b/pythran/intrinsic.py
-index f7566e4de..a5948c172 100644
---- a/pythran/intrinsic.py
-+++ b/pythran/intrinsic.py
-@@ -255,6 +255,8 @@ def __init__(self, **kwargs):
-         """ Forward arguments and remove arguments effects. """
-         kwargs["argument_effects"] = ()
-         super(ConstantIntr, self).__init__(**kwargs)
-+        if 'signature' in kwargs:
-+            self.signature = kwargs['signature']
- 
-     def isliteral(self):
-         """ Mark this intrinsic as a literal. """
-diff --git a/pythran/tables.py b/pythran/tables.py
-index 64ca3d5c2..126656863 100644
---- a/pythran/tables.py
-+++ b/pythran/tables.py
-@@ -4731,9 +4731,10 @@ def fill_constants_types(module_name, elements):
-         if isinstance(intrinsic, dict):  # Submodule case
-             fill_constants_types(module_name + (elem,), intrinsic)
-         elif isinstance(intrinsic, ConstantIntr):
--            # use introspection to get the Python constants types
--            cst = getattr(import_module(".".join(module_name)), elem)
--            intrinsic.signature = type(cst)
-+            if not hasattr(intrinsic, 'signature'):
-+                # use introspection to get the Python constants types
-+                cst = getattr(import_module(".".join(module_name)), elem)
-+                intrinsic.signature = type(cst)
- 
- 
- fill_constants_types((), MODULES)

diff --git a/pythran.spec b/pythran.spec
index a6e36e9..12fb159 100644
--- a/pythran.spec
+++ b/pythran.spec
@@ -1,5 +1,5 @@
 Name:           pythran
-Version:        0.18.1
+Version:        0.19.0
 Release:        %autorelease
 Summary:        Ahead of Time Python compiler for numeric kernels
 
@@ -22,45 +22,6 @@ Provides:       bundled(python3dist(networkx)) = 2.6.1
 URL:            https://github.com/serge-sans-paille/pythran
 Source:         %{url}/archive/%{version}/%{name}-%{version}.tar.gz
 
-# Compatibility with 32 bits numpy
-# Resolved upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2375.patch
-
-# Skip numpy float128 tests when numpy doesn't support them
-# Resolved upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2398.patch
-
-# Compatibility with ply post-3.11 version
-# Resolved upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2402.patch
-
-# Fix directory structure for pytest discovery
-# Sent upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2403.patch
-
-# Fix 32 bit type conversion failures
-# Resolved upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2404.patch
-
-# Reduce test_numpy_random_bytes1 sample size
-# Resolved upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2407.patch
-
-# Reduce C++ code generation during testing
-# Resolved upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2413.patch
-
-# Widen tolerance in test_numpy_random_bytes1
-# Resolved upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2414.patch
-
-# Widen tolerance in random distribution tests
-# Resolved upstream
-Patch: https://github.com/serge-sans-paille/pythran/pull/2415.patch
-
-# Fix typing of array.typecodes for Python 3.15
-Patch: https://github.com/serge-sans-paille/pythran/pull/2431.patch
-
 # there is no actual arched content
 # yet we want to test on all architectures
 # and we also might need to skip some
@@ -126,6 +87,7 @@ sed -i 's/, "nbval"//' pyproject.toml
 sed -i -e 's/-O0/-O1/g' -e 's/-Werror/-w/g' pythran/tests/__init__.py
 
 %pyproject_patch_dependency gast:set_upper:0.8.0
+%pyproject_patch_dependency beniget:drop_lower
 
 
 %generate_buildrequires

diff --git a/sources b/sources
index 92c38e0..0abef40 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pythran-0.18.1.tar.gz) = 15650627b9396b49401067c3a7c161d1569f89f29a08243aa85659023e42ce028633915c51c8c5188a5599c201eb30aa2721d64ba766b2a252203469bc6e2ab1
+SHA512 (pythran-0.19.0.tar.gz) = e7238cdba1e6ab61f8268f52bc7224600ee5db9e54928d78c379ea61da4e00f121fcb03a9666ce0db1f3e3d9755695b6a9dd4f22f770bb554f5e438f04b4f37c

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-21 13:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-21 13:27 [rpms/pythran] rawhide: Update to 0.19.0 Charalampos Stratakis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox