|
|
|
|
|
|
| static int __Pyx_cdivision_warning(const char *, int);
|
|
|
|
|
|
|
| static int __Pyx_cdivision_warning(const char *filename, int lineno) {
|
| #if CYTHON_COMPILING_IN_PYPY
|
|
|
| filename++; lineno++;
|
| return PyErr_Warn(PyExc_RuntimeWarning,
|
| "division with oppositely signed operands, C and Python semantics differ");
|
| #else
|
| return PyErr_WarnExplicit(PyExc_RuntimeWarning,
|
| "division with oppositely signed operands, C and Python semantics differ",
|
| filename,
|
| lineno,
|
| __Pyx_MODULE_NAME,
|
| NULL);
|
| #endif
|
| }
|
|
|
|
|
|
|
|
|
| static CYTHON_INLINE %(type)s __Pyx_div_%(type_name)s(%(type)s, %(type)s);
|
|
|
|
|
|
|
| static CYTHON_INLINE %(type)s __Pyx_div_%(type_name)s(%(type)s a, %(type)s b) {
|
| %(type)s q = a / b;
|
| %(type)s r = a - q*b;
|
| q -= ((r != 0) & ((r ^ b) < 0));
|
| return q;
|
| }
|
|
|
|
|
|
|
|
|
| static CYTHON_INLINE %(type)s __Pyx_mod_%(type_name)s(%(type)s, %(type)s);
|
|
|
|
|
|
|
| static CYTHON_INLINE %(type)s __Pyx_mod_%(type_name)s(%(type)s a, %(type)s b) {
|
| %(type)s r = a %% b;
|
| r += ((r != 0) & ((r ^ b) < 0)) * b;
|
| return r;
|
| }
|
|
|
|
|
|
|
|
|
| static CYTHON_INLINE %(type)s __Pyx_mod_%(type_name)s(%(type)s, %(type)s);
|
|
|
|
|
|
|
| static CYTHON_INLINE %(type)s __Pyx_mod_%(type_name)s(%(type)s a, %(type)s b) {
|
| %(type)s r = fmod%(math_h_modifier)s(a, b);
|
| r += ((r != 0) & ((r < 0) ^ (b < 0))) * b;
|
| return r;
|
| }
|
|
|
|
|
|
|
|
|
| static CYTHON_INLINE %(type)s %(func_name)s(%(type)s, %(type)s);
|
|
|
|
|
|
|
| static CYTHON_INLINE %(type)s %(func_name)s(%(type)s b, %(type)s e) {
|
| %(type)s t = b;
|
| switch (e) {
|
| case 3:
|
| t *= b;
|
| CYTHON_FALLTHROUGH;
|
| case 2:
|
| t *= b;
|
| CYTHON_FALLTHROUGH;
|
| case 1:
|
| return t;
|
| case 0:
|
| return 1;
|
| }
|
| #if %(signed)s
|
| if (unlikely(e<0)) return 0;
|
| #endif
|
| t = 1;
|
| while (likely(e)) {
|
| t *= (b * (e&1)) | ((~e)&1);
|
| b *= b;
|
| e >>= 1;
|
| }
|
| return t;
|
| }
|
|
|