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
  {
@@ -7,7 +7,7 @@
7
7
  "/d2FH4-"
8
8
  ],
9
9
  "include_dirs": [
10
- "C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-2jqincfh\\cp39-win_amd64\\build\\venv\\lib\\site-packages\\numpy\\core\\include"
10
+ "C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pip-build-env-ji5gyl3u\\overlay\\Lib\\site-packages\\numpy\\_core\\include"
11
11
  ],
12
12
  "language": "c++",
13
13
  "name": "sknetwork.linalg.diteration",
@@ -43,10 +43,10 @@ END: Cython Metadata */
43
43
  #else
44
44
  #define __PYX_EXTRA_ABI_MODULE_NAME ""
45
45
  #endif
46
- #define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME
46
+ #define CYTHON_ABI "3_0_12" __PYX_EXTRA_ABI_MODULE_NAME
47
47
  #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
48
48
  #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
49
- #define CYTHON_HEX_VERSION 0x03000AF0
49
+ #define CYTHON_HEX_VERSION 0x03000CF0
50
50
  #define CYTHON_FUTURE_DIVISION 1
51
51
  #include <stddef.h>
52
52
  #ifndef offsetof
@@ -2027,7 +2027,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
2027
2027
  #if !CYTHON_VECTORCALL
2028
2028
  #if PY_VERSION_HEX >= 0x03080000
2029
2029
  #include "frameobject.h"
2030
- #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
2030
+ #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
2031
2031
  #ifndef Py_BUILD_CORE
2032
2032
  #define Py_BUILD_CORE 1
2033
2033
  #endif
@@ -2364,11 +2364,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
2364
2364
  static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
2365
2365
 
2366
2366
  /* HasAttr.proto */
2367
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
2368
- #define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
2369
- #else
2370
2367
  static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
2371
- #endif
2372
2368
 
2373
2369
  /* PyObject_GenericGetAttrNoDict.proto */
2374
2370
  #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
@@ -3998,10 +3994,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
3998
3994
  PyObject *__pyx_t_4 = NULL;
3999
3995
  PyObject *__pyx_t_5 = NULL;
4000
3996
  PyObject *__pyx_t_6 = NULL;
4001
- int __pyx_t_7;
3997
+ unsigned int __pyx_t_7;
4002
3998
  char *__pyx_t_8;
4003
- Py_ssize_t __pyx_t_9;
4004
- Py_UCS4 __pyx_t_10;
3999
+ int __pyx_t_9;
4000
+ Py_ssize_t __pyx_t_10;
4001
+ Py_UCS4 __pyx_t_11;
4005
4002
  int __pyx_lineno = 0;
4006
4003
  const char *__pyx_filename = NULL;
4007
4004
  int __pyx_clineno = 0;
@@ -4227,7 +4224,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4227
4224
  * if dim <= 0:
4228
4225
  * raise ValueError, f"Invalid shape in axis {idx}: {dim}."
4229
4226
  */
4230
- __pyx_t_7 = 0;
4227
+ __pyx_t_9 = 0;
4231
4228
  __pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4);
4232
4229
  __pyx_t_1 = 0;
4233
4230
  for (;;) {
@@ -4244,11 +4241,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4244
4241
  __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)
4245
4242
  __Pyx_GOTREF(__pyx_t_5);
4246
4243
  #endif
4247
- __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)
4244
+ __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)
4248
4245
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
4249
- __pyx_v_dim = __pyx_t_9;
4250
- __pyx_v_idx = __pyx_t_7;
4251
- __pyx_t_7 = (__pyx_t_7 + 1);
4246
+ __pyx_v_dim = __pyx_t_10;
4247
+ __pyx_v_idx = __pyx_t_9;
4248
+ __pyx_t_9 = (__pyx_t_9 + 1);
4252
4249
 
4253
4250
  /* "View.MemoryView":160
4254
4251
  *
@@ -4269,33 +4266,33 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4269
4266
  */
4270
4267
  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error)
4271
4268
  __Pyx_GOTREF(__pyx_t_5);
4272
- __pyx_t_9 = 0;
4273
- __pyx_t_10 = 127;
4269
+ __pyx_t_10 = 0;
4270
+ __pyx_t_11 = 127;
4274
4271
  __Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis);
4275
- __pyx_t_9 += 22;
4272
+ __pyx_t_10 += 22;
4276
4273
  __Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis);
4277
4274
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis);
4278
4275
  __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
4279
4276
  __Pyx_GOTREF(__pyx_t_6);
4280
- __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
4277
+ __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
4281
4278
  __Pyx_GIVEREF(__pyx_t_6);
4282
4279
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
4283
4280
  __pyx_t_6 = 0;
4284
4281
  __Pyx_INCREF(__pyx_kp_u_);
4285
- __pyx_t_9 += 2;
4282
+ __pyx_t_10 += 2;
4286
4283
  __Pyx_GIVEREF(__pyx_kp_u_);
4287
4284
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_);
4288
4285
  __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)
4289
4286
  __Pyx_GOTREF(__pyx_t_6);
4290
- __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
4287
+ __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
4291
4288
  __Pyx_GIVEREF(__pyx_t_6);
4292
4289
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6);
4293
4290
  __pyx_t_6 = 0;
4294
4291
  __Pyx_INCREF(__pyx_kp_u__2);
4295
- __pyx_t_9 += 1;
4292
+ __pyx_t_10 += 1;
4296
4293
  __Pyx_GIVEREF(__pyx_kp_u__2);
4297
4294
  PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2);
4298
- __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)
4295
+ __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)
4299
4296
  __Pyx_GOTREF(__pyx_t_6);
4300
4297
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
4301
4298
  __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
@@ -4479,7 +4476,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4479
4476
  *
4480
4477
  * @cname('getbuffer')
4481
4478
  */
4482
- __pyx_t_7 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
4479
+ __pyx_t_9 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
4483
4480
 
4484
4481
  /* "View.MemoryView":179
4485
4482
  * self.dtype_is_object = format == b'O'
@@ -7634,7 +7631,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7634
7631
  *
7635
7632
  * if have_slices: # <<<<<<<<<<<<<<
7636
7633
  * obj = self.is_slice(value)
7637
- * if obj:
7634
+ * if obj is not None:
7638
7635
  */
7639
7636
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error)
7640
7637
  if (__pyx_t_4) {
@@ -7643,7 +7640,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7643
7640
  *
7644
7641
  * if have_slices:
7645
7642
  * obj = self.is_slice(value) # <<<<<<<<<<<<<<
7646
- * if obj:
7643
+ * if obj is not None:
7647
7644
  * self.setitem_slice_assignment(self[index], obj)
7648
7645
  */
7649
7646
  __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)
@@ -7654,16 +7651,16 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7654
7651
  /* "View.MemoryView":428
7655
7652
  * if have_slices:
7656
7653
  * obj = self.is_slice(value)
7657
- * if obj: # <<<<<<<<<<<<<<
7654
+ * if obj is not None: # <<<<<<<<<<<<<<
7658
7655
  * self.setitem_slice_assignment(self[index], obj)
7659
7656
  * else:
7660
7657
  */
