scikit-network 0.33.0__cp311-cp311-win_amd64.whl → 0.33.2__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of scikit-network might be problematic. Click here for more details.
- scikit_network-0.33.2.dist-info/METADATA +122 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info}/RECORD +44 -44
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info}/WHEEL +1 -1
- sknetwork/classification/diffusion.py +1 -1
- sknetwork/classification/knn.py +1 -1
- sknetwork/classification/metrics.py +3 -3
- sknetwork/classification/pagerank.py +1 -1
- sknetwork/classification/propagation.py +1 -1
- sknetwork/classification/vote.cp311-win_amd64.pyd +0 -0
- sknetwork/classification/vote.cpp +686 -679
- sknetwork/clustering/leiden_core.cp311-win_amd64.pyd +0 -0
- sknetwork/clustering/leiden_core.cpp +715 -704
- sknetwork/clustering/louvain.py +3 -3
- sknetwork/clustering/louvain_core.cp311-win_amd64.pyd +0 -0
- sknetwork/clustering/louvain_core.cpp +715 -704
- sknetwork/clustering/metrics.py +1 -1
- sknetwork/clustering/tests/test_louvain.py +6 -0
- sknetwork/gnn/base_activation.py +1 -0
- sknetwork/gnn/gnn_classifier.py +1 -1
- sknetwork/hierarchy/metrics.py +3 -3
- sknetwork/hierarchy/paris.cp311-win_amd64.pyd +0 -0
- sknetwork/hierarchy/paris.cpp +1766 -1162
- sknetwork/linalg/diteration.cp311-win_amd64.pyd +0 -0
- sknetwork/linalg/diteration.cpp +686 -679
- sknetwork/linalg/push.cp311-win_amd64.pyd +0 -0
- sknetwork/linalg/push.cpp +1763 -1165
- sknetwork/linalg/sparse_lowrank.py +1 -1
- sknetwork/ranking/betweenness.cp311-win_amd64.pyd +0 -0
- sknetwork/ranking/betweenness.cpp +565 -559
- sknetwork/topology/cliques.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/cliques.cpp +1723 -1122
- sknetwork/topology/core.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/core.cpp +1749 -1151
- sknetwork/topology/cycles.py +2 -2
- sknetwork/topology/minheap.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/minheap.cpp +689 -679
- sknetwork/topology/triangles.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/triangles.cpp +439 -434
- sknetwork/topology/weisfeiler_lehman_core.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/weisfeiler_lehman_core.cpp +686 -679
- sknetwork/visualization/graphs.py +1 -1
- scikit_network-0.33.0.dist-info/METADATA +0 -517
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info/licenses}/AUTHORS.rst +0 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info/licenses}/LICENSE +0 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info}/top_level.txt +0 -0
sknetwork/linalg/diteration.cpp
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* Generated by Cython 3.0.
|
|
1
|
+
/* Generated by Cython 3.0.12 */
|
|
2
2
|
|
|
3
3
|
/* BEGIN: Cython Metadata
|
|
4
4
|
{
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"/d2FH4-"
|
|
8
8
|
],
|
|
9
9
|
"include_dirs": [
|
|
10
|
-
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\
|
|
10
|
+
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pip-build-env-um3f_m6n\\overlay\\Lib\\site-packages\\numpy\\_core\\include"
|
|
11
11
|
],
|
|
12
12
|
"language": "c++",
|
|
13
13
|
"name": "sknetwork.linalg.diteration",
|
|
@@ -43,10 +43,10 @@ END: Cython Metadata */
|
|
|
43
43
|
#else
|
|
44
44
|
#define __PYX_EXTRA_ABI_MODULE_NAME ""
|
|
45
45
|
#endif
|
|
46
|
-
#define CYTHON_ABI "
|
|
46
|
+
#define CYTHON_ABI "3_0_12" __PYX_EXTRA_ABI_MODULE_NAME
|
|
47
47
|
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
|
|
48
48
|
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
|
|
49
|
-
#define CYTHON_HEX_VERSION
|
|
49
|
+
#define CYTHON_HEX_VERSION 0x03000CF0
|
|
50
50
|
#define CYTHON_FUTURE_DIVISION 1
|
|
51
51
|
#include <stddef.h>
|
|
52
52
|
#ifndef offsetof
|
|
@@ -2027,7 +2027,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
|
|
|
2027
2027
|
#if !CYTHON_VECTORCALL
|
|
2028
2028
|
#if PY_VERSION_HEX >= 0x03080000
|
|
2029
2029
|
#include "frameobject.h"
|
|
2030
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
2030
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
2031
2031
|
#ifndef Py_BUILD_CORE
|
|
2032
2032
|
#define Py_BUILD_CORE 1
|
|
2033
2033
|
#endif
|
|
@@ -2364,11 +2364,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
|
|
|
2364
2364
|
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
|
|
2365
2365
|
|
|
2366
2366
|
/* HasAttr.proto */
|
|
2367
|
-
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
|
|
2368
|
-
#define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
|
|
2369
|
-
#else
|
|
2370
2367
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
|
|
2371
|
-
#endif
|
|
2372
2368
|
|
|
2373
2369
|
/* PyObject_GenericGetAttrNoDict.proto */
|
|
2374
2370
|
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
|
|
@@ -3998,10 +3994,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
3998
3994
|
PyObject *__pyx_t_4 = NULL;
|
|
3999
3995
|
PyObject *__pyx_t_5 = NULL;
|
|
4000
3996
|
PyObject *__pyx_t_6 = NULL;
|
|
4001
|
-
int __pyx_t_7;
|
|
3997
|
+
unsigned int __pyx_t_7;
|
|
4002
3998
|
char *__pyx_t_8;
|
|
4003
|
-
|
|
4004
|
-
|
|
3999
|
+
int __pyx_t_9;
|
|
4000
|
+
Py_ssize_t __pyx_t_10;
|
|
4001
|
+
Py_UCS4 __pyx_t_11;
|
|
4005
4002
|
int __pyx_lineno = 0;
|
|
4006
4003
|
const char *__pyx_filename = NULL;
|
|
4007
4004
|
int __pyx_clineno = 0;
|
|
@@ -4227,7 +4224,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4227
4224
|
* if dim <= 0:
|
|
4228
4225
|
* raise ValueError, f"Invalid shape in axis {idx}: {dim}."
|
|
4229
4226
|
*/
|
|
4230
|
-
|
|
4227
|
+
__pyx_t_9 = 0;
|
|
4231
4228
|
__pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4);
|
|
4232
4229
|
__pyx_t_1 = 0;
|
|
4233
4230
|
for (;;) {
|
|
@@ -4244,11 +4241,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4244
4241
|
__pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 159, __pyx_L1_error)
|
|
4245
4242
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4246
4243
|
#endif
|
|
4247
|
-
|
|
4244
|
+
__pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 159, __pyx_L1_error)
|
|
4248
4245
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4249
|
-
__pyx_v_dim =
|
|
4250
|
-
__pyx_v_idx =
|
|
4251
|
-
|
|
4246
|
+
__pyx_v_dim = __pyx_t_10;
|
|
4247
|
+
__pyx_v_idx = __pyx_t_9;
|
|
4248
|
+
__pyx_t_9 = (__pyx_t_9 + 1);
|
|
4252
4249
|
|
|
4253
4250
|
/* "View.MemoryView":160
|
|
4254
4251
|
*
|
|
@@ -4269,33 +4266,33 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4269
4266
|
*/
|
|
4270
4267
|
__pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4271
4268
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4272
|
-
|
|
4273
|
-
|
|
4269
|
+
__pyx_t_10 = 0;
|
|
4270
|
+
__pyx_t_11 = 127;
|
|
4274
4271
|
__Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4275
|
-
|
|
4272
|
+
__pyx_t_10 += 22;
|
|
4276
4273
|
__Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4277
4274
|
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis);
|
|
4278
4275
|
__pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4279
4276
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4280
|
-
|
|
4277
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4281
4278
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4282
4279
|
PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
|
|
4283
4280
|
__pyx_t_6 = 0;
|
|
4284
4281
|
__Pyx_INCREF(__pyx_kp_u_);
|
|
4285
|
-
|
|
4282
|
+
__pyx_t_10 += 2;
|
|
4286
4283
|
__Pyx_GIVEREF(__pyx_kp_u_);
|
|
4287
4284
|
PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_);
|
|
4288
4285
|
__pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4289
4286
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4290
|
-
|
|
4287
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4291
4288
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4292
4289
|
PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6);
|
|
4293
4290
|
__pyx_t_6 = 0;
|
|
4294
4291
|
__Pyx_INCREF(__pyx_kp_u__2);
|
|
4295
|
-
|
|
4292
|
+
__pyx_t_10 += 1;
|
|
4296
4293
|
__Pyx_GIVEREF(__pyx_kp_u__2);
|
|
4297
4294
|
PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2);
|
|
4298
|
-
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5,
|
|
4295
|
+
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4299
4296
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4300
4297
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4301
4298
|
__Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
|
|
@@ -4479,7 +4476,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4479
4476
|
*
|
|
4480
4477
|
* @cname('getbuffer')
|
|
4481
4478
|
*/
|
|
4482
|
-
|
|
4479
|
+
__pyx_t_9 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
|
|
4483
4480
|
|
|
4484
4481
|
/* "View.MemoryView":179
|
|
4485
4482
|
* self.dtype_is_object = format == b'O'
|
|
@@ -7634,7 +7631,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7634
7631
|
*
|
|
7635
7632
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
7636
7633
|
* obj = self.is_slice(value)
|
|
7637
|
-
* if obj:
|
|
7634
|
+
* if obj is not None:
|
|
7638
7635
|
*/
|
|
7639
7636
|
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error)
|
|
7640
7637
|
if (__pyx_t_4) {
|
|
@@ -7643,7 +7640,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7643
7640
|
*
|
|
7644
7641
|
* if have_slices:
|
|
7645
7642
|
* obj = self.is_slice(value) # <<<<<<<<<<<<<<
|
|
7646
|
-
* if obj:
|
|
7643
|
+
* if obj is not None:
|
|
7647
7644
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7648
7645
|
*/
|
|
7649
7646
|
__pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 427, __pyx_L1_error)
|
|
@@ -7654,16 +7651,16 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7654
7651
|
/* "View.MemoryView":428
|
|
7655
7652
|
* if have_slices:
|
|
7656
7653
|
* obj = self.is_slice(value)
|
|
7657
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
7654
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
7658
7655
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7659
7656
|
* else:
|
|
7660
7657
|
*/
|
|
7661
|
-
__pyx_t_4 =
|
|
7658
|
+
__pyx_t_4 = (__pyx_v_obj != Py_None);
|
|
7662
7659
|
if (__pyx_t_4) {
|
|
7663
7660
|
|
|
7664
7661
|
/* "View.MemoryView":429
|
|
7665
7662
|
* obj = self.is_slice(value)
|
|
7666
|
-
* if obj:
|
|
7663
|
+
* if obj is not None:
|
|
7667
7664
|
* self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
|
|
7668
7665
|
* else:
|
|
7669
7666
|
* self.setitem_slice_assign_scalar(self[index], value)
|
|
@@ -7678,7 +7675,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7678
7675
|
/* "View.MemoryView":428
|
|
7679
7676
|
* if have_slices:
|
|
7680
7677
|
* obj = self.is_slice(value)
|
|
7681
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
7678
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
7682
7679
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7683
7680
|
* else:
|
|
7684
7681
|
*/
|
|
@@ -7708,7 +7705,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7708
7705
|
*
|
|
7709
7706
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
7710
7707
|
* obj = self.is_slice(value)
|
|
7711
|
-
* if obj:
|
|
7708
|
+
* if obj is not None:
|
|
7712
7709
|
*/
|
|
7713
7710
|
goto __pyx_L4;
|
|
7714
7711
|
}
|
|
@@ -8416,9 +8413,10 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
8416
8413
|
PyObject *__pyx_t_5 = NULL;
|
|
8417
8414
|
PyObject *__pyx_t_6 = NULL;
|
|
8418
8415
|
PyObject *__pyx_t_7 = NULL;
|
|
8419
|
-
int __pyx_t_8;
|
|
8416
|
+
unsigned int __pyx_t_8;
|
|
8420
8417
|
Py_ssize_t __pyx_t_9;
|
|
8421
8418
|
int __pyx_t_10;
|
|
8419
|
+
int __pyx_t_11;
|
|
8422
8420
|
int __pyx_lineno = 0;
|
|
8423
8421
|
const char *__pyx_filename = NULL;
|
|
8424
8422
|
int __pyx_clineno = 0;
|
|
@@ -8573,11 +8571,11 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
8573
8571
|
__Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6);
|
|
8574
8572
|
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 498, __pyx_L5_except_error)
|
|
8575
8573
|
__Pyx_GOTREF(__pyx_t_7);
|
|
8576
|
-
|
|
8574
|
+
__pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
|
|
8577
8575
|
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
|
|
8578
8576
|
__Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6);
|
|
8579
8577
|
__pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
|
|
8580
|
-
if (
|
|
8578
|
+
if (__pyx_t_11) {
|
|
8581
8579
|
__Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
|
|
8582
8580
|
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error)
|
|
8583
8581
|
__Pyx_XGOTREF(__pyx_t_6);
|
|
@@ -8662,7 +8660,7 @@ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryvie
|
|
|
8662
8660
|
PyObject *__pyx_t_3 = NULL;
|
|
8663
8661
|
PyObject *__pyx_t_4 = NULL;
|
|
8664
8662
|
PyObject *__pyx_t_5 = NULL;
|
|
8665
|
-
int __pyx_t_6;
|
|
8663
|
+
unsigned int __pyx_t_6;
|
|
8666
8664
|
Py_ssize_t __pyx_t_7;
|
|
8667
8665
|
PyObject *__pyx_t_8 = NULL;
|
|
8668
8666
|
char *__pyx_t_9;
|
|
@@ -17136,7 +17134,7 @@ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSE
|
|
|
17136
17134
|
int __pyx_t_2;
|
|
17137
17135
|
PyObject *__pyx_t_3 = NULL;
|
|
17138
17136
|
PyObject *__pyx_t_4 = NULL;
|
|
17139
|
-
int __pyx_t_5;
|
|
17137
|
+
unsigned int __pyx_t_5;
|
|
17140
17138
|
int __pyx_lineno = 0;
|
|
17141
17139
|
const char *__pyx_filename = NULL;
|
|
17142
17140
|
int __pyx_clineno = 0;
|
|
@@ -17318,7 +17316,7 @@ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__
|
|
|
17318
17316
|
PyObject *__pyx_t_5 = NULL;
|
|
17319
17317
|
PyObject *__pyx_t_6 = NULL;
|
|
17320
17318
|
PyObject *__pyx_t_7 = NULL;
|
|
17321
|
-
int __pyx_t_8;
|
|
17319
|
+
unsigned int __pyx_t_8;
|
|
17322
17320
|
int __pyx_lineno = 0;
|
|
17323
17321
|
const char *__pyx_filename = NULL;
|
|
17324
17322
|
int __pyx_clineno = 0;
|
|
@@ -18275,6 +18273,9 @@ static PyTypeObject __pyx_type___pyx_array = {
|
|
|
18275
18273
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18276
18274
|
0, /*tp_watched*/
|
|
18277
18275
|
#endif
|
|
18276
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18277
|
+
0, /*tp_versions_used*/
|
|
18278
|
+
#endif
|
|
18278
18279
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18279
18280
|
0, /*tp_pypy_flags*/
|
|
18280
18281
|
#endif
|
|
@@ -18445,6 +18446,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
|
|
|
18445
18446
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18446
18447
|
0, /*tp_watched*/
|
|
18447
18448
|
#endif
|
|
18449
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18450
|
+
0, /*tp_versions_used*/
|
|
18451
|
+
#endif
|
|
18448
18452
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18449
18453
|
0, /*tp_pypy_flags*/
|
|
18450
18454
|
#endif
|
|
@@ -18788,6 +18792,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
|
|
|
18788
18792
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18789
18793
|
0, /*tp_watched*/
|
|
18790
18794
|
#endif
|
|
18795
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18796
|
+
0, /*tp_versions_used*/
|
|
18797
|
+
#endif
|
|
18791
18798
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18792
18799
|
0, /*tp_pypy_flags*/
|
|
18793
18800
|
#endif
|
|
@@ -18960,6 +18967,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
|
|
|
18960
18967
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18961
18968
|
0, /*tp_watched*/
|
|
18962
18969
|
#endif
|
|
18970
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18971
|
+
0, /*tp_versions_used*/
|
|
18972
|
+
#endif
|
|
18963
18973
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18964
18974
|
0, /*tp_pypy_flags*/
|
|
18965
18975
|
#endif
|
|
@@ -22842,7 +22852,6 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
|
|
|
22842
22852
|
}
|
|
22843
22853
|
|
|
22844
22854
|
/* HasAttr */
|
|
22845
|
-
#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
|
|
22846
22855
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
22847
22856
|
PyObject *r;
|
|
22848
22857
|
if (unlikely(!__Pyx_PyBaseString_Check(n))) {
|
|
@@ -22859,7 +22868,6 @@ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
|
22859
22868
|
return 1;
|
|
22860
22869
|
}
|
|
22861
22870
|
}
|
|
22862
|
-
#endif
|
|
22863
22871
|
|
|
22864
22872
|
/* PyObject_GenericGetAttrNoDict */
|
|
22865
22873
|
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
|
|
@@ -24599,6 +24607,9 @@ static PyTypeObject __pyx_CyFunctionType_type = {
|
|
|
24599
24607
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
24600
24608
|
0,
|
|
24601
24609
|
#endif
|
|
24610
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
24611
|
+
0,
|
|
24612
|
+
#endif
|
|
24602
24613
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
24603
24614
|
0,
|
|
24604
24615
|
#endif
|
|
@@ -24784,7 +24795,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
|
|
|
24784
24795
|
#include "compile.h"
|
|
24785
24796
|
#include "frameobject.h"
|
|
24786
24797
|
#include "traceback.h"
|
|
24787
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
24798
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
24788
24799
|
#ifndef Py_BUILD_CORE
|
|
24789
24800
|
#define Py_BUILD_CORE 1
|
|
24790
24801
|
#endif
|
|
@@ -26093,245 +26104,239 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice,
|
|
|
26093
26104
|
}
|
|
26094
26105
|
return (int) val;
|
|
26095
26106
|
}
|
|
26096
|
-
}
|
|
26107
|
+
}
|
|
26097
26108
|
#endif
|
|
26098
|
-
if (
|
|
26099
|
-
|
|
26109
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26110
|
+
int val;
|
|
26111
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26112
|
+
if (!tmp) return (int) -1;
|
|
26113
|
+
val = __Pyx_PyInt_As_int(tmp);
|
|
26114
|
+
Py_DECREF(tmp);
|
|
26115
|
+
return val;
|
|
26116
|
+
}
|
|
26117
|
+
if (is_unsigned) {
|
|
26100
26118
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26101
|
-
|
|
26102
|
-
|
|
26103
|
-
|
|
26104
|
-
|
|
26105
|
-
|
|
26106
|
-
|
|
26107
|
-
|
|
26108
|
-
|
|
26109
|
-
|
|
26110
|
-
|
|
26111
|
-
|
|
26112
|
-
|
|
26113
|
-
|
|
26114
|
-
|
|
26115
|
-
}
|
|
26119
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26120
|
+
goto raise_neg_overflow;
|
|
26121
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26122
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26123
|
+
} else {
|
|
26124
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26125
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26126
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26127
|
+
case 2:
|
|
26128
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
26129
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26130
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26131
|
+
} else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
|
|
26132
|
+
return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26116
26133
|
}
|
|
26117
|
-
|
|
26118
|
-
|
|
26119
|
-
|
|
26120
|
-
|
|
26121
|
-
|
|
26122
|
-
|
|
26123
|
-
|
|
26124
|
-
|
|
26134
|
+
}
|
|
26135
|
+
break;
|
|
26136
|
+
case 3:
|
|
26137
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
26138
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26139
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26140
|
+
} else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
|
|
26141
|
+
return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26125
26142
|
}
|
|
26126
|
-
|
|
26127
|
-
|
|
26128
|
-
|
|
26129
|
-
|
|
26130
|
-
|
|
26131
|
-
|
|
26132
|
-
|
|
26133
|
-
|
|
26143
|
+
}
|
|
26144
|
+
break;
|
|
26145
|
+
case 4:
|
|
26146
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
26147
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26148
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26149
|
+
} else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
|
|
26150
|
+
return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26134
26151
|
}
|
|
26135
|
-
|
|
26136
|
-
|
|
26152
|
+
}
|
|
26153
|
+
break;
|
|
26137
26154
|
}
|
|
26155
|
+
}
|
|
26138
26156
|
#endif
|
|
26139
26157
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26140
|
-
|
|
26141
|
-
|
|
26142
|
-
|
|
26158
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26159
|
+
goto raise_neg_overflow;
|
|
26160
|
+
}
|
|
26143
26161
|
#else
|
|
26144
|
-
|
|
26145
|
-
|
|
26146
|
-
|
|
26147
|
-
|
|
26148
|
-
|
|
26149
|
-
|
|
26150
|
-
|
|
26162
|
+
{
|
|
26163
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26164
|
+
if (unlikely(result < 0))
|
|
26165
|
+
return (int) -1;
|
|
26166
|
+
if (unlikely(result == 1))
|
|
26167
|
+
goto raise_neg_overflow;
|
|
26168
|
+
}
|
|
26151
26169
|
#endif
|
|
26152
|
-
|
|
26153
|
-
|
|
26170
|
+
if ((sizeof(int) <= sizeof(unsigned long))) {
|
|
26171
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26154
26172
|
#ifdef HAVE_LONG_LONG
|
|
26155
|
-
|
|
26156
|
-
|
|
26173
|
+
} else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26174
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26157
26175
|
#endif
|
|
26158
|
-
|
|
26159
|
-
|
|
26176
|
+
}
|
|
26177
|
+
} else {
|
|
26160
26178
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26161
|
-
|
|
26162
|
-
|
|
26163
|
-
|
|
26164
|
-
|
|
26165
|
-
|
|
26166
|
-
|
|
26167
|
-
|
|
26168
|
-
|
|
26169
|
-
|
|
26170
|
-
|
|
26171
|
-
|
|
26172
|
-
|
|
26173
|
-
}
|
|
26179
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26180
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26181
|
+
} else {
|
|
26182
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26183
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26184
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26185
|
+
case -2:
|
|
26186
|
+
if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
|
|
26187
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26188
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26189
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26190
|
+
return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26174
26191
|
}
|
|
26175
|
-
|
|
26176
|
-
|
|
26177
|
-
|
|
26178
|
-
|
|
26179
|
-
|
|
26180
|
-
|
|
26181
|
-
|
|
26182
|
-
|
|
26192
|
+
}
|
|
26193
|
+
break;
|
|
26194
|
+
case 2:
|
|
26195
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
26196
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26197
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26198
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26199
|
+
return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26183
26200
|
}
|
|
26184
|
-
|
|
26185
|
-
|
|
26186
|
-
|
|
26187
|
-
|
|
26188
|
-
|
|
26189
|
-
|
|
26190
|
-
|
|
26191
|
-
|
|
26201
|
+
}
|
|
26202
|
+
break;
|
|
26203
|
+
case -3:
|
|
26204
|
+
if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26205
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26206
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26207
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26208
|
+
return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26192
26209
|
}
|
|
26193
|
-
|
|
26194
|
-
|
|
26195
|
-
|
|
26196
|
-
|
|
26197
|
-
|
|
26198
|
-
|
|
26199
|
-
|
|
26200
|
-
|
|
26210
|
+
}
|
|
26211
|
+
break;
|
|
26212
|
+
case 3:
|
|
26213
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
26214
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26215
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26216
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26217
|
+
return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26201
26218
|
}
|
|
26202
|
-
|
|
26203
|
-
|
|
26204
|
-
|
|
26205
|
-
|
|
26206
|
-
|
|
26207
|
-
|
|
26208
|
-
|
|
26209
|
-
|
|
26219
|
+
}
|
|
26220
|
+
break;
|
|
26221
|
+
case -4:
|
|
26222
|
+
if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26223
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26224
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26225
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
26226
|
+
return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26210
26227
|
}
|
|
26211
|
-
|
|
26212
|
-
|
|
26213
|
-
|
|
26214
|
-
|
|
26215
|
-
|
|
26216
|
-
|
|
26217
|
-
|
|
26218
|
-
|
|
26228
|
+
}
|
|
26229
|
+
break;
|
|
26230
|
+
case 4:
|
|
26231
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
26232
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26233
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26234
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
26235
|
+
return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26219
26236
|
}
|
|
26220
|
-
|
|
26221
|
-
|
|
26237
|
+
}
|
|
26238
|
+
break;
|
|
26222
26239
|
}
|
|
26240
|
+
}
|
|
26223
26241
|
#endif
|
|
26224
|
-
|
|
26225
|
-
|
|
26242
|
+
if ((sizeof(int) <= sizeof(long))) {
|
|
26243
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
|
|
26226
26244
|
#ifdef HAVE_LONG_LONG
|
|
26227
|
-
|
|
26228
|
-
|
|
26245
|
+
} else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
|
|
26246
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26229
26247
|
#endif
|
|
26230
|
-
}
|
|
26231
26248
|
}
|
|
26232
|
-
|
|
26233
|
-
|
|
26234
|
-
|
|
26235
|
-
|
|
26236
|
-
|
|
26237
|
-
|
|
26238
|
-
|
|
26239
|
-
|
|
26240
|
-
|
|
26241
|
-
|
|
26242
|
-
|
|
26243
|
-
|
|
26244
|
-
|
|
26245
|
-
|
|
26246
|
-
|
|
26247
|
-
|
|
26248
|
-
|
|
26249
|
-
|
|
26250
|
-
|
|
26251
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26252
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26253
|
-
long idigit;
|
|
26254
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26255
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26256
|
-
PyObject *tmp = v;
|
|
26257
|
-
v = PyNumber_Long(v);
|
|
26258
|
-
assert(PyLong_CheckExact(v));
|
|
26259
|
-
Py_DECREF(tmp);
|
|
26260
|
-
if (unlikely(!v)) return (int) -1;
|
|
26261
|
-
}
|
|
26262
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26263
|
-
if (Py_SIZE(x) == 0)
|
|
26264
|
-
return (int) 0;
|
|
26265
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26249
|
+
}
|
|
26250
|
+
{
|
|
26251
|
+
int val;
|
|
26252
|
+
int ret = -1;
|
|
26253
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26254
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26255
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26256
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26257
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26258
|
+
goto raise_overflow;
|
|
26259
|
+
} else {
|
|
26260
|
+
ret = 0;
|
|
26261
|
+
}
|
|
26262
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26263
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26264
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26265
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26266
|
+
bytes, sizeof(val),
|
|
26267
|
+
is_little, !is_unsigned);
|
|
26266
26268
|
#else
|
|
26267
|
-
|
|
26268
|
-
|
|
26269
|
-
|
|
26270
|
-
|
|
26271
|
-
|
|
26272
|
-
|
|
26273
|
-
|
|
26274
|
-
|
|
26275
|
-
|
|
26276
|
-
|
|
26277
|
-
|
|
26278
|
-
|
|
26279
|
-
|
|
26280
|
-
|
|
26281
|
-
stepval = __Pyx_NewRef(v);
|
|
26282
|
-
}
|
|
26283
|
-
val = (int) 0;
|
|
26284
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26285
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26286
|
-
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
26287
|
-
PyObject *tmp, *digit;
|
|
26288
|
-
digit = PyNumber_And(stepval, mask);
|
|
26289
|
-
if (unlikely(!digit)) goto done;
|
|
26290
|
-
idigit = PyLong_AsLong(digit);
|
|
26291
|
-
Py_DECREF(digit);
|
|
26292
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26293
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26294
|
-
if (unlikely(!tmp)) goto done;
|
|
26295
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26296
|
-
val |= ((int) idigit) << bits;
|
|
26297
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26298
|
-
if (Py_SIZE(stepval) == 0)
|
|
26299
|
-
goto unpacking_done;
|
|
26300
|
-
#endif
|
|
26301
|
-
}
|
|
26302
|
-
idigit = PyLong_AsLong(stepval);
|
|
26303
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26304
|
-
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26305
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26306
|
-
goto raise_overflow;
|
|
26307
|
-
val |= ((int) idigit) << bits;
|
|
26308
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26309
|
-
unpacking_done:
|
|
26310
|
-
#endif
|
|
26311
|
-
if (!is_unsigned) {
|
|
26312
|
-
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
26313
|
-
goto raise_overflow;
|
|
26314
|
-
if (is_negative)
|
|
26315
|
-
val = ~val;
|
|
26316
|
-
}
|
|
26317
|
-
ret = 0;
|
|
26318
|
-
done:
|
|
26319
|
-
Py_XDECREF(shift);
|
|
26320
|
-
Py_XDECREF(mask);
|
|
26321
|
-
Py_XDECREF(stepval);
|
|
26322
|
-
#endif
|
|
26269
|
+
PyObject *v;
|
|
26270
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26271
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26272
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26273
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26274
|
+
v = __Pyx_NewRef(x);
|
|
26275
|
+
} else {
|
|
26276
|
+
v = PyNumber_Long(x);
|
|
26277
|
+
if (unlikely(!v)) return (int) -1;
|
|
26278
|
+
assert(PyLong_CheckExact(v));
|
|
26279
|
+
}
|
|
26280
|
+
{
|
|
26281
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26282
|
+
if (unlikely(result < 0)) {
|
|
26323
26283
|
Py_DECREF(v);
|
|
26324
|
-
|
|
26325
|
-
return val;
|
|
26284
|
+
return (int) -1;
|
|
26326
26285
|
}
|
|
26327
|
-
|
|
26286
|
+
is_negative = result == 1;
|
|
26328
26287
|
}
|
|
26329
|
-
|
|
26330
|
-
|
|
26331
|
-
|
|
26332
|
-
|
|
26333
|
-
|
|
26334
|
-
|
|
26288
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26289
|
+
Py_DECREF(v);
|
|
26290
|
+
goto raise_neg_overflow;
|
|
26291
|
+
} else if (is_negative) {
|
|
26292
|
+
stepval = PyNumber_Invert(v);
|
|
26293
|
+
Py_DECREF(v);
|
|
26294
|
+
if (unlikely(!stepval))
|
|
26295
|
+
return (int) -1;
|
|
26296
|
+
} else {
|
|
26297
|
+
stepval = v;
|
|
26298
|
+
}
|
|
26299
|
+
v = NULL;
|
|
26300
|
+
val = (int) 0;
|
|
26301
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26302
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26303
|
+
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
26304
|
+
PyObject *tmp, *digit;
|
|
26305
|
+
long idigit;
|
|
26306
|
+
digit = PyNumber_And(stepval, mask);
|
|
26307
|
+
if (unlikely(!digit)) goto done;
|
|
26308
|
+
idigit = PyLong_AsLong(digit);
|
|
26309
|
+
Py_DECREF(digit);
|
|
26310
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26311
|
+
val |= ((int) idigit) << bits;
|
|
26312
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26313
|
+
if (unlikely(!tmp)) goto done;
|
|
26314
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26315
|
+
}
|
|
26316
|
+
Py_DECREF(shift); shift = NULL;
|
|
26317
|
+
Py_DECREF(mask); mask = NULL;
|
|
26318
|
+
{
|
|
26319
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26320
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26321
|
+
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26322
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26323
|
+
goto raise_overflow;
|
|
26324
|
+
val |= ((int) idigit) << bits;
|
|
26325
|
+
}
|
|
26326
|
+
if (!is_unsigned) {
|
|
26327
|
+
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
26328
|
+
goto raise_overflow;
|
|
26329
|
+
if (is_negative)
|
|
26330
|
+
val = ~val;
|
|
26331
|
+
}
|
|
26332
|
+
ret = 0;
|
|
26333
|
+
done:
|
|
26334
|
+
Py_XDECREF(shift);
|
|
26335
|
+
Py_XDECREF(mask);
|
|
26336
|
+
Py_XDECREF(stepval);
|
|
26337
|
+
#endif
|
|
26338
|
+
if (unlikely(ret))
|
|
26339
|
+
return (int) -1;
|
|
26335
26340
|
return val;
|
|
26336
26341
|
}
|
|
26337
26342
|
raise_overflow:
|
|
@@ -26375,12 +26380,19 @@ raise_neg_overflow:
|
|
|
26375
26380
|
}
|
|
26376
26381
|
}
|
|
26377
26382
|
{
|
|
26378
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26379
26383
|
unsigned char *bytes = (unsigned char *)&value;
|
|
26380
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
26384
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
26385
|
+
if (is_unsigned) {
|
|
26386
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
26387
|
+
} else {
|
|
26388
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
26389
|
+
}
|
|
26390
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
26391
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26381
26392
|
return _PyLong_FromByteArray(bytes, sizeof(int),
|
|
26382
26393
|
little, !is_unsigned);
|
|
26383
26394
|
#else
|
|
26395
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26384
26396
|
PyObject *from_bytes, *result = NULL;
|
|
26385
26397
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
26386
26398
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -26430,245 +26442,239 @@ raise_neg_overflow:
|
|
|
26430
26442
|
}
|
|
26431
26443
|
return (long) val;
|
|
26432
26444
|
}
|
|
26433
|
-
}
|
|
26445
|
+
}
|
|
26434
26446
|
#endif
|
|
26435
|
-
if (
|
|
26436
|
-
|
|
26447
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26448
|
+
long val;
|
|
26449
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26450
|
+
if (!tmp) return (long) -1;
|
|
26451
|
+
val = __Pyx_PyInt_As_long(tmp);
|
|
26452
|
+
Py_DECREF(tmp);
|
|
26453
|
+
return val;
|
|
26454
|
+
}
|
|
26455
|
+
if (is_unsigned) {
|
|
26437
26456
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26438
|
-
|
|
26439
|
-
|
|
26440
|
-
|
|
26441
|
-
|
|
26442
|
-
|
|
26443
|
-
|
|
26444
|
-
|
|
26445
|
-
|
|
26446
|
-
|
|
26447
|
-
|
|
26448
|
-
|
|
26449
|
-
|
|
26450
|
-
|
|
26451
|
-
|
|
26452
|
-
}
|
|
26457
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26458
|
+
goto raise_neg_overflow;
|
|
26459
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26460
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26461
|
+
} else {
|
|
26462
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26463
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26464
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26465
|
+
case 2:
|
|
26466
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
26467
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26468
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26469
|
+
} else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
|
|
26470
|
+
return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26453
26471
|
}
|
|
26454
|
-
|
|
26455
|
-
|
|
26456
|
-
|
|
26457
|
-
|
|
26458
|
-
|
|
26459
|
-
|
|
26460
|
-
|
|
26461
|
-
|
|
26472
|
+
}
|
|
26473
|
+
break;
|
|
26474
|
+
case 3:
|
|
26475
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
26476
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26477
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26478
|
+
} else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
|
|
26479
|
+
return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26462
26480
|
}
|
|
26463
|
-
|
|
26464
|
-
|
|
26465
|
-
|
|
26466
|
-
|
|
26467
|
-
|
|
26468
|
-
|
|
26469
|
-
|
|
26470
|
-
|
|
26481
|
+
}
|
|
26482
|
+
break;
|
|
26483
|
+
case 4:
|
|
26484
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
26485
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26486
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26487
|
+
} else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
|
|
26488
|
+
return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26471
26489
|
}
|
|
26472
|
-
|
|
26473
|
-
|
|
26490
|
+
}
|
|
26491
|
+
break;
|
|
26474
26492
|
}
|
|
26493
|
+
}
|
|
26475
26494
|
#endif
|
|
26476
26495
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26477
|
-
|
|
26478
|
-
|
|
26479
|
-
|
|
26496
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26497
|
+
goto raise_neg_overflow;
|
|
26498
|
+
}
|
|
26480
26499
|
#else
|
|
26481
|
-
|
|
26482
|
-
|
|
26483
|
-
|
|
26484
|
-
|
|
26485
|
-
|
|
26486
|
-
|
|
26487
|
-
|
|
26500
|
+
{
|
|
26501
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26502
|
+
if (unlikely(result < 0))
|
|
26503
|
+
return (long) -1;
|
|
26504
|
+
if (unlikely(result == 1))
|
|
26505
|
+
goto raise_neg_overflow;
|
|
26506
|
+
}
|
|
26488
26507
|
#endif
|
|
26489
|
-
|
|
26490
|
-
|
|
26508
|
+
if ((sizeof(long) <= sizeof(unsigned long))) {
|
|
26509
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26491
26510
|
#ifdef HAVE_LONG_LONG
|
|
26492
|
-
|
|
26493
|
-
|
|
26511
|
+
} else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26512
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26494
26513
|
#endif
|
|
26495
|
-
|
|
26496
|
-
|
|
26514
|
+
}
|
|
26515
|
+
} else {
|
|
26497
26516
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26498
|
-
|
|
26499
|
-
|
|
26500
|
-
|
|
26501
|
-
|
|
26502
|
-
|
|
26503
|
-
|
|
26504
|
-
|
|
26505
|
-
|
|
26506
|
-
|
|
26507
|
-
|
|
26508
|
-
|
|
26509
|
-
|
|
26510
|
-
}
|
|
26517
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26518
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26519
|
+
} else {
|
|
26520
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26521
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26522
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26523
|
+
case -2:
|
|
26524
|
+
if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
|
|
26525
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26526
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26527
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26528
|
+
return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26511
26529
|
}
|
|
26512
|
-
|
|
26513
|
-
|
|
26514
|
-
|
|
26515
|
-
|
|
26516
|
-
|
|
26517
|
-
|
|
26518
|
-
|
|
26519
|
-
|
|
26530
|
+
}
|
|
26531
|
+
break;
|
|
26532
|
+
case 2:
|
|
26533
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
26534
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26535
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26536
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26537
|
+
return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26520
26538
|
}
|
|
26521
|
-
|
|
26522
|
-
|
|
26523
|
-
|
|
26524
|
-
|
|
26525
|
-
|
|
26526
|
-
|
|
26527
|
-
|
|
26528
|
-
|
|
26539
|
+
}
|
|
26540
|
+
break;
|
|
26541
|
+
case -3:
|
|
26542
|
+
if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26543
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26544
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26545
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26546
|
+
return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26529
26547
|
}
|
|
26530
|
-
|
|
26531
|
-
|
|
26532
|
-
|
|
26533
|
-
|
|
26534
|
-
|
|
26535
|
-
|
|
26536
|
-
|
|
26537
|
-
|
|
26548
|
+
}
|
|
26549
|
+
break;
|
|
26550
|
+
case 3:
|
|
26551
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
26552
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26553
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26554
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26555
|
+
return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26538
26556
|
}
|
|
26539
|
-
|
|
26540
|
-
|
|
26541
|
-
|
|
26542
|
-
|
|
26543
|
-
|
|
26544
|
-
|
|
26545
|
-
|
|
26546
|
-
|
|
26557
|
+
}
|
|
26558
|
+
break;
|
|
26559
|
+
case -4:
|
|
26560
|
+
if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26561
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26562
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26563
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
26564
|
+
return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26547
26565
|
}
|
|
26548
|
-
|
|
26549
|
-
|
|
26550
|
-
|
|
26551
|
-
|
|
26552
|
-
|
|
26553
|
-
|
|
26554
|
-
|
|
26555
|
-
|
|
26566
|
+
}
|
|
26567
|
+
break;
|
|
26568
|
+
case 4:
|
|
26569
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
26570
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26571
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26572
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
26573
|
+
return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26556
26574
|
}
|
|
26557
|
-
|
|
26558
|
-
|
|
26575
|
+
}
|
|
26576
|
+
break;
|
|
26559
26577
|
}
|
|
26578
|
+
}
|
|
26560
26579
|
#endif
|
|
26561
|
-
|
|
26562
|
-
|
|
26580
|
+
if ((sizeof(long) <= sizeof(long))) {
|
|
26581
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
|
|
26563
26582
|
#ifdef HAVE_LONG_LONG
|
|
26564
|
-
|
|
26565
|
-
|
|
26583
|
+
} else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
|
|
26584
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26566
26585
|
#endif
|
|
26567
|
-
}
|
|
26568
26586
|
}
|
|
26569
|
-
|
|
26570
|
-
|
|
26571
|
-
|
|
26572
|
-
|
|
26573
|
-
|
|
26574
|
-
|
|
26575
|
-
|
|
26576
|
-
|
|
26577
|
-
|
|
26578
|
-
|
|
26579
|
-
|
|
26580
|
-
|
|
26581
|
-
|
|
26582
|
-
|
|
26583
|
-
|
|
26584
|
-
|
|
26585
|
-
|
|
26586
|
-
|
|
26587
|
-
|
|
26588
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26589
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26590
|
-
long idigit;
|
|
26591
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26592
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26593
|
-
PyObject *tmp = v;
|
|
26594
|
-
v = PyNumber_Long(v);
|
|
26595
|
-
assert(PyLong_CheckExact(v));
|
|
26596
|
-
Py_DECREF(tmp);
|
|
26597
|
-
if (unlikely(!v)) return (long) -1;
|
|
26598
|
-
}
|
|
26599
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26600
|
-
if (Py_SIZE(x) == 0)
|
|
26601
|
-
return (long) 0;
|
|
26602
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26587
|
+
}
|
|
26588
|
+
{
|
|
26589
|
+
long val;
|
|
26590
|
+
int ret = -1;
|
|
26591
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26592
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26593
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26594
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26595
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26596
|
+
goto raise_overflow;
|
|
26597
|
+
} else {
|
|
26598
|
+
ret = 0;
|
|
26599
|
+
}
|
|
26600
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26601
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26602
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26603
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26604
|
+
bytes, sizeof(val),
|
|
26605
|
+
is_little, !is_unsigned);
|
|
26603
26606
|
#else
|
|
26604
|
-
|
|
26605
|
-
|
|
26606
|
-
|
|
26607
|
-
|
|
26608
|
-
|
|
26609
|
-
|
|
26610
|
-
|
|
26611
|
-
|
|
26612
|
-
|
|
26613
|
-
|
|
26614
|
-
|
|
26615
|
-
|
|
26616
|
-
|
|
26617
|
-
|
|
26618
|
-
stepval = __Pyx_NewRef(v);
|
|
26619
|
-
}
|
|
26620
|
-
val = (long) 0;
|
|
26621
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26622
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26623
|
-
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
26624
|
-
PyObject *tmp, *digit;
|
|
26625
|
-
digit = PyNumber_And(stepval, mask);
|
|
26626
|
-
if (unlikely(!digit)) goto done;
|
|
26627
|
-
idigit = PyLong_AsLong(digit);
|
|
26628
|
-
Py_DECREF(digit);
|
|
26629
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26630
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26631
|
-
if (unlikely(!tmp)) goto done;
|
|
26632
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26633
|
-
val |= ((long) idigit) << bits;
|
|
26634
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26635
|
-
if (Py_SIZE(stepval) == 0)
|
|
26636
|
-
goto unpacking_done;
|
|
26637
|
-
#endif
|
|
26638
|
-
}
|
|
26639
|
-
idigit = PyLong_AsLong(stepval);
|
|
26640
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26641
|
-
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26642
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26643
|
-
goto raise_overflow;
|
|
26644
|
-
val |= ((long) idigit) << bits;
|
|
26645
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26646
|
-
unpacking_done:
|
|
26647
|
-
#endif
|
|
26648
|
-
if (!is_unsigned) {
|
|
26649
|
-
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
26650
|
-
goto raise_overflow;
|
|
26651
|
-
if (is_negative)
|
|
26652
|
-
val = ~val;
|
|
26653
|
-
}
|
|
26654
|
-
ret = 0;
|
|
26655
|
-
done:
|
|
26656
|
-
Py_XDECREF(shift);
|
|
26657
|
-
Py_XDECREF(mask);
|
|
26658
|
-
Py_XDECREF(stepval);
|
|
26659
|
-
#endif
|
|
26607
|
+
PyObject *v;
|
|
26608
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26609
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26610
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26611
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26612
|
+
v = __Pyx_NewRef(x);
|
|
26613
|
+
} else {
|
|
26614
|
+
v = PyNumber_Long(x);
|
|
26615
|
+
if (unlikely(!v)) return (long) -1;
|
|
26616
|
+
assert(PyLong_CheckExact(v));
|
|
26617
|
+
}
|
|
26618
|
+
{
|
|
26619
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26620
|
+
if (unlikely(result < 0)) {
|
|
26660
26621
|
Py_DECREF(v);
|
|
26661
|
-
|
|
26662
|
-
return val;
|
|
26622
|
+
return (long) -1;
|
|
26663
26623
|
}
|
|
26664
|
-
|
|
26624
|
+
is_negative = result == 1;
|
|
26665
26625
|
}
|
|
26666
|
-
|
|
26667
|
-
|
|
26668
|
-
|
|
26669
|
-
|
|
26670
|
-
|
|
26671
|
-
|
|
26626
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26627
|
+
Py_DECREF(v);
|
|
26628
|
+
goto raise_neg_overflow;
|
|
26629
|
+
} else if (is_negative) {
|
|
26630
|
+
stepval = PyNumber_Invert(v);
|
|
26631
|
+
Py_DECREF(v);
|
|
26632
|
+
if (unlikely(!stepval))
|
|
26633
|
+
return (long) -1;
|
|
26634
|
+
} else {
|
|
26635
|
+
stepval = v;
|
|
26636
|
+
}
|
|
26637
|
+
v = NULL;
|
|
26638
|
+
val = (long) 0;
|
|
26639
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26640
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26641
|
+
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
26642
|
+
PyObject *tmp, *digit;
|
|
26643
|
+
long idigit;
|
|
26644
|
+
digit = PyNumber_And(stepval, mask);
|
|
26645
|
+
if (unlikely(!digit)) goto done;
|
|
26646
|
+
idigit = PyLong_AsLong(digit);
|
|
26647
|
+
Py_DECREF(digit);
|
|
26648
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26649
|
+
val |= ((long) idigit) << bits;
|
|
26650
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26651
|
+
if (unlikely(!tmp)) goto done;
|
|
26652
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26653
|
+
}
|
|
26654
|
+
Py_DECREF(shift); shift = NULL;
|
|
26655
|
+
Py_DECREF(mask); mask = NULL;
|
|
26656
|
+
{
|
|
26657
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26658
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26659
|
+
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26660
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26661
|
+
goto raise_overflow;
|
|
26662
|
+
val |= ((long) idigit) << bits;
|
|
26663
|
+
}
|
|
26664
|
+
if (!is_unsigned) {
|
|
26665
|
+
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
26666
|
+
goto raise_overflow;
|
|
26667
|
+
if (is_negative)
|
|
26668
|
+
val = ~val;
|
|
26669
|
+
}
|
|
26670
|
+
ret = 0;
|
|
26671
|
+
done:
|
|
26672
|
+
Py_XDECREF(shift);
|
|
26673
|
+
Py_XDECREF(mask);
|
|
26674
|
+
Py_XDECREF(stepval);
|
|
26675
|
+
#endif
|
|
26676
|
+
if (unlikely(ret))
|
|
26677
|
+
return (long) -1;
|
|
26672
26678
|
return val;
|
|
26673
26679
|
}
|
|
26674
26680
|
raise_overflow:
|
|
@@ -26712,12 +26718,19 @@ raise_neg_overflow:
|
|
|
26712
26718
|
}
|
|
26713
26719
|
}
|
|
26714
26720
|
{
|
|
26715
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26716
26721
|
unsigned char *bytes = (unsigned char *)&value;
|
|
26717
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
26722
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
26723
|
+
if (is_unsigned) {
|
|
26724
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
26725
|
+
} else {
|
|
26726
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
26727
|
+
}
|
|
26728
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
26729
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26718
26730
|
return _PyLong_FromByteArray(bytes, sizeof(long),
|
|
26719
26731
|
little, !is_unsigned);
|
|
26720
26732
|
#else
|
|
26733
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26721
26734
|
PyObject *from_bytes, *result = NULL;
|
|
26722
26735
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
26723
26736
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -26767,245 +26780,239 @@ raise_neg_overflow:
|
|
|
26767
26780
|
}
|
|
26768
26781
|
return (char) val;
|
|
26769
26782
|
}
|
|
26770
|
-
}
|
|
26783
|
+
}
|
|
26771
26784
|
#endif
|
|
26772
|
-
if (
|
|
26773
|
-
|
|
26785
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26786
|
+
char val;
|
|
26787
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26788
|
+
if (!tmp) return (char) -1;
|
|
26789
|
+
val = __Pyx_PyInt_As_char(tmp);
|
|
26790
|
+
Py_DECREF(tmp);
|
|
26791
|
+
return val;
|
|
26792
|
+
}
|
|
26793
|
+
if (is_unsigned) {
|
|
26774
26794
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26775
|
-
|
|
26776
|
-
|
|
26777
|
-
|
|
26778
|
-
|
|
26779
|
-
|
|
26780
|
-
|
|
26781
|
-
|
|
26782
|
-
|
|
26783
|
-
|
|
26784
|
-
|
|
26785
|
-
|
|
26786
|
-
|
|
26787
|
-
|
|
26788
|
-
|
|
26789
|
-
}
|
|
26795
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26796
|
+
goto raise_neg_overflow;
|
|
26797
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26798
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26799
|
+
} else {
|
|
26800
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26801
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26802
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26803
|
+
case 2:
|
|
26804
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
26805
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26806
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26807
|
+
} else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
|
|
26808
|
+
return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26790
26809
|
}
|
|
26791
|
-
|
|
26792
|
-
|
|
26793
|
-
|
|
26794
|
-
|
|
26795
|
-
|
|
26796
|
-
|
|
26797
|
-
|
|
26798
|
-
|
|
26810
|
+
}
|
|
26811
|
+
break;
|
|
26812
|
+
case 3:
|
|
26813
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
26814
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26815
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26816
|
+
} else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
|
|
26817
|
+
return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26799
26818
|
}
|
|
26800
|
-
|
|
26801
|
-
|
|
26802
|
-
|
|
26803
|
-
|
|
26804
|
-
|
|
26805
|
-
|
|
26806
|
-
|
|
26807
|
-
|
|
26819
|
+
}
|
|
26820
|
+
break;
|
|
26821
|
+
case 4:
|
|
26822
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
26823
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26824
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26825
|
+
} else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
|
|
26826
|
+
return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26808
26827
|
}
|
|
26809
|
-
|
|
26810
|
-
|
|
26828
|
+
}
|
|
26829
|
+
break;
|
|
26811
26830
|
}
|
|
26831
|
+
}
|
|
26812
26832
|
#endif
|
|
26813
26833
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26814
|
-
|
|
26815
|
-
|
|
26816
|
-
|
|
26834
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26835
|
+
goto raise_neg_overflow;
|
|
26836
|
+
}
|
|
26817
26837
|
#else
|
|
26818
|
-
|
|
26819
|
-
|
|
26820
|
-
|
|
26821
|
-
|
|
26822
|
-
|
|
26823
|
-
|
|
26824
|
-
|
|
26838
|
+
{
|
|
26839
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26840
|
+
if (unlikely(result < 0))
|
|
26841
|
+
return (char) -1;
|
|
26842
|
+
if (unlikely(result == 1))
|
|
26843
|
+
goto raise_neg_overflow;
|
|
26844
|
+
}
|
|
26825
26845
|
#endif
|
|
26826
|
-
|
|
26827
|
-
|
|
26846
|
+
if ((sizeof(char) <= sizeof(unsigned long))) {
|
|
26847
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26828
26848
|
#ifdef HAVE_LONG_LONG
|
|
26829
|
-
|
|
26830
|
-
|
|
26849
|
+
} else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26850
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26831
26851
|
#endif
|
|
26832
|
-
|
|
26833
|
-
|
|
26852
|
+
}
|
|
26853
|
+
} else {
|
|
26834
26854
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26835
|
-
|
|
26836
|
-
|
|
26837
|
-
|
|
26838
|
-
|
|
26839
|
-
|
|
26840
|
-
|
|
26841
|
-
|
|
26842
|
-
|
|
26843
|
-
|
|
26844
|
-
|
|
26845
|
-
|
|
26846
|
-
|
|
26847
|
-
}
|
|
26855
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26856
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26857
|
+
} else {
|
|
26858
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26859
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26860
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26861
|
+
case -2:
|
|
26862
|
+
if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
|
|
26863
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26864
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26865
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
26866
|
+
return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26848
26867
|
}
|
|
26849
|
-
|
|
26850
|
-
|
|
26851
|
-
|
|
26852
|
-
|
|
26853
|
-
|
|
26854
|
-
|
|
26855
|
-
|
|
26856
|
-
|
|
26868
|
+
}
|
|
26869
|
+
break;
|
|
26870
|
+
case 2:
|
|
26871
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
26872
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26873
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26874
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
26875
|
+
return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26857
26876
|
}
|
|
26858
|
-
|
|
26859
|
-
|
|
26860
|
-
|
|
26861
|
-
|
|
26862
|
-
|
|
26863
|
-
|
|
26864
|
-
|
|
26865
|
-
|
|
26877
|
+
}
|
|
26878
|
+
break;
|
|
26879
|
+
case -3:
|
|
26880
|
+
if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
26881
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26882
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26883
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
26884
|
+
return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26866
26885
|
}
|
|
26867
|
-
|
|
26868
|
-
|
|
26869
|
-
|
|
26870
|
-
|
|
26871
|
-
|
|
26872
|
-
|
|
26873
|
-
|
|
26874
|
-
|
|
26886
|
+
}
|
|
26887
|
+
break;
|
|
26888
|
+
case 3:
|
|
26889
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
26890
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26891
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26892
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
26893
|
+
return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26875
26894
|
}
|
|
26876
|
-
|
|
26877
|
-
|
|
26878
|
-
|
|
26879
|
-
|
|
26880
|
-
|
|
26881
|
-
|
|
26882
|
-
|
|
26883
|
-
|
|
26895
|
+
}
|
|
26896
|
+
break;
|
|
26897
|
+
case -4:
|
|
26898
|
+
if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
26899
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26900
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26901
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
26902
|
+
return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26884
26903
|
}
|
|
26885
|
-
|
|
26886
|
-
|
|
26887
|
-
|
|
26888
|
-
|
|
26889
|
-
|
|
26890
|
-
|
|
26891
|
-
|
|
26892
|
-
|
|
26904
|
+
}
|
|
26905
|
+
break;
|
|
26906
|
+
case 4:
|
|
26907
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
26908
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26909
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26910
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
26911
|
+
return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26893
26912
|
}
|
|
26894
|
-
|
|
26895
|
-
|
|
26913
|
+
}
|
|
26914
|
+
break;
|
|
26896
26915
|
}
|
|
26916
|
+
}
|
|
26897
26917
|
#endif
|
|
26898
|
-
|
|
26899
|
-
|
|
26918
|
+
if ((sizeof(char) <= sizeof(long))) {
|
|
26919
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
|
|
26900
26920
|
#ifdef HAVE_LONG_LONG
|
|
26901
|
-
|
|
26902
|
-
|
|
26921
|
+
} else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
|
|
26922
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26903
26923
|
#endif
|
|
26904
|
-
}
|
|
26905
26924
|
}
|
|
26906
|
-
|
|
26907
|
-
|
|
26908
|
-
|
|
26909
|
-
|
|
26910
|
-
|
|
26911
|
-
|
|
26912
|
-
|
|
26913
|
-
|
|
26914
|
-
|
|
26915
|
-
|
|
26916
|
-
|
|
26917
|
-
|
|
26918
|
-
|
|
26919
|
-
|
|
26920
|
-
|
|
26921
|
-
|
|
26922
|
-
|
|
26923
|
-
|
|
26924
|
-
|
|
26925
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26926
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26927
|
-
long idigit;
|
|
26928
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26929
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26930
|
-
PyObject *tmp = v;
|
|
26931
|
-
v = PyNumber_Long(v);
|
|
26932
|
-
assert(PyLong_CheckExact(v));
|
|
26933
|
-
Py_DECREF(tmp);
|
|
26934
|
-
if (unlikely(!v)) return (char) -1;
|
|
26935
|
-
}
|
|
26936
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26937
|
-
if (Py_SIZE(x) == 0)
|
|
26938
|
-
return (char) 0;
|
|
26939
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26925
|
+
}
|
|
26926
|
+
{
|
|
26927
|
+
char val;
|
|
26928
|
+
int ret = -1;
|
|
26929
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26930
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26931
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26932
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26933
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26934
|
+
goto raise_overflow;
|
|
26935
|
+
} else {
|
|
26936
|
+
ret = 0;
|
|
26937
|
+
}
|
|
26938
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26939
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26940
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26941
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26942
|
+
bytes, sizeof(val),
|
|
26943
|
+
is_little, !is_unsigned);
|
|
26940
26944
|
#else
|
|
26941
|
-
|
|
26942
|
-
|
|
26943
|
-
|
|
26944
|
-
|
|
26945
|
-
|
|
26946
|
-
|
|
26947
|
-
|
|
26948
|
-
|
|
26949
|
-
|
|
26950
|
-
|
|
26951
|
-
|
|
26952
|
-
|
|
26953
|
-
|
|
26954
|
-
|
|
26955
|
-
stepval = __Pyx_NewRef(v);
|
|
26956
|
-
}
|
|
26957
|
-
val = (char) 0;
|
|
26958
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26959
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26960
|
-
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
26961
|
-
PyObject *tmp, *digit;
|
|
26962
|
-
digit = PyNumber_And(stepval, mask);
|
|
26963
|
-
if (unlikely(!digit)) goto done;
|
|
26964
|
-
idigit = PyLong_AsLong(digit);
|
|
26965
|
-
Py_DECREF(digit);
|
|
26966
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26967
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26968
|
-
if (unlikely(!tmp)) goto done;
|
|
26969
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26970
|
-
val |= ((char) idigit) << bits;
|
|
26971
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26972
|
-
if (Py_SIZE(stepval) == 0)
|
|
26973
|
-
goto unpacking_done;
|
|
26974
|
-
#endif
|
|
26975
|
-
}
|
|
26976
|
-
idigit = PyLong_AsLong(stepval);
|
|
26977
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26978
|
-
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26979
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26980
|
-
goto raise_overflow;
|
|
26981
|
-
val |= ((char) idigit) << bits;
|
|
26982
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26983
|
-
unpacking_done:
|
|
26984
|
-
#endif
|
|
26985
|
-
if (!is_unsigned) {
|
|
26986
|
-
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
26987
|
-
goto raise_overflow;
|
|
26988
|
-
if (is_negative)
|
|
26989
|
-
val = ~val;
|
|
26990
|
-
}
|
|
26991
|
-
ret = 0;
|
|
26992
|
-
done:
|
|
26993
|
-
Py_XDECREF(shift);
|
|
26994
|
-
Py_XDECREF(mask);
|
|
26995
|
-
Py_XDECREF(stepval);
|
|
26996
|
-
#endif
|
|
26945
|
+
PyObject *v;
|
|
26946
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26947
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26948
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26949
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26950
|
+
v = __Pyx_NewRef(x);
|
|
26951
|
+
} else {
|
|
26952
|
+
v = PyNumber_Long(x);
|
|
26953
|
+
if (unlikely(!v)) return (char) -1;
|
|
26954
|
+
assert(PyLong_CheckExact(v));
|
|
26955
|
+
}
|
|
26956
|
+
{
|
|
26957
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26958
|
+
if (unlikely(result < 0)) {
|
|
26997
26959
|
Py_DECREF(v);
|
|
26998
|
-
|
|
26999
|
-
return val;
|
|
26960
|
+
return (char) -1;
|
|
27000
26961
|
}
|
|
27001
|
-
|
|
26962
|
+
is_negative = result == 1;
|
|
27002
26963
|
}
|
|
27003
|
-
|
|
27004
|
-
|
|
27005
|
-
|
|
27006
|
-
|
|
27007
|
-
|
|
27008
|
-
|
|
26964
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26965
|
+
Py_DECREF(v);
|
|
26966
|
+
goto raise_neg_overflow;
|
|
26967
|
+
} else if (is_negative) {
|
|
26968
|
+
stepval = PyNumber_Invert(v);
|
|
26969
|
+
Py_DECREF(v);
|
|
26970
|
+
if (unlikely(!stepval))
|
|
26971
|
+
return (char) -1;
|
|
26972
|
+
} else {
|
|
26973
|
+
stepval = v;
|
|
26974
|
+
}
|
|
26975
|
+
v = NULL;
|
|
26976
|
+
val = (char) 0;
|
|
26977
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26978
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26979
|
+
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
26980
|
+
PyObject *tmp, *digit;
|
|
26981
|
+
long idigit;
|
|
26982
|
+
digit = PyNumber_And(stepval, mask);
|
|
26983
|
+
if (unlikely(!digit)) goto done;
|
|
26984
|
+
idigit = PyLong_AsLong(digit);
|
|
26985
|
+
Py_DECREF(digit);
|
|
26986
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26987
|
+
val |= ((char) idigit) << bits;
|
|
26988
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26989
|
+
if (unlikely(!tmp)) goto done;
|
|
26990
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26991
|
+
}
|
|
26992
|
+
Py_DECREF(shift); shift = NULL;
|
|
26993
|
+
Py_DECREF(mask); mask = NULL;
|
|
26994
|
+
{
|
|
26995
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26996
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26997
|
+
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26998
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26999
|
+
goto raise_overflow;
|
|
27000
|
+
val |= ((char) idigit) << bits;
|
|
27001
|
+
}
|
|
27002
|
+
if (!is_unsigned) {
|
|
27003
|
+
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
27004
|
+
goto raise_overflow;
|
|
27005
|
+
if (is_negative)
|
|
27006
|
+
val = ~val;
|
|
27007
|
+
}
|
|
27008
|
+
ret = 0;
|
|
27009
|
+
done:
|
|
27010
|
+
Py_XDECREF(shift);
|
|
27011
|
+
Py_XDECREF(mask);
|
|
27012
|
+
Py_XDECREF(stepval);
|
|
27013
|
+
#endif
|
|
27014
|
+
if (unlikely(ret))
|
|
27015
|
+
return (char) -1;
|
|
27009
27016
|
return val;
|
|
27010
27017
|
}
|
|
27011
27018
|
raise_overflow:
|