scikit-network 0.33.0__cp310-cp310-win_amd64.whl → 0.33.2__cp310-cp310-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of scikit-network might be problematic. Click here for more details.

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