7661
- __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 428, __pyx_L1_error)
7658
+ __pyx_t_4 = (__pyx_v_obj != Py_None);
7662
7659
  if (__pyx_t_4) {
7663
7660
 
7664
7661
  /* "View.MemoryView":429
7665
7662
  * obj = self.is_slice(value)
7666
- * if obj:
7663
+ * if obj is not None:
7667
7664
  * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
7668
7665
  * else:
7669
7666
  * self.setitem_slice_assign_scalar(self[index], value)
@@ -7678,7 +7675,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7678
7675
  /* "View.MemoryView":428
7679
7676
  * if have_slices:
7680
7677
  * obj = self.is_slice(value)
7681
- * if obj: # <<<<<<<<<<<<<<
7678
+ * if obj is not None: # <<<<<<<<<<<<<<
7682
7679
  * self.setitem_slice_assignment(self[index], obj)
7683
7680
  * else:
7684
7681
  */
@@ -7708,7 +7705,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7708
7705
  *
7709
7706
  * if have_slices: # <<<<<<<<<<<<<<
7710
7707
  * obj = self.is_slice(value)
7711
- * if obj:
7708
+ * if obj is not None:
7712
7709
  */
7713
7710
  goto __pyx_L4;
7714
7711
  }
@@ -8416,9 +8413,10 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
8416
8413
  PyObject *__pyx_t_5 = NULL;
8417
8414
  PyObject *__pyx_t_6 = NULL;
8418
8415
  PyObject *__pyx_t_7 = NULL;
8419
- int __pyx_t_8;
8416
+ unsigned int __pyx_t_8;
8420
8417
  Py_ssize_t __pyx_t_9;
8421
8418
  int __pyx_t_10;
8419
+ int __pyx_t_11;
8422
8420
  int __pyx_lineno = 0;
8423
8421
  const char *__pyx_filename = NULL;
8424
8422
  int __pyx_clineno = 0;
@@ -8573,11 +8571,11 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
8573
8571
  __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6);
8574
8572
  __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)
8575
8573
  __Pyx_GOTREF(__pyx_t_7);
8576
- __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
8574
+ __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
8577
8575
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
8578
8576
  __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6);
8579
8577
  __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
8580
- if (__pyx_t_8) {
8578
+ if (__pyx_t_11) {
8581
8579
  __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
8582
8580
  if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error)
8583
8581
  __Pyx_XGOTREF(__pyx_t_6);
@@ -8662,7 +8660,7 @@ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryvie
8662
8660
  PyObject *__pyx_t_3 = NULL;
8663
8661
  PyObject *__pyx_t_4 = NULL;
8664
8662
  PyObject *__pyx_t_5 = NULL;
8665
- int __pyx_t_6;
8663
+ unsigned int __pyx_t_6;
8666
8664
  Py_ssize_t __pyx_t_7;
8667
8665
  PyObject *__pyx_t_8 = NULL;
8668
8666
  char *__pyx_t_9;
@@ -17136,7 +17134,7 @@ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSE
17136
17134
  int __pyx_t_2;
17137
17135
  PyObject *__pyx_t_3 = NULL;
17138
17136
  PyObject *__pyx_t_4 = NULL;
17139
- int __pyx_t_5;
17137
+ unsigned int __pyx_t_5;
17140
17138
  int __pyx_lineno = 0;
17141
17139
  const char *__pyx_filename = NULL;
17142
17140
  int __pyx_clineno = 0;
@@ -17318,7 +17316,7 @@ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__
17318
17316
  PyObject *__pyx_t_5 = NULL;
17319
17317
  PyObject *__pyx_t_6 = NULL;
17320
17318
  PyObject *__pyx_t_7 = NULL;
17321
- int __pyx_t_8;
17319
+ unsigned int __pyx_t_8;
17322
17320
  int __pyx_lineno = 0;
17323
17321
  const char *__pyx_filename = NULL;
17324
17322
  int __pyx_clineno = 0;
@@ -18275,6 +18273,9 @@ static PyTypeObject __pyx_type___pyx_array = {
18275
18273
  #if PY_VERSION_HEX >= 0x030C0000
18276
18274
  0, /*tp_watched*/
18277
18275
  #endif
18276
+ #if PY_VERSION_HEX >= 0x030d00A4
18277
+ 0, /*tp_versions_used*/
18278
+ #endif
18278
18279
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
18279
18280
  0, /*tp_pypy_flags*/
18280
18281
  #endif
@@ -18445,6 +18446,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
18445
18446
  #if PY_VERSION_HEX >= 0x030C0000
18446
18447
  0, /*tp_watched*/
18447
18448
  #endif
18449
+ #if PY_VERSION_HEX >= 0x030d00A4
18450
+ 0, /*tp_versions_used*/
18451
+ #endif
18448
18452
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
18449
18453
  0, /*tp_pypy_flags*/
18450
18454
  #endif
@@ -18788,6 +18792,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
18788
18792
  #if PY_VERSION_HEX >= 0x030C0000
18789
18793
  0, /*tp_watched*/
18790
18794
  #endif
18795
+ #if PY_VERSION_HEX >= 0x030d00A4
18796
+ 0, /*tp_versions_used*/
18797
+ #endif
18791
18798
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
18792
18799
  0, /*tp_pypy_flags*/
18793
18800
  #endif
@@ -18960,6 +18967,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
18960
18967
  #if PY_VERSION_HEX >= 0x030C0000
18961
18968
  0, /*tp_watched*/
18962
18969
  #endif
18970
+ #if PY_VERSION_HEX >= 0x030d00A4
18971
+ 0, /*tp_versions_used*/
18972
+ #endif
18963
18973
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
18964
18974
  0, /*tp_pypy_flags*/
18965
18975
  #endif
@@ -22842,7 +22852,6 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
22842
22852
  }
22843
22853
 
22844
22854
  /* HasAttr */
22845
- #if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
22846
22855
  static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
22847
22856
  PyObject *r;
22848
22857
  if (unlikely(!__Pyx_PyBaseString_Check(n))) {
@@ -22859,7 +22868,6 @@ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
22859
22868
  return 1;
22860
22869
  }
22861
22870
  }
22862
- #endif
22863
22871
 
22864
22872
  /* PyObject_GenericGetAttrNoDict */
22865
22873
  #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
@@ -24599,6 +24607,9 @@ static PyTypeObject __pyx_CyFunctionType_type = {
24599
24607
  #if PY_VERSION_HEX >= 0x030C0000
24600
24608
  0,
24601
24609
  #endif
24610
+ #if PY_VERSION_HEX >= 0x030d00A4
24611
+ 0,
24612
+ #endif
24602
24613
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
24603
24614
  0,
24604
24615
  #endif
@@ -24784,7 +24795,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
24784
24795
  #include "compile.h"
24785
24796
  #include "frameobject.h"
24786
24797
  #include "traceback.h"
24787
- #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
24798
+ #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
24788
24799
  #ifndef Py_BUILD_CORE
24789
24800
  #define Py_BUILD_CORE 1
24790
24801
  #endif
@@ -26093,245 +26104,239 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice,
26093
26104
  }
