diff options
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 |
