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
sknetwork/topology/minheap.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
|
{
|
|
@@ -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.topology.minheap",
|
|
@@ -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
|
|
@@ -2070,7 +2070,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
|
|
|
2070
2070
|
#if !CYTHON_VECTORCALL
|
|
2071
2071
|
#if PY_VERSION_HEX >= 0x03080000
|
|
2072
2072
|
#include "frameobject.h"
|
|
2073
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
2073
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
2074
2074
|
#ifndef Py_BUILD_CORE
|
|
2075
2075
|
#define Py_BUILD_CORE 1
|
|
2076
2076
|
#endif
|
|
@@ -2407,11 +2407,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
|
|
|
2407
2407
|
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
|
|
2408
2408
|
|
|
2409
2409
|
/* HasAttr.proto */
|
|
2410
|
-
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
|
|
2411
|
-
#define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
|
|
2412
|
-
#else
|
|
2413
2410
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
|
|
2414
|
-
#endif
|
|
2415
2411
|
|
|
2416
2412
|
/* PyObject_GenericGetAttrNoDict.proto */
|
|
2417
2413
|
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
|
|
@@ -4001,10 +3997,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4001
3997
|
PyObject *__pyx_t_4 = NULL;
|
|
4002
3998
|
PyObject *__pyx_t_5 = NULL;
|
|
4003
3999
|
PyObject *__pyx_t_6 = NULL;
|
|
4004
|
-
int __pyx_t_7;
|
|
4000
|
+
unsigned int __pyx_t_7;
|
|
4005
4001
|
char *__pyx_t_8;
|
|
4006
|
-
|
|
4007
|
-
|
|
4002
|
+
int __pyx_t_9;
|
|
4003
|
+
Py_ssize_t __pyx_t_10;
|
|
4004
|
+
Py_UCS4 __pyx_t_11;
|
|
4008
4005
|
int __pyx_lineno = 0;
|
|
4009
4006
|
const char *__pyx_filename = NULL;
|
|
4010
4007
|
int __pyx_clineno = 0;
|
|
@@ -4230,7 +4227,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4230
4227
|
* if dim <= 0:
|
|
4231
4228
|
* raise ValueError, f"Invalid shape in axis {idx}: {dim}."
|
|
4232
4229
|
*/
|
|
4233
|
-
|
|
4230
|
+
__pyx_t_9 = 0;
|
|
4234
4231
|
__pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4);
|
|
4235
4232
|
__pyx_t_1 = 0;
|
|
4236
4233
|
for (;;) {
|
|
@@ -4247,11 +4244,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4247
4244
|
__pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 159, __pyx_L1_error)
|
|
4248
4245
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4249
4246
|
#endif
|
|
4250
|
-
|
|
4247
|
+
__pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 159, __pyx_L1_error)
|
|
4251
4248
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4252
|
-
__pyx_v_dim =
|
|
4253
|
-
__pyx_v_idx =
|
|
4254
|
-
|
|
4249
|
+
__pyx_v_dim = __pyx_t_10;
|
|
4250
|
+
__pyx_v_idx = __pyx_t_9;
|
|
4251
|
+
__pyx_t_9 = (__pyx_t_9 + 1);
|
|
4255
4252
|
|
|
4256
4253
|
/* "View.MemoryView":160
|
|
4257
4254
|
*
|
|
@@ -4272,33 +4269,33 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4272
4269
|
*/
|
|
4273
4270
|
__pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 161, __pyx_L1_error)
|
|
4274
4271
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4275
|
-
|
|
4276
|
-
|
|
4272
|
+
__pyx_t_10 = 0;
|
|
4273
|
+
__pyx_t_11 = 127;
|
|
4277
4274
|
__Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4278
|
-
|
|
4275
|
+
__pyx_t_10 += 22;
|
|
4279
4276
|
__Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4280
4277
|
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis);
|
|
4281
4278
|
__pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 161, __pyx_L1_error)
|
|
4282
4279
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4283
|
-
|
|
4280
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4284
4281
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4285
4282
|
PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
|
|
4286
4283
|
__pyx_t_6 = 0;
|
|
4287
4284
|
__Pyx_INCREF(__pyx_kp_u_);
|
|
4288
|
-
|
|
4285
|
+
__pyx_t_10 += 2;
|
|
4289
4286
|
__Pyx_GIVEREF(__pyx_kp_u_);
|
|
4290
4287
|
PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_);
|
|
4291
4288
|
__pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 161, __pyx_L1_error)
|
|
4292
4289
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4293
|
-
|
|
4290
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4294
4291
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4295
4292
|
PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6);
|
|
4296
4293
|
__pyx_t_6 = 0;
|
|
4297
4294
|
__Pyx_INCREF(__pyx_kp_u__2);
|
|
4298
|
-
|
|
4295
|
+
__pyx_t_10 += 1;
|
|
4299
4296
|
__Pyx_GIVEREF(__pyx_kp_u__2);
|
|
4300
4297
|
PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2);
|
|
4301
|
-
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5,
|
|
4298
|
+
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 161, __pyx_L1_error)
|
|
4302
4299
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4303
4300
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4304
4301
|
__Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
|
|
@@ -4482,7 +4479,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4482
4479
|
*
|
|
4483
4480
|
* @cname('getbuffer')
|
|
4484
4481
|
*/
|
|
4485
|
-
|
|
4482
|
+
__pyx_t_9 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 180, __pyx_L1_error)
|
|
4486
4483
|
|
|
4487
4484
|
/* "View.MemoryView":179
|
|
4488
4485
|
* self.dtype_is_object = format == b'O'
|
|
@@ -7637,7 +7634,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7637
7634
|
*
|
|
7638
7635
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
7639
7636
|
* obj = self.is_slice(value)
|
|
7640
|
-
* if obj:
|
|
7637
|
+
* if obj is not None:
|
|
7641
7638
|
*/
|
|
7642
7639
|
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 426, __pyx_L1_error)
|
|
7643
7640
|
if (__pyx_t_4) {
|
|
@@ -7646,7 +7643,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7646
7643
|
*
|
|
7647
7644
|
* if have_slices:
|
|
7648
7645
|
* obj = self.is_slice(value) # <<<<<<<<<<<<<<
|
|
7649
|
-
* if obj:
|
|
7646
|
+
* if obj is not None:
|
|
7650
7647
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7651
7648
|
*/
|
|
7652
7649
|
__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(0, 427, __pyx_L1_error)
|
|
@@ -7657,16 +7654,16 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7657
7654
|
/* "View.MemoryView":428
|
|
7658
7655
|
* if have_slices:
|
|
7659
7656
|
* obj = self.is_slice(value)
|
|
7660
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
7657
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
7661
7658
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7662
7659
|
* else:
|
|
7663
7660
|
*/
|
|
7664
|
-
__pyx_t_4 =
|
|
7661
|
+
__pyx_t_4 = (__pyx_v_obj != Py_None);
|
|
7665
7662
|
if (__pyx_t_4) {
|
|
7666
7663
|
|
|
7667
7664
|
/* "View.MemoryView":429
|
|
7668
7665
|
* obj = self.is_slice(value)
|
|
7669
|
-
* if obj:
|
|
7666
|
+
* if obj is not None:
|
|
7670
7667
|
* self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
|
|
7671
7668
|
* else:
|
|
7672
7669
|
* self.setitem_slice_assign_scalar(self[index], value)
|
|
@@ -7681,7 +7678,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7681
7678
|
/* "View.MemoryView":428
|
|
7682
7679
|
* if have_slices:
|
|
7683
7680
|
* obj = self.is_slice(value)
|
|
7684
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
7681
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
7685
7682
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7686
7683
|
* else:
|
|
7687
7684
|
*/
|
|
@@ -7711,7 +7708,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7711
7708
|
*
|
|
7712
7709
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
7713
7710
|
* obj = self.is_slice(value)
|
|
7714
|
-
* if obj:
|
|
7711
|
+
* if obj is not None:
|
|
7715
7712
|
*/
|
|
7716
7713
|
goto __pyx_L4;
|
|
7717
7714
|
}
|
|
@@ -8419,9 +8416,10 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
8419
8416
|
PyObject *__pyx_t_5 = NULL;
|
|
8420
8417
|
PyObject *__pyx_t_6 = NULL;
|
|
8421
8418
|
PyObject *__pyx_t_7 = NULL;
|
|
8422
|
-
int __pyx_t_8;
|
|
8419
|
+
unsigned int __pyx_t_8;
|
|
8423
8420
|
Py_ssize_t __pyx_t_9;
|
|
8424
8421
|
int __pyx_t_10;
|
|
8422
|
+
int __pyx_t_11;
|
|
8425
8423
|
int __pyx_lineno = 0;
|
|
8426
8424
|
const char *__pyx_filename = NULL;
|
|
8427
8425
|
int __pyx_clineno = 0;
|
|
@@ -8576,11 +8574,11 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
8576
8574
|
__Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6);
|
|
8577
8575
|
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 498, __pyx_L5_except_error)
|
|
8578
8576
|
__Pyx_GOTREF(__pyx_t_7);
|
|
8579
|
-
|
|
8577
|
+
__pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
|
|
8580
8578
|
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
|
|
8581
8579
|
__Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6);
|
|
8582
8580
|
__pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
|
|
8583
|
-
if (
|
|
8581
|
+
if (__pyx_t_11) {
|
|
8584
8582
|
__Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
|
|
8585
8583
|
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(0, 498, __pyx_L5_except_error)
|
|
8586
8584
|
__Pyx_XGOTREF(__pyx_t_6);
|
|
@@ -8665,7 +8663,7 @@ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryvie
|
|
|
8665
8663
|
PyObject *__pyx_t_3 = NULL;
|
|
8666
8664
|
PyObject *__pyx_t_4 = NULL;
|
|
8667
8665
|
PyObject *__pyx_t_5 = NULL;
|
|
8668
|
-
int __pyx_t_6;
|
|
8666
|
+
unsigned int __pyx_t_6;
|
|
8669
8667
|
Py_ssize_t __pyx_t_7;
|
|
8670
8668
|
PyObject *__pyx_t_8 = NULL;
|
|
8671
8669
|
char *__pyx_t_9;
|
|
@@ -17139,7 +17137,7 @@ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSE
|
|
|
17139
17137
|
int __pyx_t_2;
|
|
17140
17138
|
PyObject *__pyx_t_3 = NULL;
|
|
17141
17139
|
PyObject *__pyx_t_4 = NULL;
|
|
17142
|
-
int __pyx_t_5;
|
|
17140
|
+
unsigned int __pyx_t_5;
|
|
17143
17141
|
int __pyx_lineno = 0;
|
|
17144
17142
|
const char *__pyx_filename = NULL;
|
|
17145
17143
|
int __pyx_clineno = 0;
|
|
@@ -17321,7 +17319,7 @@ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__
|
|
|
17321
17319
|
PyObject *__pyx_t_5 = NULL;
|
|
17322
17320
|
PyObject *__pyx_t_6 = NULL;
|
|
17323
17321
|
PyObject *__pyx_t_7 = NULL;
|
|
17324
|
-
int __pyx_t_8;
|
|
17322
|
+
unsigned int __pyx_t_8;
|
|
17325
17323
|
int __pyx_lineno = 0;
|
|
17326
17324
|
const char *__pyx_filename = NULL;
|
|
17327
17325
|
int __pyx_clineno = 0;
|
|
@@ -18707,6 +18705,9 @@ static PyTypeObject __pyx_type_9sknetwork_8topology_7minheap_MinHeap = {
|
|
|
18707
18705
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18708
18706
|
0, /*tp_watched*/
|
|
18709
18707
|
#endif
|
|
18708
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18709
|
+
0, /*tp_versions_used*/
|
|
18710
|
+
#endif
|
|
18710
18711
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18711
18712
|
0, /*tp_pypy_flags*/
|
|
18712
18713
|
#endif
|
|
@@ -18970,6 +18971,9 @@ static PyTypeObject __pyx_type___pyx_array = {
|
|
|
18970
18971
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18971
18972
|
0, /*tp_watched*/
|
|
18972
18973
|
#endif
|
|
18974
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18975
|
+
0, /*tp_versions_used*/
|
|
18976
|
+
#endif
|
|
18973
18977
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18974
18978
|
0, /*tp_pypy_flags*/
|
|
18975
18979
|
#endif
|
|
@@ -19140,6 +19144,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
|
|
|
19140
19144
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
19141
19145
|
0, /*tp_watched*/
|
|
19142
19146
|
#endif
|
|
19147
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
19148
|
+
0, /*tp_versions_used*/
|
|
19149
|
+
#endif
|
|
19143
19150
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
19144
19151
|
0, /*tp_pypy_flags*/
|
|
19145
19152
|
#endif
|
|
@@ -19483,6 +19490,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
|
|
|
19483
19490
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
19484
19491
|
0, /*tp_watched*/
|
|
19485
19492
|
#endif
|
|
19493
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
19494
|
+
0, /*tp_versions_used*/
|
|
19495
|
+
#endif
|
|
19486
19496
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
19487
19497
|
0, /*tp_pypy_flags*/
|
|
19488
19498
|
#endif
|
|
@@ -19655,6 +19665,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
|
|
|
19655
19665
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
19656
19666
|
0, /*tp_watched*/
|
|
19657
19667
|
#endif
|
|
19668
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
19669
|
+
0, /*tp_versions_used*/
|
|
19670
|
+
#endif
|
|
19658
19671
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
19659
19672
|
0, /*tp_pypy_flags*/
|
|
19660
19673
|
#endif
|
|
@@ -23561,7 +23574,6 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
|
|
|
23561
23574
|
}
|
|
23562
23575
|
|
|
23563
23576
|
/* HasAttr */
|
|
23564
|
-
#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
|
|
23565
23577
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
23566
23578
|
PyObject *r;
|
|
23567
23579
|
if (unlikely(!__Pyx_PyBaseString_Check(n))) {
|
|
@@ -23578,7 +23590,6 @@ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
|
23578
23590
|
return 1;
|
|
23579
23591
|
}
|
|
23580
23592
|
}
|
|
23581
|
-
#endif
|
|
23582
23593
|
|
|
23583
23594
|
/* PyObject_GenericGetAttrNoDict */
|
|
23584
23595
|
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
|
|
@@ -25318,6 +25329,9 @@ static PyTypeObject __pyx_CyFunctionType_type = {
|
|
|
25318
25329
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
25319
25330
|
0,
|
|
25320
25331
|
#endif
|
|
25332
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
25333
|
+
0,
|
|
25334
|
+
#endif
|
|
25321
25335
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
25322
25336
|
0,
|
|
25323
25337
|
#endif
|
|
@@ -25503,7 +25517,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
|
|
|
25503
25517
|
#include "compile.h"
|
|
25504
25518
|
#include "frameobject.h"
|
|
25505
25519
|
#include "traceback.h"
|
|
25506
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
25520
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
25507
25521
|
#ifndef Py_BUILD_CORE
|
|
25508
25522
|
#define Py_BUILD_CORE 1
|
|
25509
25523
|
#endif
|
|
@@ -26022,245 +26036,239 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
|
|
|
26022
26036
|
}
|
|
26023
26037
|
return (int) val;
|
|
26024
26038
|
}
|
|
26025
|
-
}
|
|
26039
|
+
}
|
|
26026
26040
|
#endif
|
|
26027
|
-
if (
|
|
26028
|
-
|
|
26041
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26042
|
+
int val;
|
|
26043
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26044
|
+
if (!tmp) return (int) -1;
|
|
26045
|
+
val = __Pyx_PyInt_As_int(tmp);
|
|
26046
|
+
Py_DECREF(tmp);
|
|
26047
|
+
return val;
|
|
26048
|
+
}
|
|
26049
|
+
if (is_unsigned) {
|
|
26029
26050
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26030
|
-
|
|
26031
|
-
|
|
26032
|
-
|
|
26033
|
-
|
|
26034
|
-
|
|
26035
|
-
|
|
26036
|
-
|
|
26037
|
-
|
|
26038
|
-
|
|
26039
|
-
|
|
26040
|
-
|
|
26041
|
-
|
|
26042
|
-
|
|
26043
|
-
|
|
26044
|
-
}
|
|
26051
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26052
|
+
goto raise_neg_overflow;
|
|
26053
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26054
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26055
|
+
} else {
|
|
26056
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26057
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26058
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26059
|
+
case 2:
|
|
26060
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
26061
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26062
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26063
|
+
} else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
|
|
26064
|
+
return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26045
26065
|
}
|
|
26046
|
-
|
|
26047
|
-
|
|
26048
|
-
|
|
26049
|
-
|
|
26050
|
-
|
|
26051
|
-
|
|
26052
|
-
|
|
26053
|
-
|
|
26066
|
+
}
|
|
26067
|
+
break;
|
|
26068
|
+
case 3:
|
|
26069
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
26070
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26071
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26072
|
+
} else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
|
|
26073
|
+
return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26054
26074
|
}
|
|
26055
|
-
|
|
26056
|
-
|
|
26057
|
-
|
|
26058
|
-
|
|
26059
|
-
|
|
26060
|
-
|
|
26061
|
-
|
|
26062
|
-
|
|
26075
|
+
}
|
|
26076
|
+
break;
|
|
26077
|
+
case 4:
|
|
26078
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
26079
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26080
|
+
__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])))
|
|
26081
|
+
} else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
|
|
26082
|
+
return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26063
26083
|
}
|
|
26064
|
-
|
|
26065
|
-
|
|
26084
|
+
}
|
|
26085
|
+
break;
|
|
26066
26086
|
}
|
|
26087
|
+
}
|
|
26067
26088
|
#endif
|
|
26068
26089
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26069
|
-
|
|
26070
|
-
|
|
26071
|
-
|
|
26090
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26091
|
+
goto raise_neg_overflow;
|
|
26092
|
+
}
|
|
26072
26093
|
#else
|
|
26073
|
-
|
|
26074
|
-
|
|
26075
|
-
|
|
26076
|
-
|
|
26077
|
-
|
|
26078
|
-
|
|
26079
|
-
|
|
26094
|
+
{
|
|
26095
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26096
|
+
if (unlikely(result < 0))
|
|
26097
|
+
return (int) -1;
|
|
26098
|
+
if (unlikely(result == 1))
|
|
26099
|
+
goto raise_neg_overflow;
|
|
26100
|
+
}
|
|
26080
26101
|
#endif
|
|
26081
|
-
|
|
26082
|
-
|
|
26102
|
+
if ((sizeof(int) <= sizeof(unsigned long))) {
|
|
26103
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26083
26104
|
#ifdef HAVE_LONG_LONG
|
|
26084
|
-
|
|
26085
|
-
|
|
26105
|
+
} else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26106
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26086
26107
|
#endif
|
|
26087
|
-
|
|
26088
|
-
|
|
26108
|
+
}
|
|
26109
|
+
} else {
|
|
26089
26110
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26090
|
-
|
|
26091
|
-
|
|
26092
|
-
|
|
26093
|
-
|
|
26094
|
-
|
|
26095
|
-
|
|
26096
|
-
|
|
26097
|
-
|
|
26098
|
-
|
|
26099
|
-
|
|
26100
|
-
|
|
26101
|
-
|
|
26102
|
-
}
|
|
26111
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26112
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26113
|
+
} else {
|
|
26114
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26115
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26116
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26117
|
+
case -2:
|
|
26118
|
+
if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
|
|
26119
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26120
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26121
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26122
|
+
return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26103
26123
|
}
|
|
26104
|
-
|
|
26105
|
-
|
|
26106
|
-
|
|
26107
|
-
|
|
26108
|
-
|
|
26109
|
-
|
|
26110
|
-
|
|
26111
|
-
|
|
26124
|
+
}
|
|
26125
|
+
break;
|
|
26126
|
+
case 2:
|
|
26127
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
26128
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26129
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26130
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26131
|
+
return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26112
26132
|
}
|
|
26113
|
-
|
|
26114
|
-
|
|
26115
|
-
|
|
26116
|
-
|
|
26117
|
-
|
|
26118
|
-
|
|
26119
|
-
|
|
26120
|
-
|
|
26133
|
+
}
|
|
26134
|
+
break;
|
|
26135
|
+
case -3:
|
|
26136
|
+
if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26137
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26138
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26139
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26140
|
+
return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26121
26141
|
}
|
|
26122
|
-
|
|
26123
|
-
|
|
26124
|
-
|
|
26125
|
-
|
|
26126
|
-
|
|
26127
|
-
|
|
26128
|
-
|
|
26129
|
-
|
|
26142
|
+
}
|
|
26143
|
+
break;
|
|
26144
|
+
case 3:
|
|
26145
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
26146
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26147
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26148
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26149
|
+
return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26130
26150
|
}
|
|
26131
|
-
|
|
26132
|
-
|
|
26133
|
-
|
|
26134
|
-
|
|
26135
|
-
|
|
26136
|
-
|
|
26137
|
-
|
|
26138
|
-
|
|
26151
|
+
}
|
|
26152
|
+
break;
|
|
26153
|
+
case -4:
|
|
26154
|
+
if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26155
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26156
|
+
__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])))
|
|
26157
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
26158
|
+
return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26139
26159
|
}
|
|
26140
|
-
|
|
26141
|
-
|
|
26142
|
-
|
|
26143
|
-
|
|
26144
|
-
|
|
26145
|
-
|
|
26146
|
-
|
|
26147
|
-
|
|
26160
|
+
}
|
|
26161
|
+
break;
|
|
26162
|
+
case 4:
|
|
26163
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
26164
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26165
|
+
__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])))
|
|
26166
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
26167
|
+
return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26148
26168
|
}
|
|
26149
|
-
|
|
26150
|
-
|
|
26169
|
+
}
|
|
26170
|
+
break;
|
|
26151
26171
|
}
|
|
26172
|
+
}
|
|
26152
26173
|
#endif
|
|
26153
|
-
|
|
26154
|
-
|
|
26174
|
+
if ((sizeof(int) <= sizeof(long))) {
|
|
26175
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
|
|
26155
26176
|
#ifdef HAVE_LONG_LONG
|
|
26156
|
-
|
|
26157
|
-
|
|
26177
|
+
} else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
|
|
26178
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26158
26179
|
#endif
|
|
26159
|
-
}
|
|
26160
26180
|
}
|
|
26161
|
-
|
|
26162
|
-
|
|
26163
|
-
|
|
26164
|
-
|
|
26165
|
-
|
|
26166
|
-
|
|
26167
|
-
|
|
26168
|
-
|
|
26169
|
-
|
|
26170
|
-
|
|
26171
|
-
|
|
26172
|
-
|
|
26173
|
-
|
|
26174
|
-
|
|
26175
|
-
|
|
26176
|
-
|
|
26177
|
-
|
|
26178
|
-
|
|
26179
|
-
|
|
26180
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26181
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26182
|
-
long idigit;
|
|
26183
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26184
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26185
|
-
PyObject *tmp = v;
|
|
26186
|
-
v = PyNumber_Long(v);
|
|
26187
|
-
assert(PyLong_CheckExact(v));
|
|
26188
|
-
Py_DECREF(tmp);
|
|
26189
|
-
if (unlikely(!v)) return (int) -1;
|
|
26190
|
-
}
|
|
26191
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26192
|
-
if (Py_SIZE(x) == 0)
|
|
26193
|
-
return (int) 0;
|
|
26194
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26181
|
+
}
|
|
26182
|
+
{
|
|
26183
|
+
int val;
|
|
26184
|
+
int ret = -1;
|
|
26185
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26186
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26187
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26188
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26189
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26190
|
+
goto raise_overflow;
|
|
26191
|
+
} else {
|
|
26192
|
+
ret = 0;
|
|
26193
|
+
}
|
|
26194
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26195
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26196
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26197
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26198
|
+
bytes, sizeof(val),
|
|
26199
|
+
is_little, !is_unsigned);
|
|
26195
26200
|
#else
|
|
26196
|
-
|
|
26197
|
-
|
|
26198
|
-
|
|
26199
|
-
|
|
26200
|
-
|
|
26201
|
-
|
|
26202
|
-
|
|
26203
|
-
|
|
26204
|
-
|
|
26205
|
-
|
|
26206
|
-
|
|
26207
|
-
|
|
26208
|
-
|
|
26209
|
-
|
|
26210
|
-
stepval = __Pyx_NewRef(v);
|
|
26211
|
-
}
|
|
26212
|
-
val = (int) 0;
|
|
26213
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26214
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26215
|
-
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
26216
|
-
PyObject *tmp, *digit;
|
|
26217
|
-
digit = PyNumber_And(stepval, mask);
|
|
26218
|
-
if (unlikely(!digit)) goto done;
|
|
26219
|
-
idigit = PyLong_AsLong(digit);
|
|
26220
|
-
Py_DECREF(digit);
|
|
26221
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26222
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26223
|
-
if (unlikely(!tmp)) goto done;
|
|
26224
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26225
|
-
val |= ((int) idigit) << bits;
|
|
26226
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26227
|
-
if (Py_SIZE(stepval) == 0)
|
|
26228
|
-
goto unpacking_done;
|
|
26229
|
-
#endif
|
|
26230
|
-
}
|
|
26231
|
-
idigit = PyLong_AsLong(stepval);
|
|
26232
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26233
|
-
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26234
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26235
|
-
goto raise_overflow;
|
|
26236
|
-
val |= ((int) idigit) << bits;
|
|
26237
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26238
|
-
unpacking_done:
|
|
26239
|
-
#endif
|
|
26240
|
-
if (!is_unsigned) {
|
|
26241
|
-
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
26242
|
-
goto raise_overflow;
|
|
26243
|
-
if (is_negative)
|
|
26244
|
-
val = ~val;
|
|
26245
|
-
}
|
|
26246
|
-
ret = 0;
|
|
26247
|
-
done:
|
|
26248
|
-
Py_XDECREF(shift);
|
|
26249
|
-
Py_XDECREF(mask);
|
|
26250
|
-
Py_XDECREF(stepval);
|
|
26251
|
-
#endif
|
|
26201
|
+
PyObject *v;
|
|
26202
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26203
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26204
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26205
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26206
|
+
v = __Pyx_NewRef(x);
|
|
26207
|
+
} else {
|
|
26208
|
+
v = PyNumber_Long(x);
|
|
26209
|
+
if (unlikely(!v)) return (int) -1;
|
|
26210
|
+
assert(PyLong_CheckExact(v));
|
|
26211
|
+
}
|
|
26212
|
+
{
|
|
26213
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26214
|
+
if (unlikely(result < 0)) {
|
|
26252
26215
|
Py_DECREF(v);
|
|
26253
|
-
|
|
26254
|
-
return val;
|
|
26216
|
+
return (int) -1;
|
|
26255
26217
|
}
|
|
26256
|
-
|
|
26218
|
+
is_negative = result == 1;
|
|
26257
26219
|
}
|
|
26258
|
-
|
|
26259
|
-
|
|
26260
|
-
|
|
26261
|
-
|
|
26262
|
-
|
|
26263
|
-
|
|
26220
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26221
|
+
Py_DECREF(v);
|
|
26222
|
+
goto raise_neg_overflow;
|
|
26223
|
+
} else if (is_negative) {
|
|
26224
|
+
stepval = PyNumber_Invert(v);
|
|
26225
|
+
Py_DECREF(v);
|
|
26226
|
+
if (unlikely(!stepval))
|
|
26227
|
+
return (int) -1;
|
|
26228
|
+
} else {
|
|
26229
|
+
stepval = v;
|
|
26230
|
+
}
|
|
26231
|
+
v = NULL;
|
|
26232
|
+
val = (int) 0;
|
|
26233
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26234
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26235
|
+
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
26236
|
+
PyObject *tmp, *digit;
|
|
26237
|
+
long idigit;
|
|
26238
|
+
digit = PyNumber_And(stepval, mask);
|
|
26239
|
+
if (unlikely(!digit)) goto done;
|
|
26240
|
+
idigit = PyLong_AsLong(digit);
|
|
26241
|
+
Py_DECREF(digit);
|
|
26242
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26243
|
+
val |= ((int) idigit) << bits;
|
|
26244
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26245
|
+
if (unlikely(!tmp)) goto done;
|
|
26246
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26247
|
+
}
|
|
26248
|
+
Py_DECREF(shift); shift = NULL;
|
|
26249
|
+
Py_DECREF(mask); mask = NULL;
|
|
26250
|
+
{
|
|
26251
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26252
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26253
|
+
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26254
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26255
|
+
goto raise_overflow;
|
|
26256
|
+
val |= ((int) idigit) << bits;
|
|
26257
|
+
}
|
|
26258
|
+
if (!is_unsigned) {
|
|
26259
|
+
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
26260
|
+
goto raise_overflow;
|
|
26261
|
+
if (is_negative)
|
|
26262
|
+
val = ~val;
|
|
26263
|
+
}
|
|
26264
|
+
ret = 0;
|
|
26265
|
+
done:
|
|
26266
|
+
Py_XDECREF(shift);
|
|
26267
|
+
Py_XDECREF(mask);
|
|
26268
|
+
Py_XDECREF(stepval);
|
|
26269
|
+
#endif
|
|
26270
|
+
if (unlikely(ret))
|
|
26271
|
+
return (int) -1;
|
|
26264
26272
|
return val;
|
|
26265
26273
|
}
|
|
26266
26274
|
raise_overflow:
|
|
@@ -26295,245 +26303,239 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
|
|
|
26295
26303
|
}
|
|
26296
26304
|
return (long) val;
|
|
26297
26305
|
}
|
|
26298
|
-
}
|
|
26306
|
+
}
|
|
26299
26307
|
#endif
|
|
26300
|
-
if (
|
|
26301
|
-
|
|
26308
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26309
|
+
long val;
|
|
26310
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26311
|
+
if (!tmp) return (long) -1;
|
|
26312
|
+
val = __Pyx_PyInt_As_long(tmp);
|
|
26313
|
+
Py_DECREF(tmp);
|
|
26314
|
+
return val;
|
|
26315
|
+
}
|
|
26316
|
+
if (is_unsigned) {
|
|
26302
26317
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26303
|
-
|
|
26304
|
-
|
|
26305
|
-
|
|
26306
|
-
|
|
26307
|
-
|
|
26308
|
-
|
|
26309
|
-
|
|
26310
|
-
|
|
26311
|
-
|
|
26312
|
-
|
|
26313
|
-
|
|
26314
|
-
|
|
26315
|
-
|
|
26316
|
-
|
|
26317
|
-
}
|
|
26318
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26319
|
+
goto raise_neg_overflow;
|
|
26320
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26321
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26322
|
+
} else {
|
|
26323
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26324
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26325
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26326
|
+
case 2:
|
|
26327
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
26328
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26329
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26330
|
+
} else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
|
|
26331
|
+
return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26318
26332
|
}
|
|
26319
|
-
|
|
26320
|
-
|
|
26321
|
-
|
|
26322
|
-
|
|
26323
|
-
|
|
26324
|
-
|
|
26325
|
-
|
|
26326
|
-
|
|
26333
|
+
}
|
|
26334
|
+
break;
|
|
26335
|
+
case 3:
|
|
26336
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
26337
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26338
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26339
|
+
} else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
|
|
26340
|
+
return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26327
26341
|
}
|
|
26328
|
-
|
|
26329
|
-
|
|
26330
|
-
|
|
26331
|
-
|
|
26332
|
-
|
|
26333
|
-
|
|
26334
|
-
|
|
26335
|
-
|
|
26342
|
+
}
|
|
26343
|
+
break;
|
|
26344
|
+
case 4:
|
|
26345
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
26346
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26347
|
+
__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])))
|
|
26348
|
+
} else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
|
|
26349
|
+
return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26336
26350
|
}
|
|
26337
|
-
|
|
26338
|
-
|
|
26351
|
+
}
|
|
26352
|
+
break;
|
|
26339
26353
|
}
|
|
26354
|
+
}
|
|
26340
26355
|
#endif
|
|
26341
26356
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26342
|
-
|
|
26343
|
-
|
|
26344
|
-
|
|
26357
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26358
|
+
goto raise_neg_overflow;
|
|
26359
|
+
}
|
|
26345
26360
|
#else
|
|
26346
|
-
|
|
26347
|
-
|
|
26348
|
-
|
|
26349
|
-
|
|
26350
|
-
|
|
26351
|
-
|
|
26352
|
-
|
|
26361
|
+
{
|
|
26362
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26363
|
+
if (unlikely(result < 0))
|
|
26364
|
+
return (long) -1;
|
|
26365
|
+
if (unlikely(result == 1))
|
|
26366
|
+
goto raise_neg_overflow;
|
|
26367
|
+
}
|
|
26353
26368
|
#endif
|
|
26354
|
-
|
|
26355
|
-
|
|
26369
|
+
if ((sizeof(long) <= sizeof(unsigned long))) {
|
|
26370
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26356
26371
|
#ifdef HAVE_LONG_LONG
|
|
26357
|
-
|
|
26358
|
-
|
|
26372
|
+
} else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26373
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26359
26374
|
#endif
|
|
26360
|
-
|
|
26361
|
-
|
|
26375
|
+
}
|
|
26376
|
+
} else {
|
|
26362
26377
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26363
|
-
|
|
26364
|
-
|
|
26365
|
-
|
|
26366
|
-
|
|
26367
|
-
|
|
26368
|
-
|
|
26369
|
-
|
|
26370
|
-
|
|
26371
|
-
|
|
26372
|
-
|
|
26373
|
-
|
|
26374
|
-
|
|
26375
|
-
}
|
|
26378
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26379
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26380
|
+
} else {
|
|
26381
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26382
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26383
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26384
|
+
case -2:
|
|
26385
|
+
if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
|
|
26386
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26387
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26388
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26389
|
+
return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26376
26390
|
}
|
|
26377
|
-
|
|
26378
|
-
|
|
26379
|
-
|
|
26380
|
-
|
|
26381
|
-
|
|
26382
|
-
|
|
26383
|
-
|
|
26384
|
-
|
|
26391
|
+
}
|
|
26392
|
+
break;
|
|
26393
|
+
case 2:
|
|
26394
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
26395
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26396
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26397
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26398
|
+
return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26385
26399
|
}
|
|
26386
|
-
|
|
26387
|
-
|
|
26388
|
-
|
|
26389
|
-
|
|
26390
|
-
|
|
26391
|
-
|
|
26392
|
-
|
|
26393
|
-
|
|
26400
|
+
}
|
|
26401
|
+
break;
|
|
26402
|
+
case -3:
|
|
26403
|
+
if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26404
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26405
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26406
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26407
|
+
return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26394
26408
|
}
|
|
26395
|
-
|
|
26396
|
-
|
|
26397
|
-
|
|
26398
|
-
|
|
26399
|
-
|
|
26400
|
-
|
|
26401
|
-
|
|
26402
|
-
|
|
26409
|
+
}
|
|
26410
|
+
break;
|
|
26411
|
+
case 3:
|
|
26412
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
26413
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26414
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26415
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26416
|
+
return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26403
26417
|
}
|
|
26404
|
-
|
|
26405
|
-
|
|
26406
|
-
|
|
26407
|
-
|
|
26408
|
-
|
|
26409
|
-
|
|
26410
|
-
|
|
26411
|
-
|
|
26418
|
+
}
|
|
26419
|
+
break;
|
|
26420
|
+
case -4:
|
|
26421
|
+
if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26422
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26423
|
+
__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])))
|
|
26424
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
26425
|
+
return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26412
26426
|
}
|
|
26413
|
-
|
|
26414
|
-
|
|
26415
|
-
|
|
26416
|
-
|
|
26417
|
-
|
|
26418
|
-
|
|
26419
|
-
|
|
26420
|
-
|
|
26427
|
+
}
|
|
26428
|
+
break;
|
|
26429
|
+
case 4:
|
|
26430
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
26431
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26432
|
+
__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])))
|
|
26433
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
26434
|
+
return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26421
26435
|
}
|
|
26422
|
-
|
|
26423
|
-
|
|
26436
|
+
}
|
|
26437
|
+
break;
|
|
26424
26438
|
}
|
|
26439
|
+
}
|
|
26425
26440
|
#endif
|
|
26426
|
-
|
|
26427
|
-
|
|
26441
|
+
if ((sizeof(long) <= sizeof(long))) {
|
|
26442
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
|
|
26428
26443
|
#ifdef HAVE_LONG_LONG
|
|
26429
|
-
|
|
26430
|
-
|
|
26444
|
+
} else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
|
|
26445
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26431
26446
|
#endif
|
|
26432
|
-
}
|
|
26433
26447
|
}
|
|
26434
|
-
|
|
26435
|
-
|
|
26436
|
-
|
|
26437
|
-
|
|
26438
|
-
|
|
26439
|
-
|
|
26440
|
-
|
|
26441
|
-
|
|
26442
|
-
|
|
26443
|
-
|
|
26444
|
-
|
|
26445
|
-
|
|
26446
|
-
|
|
26447
|
-
|
|
26448
|
-
|
|
26449
|
-
|
|
26450
|
-
|
|
26451
|
-
|
|
26452
|
-
|
|
26453
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26454
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26455
|
-
long idigit;
|
|
26456
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26457
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26458
|
-
PyObject *tmp = v;
|
|
26459
|
-
v = PyNumber_Long(v);
|
|
26460
|
-
assert(PyLong_CheckExact(v));
|
|
26461
|
-
Py_DECREF(tmp);
|
|
26462
|
-
if (unlikely(!v)) return (long) -1;
|
|
26463
|
-
}
|
|
26464
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26465
|
-
if (Py_SIZE(x) == 0)
|
|
26466
|
-
return (long) 0;
|
|
26467
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26448
|
+
}
|
|
26449
|
+
{
|
|
26450
|
+
long val;
|
|
26451
|
+
int ret = -1;
|
|
26452
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26453
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26454
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26455
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26456
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26457
|
+
goto raise_overflow;
|
|
26458
|
+
} else {
|
|
26459
|
+
ret = 0;
|
|
26460
|
+
}
|
|
26461
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26462
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26463
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26464
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26465
|
+
bytes, sizeof(val),
|
|
26466
|
+
is_little, !is_unsigned);
|
|
26468
26467
|
#else
|
|
26469
|
-
|
|
26470
|
-
|
|
26471
|
-
|
|
26472
|
-
|
|
26473
|
-
|
|
26474
|
-
|
|
26475
|
-
|
|
26476
|
-
|
|
26477
|
-
|
|
26478
|
-
|
|
26479
|
-
|
|
26480
|
-
|
|
26481
|
-
|
|
26482
|
-
|
|
26483
|
-
stepval = __Pyx_NewRef(v);
|
|
26484
|
-
}
|
|
26485
|
-
val = (long) 0;
|
|
26486
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26487
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26488
|
-
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
26489
|
-
PyObject *tmp, *digit;
|
|
26490
|
-
digit = PyNumber_And(stepval, mask);
|
|
26491
|
-
if (unlikely(!digit)) goto done;
|
|
26492
|
-
idigit = PyLong_AsLong(digit);
|
|
26493
|
-
Py_DECREF(digit);
|
|
26494
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26495
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26496
|
-
if (unlikely(!tmp)) goto done;
|
|
26497
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26498
|
-
val |= ((long) idigit) << bits;
|
|
26499
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26500
|
-
if (Py_SIZE(stepval) == 0)
|
|
26501
|
-
goto unpacking_done;
|
|
26502
|
-
#endif
|
|
26503
|
-
}
|
|
26504
|
-
idigit = PyLong_AsLong(stepval);
|
|
26505
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26506
|
-
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26507
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26508
|
-
goto raise_overflow;
|
|
26509
|
-
val |= ((long) idigit) << bits;
|
|
26510
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26511
|
-
unpacking_done:
|
|
26512
|
-
#endif
|
|
26513
|
-
if (!is_unsigned) {
|
|
26514
|
-
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
26515
|
-
goto raise_overflow;
|
|
26516
|
-
if (is_negative)
|
|
26517
|
-
val = ~val;
|
|
26518
|
-
}
|
|
26519
|
-
ret = 0;
|
|
26520
|
-
done:
|
|
26521
|
-
Py_XDECREF(shift);
|
|
26522
|
-
Py_XDECREF(mask);
|
|
26523
|
-
Py_XDECREF(stepval);
|
|
26524
|
-
#endif
|
|
26468
|
+
PyObject *v;
|
|
26469
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26470
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26471
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26472
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26473
|
+
v = __Pyx_NewRef(x);
|
|
26474
|
+
} else {
|
|
26475
|
+
v = PyNumber_Long(x);
|
|
26476
|
+
if (unlikely(!v)) return (long) -1;
|
|
26477
|
+
assert(PyLong_CheckExact(v));
|
|
26478
|
+
}
|
|
26479
|
+
{
|
|
26480
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26481
|
+
if (unlikely(result < 0)) {
|
|
26525
26482
|
Py_DECREF(v);
|
|
26526
|
-
|
|
26527
|
-
return val;
|
|
26483
|
+
return (long) -1;
|
|
26528
26484
|
}
|
|
26529
|
-
|
|
26485
|
+
is_negative = result == 1;
|
|
26530
26486
|
}
|
|
26531
|
-
|
|
26532
|
-
|
|
26533
|
-
|
|
26534
|
-
|
|
26535
|
-
|
|
26536
|
-
|
|
26487
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26488
|
+
Py_DECREF(v);
|
|
26489
|
+
goto raise_neg_overflow;
|
|
26490
|
+
} else if (is_negative) {
|
|
26491
|
+
stepval = PyNumber_Invert(v);
|
|
26492
|
+
Py_DECREF(v);
|
|
26493
|
+
if (unlikely(!stepval))
|
|
26494
|
+
return (long) -1;
|
|
26495
|
+
} else {
|
|
26496
|
+
stepval = v;
|
|
26497
|
+
}
|
|
26498
|
+
v = NULL;
|
|
26499
|
+
val = (long) 0;
|
|
26500
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26501
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26502
|
+
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
26503
|
+
PyObject *tmp, *digit;
|
|
26504
|
+
long idigit;
|
|
26505
|
+
digit = PyNumber_And(stepval, mask);
|
|
26506
|
+
if (unlikely(!digit)) goto done;
|
|
26507
|
+
idigit = PyLong_AsLong(digit);
|
|
26508
|
+
Py_DECREF(digit);
|
|
26509
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26510
|
+
val |= ((long) idigit) << bits;
|
|
26511
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26512
|
+
if (unlikely(!tmp)) goto done;
|
|
26513
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26514
|
+
}
|
|
26515
|
+
Py_DECREF(shift); shift = NULL;
|
|
26516
|
+
Py_DECREF(mask); mask = NULL;
|
|
26517
|
+
{
|
|
26518
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26519
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26520
|
+
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26521
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26522
|
+
goto raise_overflow;
|
|
26523
|
+
val |= ((long) idigit) << bits;
|
|
26524
|
+
}
|
|
26525
|
+
if (!is_unsigned) {
|
|
26526
|
+
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
26527
|
+
goto raise_overflow;
|
|
26528
|
+
if (is_negative)
|
|
26529
|
+
val = ~val;
|
|
26530
|
+
}
|
|
26531
|
+
ret = 0;
|
|
26532
|
+
done:
|
|
26533
|
+
Py_XDECREF(shift);
|
|
26534
|
+
Py_XDECREF(mask);
|
|
26535
|
+
Py_XDECREF(stepval);
|
|
26536
|
+
#endif
|
|
26537
|
+
if (unlikely(ret))
|
|
26538
|
+
return (long) -1;
|
|
26537
26539
|
return val;
|
|
26538
26540
|
}
|
|
26539
26541
|
raise_overflow:
|
|
@@ -26577,12 +26579,19 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
|
|
|
26577
26579
|
}
|
|
26578
26580
|
}
|
|
26579
26581
|
{
|
|
26580
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26581
26582
|
unsigned char *bytes = (unsigned char *)&value;
|
|
26582
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
26583
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
26584
|
+
if (is_unsigned) {
|
|
26585
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
26586
|
+
} else {
|
|
26587
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
26588
|
+
}
|
|
26589
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
26590
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26583
26591
|
return _PyLong_FromByteArray(bytes, sizeof(int),
|
|
26584
26592
|
little, !is_unsigned);
|
|
26585
26593
|
#else
|
|
26594
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26586
26595
|
PyObject *from_bytes, *result = NULL;
|
|
26587
26596
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
26588
26597
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -26641,12 +26650,19 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
|
|
|
26641
26650
|
}
|
|
26642
26651
|
}
|
|
26643
26652
|
{
|
|
26644
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26645
26653
|
unsigned char *bytes = (unsigned char *)&value;
|
|
26646
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
26654
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
26655
|
+
if (is_unsigned) {
|
|
26656
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
26657
|
+
} else {
|
|
26658
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
26659
|
+
}
|
|
26660
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
26661
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26647
26662
|
return _PyLong_FromByteArray(bytes, sizeof(long),
|
|
26648
26663
|
little, !is_unsigned);
|
|
26649
26664
|
#else
|
|
26665
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26650
26666
|
PyObject *from_bytes, *result = NULL;
|
|
26651
26667
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
26652
26668
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -26696,245 +26712,239 @@ static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) {
|
|
|
26696
26712
|
}
|
|
26697
26713
|
return (char) val;
|
|
26698
26714
|
}
|
|
26699
|
-
}
|
|
26715
|
+
}
|
|
26700
26716
|
#endif
|
|
26701
|
-
if (
|
|
26702
|
-
|
|
26717
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26718
|
+
char val;
|
|
26719
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26720
|
+
if (!tmp) return (char) -1;
|
|
26721
|
+
val = __Pyx_PyInt_As_char(tmp);
|
|
26722
|
+
Py_DECREF(tmp);
|
|
26723
|
+
return val;
|
|
26724
|
+
}
|
|
26725
|
+
if (is_unsigned) {
|
|
26703
26726
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26704
|
-
|
|
26705
|
-
|
|
26706
|
-
|
|
26707
|
-
|
|
26708
|
-
|
|
26709
|
-
|
|
26710
|
-
|
|
26711
|
-
|
|
26712
|
-
|
|
26713
|
-
|
|
26714
|
-
|
|
26715
|
-
|
|
26716
|
-
|
|
26717
|
-
|
|
26718
|
-
}
|
|
26727
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26728
|
+
goto raise_neg_overflow;
|
|
26729
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26730
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26731
|
+
} else {
|
|
26732
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26733
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26734
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26735
|
+
case 2:
|
|
26736
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
26737
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26738
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26739
|
+
} else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
|
|
26740
|
+
return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26719
26741
|
}
|
|
26720
|
-
|
|
26721
|
-
|
|
26722
|
-
|
|
26723
|
-
|
|
26724
|
-
|
|
26725
|
-
|
|
26726
|
-
|
|
26727
|
-
|
|
26742
|
+
}
|
|
26743
|
+
break;
|
|
26744
|
+
case 3:
|
|
26745
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
26746
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26747
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26748
|
+
} else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
|
|
26749
|
+
return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26728
26750
|
}
|
|
26729
|
-
|
|
26730
|
-
|
|
26731
|
-
|
|
26732
|
-
|
|
26733
|
-
|
|
26734
|
-
|
|
26735
|
-
|
|
26736
|
-
|
|
26751
|
+
}
|
|
26752
|
+
break;
|
|
26753
|
+
case 4:
|
|
26754
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
26755
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26756
|
+
__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])))
|
|
26757
|
+
} else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
|
|
26758
|
+
return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26737
26759
|
}
|
|
26738
|
-
|
|
26739
|
-
|
|
26760
|
+
}
|
|
26761
|
+
break;
|
|
26740
26762
|
}
|
|
26763
|
+
}
|
|
26741
26764
|
#endif
|
|
26742
26765
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26743
|
-
|
|
26744
|
-
|
|
26745
|
-
|
|
26766
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26767
|
+
goto raise_neg_overflow;
|
|
26768
|
+
}
|
|
26746
26769
|
#else
|
|
26747
|
-
|
|
26748
|
-
|
|
26749
|
-
|
|
26750
|
-
|
|
26751
|
-
|
|
26752
|
-
|
|
26753
|
-
|
|
26770
|
+
{
|
|
26771
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26772
|
+
if (unlikely(result < 0))
|
|
26773
|
+
return (char) -1;
|
|
26774
|
+
if (unlikely(result == 1))
|
|
26775
|
+
goto raise_neg_overflow;
|
|
26776
|
+
}
|
|
26754
26777
|
#endif
|
|
26755
|
-
|
|
26756
|
-
|
|
26778
|
+
if ((sizeof(char) <= sizeof(unsigned long))) {
|
|
26779
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26757
26780
|
#ifdef HAVE_LONG_LONG
|
|
26758
|
-
|
|
26759
|
-
|
|
26781
|
+
} else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26782
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26760
26783
|
#endif
|
|
26761
|
-
|
|
26762
|
-
|
|
26784
|
+
}
|
|
26785
|
+
} else {
|
|
26763
26786
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26764
|
-
|
|
26765
|
-
|
|
26766
|
-
|
|
26767
|
-
|
|
26768
|
-
|
|
26769
|
-
|
|
26770
|
-
|
|
26771
|
-
|
|
26772
|
-
|
|
26773
|
-
|
|
26774
|
-
|
|
26775
|
-
|
|
26776
|
-
}
|
|
26787
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26788
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26789
|
+
} else {
|
|
26790
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26791
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26792
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26793
|
+
case -2:
|
|
26794
|
+
if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
|
|
26795
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26796
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26797
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
26798
|
+
return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26777
26799
|
}
|
|
26778
|
-
|
|
26779
|
-
|
|
26780
|
-
|
|
26781
|
-
|
|
26782
|
-
|
|
26783
|
-
|
|
26784
|
-
|
|
26785
|
-
|
|
26800
|
+
}
|
|
26801
|
+
break;
|
|
26802
|
+
case 2:
|
|
26803
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
26804
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26805
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26806
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
26807
|
+
return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26786
26808
|
}
|
|
26787
|
-
|
|
26788
|
-
|
|
26789
|
-
|
|
26790
|
-
|
|
26791
|
-
|
|
26792
|
-
|
|
26793
|
-
|
|
26794
|
-
|
|
26809
|
+
}
|
|
26810
|
+
break;
|
|
26811
|
+
case -3:
|
|
26812
|
+
if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
26813
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26814
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26815
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
26816
|
+
return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26795
26817
|
}
|
|
26796
|
-
|
|
26797
|
-
|
|
26798
|
-
|
|
26799
|
-
|
|
26800
|
-
|
|
26801
|
-
|
|
26802
|
-
|
|
26803
|
-
|
|
26818
|
+
}
|
|
26819
|
+
break;
|
|
26820
|
+
case 3:
|
|
26821
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
26822
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26823
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26824
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
26825
|
+
return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26804
26826
|
}
|
|
26805
|
-
|
|
26806
|
-
|
|
26807
|
-
|
|
26808
|
-
|
|
26809
|
-
|
|
26810
|
-
|
|
26811
|
-
|
|
26812
|
-
|
|
26827
|
+
}
|
|
26828
|
+
break;
|
|
26829
|
+
case -4:
|
|
26830
|
+
if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
26831
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26832
|
+
__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])))
|
|
26833
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
26834
|
+
return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26813
26835
|
}
|
|
26814
|
-
|
|
26815
|
-
|
|
26816
|
-
|
|
26817
|
-
|
|
26818
|
-
|
|
26819
|
-
|
|
26820
|
-
|
|
26821
|
-
|
|
26836
|
+
}
|
|
26837
|
+
break;
|
|
26838
|
+
case 4:
|
|
26839
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
26840
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26841
|
+
__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])))
|
|
26842
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
26843
|
+
return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
26822
26844
|
}
|
|
26823
|
-
|
|
26824
|
-
|
|
26845
|
+
}
|
|
26846
|
+
break;
|
|
26825
26847
|
}
|
|
26848
|
+
}
|
|
26826
26849
|
#endif
|
|
26827
|
-
|
|
26828
|
-
|
|
26850
|
+
if ((sizeof(char) <= sizeof(long))) {
|
|
26851
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
|
|
26829
26852
|
#ifdef HAVE_LONG_LONG
|
|
26830
|
-
|
|
26831
|
-
|
|
26853
|
+
} else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
|
|
26854
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26832
26855
|
#endif
|
|
26833
|
-
}
|
|
26834
26856
|
}
|
|
26835
|
-
|
|
26836
|
-
|
|
26837
|
-
|
|
26838
|
-
|
|
26839
|
-
|
|
26840
|
-
|
|
26841
|
-
|
|
26842
|
-
|
|
26843
|
-
|
|
26844
|
-
|
|
26845
|
-
|
|
26846
|
-
|
|
26847
|
-
|
|
26848
|
-
|
|
26849
|
-
|
|
26850
|
-
|
|
26851
|
-
|
|
26852
|
-
|
|
26853
|
-
|
|
26854
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26855
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26856
|
-
long idigit;
|
|
26857
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26858
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26859
|
-
PyObject *tmp = v;
|
|
26860
|
-
v = PyNumber_Long(v);
|
|
26861
|
-
assert(PyLong_CheckExact(v));
|
|
26862
|
-
Py_DECREF(tmp);
|
|
26863
|
-
if (unlikely(!v)) return (char) -1;
|
|
26864
|
-
}
|
|
26865
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26866
|
-
if (Py_SIZE(x) == 0)
|
|
26867
|
-
return (char) 0;
|
|
26868
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26857
|
+
}
|
|
26858
|
+
{
|
|
26859
|
+
char val;
|
|
26860
|
+
int ret = -1;
|
|
26861
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26862
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26863
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26864
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26865
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26866
|
+
goto raise_overflow;
|
|
26867
|
+
} else {
|
|
26868
|
+
ret = 0;
|
|
26869
|
+
}
|
|
26870
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26871
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26872
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26873
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26874
|
+
bytes, sizeof(val),
|
|
26875
|
+
is_little, !is_unsigned);
|
|
26869
26876
|
#else
|
|
26870
|
-
|
|
26871
|
-
|
|
26872
|
-
|
|
26873
|
-
|
|
26874
|
-
|
|
26875
|
-
|
|
26876
|
-
|
|
26877
|
-
|
|
26878
|
-
|
|
26879
|
-
|
|
26880
|
-
|
|
26881
|
-
|
|
26882
|
-
|
|
26883
|
-
|
|
26884
|
-
stepval = __Pyx_NewRef(v);
|
|
26885
|
-
}
|
|
26886
|
-
val = (char) 0;
|
|
26887
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26888
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26889
|
-
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
26890
|
-
PyObject *tmp, *digit;
|
|
26891
|
-
digit = PyNumber_And(stepval, mask);
|
|
26892
|
-
if (unlikely(!digit)) goto done;
|
|
26893
|
-
idigit = PyLong_AsLong(digit);
|
|
26894
|
-
Py_DECREF(digit);
|
|
26895
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26896
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26897
|
-
if (unlikely(!tmp)) goto done;
|
|
26898
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26899
|
-
val |= ((char) idigit) << bits;
|
|
26900
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26901
|
-
if (Py_SIZE(stepval) == 0)
|
|
26902
|
-
goto unpacking_done;
|
|
26903
|
-
#endif
|
|
26904
|
-
}
|
|
26905
|
-
idigit = PyLong_AsLong(stepval);
|
|
26906
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26907
|
-
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26908
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26909
|
-
goto raise_overflow;
|
|
26910
|
-
val |= ((char) idigit) << bits;
|
|
26911
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26912
|
-
unpacking_done:
|
|
26913
|
-
#endif
|
|
26914
|
-
if (!is_unsigned) {
|
|
26915
|
-
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
26916
|
-
goto raise_overflow;
|
|
26917
|
-
if (is_negative)
|
|
26918
|
-
val = ~val;
|
|
26919
|
-
}
|
|
26920
|
-
ret = 0;
|
|
26921
|
-
done:
|
|
26922
|
-
Py_XDECREF(shift);
|
|
26923
|
-
Py_XDECREF(mask);
|
|
26924
|
-
Py_XDECREF(stepval);
|
|
26925
|
-
#endif
|
|
26877
|
+
PyObject *v;
|
|
26878
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26879
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26880
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26881
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26882
|
+
v = __Pyx_NewRef(x);
|
|
26883
|
+
} else {
|
|
26884
|
+
v = PyNumber_Long(x);
|
|
26885
|
+
if (unlikely(!v)) return (char) -1;
|
|
26886
|
+
assert(PyLong_CheckExact(v));
|
|
26887
|
+
}
|
|
26888
|
+
{
|
|
26889
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26890
|
+
if (unlikely(result < 0)) {
|
|
26926
26891
|
Py_DECREF(v);
|
|
26927
|
-
|
|
26928
|
-
return val;
|
|
26892
|
+
return (char) -1;
|
|
26929
26893
|
}
|
|
26930
|
-
|
|
26894
|
+
is_negative = result == 1;
|
|
26931
26895
|
}
|
|
26932
|
-
|
|
26933
|
-
|
|
26934
|
-
|
|
26935
|
-
|
|
26936
|
-
|
|
26937
|
-
|
|
26896
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26897
|
+
Py_DECREF(v);
|
|
26898
|
+
goto raise_neg_overflow;
|
|
26899
|
+
} else if (is_negative) {
|
|
26900
|
+
stepval = PyNumber_Invert(v);
|
|
26901
|
+
Py_DECREF(v);
|
|
26902
|
+
if (unlikely(!stepval))
|
|
26903
|
+
return (char) -1;
|
|
26904
|
+
} else {
|
|
26905
|
+
stepval = v;
|
|
26906
|
+
}
|
|
26907
|
+
v = NULL;
|
|
26908
|
+
val = (char) 0;
|
|
26909
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26910
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26911
|
+
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
26912
|
+
PyObject *tmp, *digit;
|
|
26913
|
+
long idigit;
|
|
26914
|
+
digit = PyNumber_And(stepval, mask);
|
|
26915
|
+
if (unlikely(!digit)) goto done;
|
|
26916
|
+
idigit = PyLong_AsLong(digit);
|
|
26917
|
+
Py_DECREF(digit);
|
|
26918
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26919
|
+
val |= ((char) idigit) << bits;
|
|
26920
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26921
|
+
if (unlikely(!tmp)) goto done;
|
|
26922
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26923
|
+
}
|
|
26924
|
+
Py_DECREF(shift); shift = NULL;
|
|
26925
|
+
Py_DECREF(mask); mask = NULL;
|
|
26926
|
+
{
|
|
26927
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26928
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26929
|
+
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26930
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26931
|
+
goto raise_overflow;
|
|
26932
|
+
val |= ((char) idigit) << bits;
|
|
26933
|
+
}
|
|
26934
|
+
if (!is_unsigned) {
|
|
26935
|
+
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
26936
|
+
goto raise_overflow;
|
|
26937
|
+
if (is_negative)
|
|
26938
|
+
val = ~val;
|
|
26939
|
+
}
|
|
26940
|
+
ret = 0;
|
|
26941
|
+
done:
|
|
26942
|
+
Py_XDECREF(shift);
|
|
26943
|
+
Py_XDECREF(mask);
|
|
26944
|
+
Py_XDECREF(stepval);
|
|
26945
|
+
#endif
|
|
26946
|
+
if (unlikely(ret))
|
|
26947
|
+
return (char) -1;
|
|
26938
26948
|
return val;
|
|
26939
26949
|
}
|
|
26940
26950
|
raise_overflow:
|