scikit-network 0.33.0__cp39-cp39-win_amd64.whl → 0.33.3__cp39-cp39-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.3.dist-info/METADATA +122 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.3.dist-info}/RECORD +44 -44
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.3.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.cp39-win_amd64.pyd +0 -0
- sknetwork/classification/vote.cpp +686 -679
- sknetwork/clustering/leiden_core.cp39-win_amd64.pyd +0 -0
- sknetwork/clustering/leiden_core.cpp +715 -704
- sknetwork/clustering/louvain.py +3 -3
- sknetwork/clustering/louvain_core.cp39-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.cp39-win_amd64.pyd +0 -0
- sknetwork/hierarchy/paris.cpp +1777 -1155
- sknetwork/linalg/diteration.cp39-win_amd64.pyd +0 -0
- sknetwork/linalg/diteration.cpp +686 -679
- sknetwork/linalg/push.cp39-win_amd64.pyd +0 -0
- sknetwork/linalg/push.cpp +1771 -1155
- sknetwork/linalg/sparse_lowrank.py +1 -1
- sknetwork/ranking/betweenness.cp39-win_amd64.pyd +0 -0
- sknetwork/ranking/betweenness.cpp +565 -559
- sknetwork/topology/cliques.cp39-win_amd64.pyd +0 -0
- sknetwork/topology/cliques.cpp +1731 -1112
- sknetwork/topology/core.cp39-win_amd64.pyd +0 -0
- sknetwork/topology/core.cpp +1757 -1141
- sknetwork/topology/cycles.py +2 -2
- sknetwork/topology/minheap.cp39-win_amd64.pyd +0 -0
- sknetwork/topology/minheap.cpp +689 -679
- sknetwork/topology/triangles.cp39-win_amd64.pyd +0 -0
- sknetwork/topology/triangles.cpp +439 -434
- sknetwork/topology/weisfeiler_lehman_core.cp39-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.3.dist-info/licenses}/AUTHORS.rst +0 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.3.dist-info/licenses}/LICENSE +0 -0
- {scikit_network-0.33.0.dist-info → scikit_network-0.33.3.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-ji5gyl3u\\overlay\\Lib\\site-packages\\numpy\\_core\\include"
|
|
12
12
|
],
|
|
13
13
|
"language": "c++",
|
|
14
14
|
"name": "sknetwork.topology.weisfeiler_lehman_core",
|
|
@@ -44,10 +44,10 @@ END: Cython Metadata */
|
|
|
44
44
|
#else
|
|
45
45
|
#define __PYX_EXTRA_ABI_MODULE_NAME ""
|
|
46
46
|
#endif
|
|
47
|
-
#define CYTHON_ABI "
|
|
47
|
+
#define CYTHON_ABI "3_0_12" __PYX_EXTRA_ABI_MODULE_NAME
|
|
48
48
|
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
|
|
49
49
|
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
|
|
50
|
-
#define CYTHON_HEX_VERSION
|
|
50
|
+
#define CYTHON_HEX_VERSION 0x03000CF0
|
|
51
51
|
#define CYTHON_FUTURE_DIVISION 1
|
|
52
52
|
#include <stddef.h>
|
|
53
53
|
#ifndef offsetof
|
|
@@ -2051,7 +2051,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
|
|
|
2051
2051
|
#if !CYTHON_VECTORCALL
|
|
2052
2052
|
#if PY_VERSION_HEX >= 0x03080000
|
|
2053
2053
|
#include "frameobject.h"
|
|
2054
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
2054
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
2055
2055
|
#ifndef Py_BUILD_CORE
|
|
2056
2056
|
#define Py_BUILD_CORE 1
|
|
2057
2057
|
#endif
|
|
@@ -2388,11 +2388,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
|
|
|
2388
2388
|
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
|
|
2389
2389
|
|
|
2390
2390
|
/* HasAttr.proto */
|
|
2391
|
-
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
|
|
2392
|
-
#define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
|
|
2393
|
-
#else
|
|
2394
2391
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
|
|
2395
|
-
#endif
|
|
2396
2392
|
|
|
2397
2393
|
/* PyObject_GenericGetAttrNoDict.proto */
|
|
2398
2394
|
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
|
|
@@ -4096,10 +4092,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4096
4092
|
PyObject *__pyx_t_4 = NULL;
|
|
4097
4093
|
PyObject *__pyx_t_5 = NULL;
|
|
4098
4094
|
PyObject *__pyx_t_6 = NULL;
|
|
4099
|
-
int __pyx_t_7;
|
|
4095
|
+
unsigned int __pyx_t_7;
|
|
4100
4096
|
char *__pyx_t_8;
|
|
4101
|
-
|
|
4102
|
-
|
|
4097
|
+
int __pyx_t_9;
|
|
4098
|
+
Py_ssize_t __pyx_t_10;
|
|
4099
|
+
Py_UCS4 __pyx_t_11;
|
|
4103
4100
|
int __pyx_lineno = 0;
|
|
4104
4101
|
const char *__pyx_filename = NULL;
|
|
4105
4102
|
int __pyx_clineno = 0;
|
|
@@ -4325,7 +4322,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4325
4322
|
* if dim <= 0:
|
|
4326
4323
|
* raise ValueError, f"Invalid shape in axis {idx}: {dim}."
|
|
4327
4324
|
*/
|
|
4328
|
-
|
|
4325
|
+
__pyx_t_9 = 0;
|
|
4329
4326
|
__pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4);
|
|
4330
4327
|
__pyx_t_1 = 0;
|
|
4331
4328
|
for (;;) {
|
|
@@ -4342,11 +4339,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4342
4339
|
__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)
|
|
4343
4340
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4344
4341
|
#endif
|
|
4345
|
-
|
|
4342
|
+
__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)
|
|
4346
4343
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4347
|
-
__pyx_v_dim =
|
|
4348
|
-
__pyx_v_idx =
|
|
4349
|
-
|
|
4344
|
+
__pyx_v_dim = __pyx_t_10;
|
|
4345
|
+
__pyx_v_idx = __pyx_t_9;
|
|
4346
|
+
__pyx_t_9 = (__pyx_t_9 + 1);
|
|
4350
4347
|
|
|
4351
4348
|
/* "View.MemoryView":160
|
|
4352
4349
|
*
|
|
@@ -4367,33 +4364,33 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4367
4364
|
*/
|
|
4368
4365
|
__pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4369
4366
|
__Pyx_GOTREF(__pyx_t_5);
|
|
4370
|
-
|
|
4371
|
-
|
|
4367
|
+
__pyx_t_10 = 0;
|
|
4368
|
+
__pyx_t_11 = 127;
|
|
4372
4369
|
__Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4373
|
-
|
|
4370
|
+
__pyx_t_10 += 22;
|
|
4374
4371
|
__Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis);
|
|
4375
4372
|
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis);
|
|
4376
4373
|
__pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
|
|
4377
4374
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4378
|
-
|
|
4375
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4379
4376
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4380
4377
|
PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
|
|
4381
4378
|
__pyx_t_6 = 0;
|
|
4382
4379
|
__Pyx_INCREF(__pyx_kp_u_);
|
|
4383
|
-
|
|
4380
|
+
__pyx_t_10 += 2;
|
|
4384
4381
|
__Pyx_GIVEREF(__pyx_kp_u_);
|
|
4385
4382
|
PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_);
|
|
4386
4383
|
__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)
|
|
4387
4384
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4388
|
-
|
|
4385
|
+
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
|
|
4389
4386
|
__Pyx_GIVEREF(__pyx_t_6);
|
|
4390
4387
|
PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6);
|
|
4391
4388
|
__pyx_t_6 = 0;
|
|
4392
4389
|
__Pyx_INCREF(__pyx_kp_u__2);
|
|
4393
|
-
|
|
4390
|
+
__pyx_t_10 += 1;
|
|
4394
4391
|
__Pyx_GIVEREF(__pyx_kp_u__2);
|
|
4395
4392
|
PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2);
|
|
4396
|
-
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5,
|
|
4393
|
+
__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)
|
|
4397
4394
|
__Pyx_GOTREF(__pyx_t_6);
|
|
4398
4395
|
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
|
4399
4396
|
__Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
|
|
@@ -4577,7 +4574,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
|
|
|
4577
4574
|
*
|
|
4578
4575
|
* @cname('getbuffer')
|
|
4579
4576
|
*/
|
|
4580
|
-
|
|
4577
|
+
__pyx_t_9 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
|
|
4581
4578
|
|
|
4582
4579
|
/* "View.MemoryView":179
|
|
4583
4580
|
* self.dtype_is_object = format == b'O'
|
|
@@ -7732,7 +7729,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7732
7729
|
*
|
|
7733
7730
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
7734
7731
|
* obj = self.is_slice(value)
|
|
7735
|
-
* if obj:
|
|
7732
|
+
* if obj is not None:
|
|
7736
7733
|
*/
|
|
7737
7734
|
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error)
|
|
7738
7735
|
if (__pyx_t_4) {
|
|
@@ -7741,7 +7738,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7741
7738
|
*
|
|
7742
7739
|
* if have_slices:
|
|
7743
7740
|
* obj = self.is_slice(value) # <<<<<<<<<<<<<<
|
|
7744
|
-
* if obj:
|
|
7741
|
+
* if obj is not None:
|
|
7745
7742
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7746
7743
|
*/
|
|
7747
7744
|
__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)
|
|
@@ -7752,16 +7749,16 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7752
7749
|
/* "View.MemoryView":428
|
|
7753
7750
|
* if have_slices:
|
|
7754
7751
|
* obj = self.is_slice(value)
|
|
7755
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
7752
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
7756
7753
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7757
7754
|
* else:
|
|
7758
7755
|
*/
|
|
7759
|
-
__pyx_t_4 =
|
|
7756
|
+
__pyx_t_4 = (__pyx_v_obj != Py_None);
|
|
7760
7757
|
if (__pyx_t_4) {
|
|
7761
7758
|
|
|
7762
7759
|
/* "View.MemoryView":429
|
|
7763
7760
|
* obj = self.is_slice(value)
|
|
7764
|
-
* if obj:
|
|
7761
|
+
* if obj is not None:
|
|
7765
7762
|
* self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
|
|
7766
7763
|
* else:
|
|
7767
7764
|
* self.setitem_slice_assign_scalar(self[index], value)
|
|
@@ -7776,7 +7773,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7776
7773
|
/* "View.MemoryView":428
|
|
7777
7774
|
* if have_slices:
|
|
7778
7775
|
* obj = self.is_slice(value)
|
|
7779
|
-
* if obj: # <<<<<<<<<<<<<<
|
|
7776
|
+
* if obj is not None: # <<<<<<<<<<<<<<
|
|
7780
7777
|
* self.setitem_slice_assignment(self[index], obj)
|
|
7781
7778
|
* else:
|
|
7782
7779
|
*/
|
|
@@ -7806,7 +7803,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
|
|
|
7806
7803
|
*
|
|
7807
7804
|
* if have_slices: # <<<<<<<<<<<<<<
|
|
7808
7805
|
* obj = self.is_slice(value)
|
|
7809
|
-
* if obj:
|
|
7806
|
+
* if obj is not None:
|
|
7810
7807
|
*/
|
|
7811
7808
|
goto __pyx_L4;
|
|
7812
7809
|
}
|
|
@@ -8514,9 +8511,10 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
8514
8511
|
PyObject *__pyx_t_5 = NULL;
|
|
8515
8512
|
PyObject *__pyx_t_6 = NULL;
|
|
8516
8513
|
PyObject *__pyx_t_7 = NULL;
|
|
8517
|
-
int __pyx_t_8;
|
|
8514
|
+
unsigned int __pyx_t_8;
|
|
8518
8515
|
Py_ssize_t __pyx_t_9;
|
|
8519
8516
|
int __pyx_t_10;
|
|
8517
|
+
int __pyx_t_11;
|
|
8520
8518
|
int __pyx_lineno = 0;
|
|
8521
8519
|
const char *__pyx_filename = NULL;
|
|
8522
8520
|
int __pyx_clineno = 0;
|
|
@@ -8671,11 +8669,11 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
|
|
|
8671
8669
|
__Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6);
|
|
8672
8670
|
__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)
|
|
8673
8671
|
__Pyx_GOTREF(__pyx_t_7);
|
|
8674
|
-
|
|
8672
|
+
__pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
|
|
8675
8673
|
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
|
|
8676
8674
|
__Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6);
|
|
8677
8675
|
__pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
|
|
8678
|
-
if (
|
|
8676
|
+
if (__pyx_t_11) {
|
|
8679
8677
|
__Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
|
|
8680
8678
|
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error)
|
|
8681
8679
|
__Pyx_XGOTREF(__pyx_t_6);
|
|
@@ -8760,7 +8758,7 @@ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryvie
|
|
|
8760
8758
|
PyObject *__pyx_t_3 = NULL;
|
|
8761
8759
|
PyObject *__pyx_t_4 = NULL;
|
|
8762
8760
|
PyObject *__pyx_t_5 = NULL;
|
|
8763
|
-
int __pyx_t_6;
|
|
8761
|
+
unsigned int __pyx_t_6;
|
|
8764
8762
|
Py_ssize_t __pyx_t_7;
|
|
8765
8763
|
PyObject *__pyx_t_8 = NULL;
|
|
8766
8764
|
char *__pyx_t_9;
|
|
@@ -17234,7 +17232,7 @@ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSE
|
|
|
17234
17232
|
int __pyx_t_2;
|
|
17235
17233
|
PyObject *__pyx_t_3 = NULL;
|
|
17236
17234
|
PyObject *__pyx_t_4 = NULL;
|
|
17237
|
-
int __pyx_t_5;
|
|
17235
|
+
unsigned int __pyx_t_5;
|
|
17238
17236
|
int __pyx_lineno = 0;
|
|
17239
17237
|
const char *__pyx_filename = NULL;
|
|
17240
17238
|
int __pyx_clineno = 0;
|
|
@@ -17416,7 +17414,7 @@ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__
|
|
|
17416
17414
|
PyObject *__pyx_t_5 = NULL;
|
|
17417
17415
|
PyObject *__pyx_t_6 = NULL;
|
|
17418
17416
|
PyObject *__pyx_t_7 = NULL;
|
|
17419
|
-
int __pyx_t_8;
|
|
17417
|
+
unsigned int __pyx_t_8;
|
|
17420
17418
|
int __pyx_lineno = 0;
|
|
17421
17419
|
const char *__pyx_filename = NULL;
|
|
17422
17420
|
int __pyx_clineno = 0;
|
|
@@ -18502,6 +18500,9 @@ static PyTypeObject __pyx_type___pyx_array = {
|
|
|
18502
18500
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18503
18501
|
0, /*tp_watched*/
|
|
18504
18502
|
#endif
|
|
18503
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18504
|
+
0, /*tp_versions_used*/
|
|
18505
|
+
#endif
|
|
18505
18506
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18506
18507
|
0, /*tp_pypy_flags*/
|
|
18507
18508
|
#endif
|
|
@@ -18672,6 +18673,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
|
|
|
18672
18673
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
18673
18674
|
0, /*tp_watched*/
|
|
18674
18675
|
#endif
|
|
18676
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
18677
|
+
0, /*tp_versions_used*/
|
|
18678
|
+
#endif
|
|
18675
18679
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
18676
18680
|
0, /*tp_pypy_flags*/
|
|
18677
18681
|
#endif
|
|
@@ -19015,6 +19019,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
|
|
|
19015
19019
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
19016
19020
|
0, /*tp_watched*/
|
|
19017
19021
|
#endif
|
|
19022
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
19023
|
+
0, /*tp_versions_used*/
|
|
19024
|
+
#endif
|
|
19018
19025
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
19019
19026
|
0, /*tp_pypy_flags*/
|
|
19020
19027
|
#endif
|
|
@@ -19187,6 +19194,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
|
|
|
19187
19194
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
19188
19195
|
0, /*tp_watched*/
|
|
19189
19196
|
#endif
|
|
19197
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
19198
|
+
0, /*tp_versions_used*/
|
|
19199
|
+
#endif
|
|
19190
19200
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
19191
19201
|
0, /*tp_pypy_flags*/
|
|
19192
19202
|
#endif
|
|
@@ -23065,7 +23075,6 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
|
|
|
23065
23075
|
}
|
|
23066
23076
|
|
|
23067
23077
|
/* HasAttr */
|
|
23068
|
-
#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
|
|
23069
23078
|
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
23070
23079
|
PyObject *r;
|
|
23071
23080
|
if (unlikely(!__Pyx_PyBaseString_Check(n))) {
|
|
@@ -23082,7 +23091,6 @@ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
|
|
|
23082
23091
|
return 1;
|
|
23083
23092
|
}
|
|
23084
23093
|
}
|
|
23085
|
-
#endif
|
|
23086
23094
|
|
|
23087
23095
|
/* PyObject_GenericGetAttrNoDict */
|
|
23088
23096
|
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
|
|
@@ -24822,6 +24830,9 @@ static PyTypeObject __pyx_CyFunctionType_type = {
|
|
|
24822
24830
|
#if PY_VERSION_HEX >= 0x030C0000
|
|
24823
24831
|
0,
|
|
24824
24832
|
#endif
|
|
24833
|
+
#if PY_VERSION_HEX >= 0x030d00A4
|
|
24834
|
+
0,
|
|
24835
|
+
#endif
|
|
24825
24836
|
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
|
|
24826
24837
|
0,
|
|
24827
24838
|
#endif
|
|
@@ -25007,7 +25018,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
|
|
|
25007
25018
|
#include "compile.h"
|
|
25008
25019
|
#include "frameobject.h"
|
|
25009
25020
|
#include "traceback.h"
|
|
25010
|
-
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
25021
|
+
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
|
|
25011
25022
|
#ifndef Py_BUILD_CORE
|
|
25012
25023
|
#define Py_BUILD_CORE 1
|
|
25013
25024
|
#endif
|
|
@@ -26328,245 +26339,239 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice,
|
|
|
26328
26339
|
}
|
|
26329
26340
|
return (int) val;
|
|
26330
26341
|
}
|
|
26331
|
-
}
|
|
26342
|
+
}
|
|
26332
26343
|
#endif
|
|
26333
|
-
if (
|
|
26334
|
-
|
|
26344
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26345
|
+
int val;
|
|
26346
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26347
|
+
if (!tmp) return (int) -1;
|
|
26348
|
+
val = __Pyx_PyInt_As_int(tmp);
|
|
26349
|
+
Py_DECREF(tmp);
|
|
26350
|
+
return val;
|
|
26351
|
+
}
|
|
26352
|
+
if (is_unsigned) {
|
|
26335
26353
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26336
|
-
|
|
26337
|
-
|
|
26338
|
-
|
|
26339
|
-
|
|
26340
|
-
|
|
26341
|
-
|
|
26342
|
-
|
|
26343
|
-
|
|
26344
|
-
|
|
26345
|
-
|
|
26346
|
-
|
|
26347
|
-
|
|
26348
|
-
|
|
26349
|
-
|
|
26350
|
-
}
|
|
26354
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26355
|
+
goto raise_neg_overflow;
|
|
26356
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26357
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26358
|
+
} else {
|
|
26359
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26360
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26361
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26362
|
+
case 2:
|
|
26363
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
26364
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26365
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26366
|
+
} else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
|
|
26367
|
+
return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26351
26368
|
}
|
|
26352
|
-
|
|
26353
|
-
|
|
26354
|
-
|
|
26355
|
-
|
|
26356
|
-
|
|
26357
|
-
|
|
26358
|
-
|
|
26359
|
-
|
|
26369
|
+
}
|
|
26370
|
+
break;
|
|
26371
|
+
case 3:
|
|
26372
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
26373
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26374
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26375
|
+
} else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
|
|
26376
|
+
return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26360
26377
|
}
|
|
26361
|
-
|
|
26362
|
-
|
|
26363
|
-
|
|
26364
|
-
|
|
26365
|
-
|
|
26366
|
-
|
|
26367
|
-
|
|
26368
|
-
|
|
26378
|
+
}
|
|
26379
|
+
break;
|
|
26380
|
+
case 4:
|
|
26381
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
26382
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26383
|
+
__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])))
|
|
26384
|
+
} else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
|
|
26385
|
+
return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
|
|
26369
26386
|
}
|
|
26370
|
-
|
|
26371
|
-
|
|
26387
|
+
}
|
|
26388
|
+
break;
|
|
26372
26389
|
}
|
|
26390
|
+
}
|
|
26373
26391
|
#endif
|
|
26374
26392
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26375
|
-
|
|
26376
|
-
|
|
26377
|
-
|
|
26393
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26394
|
+
goto raise_neg_overflow;
|
|
26395
|
+
}
|
|
26378
26396
|
#else
|
|
26379
|
-
|
|
26380
|
-
|
|
26381
|
-
|
|
26382
|
-
|
|
26383
|
-
|
|
26384
|
-
|
|
26385
|
-
|
|
26397
|
+
{
|
|
26398
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26399
|
+
if (unlikely(result < 0))
|
|
26400
|
+
return (int) -1;
|
|
26401
|
+
if (unlikely(result == 1))
|
|
26402
|
+
goto raise_neg_overflow;
|
|
26403
|
+
}
|
|
26386
26404
|
#endif
|
|
26387
|
-
|
|
26388
|
-
|
|
26405
|
+
if ((sizeof(int) <= sizeof(unsigned long))) {
|
|
26406
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26389
26407
|
#ifdef HAVE_LONG_LONG
|
|
26390
|
-
|
|
26391
|
-
|
|
26408
|
+
} else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26409
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26392
26410
|
#endif
|
|
26393
|
-
|
|
26394
|
-
|
|
26411
|
+
}
|
|
26412
|
+
} else {
|
|
26395
26413
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26396
|
-
|
|
26397
|
-
|
|
26398
|
-
|
|
26399
|
-
|
|
26400
|
-
|
|
26401
|
-
|
|
26402
|
-
|
|
26403
|
-
|
|
26404
|
-
|
|
26405
|
-
|
|
26406
|
-
|
|
26407
|
-
|
|
26408
|
-
}
|
|
26414
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26415
|
+
__PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26416
|
+
} else {
|
|
26417
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26418
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26419
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26420
|
+
case -2:
|
|
26421
|
+
if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
|
|
26422
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26423
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26424
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26425
|
+
return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26409
26426
|
}
|
|
26410
|
-
|
|
26411
|
-
|
|
26412
|
-
|
|
26413
|
-
|
|
26414
|
-
|
|
26415
|
-
|
|
26416
|
-
|
|
26417
|
-
|
|
26427
|
+
}
|
|
26428
|
+
break;
|
|
26429
|
+
case 2:
|
|
26430
|
+
if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
|
|
26431
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26432
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26433
|
+
} else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26434
|
+
return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26418
26435
|
}
|
|
26419
|
-
|
|
26420
|
-
|
|
26421
|
-
|
|
26422
|
-
|
|
26423
|
-
|
|
26424
|
-
|
|
26425
|
-
|
|
26426
|
-
|
|
26436
|
+
}
|
|
26437
|
+
break;
|
|
26438
|
+
case -3:
|
|
26439
|
+
if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
|
|
26440
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26441
|
+
__PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26442
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26443
|
+
return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26427
26444
|
}
|
|
26428
|
-
|
|
26429
|
-
|
|
26430
|
-
|
|
26431
|
-
|
|
26432
|
-
|
|
26433
|
-
|
|
26434
|
-
|
|
26435
|
-
|
|
26445
|
+
}
|
|
26446
|
+
break;
|
|
26447
|
+
case 3:
|
|
26448
|
+
if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
|
|
26449
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26450
|
+
__PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26451
|
+
} else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26452
|
+
return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26436
26453
|
}
|
|
26437
|
-
|
|
26438
|
-
|
|
26439
|
-
|
|
26440
|
-
|
|
26441
|
-
|
|
26442
|
-
|
|
26443
|
-
|
|
26444
|
-
|
|
26454
|
+
}
|
|
26455
|
+
break;
|
|
26456
|
+
case -4:
|
|
26457
|
+
if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
|
|
26458
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26459
|
+
__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])))
|
|
26460
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
26461
|
+
return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26445
26462
|
}
|
|
26446
|
-
|
|
26447
|
-
|
|
26448
|
-
|
|
26449
|
-
|
|
26450
|
-
|
|
26451
|
-
|
|
26452
|
-
|
|
26453
|
-
|
|
26463
|
+
}
|
|
26464
|
+
break;
|
|
26465
|
+
case 4:
|
|
26466
|
+
if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
|
|
26467
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26468
|
+
__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])))
|
|
26469
|
+
} else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
|
|
26470
|
+
return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
|
|
26454
26471
|
}
|
|
26455
|
-
|
|
26456
|
-
|
|
26472
|
+
}
|
|
26473
|
+
break;
|
|
26457
26474
|
}
|
|
26475
|
+
}
|
|
26458
26476
|
#endif
|
|
26459
|
-
|
|
26460
|
-
|
|
26477
|
+
if ((sizeof(int) <= sizeof(long))) {
|
|
26478
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
|
|
26461
26479
|
#ifdef HAVE_LONG_LONG
|
|
26462
|
-
|
|
26463
|
-
|
|
26480
|
+
} else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
|
|
26481
|
+
__PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26464
26482
|
#endif
|
|
26465
|
-
}
|
|
26466
26483
|
}
|
|
26467
|
-
|
|
26468
|
-
|
|
26469
|
-
|
|
26470
|
-
|
|
26471
|
-
|
|
26472
|
-
|
|
26473
|
-
|
|
26474
|
-
|
|
26475
|
-
|
|
26476
|
-
|
|
26477
|
-
|
|
26478
|
-
|
|
26479
|
-
|
|
26480
|
-
|
|
26481
|
-
|
|
26482
|
-
|
|
26483
|
-
|
|
26484
|
-
|
|
26485
|
-
|
|
26486
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26487
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26488
|
-
long idigit;
|
|
26489
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26490
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26491
|
-
PyObject *tmp = v;
|
|
26492
|
-
v = PyNumber_Long(v);
|
|
26493
|
-
assert(PyLong_CheckExact(v));
|
|
26494
|
-
Py_DECREF(tmp);
|
|
26495
|
-
if (unlikely(!v)) return (int) -1;
|
|
26496
|
-
}
|
|
26497
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26498
|
-
if (Py_SIZE(x) == 0)
|
|
26499
|
-
return (int) 0;
|
|
26500
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26484
|
+
}
|
|
26485
|
+
{
|
|
26486
|
+
int val;
|
|
26487
|
+
int ret = -1;
|
|
26488
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26489
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26490
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26491
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26492
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26493
|
+
goto raise_overflow;
|
|
26494
|
+
} else {
|
|
26495
|
+
ret = 0;
|
|
26496
|
+
}
|
|
26497
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26498
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26499
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26500
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26501
|
+
bytes, sizeof(val),
|
|
26502
|
+
is_little, !is_unsigned);
|
|
26501
26503
|
#else
|
|
26502
|
-
|
|
26503
|
-
|
|
26504
|
-
|
|
26505
|
-
|
|
26506
|
-
|
|
26507
|
-
|
|
26508
|
-
|
|
26509
|
-
|
|
26510
|
-
|
|
26511
|
-
|
|
26512
|
-
|
|
26513
|
-
|
|
26514
|
-
|
|
26515
|
-
|
|
26516
|
-
stepval = __Pyx_NewRef(v);
|
|
26517
|
-
}
|
|
26518
|
-
val = (int) 0;
|
|
26519
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26520
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26521
|
-
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
26522
|
-
PyObject *tmp, *digit;
|
|
26523
|
-
digit = PyNumber_And(stepval, mask);
|
|
26524
|
-
if (unlikely(!digit)) goto done;
|
|
26525
|
-
idigit = PyLong_AsLong(digit);
|
|
26526
|
-
Py_DECREF(digit);
|
|
26527
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26528
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26529
|
-
if (unlikely(!tmp)) goto done;
|
|
26530
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26531
|
-
val |= ((int) idigit) << bits;
|
|
26532
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26533
|
-
if (Py_SIZE(stepval) == 0)
|
|
26534
|
-
goto unpacking_done;
|
|
26535
|
-
#endif
|
|
26536
|
-
}
|
|
26537
|
-
idigit = PyLong_AsLong(stepval);
|
|
26538
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26539
|
-
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26540
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26541
|
-
goto raise_overflow;
|
|
26542
|
-
val |= ((int) idigit) << bits;
|
|
26543
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26544
|
-
unpacking_done:
|
|
26545
|
-
#endif
|
|
26546
|
-
if (!is_unsigned) {
|
|
26547
|
-
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
26548
|
-
goto raise_overflow;
|
|
26549
|
-
if (is_negative)
|
|
26550
|
-
val = ~val;
|
|
26551
|
-
}
|
|
26552
|
-
ret = 0;
|
|
26553
|
-
done:
|
|
26554
|
-
Py_XDECREF(shift);
|
|
26555
|
-
Py_XDECREF(mask);
|
|
26556
|
-
Py_XDECREF(stepval);
|
|
26557
|
-
#endif
|
|
26504
|
+
PyObject *v;
|
|
26505
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26506
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26507
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26508
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26509
|
+
v = __Pyx_NewRef(x);
|
|
26510
|
+
} else {
|
|
26511
|
+
v = PyNumber_Long(x);
|
|
26512
|
+
if (unlikely(!v)) return (int) -1;
|
|
26513
|
+
assert(PyLong_CheckExact(v));
|
|
26514
|
+
}
|
|
26515
|
+
{
|
|
26516
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26517
|
+
if (unlikely(result < 0)) {
|
|
26558
26518
|
Py_DECREF(v);
|
|
26559
|
-
|
|
26560
|
-
return val;
|
|
26519
|
+
return (int) -1;
|
|
26561
26520
|
}
|
|
26562
|
-
|
|
26521
|
+
is_negative = result == 1;
|
|
26563
26522
|
}
|
|
26564
|
-
|
|
26565
|
-
|
|
26566
|
-
|
|
26567
|
-
|
|
26568
|
-
|
|
26569
|
-
|
|
26523
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26524
|
+
Py_DECREF(v);
|
|
26525
|
+
goto raise_neg_overflow;
|
|
26526
|
+
} else if (is_negative) {
|
|
26527
|
+
stepval = PyNumber_Invert(v);
|
|
26528
|
+
Py_DECREF(v);
|
|
26529
|
+
if (unlikely(!stepval))
|
|
26530
|
+
return (int) -1;
|
|
26531
|
+
} else {
|
|
26532
|
+
stepval = v;
|
|
26533
|
+
}
|
|
26534
|
+
v = NULL;
|
|
26535
|
+
val = (int) 0;
|
|
26536
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26537
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26538
|
+
for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
|
|
26539
|
+
PyObject *tmp, *digit;
|
|
26540
|
+
long idigit;
|
|
26541
|
+
digit = PyNumber_And(stepval, mask);
|
|
26542
|
+
if (unlikely(!digit)) goto done;
|
|
26543
|
+
idigit = PyLong_AsLong(digit);
|
|
26544
|
+
Py_DECREF(digit);
|
|
26545
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26546
|
+
val |= ((int) idigit) << bits;
|
|
26547
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26548
|
+
if (unlikely(!tmp)) goto done;
|
|
26549
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26550
|
+
}
|
|
26551
|
+
Py_DECREF(shift); shift = NULL;
|
|
26552
|
+
Py_DECREF(mask); mask = NULL;
|
|
26553
|
+
{
|
|
26554
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26555
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26556
|
+
remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26557
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26558
|
+
goto raise_overflow;
|
|
26559
|
+
val |= ((int) idigit) << bits;
|
|
26560
|
+
}
|
|
26561
|
+
if (!is_unsigned) {
|
|
26562
|
+
if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
|
|
26563
|
+
goto raise_overflow;
|
|
26564
|
+
if (is_negative)
|
|
26565
|
+
val = ~val;
|
|
26566
|
+
}
|
|
26567
|
+
ret = 0;
|
|
26568
|
+
done:
|
|
26569
|
+
Py_XDECREF(shift);
|
|
26570
|
+
Py_XDECREF(mask);
|
|
26571
|
+
Py_XDECREF(stepval);
|
|
26572
|
+
#endif
|
|
26573
|
+
if (unlikely(ret))
|
|
26574
|
+
return (int) -1;
|
|
26570
26575
|
return val;
|
|
26571
26576
|
}
|
|
26572
26577
|
raise_overflow:
|
|
@@ -26610,12 +26615,19 @@ raise_neg_overflow:
|
|
|
26610
26615
|
}
|
|
26611
26616
|
}
|
|
26612
26617
|
{
|
|
26613
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26614
26618
|
unsigned char *bytes = (unsigned char *)&value;
|
|
26615
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
26619
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
26620
|
+
if (is_unsigned) {
|
|
26621
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
26622
|
+
} else {
|
|
26623
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
26624
|
+
}
|
|
26625
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
26626
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26616
26627
|
return _PyLong_FromByteArray(bytes, sizeof(int),
|
|
26617
26628
|
little, !is_unsigned);
|
|
26618
26629
|
#else
|
|
26630
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26619
26631
|
PyObject *from_bytes, *result = NULL;
|
|
26620
26632
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
26621
26633
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -26665,245 +26677,239 @@ raise_neg_overflow:
|
|
|
26665
26677
|
}
|
|
26666
26678
|
return (long) val;
|
|
26667
26679
|
}
|
|
26668
|
-
}
|
|
26680
|
+
}
|
|
26669
26681
|
#endif
|
|
26670
|
-
if (
|
|
26671
|
-
|
|
26682
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
26683
|
+
long val;
|
|
26684
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
26685
|
+
if (!tmp) return (long) -1;
|
|
26686
|
+
val = __Pyx_PyInt_As_long(tmp);
|
|
26687
|
+
Py_DECREF(tmp);
|
|
26688
|
+
return val;
|
|
26689
|
+
}
|
|
26690
|
+
if (is_unsigned) {
|
|
26672
26691
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26673
|
-
|
|
26674
|
-
|
|
26675
|
-
|
|
26676
|
-
|
|
26677
|
-
|
|
26678
|
-
|
|
26679
|
-
|
|
26680
|
-
|
|
26681
|
-
|
|
26682
|
-
|
|
26683
|
-
|
|
26684
|
-
|
|
26685
|
-
|
|
26686
|
-
|
|
26687
|
-
}
|
|
26692
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
26693
|
+
goto raise_neg_overflow;
|
|
26694
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
26695
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
26696
|
+
} else {
|
|
26697
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26698
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26699
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
26700
|
+
case 2:
|
|
26701
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
26702
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26703
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26704
|
+
} else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
|
|
26705
|
+
return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26688
26706
|
}
|
|
26689
|
-
|
|
26690
|
-
|
|
26691
|
-
|
|
26692
|
-
|
|
26693
|
-
|
|
26694
|
-
|
|
26695
|
-
|
|
26696
|
-
|
|
26707
|
+
}
|
|
26708
|
+
break;
|
|
26709
|
+
case 3:
|
|
26710
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
26711
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26712
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26713
|
+
} else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
|
|
26714
|
+
return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26697
26715
|
}
|
|
26698
|
-
|
|
26699
|
-
|
|
26700
|
-
|
|
26701
|
-
|
|
26702
|
-
|
|
26703
|
-
|
|
26704
|
-
|
|
26705
|
-
|
|
26716
|
+
}
|
|
26717
|
+
break;
|
|
26718
|
+
case 4:
|
|
26719
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
26720
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26721
|
+
__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])))
|
|
26722
|
+
} else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
|
|
26723
|
+
return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
|
|
26706
26724
|
}
|
|
26707
|
-
|
|
26708
|
-
|
|
26725
|
+
}
|
|
26726
|
+
break;
|
|
26709
26727
|
}
|
|
26728
|
+
}
|
|
26710
26729
|
#endif
|
|
26711
26730
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
26712
|
-
|
|
26713
|
-
|
|
26714
|
-
|
|
26731
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
26732
|
+
goto raise_neg_overflow;
|
|
26733
|
+
}
|
|
26715
26734
|
#else
|
|
26716
|
-
|
|
26717
|
-
|
|
26718
|
-
|
|
26719
|
-
|
|
26720
|
-
|
|
26721
|
-
|
|
26722
|
-
|
|
26735
|
+
{
|
|
26736
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
26737
|
+
if (unlikely(result < 0))
|
|
26738
|
+
return (long) -1;
|
|
26739
|
+
if (unlikely(result == 1))
|
|
26740
|
+
goto raise_neg_overflow;
|
|
26741
|
+
}
|
|
26723
26742
|
#endif
|
|
26724
|
-
|
|
26725
|
-
|
|
26743
|
+
if ((sizeof(long) <= sizeof(unsigned long))) {
|
|
26744
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
|
|
26726
26745
|
#ifdef HAVE_LONG_LONG
|
|
26727
|
-
|
|
26728
|
-
|
|
26746
|
+
} else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
26747
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
26729
26748
|
#endif
|
|
26730
|
-
|
|
26731
|
-
|
|
26749
|
+
}
|
|
26750
|
+
} else {
|
|
26732
26751
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
26733
|
-
|
|
26734
|
-
|
|
26735
|
-
|
|
26736
|
-
|
|
26737
|
-
|
|
26738
|
-
|
|
26739
|
-
|
|
26740
|
-
|
|
26741
|
-
|
|
26742
|
-
|
|
26743
|
-
|
|
26744
|
-
|
|
26745
|
-
}
|
|
26752
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
26753
|
+
__PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
26754
|
+
} else {
|
|
26755
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
26756
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
26757
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
26758
|
+
case -2:
|
|
26759
|
+
if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
|
|
26760
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26761
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26762
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26763
|
+
return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26746
26764
|
}
|
|
26747
|
-
|
|
26748
|
-
|
|
26749
|
-
|
|
26750
|
-
|
|
26751
|
-
|
|
26752
|
-
|
|
26753
|
-
|
|
26754
|
-
|
|
26765
|
+
}
|
|
26766
|
+
break;
|
|
26767
|
+
case 2:
|
|
26768
|
+
if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
|
|
26769
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
26770
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26771
|
+
} else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26772
|
+
return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26755
26773
|
}
|
|
26756
|
-
|
|
26757
|
-
|
|
26758
|
-
|
|
26759
|
-
|
|
26760
|
-
|
|
26761
|
-
|
|
26762
|
-
|
|
26763
|
-
|
|
26774
|
+
}
|
|
26775
|
+
break;
|
|
26776
|
+
case -3:
|
|
26777
|
+
if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
|
|
26778
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26779
|
+
__PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26780
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26781
|
+
return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26764
26782
|
}
|
|
26765
|
-
|
|
26766
|
-
|
|
26767
|
-
|
|
26768
|
-
|
|
26769
|
-
|
|
26770
|
-
|
|
26771
|
-
|
|
26772
|
-
|
|
26783
|
+
}
|
|
26784
|
+
break;
|
|
26785
|
+
case 3:
|
|
26786
|
+
if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
|
|
26787
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
26788
|
+
__PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
26789
|
+
} else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26790
|
+
return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26773
26791
|
}
|
|
26774
|
-
|
|
26775
|
-
|
|
26776
|
-
|
|
26777
|
-
|
|
26778
|
-
|
|
26779
|
-
|
|
26780
|
-
|
|
26781
|
-
|
|
26792
|
+
}
|
|
26793
|
+
break;
|
|
26794
|
+
case -4:
|
|
26795
|
+
if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
|
|
26796
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26797
|
+
__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])))
|
|
26798
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
26799
|
+
return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26782
26800
|
}
|
|
26783
|
-
|
|
26784
|
-
|
|
26785
|
-
|
|
26786
|
-
|
|
26787
|
-
|
|
26788
|
-
|
|
26789
|
-
|
|
26790
|
-
|
|
26801
|
+
}
|
|
26802
|
+
break;
|
|
26803
|
+
case 4:
|
|
26804
|
+
if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
|
|
26805
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
26806
|
+
__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])))
|
|
26807
|
+
} else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
|
|
26808
|
+
return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
|
|
26791
26809
|
}
|
|
26792
|
-
|
|
26793
|
-
|
|
26810
|
+
}
|
|
26811
|
+
break;
|
|
26794
26812
|
}
|
|
26813
|
+
}
|
|
26795
26814
|
#endif
|
|
26796
|
-
|
|
26797
|
-
|
|
26815
|
+
if ((sizeof(long) <= sizeof(long))) {
|
|
26816
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
|
|
26798
26817
|
#ifdef HAVE_LONG_LONG
|
|
26799
|
-
|
|
26800
|
-
|
|
26818
|
+
} else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
|
|
26819
|
+
__PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
26801
26820
|
#endif
|
|
26802
|
-
}
|
|
26803
26821
|
}
|
|
26804
|
-
|
|
26805
|
-
|
|
26806
|
-
|
|
26807
|
-
|
|
26808
|
-
|
|
26809
|
-
|
|
26810
|
-
|
|
26811
|
-
|
|
26812
|
-
|
|
26813
|
-
|
|
26814
|
-
|
|
26815
|
-
|
|
26816
|
-
|
|
26817
|
-
|
|
26818
|
-
|
|
26819
|
-
|
|
26820
|
-
|
|
26821
|
-
|
|
26822
|
-
|
|
26823
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26824
|
-
int bits, remaining_bits, is_negative = 0;
|
|
26825
|
-
long idigit;
|
|
26826
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26827
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
26828
|
-
PyObject *tmp = v;
|
|
26829
|
-
v = PyNumber_Long(v);
|
|
26830
|
-
assert(PyLong_CheckExact(v));
|
|
26831
|
-
Py_DECREF(tmp);
|
|
26832
|
-
if (unlikely(!v)) return (long) -1;
|
|
26833
|
-
}
|
|
26834
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26835
|
-
if (Py_SIZE(x) == 0)
|
|
26836
|
-
return (long) 0;
|
|
26837
|
-
is_negative = Py_SIZE(x) < 0;
|
|
26822
|
+
}
|
|
26823
|
+
{
|
|
26824
|
+
long val;
|
|
26825
|
+
int ret = -1;
|
|
26826
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
26827
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
26828
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
26829
|
+
if (unlikely(bytes_copied == -1)) {
|
|
26830
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
26831
|
+
goto raise_overflow;
|
|
26832
|
+
} else {
|
|
26833
|
+
ret = 0;
|
|
26834
|
+
}
|
|
26835
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
26836
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
26837
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
26838
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
26839
|
+
bytes, sizeof(val),
|
|
26840
|
+
is_little, !is_unsigned);
|
|
26838
26841
|
#else
|
|
26839
|
-
|
|
26840
|
-
|
|
26841
|
-
|
|
26842
|
-
|
|
26843
|
-
|
|
26844
|
-
|
|
26845
|
-
|
|
26846
|
-
|
|
26847
|
-
|
|
26848
|
-
|
|
26849
|
-
|
|
26850
|
-
|
|
26851
|
-
|
|
26852
|
-
|
|
26853
|
-
stepval = __Pyx_NewRef(v);
|
|
26854
|
-
}
|
|
26855
|
-
val = (long) 0;
|
|
26856
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26857
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26858
|
-
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
26859
|
-
PyObject *tmp, *digit;
|
|
26860
|
-
digit = PyNumber_And(stepval, mask);
|
|
26861
|
-
if (unlikely(!digit)) goto done;
|
|
26862
|
-
idigit = PyLong_AsLong(digit);
|
|
26863
|
-
Py_DECREF(digit);
|
|
26864
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26865
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
26866
|
-
if (unlikely(!tmp)) goto done;
|
|
26867
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
26868
|
-
val |= ((long) idigit) << bits;
|
|
26869
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26870
|
-
if (Py_SIZE(stepval) == 0)
|
|
26871
|
-
goto unpacking_done;
|
|
26872
|
-
#endif
|
|
26873
|
-
}
|
|
26874
|
-
idigit = PyLong_AsLong(stepval);
|
|
26875
|
-
if (unlikely(idigit < 0)) goto done;
|
|
26876
|
-
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26877
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26878
|
-
goto raise_overflow;
|
|
26879
|
-
val |= ((long) idigit) << bits;
|
|
26880
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
26881
|
-
unpacking_done:
|
|
26882
|
-
#endif
|
|
26883
|
-
if (!is_unsigned) {
|
|
26884
|
-
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
26885
|
-
goto raise_overflow;
|
|
26886
|
-
if (is_negative)
|
|
26887
|
-
val = ~val;
|
|
26888
|
-
}
|
|
26889
|
-
ret = 0;
|
|
26890
|
-
done:
|
|
26891
|
-
Py_XDECREF(shift);
|
|
26892
|
-
Py_XDECREF(mask);
|
|
26893
|
-
Py_XDECREF(stepval);
|
|
26894
|
-
#endif
|
|
26842
|
+
PyObject *v;
|
|
26843
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
26844
|
+
int bits, remaining_bits, is_negative = 0;
|
|
26845
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
26846
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
26847
|
+
v = __Pyx_NewRef(x);
|
|
26848
|
+
} else {
|
|
26849
|
+
v = PyNumber_Long(x);
|
|
26850
|
+
if (unlikely(!v)) return (long) -1;
|
|
26851
|
+
assert(PyLong_CheckExact(v));
|
|
26852
|
+
}
|
|
26853
|
+
{
|
|
26854
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
26855
|
+
if (unlikely(result < 0)) {
|
|
26895
26856
|
Py_DECREF(v);
|
|
26896
|
-
|
|
26897
|
-
return val;
|
|
26857
|
+
return (long) -1;
|
|
26898
26858
|
}
|
|
26899
|
-
|
|
26859
|
+
is_negative = result == 1;
|
|
26900
26860
|
}
|
|
26901
|
-
|
|
26902
|
-
|
|
26903
|
-
|
|
26904
|
-
|
|
26905
|
-
|
|
26906
|
-
|
|
26861
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
26862
|
+
Py_DECREF(v);
|
|
26863
|
+
goto raise_neg_overflow;
|
|
26864
|
+
} else if (is_negative) {
|
|
26865
|
+
stepval = PyNumber_Invert(v);
|
|
26866
|
+
Py_DECREF(v);
|
|
26867
|
+
if (unlikely(!stepval))
|
|
26868
|
+
return (long) -1;
|
|
26869
|
+
} else {
|
|
26870
|
+
stepval = v;
|
|
26871
|
+
}
|
|
26872
|
+
v = NULL;
|
|
26873
|
+
val = (long) 0;
|
|
26874
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
26875
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
26876
|
+
for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
|
|
26877
|
+
PyObject *tmp, *digit;
|
|
26878
|
+
long idigit;
|
|
26879
|
+
digit = PyNumber_And(stepval, mask);
|
|
26880
|
+
if (unlikely(!digit)) goto done;
|
|
26881
|
+
idigit = PyLong_AsLong(digit);
|
|
26882
|
+
Py_DECREF(digit);
|
|
26883
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26884
|
+
val |= ((long) idigit) << bits;
|
|
26885
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
26886
|
+
if (unlikely(!tmp)) goto done;
|
|
26887
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
26888
|
+
}
|
|
26889
|
+
Py_DECREF(shift); shift = NULL;
|
|
26890
|
+
Py_DECREF(mask); mask = NULL;
|
|
26891
|
+
{
|
|
26892
|
+
long idigit = PyLong_AsLong(stepval);
|
|
26893
|
+
if (unlikely(idigit < 0)) goto done;
|
|
26894
|
+
remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
26895
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
26896
|
+
goto raise_overflow;
|
|
26897
|
+
val |= ((long) idigit) << bits;
|
|
26898
|
+
}
|
|
26899
|
+
if (!is_unsigned) {
|
|
26900
|
+
if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
|
|
26901
|
+
goto raise_overflow;
|
|
26902
|
+
if (is_negative)
|
|
26903
|
+
val = ~val;
|
|
26904
|
+
}
|
|
26905
|
+
ret = 0;
|
|
26906
|
+
done:
|
|
26907
|
+
Py_XDECREF(shift);
|
|
26908
|
+
Py_XDECREF(mask);
|
|
26909
|
+
Py_XDECREF(stepval);
|
|
26910
|
+
#endif
|
|
26911
|
+
if (unlikely(ret))
|
|
26912
|
+
return (long) -1;
|
|
26907
26913
|
return val;
|
|
26908
26914
|
}
|
|
26909
26915
|
raise_overflow:
|
|
@@ -26947,12 +26953,19 @@ raise_neg_overflow:
|
|
|
26947
26953
|
}
|
|
26948
26954
|
}
|
|
26949
26955
|
{
|
|
26950
|
-
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26951
26956
|
unsigned char *bytes = (unsigned char *)&value;
|
|
26952
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX
|
|
26957
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
|
|
26958
|
+
if (is_unsigned) {
|
|
26959
|
+
return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
|
|
26960
|
+
} else {
|
|
26961
|
+
return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
|
|
26962
|
+
}
|
|
26963
|
+
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
|
|
26964
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26953
26965
|
return _PyLong_FromByteArray(bytes, sizeof(long),
|
|
26954
26966
|
little, !is_unsigned);
|
|
26955
26967
|
#else
|
|
26968
|
+
int one = 1; int little = (int)*(unsigned char *)&one;
|
|
26956
26969
|
PyObject *from_bytes, *result = NULL;
|
|
26957
26970
|
PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
|
|
26958
26971
|
from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
|
|
@@ -27002,245 +27015,239 @@ raise_neg_overflow:
|
|
|
27002
27015
|
}
|
|
27003
27016
|
return (char) val;
|
|
27004
27017
|
}
|
|
27005
|
-
}
|
|
27018
|
+
}
|
|
27006
27019
|
#endif
|
|
27007
|
-
if (
|
|
27008
|
-
|
|
27020
|
+
if (unlikely(!PyLong_Check(x))) {
|
|
27021
|
+
char val;
|
|
27022
|
+
PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
|
|
27023
|
+
if (!tmp) return (char) -1;
|
|
27024
|
+
val = __Pyx_PyInt_As_char(tmp);
|
|
27025
|
+
Py_DECREF(tmp);
|
|
27026
|
+
return val;
|
|
27027
|
+
}
|
|
27028
|
+
if (is_unsigned) {
|
|
27009
27029
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
27010
|
-
|
|
27011
|
-
|
|
27012
|
-
|
|
27013
|
-
|
|
27014
|
-
|
|
27015
|
-
|
|
27016
|
-
|
|
27017
|
-
|
|
27018
|
-
|
|
27019
|
-
|
|
27020
|
-
|
|
27021
|
-
|
|
27022
|
-
|
|
27023
|
-
|
|
27024
|
-
}
|
|
27030
|
+
if (unlikely(__Pyx_PyLong_IsNeg(x))) {
|
|
27031
|
+
goto raise_neg_overflow;
|
|
27032
|
+
} else if (__Pyx_PyLong_IsCompact(x)) {
|
|
27033
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
|
|
27034
|
+
} else {
|
|
27035
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
27036
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
27037
|
+
switch (__Pyx_PyLong_DigitCount(x)) {
|
|
27038
|
+
case 2:
|
|
27039
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
27040
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
27041
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27042
|
+
} else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
|
|
27043
|
+
return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
27025
27044
|
}
|
|
27026
|
-
|
|
27027
|
-
|
|
27028
|
-
|
|
27029
|
-
|
|
27030
|
-
|
|
27031
|
-
|
|
27032
|
-
|
|
27033
|
-
|
|
27045
|
+
}
|
|
27046
|
+
break;
|
|
27047
|
+
case 3:
|
|
27048
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
27049
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
27050
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27051
|
+
} else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
|
|
27052
|
+
return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
27034
27053
|
}
|
|
27035
|
-
|
|
27036
|
-
|
|
27037
|
-
|
|
27038
|
-
|
|
27039
|
-
|
|
27040
|
-
|
|
27041
|
-
|
|
27042
|
-
|
|
27054
|
+
}
|
|
27055
|
+
break;
|
|
27056
|
+
case 4:
|
|
27057
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
27058
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
27059
|
+
__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])))
|
|
27060
|
+
} else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
|
|
27061
|
+
return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
|
|
27043
27062
|
}
|
|
27044
|
-
|
|
27045
|
-
|
|
27063
|
+
}
|
|
27064
|
+
break;
|
|
27046
27065
|
}
|
|
27066
|
+
}
|
|
27047
27067
|
#endif
|
|
27048
27068
|
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
|
|
27049
|
-
|
|
27050
|
-
|
|
27051
|
-
|
|
27069
|
+
if (unlikely(Py_SIZE(x) < 0)) {
|
|
27070
|
+
goto raise_neg_overflow;
|
|
27071
|
+
}
|
|
27052
27072
|
#else
|
|
27053
|
-
|
|
27054
|
-
|
|
27055
|
-
|
|
27056
|
-
|
|
27057
|
-
|
|
27058
|
-
|
|
27059
|
-
|
|
27073
|
+
{
|
|
27074
|
+
int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
|
|
27075
|
+
if (unlikely(result < 0))
|
|
27076
|
+
return (char) -1;
|
|
27077
|
+
if (unlikely(result == 1))
|
|
27078
|
+
goto raise_neg_overflow;
|
|
27079
|
+
}
|
|
27060
27080
|
#endif
|
|
27061
|
-
|
|
27062
|
-
|
|
27081
|
+
if ((sizeof(char) <= sizeof(unsigned long))) {
|
|
27082
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
|
|
27063
27083
|
#ifdef HAVE_LONG_LONG
|
|
27064
|
-
|
|
27065
|
-
|
|
27084
|
+
} else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
|
|
27085
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
|
|
27066
27086
|
#endif
|
|
27067
|
-
|
|
27068
|
-
|
|
27087
|
+
}
|
|
27088
|
+
} else {
|
|
27069
27089
|
#if CYTHON_USE_PYLONG_INTERNALS
|
|
27070
|
-
|
|
27071
|
-
|
|
27072
|
-
|
|
27073
|
-
|
|
27074
|
-
|
|
27075
|
-
|
|
27076
|
-
|
|
27077
|
-
|
|
27078
|
-
|
|
27079
|
-
|
|
27080
|
-
|
|
27081
|
-
|
|
27082
|
-
}
|
|
27090
|
+
if (__Pyx_PyLong_IsCompact(x)) {
|
|
27091
|
+
__PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
|
|
27092
|
+
} else {
|
|
27093
|
+
const digit* digits = __Pyx_PyLong_Digits(x);
|
|
27094
|
+
assert(__Pyx_PyLong_DigitCount(x) > 1);
|
|
27095
|
+
switch (__Pyx_PyLong_SignedDigitCount(x)) {
|
|
27096
|
+
case -2:
|
|
27097
|
+
if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
|
|
27098
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
27099
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27100
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
27101
|
+
return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27083
27102
|
}
|
|
27084
|
-
|
|
27085
|
-
|
|
27086
|
-
|
|
27087
|
-
|
|
27088
|
-
|
|
27089
|
-
|
|
27090
|
-
|
|
27091
|
-
|
|
27103
|
+
}
|
|
27104
|
+
break;
|
|
27105
|
+
case 2:
|
|
27106
|
+
if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
|
|
27107
|
+
if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
|
|
27108
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27109
|
+
} else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
27110
|
+
return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27092
27111
|
}
|
|
27093
|
-
|
|
27094
|
-
|
|
27095
|
-
|
|
27096
|
-
|
|
27097
|
-
|
|
27098
|
-
|
|
27099
|
-
|
|
27100
|
-
|
|
27112
|
+
}
|
|
27113
|
+
break;
|
|
27114
|
+
case -3:
|
|
27115
|
+
if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
|
|
27116
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
27117
|
+
__PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27118
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
27119
|
+
return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27101
27120
|
}
|
|
27102
|
-
|
|
27103
|
-
|
|
27104
|
-
|
|
27105
|
-
|
|
27106
|
-
|
|
27107
|
-
|
|
27108
|
-
|
|
27109
|
-
|
|
27121
|
+
}
|
|
27122
|
+
break;
|
|
27123
|
+
case 3:
|
|
27124
|
+
if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
|
|
27125
|
+
if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
|
|
27126
|
+
__PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
|
|
27127
|
+
} else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
27128
|
+
return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27110
27129
|
}
|
|
27111
|
-
|
|
27112
|
-
|
|
27113
|
-
|
|
27114
|
-
|
|
27115
|
-
|
|
27116
|
-
|
|
27117
|
-
|
|
27118
|
-
|
|
27130
|
+
}
|
|
27131
|
+
break;
|
|
27132
|
+
case -4:
|
|
27133
|
+
if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
|
|
27134
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
27135
|
+
__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])))
|
|
27136
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
27137
|
+
return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27119
27138
|
}
|
|
27120
|
-
|
|
27121
|
-
|
|
27122
|
-
|
|
27123
|
-
|
|
27124
|
-
|
|
27125
|
-
|
|
27126
|
-
|
|
27127
|
-
|
|
27139
|
+
}
|
|
27140
|
+
break;
|
|
27141
|
+
case 4:
|
|
27142
|
+
if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
|
|
27143
|
+
if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
|
|
27144
|
+
__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])))
|
|
27145
|
+
} else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
|
|
27146
|
+
return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
|
|
27128
27147
|
}
|
|
27129
|
-
|
|
27130
|
-
|
|
27148
|
+
}
|
|
27149
|
+
break;
|
|
27131
27150
|
}
|
|
27151
|
+
}
|
|
27132
27152
|
#endif
|
|
27133
|
-
|
|
27134
|
-
|
|
27153
|
+
if ((sizeof(char) <= sizeof(long))) {
|
|
27154
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
|
|
27135
27155
|
#ifdef HAVE_LONG_LONG
|
|
27136
|
-
|
|
27137
|
-
|
|
27156
|
+
} else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
|
|
27157
|
+
__PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
|
|
27138
27158
|
#endif
|
|
27139
|
-
}
|
|
27140
27159
|
}
|
|
27141
|
-
|
|
27142
|
-
|
|
27143
|
-
|
|
27144
|
-
|
|
27145
|
-
|
|
27146
|
-
|
|
27147
|
-
|
|
27148
|
-
|
|
27149
|
-
|
|
27150
|
-
|
|
27151
|
-
|
|
27152
|
-
|
|
27153
|
-
|
|
27154
|
-
|
|
27155
|
-
|
|
27156
|
-
|
|
27157
|
-
|
|
27158
|
-
|
|
27159
|
-
|
|
27160
|
-
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
27161
|
-
int bits, remaining_bits, is_negative = 0;
|
|
27162
|
-
long idigit;
|
|
27163
|
-
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
27164
|
-
if (unlikely(!PyLong_CheckExact(v))) {
|
|
27165
|
-
PyObject *tmp = v;
|
|
27166
|
-
v = PyNumber_Long(v);
|
|
27167
|
-
assert(PyLong_CheckExact(v));
|
|
27168
|
-
Py_DECREF(tmp);
|
|
27169
|
-
if (unlikely(!v)) return (char) -1;
|
|
27170
|
-
}
|
|
27171
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
27172
|
-
if (Py_SIZE(x) == 0)
|
|
27173
|
-
return (char) 0;
|
|
27174
|
-
is_negative = Py_SIZE(x) < 0;
|
|
27160
|
+
}
|
|
27161
|
+
{
|
|
27162
|
+
char val;
|
|
27163
|
+
int ret = -1;
|
|
27164
|
+
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
27165
|
+
Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
|
|
27166
|
+
x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
|
|
27167
|
+
if (unlikely(bytes_copied == -1)) {
|
|
27168
|
+
} else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
|
|
27169
|
+
goto raise_overflow;
|
|
27170
|
+
} else {
|
|
27171
|
+
ret = 0;
|
|
27172
|
+
}
|
|
27173
|
+
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
|
|
27174
|
+
int one = 1; int is_little = (int)*(unsigned char *)&one;
|
|
27175
|
+
unsigned char *bytes = (unsigned char *)&val;
|
|
27176
|
+
ret = _PyLong_AsByteArray((PyLongObject *)x,
|
|
27177
|
+
bytes, sizeof(val),
|
|
27178
|
+
is_little, !is_unsigned);
|
|
27175
27179
|
#else
|
|
27176
|
-
|
|
27177
|
-
|
|
27178
|
-
|
|
27179
|
-
|
|
27180
|
-
|
|
27181
|
-
|
|
27182
|
-
|
|
27183
|
-
|
|
27184
|
-
|
|
27185
|
-
|
|
27186
|
-
|
|
27187
|
-
|
|
27188
|
-
|
|
27189
|
-
|
|
27190
|
-
stepval = __Pyx_NewRef(v);
|
|
27191
|
-
}
|
|
27192
|
-
val = (char) 0;
|
|
27193
|
-
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
27194
|
-
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
27195
|
-
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
27196
|
-
PyObject *tmp, *digit;
|
|
27197
|
-
digit = PyNumber_And(stepval, mask);
|
|
27198
|
-
if (unlikely(!digit)) goto done;
|
|
27199
|
-
idigit = PyLong_AsLong(digit);
|
|
27200
|
-
Py_DECREF(digit);
|
|
27201
|
-
if (unlikely(idigit < 0)) goto done;
|
|
27202
|
-
tmp = PyNumber_Rshift(stepval, shift);
|
|
27203
|
-
if (unlikely(!tmp)) goto done;
|
|
27204
|
-
Py_DECREF(stepval); stepval = tmp;
|
|
27205
|
-
val |= ((char) idigit) << bits;
|
|
27206
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
27207
|
-
if (Py_SIZE(stepval) == 0)
|
|
27208
|
-
goto unpacking_done;
|
|
27209
|
-
#endif
|
|
27210
|
-
}
|
|
27211
|
-
idigit = PyLong_AsLong(stepval);
|
|
27212
|
-
if (unlikely(idigit < 0)) goto done;
|
|
27213
|
-
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
27214
|
-
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
27215
|
-
goto raise_overflow;
|
|
27216
|
-
val |= ((char) idigit) << bits;
|
|
27217
|
-
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
|
|
27218
|
-
unpacking_done:
|
|
27219
|
-
#endif
|
|
27220
|
-
if (!is_unsigned) {
|
|
27221
|
-
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
27222
|
-
goto raise_overflow;
|
|
27223
|
-
if (is_negative)
|
|
27224
|
-
val = ~val;
|
|
27225
|
-
}
|
|
27226
|
-
ret = 0;
|
|
27227
|
-
done:
|
|
27228
|
-
Py_XDECREF(shift);
|
|
27229
|
-
Py_XDECREF(mask);
|
|
27230
|
-
Py_XDECREF(stepval);
|
|
27231
|
-
#endif
|
|
27180
|
+
PyObject *v;
|
|
27181
|
+
PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
|
|
27182
|
+
int bits, remaining_bits, is_negative = 0;
|
|
27183
|
+
int chunk_size = (sizeof(long) < 8) ? 30 : 62;
|
|
27184
|
+
if (likely(PyLong_CheckExact(x))) {
|
|
27185
|
+
v = __Pyx_NewRef(x);
|
|
27186
|
+
} else {
|
|
27187
|
+
v = PyNumber_Long(x);
|
|
27188
|
+
if (unlikely(!v)) return (char) -1;
|
|
27189
|
+
assert(PyLong_CheckExact(v));
|
|
27190
|
+
}
|
|
27191
|
+
{
|
|
27192
|
+
int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
|
|
27193
|
+
if (unlikely(result < 0)) {
|
|
27232
27194
|
Py_DECREF(v);
|
|
27233
|
-
|
|
27234
|
-
return val;
|
|
27195
|
+
return (char) -1;
|
|
27235
27196
|
}
|
|
27236
|
-
|
|
27197
|
+
is_negative = result == 1;
|
|
27237
27198
|
}
|
|
27238
|
-
|
|
27239
|
-
|
|
27240
|
-
|
|
27241
|
-
|
|
27242
|
-
|
|
27243
|
-
|
|
27199
|
+
if (is_unsigned && unlikely(is_negative)) {
|
|
27200
|
+
Py_DECREF(v);
|
|
27201
|
+
goto raise_neg_overflow;
|
|
27202
|
+
} else if (is_negative) {
|
|
27203
|
+
stepval = PyNumber_Invert(v);
|
|
27204
|
+
Py_DECREF(v);
|
|
27205
|
+
if (unlikely(!stepval))
|
|
27206
|
+
return (char) -1;
|
|
27207
|
+
} else {
|
|
27208
|
+
stepval = v;
|
|
27209
|
+
}
|
|
27210
|
+
v = NULL;
|
|
27211
|
+
val = (char) 0;
|
|
27212
|
+
mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
|
|
27213
|
+
shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
|
|
27214
|
+
for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
|
|
27215
|
+
PyObject *tmp, *digit;
|
|
27216
|
+
long idigit;
|
|
27217
|
+
digit = PyNumber_And(stepval, mask);
|
|
27218
|
+
if (unlikely(!digit)) goto done;
|
|
27219
|
+
idigit = PyLong_AsLong(digit);
|
|
27220
|
+
Py_DECREF(digit);
|
|
27221
|
+
if (unlikely(idigit < 0)) goto done;
|
|
27222
|
+
val |= ((char) idigit) << bits;
|
|
27223
|
+
tmp = PyNumber_Rshift(stepval, shift);
|
|
27224
|
+
if (unlikely(!tmp)) goto done;
|
|
27225
|
+
Py_DECREF(stepval); stepval = tmp;
|
|
27226
|
+
}
|
|
27227
|
+
Py_DECREF(shift); shift = NULL;
|
|
27228
|
+
Py_DECREF(mask); mask = NULL;
|
|
27229
|
+
{
|
|
27230
|
+
long idigit = PyLong_AsLong(stepval);
|
|
27231
|
+
if (unlikely(idigit < 0)) goto done;
|
|
27232
|
+
remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
|
|
27233
|
+
if (unlikely(idigit >= (1L << remaining_bits)))
|
|
27234
|
+
goto raise_overflow;
|
|
27235
|
+
val |= ((char) idigit) << bits;
|
|
27236
|
+
}
|
|
27237
|
+
if (!is_unsigned) {
|
|
27238
|
+
if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
|
|
27239
|
+
goto raise_overflow;
|
|
27240
|
+
if (is_negative)
|
|
27241
|
+
val = ~val;
|
|
27242
|
+
}
|
|
27243
|
+
ret = 0;
|
|
27244
|
+
done:
|
|
27245
|
+
Py_XDECREF(shift);
|
|
27246
|
+
Py_XDECREF(mask);
|
|
27247
|
+
Py_XDECREF(stepval);
|
|
27248
|
+
#endif
|
|
27249
|
+
if (unlikely(ret))
|
|
27250
|
+
return (char) -1;
|
|
27244
27251
|
return val;
|
|
27245
27252
|
}
|
|
27246
27253
|
raise_overflow:
|