#ifndef NUMPY_CORE_INCLUDE_NUMPY_NPY_NUMPYCONFIG_H_
|
#define NUMPY_CORE_INCLUDE_NUMPY_NPY_NUMPYCONFIG_H_
|
|
#include "_numpyconfig.h"
|
|
/*
|
* On Mac OS X, because there is only one configuration stage for all the archs
|
* in universal builds, any macro which depends on the arch needs to be
|
* hardcoded.
|
*
|
* Note that distutils/pip will attempt a universal2 build when Python itself
|
* is built as universal2, hence this hardcoding is needed even if we do not
|
* support universal2 wheels anymore (see gh-22796).
|
* This code block can be removed after we have dropped the setup.py based
|
* build completely.
|
*/
|
#ifdef __APPLE__
|
#undef NPY_SIZEOF_LONG
|
|
#ifdef __LP64__
|
#define NPY_SIZEOF_LONG 8
|
#else
|
#define NPY_SIZEOF_LONG 4
|
#endif
|
|
#undef NPY_SIZEOF_LONGDOUBLE
|
#undef NPY_SIZEOF_COMPLEX_LONGDOUBLE
|
#ifdef HAVE_LDOUBLE_IEEE_DOUBLE_LE
|
#undef HAVE_LDOUBLE_IEEE_DOUBLE_LE
|
#endif
|
#ifdef HAVE_LDOUBLE_INTEL_EXTENDED_16_BYTES_LE
|
#undef HAVE_LDOUBLE_INTEL_EXTENDED_16_BYTES_LE
|
#endif
|
|
#if defined(__arm64__)
|
#define NPY_SIZEOF_LONGDOUBLE 8
|
#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 16
|
#define HAVE_LDOUBLE_IEEE_DOUBLE_LE 1
|
#elif defined(__x86_64)
|
#define NPY_SIZEOF_LONGDOUBLE 16
|
#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
|
#define HAVE_LDOUBLE_INTEL_EXTENDED_16_BYTES_LE 1
|
#elif defined (__i386)
|
#define NPY_SIZEOF_LONGDOUBLE 12
|
#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 24
|
#elif defined(__ppc__) || defined (__ppc64__)
|
#define NPY_SIZEOF_LONGDOUBLE 16
|
#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
|
#else
|
#error "unknown architecture"
|
#endif
|
#endif
|
|
|
/**
|
* To help with both NPY_TARGET_VERSION and the NPY_NO_DEPRECATED_API macro,
|
* we include API version numbers for specific versions of NumPy.
|
* To exclude all API that was deprecated as of 1.7, add the following before
|
* #including any NumPy headers:
|
* #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
|
* The same is true for NPY_TARGET_VERSION, although NumPy will default to
|
* a backwards compatible build anyway.
|
*/
|
#define NPY_1_7_API_VERSION 0x00000007
|
#define NPY_1_8_API_VERSION 0x00000008
|
#define NPY_1_9_API_VERSION 0x00000009
|
#define NPY_1_10_API_VERSION 0x0000000a
|
#define NPY_1_11_API_VERSION 0x0000000a
|
#define NPY_1_12_API_VERSION 0x0000000a
|
#define NPY_1_13_API_VERSION 0x0000000b
|
#define NPY_1_14_API_VERSION 0x0000000c
|
#define NPY_1_15_API_VERSION 0x0000000c
|
#define NPY_1_16_API_VERSION 0x0000000d
|
#define NPY_1_17_API_VERSION 0x0000000d
|
#define NPY_1_18_API_VERSION 0x0000000d
|
#define NPY_1_19_API_VERSION 0x0000000d
|
#define NPY_1_20_API_VERSION 0x0000000e
|
#define NPY_1_21_API_VERSION 0x0000000e
|
#define NPY_1_22_API_VERSION 0x0000000f
|
#define NPY_1_23_API_VERSION 0x00000010
|
#define NPY_1_24_API_VERSION 0x00000010
|
#define NPY_1_25_API_VERSION 0x00000011
|
#define NPY_2_0_API_VERSION 0x00000012
|
#define NPY_2_1_API_VERSION 0x00000013
|
#define NPY_2_2_API_VERSION 0x00000013
|
#define NPY_2_3_API_VERSION 0x00000014
|
|
|
/*
|
* Binary compatibility version number. This number is increased
|
* whenever the C-API is changed such that binary compatibility is
|
* broken, i.e. whenever a recompile of extension modules is needed.
|
*/
|
#define NPY_VERSION NPY_ABI_VERSION
|
|
/*
|
* Minor API version we are compiling to be compatible with. The version
|
* Number is always increased when the API changes via: `NPY_API_VERSION`
|
* (and should maybe just track the NumPy version).
|
*
|
* If we have an internal build, we always target the current version of
|
* course.
|
*
|
* For downstream users, we default to an older version to provide them with
|
* maximum compatibility by default. Downstream can choose to extend that
|
* default, or narrow it down if they wish to use newer API. If you adjust
|
* this, consider the Python version support (example for 1.25.x):
|
*
|
* NumPy 1.25.x supports Python: 3.9 3.10 3.11 (3.12)
|
* NumPy 1.19.x supports Python: 3.6 3.7 3.8 3.9
|
* NumPy 1.17.x supports Python: 3.5 3.6 3.7 3.8
|
* NumPy 1.15.x supports Python: ... 3.6 3.7
|
*
|
* Users of the stable ABI may wish to target the last Python that is not
|
* end of life. This would be 3.8 at NumPy 1.25 release time.
|
* 1.17 as default was the choice of oldest-support-numpy at the time and
|
* has in practice no limit (compared to 1.19). Even earlier becomes legacy.
|
*/
|
#if defined(NPY_INTERNAL_BUILD) && NPY_INTERNAL_BUILD
|
/* NumPy internal build, always use current version. */
|
#define NPY_FEATURE_VERSION NPY_API_VERSION
|
#elif defined(NPY_TARGET_VERSION) && NPY_TARGET_VERSION
|
/* user provided a target version, use it */
|
#define NPY_FEATURE_VERSION NPY_TARGET_VERSION
|
#else
|
/* Use the default (increase when dropping Python 3.11 support) */
|
#define NPY_FEATURE_VERSION NPY_1_23_API_VERSION
|
#endif
|
|
/* Sanity check the (requested) feature version */
|
#if NPY_FEATURE_VERSION > NPY_API_VERSION
|
#error "NPY_TARGET_VERSION higher than NumPy headers!"
|
#elif NPY_FEATURE_VERSION < NPY_1_15_API_VERSION
|
/* No support for irrelevant old targets, no need for error, but warn. */
|
#ifndef _MSC_VER
|
#warning "Requested NumPy target lower than supported NumPy 1.15."
|
#else
|
#define _WARN___STR2__(x) #x
|
#define _WARN___STR1__(x) _WARN___STR2__(x)
|
#define _WARN___LOC__ __FILE__ "(" _WARN___STR1__(__LINE__) ") : Warning Msg: "
|
#pragma message(_WARN___LOC__"Requested NumPy target lower than supported NumPy 1.15.")
|
#endif
|
#endif
|
|
/*
|
* We define a human readable translation to the Python version of NumPy
|
* for error messages (and also to allow grepping the binaries for conda).
|
*/
|
#if NPY_FEATURE_VERSION == NPY_1_7_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "1.7"
|
#elif NPY_FEATURE_VERSION == NPY_1_8_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "1.8"
|
#elif NPY_FEATURE_VERSION == NPY_1_9_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "1.9"
|
#elif NPY_FEATURE_VERSION == NPY_1_10_API_VERSION /* also 1.11, 1.12 */
|
#define NPY_FEATURE_VERSION_STRING "1.10"
|
#elif NPY_FEATURE_VERSION == NPY_1_13_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "1.13"
|
#elif NPY_FEATURE_VERSION == NPY_1_14_API_VERSION /* also 1.15 */
|
#define NPY_FEATURE_VERSION_STRING "1.14"
|
#elif NPY_FEATURE_VERSION == NPY_1_16_API_VERSION /* also 1.17, 1.18, 1.19 */
|
#define NPY_FEATURE_VERSION_STRING "1.16"
|
#elif NPY_FEATURE_VERSION == NPY_1_20_API_VERSION /* also 1.21 */
|
#define NPY_FEATURE_VERSION_STRING "1.20"
|
#elif NPY_FEATURE_VERSION == NPY_1_22_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "1.22"
|
#elif NPY_FEATURE_VERSION == NPY_1_23_API_VERSION /* also 1.24 */
|
#define NPY_FEATURE_VERSION_STRING "1.23"
|
#elif NPY_FEATURE_VERSION == NPY_1_25_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "1.25"
|
#elif NPY_FEATURE_VERSION == NPY_2_0_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "2.0"
|
#elif NPY_FEATURE_VERSION == NPY_2_1_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "2.1"
|
#elif NPY_FEATURE_VERSION == NPY_2_3_API_VERSION
|
#define NPY_FEATURE_VERSION_STRING "2.3"
|
#else
|
#error "Missing version string define for new NumPy version."
|
#endif
|
|
|
#endif /* NUMPY_CORE_INCLUDE_NUMPY_NPY_NUMPYCONFIG_H_ */
|