26094
26105
  return (int) val;
26095
26106
  }
26096
- } else
26107
+ }
26097
26108
  #endif
26098
- if (likely(PyLong_Check(x))) {
26099
- if (is_unsigned) {
26109
+ if (unlikely(!PyLong_Check(x))) {
26110
+ int val;
26111
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26112
+ if (!tmp) return (int) -1;
26113
+ val = __Pyx_PyInt_As_int(tmp);
26114
+ Py_DECREF(tmp);
26115
+ return val;
26116
+ }
26117
+ if (is_unsigned) {
26100
26118
  #if CYTHON_USE_PYLONG_INTERNALS
26101
- if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26102
- goto raise_neg_overflow;
26103
- } else if (__Pyx_PyLong_IsCompact(x)) {
26104
- __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26105
- } else {
26106
- const digit* digits = __Pyx_PyLong_Digits(x);
26107
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26108
- switch (__Pyx_PyLong_DigitCount(x)) {
26109
- case 2:
26110
- if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
26111
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26112
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26113
- } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
26114
- return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26115
- }
26119
+ if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26120
+ goto raise_neg_overflow;
26121
+ } else if (__Pyx_PyLong_IsCompact(x)) {
26122
+ __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26123
+ } else {
26124
+ const digit* digits = __Pyx_PyLong_Digits(x);
26125
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26126
+ switch (__Pyx_PyLong_DigitCount(x)) {
26127
+ case 2:
26128
+ if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
26129
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26130
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26131
+ } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
26132
+ return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26116
26133
  }
26117
- break;
26118
- case 3:
26119
- if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
26120
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26121
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26122
- } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
26123
- return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26124
- }
26134
+ }
26135
+ break;
26136
+ case 3:
26137
+ if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
26138
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26139
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26140
+ } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
26141
+ return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26125
26142
  }
26126
- break;
26127
- case 4:
26128
- if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
26129
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26130
- __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])))
26131
- } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
26132
- return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26133
- }
26143
+ }
26144
+ break;
26145
+ case 4:
26146
+ if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
26147
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26148
+ __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])))
26149
+ } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
26150
+ return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26134
26151
  }
26135
- break;
26136
- }
26152
+ }
26153
+ break;
26137
26154
  }
26155
+ }
26138
26156
  #endif
26139
26157
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
26140
- if (unlikely(Py_SIZE(x) < 0)) {
26141
- goto raise_neg_overflow;
26142
- }
26158
+ if (unlikely(Py_SIZE(x) < 0)) {
26159
+ goto raise_neg_overflow;
26160
+ }
26143
26161
  #else
26144
- {
26145
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26146
- if (unlikely(result < 0))
26147
- return (int) -1;
26148
- if (unlikely(result == 1))
26149
- goto raise_neg_overflow;
26150
- }
26162
+ {
26163
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26164
+ if (unlikely(result < 0))
26165
+ return (int) -1;
26166
+ if (unlikely(result == 1))
26167
+ goto raise_neg_overflow;
26168
+ }
26151
26169
  #endif
26152
- if ((sizeof(int) <= sizeof(unsigned long))) {
26153
- __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
26170
+ if ((sizeof(int) <= sizeof(unsigned long))) {
26171
+ __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
26154
26172
  #ifdef HAVE_LONG_LONG
26155
- } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
26156
- __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26173
+ } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
26174
+ __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26157
26175
  #endif
26158
- }
26159
- } else {
26176
+ }
26177
+ } else {
26160
26178
  #if CYTHON_USE_PYLONG_INTERNALS
26161
- if (__Pyx_PyLong_IsCompact(x)) {
26162
- __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26163
- } else {
26164
- const digit* digits = __Pyx_PyLong_Digits(x);
26165
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26166
- switch (__Pyx_PyLong_SignedDigitCount(x)) {
26167
- case -2:
26168
- if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
26169
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26170
- __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26171
- } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26172
- return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26173
- }
26179
+ if (__Pyx_PyLong_IsCompact(x)) {
26180
+ __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26181
+ } else {
26182
+ const digit* digits = __Pyx_PyLong_Digits(x);
26183
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26184
+ switch (__Pyx_PyLong_SignedDigitCount(x)) {
26185
+ case -2:
26186
+ if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
26187
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26188
+ __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26189
+ } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26190
+ return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26174
26191
  }
26175
- break;
26176
- case 2:
26177
- if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
26178
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26179
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26180
- } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26181
- return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26182
- }
26192
+ }
26193
+ break;
26194
+ case 2:
26195
+ if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
26196
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26197
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26198
+ } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26199
+ return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26183
26200
  }
26184
- break;
26185
- case -3:
26186
- if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26187
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26188
- __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26189
- } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26190
- return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26191
- }
26201
+ }
26202
+ break;
26203
+ case -3:
26204
+ if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26205
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26206
+ __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26207
+ } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26208
+ return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26192
26209
  }
26193
- break;
26194
- case 3:
26195
- if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
26196
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26197
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26198
- } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26199
- return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26200
- }
26210
+ }
26211
+ break;
26212
+ case 3:
26213
+ if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
26214
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26215
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26216
+ } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26217
+ return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26201
26218
  }
26202
- break;
26203
- case -4:
26204
- if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26205
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26206
- __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])))
26207
- } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
26208
- return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26209
- }
26219
+ }
26220
+ break;
26221
+ case -4:
26222
+ if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26223
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26224
+ __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])))
26225
+ } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
26226
+ return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26210
26227
  }
26211
- break;
26212
- case 4:
26213
- if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
26214
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26215
- __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])))
26216
- } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
26217
- return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26218
- }
26228
+ }
26229
+ break;
26230
+ case 4:
26231
+ if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
26232
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26233
+ __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])))
26234
+ } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
26235
+ return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26219
26236
  }
26220
- break;
26221
- }
26237
+ }
26238
+ break;
26222
26239
  }
26240
+ }
26223
26241
  #endif
26224
- if ((sizeof(int) <= sizeof(long))) {
26225
- __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
26242
+ if ((sizeof(int) <= sizeof(long))) {
26243
+ __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
26226
26244
  #ifdef HAVE_LONG_LONG
26227
- } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
26228
- __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
26245
+ } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
26246
+ __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
26229
26247
  #endif
26230
- }
26231
26248
  }
