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.

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