summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/wheels.yml6
-rw-r--r--azure-pipelines.yml3
-rw-r--r--numpy/__init__.py2
-rw-r--r--numpy/core/_add_newdocs.py2
-rw-r--r--numpy/core/include/numpy/npy_os.h4
-rw-r--r--numpy/core/numeric.py2
-rw-r--r--numpy/core/src/common/npy_svml.h4
-rw-r--r--numpy/core/src/multiarray/can_cast_table.h124
-rw-r--r--numpy/core/src/multiarray/convert_datatype.c1
-rw-r--r--numpy/core/src/multiarray/legacy_dtype_implementation.c1
-rw-r--r--numpy/core/src/multiarray/multiarraymodule.c8
-rw-r--r--numpy/core/src/multiarray/scalartypes.c.src163
-rw-r--r--numpy/core/src/multiarray/scalartypes.h7
-rw-r--r--numpy/core/src/umath/loops_exponent_log.dispatch.c.src74
-rw-r--r--numpy/core/src/umath/loops_utils.h.src10
-rw-r--r--numpy/core/src/umath/npy_simd_data.h4
-rw-r--r--numpy/core/tests/data/umath-validation-set-exp.csv476
-rw-r--r--numpy/core/tests/data/umath-validation-set-log.csv294
-rw-r--r--numpy/core/tests/test_multiarray.py26
-rw-r--r--numpy/core/tests/test_ufunc.py54
-rw-r--r--numpy/core/tests/test_umath.py13
-rw-r--r--numpy/distutils/ccompiler_opt.py2
-rw-r--r--numpy/f2py/cfuncs.py10
-rwxr-xr-xnumpy/f2py/rules.py4
-rw-r--r--numpy/lib/_datasource.py5
-rw-r--r--numpy/lib/arraysetops.py2
-rw-r--r--tools/wheels/upload_wheels.sh5
27 files changed, 721 insertions, 585 deletions
diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml
index 253dd074b..27abcdba0 100644
--- a/.github/workflows/wheels.yml
+++ b/.github/workflows/wheels.yml
@@ -10,7 +10,6 @@
# builds.
# The labels that trigger builds are:
# 36 - Build(for changes to the building process,
-# 03 - Maintenance(for dependency upgrades), and
# 14 - Release(ensure wheels build before release)
name: Wheel builder
@@ -62,7 +61,6 @@ jobs:
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'pull_request' &&
(contains(github.event.pull_request.labels.*.name, '36 - Build') ||
- contains(github.event.pull_request.labels.*.name, '03 - Maintenance') ||
contains(github.event.pull_request.labels.*.name, '14 - Release'))) ||
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && ( ! endsWith(github.ref, 'dev0')))
runs-on: ${{ matrix.buildplat[0] }}
@@ -156,10 +154,12 @@ jobs:
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'pull_request' &&
(contains(github.event.pull_request.labels.*.name, '36 - Build') ||
- contains(github.event.pull_request.labels.*.name, '03 - Maintenance') ||
contains(github.event.pull_request.labels.*.name, '14 - Release'))) ||
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && ( ! endsWith(github.ref, 'dev0')))
runs-on: ubuntu-latest
+ env:
+ IS_PUSH: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') }}
+ IS_SCHEDULE_DISPATCH: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
steps:
- name: Checkout numpy
uses: actions/checkout@v2
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 9e65f9a20..be0f0a214 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -173,7 +173,8 @@ stages:
displayName: 'Install tools'
- script: |
python -m pip install -r test_requirements.txt
- python -m pip install vulture docutils sphinx==2.2.0 numpydoc
+ # Don't use doc_requirements.txt since that messes up tests
+ python -m pip install vulture sphinx==4.2.0 numpydoc==1.2.0
displayName: 'Install dependencies; some are optional to avoid test skips'
- script: /bin/bash -c "! vulture . --min-confidence 100 --exclude doc/,numpy/distutils/ | grep 'unreachable'"
displayName: 'Check for unreachable code paths in Python modules'
diff --git a/numpy/__init__.py b/numpy/__init__.py
index 46d80fb76..45b0cf23c 100644
--- a/numpy/__init__.py
+++ b/numpy/__init__.py
@@ -11,7 +11,7 @@ How to use the documentation
----------------------------
Documentation is available in two forms: docstrings provided
with the code, and a loose standing reference guide, available from
-`the NumPy homepage <https://www.scipy.org>`_.
+`the NumPy homepage <https://numpy.org>`_.
We recommend exploring the docstrings using
`IPython <https://ipython.org>`_, an advanced Python shell with
diff --git a/numpy/core/_add_newdocs.py b/numpy/core/_add_newdocs.py
index 80409669d..23e82af93 100644
--- a/numpy/core/_add_newdocs.py
+++ b/numpy/core/_add_newdocs.py
@@ -384,7 +384,7 @@ add_newdoc('numpy.core', 'nditer',
>>> luf(lambda i,j:i*i + j/2, a, b)
array([ 0.5, 1.5, 4.5, 9.5, 16.5])
- If operand flags `"writeonly"` or `"readwrite"` are used the
+ If operand flags ``"writeonly"`` or ``"readwrite"`` are used the
operands may be views into the original data with the
`WRITEBACKIFCOPY` flag. In this case `nditer` must be used as a
context manager or the `nditer.close` method must be called before
diff --git a/numpy/core/include/numpy/npy_os.h b/numpy/core/include/numpy/npy_os.h
index efa0e4012..6d335f751 100644
--- a/numpy/core/include/numpy/npy_os.h
+++ b/numpy/core/include/numpy/npy_os.h
@@ -21,6 +21,10 @@
#define NPY_OS_CYGWIN
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
#define NPY_OS_WIN32
+#elif defined(_WIN64) || defined(__WIN64__) || defined(WIN64)
+ #define NPY_OS_WIN64
+#elif defined(__MINGW32__) || defined(__MINGW64__)
+ #define NPY_OS_MINGW
#elif defined(__APPLE__)
#define NPY_OS_DARWIN
#else
diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py
index 39bfc2d55..b89bbe457 100644
--- a/numpy/core/numeric.py
+++ b/numpy/core/numeric.py
@@ -1567,7 +1567,7 @@ def cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None):
array(-3)
Multiple vector cross-products. Note that the direction of the cross
- product vector is defined by the `right-hand rule`.
+ product vector is defined by the *right-hand rule*.
>>> x = np.array([[1,2,3], [4,5,6]])
>>> y = np.array([[4,5,6], [1,2,3]])
diff --git a/numpy/core/src/common/npy_svml.h b/numpy/core/src/common/npy_svml.h
index 4292f7090..1111025d7 100644
--- a/numpy/core/src/common/npy_svml.h
+++ b/numpy/core/src/common/npy_svml.h
@@ -1,5 +1,7 @@
#if NPY_SIMD && defined(NPY_HAVE_AVX512_SKX) && defined(NPY_CAN_LINK_SVML)
+extern __m512 __svml_expf16(__m512 x);
extern __m512 __svml_exp2f16(__m512 x);
+extern __m512 __svml_logf16(__m512 x);
extern __m512 __svml_log2f16(__m512 x);
extern __m512 __svml_log10f16(__m512 x);
extern __m512 __svml_expm1f16(__m512 x);
@@ -19,7 +21,9 @@ extern __m512 __svml_asinhf16(__m512 x);
extern __m512 __svml_acoshf16(__m512 x);
extern __m512 __svml_atanhf16(__m512 x);
+extern __m512d __svml_exp8(__m512d x);
extern __m512d __svml_exp28(__m512d x);
+extern __m512d __svml_log8(__m512d x);
extern __m512d __svml_log28(__m512d x);
extern __m512d __svml_log108(__m512d x);
extern __m512d __svml_expm18(__m512d x);
diff --git a/numpy/core/src/multiarray/can_cast_table.h b/numpy/core/src/multiarray/can_cast_table.h
new file mode 100644
index 000000000..bd9c4c48b
--- /dev/null
+++ b/numpy/core/src/multiarray/can_cast_table.h
@@ -0,0 +1,124 @@
+/*
+ * This file defines a compile time constant casting table for use in
+ * a few situations:
+ * 1. As a fast-path in can-cast (untested how much it helps).
+ * 2. To define the actual cast safety stored on the CastingImpl/ArrayMethod
+ * 3. For scalar math, since it also needs cast safety information.
+ *
+ * It is useful to have this constant to allow writing compile time generic
+ * code based on cast safety in the scalar math code.
+ */
+
+#ifndef NUMPY_CORE_SRC_MULTIARRAY_CAN_CAST_TABLE_H_
+#define NUMPY_CORE_SRC_MULTIARRAY_CAN_CAST_TABLE_H_
+
+#include "numpy/ndarraytypes.h"
+
+
+/* The from type fits into to (it has a smaller or equal number of bits) */
+#define FITS(FROM, TO) (NPY_SIZEOF_##FROM <= NPY_SIZEOF_##TO)
+/* Unsigned "from" fits a signed integer if it is truly smaller */
+#define UFITS(FROM, TO) (NPY_SIZEOF_##FROM < NPY_SIZEOF_##TO)
+/* Integer "from" only fits a float if it is truly smaller or double... */
+#define IFITS(FROM, TO) ( \
+ NPY_SIZEOF_##FROM < NPY_SIZEOF_##TO || ( \
+ NPY_SIZEOF_##FROM == NPY_SIZEOF_##TO \
+ && NPY_SIZEOF_##FROM >= NPY_SIZEOF_DOUBLE))
+
+/*
+ * NOTE: The Order is bool, integers (signed, unsigned) tuples, float, cfloat,
+ * then 6 fixed ones (object, string, unicode, void, datetime, timedelta),
+ * and finally half.
+ * Note that in the future we may only need the numeric casts here, but
+ * currently it fills in the others as well.
+ */
+#define CASTS_SAFELY_FROM_UINT(FROM) \
+ {0, \
+ UFITS(FROM, BYTE), FITS(FROM, BYTE), UFITS(FROM, SHORT), FITS(FROM, SHORT), \
+ UFITS(FROM, INT), FITS(FROM, INT), UFITS(FROM, LONG), FITS(FROM, LONG), \
+ UFITS(FROM, LONGLONG), FITS(FROM, LONGLONG), \
+ IFITS(FROM, FLOAT), IFITS(FROM, DOUBLE), IFITS(FROM, LONGDOUBLE), \
+ IFITS(FROM, FLOAT), IFITS(FROM, DOUBLE), IFITS(FROM, LONGDOUBLE), \
+ 1, 1, 1, 1, 0, NPY_SIZEOF_##FROM < NPY_SIZEOF_TIMEDELTA, IFITS(FROM, HALF)}
+
+#define CASTS_SAFELY_FROM_INT(FROM) \
+ {0, \
+ FITS(FROM, BYTE), 0, FITS(FROM, SHORT), 0, \
+ FITS(FROM, INT), 0, FITS(FROM, LONG), 0, \
+ FITS(FROM, LONGLONG), 0, \
+ IFITS(FROM, FLOAT), IFITS(FROM, DOUBLE), IFITS(FROM, LONGDOUBLE), \
+ IFITS(FROM, FLOAT), IFITS(FROM, DOUBLE), IFITS(FROM, LONGDOUBLE), \
+ 1, 1, 1, 1, 0, NPY_SIZEOF_##FROM <= NPY_SIZEOF_TIMEDELTA, IFITS(FROM, HALF)}
+
+/* Floats are similar to ints, but cap at double */
+#define CASTS_SAFELY_FROM_FLOAT(FROM) \
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ FITS(FROM, FLOAT), FITS(FROM, DOUBLE), FITS(FROM, LONGDOUBLE), \
+ FITS(FROM, FLOAT), FITS(FROM, DOUBLE), FITS(FROM, LONGDOUBLE), \
+ 1, 1, 1, 1, 0, 0, FITS(FROM, HALF)}
+
+#define CASTS_SAFELY_FROM_CFLOAT(FROM) \
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, \
+ FITS(FROM, FLOAT), FITS(FROM, DOUBLE), FITS(FROM, LONGDOUBLE), \
+ 1, 1, 1, 1, 0, 0, 0}
+
+static const npy_bool _npy_can_cast_safely_table[NPY_NTYPES][NPY_NTYPES] = {
+ /* Bool safely casts to anything except datetime (has no zero) */
+ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1},
+ /* Integers in pairs of signed, unsigned */
+ CASTS_SAFELY_FROM_INT(BYTE), CASTS_SAFELY_FROM_UINT(BYTE),
+ CASTS_SAFELY_FROM_INT(SHORT), CASTS_SAFELY_FROM_UINT(SHORT),
+ CASTS_SAFELY_FROM_INT(INT), CASTS_SAFELY_FROM_UINT(INT),
+ CASTS_SAFELY_FROM_INT(LONG), CASTS_SAFELY_FROM_UINT(LONG),
+ CASTS_SAFELY_FROM_INT(LONGLONG), CASTS_SAFELY_FROM_UINT(LONGLONG),
+ /* Floats and complex */
+ CASTS_SAFELY_FROM_FLOAT(FLOAT),
+ CASTS_SAFELY_FROM_FLOAT(DOUBLE),
+ CASTS_SAFELY_FROM_FLOAT(LONGDOUBLE),
+ CASTS_SAFELY_FROM_CFLOAT(FLOAT),
+ CASTS_SAFELY_FROM_CFLOAT(DOUBLE),
+ CASTS_SAFELY_FROM_CFLOAT(LONGDOUBLE),
+ /*
+ * Following the main numeric types are:
+ * object, string, unicode, void, datetime, timedelta (and half)
+ */
+ /* object casts safely only to itself */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* bool + ints */
+ 0, 0, 0, 0, 0, 0, /* floats (without half) */
+ 1, 0, 0, 0, 0, 0, 0},
+ /* String casts safely to object, unicode and void */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* bool + ints */
+ 0, 0, 0, 0, 0, 0, /* floats (without half) */
+ 1, 1, 1, 1, 0, 0, 0},
+ /* Unicode casts safely to object and void */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* bool + ints */
+ 0, 0, 0, 0, 0, 0, /* floats (without half) */
+ 1, 0, 1, 1, 0, 0, 0},
+ /* Void cast safely to object */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* bool + ints */
+ 0, 0, 0, 0, 0, 0, /* floats (without half) */
+ 1, 0, 0, 1, 0, 0, 0},
+ /* datetime cast safely to object, string, unicode, void */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* bool + ints */
+ 0, 0, 0, 0, 0, 0, /* floats (without half) */
+ 1, 1, 1, 1, 1, 0, 0},
+ /* timedelta cast safely to object, string, unicode, void */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* bool + ints */
+ 0, 0, 0, 0, 0, 0, /* floats (without half) */
+ 1, 1, 1, 1, 0, 1, 0},
+ /* half */
+ CASTS_SAFELY_FROM_FLOAT(HALF),
+};
+
+#undef FITS
+#undef UFITS
+#undef IFITS
+#undef CASTS_SAFELY_TO_UINT
+#undef CASTS_SAFELY_TO_INT
+#undef CASTS_SAFELY_TO_FLOAT
+#undef CASTS_SAFELY_TO_CFLOAT
+
+#endif /* NUMPY_CORE_SRC_MULTIARRAY_CAN_CAST_TABLE_H_ */
diff --git a/numpy/core/src/multiarray/convert_datatype.c b/numpy/core/src/multiarray/convert_datatype.c
index b4a7aad34..681382864 100644
--- a/numpy/core/src/multiarray/convert_datatype.c
+++ b/numpy/core/src/multiarray/convert_datatype.c
@@ -15,6 +15,7 @@
#include "numpy/npy_math.h"
#include "array_coercion.h"
+#include "can_cast_table.h"
#include "common.h"
#include "ctors.h"
#include "dtypemeta.h"
diff --git a/numpy/core/src/multiarray/legacy_dtype_implementation.c b/numpy/core/src/multiarray/legacy_dtype_implementation.c
index 72a52d7a8..73c70c393 100644
--- a/numpy/core/src/multiarray/legacy_dtype_implementation.c
+++ b/numpy/core/src/multiarray/legacy_dtype_implementation.c
@@ -13,6 +13,7 @@
#include "scalartypes.h"
#include "_datetime.h"
#include "datetime_strings.h"
+#include "can_cast_table.h"
#include "convert_datatype.h"
#include "legacy_dtype_implementation.h"
diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c
index f206ce2c6..831e68705 100644
--- a/numpy/core/src/multiarray/multiarraymodule.c
+++ b/numpy/core/src/multiarray/multiarraymodule.c
@@ -129,12 +129,18 @@ PyArray_GetPriority(PyObject *obj, double default_)
ret = PyArray_LookupSpecial_OnInstance(obj, "__array_priority__");
if (ret == NULL) {
if (PyErr_Occurred()) {
- PyErr_Clear(); /* TODO[gh-14801]: propagate crashes during attribute access? */
+ /* TODO[gh-14801]: propagate crashes during attribute access? */
+ PyErr_Clear();
}
return default_;
}
priority = PyFloat_AsDouble(ret);
+ if (error_converting(priority)) {
+ /* TODO[gh-14801]: propagate crashes for bad priority? */
+ PyErr_Clear();
+ return default_;
+ }
Py_DECREF(ret);
return priority;
}
diff --git a/numpy/core/src/multiarray/scalartypes.c.src b/numpy/core/src/multiarray/scalartypes.c.src
index af98145c3..459e5b222 100644
--- a/numpy/core/src/multiarray/scalartypes.c.src
+++ b/numpy/core/src/multiarray/scalartypes.c.src
@@ -20,6 +20,7 @@
#include "ctors.h"
#include "usertypes.h"
#include "numpyos.h"
+#include "can_cast_table.h"
#include "common.h"
#include "scalartypes.h"
#include "_datetime.h"
@@ -3712,13 +3713,6 @@ NPY_NO_EXPORT signed char
_npy_next_larger_type_table[NPY_NTYPES];
/*
- * This table describes safe casting for small type numbers,
- * and is used by PyArray_CanCastSafely.
- */
-NPY_NO_EXPORT unsigned char
-_npy_can_cast_safely_table[NPY_NTYPES][NPY_NTYPES];
-
-/*
* This table gives the smallest-size and smallest-kind type to which
* the input types may be safely cast, according to _npy_can_cast_safely.
*/
@@ -3768,161 +3762,6 @@ initialize_casting_tables(void)
/**end repeat**/
- memset(_npy_can_cast_safely_table, 0, sizeof(_npy_can_cast_safely_table));
-
- for (i = 0; i < NPY_NTYPES; ++i) {
- /* Identity */
- _npy_can_cast_safely_table[i][i] = 1;
- if (i != NPY_DATETIME) {
- /*
- * Bool -> <Anything> except datetime (since
- * it conceptually has no zero)
- */
- _npy_can_cast_safely_table[NPY_BOOL][i] = 1;
- }
- /* <Anything> -> Object */
- _npy_can_cast_safely_table[i][NPY_OBJECT] = 1;
- /* <Anything> -> Void */
- _npy_can_cast_safely_table[i][NPY_VOID] = 1;
- }
-
- _npy_can_cast_safely_table[NPY_STRING][NPY_UNICODE] = 1;
-
-#ifndef NPY_SIZEOF_BYTE
-#define NPY_SIZEOF_BYTE 1
-#endif
-
- /* Compile-time loop of casting rules */
-
- /**begin repeat
- * #FROM_NAME = BYTE, UBYTE, SHORT, USHORT, INT, UINT,
- * LONG, ULONG, LONGLONG, ULONGLONG,
- * HALF, FLOAT, DOUBLE, LONGDOUBLE,
- * CFLOAT, CDOUBLE, CLONGDOUBLE#
- * #FROM_BASENAME = BYTE, BYTE, SHORT, SHORT, INT, INT,
- * LONG, LONG, LONGLONG, LONGLONG,
- * HALF, FLOAT, DOUBLE, LONGDOUBLE,
- * FLOAT, DOUBLE, LONGDOUBLE#
- * #from_isint = 1, 0, 1, 0, 1, 0, 1, 0,
- * 1, 0, 0, 0, 0, 0,
- * 0, 0, 0#
- * #from_isuint = 0, 1, 0, 1, 0, 1, 0, 1,
- * 0, 1, 0, 0, 0, 0,
- * 0, 0, 0#
- * #from_isfloat = 0, 0, 0, 0, 0, 0, 0, 0,
- * 0, 0, 1, 1, 1, 1,
- * 0, 0, 0#
- * #from_iscomplex = 0, 0, 0, 0, 0, 0, 0, 0,
- * 0, 0, 0, 0, 0, 0,
- * 1, 1, 1#
- */
-
-#define _FROM_BSIZE NPY_SIZEOF_@FROM_BASENAME@
-#define _FROM_NUM (NPY_@FROM_NAME@)
-
- _npy_can_cast_safely_table[_FROM_NUM][NPY_STRING] = 1;
- _npy_can_cast_safely_table[_FROM_NUM][NPY_UNICODE] = 1;
-
-#if @from_isint@ && NPY_SIZEOF_TIMEDELTA >= _FROM_BSIZE
- /* Allow casts from smaller or equal signed integers to the TIMEDELTA type */
- _npy_can_cast_safely_table[_FROM_NUM][NPY_TIMEDELTA] = 1;
-#elif @from_isuint@ && NPY_SIZEOF_TIMEDELTA > _FROM_BSIZE
- /* Allow casts from smaller unsigned integers to the TIMEDELTA type */
- _npy_can_cast_safely_table[_FROM_NUM][NPY_TIMEDELTA] = 1;
-#endif
-
- /**begin repeat1
- * #TO_NAME = BYTE, UBYTE, SHORT, USHORT, INT, UINT,
- * LONG, ULONG, LONGLONG, ULONGLONG,
- * HALF, FLOAT, DOUBLE, LONGDOUBLE,
- * CFLOAT, CDOUBLE, CLONGDOUBLE#
- * #TO_BASENAME = BYTE, BYTE, SHORT, SHORT, INT, INT,
- * LONG, LONG, LONGLONG, LONGLONG,
- * HALF, FLOAT, DOUBLE, LONGDOUBLE,
- * FLOAT, DOUBLE, LONGDOUBLE#
- * #to_isint = 1, 0, 1, 0, 1, 0, 1, 0,
- * 1, 0, 0, 0, 0, 0,
- * 0, 0, 0#
- * #to_isuint = 0, 1, 0, 1, 0, 1, 0, 1,
- * 0, 1, 0, 0, 0, 0,
- * 0, 0, 0#
- * #to_isfloat = 0, 0, 0, 0, 0, 0, 0, 0,
- * 0, 0, 1, 1, 1, 1,
- * 0, 0, 0#
- * #to_iscomplex = 0, 0, 0, 0, 0, 0, 0, 0,
- * 0, 0, 0, 0, 0, 0,
- * 1, 1, 1#
- */
-#define _TO_BSIZE NPY_SIZEOF_@TO_BASENAME@
-#define _TO_NUM (NPY_@TO_NAME@)
-
- /*
- * NOTE: _FROM_BSIZE and _TO_BSIZE are the sizes of the "base type"
- * which is the same as the size of the type except for
- * complex, where it is the size of the real type.
- */
-
-#if @from_isint@
-
-# if @to_isint@ && (_TO_BSIZE >= _FROM_BSIZE)
- /* int -> int */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_isfloat@ && (_FROM_BSIZE < 8) && (_TO_BSIZE > _FROM_BSIZE)
- /* int -> float */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_isfloat@ && (_FROM_BSIZE >= 8) && (_TO_BSIZE >= _FROM_BSIZE)
- /* int -> float */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_iscomplex@ && (_FROM_BSIZE < 8) && (_TO_BSIZE > _FROM_BSIZE)
- /* int -> complex */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_iscomplex@ && (_FROM_BSIZE >= 8) && (_TO_BSIZE >= _FROM_BSIZE)
- /* int -> complex */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# endif
-
-#elif @from_isuint@
-
-# if @to_isint@ && (_TO_BSIZE > _FROM_BSIZE)
- /* uint -> int */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_isuint@ && (_TO_BSIZE >= _FROM_BSIZE)
- /* uint -> uint */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_isfloat@ && (_FROM_BSIZE < 8) && (_TO_BSIZE > _FROM_BSIZE)
- /* uint -> float */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_isfloat@ && (_FROM_BSIZE >= 8) && (_TO_BSIZE >= _FROM_BSIZE)
- /* uint -> float */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_iscomplex@ && (_FROM_BSIZE < 8) && (_TO_BSIZE > _FROM_BSIZE)
- /* uint -> complex */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_iscomplex@ && (_FROM_BSIZE >= 8) && (_TO_BSIZE >= _FROM_BSIZE)
- /* uint -> complex */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# endif
-
-
-#elif @from_isfloat@
-
-# if @to_isfloat@ && (_TO_BSIZE >= _FROM_BSIZE)
- /* float -> float */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# elif @to_iscomplex@ && (_TO_BSIZE >= _FROM_BSIZE)
- /* float -> complex */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# endif
-
-#elif @from_iscomplex@
-
-# if @to_iscomplex@ && (_TO_BSIZE >= _FROM_BSIZE)
- /* complex -> complex */
- _npy_can_cast_safely_table[_FROM_NUM][_TO_NUM] = 1;
-# endif
-
-#endif
-
#undef _TO_NUM
#undef _TO_BSIZE
diff --git a/numpy/core/src/multiarray/scalartypes.h b/numpy/core/src/multiarray/scalartypes.h
index 95a2f66c6..4d6eda2a1 100644
--- a/numpy/core/src/multiarray/scalartypes.h
+++ b/numpy/core/src/multiarray/scalartypes.h
@@ -1,9 +1,10 @@
#ifndef NUMPY_CORE_SRC_MULTIARRAY_SCALARTYPES_H_
#define NUMPY_CORE_SRC_MULTIARRAY_SCALARTYPES_H_
-/* Internal look-up tables */
-extern NPY_NO_EXPORT unsigned char
-_npy_can_cast_safely_table[NPY_NTYPES][NPY_NTYPES];
+/*
+ * Internal look-up tables, casting safety is defined in convert_datatype.h.
+ * Most of these should be phased out eventually, but some are still used.
+ */
extern NPY_NO_EXPORT signed char
_npy_scalar_kinds_table[NPY_NTYPES];
extern NPY_NO_EXPORT signed char
diff --git a/numpy/core/src/umath/loops_exponent_log.dispatch.c.src b/numpy/core/src/umath/loops_exponent_log.dispatch.c.src
index 2dd43fb85..8f123a48b 100644
--- a/numpy/core/src/umath/loops_exponent_log.dispatch.c.src
+++ b/numpy/core/src/umath/loops_exponent_log.dispatch.c.src
@@ -11,6 +11,7 @@
#include "numpy/npy_math.h"
#include "simd/simd.h"
+#include "npy_svml.h"
#include "loops_utils.h"
#include "loops.h"
#include "lowlevel_strided_loops.h"
@@ -459,11 +460,12 @@ simd_exp_FLOAT(npy_float * op,
@vtype@ cvt_magic = _mm@vsize@_set1_ps(NPY_RINT_CVT_MAGICf);
@vtype@ log2e = _mm@vsize@_set1_ps(NPY_LOG2Ef);
@vtype@ inf = _mm@vsize@_set1_ps(NPY_INFINITYF);
+ @vtype@ ninf = _mm@vsize@_set1_ps(-1*NPY_INFINITYF);
@vtype@ zeros_f = _mm@vsize@_set1_ps(0.0f);
@vtype@ poly, num_poly, denom_poly, quadrant;
@vtype@i vindex = _mm@vsize@_loadu_si@vsize@((@vtype@i*)&indexarr[0]);
- @mask@ xmax_mask, xmin_mask, nan_mask, inf_mask;
+ @mask@ xmax_mask, xmin_mask, nan_mask, inf_mask, ninf_mask;
@mask@ overflow_mask = @isa@_get_partial_load_mask_ps(0, num_lanes);
@mask@ underflow_mask = @isa@_get_partial_load_mask_ps(0, num_lanes);
@mask@ load_mask = @isa@_get_full_load_mask_ps();
@@ -490,9 +492,11 @@ simd_exp_FLOAT(npy_float * op,
xmax_mask = _mm@vsize@_cmp_ps@vsub@(x, _mm@vsize@_set1_ps(xmax), _CMP_GE_OQ);
xmin_mask = _mm@vsize@_cmp_ps@vsub@(x, _mm@vsize@_set1_ps(xmin), _CMP_LE_OQ);
inf_mask = _mm@vsize@_cmp_ps@vsub@(x, inf, _CMP_EQ_OQ);
+ ninf_mask = _mm@vsize@_cmp_ps@vsub@(x, ninf, _CMP_EQ_OQ);
overflow_mask = @or_masks@(overflow_mask,
@xor_masks@(xmax_mask, inf_mask));
- underflow_mask = @or_masks@(underflow_mask, xmin_mask);
+ underflow_mask = @or_masks@(underflow_mask,
+ @xor_masks@(xmin_mask, ninf_mask));
x = @isa@_set_masked_lanes_ps(x, zeros_f, @or_masks@(
@or_masks@(nan_mask, xmin_mask), xmax_mask));
@@ -688,6 +692,43 @@ simd_log_FLOAT(npy_float * op,
#endif // @CHK@
/**end repeat**/
+#if NPY_SIMD && defined(NPY_HAVE_AVX512_SKX) && defined(NPY_CAN_LINK_SVML)
+/**begin repeat
+ * #func = exp, log#
+ * #default_val = 0, 1#
+ */
+static void
+simd_@func@_f64(const npyv_lanetype_f64 *src, npy_intp ssrc,
+ npyv_lanetype_f64 *dst, npy_intp sdst, npy_intp len)
+{
+ const int vstep = npyv_nlanes_f64;
+ for (; len > 0; len -= vstep, src += ssrc*vstep, dst += sdst*vstep) {
+ npyv_f64 x;
+#if @default_val@
+ if (ssrc == 1) {
+ x = npyv_load_till_f64(src, len, @default_val@);
+ } else {
+ x = npyv_loadn_till_f64(src, ssrc, len, @default_val@);
+ }
+#else
+ if (ssrc == 1) {
+ x = npyv_load_tillz_f64(src, len);
+ } else {
+ x = npyv_loadn_tillz_f64(src, ssrc, len);
+ }
+#endif
+ npyv_f64 out = __svml_@func@8(x);
+ if (sdst == 1) {
+ npyv_store_till_f64(dst, len, out);
+ } else {
+ npyv_storen_till_f64(dst, sdst, len, out);
+ }
+ }
+ npyv_cleanup();
+}
+/**end repeat**/
+
+#else
#ifdef SIMD_AVX512F_NOCLANG_BUG
/*
* Vectorized implementation of exp double using AVX512
@@ -732,6 +773,7 @@ AVX512F_exp_DOUBLE(npy_double * op,
__m512d mTH_max = _mm512_set1_pd(0x1.62e42fefa39efp+9);
__m512d mTH_min = _mm512_set1_pd(-0x1.74910d52d3053p+9);
__m512d mTH_inf = _mm512_set1_pd(NPY_INFINITY);
+ __m512d mTH_ninf = _mm512_set1_pd(-NPY_INFINITY);
__m512d zeros_d = _mm512_set1_pd(0.0f);
__m512d ones_d = _mm512_set1_pd(1.0f);
__m256i vindex = _mm256_loadu_si256((__m256i*)&indexarr[0]);
@@ -748,7 +790,7 @@ AVX512F_exp_DOUBLE(npy_double * op,
__mmask8 overflow_mask = avx512_get_partial_load_mask_pd(0, num_lanes);
__mmask8 underflow_mask = avx512_get_partial_load_mask_pd(0, num_lanes);
__mmask8 load_mask = avx512_get_full_load_mask_pd();
- __mmask8 xmin_mask, xmax_mask, inf_mask, nan_mask, nearzero_mask;
+ __mmask8 xmin_mask, xmax_mask, inf_mask, ninf_mask, nan_mask, nearzero_mask;
while (num_remaining_elements > 0) {
if (num_remaining_elements < num_lanes) {
@@ -769,6 +811,7 @@ AVX512F_exp_DOUBLE(npy_double * op,
xmax_mask = _mm512_cmp_pd_mask(x, mTH_max, _CMP_GT_OQ);
xmin_mask = _mm512_cmp_pd_mask(x, mTH_min, _CMP_LT_OQ);
inf_mask = _mm512_cmp_pd_mask(x, mTH_inf, _CMP_EQ_OQ);
+ ninf_mask = _mm512_cmp_pd_mask(x, mTH_ninf, _CMP_EQ_OQ);
__m512i x_abs = _mm512_and_epi64(_mm512_castpd_si512(x),
_mm512_set1_epi64(0x7FFFFFFFFFFFFFFF));
nearzero_mask = _mm512_cmp_pd_mask(_mm512_castsi512_pd(x_abs),
@@ -776,7 +819,8 @@ AVX512F_exp_DOUBLE(npy_double * op,
nearzero_mask = _mm512_kxor(nearzero_mask, nan_mask);
overflow_mask = _mm512_kor(overflow_mask,
_mm512_kxor(xmax_mask, inf_mask));
- underflow_mask = _mm512_kor(underflow_mask, xmin_mask);
+ underflow_mask = _mm512_kor(underflow_mask,
+ _mm512_kxor(xmin_mask, ninf_mask));
x = avx512_set_masked_lanes_pd(x, zeros_d,
_mm512_kor(_mm512_kor(nan_mask, xmin_mask),
_mm512_kor(xmax_mask, nearzero_mask)));
@@ -1080,7 +1124,8 @@ AVX512F_log_DOUBLE(npy_double * op,
#undef WORKAROUND_LLVM__mm512_mask_mul_pd
-#endif // AVX512F_NOCLANG_BUG
+#endif // SIMD_AVX512F_NOCLANG_BUG
+#endif // NPY_CAN_LINK_SVML
#ifdef SIMD_AVX512_SKX
/**begin repeat
@@ -1293,17 +1338,34 @@ NPY_NO_EXPORT void NPY_CPU_DISPATCH_CURFX(FLOAT_@func@)
NPY_NO_EXPORT void NPY_CPU_DISPATCH_CURFX(DOUBLE_@func@)
(char **args, npy_intp const *dimensions, npy_intp const *steps, void *NPY_UNUSED(data))
{
+#if NPY_SIMD && defined(NPY_HAVE_AVX512_SKX) && defined(NPY_CAN_LINK_SVML)
+ const npy_double *src = (npy_double*)args[0];
+ npy_double *dst = (npy_double*)args[1];
+ const int lsize = sizeof(src[0]);
+ const npy_intp ssrc = steps[0] / lsize;
+ const npy_intp sdst = steps[1] / lsize;
+ const npy_intp len = dimensions[0];
+ assert(steps[0] % lsize == 0 && steps[1] % lsize == 0);
+ if (!is_mem_overlap(src, steps[0], dst, steps[1], len) &&
+ npyv_loadable_stride_f64(ssrc) &&
+ npyv_storable_stride_f64(sdst)) {
+ simd_@func@_f64(src, ssrc, dst, sdst, len);
+ return;
+ }
+#else
#ifdef SIMD_AVX512F_NOCLANG_BUG
if (IS_OUTPUT_BLOCKABLE_UNARY(sizeof(npy_double), sizeof(npy_double), 64)) {
AVX512F_@func@_DOUBLE((npy_double*)args[1], (npy_double*)args[0], dimensions[0], steps[0]);
return;
}
-#endif
+#endif // SIMD_AVX512F_NOCLANG_BUG
+#endif // NPY_CAN_LINK_SVML
UNARY_LOOP {
const npy_double in1 = *(npy_double *)ip1;
*(npy_double *)op1 = @scalar@(in1);
}
}
+
/**end repeat**/
/**begin repeat
diff --git a/numpy/core/src/umath/loops_utils.h.src b/numpy/core/src/umath/loops_utils.h.src
index 762e9ee59..df92bc315 100644
--- a/numpy/core/src/umath/loops_utils.h.src
+++ b/numpy/core/src/umath/loops_utils.h.src
@@ -79,7 +79,11 @@ static NPY_INLINE @type@
{
if (n < 8) {
npy_intp i;
- @type@ res = 0.;
+ /*
+ * Start with -0 to preserve -0 values. The reason is that summing
+ * only -0 should return -0, but `0 + -0 == 0` while `-0 + -0 == -0`.
+ */
+ @type@ res = -0.0;
for (i = 0; i < n; i++) {
res += @trf@(*((@dtype@*)(a + i * stride)));
@@ -156,8 +160,8 @@ static NPY_INLINE void
if (n < 8) {
npy_intp i;
- *rr = 0.;
- *ri = 0.;
+ *rr = -0.0;
+ *ri = -0.0;
for (i = 0; i < n; i += 2) {
*rr += *((@ftype@ *)(a + i * stride + 0));
*ri += *((@ftype@ *)(a + i * stride + sizeof(@ftype@)));
diff --git a/numpy/core/src/umath/npy_simd_data.h b/numpy/core/src/umath/npy_simd_data.h
index 62438d7a3..43640a2d6 100644
--- a/numpy/core/src/umath/npy_simd_data.h
+++ b/numpy/core/src/umath/npy_simd_data.h
@@ -15,6 +15,7 @@
#define NPY_TANG_A4 0x1.11115b7aa905ep-7
#define NPY_TANG_A5 0x1.6c1728d739765p-10
+#if !defined NPY_HAVE_AVX512_SKX || !defined NPY_CAN_LINK_SVML
/* Lookup table for 2^(j/32) */
static npy_uint64 EXP_Table_top[32] = {
0x3FF0000000000000,
@@ -85,6 +86,7 @@ static npy_uint64 EXP_Table_tail[32] = {
0x3CF9858F73A18F5E,
0x3C99D3E12DD8A18B,
};
+#endif //#if !defined NPY_HAVE_AVX512_SKX || !defined NPY_CAN_LINK_SVML
#endif
#endif
@@ -128,6 +130,7 @@ static npy_uint64 EXP_Table_tail[32] = {
*/
#if defined NPY_HAVE_AVX512F
#if !(defined(__clang__) && (__clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 1)))
+#if !defined NPY_HAVE_AVX512_SKX || !defined NPY_CAN_LINK_SVML
static npy_uint64 LOG_TABLE_TOP[64] = {
0x0000000000000000,
0x3F8FC0A8B1000000,
@@ -261,6 +264,7 @@ static npy_uint64 LOG_TABLE_TAIL[64] = {
0x3D6F2CFB29AAA5F0,
0x3D66757006095FD2,
};
+#endif //#if !defined NPY_HAVE_AVX512_SKX || !defined NPY_CAN_LINK_SVML
#define NPY_TANG_LOG_A1 0x1.55555555554e6p-4
#define NPY_TANG_LOG_A2 0x1.9999999bac6d4p-7
diff --git a/numpy/core/tests/data/umath-validation-set-exp.csv b/numpy/core/tests/data/umath-validation-set-exp.csv
index 7c5ef3b33..071fb3129 100644
--- a/numpy/core/tests/data/umath-validation-set-exp.csv
+++ b/numpy/core/tests/data/umath-validation-set-exp.csv
@@ -135,278 +135,278 @@ np.float32,0xc2867878,0x0effff15,3
np.float32,0xc2a2324a,0x04fffff4,3
#float64
## near zero ##
-np.float64,0x8000000000000000,0x3ff0000000000000,1
-np.float64,0x8010000000000000,0x3ff0000000000000,1
-np.float64,0x8000000000000001,0x3ff0000000000000,1
-np.float64,0x8360000000000000,0x3ff0000000000000,1
-np.float64,0x9a70000000000000,0x3ff0000000000000,1
-np.float64,0xb9b0000000000000,0x3ff0000000000000,1
-np.float64,0xb810000000000000,0x3ff0000000000000,1
-np.float64,0xbc30000000000000,0x3ff0000000000000,1
-np.float64,0xb6a0000000000000,0x3ff0000000000000,1
-np.float64,0x0000000000000000,0x3ff0000000000000,1
-np.float64,0x0010000000000000,0x3ff0000000000000,1
-np.float64,0x0000000000000001,0x3ff0000000000000,1
-np.float64,0x0360000000000000,0x3ff0000000000000,1
-np.float64,0x1a70000000000000,0x3ff0000000000000,1
-np.float64,0x3c30000000000000,0x3ff0000000000000,1
-np.float64,0x36a0000000000000,0x3ff0000000000000,1
-np.float64,0x39b0000000000000,0x3ff0000000000000,1
-np.float64,0x3810000000000000,0x3ff0000000000000,1
+np.float64,0x8000000000000000,0x3ff0000000000000,2
+np.float64,0x8010000000000000,0x3ff0000000000000,2
+np.float64,0x8000000000000001,0x3ff0000000000000,2
+np.float64,0x8360000000000000,0x3ff0000000000000,2
+np.float64,0x9a70000000000000,0x3ff0000000000000,2
+np.float64,0xb9b0000000000000,0x3ff0000000000000,2
+np.float64,0xb810000000000000,0x3ff0000000000000,2
+np.float64,0xbc30000000000000,0x3ff0000000000000,2
+np.float64,0xb6a0000000000000,0x3ff0000000000000,2
+np.float64,0x0000000000000000,0x3ff0000000000000,2
+np.float64,0x0010000000000000,0x3ff0000000000000,2
+np.float64,0x0000000000000001,0x3ff0000000000000,2
+np.float64,0x0360000000000000,0x3ff0000000000000,2
+np.float64,0x1a70000000000000,0x3ff0000000000000,2
+np.float64,0x3c30000000000000,0x3ff0000000000000,2
+np.float64,0x36a0000000000000,0x3ff0000000000000,2
+np.float64,0x39b0000000000000,0x3ff0000000000000,2
+np.float64,0x3810000000000000,0x3ff0000000000000,2
## underflow ##
-np.float64,0xc0c6276800000000,0x0000000000000000,1
-np.float64,0xc0c62d918ce2421d,0x0000000000000000,1
-np.float64,0xc0c62d918ce2421e,0x0000000000000000,1
-np.float64,0xc0c62d91a0000000,0x0000000000000000,1
-np.float64,0xc0c62d9180000000,0x0000000000000000,1
-np.float64,0xc0c62dea45ee3e06,0x0000000000000000,1
-np.float64,0xc0c62dea45ee3e07,0x0000000000000000,1
-np.float64,0xc0c62dea40000000,0x0000000000000000,1
-np.float64,0xc0c62dea60000000,0x0000000000000000,1
-np.float64,0xc0875f1120000000,0x0000000000000000,1
-np.float64,0xc0875f113c30b1c8,0x0000000000000000,1
-np.float64,0xc0875f1140000000,0x0000000000000000,1
-np.float64,0xc093480000000000,0x0000000000000000,1
-np.float64,0xffefffffffffffff,0x0000000000000000,1
-np.float64,0xc7efffffe0000000,0x0000000000000000,1
+np.float64,0xc0c6276800000000,0x0000000000000000,2
+np.float64,0xc0c62d918ce2421d,0x0000000000000000,2
+np.float64,0xc0c62d918ce2421e,0x0000000000000000,2
+np.float64,0xc0c62d91a0000000,0x0000000000000000,2
+np.float64,0xc0c62d9180000000,0x0000000000000000,2
+np.float64,0xc0c62dea45ee3e06,0x0000000000000000,2
+np.float64,0xc0c62dea45ee3e07,0x0000000000000000,2
+np.float64,0xc0c62dea40000000,0x0000000000000000,2
+np.float64,0xc0c62dea60000000,0x0000000000000000,2
+np.float64,0xc0875f1120000000,0x0000000000000000,2
+np.float64,0xc0875f113c30b1c8,0x0000000000000000,2
+np.float64,0xc0875f1140000000,0x0000000000000000,2
+np.float64,0xc093480000000000,0x0000000000000000,2
+np.float64,0xffefffffffffffff,0x0000000000000000,2
+np.float64,0xc7efffffe0000000,0x0000000000000000,2
## overflow ##
-np.float64,0x40862e52fefa39ef,0x7ff0000000000000,1
-np.float64,0x40872e42fefa39ef,0x7ff0000000000000,1
+np.float64,0x40862e52fefa39ef,0x7ff0000000000000,2
+np.float64,0x40872e42fefa39ef,0x7ff0000000000000,2
## +/- INF, +/- NAN ##
-np.float64,0x7ff0000000000000,0x7ff0000000000000,1
-np.float64,0xfff0000000000000,0x0000000000000000,1
-np.float64,0x7ff8000000000000,0x7ff8000000000000,1
-np.float64,0xfff8000000000000,0xfff8000000000000,1
+np.float64,0x7ff0000000000000,0x7ff0000000000000,2
+np.float64,0xfff0000000000000,0x0000000000000000,2
+np.float64,0x7ff8000000000000,0x7ff8000000000000,2
+np.float64,0xfff8000000000000,0xfff8000000000000,2
## output denormal ##
-np.float64,0xc087438520000000,0x0000000000000001,1
-np.float64,0xc08743853f2f4461,0x0000000000000001,1
-np.float64,0xc08743853f2f4460,0x0000000000000001,1
-np.float64,0xc087438540000000,0x0000000000000001,1
+np.float64,0xc087438520000000,0x0000000000000001,2
+np.float64,0xc08743853f2f4461,0x0000000000000001,2
+np.float64,0xc08743853f2f4460,0x0000000000000001,2
+np.float64,0xc087438540000000,0x0000000000000001,2
## between -745.13321910 and 709.78271289 ##
-np.float64,0xbff760cd14774bd9,0x3fcdb14ced00ceb6,1
-np.float64,0xbff760cd20000000,0x3fcdb14cd7993879,1
-np.float64,0xbff760cd00000000,0x3fcdb14d12fbd264,1
-np.float64,0xc07f1cf360000000,0x130c1b369af14fda,1
-np.float64,0xbeb0000000000000,0x3feffffe00001000,1
-np.float64,0xbd70000000000000,0x3fefffffffffe000,1
-np.float64,0xc084fd46e5c84952,0x0360000000000139,1
-np.float64,0xc084fd46e5c84953,0x035ffffffffffe71,1
-np.float64,0xc084fd46e0000000,0x0360000b9096d32c,1
-np.float64,0xc084fd4700000000,0x035fff9721d12104,1
-np.float64,0xc086232bc0000000,0x0010003af5e64635,1
-np.float64,0xc086232bdd7abcd2,0x001000000000007c,1
-np.float64,0xc086232bdd7abcd3,0x000ffffffffffe7c,1
-np.float64,0xc086232be0000000,0x000ffffaf57a6fc9,1
-np.float64,0xc086233920000000,0x000fe590e3b45eb0,1
-np.float64,0xc086233938000000,0x000fe56133493c57,1
-np.float64,0xc086233940000000,0x000fe5514deffbbc,1
-np.float64,0xc086234c98000000,0x000fbf1024c32ccb,1
-np.float64,0xc086234ca0000000,0x000fbf0065bae78d,1
-np.float64,0xc086234c80000000,0x000fbf3f623a7724,1
-np.float64,0xc086234ec0000000,0x000fbad237c846f9,1
-np.float64,0xc086234ec8000000,0x000fbac27cfdec97,1
-np.float64,0xc086234ee0000000,0x000fba934cfd3dc2,1
-np.float64,0xc086234ef0000000,0x000fba73d7f618d9,1
-np.float64,0xc086234f00000000,0x000fba54632dddc0,1
-np.float64,0xc0862356e0000000,0x000faae0945b761a,1
-np.float64,0xc0862356f0000000,0x000faac13eb9a310,1
-np.float64,0xc086235700000000,0x000faaa1e9567b0a,1
-np.float64,0xc086236020000000,0x000f98cd75c11ed7,1
-np.float64,0xc086236ca0000000,0x000f8081b4d93f89,1
-np.float64,0xc086236cb0000000,0x000f8062b3f4d6c5,1
-np.float64,0xc086236cc0000000,0x000f8043b34e6f8c,1
-np.float64,0xc086238d98000000,0x000f41220d9b0d2c,1
-np.float64,0xc086238da0000000,0x000f4112cc80a01f,1
-np.float64,0xc086238d80000000,0x000f414fd145db5b,1
-np.float64,0xc08624fd00000000,0x000cbfce8ea1e6c4,1
-np.float64,0xc086256080000000,0x000c250747fcd46e,1
-np.float64,0xc08626c480000000,0x000a34f4bd975193,1
-np.float64,0xbf50000000000000,0x3feff800ffeaac00,1
-np.float64,0xbe10000000000000,0x3fefffffff800000,1
-np.float64,0xbcd0000000000000,0x3feffffffffffff8,1
-np.float64,0xc055d589e0000000,0x38100004bf94f63e,1
-np.float64,0xc055d58a00000000,0x380ffff97f292ce8,1
-np.float64,0xbfd962d900000000,0x3fe585a4b00110e1,1
-np.float64,0x3ff4bed280000000,0x400d411e7a58a303,1
-np.float64,0x3fff0b3620000000,0x401bd7737ffffcf3,1
-np.float64,0x3ff0000000000000,0x4005bf0a8b145769,1
-np.float64,0x3eb0000000000000,0x3ff0000100000800,1
-np.float64,0x3d70000000000000,0x3ff0000000001000,1
-np.float64,0x40862e42e0000000,0x7fefff841808287f,1
-np.float64,0x40862e42fefa39ef,0x7fefffffffffff2a,1
-np.float64,0x40862e0000000000,0x7feef85a11e73f2d,1
-np.float64,0x4000000000000000,0x401d8e64b8d4ddae,1
-np.float64,0x4009242920000000,0x40372a52c383a488,1
-np.float64,0x4049000000000000,0x44719103e4080b45,1
-np.float64,0x4008000000000000,0x403415e5bf6fb106,1
-np.float64,0x3f50000000000000,0x3ff00400800aab55,1
-np.float64,0x3e10000000000000,0x3ff0000000400000,1
-np.float64,0x3cd0000000000000,0x3ff0000000000004,1
-np.float64,0x40562e40a0000000,0x47effed088821c3f,1
-np.float64,0x40562e42e0000000,0x47effff082e6c7ff,1
-np.float64,0x40562e4300000000,0x47f00000417184b8,1
-np.float64,0x3fe8000000000000,0x4000ef9db467dcf8,1
-np.float64,0x402b12e8d4f33589,0x412718f68c71a6fe,1
-np.float64,0x402b12e8d4f3358a,0x412718f68c71a70a,1
-np.float64,0x402b12e8c0000000,0x412718f59a7f472e,1
-np.float64,0x402b12e8e0000000,0x412718f70c0eac62,1
+np.float64,0xbff760cd14774bd9,0x3fcdb14ced00ceb6,2
+np.float64,0xbff760cd20000000,0x3fcdb14cd7993879,2
+np.float64,0xbff760cd00000000,0x3fcdb14d12fbd264,2
+np.float64,0xc07f1cf360000000,0x130c1b369af14fda,2
+np.float64,0xbeb0000000000000,0x3feffffe00001000,2
+np.float64,0xbd70000000000000,0x3fefffffffffe000,2
+np.float64,0xc084fd46e5c84952,0x0360000000000139,2
+np.float64,0xc084fd46e5c84953,0x035ffffffffffe71,2
+np.float64,0xc084fd46e0000000,0x0360000b9096d32c,2
+np.float64,0xc084fd4700000000,0x035fff9721d12104,2
+np.float64,0xc086232bc0000000,0x0010003af5e64635,2
+np.float64,0xc086232bdd7abcd2,0x001000000000007c,2
+np.float64,0xc086232bdd7abcd3,0x000ffffffffffe7c,2
+np.float64,0xc086232be0000000,0x000ffffaf57a6fc9,2
+np.float64,0xc086233920000000,0x000fe590e3b45eb0,2
+np.float64,0xc086233938000000,0x000fe56133493c57,2
+np.float64,0xc086233940000000,0x000fe5514deffbbc,2
+np.float64,0xc086234c98000000,0x000fbf1024c32ccb,2
+np.float64,0xc086234ca0000000,0x000fbf0065bae78d,2
+np.float64,0xc086234c80000000,0x000fbf3f623a7724,2
+np.float64,0xc086234ec0000000,0x000fbad237c846f9,2
+np.float64,0xc086234ec8000000,0x000fbac27cfdec97,2
+np.float64,0xc086234ee0000000,0x000fba934cfd3dc2,2
+np.float64,0xc086234ef0000000,0x000fba73d7f618d9,2
+np.float64,0xc086234f00000000,0x000fba54632dddc0,2
+np.float64,0xc0862356e0000000,0x000faae0945b761a,2
+np.float64,0xc0862356f0000000,0x000faac13eb9a310,2
+np.float64,0xc086235700000000,0x000faaa1e9567b0a,2
+np.float64,0xc086236020000000,0x000f98cd75c11ed7,2
+np.float64,0xc086236ca0000000,0x000f8081b4d93f89,2
+np.float64,0xc086236cb0000000,0x000f8062b3f4d6c5,2
+np.float64,0xc086236cc0000000,0x000f8043b34e6f8c,2
+np.float64,0xc086238d98000000,0x000f41220d9b0d2c,2
+np.float64,0xc086238da0000000,0x000f4112cc80a01f,2
+np.float64,0xc086238d80000000,0x000f414fd145db5b,2
+np.float64,0xc08624fd00000000,0x000cbfce8ea1e6c4,2
+np.float64,0xc086256080000000,0x000c250747fcd46e,2
+np.float64,0xc08626c480000000,0x000a34f4bd975193,2
+np.float64,0xbf50000000000000,0x3feff800ffeaac00,2
+np.float64,0xbe10000000000000,0x3fefffffff800000,2
+np.float64,0xbcd0000000000000,0x3feffffffffffff8,2
+np.float64,0xc055d589e0000000,0x38100004bf94f63e,2
+np.float64,0xc055d58a00000000,0x380ffff97f292ce8,2
+np.float64,0xbfd962d900000000,0x3fe585a4b00110e1,2
+np.float64,0x3ff4bed280000000,0x400d411e7a58a303,2
+np.float64,0x3fff0b3620000000,0x401bd7737ffffcf3,2
+np.float64,0x3ff0000000000000,0x4005bf0a8b145769,2
+np.float64,0x3eb0000000000000,0x3ff0000100000800,2
+np.float64,0x3d70000000000000,0x3ff0000000001000,2
+np.float64,0x40862e42e0000000,0x7fefff841808287f,2
+np.float64,0x40862e42fefa39ef,0x7fefffffffffff2a,2
+np.float64,0x40862e0000000000,0x7feef85a11e73f2d,2
+np.float64,0x4000000000000000,0x401d8e64b8d4ddae,2
+np.float64,0x4009242920000000,0x40372a52c383a488,2
+np.float64,0x4049000000000000,0x44719103e4080b45,2
+np.float64,0x4008000000000000,0x403415e5bf6fb106,2
+np.float64,0x3f50000000000000,0x3ff00400800aab55,2
+np.float64,0x3e10000000000000,0x3ff0000000400000,2
+np.float64,0x3cd0000000000000,0x3ff0000000000004,2
+np.float64,0x40562e40a0000000,0x47effed088821c3f,2
+np.float64,0x40562e42e0000000,0x47effff082e6c7ff,2
+np.float64,0x40562e4300000000,0x47f00000417184b8,2
+np.float64,0x3fe8000000000000,0x4000ef9db467dcf8,2
+np.float64,0x402b12e8d4f33589,0x412718f68c71a6fe,2
+np.float64,0x402b12e8d4f3358a,0x412718f68c71a70a,2
+np.float64,0x402b12e8c0000000,0x412718f59a7f472e,2
+np.float64,0x402b12e8e0000000,0x412718f70c0eac62,2
##use 1th entry
-np.float64,0x40631659AE147CB4,0x4db3a95025a4890f,1
-np.float64,0xC061B87D2E85A4E2,0x332640c8e2de2c51,1
-np.float64,0x405A4A50BE243AF4,0x496a45e4b7f0339a,1
-np.float64,0xC0839898B98EC5C6,0x0764027828830df4,1
+np.float64,0x40631659AE147CB4,0x4db3a95025a4890f,2
+np.float64,0xC061B87D2E85A4E2,0x332640c8e2de2c51,2
+np.float64,0x405A4A50BE243AF4,0x496a45e4b7f0339a,2
+np.float64,0xC0839898B98EC5C6,0x0764027828830df4,2
#use 2th entry
-np.float64,0xC072428C44B6537C,0x2596ade838b96f3e,1
-np.float64,0xC053057C5E1AE9BF,0x3912c8fad18fdadf,1
-np.float64,0x407E89C78328BAA3,0x6bfe35d5b9a1a194,1
-np.float64,0x4083501B6DD87112,0x77a855503a38924e,1
+np.float64,0xC072428C44B6537C,0x2596ade838b96f3e,2
+np.float64,0xC053057C5E1AE9BF,0x3912c8fad18fdadf,2
+np.float64,0x407E89C78328BAA3,0x6bfe35d5b9a1a194,2
+np.float64,0x4083501B6DD87112,0x77a855503a38924e,2
#use 3th entry
-np.float64,0x40832C6195F24540,0x7741e73c80e5eb2f,1
-np.float64,0xC083D4CD557C2EC9,0x06b61727c2d2508e,1
-np.float64,0x400C48F5F67C99BD,0x404128820f02b92e,1
-np.float64,0x4056E36D9B2DF26A,0x4830f52ff34a8242,1
+np.float64,0x40832C6195F24540,0x7741e73c80e5eb2f,2
+np.float64,0xC083D4CD557C2EC9,0x06b61727c2d2508e,2
+np.float64,0x400C48F5F67C99BD,0x404128820f02b92e,2
+np.float64,0x4056E36D9B2DF26A,0x4830f52ff34a8242,2
#use 4th entry
-np.float64,0x4080FF700D8CBD06,0x70fa70df9bc30f20,1
-np.float64,0x406C276D39E53328,0x543eb8e20a8f4741,1
-np.float64,0xC070D6159BBD8716,0x27a4a0548c904a75,1
-np.float64,0xC052EBCF8ED61F83,0x391c0e92368d15e4,1
+np.float64,0x4080FF700D8CBD06,0x70fa70df9bc30f20,2
+np.float64,0x406C276D39E53328,0x543eb8e20a8f4741,2
+np.float64,0xC070D6159BBD8716,0x27a4a0548c904a75,2
+np.float64,0xC052EBCF8ED61F83,0x391c0e92368d15e4,2
#use 5th entry
-np.float64,0xC061F892A8AC5FBE,0x32f807a89efd3869,1
-np.float64,0x4021D885D2DBA085,0x40bd4dc86d3e3270,1
-np.float64,0x40767AEEEE7D4FCF,0x605e22851ee2afb7,1
-np.float64,0xC0757C5D75D08C80,0x20f0751599b992a2,1
+np.float64,0xC061F892A8AC5FBE,0x32f807a89efd3869,2
+np.float64,0x4021D885D2DBA085,0x40bd4dc86d3e3270,2
+np.float64,0x40767AEEEE7D4FCF,0x605e22851ee2afb7,2
+np.float64,0xC0757C5D75D08C80,0x20f0751599b992a2,2
#use 6th entry
-np.float64,0x405ACF7A284C4CE3,0x499a4e0b7a27027c,1
-np.float64,0xC085A6C9E80D7AF5,0x0175914009d62ec2,1
-np.float64,0xC07E4C02F86F1DAE,0x1439269b29a9231e,1
-np.float64,0x4080D80F9691CC87,0x7088a6cdafb041de,1
+np.float64,0x405ACF7A284C4CE3,0x499a4e0b7a27027c,2
+np.float64,0xC085A6C9E80D7AF5,0x0175914009d62ec2,2
+np.float64,0xC07E4C02F86F1DAE,0x1439269b29a9231e,2
+np.float64,0x4080D80F9691CC87,0x7088a6cdafb041de,2
#use 7th entry
-np.float64,0x407FDFD84FBA0AC1,0x6deb1ae6f9bc4767,1
-np.float64,0x40630C06A1A2213D,0x4dac7a9d51a838b7,1
-np.float64,0x40685FDB30BB8B4F,0x5183f5cc2cac9e79,1
-np.float64,0x408045A2208F77F4,0x6ee299e08e2aa2f0,1
+np.float64,0x407FDFD84FBA0AC1,0x6deb1ae6f9bc4767,2
+np.float64,0x40630C06A1A2213D,0x4dac7a9d51a838b7,2
+np.float64,0x40685FDB30BB8B4F,0x5183f5cc2cac9e79,2
+np.float64,0x408045A2208F77F4,0x6ee299e08e2aa2f0,2
#use 8th entry
-np.float64,0xC08104E391F5078B,0x0ed397b7cbfbd230,1
-np.float64,0xC031501CAEFAE395,0x3e6040fd1ea35085,1
-np.float64,0xC079229124F6247C,0x1babf4f923306b1e,1
-np.float64,0x407FB65F44600435,0x6db03beaf2512b8a,1
+np.float64,0xC08104E391F5078B,0x0ed397b7cbfbd230,2
+np.float64,0xC031501CAEFAE395,0x3e6040fd1ea35085,2
+np.float64,0xC079229124F6247C,0x1babf4f923306b1e,2
+np.float64,0x407FB65F44600435,0x6db03beaf2512b8a,2
#use 9th entry
-np.float64,0xC07EDEE8E8E8A5AC,0x136536cec9cbef48,1
-np.float64,0x4072BB4086099A14,0x5af4d3c3008b56cc,1
-np.float64,0x4050442A2EC42CB4,0x45cd393bd8fad357,1
-np.float64,0xC06AC28FB3D419B4,0x2ca1b9d3437df85f,1
+np.float64,0xC07EDEE8E8E8A5AC,0x136536cec9cbef48,2
+np.float64,0x4072BB4086099A14,0x5af4d3c3008b56cc,2
+np.float64,0x4050442A2EC42CB4,0x45cd393bd8fad357,2
+np.float64,0xC06AC28FB3D419B4,0x2ca1b9d3437df85f,2
#use 10th entry
-np.float64,0x40567FC6F0A68076,0x480c977fd5f3122e,1
-np.float64,0x40620A2F7EDA59BB,0x4cf278e96f4ce4d7,1
-np.float64,0xC085044707CD557C,0x034aad6c968a045a,1
-np.float64,0xC07374EA5AC516AA,0x23dd6afdc03e83d5,1
+np.float64,0x40567FC6F0A68076,0x480c977fd5f3122e,2
+np.float64,0x40620A2F7EDA59BB,0x4cf278e96f4ce4d7,2
+np.float64,0xC085044707CD557C,0x034aad6c968a045a,2
+np.float64,0xC07374EA5AC516AA,0x23dd6afdc03e83d5,2
#use 11th entry
-np.float64,0x4073CC95332619C1,0x5c804b1498bbaa54,1
-np.float64,0xC0799FEBBE257F31,0x1af6a954c43b87d2,1
-np.float64,0x408159F19EA424F6,0x7200858efcbfc84d,1
-np.float64,0x404A81F6F24C0792,0x44b664a07ce5bbfa,1
+np.float64,0x4073CC95332619C1,0x5c804b1498bbaa54,2
+np.float64,0xC0799FEBBE257F31,0x1af6a954c43b87d2,2
+np.float64,0x408159F19EA424F6,0x7200858efcbfc84d,2
+np.float64,0x404A81F6F24C0792,0x44b664a07ce5bbfa,2
#use 12th entry
-np.float64,0x40295FF1EFB9A741,0x4113c0e74c52d7b0,1
-np.float64,0x4073975F4CC411DA,0x5c32be40b4fec2c1,1
-np.float64,0x406E9DE52E82A77E,0x56049c9a3f1ae089,1
-np.float64,0x40748C2F52560ED9,0x5d93bc14fd4cd23b,1
+np.float64,0x40295FF1EFB9A741,0x4113c0e74c52d7b0,2
+np.float64,0x4073975F4CC411DA,0x5c32be40b4fec2c1,2
+np.float64,0x406E9DE52E82A77E,0x56049c9a3f1ae089,2
+np.float64,0x40748C2F52560ED9,0x5d93bc14fd4cd23b,2
#use 13th entry
-np.float64,0x4062A553CDC4D04C,0x4d6266bfde301318,1
-np.float64,0xC079EC1D63598AB7,0x1a88cb184dab224c,1
-np.float64,0xC0725C1CB3167427,0x25725b46f8a081f6,1
-np.float64,0x407888771D9B45F9,0x6353b1ec6bd7ce80,1
+np.float64,0x4062A553CDC4D04C,0x4d6266bfde301318,2
+np.float64,0xC079EC1D63598AB7,0x1a88cb184dab224c,2
+np.float64,0xC0725C1CB3167427,0x25725b46f8a081f6,2
+np.float64,0x407888771D9B45F9,0x6353b1ec6bd7ce80,2
#use 14th entry
-np.float64,0xC082CBA03AA89807,0x09b383723831ce56,1
-np.float64,0xC083A8961BB67DD7,0x0735b118d5275552,1
-np.float64,0xC076BC6ECA12E7E3,0x1f2222679eaef615,1
-np.float64,0xC072752503AA1A5B,0x254eb832242c77e1,1
+np.float64,0xC082CBA03AA89807,0x09b383723831ce56,2
+np.float64,0xC083A8961BB67DD7,0x0735b118d5275552,2
+np.float64,0xC076BC6ECA12E7E3,0x1f2222679eaef615,2
+np.float64,0xC072752503AA1A5B,0x254eb832242c77e1,2
#use 15th entry
-np.float64,0xC058800792125DEC,0x371882372a0b48d4,1
-np.float64,0x4082909FD863E81C,0x7580d5f386920142,1
-np.float64,0xC071616F8FB534F9,0x26dbe20ef64a412b,1
-np.float64,0x406D1AB571CAA747,0x54ee0d55cb38ac20,1
+np.float64,0xC058800792125DEC,0x371882372a0b48d4,2
+np.float64,0x4082909FD863E81C,0x7580d5f386920142,2
+np.float64,0xC071616F8FB534F9,0x26dbe20ef64a412b,2
+np.float64,0x406D1AB571CAA747,0x54ee0d55cb38ac20,2
#use 16th entry
-np.float64,0x406956428B7DAD09,0x52358682c271237f,1
-np.float64,0xC07EFC2D9D17B621,0x133b3e77c27a4d45,1
-np.float64,0xC08469BAC5BA3CCA,0x050863e5f42cc52f,1
-np.float64,0x407189D9626386A5,0x593cb1c0b3b5c1d3,1
+np.float64,0x406956428B7DAD09,0x52358682c271237f,2
+np.float64,0xC07EFC2D9D17B621,0x133b3e77c27a4d45,2
+np.float64,0xC08469BAC5BA3CCA,0x050863e5f42cc52f,2
+np.float64,0x407189D9626386A5,0x593cb1c0b3b5c1d3,2
#use 17th entry
-np.float64,0x4077E652E3DEB8C6,0x6269a10dcbd3c752,1
-np.float64,0x407674C97DB06878,0x605485dcc2426ec2,1
-np.float64,0xC07CE9969CF4268D,0x16386cf8996669f2,1
-np.float64,0x40780EE32D5847C4,0x62a436bd1abe108d,1
+np.float64,0x4077E652E3DEB8C6,0x6269a10dcbd3c752,2
+np.float64,0x407674C97DB06878,0x605485dcc2426ec2,2
+np.float64,0xC07CE9969CF4268D,0x16386cf8996669f2,2
+np.float64,0x40780EE32D5847C4,0x62a436bd1abe108d,2
#use 18th entry
-np.float64,0x4076C3AA5E1E8DA1,0x60c62f56a5e72e24,1
-np.float64,0xC0730AFC7239B9BE,0x24758ead095cec1e,1
-np.float64,0xC085CC2B9C420DDB,0x0109cdaa2e5694c1,1
-np.float64,0x406D0765CB6D7AA4,0x54e06f8dd91bd945,1
+np.float64,0x4076C3AA5E1E8DA1,0x60c62f56a5e72e24,2
+np.float64,0xC0730AFC7239B9BE,0x24758ead095cec1e,2
+np.float64,0xC085CC2B9C420DDB,0x0109cdaa2e5694c1,2
+np.float64,0x406D0765CB6D7AA4,0x54e06f8dd91bd945,2
#use 19th entry
-np.float64,0xC082D011F3B495E7,0x09a6647661d279c2,1
-np.float64,0xC072826AF8F6AFBC,0x253acd3cd224507e,1
-np.float64,0x404EB9C4810CEA09,0x457933dbf07e8133,1
-np.float64,0x408284FBC97C58CE,0x755f6eb234aa4b98,1
+np.float64,0xC082D011F3B495E7,0x09a6647661d279c2,2
+np.float64,0xC072826AF8F6AFBC,0x253acd3cd224507e,2
+np.float64,0x404EB9C4810CEA09,0x457933dbf07e8133,2
+np.float64,0x408284FBC97C58CE,0x755f6eb234aa4b98,2
#use 20th entry
-np.float64,0x40856008CF6EDC63,0x7d9c0b3c03f4f73c,1
-np.float64,0xC077CB2E9F013B17,0x1d9b3d3a166a55db,1
-np.float64,0xC0479CA3C20AD057,0x3bad40e081555b99,1
-np.float64,0x40844CD31107332A,0x7a821d70aea478e2,1
+np.float64,0x40856008CF6EDC63,0x7d9c0b3c03f4f73c,2
+np.float64,0xC077CB2E9F013B17,0x1d9b3d3a166a55db,2
+np.float64,0xC0479CA3C20AD057,0x3bad40e081555b99,2
+np.float64,0x40844CD31107332A,0x7a821d70aea478e2,2
#use 21th entry
-np.float64,0xC07C8FCC0BFCC844,0x16ba1cc8c539d19b,1
-np.float64,0xC085C4E9A3ABA488,0x011ff675ba1a2217,1
-np.float64,0x4074D538B32966E5,0x5dfd9d78043c6ad9,1
-np.float64,0xC0630CA16902AD46,0x3231a446074cede6,1
+np.float64,0xC07C8FCC0BFCC844,0x16ba1cc8c539d19b,2
+np.float64,0xC085C4E9A3ABA488,0x011ff675ba1a2217,2
+np.float64,0x4074D538B32966E5,0x5dfd9d78043c6ad9,2
+np.float64,0xC0630CA16902AD46,0x3231a446074cede6,2
#use 22th entry
-np.float64,0xC06C826733D7D0B7,0x2b5f1078314d41e1,1
-np.float64,0xC0520DF55B2B907F,0x396c13a6ce8e833e,1
-np.float64,0xC080712072B0F437,0x107eae02d11d98ea,1
-np.float64,0x40528A6150E19EFB,0x469fdabda02228c5,1
+np.float64,0xC06C826733D7D0B7,0x2b5f1078314d41e1,2
+np.float64,0xC0520DF55B2B907F,0x396c13a6ce8e833e,2
+np.float64,0xC080712072B0F437,0x107eae02d11d98ea,2
+np.float64,0x40528A6150E19EFB,0x469fdabda02228c5,2
#use 23th entry
-np.float64,0xC07B1D74B6586451,0x18d1253883ae3b48,1
-np.float64,0x4045AFD7867DAEC0,0x43d7d634fc4c5d98,1
-np.float64,0xC07A08B91F9ED3E2,0x1a60973e6397fc37,1
-np.float64,0x407B3ECF0AE21C8C,0x673e03e9d98d7235,1
+np.float64,0xC07B1D74B6586451,0x18d1253883ae3b48,2
+np.float64,0x4045AFD7867DAEC0,0x43d7d634fc4c5d98,2
+np.float64,0xC07A08B91F9ED3E2,0x1a60973e6397fc37,2
+np.float64,0x407B3ECF0AE21C8C,0x673e03e9d98d7235,2
#use 24th entry
-np.float64,0xC078AEB6F30CEABF,0x1c530b93ab54a1b3,1
-np.float64,0x4084495006A41672,0x7a775b6dc7e63064,1
-np.float64,0x40830B1C0EBF95DD,0x76e1e6eed77cfb89,1
-np.float64,0x407D93E8F33D8470,0x6a9adbc9e1e4f1e5,1
+np.float64,0xC078AEB6F30CEABF,0x1c530b93ab54a1b3,2
+np.float64,0x4084495006A41672,0x7a775b6dc7e63064,2
+np.float64,0x40830B1C0EBF95DD,0x76e1e6eed77cfb89,2
+np.float64,0x407D93E8F33D8470,0x6a9adbc9e1e4f1e5,2
#use 25th entry
-np.float64,0x4066B11A09EFD9E8,0x504dd528065c28a7,1
-np.float64,0x408545823723AEEB,0x7d504a9b1844f594,1
-np.float64,0xC068C711F2CA3362,0x2e104f3496ea118e,1
-np.float64,0x407F317FCC3CA873,0x6cf0732c9948ebf4,1
+np.float64,0x4066B11A09EFD9E8,0x504dd528065c28a7,2
+np.float64,0x408545823723AEEB,0x7d504a9b1844f594,2
+np.float64,0xC068C711F2CA3362,0x2e104f3496ea118e,2
+np.float64,0x407F317FCC3CA873,0x6cf0732c9948ebf4,2
#use 26th entry
-np.float64,0x407AFB3EBA2ED50F,0x66dc28a129c868d5,1
-np.float64,0xC075377037708ADE,0x21531a329f3d793e,1
-np.float64,0xC07C30066A1F3246,0x174448baa16ded2b,1
-np.float64,0xC06689A75DE2ABD3,0x2fad70662fae230b,1
+np.float64,0x407AFB3EBA2ED50F,0x66dc28a129c868d5,2
+np.float64,0xC075377037708ADE,0x21531a329f3d793e,2
+np.float64,0xC07C30066A1F3246,0x174448baa16ded2b,2
+np.float64,0xC06689A75DE2ABD3,0x2fad70662fae230b,2
#use 27th entry
-np.float64,0x4081514E9FCCF1E0,0x71e673b9efd15f44,1
-np.float64,0xC0762C710AF68460,0x1ff1ed7d8947fe43,1
-np.float64,0xC0468102FF70D9C4,0x3be0c3a8ff3419a3,1
-np.float64,0xC07EA4CEEF02A83E,0x13b908f085102c61,1
+np.float64,0x4081514E9FCCF1E0,0x71e673b9efd15f44,2
+np.float64,0xC0762C710AF68460,0x1ff1ed7d8947fe43,2
+np.float64,0xC0468102FF70D9C4,0x3be0c3a8ff3419a3,2
+np.float64,0xC07EA4CEEF02A83E,0x13b908f085102c61,2
#use 28th entry
-np.float64,0xC06290B04AE823C4,0x328a83da3c2e3351,1
-np.float64,0xC0770EB1D1C395FB,0x1eab281c1f1db5fe,1
-np.float64,0xC06F5D4D838A5BAE,0x29500ea32fb474ea,1
-np.float64,0x40723B3133B54C5D,0x5a3c82c7c3a2b848,1
+np.float64,0xC06290B04AE823C4,0x328a83da3c2e3351,2
+np.float64,0xC0770EB1D1C395FB,0x1eab281c1f1db5fe,2
+np.float64,0xC06F5D4D838A5BAE,0x29500ea32fb474ea,2
+np.float64,0x40723B3133B54C5D,0x5a3c82c7c3a2b848,2
#use 29th entry
-np.float64,0x4085E6454CE3B4AA,0x7f20319b9638d06a,1
-np.float64,0x408389F2A0585D4B,0x7850667c58aab3d0,1
-np.float64,0xC0382798F9C8AE69,0x3dc1c79fe8739d6d,1
-np.float64,0xC08299D827608418,0x0a4335f76cdbaeb5,1
+np.float64,0x4085E6454CE3B4AA,0x7f20319b9638d06a,2
+np.float64,0x408389F2A0585D4B,0x7850667c58aab3d0,2
+np.float64,0xC0382798F9C8AE69,0x3dc1c79fe8739d6d,2
+np.float64,0xC08299D827608418,0x0a4335f76cdbaeb5,2
#use 30th entry
-np.float64,0xC06F3DED43301BF1,0x2965670ae46750a8,1
-np.float64,0xC070CAF6BDD577D9,0x27b4aa4ffdd29981,1
-np.float64,0x4078529AD4B2D9F2,0x6305c12755d5e0a6,1
-np.float64,0xC055B14E75A31B96,0x381c2eda6d111e5d,1
+np.float64,0xC06F3DED43301BF1,0x2965670ae46750a8,2
+np.float64,0xC070CAF6BDD577D9,0x27b4aa4ffdd29981,2
+np.float64,0x4078529AD4B2D9F2,0x6305c12755d5e0a6,2
+np.float64,0xC055B14E75A31B96,0x381c2eda6d111e5d,2
#use 31th entry
-np.float64,0x407B13EE414FA931,0x6700772c7544564d,1
-np.float64,0x407EAFDE9DE3EC54,0x6c346a0e49724a3c,1
-np.float64,0xC08362F398B9530D,0x07ffeddbadf980cb,1
-np.float64,0x407E865CDD9EEB86,0x6bf866cac5e0d126,1
+np.float64,0x407B13EE414FA931,0x6700772c7544564d,2
+np.float64,0x407EAFDE9DE3EC54,0x6c346a0e49724a3c,2
+np.float64,0xC08362F398B9530D,0x07ffeddbadf980cb,2
+np.float64,0x407E865CDD9EEB86,0x6bf866cac5e0d126,2
#use 32th entry
-np.float64,0x407FB62DBC794C86,0x6db009f708ac62cb,1
-np.float64,0xC063D0BAA68CDDDE,0x31a3b2a51ce50430,1
-np.float64,0xC05E7706A2231394,0x34f24bead6fab5c9,1
-np.float64,0x4083E3A06FDE444E,0x79527b7a386d1937,1
+np.float64,0x407FB62DBC794C86,0x6db009f708ac62cb,2
+np.float64,0xC063D0BAA68CDDDE,0x31a3b2a51ce50430,2
+np.float64,0xC05E7706A2231394,0x34f24bead6fab5c9,2
+np.float64,0x4083E3A06FDE444E,0x79527b7a386d1937,2
diff --git a/numpy/core/tests/data/umath-validation-set-log.csv b/numpy/core/tests/data/umath-validation-set-log.csv
index b8f6b0875..7717745d5 100644
--- a/numpy/core/tests/data/umath-validation-set-log.csv
+++ b/numpy/core/tests/data/umath-validation-set-log.csv
@@ -118,154 +118,154 @@ np.float32,0x3f4884e8,0xbe7a214a,4
np.float32,0x3f486945,0xbe7aae76,4
#float64
## +ve denormal ##
-np.float64,0x0000000000000001,0xc0874385446d71c3,1
-np.float64,0x0001000000000000,0xc086395a2079b70c,1
-np.float64,0x000fffffffffffff,0xc086232bdd7abcd2,1
-np.float64,0x0007ad63e2168cb6,0xc086290bc0b2980f,1
+np.float64,0x0000000000000001,0xc0874385446d71c3,2
+np.float64,0x0001000000000000,0xc086395a2079b70c,2
+np.float64,0x000fffffffffffff,0xc086232bdd7abcd2,2
+np.float64,0x0007ad63e2168cb6,0xc086290bc0b2980f,2
## -ve denormal ##
-np.float64,0x8000000000000001,0xfff8000000000001,1
-np.float64,0x8001000000000000,0xfff8000000000001,1
-np.float64,0x800fffffffffffff,0xfff8000000000001,1
-np.float64,0x8007ad63e2168cb6,0xfff8000000000001,1
+np.float64,0x8000000000000001,0xfff8000000000001,2
+np.float64,0x8001000000000000,0xfff8000000000001,2
+np.float64,0x800fffffffffffff,0xfff8000000000001,2
+np.float64,0x8007ad63e2168cb6,0xfff8000000000001,2
## +/-0.0f, MAX, MIN##
-np.float64,0x0000000000000000,0xfff0000000000000,1
-np.float64,0x8000000000000000,0xfff0000000000000,1
-np.float64,0x7fefffffffffffff,0x40862e42fefa39ef,1
-np.float64,0xffefffffffffffff,0xfff8000000000001,1
+np.float64,0x0000000000000000,0xfff0000000000000,2
+np.float64,0x8000000000000000,0xfff0000000000000,2
+np.float64,0x7fefffffffffffff,0x40862e42fefa39ef,2
+np.float64,0xffefffffffffffff,0xfff8000000000001,2
## near 1.0f ##
-np.float64,0x3ff0000000000000,0x0000000000000000,1
-np.float64,0x3fe8000000000000,0xbfd269621134db92,1
-np.float64,0x3ff0000000000001,0x3cafffffffffffff,1
-np.float64,0x3ff0000020000000,0x3e7fffffe000002b,1
-np.float64,0x3ff0000000000001,0x3cafffffffffffff,1
-np.float64,0x3fefffffe0000000,0xbe70000008000005,1
-np.float64,0x3fefffffffffffff,0xbca0000000000000,1
+np.float64,0x3ff0000000000000,0x0000000000000000,2
+np.float64,0x3fe8000000000000,0xbfd269621134db92,2
+np.float64,0x3ff0000000000001,0x3cafffffffffffff,2
+np.float64,0x3ff0000020000000,0x3e7fffffe000002b,2
+np.float64,0x3ff0000000000001,0x3cafffffffffffff,2
+np.float64,0x3fefffffe0000000,0xbe70000008000005,2
+np.float64,0x3fefffffffffffff,0xbca0000000000000,2
## random numbers ##
-np.float64,0x02500186f3d9da56,0xc0855b8abf135773,1
-np.float64,0x09200815a3951173,0xc082ff1ad7131bdc,1
-np.float64,0x0da029623b0243d4,0xc0816fc994695bb5,1
-np.float64,0x48703b8ac483a382,0x40579213a313490b,1
-np.float64,0x09207b74c87c9860,0xc082fee20ff349ef,1
-np.float64,0x62c077698e8df947,0x407821c996d110f0,1
-np.float64,0x2350b45e87c3cfb0,0xc073d6b16b51d072,1
-np.float64,0x3990a23f9ff2b623,0xc051aa60eadd8c61,1
-np.float64,0x0d011386a116c348,0xc081a6cc7ea3b8fb,1
-np.float64,0x1fe0f0303ebe273a,0xc0763870b78a81ca,1
-np.float64,0x0cd1260121d387da,0xc081b7668d61a9d1,1
-np.float64,0x1e6135a8f581d422,0xc077425ac10f08c2,1
-np.float64,0x622168db5fe52d30,0x4077b3c669b9fadb,1
-np.float64,0x69f188e1ec6d1718,0x407d1e2f18c63889,1
-np.float64,0x3aa1bf1d9c4dd1a3,0xc04d682e24bde479,1
-np.float64,0x6c81c4011ce4f683,0x407ee5190e8a8e6a,1
-np.float64,0x2191fa55aa5a5095,0xc0750c0c318b5e2d,1
-np.float64,0x32a1f602a32bf360,0xc06270caa493fc17,1
-np.float64,0x16023c90ba93249b,0xc07d0f88e0801638,1
-np.float64,0x1c525fe6d71fa9ff,0xc078af49c66a5d63,1
-np.float64,0x1a927675815d65b7,0xc079e5bdd7fe376e,1
-np.float64,0x41227b8fe70da028,0x402aa0c9f9a84c71,1
-np.float64,0x4962bb6e853fe87d,0x405a34aa04c83747,1
-np.float64,0x23d2cda00b26b5a4,0xc0737c13a06d00ea,1
-np.float64,0x2d13083fd62987fa,0xc06a25055aeb474e,1
-np.float64,0x10e31e4c9b4579a1,0xc0804e181929418e,1
-np.float64,0x26d3247d556a86a9,0xc0716774171da7e8,1
-np.float64,0x6603379398d0d4ac,0x407a64f51f8a887b,1
-np.float64,0x02d38af17d9442ba,0xc0852d955ac9dd68,1
-np.float64,0x6a2382b4818dd967,0x407d4129d688e5d4,1
-np.float64,0x2ee3c403c79b3934,0xc067a091fefaf8b6,1
-np.float64,0x6493a699acdbf1a4,0x4079663c8602bfc5,1
-np.float64,0x1c8413c4f0de3100,0xc0788c99697059b6,1
-np.float64,0x4573f1ed350d9622,0x404e9bd1e4c08920,1
-np.float64,0x2f34265c9200b69c,0xc067310cfea4e986,1
-np.float64,0x19b43e65fa22029b,0xc07a7f8877de22d6,1
-np.float64,0x0af48ab7925ed6bc,0xc0825c4fbc0e5ade,1
-np.float64,0x4fa49699cad82542,0x4065c76d2a318235,1
-np.float64,0x7204a15e56ade492,0x40815bb87484dffb,1
-np.float64,0x4734aa08a230982d,0x40542a4bf7a361a9,1
-np.float64,0x1ae4ed296c2fd749,0xc079ac4921f20abb,1
-np.float64,0x472514ea4370289c,0x4053ff372bd8f18f,1
-np.float64,0x53a54b3f73820430,0x406b5411fc5f2e33,1
-np.float64,0x64754de5a15684fa,0x407951592e99a5ab,1
-np.float64,0x69358e279868a7c3,0x407c9c671a882c31,1
-np.float64,0x284579ec61215945,0xc0706688e55f0927,1
-np.float64,0x68b5c58806447adc,0x407c43d6f4eff760,1
-np.float64,0x1945a83f98b0e65d,0xc07acc15eeb032cc,1
-np.float64,0x0fc5eb98a16578bf,0xc080b0d02eddca0e,1
-np.float64,0x6a75e208f5784250,0x407d7a7383bf8f05,1
-np.float64,0x0fe63a029c47645d,0xc080a59ca1e98866,1
-np.float64,0x37963ac53f065510,0xc057236281f7bdb6,1
-np.float64,0x135661bb07067ff7,0xc07ee924930c21e4,1
-np.float64,0x4b4699469d458422,0x405f73843756e887,1
-np.float64,0x1a66d73e4bf4881b,0xc07a039ba1c63adf,1
-np.float64,0x12a6b9b119a7da59,0xc07f62e49c6431f3,1
-np.float64,0x24c719aa8fd1bdb5,0xc072d26da4bf84d3,1
-np.float64,0x0fa6ff524ffef314,0xc080bb8514662e77,1
-np.float64,0x1db751d66fdd4a9a,0xc077b77cb50d7c92,1
-np.float64,0x4947374c516da82c,0x4059e9acfc7105bf,1
-np.float64,0x1b1771ab98f3afc8,0xc07989326b8e1f66,1
-np.float64,0x25e78805baac8070,0xc0720a818e6ef080,1
-np.float64,0x4bd7a148225d3687,0x406082d004ea3ee7,1
-np.float64,0x53d7d6b2bbbda00a,0x406b9a398967cbd5,1
-np.float64,0x6997fb9f4e1c685f,0x407ce0a703413eba,1
-np.float64,0x069802c2ff71b951,0xc083df39bf7acddc,1
-np.float64,0x4d683ac9890f66d8,0x4062ae21d8c2acf0,1
-np.float64,0x5a2825863ec14f4c,0x40722d718d549552,1
-np.float64,0x0398799a88f4db80,0xc084e93dab8e2158,1
-np.float64,0x5ed87a8b77e135a5,0x40756d7051777b33,1
-np.float64,0x5828cd6d79b9bede,0x4070cafb22fc6ca1,1
-np.float64,0x7b18ba2a5ec6f068,0x408481386b3ed6fe,1
-np.float64,0x4938fd60922198fe,0x4059c206b762ea7e,1
-np.float64,0x31b8f44fcdd1a46e,0xc063b2faa8b6434e,1
-np.float64,0x5729341c0d918464,0x407019cac0c4a7d7,1
-np.float64,0x13595e9228ee878e,0xc07ee7235a7d8088,1
-np.float64,0x17698b0dc9dd4135,0xc07c1627e3a5ad5f,1
-np.float64,0x63b977c283abb0cc,0x4078cf1ec6ed65be,1
-np.float64,0x7349cc0d4dc16943,0x4081cc697ce4cb53,1
-np.float64,0x4e49a80b732fb28d,0x4063e67e3c5cbe90,1
-np.float64,0x07ba14b848a8ae02,0xc0837ac032a094e0,1
-np.float64,0x3da9f17b691bfddc,0xc03929c25366acda,1
-np.float64,0x02ea39aa6c3ac007,0xc08525af6f21e1c4,1
-np.float64,0x3a6a42f04ed9563d,0xc04e98e825dca46b,1
-np.float64,0x1afa877cd7900be7,0xc0799d6648cb34a9,1
-np.float64,0x58ea986649e052c6,0x4071512e939ad790,1
-np.float64,0x691abbc04647f536,0x407c89aaae0fcb83,1
-np.float64,0x43aabc5063e6f284,0x4044b45d18106fd2,1
-np.float64,0x488b003c893e0bea,0x4057df012a2dafbe,1
-np.float64,0x77eb076ed67caee5,0x40836720de94769e,1
-np.float64,0x5c1b46974aba46f4,0x40738731ba256007,1
-np.float64,0x1a5b29ecb5d3c261,0xc07a0becc77040d6,1
-np.float64,0x5d8b6ccf868c6032,0x4074865c1865e2db,1
-np.float64,0x4cfb6690b4aaf5af,0x406216cd8c7e8ddb,1
-np.float64,0x76cbd8eb5c5fc39e,0x4083038dc66d682b,1
-np.float64,0x28bbd1fec5012814,0xc07014c2dd1b9711,1
-np.float64,0x33dc1b3a4fd6bf7a,0xc060bd0756e07d8a,1
-np.float64,0x52bbe89b37de99f3,0x406a10041aa7d343,1
-np.float64,0x07bc479d15eb2dd3,0xc0837a1a6e3a3b61,1
-np.float64,0x18fc5275711a901d,0xc07aff3e9d62bc93,1
-np.float64,0x114c9758e247dc71,0xc080299a7cf15b05,1
-np.float64,0x25ac8f6d60755148,0xc07233c4c0c511d4,1
-np.float64,0x260cae2bb9e9fd7e,0xc071f128c7e82eac,1
-np.float64,0x572ccdfe0241de82,0x40701bedc84bb504,1
-np.float64,0x0ddcef6c8d41f5ee,0xc0815a7e16d07084,1
-np.float64,0x6dad1d59c988af68,0x407fb4a0bc0142b1,1
-np.float64,0x025d200580d8b6d1,0xc08556c0bc32b1b2,1
-np.float64,0x7aad344b6aa74c18,0x40845bbc453f22be,1
-np.float64,0x5b5d9d6ad9d14429,0x4073036d2d21f382,1
-np.float64,0x49cd8d8dcdf19954,0x405b5c034f5c7353,1
-np.float64,0x63edb9483335c1e6,0x4078f2dd21378786,1
-np.float64,0x7b1dd64c9d2c26bd,0x408482b922017bc9,1
-np.float64,0x782e13e0b574be5f,0x40837e2a0090a5ad,1
-np.float64,0x592dfe18b9d6db2f,0x40717f777fbcb1ec,1
-np.float64,0x654e3232ac60d72c,0x4079e71a95a70446,1
-np.float64,0x7b8e42ad22091456,0x4084a9a6f1e61722,1
-np.float64,0x570e88dfd5860ae6,0x407006ae6c0d137a,1
-np.float64,0x294e98346cb98ef1,0xc06f5edaac12bd44,1
-np.float64,0x1adeaa4ab792e642,0xc079b1431d5e2633,1
-np.float64,0x7b6ead3377529ac8,0x40849eabc8c7683c,1
-np.float64,0x2b8eedae8a9b2928,0xc06c400054deef11,1
-np.float64,0x65defb45b2dcf660,0x407a4b53f181c05a,1
-np.float64,0x1baf582d475e7701,0xc07920bcad4a502c,1
-np.float64,0x461f39cf05a0f15a,0x405126368f984fa1,1
-np.float64,0x7e5f6f5dcfff005b,0x4085a37d610439b4,1
-np.float64,0x136f66e4d09bd662,0xc07ed8a2719f2511,1
-np.float64,0x65afd8983fb6ca1f,0x407a2a7f48bf7fc1,1
-np.float64,0x572fa7f95ed22319,0x40701d706cf82e6f,1
+np.float64,0x02500186f3d9da56,0xc0855b8abf135773,2
+np.float64,0x09200815a3951173,0xc082ff1ad7131bdc,2
+np.float64,0x0da029623b0243d4,0xc0816fc994695bb5,2
+np.float64,0x48703b8ac483a382,0x40579213a313490b,2
+np.float64,0x09207b74c87c9860,0xc082fee20ff349ef,2
+np.float64,0x62c077698e8df947,0x407821c996d110f0,2
+np.float64,0x2350b45e87c3cfb0,0xc073d6b16b51d072,2
+np.float64,0x3990a23f9ff2b623,0xc051aa60eadd8c61,2
+np.float64,0x0d011386a116c348,0xc081a6cc7ea3b8fb,2
+np.float64,0x1fe0f0303ebe273a,0xc0763870b78a81ca,2
+np.float64,0x0cd1260121d387da,0xc081b7668d61a9d1,2
+np.float64,0x1e6135a8f581d422,0xc077425ac10f08c2,2
+np.float64,0x622168db5fe52d30,0x4077b3c669b9fadb,2
+np.float64,0x69f188e1ec6d1718,0x407d1e2f18c63889,2
+np.float64,0x3aa1bf1d9c4dd1a3,0xc04d682e24bde479,2
+np.float64,0x6c81c4011ce4f683,0x407ee5190e8a8e6a,2
+np.float64,0x2191fa55aa5a5095,0xc0750c0c318b5e2d,2
+np.float64,0x32a1f602a32bf360,0xc06270caa493fc17,2
+np.float64,0x16023c90ba93249b,0xc07d0f88e0801638,2
+np.float64,0x1c525fe6d71fa9ff,0xc078af49c66a5d63,2
+np.float64,0x1a927675815d65b7,0xc079e5bdd7fe376e,2
+np.float64,0x41227b8fe70da028,0x402aa0c9f9a84c71,2
+np.float64,0x4962bb6e853fe87d,0x405a34aa04c83747,2
+np.float64,0x23d2cda00b26b5a4,0xc0737c13a06d00ea,2
+np.float64,0x2d13083fd62987fa,0xc06a25055aeb474e,2
+np.float64,0x10e31e4c9b4579a1,0xc0804e181929418e,2
+np.float64,0x26d3247d556a86a9,0xc0716774171da7e8,2
+np.float64,0x6603379398d0d4ac,0x407a64f51f8a887b,2
+np.float64,0x02d38af17d9442ba,0xc0852d955ac9dd68,2
+np.float64,0x6a2382b4818dd967,0x407d4129d688e5d4,2
+np.float64,0x2ee3c403c79b3934,0xc067a091fefaf8b6,2
+np.float64,0x6493a699acdbf1a4,0x4079663c8602bfc5,2
+np.float64,0x1c8413c4f0de3100,0xc0788c99697059b6,2
+np.float64,0x4573f1ed350d9622,0x404e9bd1e4c08920,2
+np.float64,0x2f34265c9200b69c,0xc067310cfea4e986,2
+np.float64,0x19b43e65fa22029b,0xc07a7f8877de22d6,2
+np.float64,0x0af48ab7925ed6bc,0xc0825c4fbc0e5ade,2
+np.float64,0x4fa49699cad82542,0x4065c76d2a318235,2
+np.float64,0x7204a15e56ade492,0x40815bb87484dffb,2
+np.float64,0x4734aa08a230982d,0x40542a4bf7a361a9,2
+np.float64,0x1ae4ed296c2fd749,0xc079ac4921f20abb,2
+np.float64,0x472514ea4370289c,0x4053ff372bd8f18f,2
+np.float64,0x53a54b3f73820430,0x406b5411fc5f2e33,2
+np.float64,0x64754de5a15684fa,0x407951592e99a5ab,2
+np.float64,0x69358e279868a7c3,0x407c9c671a882c31,2
+np.float64,0x284579ec61215945,0xc0706688e55f0927,2
+np.float64,0x68b5c58806447adc,0x407c43d6f4eff760,2
+np.float64,0x1945a83f98b0e65d,0xc07acc15eeb032cc,2
+np.float64,0x0fc5eb98a16578bf,0xc080b0d02eddca0e,2
+np.float64,0x6a75e208f5784250,0x407d7a7383bf8f05,2
+np.float64,0x0fe63a029c47645d,0xc080a59ca1e98866,2
+np.float64,0x37963ac53f065510,0xc057236281f7bdb6,2
+np.float64,0x135661bb07067ff7,0xc07ee924930c21e4,2
+np.float64,0x4b4699469d458422,0x405f73843756e887,2
+np.float64,0x1a66d73e4bf4881b,0xc07a039ba1c63adf,2
+np.float64,0x12a6b9b119a7da59,0xc07f62e49c6431f3,2
+np.float64,0x24c719aa8fd1bdb5,0xc072d26da4bf84d3,2
+np.float64,0x0fa6ff524ffef314,0xc080bb8514662e77,2
+np.float64,0x1db751d66fdd4a9a,0xc077b77cb50d7c92,2
+np.float64,0x4947374c516da82c,0x4059e9acfc7105bf,2
+np.float64,0x1b1771ab98f3afc8,0xc07989326b8e1f66,2
+np.float64,0x25e78805baac8070,0xc0720a818e6ef080,2
+np.float64,0x4bd7a148225d3687,0x406082d004ea3ee7,2
+np.float64,0x53d7d6b2bbbda00a,0x406b9a398967cbd5,2
+np.float64,0x6997fb9f4e1c685f,0x407ce0a703413eba,2
+np.float64,0x069802c2ff71b951,0xc083df39bf7acddc,2
+np.float64,0x4d683ac9890f66d8,0x4062ae21d8c2acf0,2
+np.float64,0x5a2825863ec14f4c,0x40722d718d549552,2
+np.float64,0x0398799a88f4db80,0xc084e93dab8e2158,2
+np.float64,0x5ed87a8b77e135a5,0x40756d7051777b33,2
+np.float64,0x5828cd6d79b9bede,0x4070cafb22fc6ca1,2
+np.float64,0x7b18ba2a5ec6f068,0x408481386b3ed6fe,2
+np.float64,0x4938fd60922198fe,0x4059c206b762ea7e,2
+np.float64,0x31b8f44fcdd1a46e,0xc063b2faa8b6434e,2
+np.float64,0x5729341c0d918464,0x407019cac0c4a7d7,2
+np.float64,0x13595e9228ee878e,0xc07ee7235a7d8088,2
+np.float64,0x17698b0dc9dd4135,0xc07c1627e3a5ad5f,2
+np.float64,0x63b977c283abb0cc,0x4078cf1ec6ed65be,2
+np.float64,0x7349cc0d4dc16943,0x4081cc697ce4cb53,2
+np.float64,0x4e49a80b732fb28d,0x4063e67e3c5cbe90,2
+np.float64,0x07ba14b848a8ae02,0xc0837ac032a094e0,2
+np.float64,0x3da9f17b691bfddc,0xc03929c25366acda,2
+np.float64,0x02ea39aa6c3ac007,0xc08525af6f21e1c4,2
+np.float64,0x3a6a42f04ed9563d,0xc04e98e825dca46b,2
+np.float64,0x1afa877cd7900be7,0xc0799d6648cb34a9,2
+np.float64,0x58ea986649e052c6,0x4071512e939ad790,2
+np.float64,0x691abbc04647f536,0x407c89aaae0fcb83,2
+np.float64,0x43aabc5063e6f284,0x4044b45d18106fd2,2
+np.float64,0x488b003c893e0bea,0x4057df012a2dafbe,2
+np.float64,0x77eb076ed67caee5,0x40836720de94769e,2
+np.float64,0x5c1b46974aba46f4,0x40738731ba256007,2
+np.float64,0x1a5b29ecb5d3c261,0xc07a0becc77040d6,2
+np.float64,0x5d8b6ccf868c6032,0x4074865c1865e2db,2
+np.float64,0x4cfb6690b4aaf5af,0x406216cd8c7e8ddb,2
+np.float64,0x76cbd8eb5c5fc39e,0x4083038dc66d682b,2
+np.float64,0x28bbd1fec5012814,0xc07014c2dd1b9711,2
+np.float64,0x33dc1b3a4fd6bf7a,0xc060bd0756e07d8a,2
+np.float64,0x52bbe89b37de99f3,0x406a10041aa7d343,2
+np.float64,0x07bc479d15eb2dd3,0xc0837a1a6e3a3b61,2
+np.float64,0x18fc5275711a901d,0xc07aff3e9d62bc93,2
+np.float64,0x114c9758e247dc71,0xc080299a7cf15b05,2
+np.float64,0x25ac8f6d60755148,0xc07233c4c0c511d4,2
+np.float64,0x260cae2bb9e9fd7e,0xc071f128c7e82eac,2
+np.float64,0x572ccdfe0241de82,0x40701bedc84bb504,2
+np.float64,0x0ddcef6c8d41f5ee,0xc0815a7e16d07084,2
+np.float64,0x6dad1d59c988af68,0x407fb4a0bc0142b1,2
+np.float64,0x025d200580d8b6d1,0xc08556c0bc32b1b2,2
+np.float64,0x7aad344b6aa74c18,0x40845bbc453f22be,2
+np.float64,0x5b5d9d6ad9d14429,0x4073036d2d21f382,2
+np.float64,0x49cd8d8dcdf19954,0x405b5c034f5c7353,2
+np.float64,0x63edb9483335c1e6,0x4078f2dd21378786,2
+np.float64,0x7b1dd64c9d2c26bd,0x408482b922017bc9,2
+np.float64,0x782e13e0b574be5f,0x40837e2a0090a5ad,2
+np.float64,0x592dfe18b9d6db2f,0x40717f777fbcb1ec,2
+np.float64,0x654e3232ac60d72c,0x4079e71a95a70446,2
+np.float64,0x7b8e42ad22091456,0x4084a9a6f1e61722,2
+np.float64,0x570e88dfd5860ae6,0x407006ae6c0d137a,2
+np.float64,0x294e98346cb98ef1,0xc06f5edaac12bd44,2
+np.float64,0x1adeaa4ab792e642,0xc079b1431d5e2633,2
+np.float64,0x7b6ead3377529ac8,0x40849eabc8c7683c,2
+np.float64,0x2b8eedae8a9b2928,0xc06c400054deef11,2
+np.float64,0x65defb45b2dcf660,0x407a4b53f181c05a,2
+np.float64,0x1baf582d475e7701,0xc07920bcad4a502c,2
+np.float64,0x461f39cf05a0f15a,0x405126368f984fa1,2
+np.float64,0x7e5f6f5dcfff005b,0x4085a37d610439b4,2
+np.float64,0x136f66e4d09bd662,0xc07ed8a2719f2511,2
+np.float64,0x65afd8983fb6ca1f,0x407a2a7f48bf7fc1,2
+np.float64,0x572fa7f95ed22319,0x40701d706cf82e6f,2
diff --git a/numpy/core/tests/test_multiarray.py b/numpy/core/tests/test_multiarray.py
index 6ba90a97f..8c7f00cb4 100644
--- a/numpy/core/tests/test_multiarray.py
+++ b/numpy/core/tests/test_multiarray.py
@@ -3694,6 +3694,32 @@ class TestBinop:
check(make_obj(np.ndarray, array_ufunc=None), True, False, False,
check_scalar=False)
+ @pytest.mark.parametrize("priority", [None, "runtime error"])
+ def test_ufunc_binop_bad_array_priority(self, priority):
+ # Mainly checks that this does not crash. The second array has a lower
+ # priority than -1 ("error value"). If the __radd__ actually exists,
+ # bad things can happen (I think via the scalar paths).
+ # In principle both of these can probably just be errors in the future.
+ class BadPriority:
+ @property
+ def __array_priority__(self):
+ if priority == "runtime error":
+ raise RuntimeError("RuntimeError in __array_priority__!")
+ return priority
+
+ def __radd__(self, other):
+ return "result"
+
+ class LowPriority(np.ndarray):
+ __array_priority__ = -1000
+
+ # Priority failure uses the same as scalars (smaller -1000). So the
+ # LowPriority wins with 'result' for each element (inner operation).
+ res = np.arange(3).view(LowPriority) + BadPriority()
+ assert res.shape == (3,)
+ assert res[0] == 'result'
+
+
def test_ufunc_override_normalize_signature(self):
# gh-5674
class SomeClass:
diff --git a/numpy/core/tests/test_ufunc.py b/numpy/core/tests/test_ufunc.py
index f13c2667d..cb0f7bcbd 100644
--- a/numpy/core/tests/test_ufunc.py
+++ b/numpy/core/tests/test_ufunc.py
@@ -2507,3 +2507,57 @@ def test_ufunc_methods_floaterrors(method):
with np.errstate(all="raise"):
with pytest.raises(FloatingPointError):
method(arr)
+
+
+def _check_neg_zero(value):
+ if value != 0.0:
+ return False
+ if not np.signbit(value.real):
+ return False
+ if value.dtype.kind == "c":
+ return np.signbit(value.imag)
+ return True
+
+@pytest.mark.parametrize("dtype", np.typecodes["AllFloat"])
+def test_addition_negative_zero(dtype):
+ dtype = np.dtype(dtype)
+ if dtype.kind == "c":
+ neg_zero = dtype.type(complex(-0.0, -0.0))
+ else:
+ neg_zero = dtype.type(-0.0)
+
+ arr = np.array(neg_zero)
+ arr2 = np.array(neg_zero)
+
+ assert _check_neg_zero(arr + arr2)
+ # In-place ops may end up on a different path (reduce path) see gh-21211
+ arr += arr2
+ assert _check_neg_zero(arr)
+
+
+@pytest.mark.parametrize("dtype", np.typecodes["AllFloat"])
+@pytest.mark.parametrize("use_initial", [True, False])
+def test_addition_reduce_negative_zero(dtype, use_initial):
+ dtype = np.dtype(dtype)
+ if dtype.kind == "c":
+ neg_zero = dtype.type(complex(-0.0, -0.0))
+ else:
+ neg_zero = dtype.type(-0.0)
+
+ kwargs = {}
+ if use_initial:
+ kwargs["initial"] = neg_zero
+ else:
+ pytest.xfail("-0. propagation in sum currently requires initial")
+
+ # Test various length, in case SIMD paths or chunking play a role.
+ # 150 extends beyond the pairwise blocksize; probably not important.
+ for i in range(0, 150):
+ arr = np.array([neg_zero] * i, dtype=dtype)
+ res = np.sum(arr, **kwargs)
+ if i > 0 or use_initial:
+ assert _check_neg_zero(res)
+ else:
+ # `sum([])` should probably be 0.0 and not -0.0 like `sum([-0.0])`
+ assert not np.signbit(res.real)
+ assert not np.signbit(res.imag)
diff --git a/numpy/core/tests/test_umath.py b/numpy/core/tests/test_umath.py
index 575807d89..dd0bb88ff 100644
--- a/numpy/core/tests/test_umath.py
+++ b/numpy/core/tests/test_umath.py
@@ -995,12 +995,13 @@ class TestExp:
class TestSpecialFloats:
def test_exp_values(self):
- x = [np.nan, np.nan, np.inf, 0.]
- y = [np.nan, -np.nan, np.inf, -np.inf]
- for dt in ['f', 'd', 'g']:
- xf = np.array(x, dtype=dt)
- yf = np.array(y, dtype=dt)
- assert_equal(np.exp(yf), xf)
+ with np.errstate(under='raise', over='raise'):
+ x = [np.nan, np.nan, np.inf, 0.]
+ y = [np.nan, -np.nan, np.inf, -np.inf]
+ for dt in ['f', 'd', 'g']:
+ xf = np.array(x, dtype=dt)
+ yf = np.array(y, dtype=dt)
+ assert_equal(np.exp(yf), xf)
# See: https://github.com/numpy/numpy/issues/19192
@pytest.mark.xfail(
diff --git a/numpy/distutils/ccompiler_opt.py b/numpy/distutils/ccompiler_opt.py
index 0343cb8f4..6d2114c95 100644
--- a/numpy/distutils/ccompiler_opt.py
+++ b/numpy/distutils/ccompiler_opt.py
@@ -346,7 +346,7 @@ class _Config:
FMA4 = dict(flags="-mfma4"),
FMA3 = dict(flags="-mfma"),
AVX2 = dict(flags="-mavx2"),
- AVX512F = dict(flags="-mavx512f"),
+ AVX512F = dict(flags="-mavx512f -mno-mmx"),
AVX512CD = dict(flags="-mavx512cd"),
AVX512_KNL = dict(flags="-mavx512er -mavx512pf"),
AVX512_KNM = dict(
diff --git a/numpy/f2py/cfuncs.py b/numpy/f2py/cfuncs.py
index bdd27adaf..f69933543 100644
--- a/numpy/f2py/cfuncs.py
+++ b/numpy/f2py/cfuncs.py
@@ -51,8 +51,6 @@ includes0['math.h'] = '#include <math.h>'
includes0['string.h'] = '#include <string.h>'
includes0['setjmp.h'] = '#include <setjmp.h>'
-includes['Python.h'] = '#include <Python.h>'
-needs['arrayobject.h'] = ['Python.h']
includes['arrayobject.h'] = '''#define PY_ARRAY_UNIQUE_SYMBOL PyArray_API
#include "arrayobject.h"'''
@@ -66,7 +64,7 @@ typedefs['unsigned_short'] = 'typedef unsigned short unsigned_short;'
typedefs['unsigned_long'] = 'typedef unsigned long unsigned_long;'
typedefs['signed_char'] = 'typedef signed char signed_char;'
typedefs['long_long'] = """\
-#ifdef _WIN32
+#if defined(NPY_OS_WIN32)
typedef __int64 long_long;
#else
typedef long long long_long;
@@ -74,7 +72,7 @@ typedef unsigned long long unsigned_long_long;
#endif
"""
typedefs['unsigned_long_long'] = """\
-#ifdef _WIN32
+#if defined(NPY_OS_WIN32)
typedef __uint64 long_long;
#else
typedef unsigned long long unsigned_long_long;
@@ -574,13 +572,13 @@ cppmacros["F2PY_THREAD_LOCAL_DECL"] = """\
#ifndef F2PY_THREAD_LOCAL_DECL
#if defined(_MSC_VER)
#define F2PY_THREAD_LOCAL_DECL __declspec(thread)
-#elif defined(__MINGW32__) || defined(__MINGW64__)
+#elif defined(NPY_OS_MINGW)
#define F2PY_THREAD_LOCAL_DECL __thread
#elif defined(__STDC_VERSION__) \\
&& (__STDC_VERSION__ >= 201112L) \\
&& !defined(__STDC_NO_THREADS__) \\
&& (!defined(__GLIBC__) || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 12)) \\
- && !defined(__OpenBSD__)
+ && !defined(NPY_OS_OPENBSD)
/* __STDC_NO_THREADS__ was first defined in a maintenance release of glibc 2.12,
see https://lists.gnu.org/archive/html/commit-hurd/2012-07/msg00180.html,
so `!defined(__STDC_NO_THREADS__)` may give false positive for the existence
diff --git a/numpy/f2py/rules.py b/numpy/f2py/rules.py
index 78810a0a7..eaa559528 100755
--- a/numpy/f2py/rules.py
+++ b/numpy/f2py/rules.py
@@ -124,6 +124,10 @@ extern \"C\" {
#define PY_SSIZE_T_CLEAN
#endif /* PY_SSIZE_T_CLEAN */
+/* Unconditionally included */
+#include <Python.h>
+#include <numpy/npy_os.h>
+
""" + gentitle("See f2py2e/cfuncs.py: includes") + """
#includes#
#includes0#
diff --git a/numpy/lib/_datasource.py b/numpy/lib/_datasource.py
index 8201d3772..b7778234e 100644
--- a/numpy/lib/_datasource.py
+++ b/numpy/lib/_datasource.py
@@ -280,8 +280,9 @@ class DataSource:
def _splitzipext(self, filename):
"""Split zip extension from filename and return filename.
- *Returns*:
- base, zip_ext : {tuple}
+ Returns
+ -------
+ base, zip_ext : {tuple}
"""
diff --git a/numpy/lib/arraysetops.py b/numpy/lib/arraysetops.py
index bd56b6975..d44e1a983 100644
--- a/numpy/lib/arraysetops.py
+++ b/numpy/lib/arraysetops.py
@@ -640,7 +640,7 @@ def _isin_dispatcher(element, test_elements, assume_unique=None, invert=None):
@array_function_dispatch(_isin_dispatcher)
def isin(element, test_elements, assume_unique=False, invert=False):
"""
- Calculates `element in test_elements`, broadcasting over `element` only.
+ Calculates ``element in test_elements``, broadcasting over `element` only.
Returns a boolean array of the same shape as `element` that is True
where an element of `element` is in `test_elements` and False otherwise.
diff --git a/tools/wheels/upload_wheels.sh b/tools/wheels/upload_wheels.sh
index 21c6e629e..4bb1a8c51 100644
--- a/tools/wheels/upload_wheels.sh
+++ b/tools/wheels/upload_wheels.sh
@@ -41,9 +41,10 @@ upload_wheels() {
echo no token set, not uploading
else
python -m pip install git+https://github.com/Anaconda-Server/anaconda-client
- if compgen -G "./wheelhouse/*.gz"; then
+ # sdists are located under dist folder when built through setup.py
+ if compgen -G "./dist/*.gz"; then
echo "Found sdist"
- anaconda -t ${TOKEN} upload --skip -u ${ANACONDA_ORG} ./wheelhouse/*.gz
+ anaconda -t ${TOKEN} upload --skip -u ${ANACONDA_ORG} ./dist/*.gz
elif compgen -G "./wheelhouse/*.whl"; then
echo "Found wheel"
anaconda -t ${TOKEN} upload --skip -u ${ANACONDA_ORG} ./wheelhouse/*.whl