26232
- {
26233
- int val;
26234
- PyObject *v = __Pyx_PyNumber_IntOrLong(x);
26235
- #if PY_MAJOR_VERSION < 3
26236
- if (likely(v) && !PyLong_Check(v)) {
26237
- PyObject *tmp = v;
26238
- v = PyNumber_Long(tmp);
26239
- Py_DECREF(tmp);
26240
- }
26241
- #endif
26242
- if (likely(v)) {
26243
- int ret = -1;
26244
- #if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26245
- int one = 1; int is_little = (int)*(unsigned char *)&one;
26246
- unsigned char *bytes = (unsigned char *)&val;
26247
- ret = _PyLong_AsByteArray((PyLongObject *)v,
26248
- bytes, sizeof(val),
26249
- is_little, !is_unsigned);
26250
- #else
26251
- PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26252
- int bits, remaining_bits, is_negative = 0;
26253
- long idigit;
26254
- int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26255
- if (unlikely(!PyLong_CheckExact(v))) {
26256
- PyObject *tmp = v;
26257
- v = PyNumber_Long(v);
26258
- assert(PyLong_CheckExact(v));
26259
- Py_DECREF(tmp);
26260
- if (unlikely(!v)) return (int) -1;
26261
- }
26262
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26263
- if (Py_SIZE(x) == 0)
26264
- return (int) 0;
26265
- is_negative = Py_SIZE(x) < 0;
26249
+ }
26250
+ {
26251
+ int val;
26252
+ int ret = -1;
26253
+ #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
26254
+ Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
26255
+ x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
26256
+ if (unlikely(bytes_copied == -1)) {
26257
+ } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
26258
+ goto raise_overflow;
26259
+ } else {
26260
+ ret = 0;
26261
+ }
26262
+ #elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26263
+ int one = 1; int is_little = (int)*(unsigned char *)&one;
26264
+ unsigned char *bytes = (unsigned char *)&val;
26265
+ ret = _PyLong_AsByteArray((PyLongObject *)x,
26266
+ bytes, sizeof(val),
26267
+ is_little, !is_unsigned);
26266
26268
  #else
26267
- {
26268
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26269
- if (unlikely(result < 0))
26270
- return (int) -1;
26271
- is_negative = result == 1;
26272
- }
26273
- #endif
26274
- if (is_unsigned && unlikely(is_negative)) {
26275
- goto raise_neg_overflow;
26276
- } else if (is_negative) {
26277
- stepval = PyNumber_Invert(v);
26278
- if (unlikely(!stepval))
26279
- return (int) -1;
26280
- } else {
26281
- stepval = __Pyx_NewRef(v);
26282
- }
26283
- val = (int) 0;
26284
- mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26285
- shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26286
- for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
26287
- PyObject *tmp, *digit;
26288
- digit = PyNumber_And(stepval, mask);
26289
- if (unlikely(!digit)) goto done;
26290
- idigit = PyLong_AsLong(digit);
26291
- Py_DECREF(digit);
26292
- if (unlikely(idigit < 0)) goto done;
26293
- tmp = PyNumber_Rshift(stepval, shift);
26294
- if (unlikely(!tmp)) goto done;
26295
- Py_DECREF(stepval); stepval = tmp;
26296
- val |= ((int) idigit) << bits;
26297
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26298
- if (Py_SIZE(stepval) == 0)
26299
- goto unpacking_done;
26300
- #endif
26301
- }
26302
- idigit = PyLong_AsLong(stepval);
26303
- if (unlikely(idigit < 0)) goto done;
26304
- remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
26305
- if (unlikely(idigit >= (1L << remaining_bits)))
26306
- goto raise_overflow;
26307
- val |= ((int) idigit) << bits;
26308
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26309
- unpacking_done:
26310
- #endif
26311
- if (!is_unsigned) {
26312
- if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
26313
- goto raise_overflow;
26314
- if (is_negative)
26315
- val = ~val;
26316
- }
26317
- ret = 0;
26318
- done:
26319
- Py_XDECREF(shift);
26320
- Py_XDECREF(mask);
26321
- Py_XDECREF(stepval);
26322
- #endif
26269
+ PyObject *v;
26270
+ PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26271
+ int bits, remaining_bits, is_negative = 0;
26272
+ int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26273
+ if (likely(PyLong_CheckExact(x))) {
26274
+ v = __Pyx_NewRef(x);
26275
+ } else {
26276
+ v = PyNumber_Long(x);
26277
+ if (unlikely(!v)) return (int) -1;
26278
+ assert(PyLong_CheckExact(v));
26279
+ }
26280
+ {
26281
+ int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
26282
+ if (unlikely(result < 0)) {
26323
26283
  Py_DECREF(v);
26324
- if (likely(!ret))
26325
- return val;
26284
+ return (int) -1;
26326
26285
  }
26327
- return (int) -1;
26286
+ is_negative = result == 1;
26328
26287
  }
26329
- } else {
26330
- int val;
26331
- PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26332
- if (!tmp) return (int) -1;
26333
- val = __Pyx_PyInt_As_int(tmp);
26334
- Py_DECREF(tmp);
26288
+ if (is_unsigned && unlikely(is_negative)) {
26289
+ Py_DECREF(v);
26290
+ goto raise_neg_overflow;
26291
+ } else if (is_negative) {
26292
+ stepval = PyNumber_Invert(v);
26293
+ Py_DECREF(v);
26294
+ if (unlikely(!stepval))
26295
+ return (int) -1;
26296
+ } else {
26297
+ stepval = v;
26298
+ }
26299
+ v = NULL;
26300
+ val = (int) 0;
26301
+ mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26302
+ shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26303
+ for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
26304
+ PyObject *tmp, *digit;
26305
+ long idigit;
26306
+ digit = PyNumber_And(stepval, mask);
26307
+ if (unlikely(!digit)) goto done;
26308
+ idigit = PyLong_AsLong(digit);
26309
+ Py_DECREF(digit);
26310
+ if (unlikely(idigit < 0)) goto done;
26311
+ val |= ((int) idigit) << bits;
26312
+ tmp = PyNumber_Rshift(stepval, shift);
26313
+ if (unlikely(!tmp)) goto done;
26314
+ Py_DECREF(stepval); stepval = tmp;
26315
+ }
26316
+ Py_DECREF(shift); shift = NULL;
26317
+ Py_DECREF(mask); mask = NULL;
26318
+ {
26319
+ long idigit = PyLong_AsLong(stepval);
26320
+ if (unlikely(idigit < 0)) goto done;
26321
+ remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
26322
+ if (unlikely(idigit >= (1L << remaining_bits)))
26323
+ goto raise_overflow;
26324
+ val |= ((int) idigit) << bits;
26325
+ }
26326
+ if (!is_unsigned) {
26327
+ if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
26328
+ goto raise_overflow;
26329
+ if (is_negative)
26330
+ val = ~val;
26331
+ }
26332
+ ret = 0;
26333
+ done:
26334
+ Py_XDECREF(shift);
26335
+ Py_XDECREF(mask);
26336
+ Py_XDECREF(stepval);
26337
+ #endif
26338
+ if (unlikely(ret))
26339
+ return (int) -1;
26335
26340
  return val;
26336
26341
  }
26337
26342
  raise_overflow:
@@ -26375,12 +26380,19 @@ raise_neg_overflow:
26375
26380
  }
26376
26381
  }
26377
26382
  {
26378
- int one = 1; int little = (int)*(unsigned char *)&one;
26379
26383
  unsigned char *bytes = (unsigned char *)&value;
26380
- #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
26384
+ #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
26385
+ if (is_unsigned) {
26386
+ return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
26387
+ } else {
26388
+ return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
26389
+ }
26390
+ #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
26391
+ int one = 1; int little = (int)*(unsigned char *)&one;
26381
26392
  return _PyLong_FromByteArray(bytes, sizeof(int),
26382
26393
  little, !is_unsigned);
26383
26394
  #else
26395
+ int one = 1; int little = (int)*(unsigned char *)&one;
26384
26396
  PyObject *from_bytes, *result = NULL;
26385
26397
  PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
26386
26398
  from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
@@ -26430,245 +26442,239 @@ raise_neg_overflow:
26430
26442
  }
