scikit-network 0.33.0__cp311-cp311-win_amd64.whl → 0.33.2__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of scikit-network might be problematic. Click here for more details.
- scikit_network-0.33.2.dist-info/METADATA +122 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info}/RECORD +44 -44
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info}/WHEEL +1 -1
- sknetwork/classification/diffusion.py +1 -1
- sknetwork/classification/knn.py +1 -1
- sknetwork/classification/metrics.py +3 -3
- sknetwork/classification/pagerank.py +1 -1
- sknetwork/classification/propagation.py +1 -1
- sknetwork/classification/vote.cp311-win_amd64.pyd +0 -0
- sknetwork/classification/vote.cpp +686 -679
- sknetwork/clustering/leiden_core.cp311-win_amd64.pyd +0 -0
- sknetwork/clustering/leiden_core.cpp +715 -704
- sknetwork/clustering/louvain.py +3 -3
- sknetwork/clustering/louvain_core.cp311-win_amd64.pyd +0 -0
- sknetwork/clustering/louvain_core.cpp +715 -704
- sknetwork/clustering/metrics.py +1 -1
- sknetwork/clustering/tests/test_louvain.py +6 -0
- sknetwork/gnn/base_activation.py +1 -0
- sknetwork/gnn/gnn_classifier.py +1 -1
- sknetwork/hierarchy/metrics.py +3 -3
- sknetwork/hierarchy/paris.cp311-win_amd64.pyd +0 -0
- sknetwork/hierarchy/paris.cpp +1766 -1162
- sknetwork/linalg/diteration.cp311-win_amd64.pyd +0 -0
- sknetwork/linalg/diteration.cpp +686 -679
- sknetwork/linalg/push.cp311-win_amd64.pyd +0 -0
- sknetwork/linalg/push.cpp +1763 -1165
- sknetwork/linalg/sparse_lowrank.py +1 -1
- sknetwork/ranking/betweenness.cp311-win_amd64.pyd +0 -0
- sknetwork/ranking/betweenness.cpp +565 -559
- sknetwork/topology/cliques.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/cliques.cpp +1723 -1122
- sknetwork/topology/core.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/core.cpp +1749 -1151
- sknetwork/topology/cycles.py +2 -2
- sknetwork/topology/minheap.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/minheap.cpp +689 -679
- sknetwork/topology/triangles.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/triangles.cpp +439 -434
- sknetwork/topology/weisfeiler_lehman_core.cp311-win_amd64.pyd +0 -0
- sknetwork/topology/weisfeiler_lehman_core.cpp +686 -679
- sknetwork/visualization/graphs.py +1 -1
- scikit_network-0.33.0.dist-info/METADATA +0 -517
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info/licenses}/AUTHORS.rst +0 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info/licenses}/LICENSE +0 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.2.dist-info}/top_level.txt +0 -0
|
@@ -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-um3f_m6n\\overlay\\Lib\\site-packages\\numpy\\_core\\include"
|
|
12
12
|
],
|
|
13
13
|
"language": "c++",
|
|
14
14
|
"name": "sknetwork.classification.vote",
|
|
@@ -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
|
|
@@ -2047,7 +2047,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
|
|
|
2047
2047
|
#if !CYTHON_VECTORCALL
|
|
2048
2048
|
#if PY_VERSION_HEX >= 0x03080000
|
|
2049
2049
|
#include "frameobject.h"
|
|
2050
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
2050
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
2051
2051
|
#ifndef Py_BUILD_CORE
|
|
2052
2052
|
#define Py_BUILD_CORE 1
|
|
2053
2053
|
#endif
|
|
@@ -2384,11 +2384,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
|
|
|
2384
2384
|
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
|
|
2385
2385
|
|
|
2386
2386
|
/* HasAttr.proto */
|
|
2387
|
-
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
|
|
2388
|
-
#define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
|
|
2389
|
-
#else
|
|
2390
2387
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
|
|
2391
|
-
#endif
|
|
2392
2388
|
|
|
2393
2389
|
/* MoveIfSupported.proto */
|
|
2394
2390
|
#if CYTHON_USE_CPP_STD_MOVE
|
|
@@ -4216,10 +4212,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4216
4212
|
PyObject *__pyx_t_4 = NULL;
|
|
4217
4213
|
PyObject *__pyx_t_5 = NULL;
|
|
4218
4214
|
PyObject *__pyx_t_6 = NULL;
|
|
4219
|
-
int __pyx_t_7;
|
|
4215
|
+
unsigned int __pyx_t_7;
|
|
4220
4216
|
char *__pyx_t_8;
|
|
4221
|
-
|
|
4222
|
-
|
|
4217
|
+
int __pyx_t_9;
|
|
4218
|
+
Py_ssize_t __pyx_t_10;
|
|
4219
|
+
Py_UCS4 __pyx_t_11;
|
|
4223
4220
|
int __pyx_lineno = 0;
|
|
4224
4221
|
const char *__pyx_filename = NULL;
|
|
4225
4222
|
int __pyx_clineno = 0;
|
|
@@ -4445,7 +4442,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4445
4442
|
* if dim <= 0:
|
|
4446
4443
|
* raise ValueError, f"Invalid shape in axis {idx}: {dim}."
|
|
4447
4444
|
*/
|
|
4448
|
-
|
|
4445
|
+
__pyx_t_9 = 0;
|
|
4449
4446
|
__pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4);
|
|
4450
4447
|
__pyx_t_1 = 0;
|
|
4451
4448
|
for (;;) {
|
|
@@ -4462,11 +4459,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4462
4459
|
__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)
|
|
4463
4460
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4464
4461
|
#endif
|
|
4465
|
-
|
|
4462
|
+
__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)
|
|
4466
4463
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4467
|
-
__pyx_v_dim =
|
|
4468
|
-
__pyx_v_idx =
|
|
4469
|
-
|
|
4464
|
+
__pyx_v_dim = __pyx_t_10;
|
|
4465
|
+
__pyx_v_idx = __pyx_t_9;
|
|
4466
|
+
__pyx_t_9 = (__pyx_t_9 + 1);
|
|
4470
4467
|
|
|
4471
4468
|
/* "View.MemoryView":160
|
|
4472
4469
|
*
|
|
@@ -4487,33 +4484,33 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4487
4484
|
*/
|
|
4488
4485
|
__pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4489
4486
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4490
|
-
|
|
4491
|
-
|
|
4487
|
+
__pyx_t_10 = 0;
|
|
4488
|
+
__pyx_t_11 = 127;
|
|
4492
4489
|
__Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4493
|
-
|
|
4490
|
+
__pyx_t_10 += 22;
|
|
4494
4491
|
__Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4495
4492
|
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis);
|
|
4496
4493
|
__pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4497
4494
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4498
|
-
|
|
4495
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4499
4496
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4500
4497
|
PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
|
|
4501
4498
|
__pyx_t_6 = 0;
|
|
4502
4499
|
__Pyx_INCREF(__pyx_kp_u_);
|
|
4503
|
-
|
|
4500
|
+
__pyx_t_10 += 2;
|
|
4504
4501
|
__Pyx_GIVEREF(__pyx_kp_u_);
|
|
4505
4502
|
PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_);
|
|
4506
4503
|
__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)
|
|
4507
4504
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4508
|
-
|
|
4505
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4509
4506
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4510
4507
|
PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6);
|
|
4511
4508
|
__pyx_t_6 = 0;
|
|
4512
4509
|
__Pyx_INCREF(__pyx_kp_u__2);
|
|
4513
|
-
|
|
4510
|
+
__pyx_t_10 += 1;
|
|
4514
4511
|
__Pyx_GIVEREF(__pyx_kp_u__2);
|
|
4515
4512
|
PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2);
|
|
4516
|
-
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5,
|
|
4513
|
+
__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)
|
|
4517
4514
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4518
4515
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4519
4516
|
__Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
|
|
@@ -4697,7 +4694,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4697
4694
|
*
|
|
4698
4695
|
* @cname('getbuffer')
|
|
4699
4696
|
*/
|
|
4700
|
-
|
|
4697
|
+
__pyx_t_9 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
|
|
4701
4698
|
|
|
4702
4699
|
/* "View.MemoryView":179
|
|
4703
4700
|
* self.dtype_is_object = format == b'O'
|
|
@@ -7852,7 +7849,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7852
7849
|
*
|
|
7853
7850
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
7854
7851
|
* obj = self.is_slice(value)
|
|
7855
|
-
* if obj:
|
|
7852
|
+
* if obj is not None:
|
|
7856
7853
|
*/
|
|
7857
7854
|
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error)
|
|
7858
7855
|
if (__pyx_t_4) {
|
|
@@ -7861,7 +7858,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7861
7858
|
*
|
|
7862
7859
|
* if have_slices:
|
|
7863
7860
|
* obj = self.is_slice(value) # <<<<<<<<<<<<<<
|
|
7864
|
-
* if obj:
|
|
7861
|
+
* if obj is not None:
|
|
7865
7862
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7866
7863
|
*/
|
|
7867
7864
|
__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)
|
|
@@ -7872,16 +7869,16 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7872
7869
|
/* "View.MemoryView":428
|
|
7873
7870
|
* if have_slices:
|
|
7874
7871
|
* obj = self.is_slice(value)
|
|
7875
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
7872
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
7876
7873
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7877
7874
|
* else:
|
|
7878
7875
|
*/
|
|
7879
|
-
__pyx_t_4 =
|
|
7876
|
+
__pyx_t_4 = (__pyx_v_obj != Py_None);
|
|
7880
7877
|
if (__pyx_t_4) {
|
|
7881
7878
|
|
|
7882
7879
|
/* "View.MemoryView":429
|
|
7883
7880
|
* obj = self.is_slice(value)
|
|
7884
|
-
* if obj:
|
|
7881
|
+
* if obj is not None:
|
|
7885
7882
|
* self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
|
|
7886
7883
|
* else:
|
|
7887
7884
|
* self.setitem_slice_assign_scalar(self[index], value)
|
|
@@ -7896,7 +7893,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7896
7893
|
/* "View.MemoryView":428
|
|
7897
7894
|
* if have_slices:
|
|
7898
7895
|
* obj = self.is_slice(value)
|
|
7899
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
7896
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
7900
7897
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7901
7898
|
* else:
|
|
7902
7899
|
*/
|
|
@@ -7926,7 +7923,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7926
7923
|
*
|
|
7927
7924
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
7928
7925
|
* obj = self.is_slice(value)
|
|
7929
|
-
* if obj:
|
|
7926
|
+
* if obj is not None:
|
|
7930
7927
|
*/
|
|
7931
7928
|
goto __pyx_L4;
|
|
7932
7929
|
}
|
|
@@ -8634,9 +8631,10 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
8634
8631
|
PyObject *__pyx_t_5 = NULL;
|
|
8635
8632
|
PyObject *__pyx_t_6 = NULL;
|
|
8636
8633
|
PyObject *__pyx_t_7 = NULL;
|
|
8637
|
-
int __pyx_t_8;
|
|
8634
|
+
unsigned int __pyx_t_8;
|
|
8638
8635
|
Py_ssize_t __pyx_t_9;
|
|
8639
8636
|
int __pyx_t_10;
|
|
8637
|
+
int __pyx_t_11;
|
|
8640
8638
|
int __pyx_lineno = 0;
|
|
8641
8639
|
const char *__pyx_filename = NULL;
|
|
8642
8640
|
int __pyx_clineno = 0;
|
|
@@ -8791,11 +8789,11 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
8791
8789
|
__Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6);
|
|
8792
8790
|
__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)
|
|
8793
8791
|
__Pyx_GOTREF(__pyx_t_7);
|
|
8794
|
-
|
|
8792
|
+
__pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
|
|
8795
8793
|
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
|
|
8796
8794
|
__Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6);
|
|
8797
8795
|
__pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
|
|
8798
|
-
if (
|
|
8796
|
+
if (__pyx_t_11) {
|
|
8799
8797
|
__Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
|
|
8800
8798
|
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error)
|
|
8801
8799
|
__Pyx_XGOTREF(__pyx_t_6);
|
|
@@ -8880,7 +8878,7 @@ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryvie
|
|
|
8880
8878
|
PyObject *__pyx_t_3 = NULL;
|
|
8881
8879
|
PyObject *__pyx_t_4 = NULL;
|
|
8882
8880
|
PyObject *__pyx_t_5 = NULL;
|
|
8883
|
-
int __pyx_t_6;
|
|
8881
|
+
unsigned int __pyx_t_6;
|
|
8884
8882
|
Py_ssize_t __pyx_t_7;
|
|
8885
8883
|
PyObject *__pyx_t_8 = NULL;
|
|
8886
8884
|
char *__pyx_t_9;
|
|
@@ -17354,7 +17352,7 @@ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSE
|
|
|
17354
17352
|
int __pyx_t_2;
|
|
17355
17353
|
PyObject *__pyx_t_3 = NULL;
|
|
17356
17354
|
PyObject *__pyx_t_4 = NULL;
|
|
17357
|
-
int __pyx_t_5;
|
|
17355
|
+
unsigned int __pyx_t_5;
|
|
17358
17356
|
int __pyx_lineno = 0;
|
|
17359
17357
|
const char *__pyx_filename = NULL;
|
|
17360
17358
|
int __pyx_clineno = 0;
|
|
@@ -17536,7 +17534,7 @@ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__
|
|
|
17536
17534
|
PyObject *__pyx_t_5 = NULL;
|
|
17537
17535
|
PyObject *__pyx_t_6 = NULL;
|
|
17538
17536
|
PyObject *__pyx_t_7 = NULL;
|
|
17539
|
-
int __pyx_t_8;
|
|
17537
|
+
unsigned int __pyx_t_8;
|
|
17540
17538
|
int __pyx_lineno = 0;
|
|
17541
17539
|
const char *__pyx_filename = NULL;
|
|
17542
17540
|
int __pyx_clineno = 0;
|
|
@@ -18457,6 +18455,9 @@ static PyTypeObject __pyx_type___pyx_array = {
|
|
|
18457
18455
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18458
18456
|
0, /*tp_watched*/
|
|
18459
18457
|
#endif
|
|
18458
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18459
|
+
0, /*tp_versions_used*/
|
|
18460
|
+
#endif
|
|
18460
18461
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18461
18462
|
0, /*tp_pypy_flags*/
|
|
18462
18463
|
#endif
|
|
@@ -18627,6 +18628,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
|
|
|
18627
18628
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18628
18629
|
0, /*tp_watched*/
|
|
18629
18630
|
#endif
|
|
18631
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18632
|
+
0, /*tp_versions_used*/
|
|
18633
|
+
#endif
|
|
18630
18634
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18631
18635
|
0, /*tp_pypy_flags*/
|
|
18632
18636
|
#endif
|
|
@@ -18970,6 +18974,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
|
|
|
18970
18974
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18971
18975
|
0, /*tp_watched*/
|
|
18972
18976
|
#endif
|
|
18977
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18978
|
+
0, /*tp_versions_used*/
|
|
18979
|
+
#endif
|
|
18973
18980
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18974
18981
|
0, /*tp_pypy_flags*/
|
|
18975
18982
|
#endif
|
|
@@ -19142,6 +19149,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
|
|
|
19142
19149
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
19143
19150
|
0, /*tp_watched*/
|
|
19144
19151
|
#endif
|
|
19152
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
19153
|
+
0, /*tp_versions_used*/
|
|
19154
|
+
#endif
|
|
19145
19155
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
19146
19156
|
0, /*tp_pypy_flags*/
|
|
19147
19157
|
#endif
|
|
@@ -23014,7 +23024,6 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
|
|
|
23014
23024
|
}
|
|
23015
23025
|
|
|
23016
23026
|
/* HasAttr */
|
|
23017
|
-
#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
|
|
23018
23027
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
23019
23028
|
PyObject *r;
|
|
23020
23029
|
if (unlikely(!__Pyx_PyBaseString_Check(n))) {
|
|
@@ -23031,7 +23040,6 @@ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
|
23031
23040
|
return 1;
|
|
23032
23041
|
}
|
|
23033
23042
|
}
|
|
23034
|
-
#endif
|
|
23035
23043
|
|
|
23036
23044
|
/* PyObject_GenericGetAttrNoDict */
|
|
23037
23045
|
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
|
|
@@ -24771,6 +24779,9 @@ static PyTypeObject __pyx_CyFunctionType_type = {
|
|
|
24771
24779
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
24772
24780
|
0,
|
|
24773
24781
|
#endif
|
|
24782
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
24783
|
+
0,
|
|
24784
|
+
#endif
|
|
24774
24785
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
24775
24786
|
0,
|
|
24776
24787
|
#endif
|
|
@@ -24956,7 +24967,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
|
|
|
24956
24967
|
#include "compile.h"
|
|
24957
24968
|
#include "frameobject.h"
|
|
24958
24969
|
#include "traceback.h"
|
|
24959
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
24970
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
24960
24971
|
#ifndef Py_BUILD_CORE
|
|
24961
24972
|
#define Py_BUILD_CORE 1
|
|
24962
24973
|
#endif
|
|
@@ -26277,245 +26288,239 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice,
|
|
|
26277
26288
|
}
|
|
26278
26289
|
return (int) val;
|
|
26279
26290
|
}
|
|
26280
|
-
}
|
|
26291
|
+
}
|
|
26281
26292
|
#endif
|
|
26282
|
-
if (
|
|
26283
|
-
|
|
26293
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26294
|
+
int val;
|
|
26295
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26296
|
+
if (!tmp) return (int) -1;
|
|
26297
|
+
val = __Pyx_PyInt_As_int(tmp);
|
|
26298
|
+
Py_DECREF(tmp);
|
|
26299
|
+
return val;
|
|
26300
|
+
}
|
|
26301
|
+
if (is_unsigned) {
|
|
26284
26302
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26285
|
-
|
|
26286
|
-
|
|
26287
|
-
|
|
26288
|
-
|
|
26289
|
-
|
|
26290
|
-
|
|
26291
|
-
|
|
26292
|
-
|
|
26293
|
-
|
|
26294
|
-
|
|
26295
|
-
|
|
26296
|
-
|
|
26297
|
-
|
|
26298
|
-
|
|
26299
|
-
}
|
|
26303
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26304
|
+
goto raise_neg_overflow;
|
|
26305
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26306
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26307
|
+
} else {
|
|
26308
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26309
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26310
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26311
|
+
case 2:
|
|
26312
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
26313
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26314
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26315
|
+
} else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
|
|
26316
|
+
return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26300
26317
|
}
|
|
26301
|
-
|
|
26302
|
-
|
|
26303
|
-
|
|
26304
|
-
|
|
26305
|
-
|
|
26306
|
-
|
|
26307
|
-
|
|
26308
|
-
|
|
26318
|
+
}
|
|
26319
|
+
break;
|
|
26320
|
+
case 3:
|
|
26321
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
26322
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26323
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26324
|
+
} else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
|
|
26325
|
+
return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26309
26326
|
}
|
|
26310
|
-
|
|
26311
|
-
|
|
26312
|
-
|
|
26313
|
-
|
|
26314
|
-
|
|
26315
|
-
|
|
26316
|
-
|
|
26317
|
-
|
|
26327
|
+
}
|
|
26328
|
+
break;
|
|
26329
|
+
case 4:
|
|
26330
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
26331
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26332
|
+
__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])))
|
|
26333
|
+
} else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
|
|
26334
|
+
return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26318
26335
|
}
|
|
26319
|
-
|
|
26320
|
-
|
|
26336
|
+
}
|
|
26337
|
+
break;
|
|
26321
26338
|
}
|
|
26339
|
+
}
|
|
26322
26340
|
#endif
|
|
26323
26341
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26324
|
-
|
|
26325
|
-
|
|
26326
|
-
|
|
26342
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26343
|
+
goto raise_neg_overflow;
|
|
26344
|
+
}
|
|
26327
26345
|
#else
|
|
26328
|
-
|
|
26329
|
-
|
|
26330
|
-
|
|
26331
|
-
|
|
26332
|
-
|
|
26333
|
-
|
|
26334
|
-
|
|
26346
|
+
{
|
|
26347
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26348
|
+
if (unlikely(result < 0))
|
|
26349
|
+
return (int) -1;
|
|
26350
|
+
if (unlikely(result == 1))
|
|
26351
|
+
goto raise_neg_overflow;
|
|
26352
|
+
}
|
|
26335
26353
|
#endif
|
|
26336
|
-
|
|
26337
|
-
|
|
26354
|
+
if ((sizeof(int) <= sizeof(unsigned long))) {
|
|
26355
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26338
26356
|
#ifdef HAVE_LONG_LONG
|
|
26339
|
-
|
|
26340
|
-
|
|
26357
|
+
} else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26358
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26341
26359
|
#endif
|
|
26342
|
-
|
|
26343
|
-
|
|
26360
|
+
}
|
|
26361
|
+
} else {
|
|
26344
26362
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26345
|
-
|
|
26346
|
-
|
|
26347
|
-
|
|
26348
|
-
|
|
26349
|
-
|
|
26350
|
-
|
|
26351
|
-
|
|
26352
|
-
|
|
26353
|
-
|
|
26354
|
-
|
|
26355
|
-
|
|
26356
|
-
|
|
26357
|
-
}
|
|
26363
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26364
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26365
|
+
} else {
|
|
26366
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26367
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26368
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26369
|
+
case -2:
|
|
26370
|
+
if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
|
|
26371
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26372
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26373
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26374
|
+
return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26358
26375
|
}
|
|
26359
|
-
|
|
26360
|
-
|
|
26361
|
-
|
|
26362
|
-
|
|
26363
|
-
|
|
26364
|
-
|
|
26365
|
-
|
|
26366
|
-
|
|
26376
|
+
}
|
|
26377
|
+
break;
|
|
26378
|
+
case 2:
|
|
26379
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
26380
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26381
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26382
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26383
|
+
return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26367
26384
|
}
|
|
26368
|
-
|
|
26369
|
-
|
|
26370
|
-
|
|
26371
|
-
|
|
26372
|
-
|
|
26373
|
-
|
|
26374
|
-
|
|
26375
|
-
|
|
26385
|
+
}
|
|
26386
|
+
break;
|
|
26387
|
+
case -3:
|
|
26388
|
+
if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26389
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26390
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26391
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26392
|
+
return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26376
26393
|
}
|
|
26377
|
-
|
|
26378
|
-
|
|
26379
|
-
|
|
26380
|
-
|
|
26381
|
-
|
|
26382
|
-
|
|
26383
|
-
|
|
26384
|
-
|
|
26394
|
+
}
|
|
26395
|
+
break;
|
|
26396
|
+
case 3:
|
|
26397
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
26398
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26399
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26400
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26401
|
+
return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26385
26402
|
}
|
|
26386
|
-
|
|
26387
|
-
|
|
26388
|
-
|
|
26389
|
-
|
|
26390
|
-
|
|
26391
|
-
|
|
26392
|
-
|
|
26393
|
-
|
|
26403
|
+
}
|
|
26404
|
+
break;
|
|
26405
|
+
case -4:
|
|
26406
|
+
if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26407
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26408
|
+
__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])))
|
|
26409
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
26410
|
+
return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26394
26411
|
}
|
|
26395
|
-
|
|
26396
|
-
|
|
26397
|
-
|
|
26398
|
-
|
|
26399
|
-
|
|
26400
|
-
|
|
26401
|
-
|
|
26402
|
-
|
|
26412
|
+
}
|
|
26413
|
+
break;
|
|
26414
|
+
case 4:
|
|
26415
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
26416
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26417
|
+
__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])))
|
|
26418
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
26419
|
+
return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26403
26420
|
}
|
|
26404
|
-
|
|
26405
|
-
|
|
26421
|
+
}
|
|
26422
|
+
break;
|
|
26406
26423
|
}
|
|
26424
|
+
}
|
|
26407
26425
|
#endif
|
|
26408
|
-
|
|
26409
|
-
|
|
26426
|
+
if ((sizeof(int) <= sizeof(long))) {
|
|
26427
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
|
|
26410
26428
|
#ifdef HAVE_LONG_LONG
|
|
26411
|
-
|
|
26412
|
-
|
|
26429
|
+
} else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
|
|
26430
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26413
26431
|
#endif
|
|
26414
|
-
}
|
|
26415
26432
|
}
|
|
26416
|
-
|
|
26417
|
-
|
|
26418
|
-
|
|
26419
|
-
|
|
26420
|
-
|
|
26421
|
-
|
|
26422
|
-
|
|
26423
|
-
|
|
26424
|
-
|
|
26425
|
-
|
|
26426
|
-
|
|
26427
|
-
|
|
26428
|
-
|
|
26429
|
-
|
|
26430
|
-
|
|
26431
|
-
|
|
26432
|
-
|
|
26433
|
-
|
|
26434
|
-
|
|
26435
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26436
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26437
|
-
long idigit;
|
|
26438
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26439
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26440
|
-
PyObject *tmp = v;
|
|
26441
|
-
v = PyNumber_Long(v);
|
|
26442
|
-
assert(PyLong_CheckExact(v));
|
|
26443
|
-
Py_DECREF(tmp);
|
|
26444
|
-
if (unlikely(!v)) return (int) -1;
|
|
26445
|
-
}
|
|
26446
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26447
|
-
if (Py_SIZE(x) == 0)
|
|
26448
|
-
return (int) 0;
|
|
26449
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26433
|
+
}
|
|
26434
|
+
{
|
|
26435
|
+
int val;
|
|
26436
|
+
int ret = -1;
|
|
26437
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26438
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26439
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26440
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26441
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26442
|
+
goto raise_overflow;
|
|
26443
|
+
} else {
|
|
26444
|
+
ret = 0;
|
|
26445
|
+
}
|
|
26446
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26447
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26448
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26449
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26450
|
+
bytes, sizeof(val),
|
|
26451
|
+
is_little, !is_unsigned);
|
|
26450
26452
|
#else
|
|
26451
|
-
|
|
26452
|
-
|
|
26453
|
-
|
|
26454
|
-
|
|
26455
|
-
|
|
26456
|
-
|
|
26457
|
-
|
|
26458
|
-
|
|
26459
|
-
|
|
26460
|
-
|
|
26461
|
-
|
|
26462
|
-
|
|
26463
|
-
|
|
26464
|
-
|
|
26465
|
-
stepval = __Pyx_NewRef(v);
|
|
26466
|
-
}
|
|
26467
|
-
val = (int) 0;
|
|
26468
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26469
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26470
|
-
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
26471
|
-
PyObject *tmp, *digit;
|
|
26472
|
-
digit = PyNumber_And(stepval, mask);
|
|
26473
|
-
if (unlikely(!digit)) goto done;
|
|
26474
|
-
idigit = PyLong_AsLong(digit);
|
|
26475
|
-
Py_DECREF(digit);
|
|
26476
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26477
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26478
|
-
if (unlikely(!tmp)) goto done;
|
|
26479
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26480
|
-
val |= ((int) idigit) << bits;
|
|
26481
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26482
|
-
if (Py_SIZE(stepval) == 0)
|
|
26483
|
-
goto unpacking_done;
|
|
26484
|
-
#endif
|
|
26485
|
-
}
|
|
26486
|
-
idigit = PyLong_AsLong(stepval);
|
|
26487
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26488
|
-
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26489
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26490
|
-
goto raise_overflow;
|
|
26491
|
-
val |= ((int) idigit) << bits;
|
|
26492
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26493
|
-
unpacking_done:
|
|
26494
|
-
#endif
|
|
26495
|
-
if (!is_unsigned) {
|
|
26496
|
-
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
26497
|
-
goto raise_overflow;
|
|
26498
|
-
if (is_negative)
|
|
26499
|
-
val = ~val;
|
|
26500
|
-
}
|
|
26501
|
-
ret = 0;
|
|
26502
|
-
done:
|
|
26503
|
-
Py_XDECREF(shift);
|
|
26504
|
-
Py_XDECREF(mask);
|
|
26505
|
-
Py_XDECREF(stepval);
|
|
26506
|
-
#endif
|
|
26453
|
+
PyObject *v;
|
|
26454
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26455
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26456
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26457
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26458
|
+
v = __Pyx_NewRef(x);
|
|
26459
|
+
} else {
|
|
26460
|
+
v = PyNumber_Long(x);
|
|
26461
|
+
if (unlikely(!v)) return (int) -1;
|
|
26462
|
+
assert(PyLong_CheckExact(v));
|
|
26463
|
+
}
|
|
26464
|
+
{
|
|
26465
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26466
|
+
if (unlikely(result < 0)) {
|
|
26507
26467
|
Py_DECREF(v);
|
|
26508
|
-
|
|
26509
|
-
return val;
|
|
26468
|
+
return (int) -1;
|
|
26510
26469
|
}
|
|
26511
|
-
|
|
26470
|
+
is_negative = result == 1;
|
|
26512
26471
|
}
|
|
26513
|
-
|
|
26514
|
-
|
|
26515
|
-
|
|
26516
|
-
|
|
26517
|
-
|
|
26518
|
-
|
|
26472
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26473
|
+
Py_DECREF(v);
|
|
26474
|
+
goto raise_neg_overflow;
|
|
26475
|
+
} else if (is_negative) {
|
|
26476
|
+
stepval = PyNumber_Invert(v);
|
|
26477
|
+
Py_DECREF(v);
|
|
26478
|
+
if (unlikely(!stepval))
|
|
26479
|
+
return (int) -1;
|
|
26480
|
+
} else {
|
|
26481
|
+
stepval = v;
|
|
26482
|
+
}
|
|
26483
|
+
v = NULL;
|
|
26484
|
+
val = (int) 0;
|
|
26485
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26486
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26487
|
+
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
26488
|
+
PyObject *tmp, *digit;
|
|
26489
|
+
long idigit;
|
|
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
|
+
val |= ((int) idigit) << bits;
|
|
26496
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26497
|
+
if (unlikely(!tmp)) goto done;
|
|
26498
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26499
|
+
}
|
|
26500
|
+
Py_DECREF(shift); shift = NULL;
|
|
26501
|
+
Py_DECREF(mask); mask = NULL;
|
|
26502
|
+
{
|
|
26503
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26504
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26505
|
+
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26506
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26507
|
+
goto raise_overflow;
|
|
26508
|
+
val |= ((int) idigit) << bits;
|
|
26509
|
+
}
|
|
26510
|
+
if (!is_unsigned) {
|
|
26511
|
+
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
26512
|
+
goto raise_overflow;
|
|
26513
|
+
if (is_negative)
|
|
26514
|
+
val = ~val;
|
|
26515
|
+
}
|
|
26516
|
+
ret = 0;
|
|
26517
|
+
done:
|
|
26518
|
+
Py_XDECREF(shift);
|
|
26519
|
+
Py_XDECREF(mask);
|
|
26520
|
+
Py_XDECREF(stepval);
|
|
26521
|
+
#endif
|
|
26522
|
+
if (unlikely(ret))
|
|
26523
|
+
return (int) -1;
|
|
26519
26524
|
return val;
|
|
26520
26525
|
}
|
|
26521
26526
|
raise_overflow:
|
|
@@ -26559,12 +26564,19 @@ raise_neg_overflow:
|
|
|
26559
26564
|
}
|
|
26560
26565
|
}
|
|
26561
26566
|
{
|
|
26562
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26563
26567
|
unsigned char *bytes = (unsigned char *)&value;
|
|
26564
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
26568
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
26569
|
+
if (is_unsigned) {
|
|
26570
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
26571
|
+
} else {
|
|
26572
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
26573
|
+
}
|
|
26574
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
26575
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26565
26576
|
return _PyLong_FromByteArray(bytes, sizeof(int),
|
|
26566
26577
|
little, !is_unsigned);
|
|
26567
26578
|
#else
|
|
26579
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26568
26580
|
PyObject *from_bytes, *result = NULL;
|
|
26569
26581
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
26570
26582
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -26614,245 +26626,239 @@ raise_neg_overflow:
|
|
|
26614
26626
|
}
|
|
26615
26627
|
return (long) val;
|
|
26616
26628
|
}
|
|
26617
|
-
}
|
|
26629
|
+
}
|
|
26618
26630
|
#endif
|
|
26619
|
-
if (
|
|
26620
|
-
|
|
26631
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26632
|
+
long val;
|
|
26633
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26634
|
+
if (!tmp) return (long) -1;
|
|
26635
|
+
val = __Pyx_PyInt_As_long(tmp);
|
|
26636
|
+
Py_DECREF(tmp);
|
|
26637
|
+
return val;
|
|
26638
|
+
}
|
|
26639
|
+
if (is_unsigned) {
|
|
26621
26640
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26622
|
-
|
|
26623
|
-
|
|
26624
|
-
|
|
26625
|
-
|
|
26626
|
-
|
|
26627
|
-
|
|
26628
|
-
|
|
26629
|
-
|
|
26630
|
-
|
|
26631
|
-
|
|
26632
|
-
|
|
26633
|
-
|
|
26634
|
-
|
|
26635
|
-
|
|
26636
|
-
}
|
|
26641
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26642
|
+
goto raise_neg_overflow;
|
|
26643
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26644
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26645
|
+
} else {
|
|
26646
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26647
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26648
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26649
|
+
case 2:
|
|
26650
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
26651
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26652
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26653
|
+
} else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
|
|
26654
|
+
return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26637
26655
|
}
|
|
26638
|
-
|
|
26639
|
-
|
|
26640
|
-
|
|
26641
|
-
|
|
26642
|
-
|
|
26643
|
-
|
|
26644
|
-
|
|
26645
|
-
|
|
26656
|
+
}
|
|
26657
|
+
break;
|
|
26658
|
+
case 3:
|
|
26659
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
26660
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26661
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26662
|
+
} else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
|
|
26663
|
+
return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26646
26664
|
}
|
|
26647
|
-
|
|
26648
|
-
|
|
26649
|
-
|
|
26650
|
-
|
|
26651
|
-
|
|
26652
|
-
|
|
26653
|
-
|
|
26654
|
-
|
|
26665
|
+
}
|
|
26666
|
+
break;
|
|
26667
|
+
case 4:
|
|
26668
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
26669
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26670
|
+
__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])))
|
|
26671
|
+
} else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
|
|
26672
|
+
return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26655
26673
|
}
|
|
26656
|
-
|
|
26657
|
-
|
|
26674
|
+
}
|
|
26675
|
+
break;
|
|
26658
26676
|
}
|
|
26677
|
+
}
|
|
26659
26678
|
#endif
|
|
26660
26679
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26661
|
-
|
|
26662
|
-
|
|
26663
|
-
|
|
26680
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26681
|
+
goto raise_neg_overflow;
|
|
26682
|
+
}
|
|
26664
26683
|
#else
|
|
26665
|
-
|
|
26666
|
-
|
|
26667
|
-
|
|
26668
|
-
|
|
26669
|
-
|
|
26670
|
-
|
|
26671
|
-
|
|
26684
|
+
{
|
|
26685
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26686
|
+
if (unlikely(result < 0))
|
|
26687
|
+
return (long) -1;
|
|
26688
|
+
if (unlikely(result == 1))
|
|
26689
|
+
goto raise_neg_overflow;
|
|
26690
|
+
}
|
|
26672
26691
|
#endif
|
|
26673
|
-
|
|
26674
|
-
|
|
26692
|
+
if ((sizeof(long) <= sizeof(unsigned long))) {
|
|
26693
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26675
26694
|
#ifdef HAVE_LONG_LONG
|
|
26676
|
-
|
|
26677
|
-
|
|
26695
|
+
} else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26696
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26678
26697
|
#endif
|
|
26679
|
-
|
|
26680
|
-
|
|
26698
|
+
}
|
|
26699
|
+
} else {
|
|
26681
26700
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26682
|
-
|
|
26683
|
-
|
|
26684
|
-
|
|
26685
|
-
|
|
26686
|
-
|
|
26687
|
-
|
|
26688
|
-
|
|
26689
|
-
|
|
26690
|
-
|
|
26691
|
-
|
|
26692
|
-
|
|
26693
|
-
|
|
26694
|
-
}
|
|
26701
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26702
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26703
|
+
} else {
|
|
26704
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26705
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26706
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26707
|
+
case -2:
|
|
26708
|
+
if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
|
|
26709
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26710
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26711
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26712
|
+
return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26695
26713
|
}
|
|
26696
|
-
|
|
26697
|
-
|
|
26698
|
-
|
|
26699
|
-
|
|
26700
|
-
|
|
26701
|
-
|
|
26702
|
-
|
|
26703
|
-
|
|
26714
|
+
}
|
|
26715
|
+
break;
|
|
26716
|
+
case 2:
|
|
26717
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
26718
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26719
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26720
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26721
|
+
return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26704
26722
|
}
|
|
26705
|
-
|
|
26706
|
-
|
|
26707
|
-
|
|
26708
|
-
|
|
26709
|
-
|
|
26710
|
-
|
|
26711
|
-
|
|
26712
|
-
|
|
26723
|
+
}
|
|
26724
|
+
break;
|
|
26725
|
+
case -3:
|
|
26726
|
+
if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26727
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26728
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26729
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26730
|
+
return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26713
26731
|
}
|
|
26714
|
-
|
|
26715
|
-
|
|
26716
|
-
|
|
26717
|
-
|
|
26718
|
-
|
|
26719
|
-
|
|
26720
|
-
|
|
26721
|
-
|
|
26732
|
+
}
|
|
26733
|
+
break;
|
|
26734
|
+
case 3:
|
|
26735
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
26736
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26737
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26738
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26739
|
+
return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26722
26740
|
}
|
|
26723
|
-
|
|
26724
|
-
|
|
26725
|
-
|
|
26726
|
-
|
|
26727
|
-
|
|
26728
|
-
|
|
26729
|
-
|
|
26730
|
-
|
|
26741
|
+
}
|
|
26742
|
+
break;
|
|
26743
|
+
case -4:
|
|
26744
|
+
if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26745
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26746
|
+
__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])))
|
|
26747
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
26748
|
+
return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26731
26749
|
}
|
|
26732
|
-
|
|
26733
|
-
|
|
26734
|
-
|
|
26735
|
-
|
|
26736
|
-
|
|
26737
|
-
|
|
26738
|
-
|
|
26739
|
-
|
|
26750
|
+
}
|
|
26751
|
+
break;
|
|
26752
|
+
case 4:
|
|
26753
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
26754
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26755
|
+
__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])))
|
|
26756
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
26757
|
+
return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26740
26758
|
}
|
|
26741
|
-
|
|
26742
|
-
|
|
26759
|
+
}
|
|
26760
|
+
break;
|
|
26743
26761
|
}
|
|
26762
|
+
}
|
|
26744
26763
|
#endif
|
|
26745
|
-
|
|
26746
|
-
|
|
26764
|
+
if ((sizeof(long) <= sizeof(long))) {
|
|
26765
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
|
|
26747
26766
|
#ifdef HAVE_LONG_LONG
|
|
26748
|
-
|
|
26749
|
-
|
|
26767
|
+
} else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
|
|
26768
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26750
26769
|
#endif
|
|
26751
|
-
}
|
|
26752
26770
|
}
|
|
26753
|
-
|
|
26754
|
-
|
|
26755
|
-
|
|
26756
|
-
|
|
26757
|
-
|
|
26758
|
-
|
|
26759
|
-
|
|
26760
|
-
|
|
26761
|
-
|
|
26762
|
-
|
|
26763
|
-
|
|
26764
|
-
|
|
26765
|
-
|
|
26766
|
-
|
|
26767
|
-
|
|
26768
|
-
|
|
26769
|
-
|
|
26770
|
-
|
|
26771
|
-
|
|
26772
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26773
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26774
|
-
long idigit;
|
|
26775
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26776
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26777
|
-
PyObject *tmp = v;
|
|
26778
|
-
v = PyNumber_Long(v);
|
|
26779
|
-
assert(PyLong_CheckExact(v));
|
|
26780
|
-
Py_DECREF(tmp);
|
|
26781
|
-
if (unlikely(!v)) return (long) -1;
|
|
26782
|
-
}
|
|
26783
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26784
|
-
if (Py_SIZE(x) == 0)
|
|
26785
|
-
return (long) 0;
|
|
26786
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26771
|
+
}
|
|
26772
|
+
{
|
|
26773
|
+
long val;
|
|
26774
|
+
int ret = -1;
|
|
26775
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26776
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26777
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26778
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26779
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26780
|
+
goto raise_overflow;
|
|
26781
|
+
} else {
|
|
26782
|
+
ret = 0;
|
|
26783
|
+
}
|
|
26784
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26785
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26786
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26787
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26788
|
+
bytes, sizeof(val),
|
|
26789
|
+
is_little, !is_unsigned);
|
|
26787
26790
|
#else
|
|
26788
|
-
|
|
26789
|
-
|
|
26790
|
-
|
|
26791
|
-
|
|
26792
|
-
|
|
26793
|
-
|
|
26794
|
-
|
|
26795
|
-
|
|
26796
|
-
|
|
26797
|
-
|
|
26798
|
-
|
|
26799
|
-
|
|
26800
|
-
|
|
26801
|
-
|
|
26802
|
-
stepval = __Pyx_NewRef(v);
|
|
26803
|
-
}
|
|
26804
|
-
val = (long) 0;
|
|
26805
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26806
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26807
|
-
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
26808
|
-
PyObject *tmp, *digit;
|
|
26809
|
-
digit = PyNumber_And(stepval, mask);
|
|
26810
|
-
if (unlikely(!digit)) goto done;
|
|
26811
|
-
idigit = PyLong_AsLong(digit);
|
|
26812
|
-
Py_DECREF(digit);
|
|
26813
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26814
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26815
|
-
if (unlikely(!tmp)) goto done;
|
|
26816
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26817
|
-
val |= ((long) idigit) << bits;
|
|
26818
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26819
|
-
if (Py_SIZE(stepval) == 0)
|
|
26820
|
-
goto unpacking_done;
|
|
26821
|
-
#endif
|
|
26822
|
-
}
|
|
26823
|
-
idigit = PyLong_AsLong(stepval);
|
|
26824
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26825
|
-
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26826
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26827
|
-
goto raise_overflow;
|
|
26828
|
-
val |= ((long) idigit) << bits;
|
|
26829
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26830
|
-
unpacking_done:
|
|
26831
|
-
#endif
|
|
26832
|
-
if (!is_unsigned) {
|
|
26833
|
-
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
26834
|
-
goto raise_overflow;
|
|
26835
|
-
if (is_negative)
|
|
26836
|
-
val = ~val;
|
|
26837
|
-
}
|
|
26838
|
-
ret = 0;
|
|
26839
|
-
done:
|
|
26840
|
-
Py_XDECREF(shift);
|
|
26841
|
-
Py_XDECREF(mask);
|
|
26842
|
-
Py_XDECREF(stepval);
|
|
26843
|
-
#endif
|
|
26791
|
+
PyObject *v;
|
|
26792
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26793
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26794
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26795
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26796
|
+
v = __Pyx_NewRef(x);
|
|
26797
|
+
} else {
|
|
26798
|
+
v = PyNumber_Long(x);
|
|
26799
|
+
if (unlikely(!v)) return (long) -1;
|
|
26800
|
+
assert(PyLong_CheckExact(v));
|
|
26801
|
+
}
|
|
26802
|
+
{
|
|
26803
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26804
|
+
if (unlikely(result < 0)) {
|
|
26844
26805
|
Py_DECREF(v);
|
|
26845
|
-
|
|
26846
|
-
return val;
|
|
26806
|
+
return (long) -1;
|
|
26847
26807
|
}
|
|
26848
|
-
|
|
26808
|
+
is_negative = result == 1;
|
|
26849
26809
|
}
|
|
26850
|
-
|
|
26851
|
-
|
|
26852
|
-
|
|
26853
|
-
|
|
26854
|
-
|
|
26855
|
-
|
|
26810
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26811
|
+
Py_DECREF(v);
|
|
26812
|
+
goto raise_neg_overflow;
|
|
26813
|
+
} else if (is_negative) {
|
|
26814
|
+
stepval = PyNumber_Invert(v);
|
|
26815
|
+
Py_DECREF(v);
|
|
26816
|
+
if (unlikely(!stepval))
|
|
26817
|
+
return (long) -1;
|
|
26818
|
+
} else {
|
|
26819
|
+
stepval = v;
|
|
26820
|
+
}
|
|
26821
|
+
v = NULL;
|
|
26822
|
+
val = (long) 0;
|
|
26823
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26824
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26825
|
+
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
26826
|
+
PyObject *tmp, *digit;
|
|
26827
|
+
long idigit;
|
|
26828
|
+
digit = PyNumber_And(stepval, mask);
|
|
26829
|
+
if (unlikely(!digit)) goto done;
|
|
26830
|
+
idigit = PyLong_AsLong(digit);
|
|
26831
|
+
Py_DECREF(digit);
|
|
26832
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26833
|
+
val |= ((long) idigit) << bits;
|
|
26834
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26835
|
+
if (unlikely(!tmp)) goto done;
|
|
26836
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26837
|
+
}
|
|
26838
|
+
Py_DECREF(shift); shift = NULL;
|
|
26839
|
+
Py_DECREF(mask); mask = NULL;
|
|
26840
|
+
{
|
|
26841
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26842
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26843
|
+
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26844
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26845
|
+
goto raise_overflow;
|
|
26846
|
+
val |= ((long) idigit) << bits;
|
|
26847
|
+
}
|
|
26848
|
+
if (!is_unsigned) {
|
|
26849
|
+
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
26850
|
+
goto raise_overflow;
|
|
26851
|
+
if (is_negative)
|
|
26852
|
+
val = ~val;
|
|
26853
|
+
}
|
|
26854
|
+
ret = 0;
|
|
26855
|
+
done:
|
|
26856
|
+
Py_XDECREF(shift);
|
|
26857
|
+
Py_XDECREF(mask);
|
|
26858
|
+
Py_XDECREF(stepval);
|
|
26859
|
+
#endif
|
|
26860
|
+
if (unlikely(ret))
|
|
26861
|
+
return (long) -1;
|
|
26856
26862
|
return val;
|
|
26857
26863
|
}
|
|
26858
26864
|
raise_overflow:
|
|
@@ -26896,12 +26902,19 @@ raise_neg_overflow:
|
|
|
26896
26902
|
}
|
|
26897
26903
|
}
|
|
26898
26904
|
{
|
|
26899
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26900
26905
|
unsigned char *bytes = (unsigned char *)&value;
|
|
26901
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
26906
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
26907
|
+
if (is_unsigned) {
|
|
26908
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
26909
|
+
} else {
|
|
26910
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
26911
|
+
}
|
|
26912
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
26913
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26902
26914
|
return _PyLong_FromByteArray(bytes, sizeof(long),
|
|
26903
26915
|
little, !is_unsigned);
|
|
26904
26916
|
#else
|
|
26917
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26905
26918
|
PyObject *from_bytes, *result = NULL;
|
|
26906
26919
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
26907
26920
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -26951,245 +26964,239 @@ raise_neg_overflow:
|
|
|
26951
26964
|
}
|
|
26952
26965
|
return (char) val;
|
|
26953
26966
|
}
|
|
26954
|
-
}
|
|
26967
|
+
}
|
|
26955
26968
|
#endif
|
|
26956
|
-
if (
|
|
26957
|
-
|
|
26969
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26970
|
+
char val;
|
|
26971
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26972
|
+
if (!tmp) return (char) -1;
|
|
26973
|
+
val = __Pyx_PyInt_As_char(tmp);
|
|
26974
|
+
Py_DECREF(tmp);
|
|
26975
|
+
return val;
|
|
26976
|
+
}
|
|
26977
|
+
if (is_unsigned) {
|
|
26958
26978
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26959
|
-
|
|
26960
|
-
|
|
26961
|
-
|
|
26962
|
-
|
|
26963
|
-
|
|
26964
|
-
|
|
26965
|
-
|
|
26966
|
-
|
|
26967
|
-
|
|
26968
|
-
|
|
26969
|
-
|
|
26970
|
-
|
|
26971
|
-
|
|
26972
|
-
|
|
26973
|
-
}
|
|
26979
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26980
|
+
goto raise_neg_overflow;
|
|
26981
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26982
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26983
|
+
} else {
|
|
26984
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26985
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26986
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26987
|
+
case 2:
|
|
26988
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
26989
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26990
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26991
|
+
} else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
|
|
26992
|
+
return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26974
26993
|
}
|
|
26975
|
-
|
|
26976
|
-
|
|
26977
|
-
|
|
26978
|
-
|
|
26979
|
-
|
|
26980
|
-
|
|
26981
|
-
|
|
26982
|
-
|
|
26994
|
+
}
|
|
26995
|
+
break;
|
|
26996
|
+
case 3:
|
|
26997
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
26998
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26999
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27000
|
+
} else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
|
|
27001
|
+
return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26983
27002
|
}
|
|
26984
|
-
|
|
26985
|
-
|
|
26986
|
-
|
|
26987
|
-
|
|
26988
|
-
|
|
26989
|
-
|
|
26990
|
-
|
|
26991
|
-
|
|
27003
|
+
}
|
|
27004
|
+
break;
|
|
27005
|
+
case 4:
|
|
27006
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
27007
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
27008
|
+
__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])))
|
|
27009
|
+
} else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
|
|
27010
|
+
return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
26992
27011
|
}
|
|
26993
|
-
|
|
26994
|
-
|
|
27012
|
+
}
|
|
27013
|
+
break;
|
|
26995
27014
|
}
|
|
27015
|
+
}
|
|
26996
27016
|
#endif
|
|
26997
27017
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26998
|
-
|
|
26999
|
-
|
|
27000
|
-
|
|
27018
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
27019
|
+
goto raise_neg_overflow;
|
|
27020
|
+
}
|
|
27001
27021
|
#else
|
|
27002
|
-
|
|
27003
|
-
|
|
27004
|
-
|
|
27005
|
-
|
|
27006
|
-
|
|
27007
|
-
|
|
27008
|
-
|
|
27022
|
+
{
|
|
27023
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
27024
|
+
if (unlikely(result < 0))
|
|
27025
|
+
return (char) -1;
|
|
27026
|
+
if (unlikely(result == 1))
|
|
27027
|
+
goto raise_neg_overflow;
|
|
27028
|
+
}
|
|
27009
27029
|
#endif
|
|
27010
|
-
|
|
27011
|
-
|
|
27030
|
+
if ((sizeof(char) <= sizeof(unsigned long))) {
|
|
27031
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
|
|
27012
27032
|
#ifdef HAVE_LONG_LONG
|
|
27013
|
-
|
|
27014
|
-
|
|
27033
|
+
} else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
27034
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
27015
27035
|
#endif
|
|
27016
|
-
|
|
27017
|
-
|
|
27036
|
+
}
|
|
27037
|
+
} else {
|
|
27018
27038
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
27019
|
-
|
|
27020
|
-
|
|
27021
|
-
|
|
27022
|
-
|
|
27023
|
-
|
|
27024
|
-
|
|
27025
|
-
|
|
27026
|
-
|
|
27027
|
-
|
|
27028
|
-
|
|
27029
|
-
|
|
27030
|
-
|
|
27031
|
-
}
|
|
27039
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
27040
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
27041
|
+
} else {
|
|
27042
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
27043
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
27044
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
27045
|
+
case -2:
|
|
27046
|
+
if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
|
|
27047
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
27048
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27049
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
27050
|
+
return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27032
27051
|
}
|
|
27033
|
-
|
|
27034
|
-
|
|
27035
|
-
|
|
27036
|
-
|
|
27037
|
-
|
|
27038
|
-
|
|
27039
|
-
|
|
27040
|
-
|
|
27052
|
+
}
|
|
27053
|
+
break;
|
|
27054
|
+
case 2:
|
|
27055
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
27056
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
27057
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27058
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
27059
|
+
return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27041
27060
|
}
|
|
27042
|
-
|
|
27043
|
-
|
|
27044
|
-
|
|
27045
|
-
|
|
27046
|
-
|
|
27047
|
-
|
|
27048
|
-
|
|
27049
|
-
|
|
27061
|
+
}
|
|
27062
|
+
break;
|
|
27063
|
+
case -3:
|
|
27064
|
+
if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
27065
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
27066
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27067
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
27068
|
+
return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27050
27069
|
}
|
|
27051
|
-
|
|
27052
|
-
|
|
27053
|
-
|
|
27054
|
-
|
|
27055
|
-
|
|
27056
|
-
|
|
27057
|
-
|
|
27058
|
-
|
|
27070
|
+
}
|
|
27071
|
+
break;
|
|
27072
|
+
case 3:
|
|
27073
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
27074
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
27075
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27076
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
27077
|
+
return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27059
27078
|
}
|
|
27060
|
-
|
|
27061
|
-
|
|
27062
|
-
|
|
27063
|
-
|
|
27064
|
-
|
|
27065
|
-
|
|
27066
|
-
|
|
27067
|
-
|
|
27079
|
+
}
|
|
27080
|
+
break;
|
|
27081
|
+
case -4:
|
|
27082
|
+
if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
27083
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
27084
|
+
__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])))
|
|
27085
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
27086
|
+
return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27068
27087
|
}
|
|
27069
|
-
|
|
27070
|
-
|
|
27071
|
-
|
|
27072
|
-
|
|
27073
|
-
|
|
27074
|
-
|
|
27075
|
-
|
|
27076
|
-
|
|
27088
|
+
}
|
|
27089
|
+
break;
|
|
27090
|
+
case 4:
|
|
27091
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
27092
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
27093
|
+
__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])))
|
|
27094
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
27095
|
+
return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27077
27096
|
}
|
|
27078
|
-
|
|
27079
|
-
|
|
27097
|
+
}
|
|
27098
|
+
break;
|
|
27080
27099
|
}
|
|
27100
|
+
}
|
|
27081
27101
|
#endif
|
|
27082
|
-
|
|
27083
|
-
|
|
27102
|
+
if ((sizeof(char) <= sizeof(long))) {
|
|
27103
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
|
|
27084
27104
|
#ifdef HAVE_LONG_LONG
|
|
27085
|
-
|
|
27086
|
-
|
|
27105
|
+
} else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
|
|
27106
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
27087
27107
|
#endif
|
|
27088
|
-
}
|
|
27089
27108
|
}
|
|
27090
|
-
|
|
27091
|
-
|
|
27092
|
-
|
|
27093
|
-
|
|
27094
|
-
|
|
27095
|
-
|
|
27096
|
-
|
|
27097
|
-
|
|
27098
|
-
|
|
27099
|
-
|
|
27100
|
-
|
|
27101
|
-
|
|
27102
|
-
|
|
27103
|
-
|
|
27104
|
-
|
|
27105
|
-
|
|
27106
|
-
|
|
27107
|
-
|
|
27108
|
-
|
|
27109
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
27110
|
-
int bits, remaining_bits, is_negative = 0;
|
|
27111
|
-
long idigit;
|
|
27112
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
27113
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
27114
|
-
PyObject *tmp = v;
|
|
27115
|
-
v = PyNumber_Long(v);
|
|
27116
|
-
assert(PyLong_CheckExact(v));
|
|
27117
|
-
Py_DECREF(tmp);
|
|
27118
|
-
if (unlikely(!v)) return (char) -1;
|
|
27119
|
-
}
|
|
27120
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
27121
|
-
if (Py_SIZE(x) == 0)
|
|
27122
|
-
return (char) 0;
|
|
27123
|
-
is_negative = Py_SIZE(x) < 0;
|
|
27109
|
+
}
|
|
27110
|
+
{
|
|
27111
|
+
char val;
|
|
27112
|
+
int ret = -1;
|
|
27113
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
27114
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
27115
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
27116
|
+
if (unlikely(bytes_copied == -1)) {
|
|
27117
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
27118
|
+
goto raise_overflow;
|
|
27119
|
+
} else {
|
|
27120
|
+
ret = 0;
|
|
27121
|
+
}
|
|
27122
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
27123
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
27124
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
27125
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
27126
|
+
bytes, sizeof(val),
|
|
27127
|
+
is_little, !is_unsigned);
|
|
27124
27128
|
#else
|
|
27125
|
-
|
|
27126
|
-
|
|
27127
|
-
|
|
27128
|
-
|
|
27129
|
-
|
|
27130
|
-
|
|
27131
|
-
|
|
27132
|
-
|
|
27133
|
-
|
|
27134
|
-
|
|
27135
|
-
|
|
27136
|
-
|
|
27137
|
-
|
|
27138
|
-
|
|
27139
|
-
stepval = __Pyx_NewRef(v);
|
|
27140
|
-
}
|
|
27141
|
-
val = (char) 0;
|
|
27142
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
27143
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
27144
|
-
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
27145
|
-
PyObject *tmp, *digit;
|
|
27146
|
-
digit = PyNumber_And(stepval, mask);
|
|
27147
|
-
if (unlikely(!digit)) goto done;
|
|
27148
|
-
idigit = PyLong_AsLong(digit);
|
|
27149
|
-
Py_DECREF(digit);
|
|
27150
|
-
if (unlikely(idigit < 0)) goto done;
|
|
27151
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
27152
|
-
if (unlikely(!tmp)) goto done;
|
|
27153
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
27154
|
-
val |= ((char) idigit) << bits;
|
|
27155
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
27156
|
-
if (Py_SIZE(stepval) == 0)
|
|
27157
|
-
goto unpacking_done;
|
|
27158
|
-
#endif
|
|
27159
|
-
}
|
|
27160
|
-
idigit = PyLong_AsLong(stepval);
|
|
27161
|
-
if (unlikely(idigit < 0)) goto done;
|
|
27162
|
-
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
27163
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
27164
|
-
goto raise_overflow;
|
|
27165
|
-
val |= ((char) idigit) << bits;
|
|
27166
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
27167
|
-
unpacking_done:
|
|
27168
|
-
#endif
|
|
27169
|
-
if (!is_unsigned) {
|
|
27170
|
-
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
27171
|
-
goto raise_overflow;
|
|
27172
|
-
if (is_negative)
|
|
27173
|
-
val = ~val;
|
|
27174
|
-
}
|
|
27175
|
-
ret = 0;
|
|
27176
|
-
done:
|
|
27177
|
-
Py_XDECREF(shift);
|
|
27178
|
-
Py_XDECREF(mask);
|
|
27179
|
-
Py_XDECREF(stepval);
|
|
27180
|
-
#endif
|
|
27129
|
+
PyObject *v;
|
|
27130
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
27131
|
+
int bits, remaining_bits, is_negative = 0;
|
|
27132
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
27133
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
27134
|
+
v = __Pyx_NewRef(x);
|
|
27135
|
+
} else {
|
|
27136
|
+
v = PyNumber_Long(x);
|
|
27137
|
+
if (unlikely(!v)) return (char) -1;
|
|
27138
|
+
assert(PyLong_CheckExact(v));
|
|
27139
|
+
}
|
|
27140
|
+
{
|
|
27141
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
27142
|
+
if (unlikely(result < 0)) {
|
|
27181
27143
|
Py_DECREF(v);
|
|
27182
|
-
|
|
27183
|
-
return val;
|
|
27144
|
+
return (char) -1;
|
|
27184
27145
|
}
|
|
27185
|
-
|
|
27146
|
+
is_negative = result == 1;
|
|
27186
27147
|
}
|
|
27187
|
-
|
|
27188
|
-
|
|
27189
|
-
|
|
27190
|
-
|
|
27191
|
-
|
|
27192
|
-
|
|
27148
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
27149
|
+
Py_DECREF(v);
|
|
27150
|
+
goto raise_neg_overflow;
|
|
27151
|
+
} else if (is_negative) {
|
|
27152
|
+
stepval = PyNumber_Invert(v);
|
|
27153
|
+
Py_DECREF(v);
|
|
27154
|
+
if (unlikely(!stepval))
|
|
27155
|
+
return (char) -1;
|
|
27156
|
+
} else {
|
|
27157
|
+
stepval = v;
|
|
27158
|
+
}
|
|
27159
|
+
v = NULL;
|
|
27160
|
+
val = (char) 0;
|
|
27161
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
27162
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
27163
|
+
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
27164
|
+
PyObject *tmp, *digit;
|
|
27165
|
+
long idigit;
|
|
27166
|
+
digit = PyNumber_And(stepval, mask);
|
|
27167
|
+
if (unlikely(!digit)) goto done;
|
|
27168
|
+
idigit = PyLong_AsLong(digit);
|
|
27169
|
+
Py_DECREF(digit);
|
|
27170
|
+
if (unlikely(idigit < 0)) goto done;
|
|
27171
|
+
val |= ((char) idigit) << bits;
|
|
27172
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
27173
|
+
if (unlikely(!tmp)) goto done;
|
|
27174
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
27175
|
+
}
|
|
27176
|
+
Py_DECREF(shift); shift = NULL;
|
|
27177
|
+
Py_DECREF(mask); mask = NULL;
|
|
27178
|
+
{
|
|
27179
|
+
long idigit = PyLong_AsLong(stepval);
|
|
27180
|
+
if (unlikely(idigit < 0)) goto done;
|
|
27181
|
+
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
27182
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
27183
|
+
goto raise_overflow;
|
|
27184
|
+
val |= ((char) idigit) << bits;
|
|
27185
|
+
}
|
|
27186
|
+
if (!is_unsigned) {
|
|
27187
|
+
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
27188
|
+
goto raise_overflow;
|
|
27189
|
+
if (is_negative)
|
|
27190
|
+
val = ~val;
|
|
27191
|
+
}
|
|
27192
|
+
ret = 0;
|
|
27193
|
+
done:
|
|
27194
|
+
Py_XDECREF(shift);
|
|
27195
|
+
Py_XDECREF(mask);
|
|
27196
|
+
Py_XDECREF(stepval);
|
|
27197
|
+
#endif
|
|
27198
|
+
if (unlikely(ret))
|
|
27199
|
+
return (char) -1;
|
|
27193
27200
|
return val;
|
|
27194
27201
|
}
|
|
27195
27202
|
raise_overflow:
|