scikit-network 0.33.0__cp310-cp310-win_amd64.whl → 0.33.2__cp310-cp310-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.cp310-win_amd64.pyd +0 -0
- sknetwork/classification/vote.cpp +686 -679
- sknetwork/clustering/leiden_core.cp310-win_amd64.pyd +0 -0
- sknetwork/clustering/leiden_core.cpp +715 -704
- sknetwork/clustering/louvain.py +3 -3
- sknetwork/clustering/louvain_core.cp310-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.cp310-win_amd64.pyd +0 -0
- sknetwork/hierarchy/paris.cpp +1766 -1162
- sknetwork/linalg/diteration.cp310-win_amd64.pyd +0 -0
- sknetwork/linalg/diteration.cpp +686 -679
- sknetwork/linalg/push.cp310-win_amd64.pyd +0 -0
- sknetwork/linalg/push.cpp +1763 -1165
- sknetwork/linalg/sparse_lowrank.py +1 -1
- sknetwork/ranking/betweenness.cp310-win_amd64.pyd +0 -0
- sknetwork/ranking/betweenness.cpp +565 -559
- sknetwork/topology/cliques.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/cliques.cpp +1723 -1122
- sknetwork/topology/core.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/core.cpp +1749 -1151
- sknetwork/topology/cycles.py +2 -2
- sknetwork/topology/minheap.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/minheap.cpp +689 -679
- sknetwork/topology/triangles.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/triangles.cpp +439 -434
- sknetwork/topology/weisfeiler_lehman_core.cp310-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
|
@@ -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
|
{
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"/d2FH4-"
|
|
9
9
|
],
|
|
10
10
|
"include_dirs": [
|
|
11
|
-
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\
|
|
11
|
+
"C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pip-build-env-09xj1dam\\overlay\\Lib\\site-packages\\numpy\\_core\\include"
|
|
12
12
|
],
|
|
13
13
|
"language": "c++",
|
|
14
14
|
"name": "sknetwork.clustering.louvain_core",
|
|
@@ -44,10 +44,10 @@ END: Cython Metadata */
|
|
|
44
44
|
#else
|
|
45
45
|
#define __PYX_EXTRA_ABI_MODULE_NAME ""
|
|
46
46
|
#endif
|
|
47
|
-
#define CYTHON_ABI "
|
|
47
|
+
#define CYTHON_ABI "3_0_12" __PYX_EXTRA_ABI_MODULE_NAME
|
|
48
48
|
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
|
|
49
49
|
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
|
|
50
|
-
#define CYTHON_HEX_VERSION
|
|
50
|
+
#define CYTHON_HEX_VERSION 0x03000CF0
|
|
51
51
|
#define CYTHON_FUTURE_DIVISION 1
|
|
52
52
|
#include <stddef.h>
|
|
53
53
|
#ifndef offsetof
|
|
@@ -2051,7 +2051,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
|
|
|
2051
2051
|
#if !CYTHON_VECTORCALL
|
|
2052
2052
|
#if PY_VERSION_HEX >= 0x03080000
|
|
2053
2053
|
#include "frameobject.h"
|
|
2054
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
2054
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
2055
2055
|
#ifndef Py_BUILD_CORE
|
|
2056
2056
|
#define Py_BUILD_CORE 1
|
|
2057
2057
|
#endif
|
|
@@ -2388,11 +2388,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
|
|
|
2388
2388
|
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
|
|
2389
2389
|
|
|
2390
2390
|
/* HasAttr.proto */
|
|
2391
|
-
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
|
|
2392
|
-
#define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
|
|
2393
|
-
#else
|
|
2394
2391
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
|
|
2395
|
-
#endif
|
|
2396
2392
|
|
|
2397
2393
|
/* PyDictContains.proto */
|
|
2398
2394
|
static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) {
|
|
@@ -4695,10 +4691,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4695
4691
|
PyObject *__pyx_t_4 = NULL;
|
|
4696
4692
|
PyObject *__pyx_t_5 = NULL;
|
|
4697
4693
|
PyObject *__pyx_t_6 = NULL;
|
|
4698
|
-
int __pyx_t_7;
|
|
4694
|
+
unsigned int __pyx_t_7;
|
|
4699
4695
|
char *__pyx_t_8;
|
|
4700
|
-
|
|
4701
|
-
|
|
4696
|
+
int __pyx_t_9;
|
|
4697
|
+
Py_ssize_t __pyx_t_10;
|
|
4698
|
+
Py_UCS4 __pyx_t_11;
|
|
4702
4699
|
int __pyx_lineno = 0;
|
|
4703
4700
|
const char *__pyx_filename = NULL;
|
|
4704
4701
|
int __pyx_clineno = 0;
|
|
@@ -4924,7 +4921,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4924
4921
|
* if dim <= 0:
|
|
4925
4922
|
* raise ValueError, f"Invalid shape in axis {idx}: {dim}."
|
|
4926
4923
|
*/
|
|
4927
|
-
|
|
4924
|
+
__pyx_t_9 = 0;
|
|
4928
4925
|
__pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4);
|
|
4929
4926
|
__pyx_t_1 = 0;
|
|
4930
4927
|
for (;;) {
|
|
@@ -4941,11 +4938,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4941
4938
|
__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)
|
|
4942
4939
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4943
4940
|
#endif
|
|
4944
|
-
|
|
4941
|
+
__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)
|
|
4945
4942
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4946
|
-
__pyx_v_dim =
|
|
4947
|
-
__pyx_v_idx =
|
|
4948
|
-
|
|
4943
|
+
__pyx_v_dim = __pyx_t_10;
|
|
4944
|
+
__pyx_v_idx = __pyx_t_9;
|
|
4945
|
+
__pyx_t_9 = (__pyx_t_9 + 1);
|
|
4949
4946
|
|
|
4950
4947
|
/* "View.MemoryView":160
|
|
4951
4948
|
*
|
|
@@ -4966,33 +4963,33 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4966
4963
|
*/
|
|
4967
4964
|
__pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4968
4965
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4969
|
-
|
|
4970
|
-
|
|
4966
|
+
__pyx_t_10 = 0;
|
|
4967
|
+
__pyx_t_11 = 127;
|
|
4971
4968
|
__Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4972
|
-
|
|
4969
|
+
__pyx_t_10 += 22;
|
|
4973
4970
|
__Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4974
4971
|
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis);
|
|
4975
4972
|
__pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4976
4973
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4977
|
-
|
|
4974
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4978
4975
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4979
4976
|
PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
|
|
4980
4977
|
__pyx_t_6 = 0;
|
|
4981
4978
|
__Pyx_INCREF(__pyx_kp_u_);
|
|
4982
|
-
|
|
4979
|
+
__pyx_t_10 += 2;
|
|
4983
4980
|
__Pyx_GIVEREF(__pyx_kp_u_);
|
|
4984
4981
|
PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_);
|
|
4985
4982
|
__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)
|
|
4986
4983
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4987
|
-
|
|
4984
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4988
4985
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4989
4986
|
PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6);
|
|
4990
4987
|
__pyx_t_6 = 0;
|
|
4991
4988
|
__Pyx_INCREF(__pyx_kp_u__2);
|
|
4992
|
-
|
|
4989
|
+
__pyx_t_10 += 1;
|
|
4993
4990
|
__Pyx_GIVEREF(__pyx_kp_u__2);
|
|
4994
4991
|
PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2);
|
|
4995
|
-
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5,
|
|
4992
|
+
__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)
|
|
4996
4993
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4997
4994
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4998
4995
|
__Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
|
|
@@ -5176,7 +5173,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
5176
5173
|
*
|
|
5177
5174
|
* @cname('getbuffer')
|
|
5178
5175
|
*/
|
|
5179
|
-
|
|
5176
|
+
__pyx_t_9 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
|
|
5180
5177
|
|
|
5181
5178
|
/* "View.MemoryView":179
|
|
5182
5179
|
* self.dtype_is_object = format == b'O'
|
|
@@ -8331,7 +8328,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
8331
8328
|
*
|
|
8332
8329
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
8333
8330
|
* obj = self.is_slice(value)
|
|
8334
|
-
* if obj:
|
|
8331
|
+
* if obj is not None:
|
|
8335
8332
|
*/
|
|
8336
8333
|
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error)
|
|
8337
8334
|
if (__pyx_t_4) {
|
|
@@ -8340,7 +8337,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
8340
8337
|
*
|
|
8341
8338
|
* if have_slices:
|
|
8342
8339
|
* obj = self.is_slice(value) # <<<<<<<<<<<<<<
|
|
8343
|
-
* if obj:
|
|
8340
|
+
* if obj is not None:
|
|
8344
8341
|
* self.setitem_slice_assignment(self[index], obj)
|
|
8345
8342
|
*/
|
|
8346
8343
|
__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)
|
|
@@ -8351,16 +8348,16 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
8351
8348
|
/* "View.MemoryView":428
|
|
8352
8349
|
* if have_slices:
|
|
8353
8350
|
* obj = self.is_slice(value)
|
|
8354
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
8351
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
8355
8352
|
* self.setitem_slice_assignment(self[index], obj)
|
|
8356
8353
|
* else:
|
|
8357
8354
|
*/
|
|
8358
|
-
__pyx_t_4 =
|
|
8355
|
+
__pyx_t_4 = (__pyx_v_obj != Py_None);
|
|
8359
8356
|
if (__pyx_t_4) {
|
|
8360
8357
|
|
|
8361
8358
|
/* "View.MemoryView":429
|
|
8362
8359
|
* obj = self.is_slice(value)
|
|
8363
|
-
* if obj:
|
|
8360
|
+
* if obj is not None:
|
|
8364
8361
|
* self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
|
|
8365
8362
|
* else:
|
|
8366
8363
|
* self.setitem_slice_assign_scalar(self[index], value)
|
|
@@ -8375,7 +8372,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
8375
8372
|
/* "View.MemoryView":428
|
|
8376
8373
|
* if have_slices:
|
|
8377
8374
|
* obj = self.is_slice(value)
|
|
8378
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
8375
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
8379
8376
|
* self.setitem_slice_assignment(self[index], obj)
|
|
8380
8377
|
* else:
|
|
8381
8378
|
*/
|
|
@@ -8405,7 +8402,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
8405
8402
|
*
|
|
8406
8403
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
8407
8404
|
* obj = self.is_slice(value)
|
|
8408
|
-
* if obj:
|
|
8405
|
+
* if obj is not None:
|
|
8409
8406
|
*/
|
|
8410
8407
|
goto __pyx_L4;
|
|
8411
8408
|
}
|
|
@@ -9113,9 +9110,10 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
9113
9110
|
PyObject *__pyx_t_5 = NULL;
|
|
9114
9111
|
PyObject *__pyx_t_6 = NULL;
|
|
9115
9112
|
PyObject *__pyx_t_7 = NULL;
|
|
9116
|
-
int __pyx_t_8;
|
|
9113
|
+
unsigned int __pyx_t_8;
|
|
9117
9114
|
Py_ssize_t __pyx_t_9;
|
|
9118
9115
|
int __pyx_t_10;
|
|
9116
|
+
int __pyx_t_11;
|
|
9119
9117
|
int __pyx_lineno = 0;
|
|
9120
9118
|
const char *__pyx_filename = NULL;
|
|
9121
9119
|
int __pyx_clineno = 0;
|
|
@@ -9270,11 +9268,11 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
9270
9268
|
__Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6);
|
|
9271
9269
|
__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)
|
|
9272
9270
|
__Pyx_GOTREF(__pyx_t_7);
|
|
9273
|
-
|
|
9271
|
+
__pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
|
|
9274
9272
|
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
|
|
9275
9273
|
__Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6);
|
|
9276
9274
|
__pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
|
|
9277
|
-
if (
|
|
9275
|
+
if (__pyx_t_11) {
|
|
9278
9276
|
__Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
|
|
9279
9277
|
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error)
|
|
9280
9278
|
__Pyx_XGOTREF(__pyx_t_6);
|
|
@@ -9359,7 +9357,7 @@ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryvie
|
|
|
9359
9357
|
PyObject *__pyx_t_3 = NULL;
|
|
9360
9358
|
PyObject *__pyx_t_4 = NULL;
|
|
9361
9359
|
PyObject *__pyx_t_5 = NULL;
|
|
9362
|
-
int __pyx_t_6;
|
|
9360
|
+
unsigned int __pyx_t_6;
|
|
9363
9361
|
Py_ssize_t __pyx_t_7;
|
|
9364
9362
|
PyObject *__pyx_t_8 = NULL;
|
|
9365
9363
|
char *__pyx_t_9;
|
|
@@ -17833,7 +17831,7 @@ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSE
|
|
|
17833
17831
|
int __pyx_t_2;
|
|
17834
17832
|
PyObject *__pyx_t_3 = NULL;
|
|
17835
17833
|
PyObject *__pyx_t_4 = NULL;
|
|
17836
|
-
int __pyx_t_5;
|
|
17834
|
+
unsigned int __pyx_t_5;
|
|
17837
17835
|
int __pyx_lineno = 0;
|
|
17838
17836
|
const char *__pyx_filename = NULL;
|
|
17839
17837
|
int __pyx_clineno = 0;
|
|
@@ -18015,7 +18013,7 @@ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__
|
|
|
18015
18013
|
PyObject *__pyx_t_5 = NULL;
|
|
18016
18014
|
PyObject *__pyx_t_6 = NULL;
|
|
18017
18015
|
PyObject *__pyx_t_7 = NULL;
|
|
18018
|
-
int __pyx_t_8;
|
|
18016
|
+
unsigned int __pyx_t_8;
|
|
18019
18017
|
int __pyx_lineno = 0;
|
|
18020
18018
|
const char *__pyx_filename = NULL;
|
|
18021
18019
|
int __pyx_clineno = 0;
|
|
@@ -18332,8 +18330,9 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18332
18330
|
int __pyx_t_15;
|
|
18333
18331
|
PyObject *__pyx_t_16 = NULL;
|
|
18334
18332
|
PyObject *__pyx_t_17 = NULL;
|
|
18335
|
-
|
|
18336
|
-
|
|
18333
|
+
unsigned int __pyx_t_18;
|
|
18334
|
+
Py_ssize_t __pyx_t_19;
|
|
18335
|
+
int __pyx_t_20;
|
|
18337
18336
|
int __pyx_lineno = 0;
|
|
18338
18337
|
const char *__pyx_filename = NULL;
|
|
18339
18338
|
int __pyx_clineno = 0;
|
|
@@ -18711,7 +18710,7 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18711
18710
|
__pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18712
18711
|
__Pyx_GOTREF(__pyx_t_16);
|
|
18713
18712
|
__pyx_t_17 = NULL;
|
|
18714
|
-
|
|
18713
|
+
__pyx_t_18 = 0;
|
|
18715
18714
|
#if CYTHON_UNPACK_METHODS
|
|
18716
18715
|
if (likely(PyMethod_Check(__pyx_t_16))) {
|
|
18717
18716
|
__pyx_t_17 = PyMethod_GET_SELF(__pyx_t_16);
|
|
@@ -18720,13 +18719,13 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18720
18719
|
__Pyx_INCREF(__pyx_t_17);
|
|
18721
18720
|
__Pyx_INCREF(function);
|
|
18722
18721
|
__Pyx_DECREF_SET(__pyx_t_16, function);
|
|
18723
|
-
|
|
18722
|
+
__pyx_t_18 = 1;
|
|
18724
18723
|
}
|
|
18725
18724
|
}
|
|
18726
18725
|
#endif
|
|
18727
18726
|
{
|
|
18728
18727
|
PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_kp_s__9};
|
|
18729
|
-
__pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-
|
|
18728
|
+
__pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_18, 1+__pyx_t_18);
|
|
18730
18729
|
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
|
|
18731
18730
|
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18732
18731
|
__Pyx_GOTREF(__pyx_t_6);
|
|
@@ -18736,7 +18735,7 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18736
18735
|
__Pyx_GOTREF(__pyx_t_16);
|
|
18737
18736
|
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
|
|
18738
18737
|
__pyx_t_6 = NULL;
|
|
18739
|
-
|
|
18738
|
+
__pyx_t_18 = 0;
|
|
18740
18739
|
#if CYTHON_UNPACK_METHODS
|
|
18741
18740
|
if (likely(PyMethod_Check(__pyx_t_16))) {
|
|
18742
18741
|
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_16);
|
|
@@ -18745,13 +18744,13 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18745
18744
|
__Pyx_INCREF(__pyx_t_6);
|
|
18746
18745
|
__Pyx_INCREF(function);
|
|
18747
18746
|
__Pyx_DECREF_SET(__pyx_t_16, function);
|
|
18748
|
-
|
|
18747
|
+
__pyx_t_18 = 1;
|
|
18749
18748
|
}
|
|
18750
18749
|
}
|
|
18751
18750
|
#endif
|
|
18752
18751
|
{
|
|
18753
18752
|
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_kp_s__10};
|
|
18754
|
-
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-
|
|
18753
|
+
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_18, 1+__pyx_t_18);
|
|
18755
18754
|
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
|
|
18756
18755
|
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18757
18756
|
__Pyx_GOTREF(__pyx_t_1);
|
|
@@ -18760,19 +18759,19 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18760
18759
|
__pyx_t_16 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18761
18760
|
__Pyx_GOTREF(__pyx_t_16);
|
|
18762
18761
|
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
|
|
18763
|
-
|
|
18764
|
-
if (unlikely(
|
|
18765
|
-
__Pyx_RaiseNeedMoreValuesError(0+
|
|
18762
|
+
__pyx_t_19 = PyList_GET_SIZE(__pyx_t_16);
|
|
18763
|
+
if (unlikely(__pyx_t_19 < 1)) {
|
|
18764
|
+
__Pyx_RaiseNeedMoreValuesError(0+__pyx_t_19); __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18766
18765
|
}
|
|
18767
18766
|
#if CYTHON_COMPILING_IN_CPYTHON
|
|
18768
|
-
__pyx_t_6 = PyList_GET_ITEM(__pyx_t_16,
|
|
18767
|
+
__pyx_t_6 = PyList_GET_ITEM(__pyx_t_16, __pyx_t_19-1);
|
|
18769
18768
|
((PyVarObject*)__pyx_t_16)->ob_size--;
|
|
18770
18769
|
#else
|
|
18771
|
-
__pyx_t_6 = PySequence_ITEM(__pyx_t_16,
|
|
18770
|
+
__pyx_t_6 = PySequence_ITEM(__pyx_t_16, __pyx_t_19-1);
|
|
18772
18771
|
#endif
|
|
18773
18772
|
__Pyx_GOTREF(__pyx_t_6);
|
|
18774
18773
|
#if !CYTHON_COMPILING_IN_CPYTHON
|
|
18775
|
-
__pyx_t_17 = PySequence_GetSlice(__pyx_t_16, 0,
|
|
18774
|
+
__pyx_t_17 = PySequence_GetSlice(__pyx_t_16, 0, __pyx_t_19-1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18776
18775
|
__Pyx_GOTREF(__pyx_t_17);
|
|
18777
18776
|
__Pyx_DECREF(__pyx_t_16);
|
|
18778
18777
|
__pyx_t_16 = __pyx_t_17; __pyx_t_17 = NULL;
|
|
@@ -18784,19 +18783,19 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18784
18783
|
__Pyx_XDECREF_SET(__pyx_v_last_type, __pyx_t_6);
|
|
18785
18784
|
__pyx_t_6 = 0;
|
|
18786
18785
|
__pyx_t_1 = __pyx_v_sig_series; __Pyx_INCREF(__pyx_t_1);
|
|
18787
|
-
|
|
18786
|
+
__pyx_t_19 = 0;
|
|
18788
18787
|
for (;;) {
|
|
18789
18788
|
{
|
|
18790
18789
|
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
|
|
18791
18790
|
#if !CYTHON_ASSUME_SAFE_MACROS
|
|
18792
18791
|
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18793
18792
|
#endif
|
|
18794
|
-
if (
|
|
18793
|
+
if (__pyx_t_19 >= __pyx_temp) break;
|
|
18795
18794
|
}
|
|
18796
18795
|
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
|
|
18797
|
-
__pyx_t_6 = PyList_GET_ITEM(__pyx_t_1,
|
|
18796
|
+
__pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_6); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18798
18797
|
#else
|
|
18799
|
-
__pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_1,
|
|
18798
|
+
__pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18800
18799
|
__Pyx_GOTREF(__pyx_t_6);
|
|
18801
18800
|
#endif
|
|
18802
18801
|
__Pyx_XDECREF_SET(__pyx_v_sig_type, __pyx_t_6);
|
|
@@ -18906,7 +18905,7 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18906
18905
|
}
|
|
18907
18906
|
__pyx_t_16 = __Pyx_PyDict_Values(((PyObject*)__pyx_v_sn)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18908
18907
|
__Pyx_GOTREF(__pyx_t_16);
|
|
18909
|
-
|
|
18908
|
+
__pyx_t_20 = __Pyx_PyList_Extend(__pyx_v_found_matches, __pyx_t_16); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18910
18909
|
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
|
|
18911
18910
|
}
|
|
18912
18911
|
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
|
|
@@ -18934,7 +18933,7 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18934
18933
|
}
|
|
18935
18934
|
__pyx_t_16 = __Pyx_PyDict_Values(((PyObject*)__pyx_v_sn)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18936
18935
|
__Pyx_GOTREF(__pyx_t_16);
|
|
18937
|
-
|
|
18936
|
+
__pyx_t_20 = __Pyx_PyList_Extend(__pyx_v_found_candidates, __pyx_t_16); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18938
18937
|
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
|
|
18939
18938
|
}
|
|
18940
18939
|
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
|
|
@@ -18967,19 +18966,19 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18967
18966
|
__PYX_ERR(0, 10, __pyx_L1_error)
|
|
18968
18967
|
}
|
|
18969
18968
|
__pyx_t_1 = __pyx_v_search_list; __Pyx_INCREF(__pyx_t_1);
|
|
18970
|
-
|
|
18969
|
+
__pyx_t_19 = 0;
|
|
18971
18970
|
for (;;) {
|
|
18972
18971
|
{
|
|
18973
18972
|
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
|
|
18974
18973
|
#if !CYTHON_ASSUME_SAFE_MACROS
|
|
18975
18974
|
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18976
18975
|
#endif
|
|
18977
|
-
if (
|
|
18976
|
+
if (__pyx_t_19 >= __pyx_temp) break;
|
|
18978
18977
|
}
|
|
18979
18978
|
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
|
|
18980
|
-
__pyx_t_6 = PyList_GET_ITEM(__pyx_t_1,
|
|
18979
|
+
__pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_6); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18981
18980
|
#else
|
|
18982
|
-
__pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_1,
|
|
18981
|
+
__pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18983
18982
|
__Pyx_GOTREF(__pyx_t_6);
|
|
18984
18983
|
#endif
|
|
18985
18984
|
__Pyx_XDECREF_SET(__pyx_v_sn, __pyx_t_6);
|
|
@@ -18994,7 +18993,7 @@ static PyObject *__pyx_pf_9sknetwork_10clustering_12louvain_core_optimize_core(C
|
|
|
18994
18993
|
__pyx_t_6 = 0;
|
|
18995
18994
|
__pyx_t_4 = (__pyx_v_type_match != Py_None);
|
|
18996
18995
|
if (__pyx_t_4) {
|
|
18997
|
-
|
|
18996
|
+
__pyx_t_20 = __Pyx_PyList_Append(__pyx_v_found_matches, __pyx_v_type_match); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 10, __pyx_L1_error)
|
|
18998
18997
|
}
|
|
18999
18998
|
}
|
|
19000
18999
|
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
|
|
@@ -20988,6 +20987,9 @@ static PyTypeObject __pyx_type___pyx_array = {
|
|
|
20988
20987
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
20989
20988
|
0, /*tp_watched*/
|
|
20990
20989
|
#endif
|
|
20990
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
20991
|
+
0, /*tp_versions_used*/
|
|
20992
|
+
#endif
|
|
20991
20993
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
20992
20994
|
0, /*tp_pypy_flags*/
|
|
20993
20995
|
#endif
|
|
@@ -21158,6 +21160,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
|
|
|
21158
21160
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
21159
21161
|
0, /*tp_watched*/
|
|
21160
21162
|
#endif
|
|
21163
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
21164
|
+
0, /*tp_versions_used*/
|
|
21165
|
+
#endif
|
|
21161
21166
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
21162
21167
|
0, /*tp_pypy_flags*/
|
|
21163
21168
|
#endif
|
|
@@ -21501,6 +21506,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
|
|
|
21501
21506
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
21502
21507
|
0, /*tp_watched*/
|
|
21503
21508
|
#endif
|
|
21509
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
21510
|
+
0, /*tp_versions_used*/
|
|
21511
|
+
#endif
|
|
21504
21512
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
21505
21513
|
0, /*tp_pypy_flags*/
|
|
21506
21514
|
#endif
|
|
@@ -21673,6 +21681,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
|
|
|
21673
21681
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
21674
21682
|
0, /*tp_watched*/
|
|
21675
21683
|
#endif
|
|
21684
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
21685
|
+
0, /*tp_versions_used*/
|
|
21686
|
+
#endif
|
|
21676
21687
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
21677
21688
|
0, /*tp_pypy_flags*/
|
|
21678
21689
|
#endif
|
|
@@ -25617,7 +25628,6 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
|
|
|
25617
25628
|
}
|
|
25618
25629
|
|
|
25619
25630
|
/* HasAttr */
|
|
25620
|
-
#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
|
|
25621
25631
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
25622
25632
|
PyObject *r;
|
|
25623
25633
|
if (unlikely(!__Pyx_PyBaseString_Check(n))) {
|
|
@@ -25634,7 +25644,6 @@ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
|
25634
25644
|
return 1;
|
|
25635
25645
|
}
|
|
25636
25646
|
}
|
|
25637
|
-
#endif
|
|
25638
25647
|
|
|
25639
25648
|
/* DictGetItem */
|
|
25640
25649
|
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
|
|
@@ -27928,6 +27937,9 @@ static PyTypeObject __pyx_CyFunctionType_type = {
|
|
|
27928
27937
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
27929
27938
|
0,
|
|
27930
27939
|
#endif
|
|
27940
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
27941
|
+
0,
|
|
27942
|
+
#endif
|
|
27931
27943
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
27932
27944
|
0,
|
|
27933
27945
|
#endif
|
|
@@ -28305,6 +28317,9 @@ static PyTypeObject __pyx_FusedFunctionType_type = {
|
|
|
28305
28317
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
28306
28318
|
0,
|
|
28307
28319
|
#endif
|
|
28320
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
28321
|
+
0,
|
|
28322
|
+
#endif
|
|
28308
28323
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
28309
28324
|
0,
|
|
28310
28325
|
#endif
|
|
@@ -28458,7 +28473,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
|
|
|
28458
28473
|
#include "compile.h"
|
|
28459
28474
|
#include "frameobject.h"
|
|
28460
28475
|
#include "traceback.h"
|
|
28461
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
28476
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
28462
28477
|
#ifndef Py_BUILD_CORE
|
|
28463
28478
|
#define Py_BUILD_CORE 1
|
|
28464
28479
|
#endif
|
|
@@ -29892,12 +29907,19 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice,
|
|
|
29892
29907
|
}
|
|
29893
29908
|
}
|
|
29894
29909
|
{
|
|
29895
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
29896
29910
|
unsigned char *bytes = (unsigned char *)&value;
|
|
29897
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
29911
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
29912
|
+
if (is_unsigned) {
|
|
29913
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
29914
|
+
} else {
|
|
29915
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
29916
|
+
}
|
|
29917
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
29918
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
29898
29919
|
return _PyLong_FromByteArray(bytes, sizeof(long),
|
|
29899
29920
|
little, !is_unsigned);
|
|
29900
29921
|
#else
|
|
29922
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
29901
29923
|
PyObject *from_bytes, *result = NULL;
|
|
29902
29924
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
29903
29925
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -29947,245 +29969,239 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice,
|
|
|
29947
29969
|
}
|
|
29948
29970
|
return (int) val;
|
|
29949
29971
|
}
|
|
29950
|
-
}
|
|
29972
|
+
}
|
|
29951
29973
|
#endif
|
|
29952
|
-
if (
|
|
29953
|
-
|
|
29974
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
29975
|
+
int val;
|
|
29976
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
29977
|
+
if (!tmp) return (int) -1;
|
|
29978
|
+
val = __Pyx_PyInt_As_int(tmp);
|
|
29979
|
+
Py_DECREF(tmp);
|
|
29980
|
+
return val;
|
|
29981
|
+
}
|
|
29982
|
+
if (is_unsigned) {
|
|
29954
29983
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
29955
|
-
|
|
29956
|
-
|
|
29957
|
-
|
|
29958
|
-
|
|
29959
|
-
|
|
29960
|
-
|
|
29961
|
-
|
|
29962
|
-
|
|
29963
|
-
|
|
29964
|
-
|
|
29965
|
-
|
|
29966
|
-
|
|
29967
|
-
|
|
29968
|
-
|
|
29969
|
-
}
|
|
29984
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
29985
|
+
goto raise_neg_overflow;
|
|
29986
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
29987
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
29988
|
+
} else {
|
|
29989
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
29990
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
29991
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
29992
|
+
case 2:
|
|
29993
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
29994
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
29995
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
29996
|
+
} else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
|
|
29997
|
+
return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
29970
29998
|
}
|
|
29971
|
-
|
|
29972
|
-
|
|
29973
|
-
|
|
29974
|
-
|
|
29975
|
-
|
|
29976
|
-
|
|
29977
|
-
|
|
29978
|
-
|
|
29999
|
+
}
|
|
30000
|
+
break;
|
|
30001
|
+
case 3:
|
|
30002
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
30003
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30004
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30005
|
+
} else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
|
|
30006
|
+
return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
29979
30007
|
}
|
|
29980
|
-
|
|
29981
|
-
|
|
29982
|
-
|
|
29983
|
-
|
|
29984
|
-
|
|
29985
|
-
|
|
29986
|
-
|
|
29987
|
-
|
|
30008
|
+
}
|
|
30009
|
+
break;
|
|
30010
|
+
case 4:
|
|
30011
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
30012
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30013
|
+
__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])))
|
|
30014
|
+
} else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
|
|
30015
|
+
return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
29988
30016
|
}
|
|
29989
|
-
|
|
29990
|
-
|
|
30017
|
+
}
|
|
30018
|
+
break;
|
|
29991
30019
|
}
|
|
30020
|
+
}
|
|
29992
30021
|
#endif
|
|
29993
30022
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
29994
|
-
|
|
29995
|
-
|
|
29996
|
-
|
|
30023
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
30024
|
+
goto raise_neg_overflow;
|
|
30025
|
+
}
|
|
29997
30026
|
#else
|
|
29998
|
-
|
|
29999
|
-
|
|
30000
|
-
|
|
30001
|
-
|
|
30002
|
-
|
|
30003
|
-
|
|
30004
|
-
|
|
30027
|
+
{
|
|
30028
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
30029
|
+
if (unlikely(result < 0))
|
|
30030
|
+
return (int) -1;
|
|
30031
|
+
if (unlikely(result == 1))
|
|
30032
|
+
goto raise_neg_overflow;
|
|
30033
|
+
}
|
|
30005
30034
|
#endif
|
|
30006
|
-
|
|
30007
|
-
|
|
30035
|
+
if ((sizeof(int) <= sizeof(unsigned long))) {
|
|
30036
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
|
|
30008
30037
|
#ifdef HAVE_LONG_LONG
|
|
30009
|
-
|
|
30010
|
-
|
|
30038
|
+
} else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
30039
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
30011
30040
|
#endif
|
|
30012
|
-
|
|
30013
|
-
|
|
30041
|
+
}
|
|
30042
|
+
} else {
|
|
30014
30043
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
30015
|
-
|
|
30016
|
-
|
|
30017
|
-
|
|
30018
|
-
|
|
30019
|
-
|
|
30020
|
-
|
|
30021
|
-
|
|
30022
|
-
|
|
30023
|
-
|
|
30024
|
-
|
|
30025
|
-
|
|
30026
|
-
|
|
30027
|
-
}
|
|
30044
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
30045
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
30046
|
+
} else {
|
|
30047
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
30048
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
30049
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
30050
|
+
case -2:
|
|
30051
|
+
if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
|
|
30052
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
30053
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30054
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
30055
|
+
return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
30028
30056
|
}
|
|
30029
|
-
|
|
30030
|
-
|
|
30031
|
-
|
|
30032
|
-
|
|
30033
|
-
|
|
30034
|
-
|
|
30035
|
-
|
|
30036
|
-
|
|
30057
|
+
}
|
|
30058
|
+
break;
|
|
30059
|
+
case 2:
|
|
30060
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
30061
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
30062
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30063
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
30064
|
+
return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
30037
30065
|
}
|
|
30038
|
-
|
|
30039
|
-
|
|
30040
|
-
|
|
30041
|
-
|
|
30042
|
-
|
|
30043
|
-
|
|
30044
|
-
|
|
30045
|
-
|
|
30066
|
+
}
|
|
30067
|
+
break;
|
|
30068
|
+
case -3:
|
|
30069
|
+
if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
30070
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30071
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30072
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
30073
|
+
return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
30046
30074
|
}
|
|
30047
|
-
|
|
30048
|
-
|
|
30049
|
-
|
|
30050
|
-
|
|
30051
|
-
|
|
30052
|
-
|
|
30053
|
-
|
|
30054
|
-
|
|
30075
|
+
}
|
|
30076
|
+
break;
|
|
30077
|
+
case 3:
|
|
30078
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
30079
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30080
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30081
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
30082
|
+
return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
30055
30083
|
}
|
|
30056
|
-
|
|
30057
|
-
|
|
30058
|
-
|
|
30059
|
-
|
|
30060
|
-
|
|
30061
|
-
|
|
30062
|
-
|
|
30063
|
-
|
|
30084
|
+
}
|
|
30085
|
+
break;
|
|
30086
|
+
case -4:
|
|
30087
|
+
if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
30088
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30089
|
+
__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])))
|
|
30090
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
30091
|
+
return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
30064
30092
|
}
|
|
30065
|
-
|
|
30066
|
-
|
|
30067
|
-
|
|
30068
|
-
|
|
30069
|
-
|
|
30070
|
-
|
|
30071
|
-
|
|
30072
|
-
|
|
30093
|
+
}
|
|
30094
|
+
break;
|
|
30095
|
+
case 4:
|
|
30096
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
30097
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30098
|
+
__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])))
|
|
30099
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
30100
|
+
return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
30073
30101
|
}
|
|
30074
|
-
|
|
30075
|
-
|
|
30102
|
+
}
|
|
30103
|
+
break;
|
|
30076
30104
|
}
|
|
30105
|
+
}
|
|
30077
30106
|
#endif
|
|
30078
|
-
|
|
30079
|
-
|
|
30107
|
+
if ((sizeof(int) <= sizeof(long))) {
|
|
30108
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
|
|
30080
30109
|
#ifdef HAVE_LONG_LONG
|
|
30081
|
-
|
|
30082
|
-
|
|
30110
|
+
} else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
|
|
30111
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
30083
30112
|
#endif
|
|
30084
|
-
|
|
30113
|
+
}
|
|
30114
|
+
}
|
|
30115
|
+
{
|
|
30116
|
+
int val;
|
|
30117
|
+
int ret = -1;
|
|
30118
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
30119
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
30120
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
30121
|
+
if (unlikely(bytes_copied == -1)) {
|
|
30122
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
30123
|
+
goto raise_overflow;
|
|
30124
|
+
} else {
|
|
30125
|
+
ret = 0;
|
|
30126
|
+
}
|
|
30127
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
30128
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
30129
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
30130
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
30131
|
+
bytes, sizeof(val),
|
|
30132
|
+
is_little, !is_unsigned);
|
|
30133
|
+
#else
|
|
30134
|
+
PyObject *v;
|
|
30135
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
30136
|
+
int bits, remaining_bits, is_negative = 0;
|
|
30137
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
30138
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
30139
|
+
v = __Pyx_NewRef(x);
|
|
30140
|
+
} else {
|
|
30141
|
+
v = PyNumber_Long(x);
|
|
30142
|
+
if (unlikely(!v)) return (int) -1;
|
|
30143
|
+
assert(PyLong_CheckExact(v));
|
|
30085
30144
|
}
|
|
30086
30145
|
{
|
|
30087
|
-
int
|
|
30088
|
-
|
|
30089
|
-
#if PY_MAJOR_VERSION < 3
|
|
30090
|
-
if (likely(v) && !PyLong_Check(v)) {
|
|
30091
|
-
PyObject *tmp = v;
|
|
30092
|
-
v = PyNumber_Long(tmp);
|
|
30093
|
-
Py_DECREF(tmp);
|
|
30094
|
-
}
|
|
30095
|
-
#endif
|
|
30096
|
-
if (likely(v)) {
|
|
30097
|
-
int ret = -1;
|
|
30098
|
-
#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
30099
|
-
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
30100
|
-
unsigned char *bytes = (unsigned char *)&val;
|
|
30101
|
-
ret = _PyLong_AsByteArray((PyLongObject *)v,
|
|
30102
|
-
bytes, sizeof(val),
|
|
30103
|
-
is_little, !is_unsigned);
|
|
30104
|
-
#else
|
|
30105
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
30106
|
-
int bits, remaining_bits, is_negative = 0;
|
|
30107
|
-
long idigit;
|
|
30108
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
30109
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
30110
|
-
PyObject *tmp = v;
|
|
30111
|
-
v = PyNumber_Long(v);
|
|
30112
|
-
assert(PyLong_CheckExact(v));
|
|
30113
|
-
Py_DECREF(tmp);
|
|
30114
|
-
if (unlikely(!v)) return (int) -1;
|
|
30115
|
-
}
|
|
30116
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30117
|
-
if (Py_SIZE(x) == 0)
|
|
30118
|
-
return (int) 0;
|
|
30119
|
-
is_negative = Py_SIZE(x) < 0;
|
|
30120
|
-
#else
|
|
30121
|
-
{
|
|
30122
|
-
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
30123
|
-
if (unlikely(result < 0))
|
|
30124
|
-
return (int) -1;
|
|
30125
|
-
is_negative = result == 1;
|
|
30126
|
-
}
|
|
30127
|
-
#endif
|
|
30128
|
-
if (is_unsigned && unlikely(is_negative)) {
|
|
30129
|
-
goto raise_neg_overflow;
|
|
30130
|
-
} else if (is_negative) {
|
|
30131
|
-
stepval = PyNumber_Invert(v);
|
|
30132
|
-
if (unlikely(!stepval))
|
|
30133
|
-
return (int) -1;
|
|
30134
|
-
} else {
|
|
30135
|
-
stepval = __Pyx_NewRef(v);
|
|
30136
|
-
}
|
|
30137
|
-
val = (int) 0;
|
|
30138
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
30139
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
30140
|
-
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
30141
|
-
PyObject *tmp, *digit;
|
|
30142
|
-
digit = PyNumber_And(stepval, mask);
|
|
30143
|
-
if (unlikely(!digit)) goto done;
|
|
30144
|
-
idigit = PyLong_AsLong(digit);
|
|
30145
|
-
Py_DECREF(digit);
|
|
30146
|
-
if (unlikely(idigit < 0)) goto done;
|
|
30147
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
30148
|
-
if (unlikely(!tmp)) goto done;
|
|
30149
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
30150
|
-
val |= ((int) idigit) << bits;
|
|
30151
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30152
|
-
if (Py_SIZE(stepval) == 0)
|
|
30153
|
-
goto unpacking_done;
|
|
30154
|
-
#endif
|
|
30155
|
-
}
|
|
30156
|
-
idigit = PyLong_AsLong(stepval);
|
|
30157
|
-
if (unlikely(idigit < 0)) goto done;
|
|
30158
|
-
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
30159
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
30160
|
-
goto raise_overflow;
|
|
30161
|
-
val |= ((int) idigit) << bits;
|
|
30162
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30163
|
-
unpacking_done:
|
|
30164
|
-
#endif
|
|
30165
|
-
if (!is_unsigned) {
|
|
30166
|
-
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
30167
|
-
goto raise_overflow;
|
|
30168
|
-
if (is_negative)
|
|
30169
|
-
val = ~val;
|
|
30170
|
-
}
|
|
30171
|
-
ret = 0;
|
|
30172
|
-
done:
|
|
30173
|
-
Py_XDECREF(shift);
|
|
30174
|
-
Py_XDECREF(mask);
|
|
30175
|
-
Py_XDECREF(stepval);
|
|
30176
|
-
#endif
|
|
30146
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
30147
|
+
if (unlikely(result < 0)) {
|
|
30177
30148
|
Py_DECREF(v);
|
|
30178
|
-
|
|
30179
|
-
return val;
|
|
30149
|
+
return (int) -1;
|
|
30180
30150
|
}
|
|
30181
|
-
|
|
30151
|
+
is_negative = result == 1;
|
|
30152
|
+
}
|
|
30153
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
30154
|
+
Py_DECREF(v);
|
|
30155
|
+
goto raise_neg_overflow;
|
|
30156
|
+
} else if (is_negative) {
|
|
30157
|
+
stepval = PyNumber_Invert(v);
|
|
30158
|
+
Py_DECREF(v);
|
|
30159
|
+
if (unlikely(!stepval))
|
|
30160
|
+
return (int) -1;
|
|
30161
|
+
} else {
|
|
30162
|
+
stepval = v;
|
|
30163
|
+
}
|
|
30164
|
+
v = NULL;
|
|
30165
|
+
val = (int) 0;
|
|
30166
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
30167
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
30168
|
+
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
30169
|
+
PyObject *tmp, *digit;
|
|
30170
|
+
long idigit;
|
|
30171
|
+
digit = PyNumber_And(stepval, mask);
|
|
30172
|
+
if (unlikely(!digit)) goto done;
|
|
30173
|
+
idigit = PyLong_AsLong(digit);
|
|
30174
|
+
Py_DECREF(digit);
|
|
30175
|
+
if (unlikely(idigit < 0)) goto done;
|
|
30176
|
+
val |= ((int) idigit) << bits;
|
|
30177
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
30178
|
+
if (unlikely(!tmp)) goto done;
|
|
30179
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
30180
|
+
}
|
|
30181
|
+
Py_DECREF(shift); shift = NULL;
|
|
30182
|
+
Py_DECREF(mask); mask = NULL;
|
|
30183
|
+
{
|
|
30184
|
+
long idigit = PyLong_AsLong(stepval);
|
|
30185
|
+
if (unlikely(idigit < 0)) goto done;
|
|
30186
|
+
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
30187
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
30188
|
+
goto raise_overflow;
|
|
30189
|
+
val |= ((int) idigit) << bits;
|
|
30182
30190
|
}
|
|
30183
|
-
|
|
30184
|
-
|
|
30185
|
-
|
|
30186
|
-
|
|
30187
|
-
|
|
30188
|
-
|
|
30191
|
+
if (!is_unsigned) {
|
|
30192
|
+
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
30193
|
+
goto raise_overflow;
|
|
30194
|
+
if (is_negative)
|
|
30195
|
+
val = ~val;
|
|
30196
|
+
}
|
|
30197
|
+
ret = 0;
|
|
30198
|
+
done:
|
|
30199
|
+
Py_XDECREF(shift);
|
|
30200
|
+
Py_XDECREF(mask);
|
|
30201
|
+
Py_XDECREF(stepval);
|
|
30202
|
+
#endif
|
|
30203
|
+
if (unlikely(ret))
|
|
30204
|
+
return (int) -1;
|
|
30189
30205
|
return val;
|
|
30190
30206
|
}
|
|
30191
30207
|
raise_overflow:
|
|
@@ -30229,12 +30245,19 @@ raise_neg_overflow:
|
|
|
30229
30245
|
}
|
|
30230
30246
|
}
|
|
30231
30247
|
{
|
|
30232
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
30233
30248
|
unsigned char *bytes = (unsigned char *)&value;
|
|
30234
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
30249
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
30250
|
+
if (is_unsigned) {
|
|
30251
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
30252
|
+
} else {
|
|
30253
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
30254
|
+
}
|
|
30255
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
30256
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
30235
30257
|
return _PyLong_FromByteArray(bytes, sizeof(int),
|
|
30236
30258
|
little, !is_unsigned);
|
|
30237
30259
|
#else
|
|
30260
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
30238
30261
|
PyObject *from_bytes, *result = NULL;
|
|
30239
30262
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
30240
30263
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -30284,245 +30307,239 @@ raise_neg_overflow:
|
|
|
30284
30307
|
}
|
|
30285
30308
|
return (long) val;
|
|
30286
30309
|
}
|
|
30287
|
-
}
|
|
30310
|
+
}
|
|
30288
30311
|
#endif
|
|
30289
|
-
if (
|
|
30290
|
-
|
|
30312
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
30313
|
+
long val;
|
|
30314
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
30315
|
+
if (!tmp) return (long) -1;
|
|
30316
|
+
val = __Pyx_PyInt_As_long(tmp);
|
|
30317
|
+
Py_DECREF(tmp);
|
|
30318
|
+
return val;
|
|
30319
|
+
}
|
|
30320
|
+
if (is_unsigned) {
|
|
30291
30321
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
30292
|
-
|
|
30293
|
-
|
|
30294
|
-
|
|
30295
|
-
|
|
30296
|
-
|
|
30297
|
-
|
|
30298
|
-
|
|
30299
|
-
|
|
30300
|
-
|
|
30301
|
-
|
|
30302
|
-
|
|
30303
|
-
|
|
30304
|
-
|
|
30305
|
-
|
|
30306
|
-
}
|
|
30322
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
30323
|
+
goto raise_neg_overflow;
|
|
30324
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
30325
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
30326
|
+
} else {
|
|
30327
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
30328
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
30329
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
30330
|
+
case 2:
|
|
30331
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
30332
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
30333
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30334
|
+
} else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
|
|
30335
|
+
return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
30307
30336
|
}
|
|
30308
|
-
|
|
30309
|
-
|
|
30310
|
-
|
|
30311
|
-
|
|
30312
|
-
|
|
30313
|
-
|
|
30314
|
-
|
|
30315
|
-
|
|
30337
|
+
}
|
|
30338
|
+
break;
|
|
30339
|
+
case 3:
|
|
30340
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
30341
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30342
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30343
|
+
} else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
|
|
30344
|
+
return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
30316
30345
|
}
|
|
30317
|
-
|
|
30318
|
-
|
|
30319
|
-
|
|
30320
|
-
|
|
30321
|
-
|
|
30322
|
-
|
|
30323
|
-
|
|
30324
|
-
|
|
30346
|
+
}
|
|
30347
|
+
break;
|
|
30348
|
+
case 4:
|
|
30349
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
30350
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30351
|
+
__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])))
|
|
30352
|
+
} else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
|
|
30353
|
+
return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
30325
30354
|
}
|
|
30326
|
-
|
|
30327
|
-
|
|
30355
|
+
}
|
|
30356
|
+
break;
|
|
30328
30357
|
}
|
|
30358
|
+
}
|
|
30329
30359
|
#endif
|
|
30330
30360
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
30331
|
-
|
|
30332
|
-
|
|
30333
|
-
|
|
30361
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
30362
|
+
goto raise_neg_overflow;
|
|
30363
|
+
}
|
|
30334
30364
|
#else
|
|
30335
|
-
|
|
30336
|
-
|
|
30337
|
-
|
|
30338
|
-
|
|
30339
|
-
|
|
30340
|
-
|
|
30341
|
-
|
|
30365
|
+
{
|
|
30366
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
30367
|
+
if (unlikely(result < 0))
|
|
30368
|
+
return (long) -1;
|
|
30369
|
+
if (unlikely(result == 1))
|
|
30370
|
+
goto raise_neg_overflow;
|
|
30371
|
+
}
|
|
30342
30372
|
#endif
|
|
30343
|
-
|
|
30344
|
-
|
|
30373
|
+
if ((sizeof(long) <= sizeof(unsigned long))) {
|
|
30374
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
|
|
30345
30375
|
#ifdef HAVE_LONG_LONG
|
|
30346
|
-
|
|
30347
|
-
|
|
30376
|
+
} else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
30377
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
30348
30378
|
#endif
|
|
30349
|
-
|
|
30350
|
-
|
|
30379
|
+
}
|
|
30380
|
+
} else {
|
|
30351
30381
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
30352
|
-
|
|
30353
|
-
|
|
30354
|
-
|
|
30355
|
-
|
|
30356
|
-
|
|
30357
|
-
|
|
30358
|
-
|
|
30359
|
-
|
|
30360
|
-
|
|
30361
|
-
|
|
30362
|
-
|
|
30363
|
-
|
|
30364
|
-
}
|
|
30382
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
30383
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
30384
|
+
} else {
|
|
30385
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
30386
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
30387
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
30388
|
+
case -2:
|
|
30389
|
+
if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
|
|
30390
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
30391
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30392
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
30393
|
+
return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
30365
30394
|
}
|
|
30366
|
-
|
|
30367
|
-
|
|
30368
|
-
|
|
30369
|
-
|
|
30370
|
-
|
|
30371
|
-
|
|
30372
|
-
|
|
30373
|
-
|
|
30395
|
+
}
|
|
30396
|
+
break;
|
|
30397
|
+
case 2:
|
|
30398
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
30399
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
30400
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30401
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
30402
|
+
return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
30374
30403
|
}
|
|
30375
|
-
|
|
30376
|
-
|
|
30377
|
-
|
|
30378
|
-
|
|
30379
|
-
|
|
30380
|
-
|
|
30381
|
-
|
|
30382
|
-
|
|
30404
|
+
}
|
|
30405
|
+
break;
|
|
30406
|
+
case -3:
|
|
30407
|
+
if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
30408
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30409
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30410
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
30411
|
+
return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
30383
30412
|
}
|
|
30384
|
-
|
|
30385
|
-
|
|
30386
|
-
|
|
30387
|
-
|
|
30388
|
-
|
|
30389
|
-
|
|
30390
|
-
|
|
30391
|
-
|
|
30413
|
+
}
|
|
30414
|
+
break;
|
|
30415
|
+
case 3:
|
|
30416
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
30417
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30418
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30419
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
30420
|
+
return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
30392
30421
|
}
|
|
30393
|
-
|
|
30394
|
-
|
|
30395
|
-
|
|
30396
|
-
|
|
30397
|
-
|
|
30398
|
-
|
|
30399
|
-
|
|
30400
|
-
|
|
30422
|
+
}
|
|
30423
|
+
break;
|
|
30424
|
+
case -4:
|
|
30425
|
+
if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
30426
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30427
|
+
__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])))
|
|
30428
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
30429
|
+
return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
30401
30430
|
}
|
|
30402
|
-
|
|
30403
|
-
|
|
30404
|
-
|
|
30405
|
-
|
|
30406
|
-
|
|
30407
|
-
|
|
30408
|
-
|
|
30409
|
-
|
|
30431
|
+
}
|
|
30432
|
+
break;
|
|
30433
|
+
case 4:
|
|
30434
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
30435
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30436
|
+
__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])))
|
|
30437
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
30438
|
+
return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
30410
30439
|
}
|
|
30411
|
-
|
|
30412
|
-
|
|
30440
|
+
}
|
|
30441
|
+
break;
|
|
30413
30442
|
}
|
|
30443
|
+
}
|
|
30414
30444
|
#endif
|
|
30415
|
-
|
|
30416
|
-
|
|
30445
|
+
if ((sizeof(long) <= sizeof(long))) {
|
|
30446
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
|
|
30417
30447
|
#ifdef HAVE_LONG_LONG
|
|
30418
|
-
|
|
30419
|
-
|
|
30448
|
+
} else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
|
|
30449
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
30420
30450
|
#endif
|
|
30421
|
-
|
|
30451
|
+
}
|
|
30452
|
+
}
|
|
30453
|
+
{
|
|
30454
|
+
long val;
|
|
30455
|
+
int ret = -1;
|
|
30456
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
30457
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
30458
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
30459
|
+
if (unlikely(bytes_copied == -1)) {
|
|
30460
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
30461
|
+
goto raise_overflow;
|
|
30462
|
+
} else {
|
|
30463
|
+
ret = 0;
|
|
30464
|
+
}
|
|
30465
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
30466
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
30467
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
30468
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
30469
|
+
bytes, sizeof(val),
|
|
30470
|
+
is_little, !is_unsigned);
|
|
30471
|
+
#else
|
|
30472
|
+
PyObject *v;
|
|
30473
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
30474
|
+
int bits, remaining_bits, is_negative = 0;
|
|
30475
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
30476
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
30477
|
+
v = __Pyx_NewRef(x);
|
|
30478
|
+
} else {
|
|
30479
|
+
v = PyNumber_Long(x);
|
|
30480
|
+
if (unlikely(!v)) return (long) -1;
|
|
30481
|
+
assert(PyLong_CheckExact(v));
|
|
30422
30482
|
}
|
|
30423
30483
|
{
|
|
30424
|
-
|
|
30425
|
-
|
|
30426
|
-
#if PY_MAJOR_VERSION < 3
|
|
30427
|
-
if (likely(v) && !PyLong_Check(v)) {
|
|
30428
|
-
PyObject *tmp = v;
|
|
30429
|
-
v = PyNumber_Long(tmp);
|
|
30430
|
-
Py_DECREF(tmp);
|
|
30431
|
-
}
|
|
30432
|
-
#endif
|
|
30433
|
-
if (likely(v)) {
|
|
30434
|
-
int ret = -1;
|
|
30435
|
-
#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
30436
|
-
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
30437
|
-
unsigned char *bytes = (unsigned char *)&val;
|
|
30438
|
-
ret = _PyLong_AsByteArray((PyLongObject *)v,
|
|
30439
|
-
bytes, sizeof(val),
|
|
30440
|
-
is_little, !is_unsigned);
|
|
30441
|
-
#else
|
|
30442
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
30443
|
-
int bits, remaining_bits, is_negative = 0;
|
|
30444
|
-
long idigit;
|
|
30445
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
30446
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
30447
|
-
PyObject *tmp = v;
|
|
30448
|
-
v = PyNumber_Long(v);
|
|
30449
|
-
assert(PyLong_CheckExact(v));
|
|
30450
|
-
Py_DECREF(tmp);
|
|
30451
|
-
if (unlikely(!v)) return (long) -1;
|
|
30452
|
-
}
|
|
30453
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30454
|
-
if (Py_SIZE(x) == 0)
|
|
30455
|
-
return (long) 0;
|
|
30456
|
-
is_negative = Py_SIZE(x) < 0;
|
|
30457
|
-
#else
|
|
30458
|
-
{
|
|
30459
|
-
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
30460
|
-
if (unlikely(result < 0))
|
|
30461
|
-
return (long) -1;
|
|
30462
|
-
is_negative = result == 1;
|
|
30463
|
-
}
|
|
30464
|
-
#endif
|
|
30465
|
-
if (is_unsigned && unlikely(is_negative)) {
|
|
30466
|
-
goto raise_neg_overflow;
|
|
30467
|
-
} else if (is_negative) {
|
|
30468
|
-
stepval = PyNumber_Invert(v);
|
|
30469
|
-
if (unlikely(!stepval))
|
|
30470
|
-
return (long) -1;
|
|
30471
|
-
} else {
|
|
30472
|
-
stepval = __Pyx_NewRef(v);
|
|
30473
|
-
}
|
|
30474
|
-
val = (long) 0;
|
|
30475
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
30476
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
30477
|
-
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
30478
|
-
PyObject *tmp, *digit;
|
|
30479
|
-
digit = PyNumber_And(stepval, mask);
|
|
30480
|
-
if (unlikely(!digit)) goto done;
|
|
30481
|
-
idigit = PyLong_AsLong(digit);
|
|
30482
|
-
Py_DECREF(digit);
|
|
30483
|
-
if (unlikely(idigit < 0)) goto done;
|
|
30484
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
30485
|
-
if (unlikely(!tmp)) goto done;
|
|
30486
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
30487
|
-
val |= ((long) idigit) << bits;
|
|
30488
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30489
|
-
if (Py_SIZE(stepval) == 0)
|
|
30490
|
-
goto unpacking_done;
|
|
30491
|
-
#endif
|
|
30492
|
-
}
|
|
30493
|
-
idigit = PyLong_AsLong(stepval);
|
|
30494
|
-
if (unlikely(idigit < 0)) goto done;
|
|
30495
|
-
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
30496
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
30497
|
-
goto raise_overflow;
|
|
30498
|
-
val |= ((long) idigit) << bits;
|
|
30499
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30500
|
-
unpacking_done:
|
|
30501
|
-
#endif
|
|
30502
|
-
if (!is_unsigned) {
|
|
30503
|
-
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
30504
|
-
goto raise_overflow;
|
|
30505
|
-
if (is_negative)
|
|
30506
|
-
val = ~val;
|
|
30507
|
-
}
|
|
30508
|
-
ret = 0;
|
|
30509
|
-
done:
|
|
30510
|
-
Py_XDECREF(shift);
|
|
30511
|
-
Py_XDECREF(mask);
|
|
30512
|
-
Py_XDECREF(stepval);
|
|
30513
|
-
#endif
|
|
30484
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
30485
|
+
if (unlikely(result < 0)) {
|
|
30514
30486
|
Py_DECREF(v);
|
|
30515
|
-
|
|
30516
|
-
return val;
|
|
30487
|
+
return (long) -1;
|
|
30517
30488
|
}
|
|
30518
|
-
|
|
30489
|
+
is_negative = result == 1;
|
|
30490
|
+
}
|
|
30491
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
30492
|
+
Py_DECREF(v);
|
|
30493
|
+
goto raise_neg_overflow;
|
|
30494
|
+
} else if (is_negative) {
|
|
30495
|
+
stepval = PyNumber_Invert(v);
|
|
30496
|
+
Py_DECREF(v);
|
|
30497
|
+
if (unlikely(!stepval))
|
|
30498
|
+
return (long) -1;
|
|
30499
|
+
} else {
|
|
30500
|
+
stepval = v;
|
|
30501
|
+
}
|
|
30502
|
+
v = NULL;
|
|
30503
|
+
val = (long) 0;
|
|
30504
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
30505
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
30506
|
+
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
30507
|
+
PyObject *tmp, *digit;
|
|
30508
|
+
long idigit;
|
|
30509
|
+
digit = PyNumber_And(stepval, mask);
|
|
30510
|
+
if (unlikely(!digit)) goto done;
|
|
30511
|
+
idigit = PyLong_AsLong(digit);
|
|
30512
|
+
Py_DECREF(digit);
|
|
30513
|
+
if (unlikely(idigit < 0)) goto done;
|
|
30514
|
+
val |= ((long) idigit) << bits;
|
|
30515
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
30516
|
+
if (unlikely(!tmp)) goto done;
|
|
30517
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
30518
|
+
}
|
|
30519
|
+
Py_DECREF(shift); shift = NULL;
|
|
30520
|
+
Py_DECREF(mask); mask = NULL;
|
|
30521
|
+
{
|
|
30522
|
+
long idigit = PyLong_AsLong(stepval);
|
|
30523
|
+
if (unlikely(idigit < 0)) goto done;
|
|
30524
|
+
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
30525
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
30526
|
+
goto raise_overflow;
|
|
30527
|
+
val |= ((long) idigit) << bits;
|
|
30519
30528
|
}
|
|
30520
|
-
|
|
30521
|
-
|
|
30522
|
-
|
|
30523
|
-
|
|
30524
|
-
|
|
30525
|
-
|
|
30529
|
+
if (!is_unsigned) {
|
|
30530
|
+
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
30531
|
+
goto raise_overflow;
|
|
30532
|
+
if (is_negative)
|
|
30533
|
+
val = ~val;
|
|
30534
|
+
}
|
|
30535
|
+
ret = 0;
|
|
30536
|
+
done:
|
|
30537
|
+
Py_XDECREF(shift);
|
|
30538
|
+
Py_XDECREF(mask);
|
|
30539
|
+
Py_XDECREF(stepval);
|
|
30540
|
+
#endif
|
|
30541
|
+
if (unlikely(ret))
|
|
30542
|
+
return (long) -1;
|
|
30526
30543
|
return val;
|
|
30527
30544
|
}
|
|
30528
30545
|
raise_overflow:
|
|
@@ -30583,245 +30600,239 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) {
|
|
|
30583
30600
|
}
|
|
30584
30601
|
return (char) val;
|
|
30585
30602
|
}
|
|
30586
|
-
}
|
|
30603
|
+
}
|
|
30587
30604
|
#endif
|
|
30588
|
-
if (
|
|
30589
|
-
|
|
30605
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
30606
|
+
char val;
|
|
30607
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
30608
|
+
if (!tmp) return (char) -1;
|
|
30609
|
+
val = __Pyx_PyInt_As_char(tmp);
|
|
30610
|
+
Py_DECREF(tmp);
|
|
30611
|
+
return val;
|
|
30612
|
+
}
|
|
30613
|
+
if (is_unsigned) {
|
|
30590
30614
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
30591
|
-
|
|
30592
|
-
|
|
30593
|
-
|
|
30594
|
-
|
|
30595
|
-
|
|
30596
|
-
|
|
30597
|
-
|
|
30598
|
-
|
|
30599
|
-
|
|
30600
|
-
|
|
30601
|
-
|
|
30602
|
-
|
|
30603
|
-
|
|
30604
|
-
|
|
30605
|
-
}
|
|
30615
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
30616
|
+
goto raise_neg_overflow;
|
|
30617
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
30618
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
30619
|
+
} else {
|
|
30620
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
30621
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
30622
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
30623
|
+
case 2:
|
|
30624
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
30625
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
30626
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30627
|
+
} else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
|
|
30628
|
+
return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
30606
30629
|
}
|
|
30607
|
-
|
|
30608
|
-
|
|
30609
|
-
|
|
30610
|
-
|
|
30611
|
-
|
|
30612
|
-
|
|
30613
|
-
|
|
30614
|
-
|
|
30630
|
+
}
|
|
30631
|
+
break;
|
|
30632
|
+
case 3:
|
|
30633
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
30634
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30635
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30636
|
+
} else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
|
|
30637
|
+
return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
30615
30638
|
}
|
|
30616
|
-
|
|
30617
|
-
|
|
30618
|
-
|
|
30619
|
-
|
|
30620
|
-
|
|
30621
|
-
|
|
30622
|
-
|
|
30623
|
-
|
|
30639
|
+
}
|
|
30640
|
+
break;
|
|
30641
|
+
case 4:
|
|
30642
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
30643
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30644
|
+
__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])))
|
|
30645
|
+
} else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
|
|
30646
|
+
return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
30624
30647
|
}
|
|
30625
|
-
|
|
30626
|
-
|
|
30648
|
+
}
|
|
30649
|
+
break;
|
|
30627
30650
|
}
|
|
30651
|
+
}
|
|
30628
30652
|
#endif
|
|
30629
30653
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
30630
|
-
|
|
30631
|
-
|
|
30632
|
-
|
|
30654
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
30655
|
+
goto raise_neg_overflow;
|
|
30656
|
+
}
|
|
30633
30657
|
#else
|
|
30634
|
-
|
|
30635
|
-
|
|
30636
|
-
|
|
30637
|
-
|
|
30638
|
-
|
|
30639
|
-
|
|
30640
|
-
|
|
30658
|
+
{
|
|
30659
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
30660
|
+
if (unlikely(result < 0))
|
|
30661
|
+
return (char) -1;
|
|
30662
|
+
if (unlikely(result == 1))
|
|
30663
|
+
goto raise_neg_overflow;
|
|
30664
|
+
}
|
|
30641
30665
|
#endif
|
|
30642
|
-
|
|
30643
|
-
|
|
30666
|
+
if ((sizeof(char) <= sizeof(unsigned long))) {
|
|
30667
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
|
|
30644
30668
|
#ifdef HAVE_LONG_LONG
|
|
30645
|
-
|
|
30646
|
-
|
|
30669
|
+
} else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
30670
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
30647
30671
|
#endif
|
|
30648
|
-
|
|
30649
|
-
|
|
30672
|
+
}
|
|
30673
|
+
} else {
|
|
30650
30674
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
30651
|
-
|
|
30652
|
-
|
|
30653
|
-
|
|
30654
|
-
|
|
30655
|
-
|
|
30656
|
-
|
|
30657
|
-
|
|
30658
|
-
|
|
30659
|
-
|
|
30660
|
-
|
|
30661
|
-
|
|
30662
|
-
|
|
30663
|
-
}
|
|
30675
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
30676
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
30677
|
+
} else {
|
|
30678
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
30679
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
30680
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
30681
|
+
case -2:
|
|
30682
|
+
if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
|
|
30683
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
30684
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30685
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
30686
|
+
return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
30664
30687
|
}
|
|
30665
|
-
|
|
30666
|
-
|
|
30667
|
-
|
|
30668
|
-
|
|
30669
|
-
|
|
30670
|
-
|
|
30671
|
-
|
|
30672
|
-
|
|
30688
|
+
}
|
|
30689
|
+
break;
|
|
30690
|
+
case 2:
|
|
30691
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
30692
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
30693
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30694
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
30695
|
+
return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
30673
30696
|
}
|
|
30674
|
-
|
|
30675
|
-
|
|
30676
|
-
|
|
30677
|
-
|
|
30678
|
-
|
|
30679
|
-
|
|
30680
|
-
|
|
30681
|
-
|
|
30697
|
+
}
|
|
30698
|
+
break;
|
|
30699
|
+
case -3:
|
|
30700
|
+
if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
30701
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30702
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30703
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
30704
|
+
return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
30682
30705
|
}
|
|
30683
|
-
|
|
30684
|
-
|
|
30685
|
-
|
|
30686
|
-
|
|
30687
|
-
|
|
30688
|
-
|
|
30689
|
-
|
|
30690
|
-
|
|
30706
|
+
}
|
|
30707
|
+
break;
|
|
30708
|
+
case 3:
|
|
30709
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
30710
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
30711
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
30712
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
30713
|
+
return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
30691
30714
|
}
|
|
30692
|
-
|
|
30693
|
-
|
|
30694
|
-
|
|
30695
|
-
|
|
30696
|
-
|
|
30697
|
-
|
|
30698
|
-
|
|
30699
|
-
|
|
30715
|
+
}
|
|
30716
|
+
break;
|
|
30717
|
+
case -4:
|
|
30718
|
+
if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
30719
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30720
|
+
__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])))
|
|
30721
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
30722
|
+
return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
30700
30723
|
}
|
|
30701
|
-
|
|
30702
|
-
|
|
30703
|
-
|
|
30704
|
-
|
|
30705
|
-
|
|
30706
|
-
|
|
30707
|
-
|
|
30708
|
-
|
|
30724
|
+
}
|
|
30725
|
+
break;
|
|
30726
|
+
case 4:
|
|
30727
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
30728
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
30729
|
+
__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])))
|
|
30730
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
30731
|
+
return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
30709
30732
|
}
|
|
30710
|
-
|
|
30711
|
-
|
|
30733
|
+
}
|
|
30734
|
+
break;
|
|
30712
30735
|
}
|
|
30736
|
+
}
|
|
30713
30737
|
#endif
|
|
30714
|
-
|
|
30715
|
-
|
|
30738
|
+
if ((sizeof(char) <= sizeof(long))) {
|
|
30739
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
|
|
30716
30740
|
#ifdef HAVE_LONG_LONG
|
|
30717
|
-
|
|
30718
|
-
|
|
30741
|
+
} else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
|
|
30742
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
30719
30743
|
#endif
|
|
30720
|
-
|
|
30744
|
+
}
|
|
30745
|
+
}
|
|
30746
|
+
{
|
|
30747
|
+
char val;
|
|
30748
|
+
int ret = -1;
|
|
30749
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
30750
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
30751
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
30752
|
+
if (unlikely(bytes_copied == -1)) {
|
|
30753
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
30754
|
+
goto raise_overflow;
|
|
30755
|
+
} else {
|
|
30756
|
+
ret = 0;
|
|
30757
|
+
}
|
|
30758
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
30759
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
30760
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
30761
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
30762
|
+
bytes, sizeof(val),
|
|
30763
|
+
is_little, !is_unsigned);
|
|
30764
|
+
#else
|
|
30765
|
+
PyObject *v;
|
|
30766
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
30767
|
+
int bits, remaining_bits, is_negative = 0;
|
|
30768
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
30769
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
30770
|
+
v = __Pyx_NewRef(x);
|
|
30771
|
+
} else {
|
|
30772
|
+
v = PyNumber_Long(x);
|
|
30773
|
+
if (unlikely(!v)) return (char) -1;
|
|
30774
|
+
assert(PyLong_CheckExact(v));
|
|
30721
30775
|
}
|
|
30722
30776
|
{
|
|
30723
|
-
|
|
30724
|
-
|
|
30725
|
-
#if PY_MAJOR_VERSION < 3
|
|
30726
|
-
if (likely(v) && !PyLong_Check(v)) {
|
|
30727
|
-
PyObject *tmp = v;
|
|
30728
|
-
v = PyNumber_Long(tmp);
|
|
30729
|
-
Py_DECREF(tmp);
|
|
30730
|
-
}
|
|
30731
|
-
#endif
|
|
30732
|
-
if (likely(v)) {
|
|
30733
|
-
int ret = -1;
|
|
30734
|
-
#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
30735
|
-
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
30736
|
-
unsigned char *bytes = (unsigned char *)&val;
|
|
30737
|
-
ret = _PyLong_AsByteArray((PyLongObject *)v,
|
|
30738
|
-
bytes, sizeof(val),
|
|
30739
|
-
is_little, !is_unsigned);
|
|
30740
|
-
#else
|
|
30741
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
30742
|
-
int bits, remaining_bits, is_negative = 0;
|
|
30743
|
-
long idigit;
|
|
30744
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
30745
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
30746
|
-
PyObject *tmp = v;
|
|
30747
|
-
v = PyNumber_Long(v);
|
|
30748
|
-
assert(PyLong_CheckExact(v));
|
|
30749
|
-
Py_DECREF(tmp);
|
|
30750
|
-
if (unlikely(!v)) return (char) -1;
|
|
30751
|
-
}
|
|
30752
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30753
|
-
if (Py_SIZE(x) == 0)
|
|
30754
|
-
return (char) 0;
|
|
30755
|
-
is_negative = Py_SIZE(x) < 0;
|
|
30756
|
-
#else
|
|
30757
|
-
{
|
|
30758
|
-
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
30759
|
-
if (unlikely(result < 0))
|
|
30760
|
-
return (char) -1;
|
|
30761
|
-
is_negative = result == 1;
|
|
30762
|
-
}
|
|
30763
|
-
#endif
|
|
30764
|
-
if (is_unsigned && unlikely(is_negative)) {
|
|
30765
|
-
goto raise_neg_overflow;
|
|
30766
|
-
} else if (is_negative) {
|
|
30767
|
-
stepval = PyNumber_Invert(v);
|
|
30768
|
-
if (unlikely(!stepval))
|
|
30769
|
-
return (char) -1;
|
|
30770
|
-
} else {
|
|
30771
|
-
stepval = __Pyx_NewRef(v);
|
|
30772
|
-
}
|
|
30773
|
-
val = (char) 0;
|
|
30774
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
30775
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
30776
|
-
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
30777
|
-
PyObject *tmp, *digit;
|
|
30778
|
-
digit = PyNumber_And(stepval, mask);
|
|
30779
|
-
if (unlikely(!digit)) goto done;
|
|
30780
|
-
idigit = PyLong_AsLong(digit);
|
|
30781
|
-
Py_DECREF(digit);
|
|
30782
|
-
if (unlikely(idigit < 0)) goto done;
|
|
30783
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
30784
|
-
if (unlikely(!tmp)) goto done;
|
|
30785
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
30786
|
-
val |= ((char) idigit) << bits;
|
|
30787
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30788
|
-
if (Py_SIZE(stepval) == 0)
|
|
30789
|
-
goto unpacking_done;
|
|
30790
|
-
#endif
|
|
30791
|
-
}
|
|
30792
|
-
idigit = PyLong_AsLong(stepval);
|
|
30793
|
-
if (unlikely(idigit < 0)) goto done;
|
|
30794
|
-
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
30795
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
30796
|
-
goto raise_overflow;
|
|
30797
|
-
val |= ((char) idigit) << bits;
|
|
30798
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
30799
|
-
unpacking_done:
|
|
30800
|
-
#endif
|
|
30801
|
-
if (!is_unsigned) {
|
|
30802
|
-
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
30803
|
-
goto raise_overflow;
|
|
30804
|
-
if (is_negative)
|
|
30805
|
-
val = ~val;
|
|
30806
|
-
}
|
|
30807
|
-
ret = 0;
|
|
30808
|
-
done:
|
|
30809
|
-
Py_XDECREF(shift);
|
|
30810
|
-
Py_XDECREF(mask);
|
|
30811
|
-
Py_XDECREF(stepval);
|
|
30812
|
-
#endif
|
|
30777
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
30778
|
+
if (unlikely(result < 0)) {
|
|
30813
30779
|
Py_DECREF(v);
|
|
30814
|
-
|
|
30815
|
-
return val;
|
|
30780
|
+
return (char) -1;
|
|
30816
30781
|
}
|
|
30817
|
-
|
|
30782
|
+
is_negative = result == 1;
|
|
30783
|
+
}
|
|
30784
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
30785
|
+
Py_DECREF(v);
|
|
30786
|
+
goto raise_neg_overflow;
|
|
30787
|
+
} else if (is_negative) {
|
|
30788
|
+
stepval = PyNumber_Invert(v);
|
|
30789
|
+
Py_DECREF(v);
|
|
30790
|
+
if (unlikely(!stepval))
|
|
30791
|
+
return (char) -1;
|
|
30792
|
+
} else {
|
|
30793
|
+
stepval = v;
|
|
30794
|
+
}
|
|
30795
|
+
v = NULL;
|
|
30796
|
+
val = (char) 0;
|
|
30797
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
30798
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
30799
|
+
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
30800
|
+
PyObject *tmp, *digit;
|
|
30801
|
+
long idigit;
|
|
30802
|
+
digit = PyNumber_And(stepval, mask);
|
|
30803
|
+
if (unlikely(!digit)) goto done;
|
|
30804
|
+
idigit = PyLong_AsLong(digit);
|
|
30805
|
+
Py_DECREF(digit);
|
|
30806
|
+
if (unlikely(idigit < 0)) goto done;
|
|
30807
|
+
val |= ((char) idigit) << bits;
|
|
30808
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
30809
|
+
if (unlikely(!tmp)) goto done;
|
|
30810
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
30811
|
+
}
|
|
30812
|
+
Py_DECREF(shift); shift = NULL;
|
|
30813
|
+
Py_DECREF(mask); mask = NULL;
|
|
30814
|
+
{
|
|
30815
|
+
long idigit = PyLong_AsLong(stepval);
|
|
30816
|
+
if (unlikely(idigit < 0)) goto done;
|
|
30817
|
+
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
30818
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
30819
|
+
goto raise_overflow;
|
|
30820
|
+
val |= ((char) idigit) << bits;
|
|
30818
30821
|
}
|
|
30819
|
-
|
|
30820
|
-
|
|
30821
|
-
|
|
30822
|
-
|
|
30823
|
-
|
|
30824
|
-
|
|
30822
|
+
if (!is_unsigned) {
|
|
30823
|
+
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
30824
|
+
goto raise_overflow;
|
|
30825
|
+
if (is_negative)
|
|
30826
|
+
val = ~val;
|
|
30827
|
+
}
|
|
30828
|
+
ret = 0;
|
|
30829
|
+
done:
|
|
30830
|
+
Py_XDECREF(shift);
|
|
30831
|
+
Py_XDECREF(mask);
|
|
30832
|
+
Py_XDECREF(stepval);
|
|
30833
|
+
#endif
|
|
30834
|
+
if (unlikely(ret))
|
|
30835
|
+
return (char) -1;
|
|
30825
30836
|
return val;
|
|
30826
30837
|
}
|
|
30827
30838
|
raise_overflow:
|