26431
26443
  return (long) val;
26432
26444
  }
26433
- } else
26445
+ }
26434
26446
  #endif
26435
- if (likely(PyLong_Check(x))) {
26436
- if (is_unsigned) {
26447
+ if (unlikely(!PyLong_Check(x))) {
26448
+ long val;
26449
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26450
+ if (!tmp) return (long) -1;
26451
+ val = __Pyx_PyInt_As_long(tmp);
26452
+ Py_DECREF(tmp);
26453
+ return val;
26454
+ }
26455
+ if (is_unsigned) {
26437
26456
  #if CYTHON_USE_PYLONG_INTERNALS
26438
- if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26439
- goto raise_neg_overflow;
26440
- } else if (__Pyx_PyLong_IsCompact(x)) {
26441
- __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26442
- } else {
26443
- const digit* digits = __Pyx_PyLong_Digits(x);
26444
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26445
- switch (__Pyx_PyLong_DigitCount(x)) {
26446
- case 2:
26447
- if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
26448
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26449
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26450
- } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
26451
- return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26452
- }
26457
+ if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26458
+ goto raise_neg_overflow;
26459
+ } else if (__Pyx_PyLong_IsCompact(x)) {
26460
+ __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26461
+ } else {
26462
+ const digit* digits = __Pyx_PyLong_Digits(x);
26463
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26464
+ switch (__Pyx_PyLong_DigitCount(x)) {
26465
+ case 2:
26466
+ if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
26467
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26468
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26469
+ } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
26470
+ return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26453
26471
  }
26454
- break;
26455
- case 3:
26456
- if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
26457
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26458
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26459
- } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
26460
- return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26461
- }
26472
+ }
26473
+ break;
26474
+ case 3:
26475
+ if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
26476
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26477
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26478
+ } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
26479
+ return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26462
26480
  }
26463
- break;
26464
- case 4:
26465
- if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
26466
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26467
- __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])))
26468
- } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
26469
- return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26470
- }
26481
+ }
26482
+ break;
26483
+ case 4:
26484
+ if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
26485
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26486
+ __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])))
26487
+ } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
26488
+ return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26471
26489
  }
26472
- break;
26473
- }
26490
+ }
26491
+ break;
26474
26492
  }
26493
+ }
26475
26494
  #endif
26476
26495
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
26477
- if (unlikely(Py_SIZE(x) < 0)) {
26478
- goto raise_neg_overflow;
26479
- }
26496
+ if (unlikely(Py_SIZE(x) < 0)) {
26497
+ goto raise_neg_overflow;
26498
+ }
26480
26499
  #else
26481
- {
26482
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26483
- if (unlikely(result < 0))
26484
- return (long) -1;
26485
- if (unlikely(result == 1))
26486
- goto raise_neg_overflow;
26487
- }
26500
+ {
26501
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26502
+ if (unlikely(result < 0))
26503
+ return (long) -1;
26504
+ if (unlikely(result == 1))
26505
+ goto raise_neg_overflow;
26506
+ }
26488
26507
  #endif
26489
- if ((sizeof(long) <= sizeof(unsigned long))) {
26490
- __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
26508
+ if ((sizeof(long) <= sizeof(unsigned long))) {
26509
+ __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
26491
26510
  #ifdef HAVE_LONG_LONG
26492
- } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
26493
- __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26511
+ } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
26512
+ __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26494
26513
  #endif
26495
- }
26496
- } else {
26514
+ }
26515
+ } else {
26497
26516
  #if CYTHON_USE_PYLONG_INTERNALS
26498
- if (__Pyx_PyLong_IsCompact(x)) {
26499
- __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26500
- } else {
26501
- const digit* digits = __Pyx_PyLong_Digits(x);
26502
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26503
- switch (__Pyx_PyLong_SignedDigitCount(x)) {
26504
- case -2:
26505
- if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
26506
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26507
- __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26508
- } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26509
- return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26510
- }
26517
+ if (__Pyx_PyLong_IsCompact(x)) {
26518
+ __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26519
+ } else {
26520
+ const digit* digits = __Pyx_PyLong_Digits(x);
26521
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26522
+ switch (__Pyx_PyLong_SignedDigitCount(x)) {
26523
+ case -2:
26524
+ if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
26525
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26526
+ __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26527
+ } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26528
+ return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26511
26529
  }
26512
- break;
26513
- case 2:
26514
- if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
26515
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26516
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26517
- } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26518
- return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26519
- }
26530
+ }
26531
+ break;
26532
+ case 2:
26533
+ if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
26534
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26535
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26536
+ } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26537
+ return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26520
26538
  }
26521
- break;
26522
- case -3:
26523
- if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26524
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26525
- __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26526
- } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26527
- return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26528
- }
26539
+ }
26540
+ break;
26541
+ case -3:
26542
+ if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26543
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26544
+ __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26545
+ } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26546
+ return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26529
26547
  }
26530
- break;
26531
- case 3:
26532
- if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
26533
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26534
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26535
- } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26536
- return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26537
- }
26548
+ }
26549
+ break;
26550
+ case 3:
26551
+ if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
26552
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26553
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26554
+ } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26555
+ return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26538
26556
  }
26539
- break;
26540
- case -4:
26541
- if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26542
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26543
- __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])))
26544
- } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
26545
- return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26546
- }
26557
+ }
26558
+ break;
26559
+ case -4:
26560
+ if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26561
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26562
+ __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])))
26563
+ } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
26564
+ return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26547
26565
  }
26548
- break;
26549
- case 4:
26550
- if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
26551
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26552
- __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])))
26553
- } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
26554
- return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26555
- }
26566
+ }
26567
+ break;
26568
+ case 4:
26569
+ if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
26570
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26571
+ __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])))
26572
+ } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
26573
+ return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26556
26574
  }
26557
- break;
26558
- }
26575
+ }
26576
+ break;
26559
26577
  }
26578
+ }
26560
26579
  #endif
26561
- if ((sizeof(long) <= sizeof(long))) {
26562
- __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
26580
+ if ((sizeof(long) <= sizeof(long))) {
26581
+ __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
26563
26582
  #ifdef HAVE_LONG_LONG
26564
- } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
26565
- __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
26583
+ } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
26584
+ __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
26566
26585
  #endif
26567
- }
26568
26586
  }
