scikit-network 0.33.0__cp311-cp311-win_amd64.whl → 0.33.2__cp311-cp311-win_amd64.whl

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

Potentially problematic release.


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

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