|
numpy
2.0.0
|
#include <Python.h>#include <structmember.h>#include <numpy/arrayobject.h>#include <numpy/ufuncobject.h>#include <numpy/npy_3kcompat.h>#include <math.h>Data Structures | |
| struct | rational |
| struct | PyRational |
| struct | align_test |
Defines | |
| #define | NPY_NO_DEPRECATED_API NPY_API_VERSION |
| #define | AS_RATIONAL(dst, object) |
| #define | OP(py, op) case py: result = rational_##op(x,y); break; |
| #define | RATIONAL_BINOP_2(name, exp) |
| #define | RATIONAL_BINOP(name) RATIONAL_BINOP_2(name,rational_##name(x,y)) |
| #define | RATIONAL_UNOP(name, type, exp, convert) |
| #define | FIND_EXTREME(name, op) |
| #define | DEFINE_CAST(From, To, statement) |
| #define | DEFINE_INT_CAST(bits) |
| #define | BINARY_UFUNC(name, intype0, intype1, outtype, exp) |
| #define | RATIONAL_BINARY_UFUNC(name, type, exp) BINARY_UFUNC(rational_ufunc_##name,rational,rational,type,exp) |
| #define | UNARY_UFUNC(name, type, exp) |
| #define | RETVAL |
| #define | REGISTER_CAST(From, To, from_descr, to_typenum, safe) |
| #define | REGISTER_INT_CASTS(bits) |
| #define | REGISTER_UFUNC(name,...) |
| #define | REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name, {npy_rational, npy_rational, npy_rational}) |
| #define | REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name, {npy_rational, npy_rational, NPY_BOOL}) |
| #define | REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name, {npy_rational, npy_rational}) |
| #define | NEW_UNARY_UFUNC(name, type, doc) |
| #define | GCD_LCM_UFUNC(name, type, doc) |
Functions | |
| static void | set_overflow (void) |
| static void | set_zero_divide (void) |
| static NPY_INLINE npy_int32 | safe_neg (npy_int32 x) |
| static NPY_INLINE npy_int32 | safe_abs32 (npy_int32 x) |
| static NPY_INLINE npy_int64 | safe_abs64 (npy_int64 x) |
| static NPY_INLINE npy_int64 | gcd (npy_int64 x, npy_int64 y) |
| static NPY_INLINE npy_int64 | lcm (npy_int64 x, npy_int64 y) |
| static NPY_INLINE rational | make_rational_int (npy_int64 n) |
| static rational | make_rational_slow (npy_int64 n_, npy_int64 d_) |
| static NPY_INLINE npy_int32 | d (rational r) |
| static rational | make_rational_fast (npy_int64 n_, npy_int64 d_) |
| static NPY_INLINE rational | rational_negative (rational r) |
| static NPY_INLINE rational | rational_add (rational x, rational y) |
| static NPY_INLINE rational | rational_subtract (rational x, rational y) |
| static NPY_INLINE rational | rational_multiply (rational x, rational y) |
| static NPY_INLINE rational | rational_divide (rational x, rational y) |
| static NPY_INLINE npy_int64 | rational_floor (rational x) |
| static NPY_INLINE npy_int64 | rational_ceil (rational x) |
| static NPY_INLINE rational | rational_remainder (rational x, rational y) |
| static NPY_INLINE rational | rational_abs (rational x) |
| static NPY_INLINE npy_int64 | rational_rint (rational x) |
| static NPY_INLINE int | rational_sign (rational x) |
| static NPY_INLINE rational | rational_inverse (rational x) |
| static NPY_INLINE int | rational_eq (rational x, rational y) |
| static NPY_INLINE int | rational_ne (rational x, rational y) |
| static NPY_INLINE int | rational_lt (rational x, rational y) |
| static NPY_INLINE int | rational_gt (rational x, rational y) |
| static NPY_INLINE int | rational_le (rational x, rational y) |
| static NPY_INLINE int | rational_ge (rational x, rational y) |
| static NPY_INLINE npy_int32 | rational_int (rational x) |
| static NPY_INLINE double | rational_double (rational x) |
| static NPY_INLINE int | rational_nonzero (rational x) |
| static int | scan_rational (const char **s, rational *x) |
| static NPY_INLINE int | PyRational_Check (PyObject *object) |
| static PyObject * | PyRational_FromRational (rational x) |
| static PyObject * | pyrational_new (PyTypeObject *type, PyObject *args, PyObject *kwds) |
| static PyObject * | pyrational_richcompare (PyObject *a, PyObject *b, int op) |
| static PyObject * | pyrational_repr (PyObject *self) |
| static PyObject * | pyrational_str (PyObject *self) |
| static npy_hash_t | pyrational_hash (PyObject *self) |
| RATIONAL_BINOP_2 (floor_divide, make_rational_int(rational_floor(rational_divide(x, y)))) static PyObject *pyrational_positive(PyObject *self) | |
| static int | pyrational_nonzero (PyObject *self) |
| static PyObject * | pyrational_n (PyObject *self, void *closure) |
| static PyObject * | pyrational_d (PyObject *self, void *closure) |
| static PyObject * | npyrational_getitem (void *data, void *arr) |
| static int | npyrational_setitem (PyObject *item, void *data, void *arr) |
| static NPY_INLINE void | byteswap (npy_int32 *x) |
| static void | npyrational_copyswapn (void *dst_, npy_intp dstride, void *src_, npy_intp sstride, npy_intp n, int swap, void *arr) |
| static void | npyrational_copyswap (void *dst, void *src, int swap, void *arr) |
| static int | npyrational_compare (const void *d0, const void *d1, void *arr) |
| static void | npyrational_dot (void *ip0_, npy_intp is0, void *ip1_, npy_intp is1, void *op, npy_intp n, void *arr) |
| static npy_bool | npyrational_nonzero (void *data, void *arr) |
| static int | npyrational_fill (void *data_, npy_intp length, void *arr) |
| static int | npyrational_fillwithscalar (void *buffer_, npy_intp length, void *value, void *arr) |
| RATIONAL_BINARY_UFUNC (floor_divide, rational, make_rational_int(rational_floor(rational_divide(x, y)))) PyUFuncGenericFunction rational_ufunc_true_divide | |
| UNARY_UFUNC (floor, rational, make_rational_int(rational_floor(x))) UNARY_UFUNC(ceil | |
| make_rational_int (rational_ceil(x))) UNARY_UFUNC(trunc | |
| make_rational_int (x.n/d(x))) UNARY_UFUNC(rint | |
| make_rational_int (rational_rint(x))) UNARY_UFUNC(sign | |
| make_rational_int (rational_sign(x))) static NPY_INLINE void rational_matrix_multiply(char **args | |
| PyMODINIT_FUNC | inittest_rational (void) |
Variables | |
| static PyTypeObject | PyRational_Type |
| static PyNumberMethods | pyrational_as_number |
| static PyGetSetDef | pyrational_getset [] |
| static PyArray_ArrFuncs | npyrational_arrfuncs |
| PyArray_Descr | npyrational_descr |
| rational | |
| npy_intp * | dimensions |
| #define AS_RATIONAL | ( | dst, | |
| object | |||
| ) |
| #define BINARY_UFUNC | ( | name, | |
| intype0, | |||
| intype1, | |||
| outtype, | |||
| exp | |||
| ) |
void name(char** args, npy_intp* dimensions, \ npy_intp* steps, void* data) { \ npy_intp is0 = steps[0], is1 = steps[1], \ os = steps[2], n = *dimensions; \ char *i0 = args[0], *i1 = args[1], *o = args[2]; \ int k; \ for (k = 0; k < n; k++) { \ intype0 x = *(intype0*)i0; \ intype1 y = *(intype1*)i1; \ *(outtype*)o = exp; \ i0 += is0; i1 += is1; o += os; \ } \ }
| #define DEFINE_CAST | ( | From, | |
| To, | |||
| statement | |||
| ) |
| #define DEFINE_INT_CAST | ( | bits | ) |
DEFINE_CAST(npy_int##bits,rational,rational y = make_rational_int(x);) \ DEFINE_CAST(rational,npy_int##bits,npy_int32 z = rational_int(x); \ npy_int##bits y = z; if (y != z) set_overflow();)
| #define FIND_EXTREME | ( | name, | |
| op | |||
| ) |
static int \ npyrational_##name(void* data_, npy_intp n, \ npy_intp* max_ind, void* arr) { \ const rational* data; \ npy_intp best_i; \ rational best_r; \ npy_intp i; \ if (!n) { \ return 0; \ } \ data = (rational*)data_; \ best_i = 0; \ best_r = data[0]; \ for (i = 1; i < n; i++) { \ if (rational_##op(data[i],best_r)) { \ best_i = i; \ best_r = data[i]; \ } \ } \ *max_ind = best_i; \ return 0; \ }
| #define GCD_LCM_UFUNC | ( | name, | |
| type, | |||
| doc | |||
| ) |
{ \
static const PyUFuncGenericFunction func[1] = {name##_ufunc}; \
static const char types[3] = {type,type,type}; \
static void* data[1] = {0}; \
PyObject* ufunc = PyUFunc_FromFuncAndData( \
(PyUFuncGenericFunction*)func, data,(char*)types, \
1,2,1,PyUFunc_One,(char*)#name,(char*)doc,0); \
if (!ufunc) { \
goto fail; \
} \
PyModule_AddObject(m,#name,(PyObject*)ufunc); \
}
| #define NEW_UNARY_UFUNC | ( | name, | |
| type, | |||
| doc | |||
| ) |
{ \
int types[2] = {npy_rational,type}; \
PyObject* ufunc = PyUFunc_FromFuncAndData(0,0,0,0,1,1, \
PyUFunc_None,(char*)#name,(char*)doc,0); \
if (!ufunc) { \
goto fail; \
} \
if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc, \
npy_rational,rational_ufunc_##name,types,0)<0) { \
goto fail; \
} \
PyModule_AddObject(m,#name,(PyObject*)ufunc); \
}
| #define NPY_NO_DEPRECATED_API NPY_API_VERSION |
| #define OP | ( | py, | |
| op | |||
| ) | case py: result = rational_##op(x,y); break; |
| #define RATIONAL_BINARY_UFUNC | ( | name, | |
| type, | |||
| exp | |||
| ) | BINARY_UFUNC(rational_ufunc_##name,rational,rational,type,exp) |
| #define RATIONAL_BINOP | ( | name | ) | RATIONAL_BINOP_2(name,rational_##name(x,y)) |
| #define RATIONAL_BINOP_2 | ( | name, | |
| exp | |||
| ) |
static PyObject* \ pyrational_##name(PyObject* a, PyObject* b) { \ rational x, y, z; \ AS_RATIONAL(x,a); \ AS_RATIONAL(y,b); \ z = exp; \ if (PyErr_Occurred()) { \ return 0; \ } \ return PyRational_FromRational(z); \ }
| #define RATIONAL_UNOP | ( | name, | |
| type, | |||
| exp, | |||
| convert | |||
| ) |
static PyObject* \ pyrational_##name(PyObject* self) { \ rational x = ((PyRational*)self)->r; \ type y = exp; \ if (PyErr_Occurred()) { \ return 0; \ } \ return convert(y); \ }
Referenced by pyrational_repr().
| #define REGISTER_CAST | ( | From, | |
| To, | |||
| from_descr, | |||
| to_typenum, | |||
| safe | |||
| ) |
{ \
PyArray_Descr* from_descr_##From##_##To = (from_descr); \
if (PyArray_RegisterCastFunc(from_descr_##From##_##To, \
(to_typenum), \
npycast_##From##_##To) < 0) { \
goto fail; \
} \
if (safe && PyArray_RegisterCanCast(from_descr_##From##_##To, \
(to_typenum), \
NPY_NOSCALAR) < 0) { \
goto fail; \
} \
}
| #define REGISTER_INT_CASTS | ( | bits | ) |
REGISTER_CAST(npy_int##bits, rational, \ PyArray_DescrFromType(NPY_INT##bits), npy_rational, 1) \ REGISTER_CAST(rational, npy_int##bits, &npyrational_descr, \ NPY_INT##bits, 0)
Referenced by npyrational_fill().
| #define REGISTER_UFUNC | ( | name, | |
| ... | |||
| ) |
{ \
PyUFuncObject* ufunc = \
(PyUFuncObject*)PyObject_GetAttrString(numpy, #name); \
int _types[] = __VA_ARGS__; \
if (!ufunc) { \
goto fail; \
} \
if (sizeof(_types)/sizeof(int)!=ufunc->nargs) { \
PyErr_Format(PyExc_AssertionError, \
"ufunc %s takes %d arguments, our loop takes %lu", \
#name, ufunc->nargs, (unsigned long) \
(sizeof(_types)/sizeof(int))); \
Py_DECREF(ufunc); \
goto fail; \
} \
if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc, npy_rational, \
rational_ufunc_##name, _types, 0) < 0) { \
Py_DECREF(ufunc); \
goto fail; \
} \
Py_DECREF(ufunc); \
}
| #define REGISTER_UFUNC_BINARY_COMPARE | ( | name | ) | REGISTER_UFUNC(name, {npy_rational, npy_rational, NPY_BOOL}) |
| #define REGISTER_UFUNC_BINARY_RATIONAL | ( | name | ) | REGISTER_UFUNC(name, {npy_rational, npy_rational, npy_rational}) |
| #define REGISTER_UFUNC_UNARY | ( | name | ) | REGISTER_UFUNC(name, {npy_rational, npy_rational}) |
| #define RETVAL |
| #define UNARY_UFUNC | ( | name, | |
| type, | |||
| exp | |||
| ) |
void rational_ufunc_##name(char** args, npy_intp* dimensions, \ npy_intp* steps, void* data) { \ npy_intp is = steps[0], os = steps[1], n = *dimensions; \ char *i = args[0], *o = args[1]; \ int k; \ for (k = 0; k < n; k++) { \ rational x = *(rational*)i; \ *(type*)o = exp; \ i += is; o += os; \ } \ }
| static NPY_INLINE void byteswap | ( | npy_int32 * | x | ) | [static] |
References dimensions, and rational_add().
| static NPY_INLINE npy_int32 d | ( | rational | r | ) | [static] |
Referenced by _npy_signbit_d(), make_rational_int(), npy_double_to_half(), PyArray_NewLikeArray(), and rational_negative().
| static NPY_INLINE npy_int64 gcd | ( | npy_int64 | x, |
| npy_int64 | y | ||
| ) | [static] |
References lcm(), safe_abs64(), and set_overflow().
| PyMODINIT_FUNC inittest_rational | ( | void | ) |
| static NPY_INLINE npy_int64 lcm | ( | npy_int64 | x, |
| npy_int64 | y | ||
| ) | [static] |
Referenced by gcd().
| static rational make_rational_fast | ( | npy_int64 | n_, |
| npy_int64 | d_ | ||
| ) | [static] |
| static NPY_INLINE rational make_rational_int | ( | npy_int64 | n | ) | [static] |
References d(), rational::n, and safe_neg().
Referenced by rational_ne(), and rational_subtract().
| make_rational_int | ( | rational_ceil(x) | ) |
| make_rational_int | ( | x.n/ | dx | ) |
| make_rational_int | ( | rational_rint(x) | ) |
| make_rational_int | ( | rational_sign(x) | ) |
| static rational make_rational_slow | ( | npy_int64 | n_, |
| npy_int64 | d_ | ||
| ) | [static] |
References rational::dmm.
| static int npyrational_compare | ( | const void * | d0, |
| const void * | d1, | ||
| void * | arr | ||
| ) | [static] |
| static void npyrational_copyswap | ( | void * | dst, |
| void * | src, | ||
| int | swap, | ||
| void * | arr | ||
| ) | [static] |
| static void npyrational_copyswapn | ( | void * | dst_, |
| npy_intp | dstride, | ||
| void * | src_, | ||
| npy_intp | sstride, | ||
| npy_intp | n, | ||
| int | swap, | ||
| void * | arr | ||
| ) | [static] |
| static void npyrational_dot | ( | void * | ip0_, |
| npy_intp | is0, | ||
| void * | ip1_, | ||
| npy_intp | is1, | ||
| void * | op, | ||
| npy_intp | n, | ||
| void * | arr | ||
| ) | [static] |
| static int npyrational_fill | ( | void * | data_, |
| npy_intp | length, | ||
| void * | arr | ||
| ) | [static] |
References REGISTER_INT_CASTS.
| static int npyrational_fillwithscalar | ( | void * | buffer_, |
| npy_intp | length, | ||
| void * | value, | ||
| void * | arr | ||
| ) | [static] |
| static PyObject* npyrational_getitem | ( | void * | data, |
| void * | arr | ||
| ) | [static] |
| static npy_bool npyrational_nonzero | ( | void * | data, |
| void * | arr | ||
| ) | [static] |
| static int npyrational_setitem | ( | PyObject * | item, |
| void * | data, | ||
| void * | arr | ||
| ) | [static] |
| static NPY_INLINE int PyRational_Check | ( | PyObject * | object | ) | [static] |
| static PyObject* pyrational_d | ( | PyObject * | self, |
| void * | closure | ||
| ) | [static] |
| static PyObject* PyRational_FromRational | ( | rational | x | ) | [static] |
| static npy_hash_t pyrational_hash | ( | PyObject * | self | ) | [static] |
| static PyObject* pyrational_n | ( | PyObject * | self, |
| void * | closure | ||
| ) | [static] |
| static PyObject* pyrational_new | ( | PyTypeObject * | type, |
| PyObject * | args, | ||
| PyObject * | kwds | ||
| ) | [static] |
| static int pyrational_nonzero | ( | PyObject * | self | ) | [static] |
References rational::n.
| static PyObject* pyrational_repr | ( | PyObject * | self | ) | [static] |
References RATIONAL_UNOP.
| static PyObject* pyrational_richcompare | ( | PyObject * | a, |
| PyObject * | b, | ||
| int | op | ||
| ) | [static] |
| static PyObject* pyrational_str | ( | PyObject * | self | ) | [static] |
| static NPY_INLINE rational rational_abs | ( | rational | x | ) | [static] |
| static NPY_INLINE rational rational_add | ( | rational | x, |
| rational | y | ||
| ) | [static] |
Referenced by byteswap().
| RATIONAL_BINARY_UFUNC | ( | floor_divide | , |
| rational | , | ||
| make_rational_int(rational_floor(rational_divide(x, y))) | |||
| ) |
| RATIONAL_BINOP_2 | ( | floor_divide | , |
| make_rational_int(rational_floor(rational_divide(x, y))) | |||
| ) |
| static NPY_INLINE npy_int64 rational_ceil | ( | rational | x | ) | [static] |
| static NPY_INLINE rational rational_divide | ( | rational | x, |
| rational | y | ||
| ) | [static] |
Referenced by rational_subtract().
| static NPY_INLINE double rational_double | ( | rational | x | ) | [static] |
References PyRational::r.
| static NPY_INLINE int rational_eq | ( | rational | x, |
| rational | y | ||
| ) | [static] |
| static NPY_INLINE npy_int64 rational_floor | ( | rational | x | ) | [static] |
References rational::n.
Referenced by rational_subtract().
| static NPY_INLINE int rational_ge | ( | rational | x, |
| rational | y | ||
| ) | [static] |
| static NPY_INLINE int rational_gt | ( | rational | x, |
| rational | y | ||
| ) | [static] |
| static NPY_INLINE npy_int32 rational_int | ( | rational | x | ) | [static] |
| static NPY_INLINE rational rational_inverse | ( | rational | x | ) | [static] |
References rational_lt().
| static NPY_INLINE int rational_le | ( | rational | x, |
| rational | y | ||
| ) | [static] |
| static NPY_INLINE int rational_lt | ( | rational | x, |
| rational | y | ||
| ) | [static] |
Referenced by rational_inverse(), and rational_sign().
| static NPY_INLINE rational rational_multiply | ( | rational | x, |
| rational | y | ||
| ) | [static] |
| static NPY_INLINE int rational_ne | ( | rational | x, |
| rational | y | ||
| ) | [static] |
References make_rational_int().
| static NPY_INLINE rational rational_negative | ( | rational | r | ) | [static] |
References d(), and rational::n.
| static NPY_INLINE int rational_nonzero | ( | rational | x | ) | [static] |
| static NPY_INLINE rational rational_remainder | ( | rational | x, |
| rational | y | ||
| ) | [static] |
| static NPY_INLINE npy_int64 rational_rint | ( | rational | x | ) | [static] |
| static NPY_INLINE int rational_sign | ( | rational | x | ) | [static] |
References rational_lt().
| static NPY_INLINE rational rational_subtract | ( | rational | x, |
| rational | y | ||
| ) | [static] |
References make_rational_int(), rational_divide(), rational_floor(), and rational_multiply().
| static NPY_INLINE npy_int32 safe_abs32 | ( | npy_int32 | x | ) | [static] |
References set_overflow().
| static NPY_INLINE npy_int64 safe_abs64 | ( | npy_int64 | x | ) | [static] |
Referenced by gcd().
| static NPY_INLINE npy_int32 safe_neg | ( | npy_int32 | x | ) | [static] |
| static int scan_rational | ( | const char ** | s, |
| rational * | x | ||
| ) | [static] |
| static void set_overflow | ( | void | ) | [static] |
Referenced by gcd(), and safe_abs32().
| static void set_zero_divide | ( | void | ) | [static] |
| UNARY_UFUNC | ( | floor | , |
| rational | , | ||
| make_rational_int(rational_floor(x)) | |||
| ) |
Referenced by _bad_strides(), _strings_richcompare(), byteswap(), and TYPE().
PyArray_ArrFuncs npyrational_arrfuncs [static] |
{
PyObject_HEAD_INIT(0)
&PyRational_Type,
'V',
'r',
'=',
NPY_NEEDS_PYAPI | NPY_USE_GETITEM | NPY_USE_SETITEM,
0,
sizeof(rational),
offsetof(align_test,r),
0,
0,
0,
&npyrational_arrfuncs,
}
PyNumberMethods pyrational_as_number [static] |
PyGetSetDef pyrational_getset[] [static] |
{
{(char*)"n",pyrational_n,0,(char*)"numerator",0},
{(char*)"d",pyrational_d,0,(char*)"denominator",0},
{0}
}
static PyTypeObject PyRational_Type [static] |