26569
- {
26570
- long val;
26571
- PyObject *v = __Pyx_PyNumber_IntOrLong(x);
26572
- #if PY_MAJOR_VERSION < 3
26573
- if (likely(v) && !PyLong_Check(v)) {
26574
- PyObject *tmp = v;
26575
- v = PyNumber_Long(tmp);
26576
- Py_DECREF(tmp);
26577
- }
26578
- #endif
26579
- if (likely(v)) {
26580
- int ret = -1;
26581
- #if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26582
- int one = 1; int is_little = (int)*(unsigned char *)&one;
26583
- unsigned char *bytes = (unsigned char *)&val;
26584
- ret = _PyLong_AsByteArray((PyLongObject *)v,
26585
- bytes, sizeof(val),
26586
- is_little, !is_unsigned);
26587
- #else
26588
- PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26589
- int bits, remaining_bits, is_negative = 0;
26590
- long idigit;
26591
- int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26592
- if (unlikely(!PyLong_CheckExact(v))) {
26593
- PyObject *tmp = v;
26594
- v = PyNumber_Long(v);
26595
- assert(PyLong_CheckExact(v));
26596
- Py_DECREF(tmp);
26597
- if (unlikely(!v)) return (long) -1;
26598
- }
26599
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26600
- if (Py_SIZE(x) == 0)
26601
- return (long) 0;
26602
- is_negative = Py_SIZE(x) < 0;
26587
+ }
26588
+ {
26589
+ long val;
26590
+ int ret = -1;
26591
+ #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
26592
+ Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
26593
+ x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
26594
+ if (unlikely(bytes_copied == -1)) {
26595
+ } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
26596
+ goto raise_overflow;
26597
+ } else {
26598
+ ret = 0;
26599
+ }
26600
+ #elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26601
+ int one = 1; int is_little = (int)*(unsigned char *)&one;
26602
+ unsigned char *bytes = (unsigned char *)&val;
26603
+ ret = _PyLong_AsByteArray((PyLongObject *)x,
26604
+ bytes, sizeof(val),
26605
+ is_little, !is_unsigned);
26603
26606
  #else
26604
- {
26605
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26606
- if (unlikely(result < 0))
26607
- return (long) -1;
26608
- is_negative = result == 1;
26609
- }
26610
- #endif
26611
- if (is_unsigned && unlikely(is_negative)) {
26612
- goto raise_neg_overflow;
26613
- } else if (is_negative) {
26614
- stepval = PyNumber_Invert(v);
26615
- if (unlikely(!stepval))
26616
- return (long) -1;
26617
- } else {
26618
- stepval = __Pyx_NewRef(v);
26619
- }
26620
- val = (long) 0;
26621
- mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26622
- shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26623
- for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
26624
- PyObject *tmp, *digit;
26625
- digit = PyNumber_And(stepval, mask);
26626
- if (unlikely(!digit)) goto done;
26627
- idigit = PyLong_AsLong(digit);
26628
- Py_DECREF(digit);
26629
- if (unlikely(idigit < 0)) goto done;
26630
- tmp = PyNumber_Rshift(stepval, shift);
26631
- if (unlikely(!tmp)) goto done;
26632
- Py_DECREF(stepval); stepval = tmp;
26633
- val |= ((long) idigit) << bits;
26634
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26635
- if (Py_SIZE(stepval) == 0)
26636
- goto unpacking_done;
26637
- #endif
26638
- }
26639
- idigit = PyLong_AsLong(stepval);
26640
- if (unlikely(idigit < 0)) goto done;
26641
- remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
26642
- if (unlikely(idigit >= (1L << remaining_bits)))
26643
- goto raise_overflow;
26644
- val |= ((long) idigit) << bits;
26645
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26646
- unpacking_done:
26647
- #endif
26648
- if (!is_unsigned) {
26649
- if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
26650
- goto raise_overflow;
26651
- if (is_negative)
26652
- val = ~val;
26653
- }
26654
- ret = 0;
26655
- done:
26656
- Py_XDECREF(shift);
26657
- Py_XDECREF(mask);
26658
- Py_XDECREF(stepval);
26659
- #endif
26607
+ PyObject *v;
26608
+ PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26609
+ int bits, remaining_bits, is_negative = 0;
26610
+ int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26611
+ if (likely(PyLong_CheckExact(x))) {
26612
+ v = __Pyx_NewRef(x);
26613
+ } else {
26614
+ v = PyNumber_Long(x);
26615
+ if (unlikely(!v)) return (long) -1;
26616
+ assert(PyLong_CheckExact(v));
26617
+ }
26618
+ {
26619
+ int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
26620
+ if (unlikely(result < 0)) {
26660
26621
  Py_DECREF(v);
26661
- if (likely(!ret))
26662
- return val;
26622
+ return (long) -1;
26663
26623
  }
26664
- return (long) -1;
26624
+ is_negative = result == 1;
26665
26625
  }
26666
- } else {
26667
- long val;
26668
- PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26669
- if (!tmp) return (long) -1;
26670
- val = __Pyx_PyInt_As_long(tmp);
26671
- Py_DECREF(tmp);
26626
+ if (is_unsigned && unlikely(is_negative)) {
26627
+ Py_DECREF(v);
26628
+ goto raise_neg_overflow;
26629
+ } else if (is_negative) {
26630
+ stepval = PyNumber_Invert(v);
26631
+ Py_DECREF(v);
26632
+ if (unlikely(!stepval))
26633
+ return (long) -1;
26634
+ } else {
26635
+ stepval = v;
26636
+ }
26637
+ v = NULL;
26638
+ val = (long) 0;
26639
+ mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26640
+ shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26641
+ for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
26642
+ PyObject *tmp, *digit;
26643
+ long idigit;
26644
+ digit = PyNumber_And(stepval, mask);
26645
+ if (unlikely(!digit)) goto done;
26646
+ idigit = PyLong_AsLong(digit);
26647
+ Py_DECREF(digit);
26648
+ if (unlikely(idigit < 0)) goto done;
26649
+ val |= ((long) idigit) << bits;
26650
+ tmp = PyNumber_Rshift(stepval, shift);
26651
+ if (unlikely(!tmp)) goto done;
26652
+ Py_DECREF(stepval); stepval = tmp;
26653
+ }
26654
+ Py_DECREF(shift); shift = NULL;
26655
+ Py_DECREF(mask); mask = NULL;
26656
+ {
26657
+ long idigit = PyLong_AsLong(stepval);
26658
+ if (unlikely(idigit < 0)) goto done;
26659
+ remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
26660
+ if (unlikely(idigit >= (1L << remaining_bits)))
26661
+ goto raise_overflow;
26662
+ val |= ((long) idigit) << bits;
26663
+ }
26664
+ if (!is_unsigned) {
26665
+ if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
26666
+ goto raise_overflow;
26667
+ if (is_negative)
26668
+ val = ~val;
26669
+ }
26670
+ ret = 0;
26671
+ done:
26672
+ Py_XDECREF(shift);
26673
+ Py_XDECREF(mask);
26674
+ Py_XDECREF(stepval);
26675
+ #endif
26676
+ if (unlikely(ret))
26677
+ return (long) -1;
26672
26678
  return val;
26673
26679
  }
26674
26680
  raise_overflow:
@@ -26712,12 +26718,19 @@ raise_neg_overflow:
26712
26718
  }
26713
26719
  }
