Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
npy_common.h990 linesDownload Raw Back to numpy
1#ifndef NUMPY_CORE_INCLUDE_NUMPY_NPY_COMMON_H_
2#define NUMPY_CORE_INCLUDE_NUMPY_NPY_COMMON_H_
3
4/* need Python.h for npy_intp, npy_uintp */
5#include <Python.h>
6
7/* numpconfig.h is auto-generated */
8#include "numpyconfig.h"
9#ifdef HAVE_NPY_CONFIG_H
10#include <npy_config.h>
11#endif
12
13/*
14 * using static inline modifiers when defining npy_math functions
15 * allows the compiler to make optimizations when possible
16 */
17#ifndef NPY_INLINE_MATH
18#if defined(NPY_INTERNAL_BUILD) && NPY_INTERNAL_BUILD
19    #define NPY_INLINE_MATH 1
20#else
21    #define NPY_INLINE_MATH 0
22#endif
23#endif
24
25/*
26 * gcc does not unroll even with -O3
27 * use with care, unrolling on modern cpus rarely speeds things up
28 */
29#ifdef HAVE_ATTRIBUTE_OPTIMIZE_UNROLL_LOOPS
30#define NPY_GCC_UNROLL_LOOPS \
31    __attribute__((optimize("unroll-loops")))
32#else
33#define NPY_GCC_UNROLL_LOOPS
34#endif
35
36/* highest gcc optimization level, enabled autovectorizer */
37#ifdef HAVE_ATTRIBUTE_OPTIMIZE_OPT_3
38#define NPY_GCC_OPT_3 __attribute__((optimize("O3")))
39#else
40#define NPY_GCC_OPT_3
41#endif
42
43/*
44 * mark an argument (starting from 1) that must not be NULL and is not checked
45 * DO NOT USE IF FUNCTION CHECKS FOR NULL!! the compiler will remove the check
46 */
47#ifdef HAVE_ATTRIBUTE_NONNULL
48#define NPY_GCC_NONNULL(n) __attribute__((nonnull(n)))
49#else
50#define NPY_GCC_NONNULL(n)
51#endif
52
53/*
54 * give a hint to the compiler which branch is more likely or unlikely
55 * to occur, e.g. rare error cases:
56 *
57 * if (NPY_UNLIKELY(failure == 0))
58 *    return NULL;
59 *
60 * the double !! is to cast the expression (e.g. NULL) to a boolean required by
61 * the intrinsic
62 */
63#ifdef HAVE___BUILTIN_EXPECT
64#define NPY_LIKELY(x) __builtin_expect(!!(x), 1)
65#define NPY_UNLIKELY(x) __builtin_expect(!!(x), 0)
66#else
67#define NPY_LIKELY(x) (x)
68#define NPY_UNLIKELY(x) (x)
69#endif
70
71#ifdef HAVE___BUILTIN_PREFETCH
72/* unlike _mm_prefetch also works on non-x86 */
73#define NPY_PREFETCH(x, rw, loc) __builtin_prefetch((x), (rw), (loc))
74#else
75#ifdef NPY_HAVE_SSE
76/* _MM_HINT_ET[01] (rw = 1) unsupported, only available in gcc >= 4.9 */
77#define NPY_PREFETCH(x, rw, loc) _mm_prefetch((x), loc == 0 ? _MM_HINT_NTA : \
78                                             (loc == 1 ? _MM_HINT_T2 : \
79                                              (loc == 2 ? _MM_HINT_T1 : \
80                                               (loc == 3 ? _MM_HINT_T0 : -1))))
81#else
82#define NPY_PREFETCH(x, rw,loc)
83#endif
84#endif
85
86/* `NPY_INLINE` kept for backwards compatibility; use `inline` instead */
87#if defined(_MSC_VER) && !defined(__clang__)
88    #define NPY_INLINE __inline
89/* clang included here to handle clang-cl on Windows */
90#elif defined(__GNUC__) || defined(__clang__)
91    #if defined(__STRICT_ANSI__)
92         #define NPY_INLINE __inline__
93    #else
94         #define NPY_INLINE inline
95    #endif
96#else
97    #define NPY_INLINE
98#endif
99
100#ifdef _MSC_VER
101    #ifdef __cplusplus
102        #define NPY_FINLINE __forceinline
103    #else
104        #define NPY_FINLINE static __forceinline
105    #endif
106#elif defined(__GNUC__)
107    #ifdef __cplusplus
108        #define NPY_FINLINE inline __attribute__((always_inline))
109    #else
110        #define NPY_FINLINE static inline __attribute__((always_inline))
111    #endif
112#else
113    #ifdef __cplusplus
114        #define NPY_FINLINE inline
115    #else
116        #define NPY_FINLINE static NPY_INLINE
117    #endif
118#endif
119
120#if defined(_MSC_VER)
121    #define NPY_NOINLINE static __declspec(noinline)
122#elif defined(__GNUC__) || defined(__clang__)
123    #define NPY_NOINLINE static __attribute__((noinline))
124#else
125    #define NPY_NOINLINE static
126#endif
127
128#ifdef __cplusplus
129    #define NPY_TLS thread_local
130#elif defined(HAVE_THREAD_LOCAL)
131    #define NPY_TLS thread_local
132#elif defined(HAVE__THREAD_LOCAL)
133    #define NPY_TLS _Thread_local
134#elif defined(HAVE___THREAD)
135    #define NPY_TLS __thread
136#elif defined(HAVE___DECLSPEC_THREAD_)
137    #define NPY_TLS __declspec(thread)
138#else
139    #define NPY_TLS
140#endif
141
142#ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE
143  #define NPY_RETURNS_BORROWED_REF \
144    __attribute__((cpychecker_returns_borrowed_ref))
145#else
146  #define NPY_RETURNS_BORROWED_REF
147#endif
148
149#ifdef WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE
150  #define NPY_STEALS_REF_TO_ARG(n) \
151   __attribute__((cpychecker_steals_reference_to_arg(n)))
152#else
153 #define NPY_STEALS_REF_TO_ARG(n)
154#endif
155
156/* 64 bit file position support, also on win-amd64. Issue gh-2256 */
157#if defined(_MSC_VER) && defined(_WIN64) && (_MSC_VER > 1400) || \
158    defined(__MINGW32__) || defined(__MINGW64__)
159    #include <io.h>
160
161    #define npy_fseek _fseeki64
162    #define npy_ftell _ftelli64
163    #define npy_lseek _lseeki64
164    #define npy_off_t npy_int64
165
166    #if NPY_SIZEOF_INT == 8
167        #define NPY_OFF_T_PYFMT "i"
168    #elif NPY_SIZEOF_LONG == 8
169        #define NPY_OFF_T_PYFMT "l"
170    #elif NPY_SIZEOF_LONGLONG == 8
171        #define NPY_OFF_T_PYFMT "L"
172    #else
173        #error Unsupported size for type off_t
174    #endif
175#else
176#ifdef HAVE_FSEEKO
177    #define npy_fseek fseeko
178#else
179    #define npy_fseek fseek
180#endif
181#ifdef HAVE_FTELLO
182    #define npy_ftell ftello
183#else
184    #define npy_ftell ftell
185#endif
186    #include <sys/types.h>
187    #ifndef _WIN32
188        #include <unistd.h>
189    #endif
190    #define npy_lseek lseek
191    #define npy_off_t off_t
192
193    #if NPY_SIZEOF_OFF_T == NPY_SIZEOF_SHORT
194        #define NPY_OFF_T_PYFMT "h"
195    #elif NPY_SIZEOF_OFF_T == NPY_SIZEOF_INT
196        #define NPY_OFF_T_PYFMT "i"
197    #elif NPY_SIZEOF_OFF_T == NPY_SIZEOF_LONG
198        #define NPY_OFF_T_PYFMT "l"
199    #elif NPY_SIZEOF_OFF_T == NPY_SIZEOF_LONGLONG
200        #define NPY_OFF_T_PYFMT "L"
201    #else
202        #error Unsupported size for type off_t
203    #endif
204#endif
205
206/* enums for detected endianness */
207enum {
208        NPY_CPU_UNKNOWN_ENDIAN,
209        NPY_CPU_LITTLE,
210        NPY_CPU_BIG
211};
212
213/*
214 * This is to typedef npy_intp to the appropriate size for Py_ssize_t.
215 * (Before NumPy 2.0 we used Py_intptr_t and Py_uintptr_t from `pyport.h`.)
216 */
217typedef Py_ssize_t npy_intp;
218typedef size_t npy_uintp;
219
220/*
221 * Define sizes that were not defined in numpyconfig.h.
222 */
223#define NPY_SIZEOF_CHAR 1
224#define NPY_SIZEOF_BYTE 1
225#define NPY_SIZEOF_DATETIME 8
226#define NPY_SIZEOF_TIMEDELTA 8
227#define NPY_SIZEOF_HALF 2
228#define NPY_SIZEOF_CFLOAT NPY_SIZEOF_COMPLEX_FLOAT
229#define NPY_SIZEOF_CDOUBLE NPY_SIZEOF_COMPLEX_DOUBLE
230#define NPY_SIZEOF_CLONGDOUBLE NPY_SIZEOF_COMPLEX_LONGDOUBLE
231
232#ifdef constchar
233#undef constchar
234#endif
235
236#define NPY_SSIZE_T_PYFMT "n"
237#define constchar char
238
239/* NPY_INTP_FMT Note:
240 *      Unlike the other NPY_*_FMT macros, which are used with PyOS_snprintf,
241 *      NPY_INTP_FMT is used with PyErr_Format and PyUnicode_FromFormat. Those
242 *      functions use different formatting codes that are portably specified
243 *      according to the Python documentation. See issue gh-2388.
244 */
245#if NPY_SIZEOF_INTP == NPY_SIZEOF_LONG
246        #define NPY_INTP NPY_LONG
247        #define NPY_UINTP NPY_ULONG
248        #define PyIntpArrType_Type PyLongArrType_Type
249        #define PyUIntpArrType_Type PyULongArrType_Type
250        #define NPY_MAX_INTP NPY_MAX_LONG
251        #define NPY_MIN_INTP NPY_MIN_LONG
252        #define NPY_MAX_UINTP NPY_MAX_ULONG
253        #define NPY_INTP_FMT "ld"
254#elif NPY_SIZEOF_INTP == NPY_SIZEOF_INT
255        #define NPY_INTP NPY_INT
256        #define NPY_UINTP NPY_UINT
257        #define PyIntpArrType_Type PyIntArrType_Type
258        #define PyUIntpArrType_Type PyUIntArrType_Type
259        #define NPY_MAX_INTP NPY_MAX_INT
260        #define NPY_MIN_INTP NPY_MIN_INT
261        #define NPY_MAX_UINTP NPY_MAX_UINT
262        #define NPY_INTP_FMT "d"
263#elif defined(PY_LONG_LONG) && (NPY_SIZEOF_INTP == NPY_SIZEOF_LONGLONG)
264        #define NPY_INTP NPY_LONGLONG
265        #define NPY_UINTP NPY_ULONGLONG
266        #define PyIntpArrType_Type PyLongLongArrType_Type
267        #define PyUIntpArrType_Type PyULongLongArrType_Type
268        #define NPY_MAX_INTP NPY_MAX_LONGLONG
269        #define NPY_MIN_INTP NPY_MIN_LONGLONG
270        #define NPY_MAX_UINTP NPY_MAX_ULONGLONG
271        #define NPY_INTP_FMT "lld"
272#else
273    #error "Failed to correctly define NPY_INTP and NPY_UINTP"
274#endif
275
276
277/*
278 * Some platforms don't define bool, long long, or long double.
279 * Handle that here.
280 */
281#define NPY_BYTE_FMT "hhd"
282#define NPY_UBYTE_FMT "hhu"
283#define NPY_SHORT_FMT "hd"
284#define NPY_USHORT_FMT "hu"
285#define NPY_INT_FMT "d"
286#define NPY_UINT_FMT "u"
287#define NPY_LONG_FMT "ld"
288#define NPY_ULONG_FMT "lu"
289#define NPY_HALF_FMT "g"
290#define NPY_FLOAT_FMT "g"
291#define NPY_DOUBLE_FMT "g"
292
293
294#ifdef PY_LONG_LONG
295typedef PY_LONG_LONG npy_longlong;
296typedef unsigned PY_LONG_LONG npy_ulonglong;
297#  ifdef _MSC_VER
298#    define NPY_LONGLONG_FMT         "I64d"
299#    define NPY_ULONGLONG_FMT        "I64u"
300#  else
301#    define NPY_LONGLONG_FMT         "lld"
302#    define NPY_ULONGLONG_FMT        "llu"
303#  endif
304#  ifdef _MSC_VER
305#    define NPY_LONGLONG_SUFFIX(x)   (x##i64)
306#    define NPY_ULONGLONG_SUFFIX(x)  (x##Ui64)
307#  else
308#    define NPY_LONGLONG_SUFFIX(x)   (x##LL)
309#    define NPY_ULONGLONG_SUFFIX(x)  (x##ULL)
310#  endif
311#else
312typedef long npy_longlong;
313typedef unsigned long npy_ulonglong;
314#  define NPY_LONGLONG_SUFFIX(x)  (x##L)
315#  define NPY_ULONGLONG_SUFFIX(x) (x##UL)
316#endif
317
318
319typedef unsigned char npy_bool;
320#define NPY_FALSE 0
321#define NPY_TRUE 1
322/*
323 * `NPY_SIZEOF_LONGDOUBLE` isn't usually equal to sizeof(long double).
324 * In some certain cases, it may forced to be equal to sizeof(double)
325 * even against the compiler implementation and the same goes for
326 * `complex long double`.
327 *
328 * Therefore, avoid `long double`, use `npy_longdouble` instead,
329 * and when it comes to standard math functions make sure of using
330 * the double version when `NPY_SIZEOF_LONGDOUBLE` == `NPY_SIZEOF_DOUBLE`.
331 * For example:
332 *   npy_longdouble *ptr, x;
333 *   #if NPY_SIZEOF_LONGDOUBLE == NPY_SIZEOF_DOUBLE
334 *       npy_longdouble r = modf(x, ptr);
335 *   #else
336 *       npy_longdouble r = modfl(x, ptr);
337 *   #endif
338 *
339 * See https://github.com/numpy/numpy/issues/20348
340 */
341#if NPY_SIZEOF_LONGDOUBLE == NPY_SIZEOF_DOUBLE
342    #define NPY_LONGDOUBLE_FMT "g"
343    #define longdouble_t double
344    typedef double npy_longdouble;
345#else
346    #define NPY_LONGDOUBLE_FMT "Lg"
347    #define longdouble_t long double
348    typedef long double npy_longdouble;
349#endif
350
351#ifndef Py_USING_UNICODE
352#error Must use Python with unicode enabled.
353#endif
354
355
356typedef signed char npy_byte;
357typedef unsigned char npy_ubyte;
358typedef unsigned short npy_ushort;
359typedef unsigned int npy_uint;
360typedef unsigned long npy_ulong;
361
362/* These are for completeness */
363typedef char npy_char;
364typedef short npy_short;
365typedef int npy_int;
366typedef long npy_long;
367typedef float npy_float;
368typedef double npy_double;
369
370typedef Py_hash_t npy_hash_t;
371#define NPY_SIZEOF_HASH_T NPY_SIZEOF_INTP
372
373#if defined(__cplusplus)
374
375typedef struct
376{
377    double _Val[2];
378} npy_cdouble;
379
380typedef struct
381{
382    float _Val[2];
383} npy_cfloat;
384
385typedef struct
386{
387    long double _Val[2];
388} npy_clongdouble;
389
390#else
391
392#include <complex.h>
393
394
395#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
396typedef _Dcomplex npy_cdouble;
397typedef _Fcomplex npy_cfloat;
398typedef _Lcomplex npy_clongdouble;
399#else /* !defined(_MSC_VER) || defined(__INTEL_COMPILER) */
400typedef double _Complex npy_cdouble;
401typedef float _Complex npy_cfloat;
402typedef longdouble_t _Complex npy_clongdouble;
403#endif
404
405#endif
406
407/*
408 * numarray-style bit-width typedefs
409 */
410#define NPY_MAX_INT8 127
411#define NPY_MIN_INT8 -128
412#define NPY_MAX_UINT8 255
413#define NPY_MAX_INT16 32767
414#define NPY_MIN_INT16 -32768
415#define NPY_MAX_UINT16 65535
416#define NPY_MAX_INT32 2147483647
417#define NPY_MIN_INT32 (-NPY_MAX_INT32 - 1)
418#define NPY_MAX_UINT32 4294967295U
419#define NPY_MAX_INT64 NPY_LONGLONG_SUFFIX(9223372036854775807)
420#define NPY_MIN_INT64 (-NPY_MAX_INT64 - NPY_LONGLONG_SUFFIX(1))
421#define NPY_MAX_UINT64 NPY_ULONGLONG_SUFFIX(18446744073709551615)
422#define NPY_MAX_INT128 NPY_LONGLONG_SUFFIX(85070591730234615865843651857942052864)
423#define NPY_MIN_INT128 (-NPY_MAX_INT128 - NPY_LONGLONG_SUFFIX(1))
424#define NPY_MAX_UINT128 NPY_ULONGLONG_SUFFIX(170141183460469231731687303715884105728)
425#define NPY_MIN_DATETIME NPY_MIN_INT64
426#define NPY_MAX_DATETIME NPY_MAX_INT64
427#define NPY_MIN_TIMEDELTA NPY_MIN_INT64
428#define NPY_MAX_TIMEDELTA NPY_MAX_INT64
429
430        /* Need to find the number of bits for each type and
431           make definitions accordingly.
432
433           C states that sizeof(char) == 1 by definition
434
435           So, just using the sizeof keyword won't help.
436
437           It also looks like Python itself uses sizeof(char) quite a
438           bit, which by definition should be 1 all the time.
439
440           Idea: Make Use of CHAR_BIT which should tell us how many
441           BITS per CHARACTER
442        */
443
444        /* Include platform definitions -- These are in the C89/90 standard */
445#include <limits.h>
446#define NPY_MAX_BYTE SCHAR_MAX
447#define NPY_MIN_BYTE SCHAR_MIN
448#define NPY_MAX_UBYTE UCHAR_MAX
449#define NPY_MAX_SHORT SHRT_MAX
450#define NPY_MIN_SHORT SHRT_MIN
451#define NPY_MAX_USHORT USHRT_MAX
452#define NPY_MAX_INT   INT_MAX
453#ifndef INT_MIN
454#define INT_MIN (-INT_MAX - 1)
455#endif
456#define NPY_MIN_INT   INT_MIN
457#define NPY_MAX_UINT  UINT_MAX
458#define NPY_MAX_LONG  LONG_MAX
459#define NPY_MIN_LONG  LONG_MIN
460#define NPY_MAX_ULONG  ULONG_MAX
461
462#define NPY_BITSOF_BOOL (sizeof(npy_bool) * CHAR_BIT)
463#define NPY_BITSOF_CHAR CHAR_BIT
464#define NPY_BITSOF_BYTE (NPY_SIZEOF_BYTE * CHAR_BIT)
465#define NPY_BITSOF_SHORT (NPY_SIZEOF_SHORT * CHAR_BIT)
466#define NPY_BITSOF_INT (NPY_SIZEOF_INT * CHAR_BIT)
467#define NPY_BITSOF_LONG (NPY_SIZEOF_LONG * CHAR_BIT)
468#define NPY_BITSOF_LONGLONG (NPY_SIZEOF_LONGLONG * CHAR_BIT)
469#define NPY_BITSOF_INTP (NPY_SIZEOF_INTP * CHAR_BIT)
470#define NPY_BITSOF_HALF (NPY_SIZEOF_HALF * CHAR_BIT)
471#define NPY_BITSOF_FLOAT (NPY_SIZEOF_FLOAT * CHAR_BIT)
472#define NPY_BITSOF_DOUBLE (NPY_SIZEOF_DOUBLE * CHAR_BIT)
473#define NPY_BITSOF_LONGDOUBLE (NPY_SIZEOF_LONGDOUBLE * CHAR_BIT)
474#define NPY_BITSOF_CFLOAT (NPY_SIZEOF_CFLOAT * CHAR_BIT)
475#define NPY_BITSOF_CDOUBLE (NPY_SIZEOF_CDOUBLE * CHAR_BIT)
476#define NPY_BITSOF_CLONGDOUBLE (NPY_SIZEOF_CLONGDOUBLE * CHAR_BIT)
477#define NPY_BITSOF_DATETIME (NPY_SIZEOF_DATETIME * CHAR_BIT)
478#define NPY_BITSOF_TIMEDELTA (NPY_SIZEOF_TIMEDELTA * CHAR_BIT)
479
480#if NPY_BITSOF_LONG == 8
481#define NPY_INT8 NPY_LONG
482#define NPY_UINT8 NPY_ULONG
483        typedef long npy_int8;
484        typedef unsigned long npy_uint8;
485#define PyInt8ScalarObject PyLongScalarObject
486#define PyInt8ArrType_Type PyLongArrType_Type
487#define PyUInt8ScalarObject PyULongScalarObject
488#define PyUInt8ArrType_Type PyULongArrType_Type
489#define NPY_INT8_FMT NPY_LONG_FMT
490#define NPY_UINT8_FMT NPY_ULONG_FMT
491#elif NPY_BITSOF_LONG == 16
492#define NPY_INT16 NPY_LONG
493#define NPY_UINT16 NPY_ULONG
494        typedef long npy_int16;
495        typedef unsigned long npy_uint16;
496#define PyInt16ScalarObject PyLongScalarObject
497#define PyInt16ArrType_Type PyLongArrType_Type
498#define PyUInt16ScalarObject PyULongScalarObject
499#define PyUInt16ArrType_Type PyULongArrType_Type
500#define NPY_INT16_FMT NPY_LONG_FMT
501#define NPY_UINT16_FMT NPY_ULONG_FMT
502#elif NPY_BITSOF_LONG == 32
503#define NPY_INT32 NPY_LONG
504#define NPY_UINT32 NPY_ULONG
505        typedef long npy_int32;
506        typedef unsigned long npy_uint32;
507        typedef unsigned long npy_ucs4;
508#define PyInt32ScalarObject PyLongScalarObject
509#define PyInt32ArrType_Type PyLongArrType_Type
510#define PyUInt32ScalarObject PyULongScalarObject
511#define PyUInt32ArrType_Type PyULongArrType_Type
512#define NPY_INT32_FMT NPY_LONG_FMT
513#define NPY_UINT32_FMT NPY_ULONG_FMT
514#elif NPY_BITSOF_LONG == 64
515#define NPY_INT64 NPY_LONG
516#define NPY_UINT64 NPY_ULONG
517        typedef long npy_int64;
518        typedef unsigned long npy_uint64;
519#define PyInt64ScalarObject PyLongScalarObject
520#define PyInt64ArrType_Type PyLongArrType_Type
521#define PyUInt64ScalarObject PyULongScalarObject
522#define PyUInt64ArrType_Type PyULongArrType_Type
523#define NPY_INT64_FMT NPY_LONG_FMT
524#define NPY_UINT64_FMT NPY_ULONG_FMT
525#define MyPyLong_FromInt64 PyLong_FromLong
526#define MyPyLong_AsInt64 PyLong_AsLong
527#endif
528
529#if NPY_BITSOF_LONGLONG == 8
530#  ifndef NPY_INT8
531#    define NPY_INT8 NPY_LONGLONG
532#    define NPY_UINT8 NPY_ULONGLONG
533        typedef npy_longlong npy_int8;
534        typedef npy_ulonglong npy_uint8;
535#    define PyInt8ScalarObject PyLongLongScalarObject
536#    define PyInt8ArrType_Type PyLongLongArrType_Type
537#    define PyUInt8ScalarObject PyULongLongScalarObject
538#    define PyUInt8ArrType_Type PyULongLongArrType_Type
539#define NPY_INT8_FMT NPY_LONGLONG_FMT
540#define NPY_UINT8_FMT NPY_ULONGLONG_FMT
541#  endif
542#  define NPY_MAX_LONGLONG NPY_MAX_INT8
543#  define NPY_MIN_LONGLONG NPY_MIN_INT8
544#  define NPY_MAX_ULONGLONG NPY_MAX_UINT8
545#elif NPY_BITSOF_LONGLONG == 16
546#  ifndef NPY_INT16
547#    define NPY_INT16 NPY_LONGLONG
548#    define NPY_UINT16 NPY_ULONGLONG
549        typedef npy_longlong npy_int16;
550        typedef npy_ulonglong npy_uint16;
551#    define PyInt16ScalarObject PyLongLongScalarObject
552#    define PyInt16ArrType_Type PyLongLongArrType_Type
553#    define PyUInt16ScalarObject PyULongLongScalarObject
554#    define PyUInt16ArrType_Type PyULongLongArrType_Type
555#define NPY_INT16_FMT NPY_LONGLONG_FMT
556#define NPY_UINT16_FMT NPY_ULONGLONG_FMT
557#  endif
558#  define NPY_MAX_LONGLONG NPY_MAX_INT16
559#  define NPY_MIN_LONGLONG NPY_MIN_INT16
560#  define NPY_MAX_ULONGLONG NPY_MAX_UINT16
561#elif NPY_BITSOF_LONGLONG == 32
562#  ifndef NPY_INT32
563#    define NPY_INT32 NPY_LONGLONG
564#    define NPY_UINT32 NPY_ULONGLONG
565        typedef npy_longlong npy_int32;
566        typedef npy_ulonglong npy_uint32;
567        typedef npy_ulonglong npy_ucs4;
568#    define PyInt32ScalarObject PyLongLongScalarObject
569#    define PyInt32ArrType_Type PyLongLongArrType_Type
570#    define PyUInt32ScalarObject PyULongLongScalarObject
571#    define PyUInt32ArrType_Type PyULongLongArrType_Type
572#define NPY_INT32_FMT NPY_LONGLONG_FMT
573#define NPY_UINT32_FMT NPY_ULONGLONG_FMT
574#  endif
575#  define NPY_MAX_LONGLONG NPY_MAX_INT32
576#  define NPY_MIN_LONGLONG NPY_MIN_INT32
577#  define NPY_MAX_ULONGLONG NPY_MAX_UINT32
578#elif NPY_BITSOF_LONGLONG == 64
579#  ifndef NPY_INT64
580#    define NPY_INT64 NPY_LONGLONG
581#    define NPY_UINT64 NPY_ULONGLONG
582        typedef npy_longlong npy_int64;
583        typedef npy_ulonglong npy_uint64;
584#    define PyInt64ScalarObject PyLongLongScalarObject
585#    define PyInt64ArrType_Type PyLongLongArrType_Type
586#    define PyUInt64ScalarObject PyULongLongScalarObject
587#    define PyUInt64ArrType_Type PyULongLongArrType_Type
588#define NPY_INT64_FMT NPY_LONGLONG_FMT
589#define NPY_UINT64_FMT NPY_ULONGLONG_FMT
590#    define MyPyLong_FromInt64 PyLong_FromLongLong
591#    define MyPyLong_AsInt64 PyLong_AsLongLong
592#  endif
593#  define NPY_MAX_LONGLONG NPY_MAX_INT64
594#  define NPY_MIN_LONGLONG NPY_MIN_INT64
595#  define NPY_MAX_ULONGLONG NPY_MAX_UINT64
596#endif
597
598#if NPY_BITSOF_INT == 8
599#ifndef NPY_INT8
600#define NPY_INT8 NPY_INT
601#define NPY_UINT8 NPY_UINT
602        typedef int npy_int8;
603        typedef unsigned int npy_uint8;
604#    define PyInt8ScalarObject PyIntScalarObject
605#    define PyInt8ArrType_Type PyIntArrType_Type
606#    define PyUInt8ScalarObject PyUIntScalarObject
607#    define PyUInt8ArrType_Type PyUIntArrType_Type
608#define NPY_INT8_FMT NPY_INT_FMT
609#define NPY_UINT8_FMT NPY_UINT_FMT
610#endif
611#elif NPY_BITSOF_INT == 16
612#ifndef NPY_INT16
613#define NPY_INT16 NPY_INT
614#define NPY_UINT16 NPY_UINT
615        typedef int npy_int16;
616        typedef unsigned int npy_uint16;
617#    define PyInt16ScalarObject PyIntScalarObject
618#    define PyInt16ArrType_Type PyIntArrType_Type
619#    define PyUInt16ScalarObject PyIntUScalarObject
620#    define PyUInt16ArrType_Type PyIntUArrType_Type
621#define NPY_INT16_FMT NPY_INT_FMT
622#define NPY_UINT16_FMT NPY_UINT_FMT
623#endif
624#elif NPY_BITSOF_INT == 32
625#ifndef NPY_INT32
626#define NPY_INT32 NPY_INT
627#define NPY_UINT32 NPY_UINT
628        typedef int npy_int32;
629        typedef unsigned int npy_uint32;
630        typedef unsigned int npy_ucs4;
631#    define PyInt32ScalarObject PyIntScalarObject
632#    define PyInt32ArrType_Type PyIntArrType_Type
633#    define PyUInt32ScalarObject PyUIntScalarObject
634#    define PyUInt32ArrType_Type PyUIntArrType_Type
635#define NPY_INT32_FMT NPY_INT_FMT
636#define NPY_UINT32_FMT NPY_UINT_FMT
637#endif
638#elif NPY_BITSOF_INT == 64
639#ifndef NPY_INT64
640#define NPY_INT64 NPY_INT
641#define NPY_UINT64 NPY_UINT
642        typedef int npy_int64;
643        typedef unsigned int npy_uint64;
644#    define PyInt64ScalarObject PyIntScalarObject
645#    define PyInt64ArrType_Type PyIntArrType_Type
646#    define PyUInt64ScalarObject PyUIntScalarObject
647#    define PyUInt64ArrType_Type PyUIntArrType_Type
648#define NPY_INT64_FMT NPY_INT_FMT
649#define NPY_UINT64_FMT NPY_UINT_FMT
650#    define MyPyLong_FromInt64 PyLong_FromLong
651#    define MyPyLong_AsInt64 PyLong_AsLong
652#endif
653#endif
654
655#if NPY_BITSOF_SHORT == 8
656#ifndef NPY_INT8
657#define NPY_INT8 NPY_SHORT
658#define NPY_UINT8 NPY_USHORT
659        typedef short npy_int8;
660        typedef unsigned short npy_uint8;
661#    define PyInt8ScalarObject PyShortScalarObject
662#    define PyInt8ArrType_Type PyShortArrType_Type
663#    define PyUInt8ScalarObject PyUShortScalarObject
664#    define PyUInt8ArrType_Type PyUShortArrType_Type
665#define NPY_INT8_FMT NPY_SHORT_FMT
666#define NPY_UINT8_FMT NPY_USHORT_FMT
667#endif
668#elif NPY_BITSOF_SHORT == 16
669#ifndef NPY_INT16
670#define NPY_INT16 NPY_SHORT
671#define NPY_UINT16 NPY_USHORT
672        typedef short npy_int16;
673        typedef unsigned short npy_uint16;
674#    define PyInt16ScalarObject PyShortScalarObject
675#    define PyInt16ArrType_Type PyShortArrType_Type
676#    define PyUInt16ScalarObject PyUShortScalarObject
677#    define PyUInt16ArrType_Type PyUShortArrType_Type
678#define NPY_INT16_FMT NPY_SHORT_FMT
679#define NPY_UINT16_FMT NPY_USHORT_FMT
680#endif
681#elif NPY_BITSOF_SHORT == 32
682#ifndef NPY_INT32
683#define NPY_INT32 NPY_SHORT
684#define NPY_UINT32 NPY_USHORT
685        typedef short npy_int32;
686        typedef unsigned short npy_uint32;
687        typedef unsigned short npy_ucs4;
688#    define PyInt32ScalarObject PyShortScalarObject
689#    define PyInt32ArrType_Type PyShortArrType_Type
690#    define PyUInt32ScalarObject PyUShortScalarObject
691#    define PyUInt32ArrType_Type PyUShortArrType_Type
692#define NPY_INT32_FMT NPY_SHORT_FMT
693#define NPY_UINT32_FMT NPY_USHORT_FMT
694#endif
695#elif NPY_BITSOF_SHORT == 64
696#ifndef NPY_INT64
697#define NPY_INT64 NPY_SHORT
698#define NPY_UINT64 NPY_USHORT
699        typedef short npy_int64;
700        typedef unsigned short npy_uint64;
701#    define PyInt64ScalarObject PyShortScalarObject
702#    define PyInt64ArrType_Type PyShortArrType_Type
703#    define PyUInt64ScalarObject PyUShortScalarObject
704#    define PyUInt64ArrType_Type PyUShortArrType_Type
705#define NPY_INT64_FMT NPY_SHORT_FMT
706#define NPY_UINT64_FMT NPY_USHORT_FMT
707#    define MyPyLong_FromInt64 PyLong_FromLong
708#    define MyPyLong_AsInt64 PyLong_AsLong
709#endif
710#endif
711
712
713#if NPY_BITSOF_CHAR == 8
714#ifndef NPY_INT8
715#define NPY_INT8 NPY_BYTE
716#define NPY_UINT8 NPY_UBYTE
717        typedef signed char npy_int8;
718        typedef unsigned char npy_uint8;
719#    define PyInt8ScalarObject PyByteScalarObject
720#    define PyInt8ArrType_Type PyByteArrType_Type
721#    define PyUInt8ScalarObject PyUByteScalarObject
722#    define PyUInt8ArrType_Type PyUByteArrType_Type
723#define NPY_INT8_FMT NPY_BYTE_FMT
724#define NPY_UINT8_FMT NPY_UBYTE_FMT
725#endif
726#elif NPY_BITSOF_CHAR == 16
727#ifndef NPY_INT16
728#define NPY_INT16 NPY_BYTE
729#define NPY_UINT16 NPY_UBYTE
730        typedef signed char npy_int16;
731        typedef unsigned char npy_uint16;
732#    define PyInt16ScalarObject PyByteScalarObject
733#    define PyInt16ArrType_Type PyByteArrType_Type
734#    define PyUInt16ScalarObject PyUByteScalarObject
735#    define PyUInt16ArrType_Type PyUByteArrType_Type
736#define NPY_INT16_FMT NPY_BYTE_FMT
737#define NPY_UINT16_FMT NPY_UBYTE_FMT
738#endif
739#elif NPY_BITSOF_CHAR == 32
740#ifndef NPY_INT32
741#define NPY_INT32 NPY_BYTE
742#define NPY_UINT32 NPY_UBYTE
743        typedef signed char npy_int32;
744        typedef unsigned char npy_uint32;
745        typedef unsigned char npy_ucs4;
746#    define PyInt32ScalarObject PyByteScalarObject
747#    define PyInt32ArrType_Type PyByteArrType_Type
748#    define PyUInt32ScalarObject PyUByteScalarObject
749#    define PyUInt32ArrType_Type PyUByteArrType_Type
750#define NPY_INT32_FMT NPY_BYTE_FMT
751#define NPY_UINT32_FMT NPY_UBYTE_FMT
752#endif
753#elif NPY_BITSOF_CHAR == 64
754#ifndef NPY_INT64
755#define NPY_INT64 NPY_BYTE
756#define NPY_UINT64 NPY_UBYTE
757        typedef signed char npy_int64;
758        typedef unsigned char npy_uint64;
759#    define PyInt64ScalarObject PyByteScalarObject
760#    define PyInt64ArrType_Type PyByteArrType_Type
761#    define PyUInt64ScalarObject PyUByteScalarObject
762#    define PyUInt64ArrType_Type PyUByteArrType_Type
763#define NPY_INT64_FMT NPY_BYTE_FMT
764#define NPY_UINT64_FMT NPY_UBYTE_FMT
765#    define MyPyLong_FromInt64 PyLong_FromLong
766#    define MyPyLong_AsInt64 PyLong_AsLong
767#endif
768#elif NPY_BITSOF_CHAR == 128
769#endif
770
771
772
773#if NPY_BITSOF_DOUBLE == 32
774#ifndef NPY_FLOAT32
775#define NPY_FLOAT32 NPY_DOUBLE
776#define NPY_COMPLEX64 NPY_CDOUBLE
777        typedef double npy_float32;
778        typedef npy_cdouble npy_complex64;
779#    define PyFloat32ScalarObject PyDoubleScalarObject
780#    define PyComplex64ScalarObject PyCDoubleScalarObject
781#    define PyFloat32ArrType_Type PyDoubleArrType_Type
782#    define PyComplex64ArrType_Type PyCDoubleArrType_Type
783#define NPY_FLOAT32_FMT NPY_DOUBLE_FMT
784#define NPY_COMPLEX64_FMT NPY_CDOUBLE_FMT
785#endif
786#elif NPY_BITSOF_DOUBLE == 64
787#ifndef NPY_FLOAT64
788#define NPY_FLOAT64 NPY_DOUBLE
789#define NPY_COMPLEX128 NPY_CDOUBLE
790        typedef double npy_float64;
791        typedef npy_cdouble npy_complex128;
792#    define PyFloat64ScalarObject PyDoubleScalarObject
793#    define PyComplex128ScalarObject PyCDoubleScalarObject
794#    define PyFloat64ArrType_Type PyDoubleArrType_Type
795#    define PyComplex128ArrType_Type PyCDoubleArrType_Type
796#define NPY_FLOAT64_FMT NPY_DOUBLE_FMT
797#define NPY_COMPLEX128_FMT NPY_CDOUBLE_FMT
798#endif
799#elif NPY_BITSOF_DOUBLE == 80
800#ifndef NPY_FLOAT80
801#define NPY_FLOAT80 NPY_DOUBLE
802#define NPY_COMPLEX160 NPY_CDOUBLE
803        typedef double npy_float80;
804        typedef npy_cdouble npy_complex160;
805#    define PyFloat80ScalarObject PyDoubleScalarObject
806#    define PyComplex160ScalarObject PyCDoubleScalarObject
807#    define PyFloat80ArrType_Type PyDoubleArrType_Type
808#    define PyComplex160ArrType_Type PyCDoubleArrType_Type
809#define NPY_FLOAT80_FMT NPY_DOUBLE_FMT
810#define NPY_COMPLEX160_FMT NPY_CDOUBLE_FMT
811#endif
812#elif NPY_BITSOF_DOUBLE == 96
813#ifndef NPY_FLOAT96
814#define NPY_FLOAT96 NPY_DOUBLE
815#define NPY_COMPLEX192 NPY_CDOUBLE
816        typedef double npy_float96;
817        typedef npy_cdouble npy_complex192;
818#    define PyFloat96ScalarObject PyDoubleScalarObject
819#    define PyComplex192ScalarObject PyCDoubleScalarObject
820#    define PyFloat96ArrType_Type PyDoubleArrType_Type
821#    define PyComplex192ArrType_Type PyCDoubleArrType_Type
822#define NPY_FLOAT96_FMT NPY_DOUBLE_FMT
823#define NPY_COMPLEX192_FMT NPY_CDOUBLE_FMT
824#endif
825#elif NPY_BITSOF_DOUBLE == 128
826#ifndef NPY_FLOAT128
827#define NPY_FLOAT128 NPY_DOUBLE
828#define NPY_COMPLEX256 NPY_CDOUBLE
829        typedef double npy_float128;
830        typedef npy_cdouble npy_complex256;
831#    define PyFloat128ScalarObject PyDoubleScalarObject
832#    define PyComplex256ScalarObject PyCDoubleScalarObject
833#    define PyFloat128ArrType_Type PyDoubleArrType_Type
834#    define PyComplex256ArrType_Type PyCDoubleArrType_Type
835#define NPY_FLOAT128_FMT NPY_DOUBLE_FMT
836#define NPY_COMPLEX256_FMT NPY_CDOUBLE_FMT
837#endif
838#endif
839
840
841
842#if NPY_BITSOF_FLOAT == 32
843#ifndef NPY_FLOAT32
844#define NPY_FLOAT32 NPY_FLOAT
845#define NPY_COMPLEX64 NPY_CFLOAT
846        typedef float npy_float32;
847        typedef npy_cfloat npy_complex64;
848#    define PyFloat32ScalarObject PyFloatScalarObject
849#    define PyComplex64ScalarObject PyCFloatScalarObject
850#    define PyFloat32ArrType_Type PyFloatArrType_Type
851#    define PyComplex64ArrType_Type PyCFloatArrType_Type
852#define NPY_FLOAT32_FMT NPY_FLOAT_FMT
853#define NPY_COMPLEX64_FMT NPY_CFLOAT_FMT
854#endif
855#elif NPY_BITSOF_FLOAT == 64
856#ifndef NPY_FLOAT64
857#define NPY_FLOAT64 NPY_FLOAT
858#define NPY_COMPLEX128 NPY_CFLOAT
859        typedef float npy_float64;
860        typedef npy_cfloat npy_complex128;
861#    define PyFloat64ScalarObject PyFloatScalarObject
862#    define PyComplex128ScalarObject PyCFloatScalarObject
863#    define PyFloat64ArrType_Type PyFloatArrType_Type
864#    define PyComplex128ArrType_Type PyCFloatArrType_Type
865#define NPY_FLOAT64_FMT NPY_FLOAT_FMT
866#define NPY_COMPLEX128_FMT NPY_CFLOAT_FMT
867#endif
868#elif NPY_BITSOF_FLOAT == 80
869#ifndef NPY_FLOAT80
870#define NPY_FLOAT80 NPY_FLOAT
871#define NPY_COMPLEX160 NPY_CFLOAT
872        typedef float npy_float80;
873        typedef npy_cfloat npy_complex160;
874#    define PyFloat80ScalarObject PyFloatScalarObject
875#    define PyComplex160ScalarObject PyCFloatScalarObject
876#    define PyFloat80ArrType_Type PyFloatArrType_Type
877#    define PyComplex160ArrType_Type PyCFloatArrType_Type
878#define NPY_FLOAT80_FMT NPY_FLOAT_FMT
879#define NPY_COMPLEX160_FMT NPY_CFLOAT_FMT
880#endif
881#elif NPY_BITSOF_FLOAT == 96
882#ifndef NPY_FLOAT96
883#define NPY_FLOAT96 NPY_FLOAT
884#define NPY_COMPLEX192 NPY_CFLOAT
885        typedef float npy_float96;
886        typedef npy_cfloat npy_complex192;
887#    define PyFloat96ScalarObject PyFloatScalarObject
888#    define PyComplex192ScalarObject PyCFloatScalarObject
889#    define PyFloat96ArrType_Type PyFloatArrType_Type
890#    define PyComplex192ArrType_Type PyCFloatArrType_Type
891#define NPY_FLOAT96_FMT NPY_FLOAT_FMT
892#define NPY_COMPLEX192_FMT NPY_CFLOAT_FMT
893#endif
894#elif NPY_BITSOF_FLOAT == 128
895#ifndef NPY_FLOAT128
896#define NPY_FLOAT128 NPY_FLOAT
897#define NPY_COMPLEX256 NPY_CFLOAT
898        typedef float npy_float128;
899        typedef npy_cfloat npy_complex256;
900#    define PyFloat128ScalarObject PyFloatScalarObject
901#    define PyComplex256ScalarObject PyCFloatScalarObject
902#    define PyFloat128ArrType_Type PyFloatArrType_Type
903#    define PyComplex256ArrType_Type PyCFloatArrType_Type
904#define NPY_FLOAT128_FMT NPY_FLOAT_FMT
905#define NPY_COMPLEX256_FMT NPY_CFLOAT_FMT
906#endif
907#endif
908
909/* half/float16 isn't a floating-point type in C */
910#define NPY_FLOAT16 NPY_HALF
911typedef npy_uint16 npy_half;
912typedef npy_half npy_float16;
913
914#if NPY_BITSOF_LONGDOUBLE == 32
915#ifndef NPY_FLOAT32
916#define NPY_FLOAT32 NPY_LONGDOUBLE
917#define NPY_COMPLEX64 NPY_CLONGDOUBLE
918        typedef npy_longdouble npy_float32;
919        typedef npy_clongdouble npy_complex64;
920#    define PyFloat32ScalarObject PyLongDoubleScalarObject
921#    define PyComplex64ScalarObject PyCLongDoubleScalarObject
922#    define PyFloat32ArrType_Type PyLongDoubleArrType_Type
923#    define PyComplex64ArrType_Type PyCLongDoubleArrType_Type
924#define NPY_FLOAT32_FMT NPY_LONGDOUBLE_FMT
925#define NPY_COMPLEX64_FMT NPY_CLONGDOUBLE_FMT
926#endif
927#elif NPY_BITSOF_LONGDOUBLE == 64
928#ifndef NPY_FLOAT64
929#define NPY_FLOAT64 NPY_LONGDOUBLE
930#define NPY_COMPLEX128 NPY_CLONGDOUBLE
931        typedef npy_longdouble npy_float64;
932        typedef npy_clongdouble npy_complex128;
933#    define PyFloat64ScalarObject PyLongDoubleScalarObject
934#    define PyComplex128ScalarObject PyCLongDoubleScalarObject
935#    define PyFloat64ArrType_Type PyLongDoubleArrType_Type
936#    define PyComplex128ArrType_Type PyCLongDoubleArrType_Type
937#define NPY_FLOAT64_FMT NPY_LONGDOUBLE_FMT
938#define NPY_COMPLEX128_FMT NPY_CLONGDOUBLE_FMT
939#endif
940#elif NPY_BITSOF_LONGDOUBLE == 80
941#ifndef NPY_FLOAT80
942#define NPY_FLOAT80 NPY_LONGDOUBLE
943#define NPY_COMPLEX160 NPY_CLONGDOUBLE
944        typedef npy_longdouble npy_float80;
945        typedef npy_clongdouble npy_complex160;
946#    define PyFloat80ScalarObject PyLongDoubleScalarObject
947#    define PyComplex160ScalarObject PyCLongDoubleScalarObject
948#    define PyFloat80ArrType_Type PyLongDoubleArrType_Type
949#    define PyComplex160ArrType_Type PyCLongDoubleArrType_Type
950#define NPY_FLOAT80_FMT NPY_LONGDOUBLE_FMT
951#define NPY_COMPLEX160_FMT NPY_CLONGDOUBLE_FMT
952#endif
953#elif NPY_BITSOF_LONGDOUBLE == 96
954#ifndef NPY_FLOAT96
955#define NPY_FLOAT96 NPY_LONGDOUBLE
956#define NPY_COMPLEX192 NPY_CLONGDOUBLE
957        typedef npy_longdouble npy_float96;
958        typedef npy_clongdouble npy_complex192;
959#    define PyFloat96ScalarObject PyLongDoubleScalarObject
960#    define PyComplex192ScalarObject PyCLongDoubleScalarObject
961#    define PyFloat96ArrType_Type PyLongDoubleArrType_Type
962#    define PyComplex192ArrType_Type PyCLongDoubleArrType_Type
963#define NPY_FLOAT96_FMT NPY_LONGDOUBLE_FMT
964#define NPY_COMPLEX192_FMT NPY_CLONGDOUBLE_FMT
965#endif
966#elif NPY_BITSOF_LONGDOUBLE == 128
967#ifndef NPY_FLOAT128
968#define NPY_FLOAT128 NPY_LONGDOUBLE
969#define NPY_COMPLEX256 NPY_CLONGDOUBLE
970        typedef npy_longdouble npy_float128;
971        typedef npy_clongdouble npy_complex256;
972#    define PyFloat128ScalarObject PyLongDoubleScalarObject
973#    define PyComplex256ScalarObject PyCLongDoubleScalarObject
974#    define PyFloat128ArrType_Type PyLongDoubleArrType_Type
975#    define PyComplex256ArrType_Type PyCLongDoubleArrType_Type
976#define NPY_FLOAT128_FMT NPY_LONGDOUBLE_FMT
977#define NPY_COMPLEX256_FMT NPY_CLONGDOUBLE_FMT
978#endif
979#endif
980
981/* datetime typedefs */
982typedef npy_int64 npy_timedelta;
983typedef npy_int64 npy_datetime;
984#define NPY_DATETIME_FMT NPY_INT64_FMT
985#define NPY_TIMEDELTA_FMT NPY_INT64_FMT
986
987/* End of typedefs for numarray style bit-width names */
988
989#endif  /* NUMPY_CORE_INCLUDE_NUMPY_NPY_COMMON_H_ */
990 
codekingpro/portable-devtools · Team Ai