26714
26720
  {
26715
- int one = 1; int little = (int)*(unsigned char *)&one;
26716
26721
  unsigned char *bytes = (unsigned char *)&value;
26717
- #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
26722
+ #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
26723
+ if (is_unsigned) {
26724
+ return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
26725
+ } else {
26726
+ return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
26727
+ }
26728
+ #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
26729
+ int one = 1; int little = (int)*(unsigned char *)&one;
26718
26730
  return _PyLong_FromByteArray(bytes, sizeof(long),
26719
26731
  little, !is_unsigned);
26720
26732
  #else
26733
+ int one = 1; int little = (int)*(unsigned char *)&one;
26721
26734
  PyObject *from_bytes, *result = NULL;
26722
26735
  PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
26723
26736
  from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
@@ -26767,245 +26780,239 @@ raise_neg_overflow:
26767
26780
  }
26768
26781
  return (char) val;
26769
26782
  }
26770
- } else
26783
+ }
26771
26784
  #endif
26772
- if (likely(PyLong_Check(x))) {
26773
- if (is_unsigned) {
26785
+ if (unlikely(!PyLong_Check(x))) {
26786
+ char val;
26787
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26788
+ if (!tmp) return (char) -1;
26789
+ val = __Pyx_PyInt_As_char(tmp);
26790
+ Py_DECREF(tmp);
26791
+ return val;
26792
+ }
26793
+ if (is_unsigned) {
26774
26794
  #if CYTHON_USE_PYLONG_INTERNALS
26775
- if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26776
- goto raise_neg_overflow;
26777
- } else if (__Pyx_PyLong_IsCompact(x)) {
26778
- __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26779
- } else {
26780
- const digit* digits = __Pyx_PyLong_Digits(x);
26781
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26782
- switch (__Pyx_PyLong_DigitCount(x)) {
26783
- case 2:
26784
- if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
26785
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26786
- __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26787
- } else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
26788
- return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26789
- }
26795
+ if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26796
+ goto raise_neg_overflow;
26797
+ } else if (__Pyx_PyLong_IsCompact(x)) {
26798
+ __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26799
+ } else {
26800
+ const digit* digits = __Pyx_PyLong_Digits(x);
26801
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26802
+ switch (__Pyx_PyLong_DigitCount(x)) {
26803
+ case 2:
26804
+ if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
26805
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26806
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26807
+ } else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
26808
+ return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26790
26809
  }
26791
- break;
26792
- case 3:
26793
- if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
26794
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26795
- __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26796
- } else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
26797
- return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26798
- }
26810
+ }
26811
+ break;
26812
+ case 3:
26813
+ if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
26814
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26815
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26816
+ } else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
26817
+ return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26799
26818
  }
26800
- break;
26801
- case 4:
26802
- if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
26803
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26804
- __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])))
26805
- } else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
26806
- return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26807
- }
26819
+ }
26820
+ break;
26821
+ case 4:
26822
+ if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
26823
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26824
+ __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])))
26825
+ } else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
26826
+ return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26808
26827
  }
26809
- break;
26810
- }
26828
+ }
26829
+ break;
26811
26830
  }
26831
+ }
26812
26832
  #endif
26813
26833
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
26814
- if (unlikely(Py_SIZE(x) < 0)) {
26815
- goto raise_neg_overflow;
26816
- }
26834
+ if (unlikely(Py_SIZE(x) < 0)) {
26835
+ goto raise_neg_overflow;
26836
+ }
26817
26837
  #else
26818
- {
26819
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26820
- if (unlikely(result < 0))
26821
- return (char) -1;
26822
- if (unlikely(result == 1))
26823
- goto raise_neg_overflow;
26824
- }
26838
+ {
26839
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26840
+ if (unlikely(result < 0))
26841
+ return (char) -1;
26842
+ if (unlikely(result == 1))
26843
+ goto raise_neg_overflow;
26844
+ }
26825
26845
  #endif
26826
- if ((sizeof(char) <= sizeof(unsigned long))) {
26827
- __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
26846
+ if ((sizeof(char) <= sizeof(unsigned long))) {
26847
+ __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
26828
26848
  #ifdef HAVE_LONG_LONG
26829
- } else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
26830
- __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26849
+ } else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
26850
+ __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26831
26851
  #endif
26832
- }
26833
- } else {
26852
+ }
26853
+ } else {
26834
26854
  #if CYTHON_USE_PYLONG_INTERNALS
26835
- if (__Pyx_PyLong_IsCompact(x)) {
26836
- __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26837
- } else {
26838
- const digit* digits = __Pyx_PyLong_Digits(x);
26839
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26840
- switch (__Pyx_PyLong_SignedDigitCount(x)) {
26841
- case -2:
26842
- if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
26843
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26844
- __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26845
- } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
26846
- return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26847
- }
26855
+ if (__Pyx_PyLong_IsCompact(x)) {
26856
+ __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26857
+ } else {
26858
+ const digit* digits = __Pyx_PyLong_Digits(x);
26859
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26860
+ switch (__Pyx_PyLong_SignedDigitCount(x)) {
26861
+ case -2:
26862
+ if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
26863
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26864
+ __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26865
+ } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
26866
+ return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26848
26867
  }
26849
- break;
26850
- case 2:
26851
- if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
26852
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26853
- __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26854
- } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
26855
- return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26856
- }
26868
+ }
26869
+ break;
26870
+ case 2:
26871
+ if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
26872
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26873
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26874
+ } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
26875
+ return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26857
26876
  }
26858
- break;
26859
- case -3:
26860
- if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
26861
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26862
- __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26863
- } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
26864
- return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26865
- }
26877
+ }
26878
+ break;
26879
+ case -3:
26880
+ if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
26881
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26882
+ __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26883
+ } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
26884
+ return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26866
26885
  }
26867
- break;
26868
- case 3:
26869
- if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
26870
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26871
- __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26872
- } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
26873
- return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26874
- }
26886
+ }
26887
+ break;
26888
+ case 3:
26889
+ if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
26890
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26891
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26892
+ } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
26893
+ return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26875
26894
  }
26876
- break;
26877
- case -4:
26878
- if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
26879
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26880
- __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])))
26881
- } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
26882
- return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26883
- }
26895
+ }
26896
+ break;
26897
+ case -4:
26898
+ if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
26899
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26900
+ __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])))
26901
+ } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
26902
+ return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26884
26903
  }
26885
- break;
26886
- case 4:
26887
- if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
26888
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26889
- __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])))
26890
- } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
26891
- return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26892
- }
26904
+ }
26905
+ break;
26906
+ case 4:
26907
+ if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
26908
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26909
+ __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])))
26910
+ } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
26911
+ return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
26893
26912
  }
26894
- break;
26895
- }
26913
+ }
26914
+ break;
26896
26915
  }
26916
+ }
26897
26917
  #endif
26898
- if ((sizeof(char) <= sizeof(long))) {
26899
- __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
26918
+ if ((sizeof(char) <= sizeof(long))) {
26919
+ __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
26900
26920
  #ifdef HAVE_LONG_LONG
26901
- } else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
26902
- __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
26921
+ } else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
26922
+ __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
26903
26923
  #endif
26904
- }
26905
26924
  }
26906
- {
26907
- char val;
26908
- PyObject *v = __Pyx_PyNumber_IntOrLong(x);
26909
- #if PY_MAJOR_VERSION < 3
26910
- if (likely(v) && !PyLong_Check(v)) {
26911
- PyObject *tmp = v;
26912
- v = PyNumber_Long(tmp);
26913
- Py_DECREF(tmp);
26914
- }
26915
- #endif
26916
- if (likely(v)) {
26917
- int ret = -1;
26918
- #if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26919
- int one = 1; int is_little = (int)*(unsigned char *)&one;
26920
- unsigned char *bytes = (unsigned char *)&val;
26921
- ret = _PyLong_AsByteArray((PyLongObject *)v,
26922
- bytes, sizeof(val),
26923
- is_little, !is_unsigned);
26924
- #else
26925
- PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26926
- int bits, remaining_bits, is_negative = 0;
26927
- long idigit;
26928
- int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26929
- if (unlikely(!PyLong_CheckExact(v))) {
26930
- PyObject *tmp = v;
26931
- v = PyNumber_Long(v);
26932
- assert(PyLong_CheckExact(v));
26933
- Py_DECREF(tmp);
26934
- if (unlikely(!v)) return (char) -1;
26935
- }
26936
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26937
- if (Py_SIZE(x) == 0)
26938
- return (char) 0;
26939
- is_negative = Py_SIZE(x) < 0;
26925
+ }
26926
+ {
26927
+ char val;
26928
+ int ret = -1;
26929
+ #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
26930
+ Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
26931
+ x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
26932
+ if (unlikely(bytes_copied == -1)) {
26933
+ } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
26934
+ goto raise_overflow;
26935
+ } else {
26936
+ ret = 0;
26937
+ }
26938
+ #elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26939
+ int one = 1; int is_little = (int)*(unsigned char *)&one;
26940
+ unsigned char *bytes = (unsigned char *)&val;
26941
+ ret = _PyLong_AsByteArray((PyLongObject *)x,
26942
+ bytes, sizeof(val),
26943
+ is_little, !is_unsigned);
26940
26944
  #else
26941
- {
26942
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26943
- if (unlikely(result < 0))
26944
- return (char) -1;
26945
- is_negative = result == 1;
26946
- }
26947
- #endif
26948
- if (is_unsigned && unlikely(is_negative)) {
26949
- goto raise_neg_overflow;
26950
- } else if (is_negative) {
26951
- stepval = PyNumber_Invert(v);
26952
- if (unlikely(!stepval))
26953
- return (char) -1;
26954
- } else {
26955
- stepval = __Pyx_NewRef(v);
26956
- }
26957
- val = (char) 0;
26958
- mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26959
- shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26960
- for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
26961
- PyObject *tmp, *digit;
26962
- digit = PyNumber_And(stepval, mask);
26963
- if (unlikely(!digit)) goto done;
26964
- idigit = PyLong_AsLong(digit);
26965
- Py_DECREF(digit);
26966
- if (unlikely(idigit < 0)) goto done;
26967
- tmp = PyNumber_Rshift(stepval, shift);
26968
- if (unlikely(!tmp)) goto done;
26969
- Py_DECREF(stepval); stepval = tmp;
26970
- val |= ((char) idigit) << bits;
26971
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26972
- if (Py_SIZE(stepval) == 0)
26973
- goto unpacking_done;
26974
- #endif
26975
- }
26976
- idigit = PyLong_AsLong(stepval);
26977
- if (unlikely(idigit < 0)) goto done;
26978
- remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
26979
- if (unlikely(idigit >= (1L << remaining_bits)))
26980
- goto raise_overflow;
26981
- val |= ((char) idigit) << bits;
26982
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26983
- unpacking_done:
26984
- #endif
26985
- if (!is_unsigned) {
26986
- if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
26987
- goto raise_overflow;
26988
- if (is_negative)
26989
- val = ~val;
26990
- }
26991
- ret = 0;
26992
- done:
26993
- Py_XDECREF(shift);
26994
- Py_XDECREF(mask);
26995
- Py_XDECREF(stepval);
26996
- #endif
26945
+ PyObject *v;
26946
+ PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26947
+ int bits, remaining_bits, is_negative = 0;
26948
+ int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26949
+ if (likely(PyLong_CheckExact(x))) {
26950
+ v = __Pyx_NewRef(x);
26951
+ } else {
26952
+ v = PyNumber_Long(x);
26953
+ if (unlikely(!v)) return (char) -1;
26954
+ assert(PyLong_CheckExact(v));
26955
+ }
26956
+ {
26957
+ int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
26958
+ if (unlikely(result < 0)) {
26997
26959
  Py_DECREF(v);
26998
- if (likely(!ret))
26999
- return val;
26960
+ return (char) -1;
27000
26961
  }
27001
- return (char) -1;
26962
+ is_negative = result == 1;
27002
26963
  }
27003
- } else {
27004
- char val;
27005
- PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
27006
- if (!tmp) return (char) -1;
27007
- val = __Pyx_PyInt_As_char(tmp);
27008
- Py_DECREF(tmp);
26964
+ if (is_unsigned && unlikely(is_negative)) {
26965
+ Py_DECREF(v);
26966
+ goto raise_neg_overflow;
26967
+ } else if (is_negative) {
26968
+ stepval = PyNumber_Invert(v);
26969
+ Py_DECREF(v);
26970
+ if (unlikely(!stepval))
26971
+ return (char) -1;
26972
+ } else {
26973
+ stepval = v;
26974
+ }
26975
+ v = NULL;
26976
+ val = (char) 0;
26977
+ mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26978
+ shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26979
+ for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
26980
+ PyObject *tmp, *digit;
26981
+ long idigit;
26982
+ digit = PyNumber_And(stepval, mask);
26983
+ if (unlikely(!digit)) goto done;
26984
+ idigit = PyLong_AsLong(digit);
26985
+ Py_DECREF(digit);
26986
+ if (unlikely(idigit < 0)) goto done;
26987
+ val |= ((char) idigit) << bits;
26988
+ tmp = PyNumber_Rshift(stepval, shift);
26989
+ if (unlikely(!tmp)) goto done;
26990
+ Py_DECREF(stepval); stepval = tmp;
26991
+ }
26992
+ Py_DECREF(shift); shift = NULL;
26993
+ Py_DECREF(mask); mask = NULL;
26994
+ {
26995
+ long idigit = PyLong_AsLong(stepval);
26996
+ if (unlikely(idigit < 0)) goto done;
26997
+ remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
26998
+ if (unlikely(idigit >= (1L << remaining_bits)))
26999
+ goto raise_overflow;
27000
+ val |= ((char) idigit) << bits;
27001
+ }
27002
+ if (!is_unsigned) {
27003
+ if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
27004
+ goto raise_overflow;
27005
+ if (is_negative)
27006
+ val = ~val;
27007
+ }
27008
+ ret = 0;
27009
+ done:
27010
+ Py_XDECREF(shift);
27011
+ Py_XDECREF(mask);
27012
+ Py_XDECREF(stepval);
27013
+ #endif
27014
+ if (unlikely(ret))
27015
+ return (char) -1;
27009
27016
  return val;
27010
27017
  }
27011
27018
  raise_overflow: