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.classification.vote",
@@ -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
@@ -2047,7 +2047,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
2047
2047
  #if !CYTHON_VECTORCALL
2048
2048
  #if PY_VERSION_HEX >= 0x03080000
2049
2049
  #include "frameobject.h"
2050
- #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
2050
+ #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
2051
2051
  #ifndef Py_BUILD_CORE
2052
2052
  #define Py_BUILD_CORE 1
2053
2053
  #endif
@@ -2384,11 +2384,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
2384
2384
  static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
2385
2385
 
2386
2386
  /* HasAttr.proto */
2387
- #if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
2388
- #define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
2389
- #else
2390
2387
  static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
2391
- #endif
2392
2388
 
2393
2389
  /* MoveIfSupported.proto */
2394
2390
  #if CYTHON_USE_CPP_STD_MOVE
@@ -4216,10 +4212,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4216
4212
  PyObject *__pyx_t_4 = NULL;
4217
4213
  PyObject *__pyx_t_5 = NULL;
4218
4214
  PyObject *__pyx_t_6 = NULL;
4219
- int __pyx_t_7;
4215
+ unsigned int __pyx_t_7;
4220
4216
  char *__pyx_t_8;
4221
- Py_ssize_t __pyx_t_9;
4222
- Py_UCS4 __pyx_t_10;
4217
+ int __pyx_t_9;
4218
+ Py_ssize_t __pyx_t_10;
4219
+ Py_UCS4 __pyx_t_11;
4223
4220
  int __pyx_lineno = 0;
4224
4221
  const char *__pyx_filename = NULL;
4225
4222
  int __pyx_clineno = 0;
@@ -4445,7 +4442,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4445
4442
  * if dim <= 0:
4446
4443
  * raise ValueError, f"Invalid shape in axis {idx}: {dim}."
4447
4444
  */
4448
- __pyx_t_7 = 0;
4445
+ __pyx_t_9 = 0;
4449
4446
  __pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4);
4450
4447
  __pyx_t_1 = 0;
4451
4448
  for (;;) {
@@ -4462,11 +4459,11 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4462
4459
  __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)
4463
4460
  __Pyx_GOTREF(__pyx_t_5);
4464
4461
  #endif
4465
- __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)
4462
+ __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)
4466
4463
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
4467
- __pyx_v_dim = __pyx_t_9;
4468
- __pyx_v_idx = __pyx_t_7;
4469
- __pyx_t_7 = (__pyx_t_7 + 1);
4464
+ __pyx_v_dim = __pyx_t_10;
4465
+ __pyx_v_idx = __pyx_t_9;
4466
+ __pyx_t_9 = (__pyx_t_9 + 1);
4470
4467
 
4471
4468
  /* "View.MemoryView":160
4472
4469
  *
@@ -4487,33 +4484,33 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4487
4484
  */
4488
4485
  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error)
4489
4486
  __Pyx_GOTREF(__pyx_t_5);
4490
- __pyx_t_9 = 0;
4491
- __pyx_t_10 = 127;
4487
+ __pyx_t_10 = 0;
4488
+ __pyx_t_11 = 127;
4492
4489
  __Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis);
4493
- __pyx_t_9 += 22;
4490
+ __pyx_t_10 += 22;
4494
4491
  __Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis);
4495
4492
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis);
4496
4493
  __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
4497
4494
  __Pyx_GOTREF(__pyx_t_6);
4498
- __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
4495
+ __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
4499
4496
  __Pyx_GIVEREF(__pyx_t_6);
4500
4497
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
4501
4498
  __pyx_t_6 = 0;
4502
4499
  __Pyx_INCREF(__pyx_kp_u_);
4503
- __pyx_t_9 += 2;
4500
+ __pyx_t_10 += 2;
4504
4501
  __Pyx_GIVEREF(__pyx_kp_u_);
4505
4502
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_);
4506
4503
  __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)
4507
4504
  __Pyx_GOTREF(__pyx_t_6);
4508
- __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
4505
+ __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
4509
4506
  __Pyx_GIVEREF(__pyx_t_6);
4510
4507
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6);
4511
4508
  __pyx_t_6 = 0;
4512
4509
  __Pyx_INCREF(__pyx_kp_u__2);
4513
- __pyx_t_9 += 1;
4510
+ __pyx_t_10 += 1;
4514
4511
  __Pyx_GIVEREF(__pyx_kp_u__2);
4515
4512
  PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2);
4516
- __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)
4513
+ __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)
4517
4514
  __Pyx_GOTREF(__pyx_t_6);
4518
4515
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
4519
4516
  __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
@@ -4697,7 +4694,7 @@ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __
4697
4694
  *
4698
4695
  * @cname('getbuffer')
4699
4696
  */
4700
- __pyx_t_7 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
4697
+ __pyx_t_9 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
4701
4698
 
4702
4699
  /* "View.MemoryView":179
4703
4700
  * self.dtype_is_object = format == b'O'
@@ -7852,7 +7849,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7852
7849
  *
7853
7850
  * if have_slices: # <<<<<<<<<<<<<<
7854
7851
  * obj = self.is_slice(value)
7855
- * if obj:
7852
+ * if obj is not None:
7856
7853
  */
7857
7854
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error)
7858
7855
  if (__pyx_t_4) {
@@ -7861,7 +7858,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7861
7858
  *
7862
7859
  * if have_slices:
7863
7860
  * obj = self.is_slice(value) # <<<<<<<<<<<<<<
7864
- * if obj:
7861
+ * if obj is not None:
7865
7862
  * self.setitem_slice_assignment(self[index], obj)
7866
7863
  */
7867
7864
  __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)
@@ -7872,16 +7869,16 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7872
7869
  /* "View.MemoryView":428
7873
7870
  * if have_slices:
7874
7871
  * obj = self.is_slice(value)
7875
- * if obj: # <<<<<<<<<<<<<<
7872
+ * if obj is not None: # <<<<<<<<<<<<<<
7876
7873
  * self.setitem_slice_assignment(self[index], obj)
7877
7874
  * else:
7878
7875
  */
7879
- __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 428, __pyx_L1_error)
7876
+ __pyx_t_4 = (__pyx_v_obj != Py_None);
7880
7877
  if (__pyx_t_4) {
7881
7878
 
7882
7879
  /* "View.MemoryView":429
7883
7880
  * obj = self.is_slice(value)
7884
- * if obj:
7881
+ * if obj is not None:
7885
7882
  * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
7886
7883
  * else:
7887
7884
  * self.setitem_slice_assign_scalar(self[index], value)
@@ -7896,7 +7893,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7896
7893
  /* "View.MemoryView":428
7897
7894
  * if have_slices:
7898
7895
  * obj = self.is_slice(value)
7899
- * if obj: # <<<<<<<<<<<<<<
7896
+ * if obj is not None: # <<<<<<<<<<<<<<
7900
7897
  * self.setitem_slice_assignment(self[index], obj)
7901
7898
  * else:
7902
7899
  */
@@ -7926,7 +7923,7 @@ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setit
7926
7923
  *
7927
7924
  * if have_slices: # <<<<<<<<<<<<<<
7928
7925
  * obj = self.is_slice(value)
7929
- * if obj:
7926
+ * if obj is not None:
7930
7927
  */
7931
7928
  goto __pyx_L4;
7932
7929
  }
@@ -8634,9 +8631,10 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
8634
8631
  PyObject *__pyx_t_5 = NULL;
8635
8632
  PyObject *__pyx_t_6 = NULL;
8636
8633
  PyObject *__pyx_t_7 = NULL;
8637
- int __pyx_t_8;
8634
+ unsigned int __pyx_t_8;
8638
8635
  Py_ssize_t __pyx_t_9;
8639
8636
  int __pyx_t_10;
8637
+ int __pyx_t_11;
8640
8638
  int __pyx_lineno = 0;
8641
8639
  const char *__pyx_filename = NULL;
8642
8640
  int __pyx_clineno = 0;
@@ -8791,11 +8789,11 @@ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview
8791
8789
  __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6);
8792
8790
  __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)
8793
8791
  __Pyx_GOTREF(__pyx_t_7);
8794
- __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
8792
+ __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
8795
8793
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
8796
8794
  __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6);
8797
8795
  __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
8798
- if (__pyx_t_8) {
8796
+ if (__pyx_t_11) {
8799
8797
  __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
8800
8798
  if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error)
8801
8799
  __Pyx_XGOTREF(__pyx_t_6);
@@ -8880,7 +8878,7 @@ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryvie
8880
8878
  PyObject *__pyx_t_3 = NULL;
8881
8879
  PyObject *__pyx_t_4 = NULL;
8882
8880
  PyObject *__pyx_t_5 = NULL;
8883
- int __pyx_t_6;
8881
+ unsigned int __pyx_t_6;
8884
8882
  Py_ssize_t __pyx_t_7;
8885
8883
  PyObject *__pyx_t_8 = NULL;
8886
8884
  char *__pyx_t_9;
@@ -17354,7 +17352,7 @@ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSE
17354
17352
  int __pyx_t_2;
17355
17353
  PyObject *__pyx_t_3 = NULL;
17356
17354
  PyObject *__pyx_t_4 = NULL;
17357
- int __pyx_t_5;
17355
+ unsigned int __pyx_t_5;
17358
17356
  int __pyx_lineno = 0;
17359
17357
  const char *__pyx_filename = NULL;
17360
17358
  int __pyx_clineno = 0;
@@ -17536,7 +17534,7 @@ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__
17536
17534
  PyObject *__pyx_t_5 = NULL;
17537
17535
  PyObject *__pyx_t_6 = NULL;
17538
17536
  PyObject *__pyx_t_7 = NULL;
17539
- int __pyx_t_8;
17537
+ unsigned int __pyx_t_8;
17540
17538
  int __pyx_lineno = 0;
17541
17539
  const char *__pyx_filename = NULL;
17542
17540
  int __pyx_clineno = 0;
@@ -18457,6 +18455,9 @@ static PyTypeObject __pyx_type___pyx_array = {
18457
18455
  #if PY_VERSION_HEX >= 0x030C0000
18458
18456
  0, /*tp_watched*/
18459
18457
  #endif
18458
+ #if PY_VERSION_HEX >= 0x030d00A4
18459
+ 0, /*tp_versions_used*/
18460
+ #endif
18460
18461
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
18461
18462
  0, /*tp_pypy_flags*/
18462
18463
  #endif
@@ -18627,6 +18628,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
18627
18628
  #if PY_VERSION_HEX >= 0x030C0000
18628
18629
  0, /*tp_watched*/
18629
18630
  #endif
18631
+ #if PY_VERSION_HEX >= 0x030d00A4
18632
+ 0, /*tp_versions_used*/
18633
+ #endif
18630
18634
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
18631
18635
  0, /*tp_pypy_flags*/
18632
18636
  #endif
@@ -18970,6 +18974,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
18970
18974
  #if PY_VERSION_HEX >= 0x030C0000
18971
18975
  0, /*tp_watched*/
18972
18976
  #endif
18977
+ #if PY_VERSION_HEX >= 0x030d00A4
18978
+ 0, /*tp_versions_used*/
18979
+ #endif
18973
18980
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
18974
18981
  0, /*tp_pypy_flags*/
18975
18982
  #endif
@@ -19142,6 +19149,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
19142
19149
  #if PY_VERSION_HEX >= 0x030C0000
19143
19150
  0, /*tp_watched*/
19144
19151
  #endif
19152
+ #if PY_VERSION_HEX >= 0x030d00A4
19153
+ 0, /*tp_versions_used*/
19154
+ #endif
19145
19155
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
19146
19156
  0, /*tp_pypy_flags*/
19147
19157
  #endif
@@ -23014,7 +23024,6 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
23014
23024
  }
23015
23025
 
23016
23026
  /* HasAttr */
23017
- #if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
23018
23027
  static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
23019
23028
  PyObject *r;
23020
23029
  if (unlikely(!__Pyx_PyBaseString_Check(n))) {
@@ -23031,7 +23040,6 @@ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
23031
23040
  return 1;
23032
23041
  }
23033
23042
  }
23034
- #endif
23035
23043
 
23036
23044
  /* PyObject_GenericGetAttrNoDict */
23037
23045
  #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
@@ -24771,6 +24779,9 @@ static PyTypeObject __pyx_CyFunctionType_type = {
24771
24779
  #if PY_VERSION_HEX >= 0x030C0000
24772
24780
  0,
24773
24781
  #endif
24782
+ #if PY_VERSION_HEX >= 0x030d00A4
24783
+ 0,
24784
+ #endif
24774
24785
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
24775
24786
  0,
24776
24787
  #endif
@@ -24956,7 +24967,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
24956
24967
  #include "compile.h"
24957
24968
  #include "frameobject.h"
24958
24969
  #include "traceback.h"
24959
- #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
24970
+ #if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
24960
24971
  #ifndef Py_BUILD_CORE
24961
24972
  #define Py_BUILD_CORE 1
24962
24973
  #endif
@@ -26277,245 +26288,239 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice,
26277
26288
  }
26278
26289
  return (int) val;
26279
26290
  }
26280
- } else
26291
+ }
26281
26292
  #endif
26282
- if (likely(PyLong_Check(x))) {
26283
- if (is_unsigned) {
26293
+ if (unlikely(!PyLong_Check(x))) {
26294
+ int val;
26295
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26296
+ if (!tmp) return (int) -1;
26297
+ val = __Pyx_PyInt_As_int(tmp);
26298
+ Py_DECREF(tmp);
26299
+ return val;
26300
+ }
26301
+ if (is_unsigned) {
26284
26302
  #if CYTHON_USE_PYLONG_INTERNALS
26285
- if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26286
- goto raise_neg_overflow;
26287
- } else if (__Pyx_PyLong_IsCompact(x)) {
26288
- __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26289
- } else {
26290
- const digit* digits = __Pyx_PyLong_Digits(x);
26291
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26292
- switch (__Pyx_PyLong_DigitCount(x)) {
26293
- case 2:
26294
- if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
26295
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26296
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26297
- } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
26298
- return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26299
- }
26303
+ if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26304
+ goto raise_neg_overflow;
26305
+ } else if (__Pyx_PyLong_IsCompact(x)) {
26306
+ __PYX_VERIFY_RETURN_INT(int, __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(int) > 1 * PyLong_SHIFT)) {
26313
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26314
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26315
+ } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
26316
+ return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26300
26317
  }
26301
- break;
26302
- case 3:
26303
- if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
26304
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26305
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26306
- } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
26307
- return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26308
- }
26318
+ }
26319
+ break;
26320
+ case 3:
26321
+ if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
26322
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26323
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26324
+ } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
26325
+ return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26309
26326
  }
26310
- break;
26311
- case 4:
26312
- if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
26313
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26314
- __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])))
26315
- } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
26316
- return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26317
- }
26327
+ }
26328
+ break;
26329
+ case 4:
26330
+ if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
26331
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26332
+ __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])))
26333
+ } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
26334
+ return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
26318
26335
  }
26319
- break;
26320
- }
26336
+ }
26337
+ break;
26321
26338
  }
26339
+ }
26322
26340
  #endif
26323
26341
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
26324
- if (unlikely(Py_SIZE(x) < 0)) {
26325
- goto raise_neg_overflow;
26326
- }
26342
+ if (unlikely(Py_SIZE(x) < 0)) {
26343
+ goto raise_neg_overflow;
26344
+ }
26327
26345
  #else
26328
- {
26329
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26330
- if (unlikely(result < 0))
26331
- return (int) -1;
26332
- if (unlikely(result == 1))
26333
- goto raise_neg_overflow;
26334
- }
26346
+ {
26347
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26348
+ if (unlikely(result < 0))
26349
+ return (int) -1;
26350
+ if (unlikely(result == 1))
26351
+ goto raise_neg_overflow;
26352
+ }
26335
26353
  #endif
26336
- if ((sizeof(int) <= sizeof(unsigned long))) {
26337
- __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
26354
+ if ((sizeof(int) <= sizeof(unsigned long))) {
26355
+ __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
26338
26356
  #ifdef HAVE_LONG_LONG
26339
- } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
26340
- __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26357
+ } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
26358
+ __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26341
26359
  #endif
26342
- }
26343
- } else {
26360
+ }
26361
+ } else {
26344
26362
  #if CYTHON_USE_PYLONG_INTERNALS
26345
- if (__Pyx_PyLong_IsCompact(x)) {
26346
- __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26347
- } else {
26348
- const digit* digits = __Pyx_PyLong_Digits(x);
26349
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26350
- switch (__Pyx_PyLong_SignedDigitCount(x)) {
26351
- case -2:
26352
- if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
26353
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26354
- __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26355
- } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26356
- return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26357
- }
26363
+ if (__Pyx_PyLong_IsCompact(x)) {
26364
+ __PYX_VERIFY_RETURN_INT(int, __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(int) - 1 > 1 * PyLong_SHIFT)) {
26371
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26372
+ __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26373
+ } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26374
+ return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26358
26375
  }
26359
- break;
26360
- case 2:
26361
- if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
26362
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26363
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26364
- } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26365
- return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26366
- }
26376
+ }
26377
+ break;
26378
+ case 2:
26379
+ if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
26380
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26381
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26382
+ } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26383
+ return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26367
26384
  }
26368
- break;
26369
- case -3:
26370
- if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26371
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26372
- __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26373
- } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26374
- return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26375
- }
26385
+ }
26386
+ break;
26387
+ case -3:
26388
+ if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
26389
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26390
+ __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26391
+ } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26392
+ return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26376
26393
  }
26377
- break;
26378
- case 3:
26379
- if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
26380
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26381
- __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26382
- } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26383
- return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26384
- }
26394
+ }
26395
+ break;
26396
+ case 3:
26397
+ if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
26398
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26399
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26400
+ } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26401
+ return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26385
26402
  }
26386
- break;
26387
- case -4:
26388
- if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26389
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26390
- __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])))
26391
- } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
26392
- return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26393
- }
26403
+ }
26404
+ break;
26405
+ case -4:
26406
+ if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
26407
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26408
+ __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])))
26409
+ } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
26410
+ return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26394
26411
  }
26395
- break;
26396
- case 4:
26397
- if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
26398
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26399
- __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])))
26400
- } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
26401
- return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26402
- }
26412
+ }
26413
+ break;
26414
+ case 4:
26415
+ if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
26416
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26417
+ __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])))
26418
+ } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
26419
+ return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
26403
26420
  }
26404
- break;
26405
- }
26421
+ }
26422
+ break;
26406
26423
  }
26424
+ }
26407
26425
  #endif
26408
- if ((sizeof(int) <= sizeof(long))) {
26409
- __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
26426
+ if ((sizeof(int) <= sizeof(long))) {
26427
+ __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
26410
26428
  #ifdef HAVE_LONG_LONG
26411
- } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
26412
- __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
26429
+ } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
26430
+ __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
26413
26431
  #endif
26414
- }
26415
26432
  }
26416
- {
26417
- int val;
26418
- PyObject *v = __Pyx_PyNumber_IntOrLong(x);
26419
- #if PY_MAJOR_VERSION < 3
26420
- if (likely(v) && !PyLong_Check(v)) {
26421
- PyObject *tmp = v;
26422
- v = PyNumber_Long(tmp);
26423
- Py_DECREF(tmp);
26424
- }
26425
- #endif
26426
- if (likely(v)) {
26427
- int ret = -1;
26428
- #if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26429
- int one = 1; int is_little = (int)*(unsigned char *)&one;
26430
- unsigned char *bytes = (unsigned char *)&val;
26431
- ret = _PyLong_AsByteArray((PyLongObject *)v,
26432
- bytes, sizeof(val),
26433
- is_little, !is_unsigned);
26434
- #else
26435
- PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26436
- int bits, remaining_bits, is_negative = 0;
26437
- long idigit;
26438
- int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26439
- if (unlikely(!PyLong_CheckExact(v))) {
26440
- PyObject *tmp = v;
26441
- v = PyNumber_Long(v);
26442
- assert(PyLong_CheckExact(v));
26443
- Py_DECREF(tmp);
26444
- if (unlikely(!v)) return (int) -1;
26445
- }
26446
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26447
- if (Py_SIZE(x) == 0)
26448
- return (int) 0;
26449
- is_negative = Py_SIZE(x) < 0;
26433
+ }
26434
+ {
26435
+ int val;
26436
+ int ret = -1;
26437
+ #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
26438
+ Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
26439
+ x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
26440
+ if (unlikely(bytes_copied == -1)) {
26441
+ } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
26442
+ goto raise_overflow;
26443
+ } else {
26444
+ ret = 0;
26445
+ }
26446
+ #elif 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 *)x,
26450
+ bytes, sizeof(val),
26451
+ is_little, !is_unsigned);
26450
26452
  #else
26451
- {
26452
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26453
- if (unlikely(result < 0))
26454
- return (int) -1;
26455
- is_negative = result == 1;
26456
- }
26457
- #endif
26458
- if (is_unsigned && unlikely(is_negative)) {
26459
- goto raise_neg_overflow;
26460
- } else if (is_negative) {
26461
- stepval = PyNumber_Invert(v);
26462
- if (unlikely(!stepval))
26463
- return (int) -1;
26464
- } else {
26465
- stepval = __Pyx_NewRef(v);
26466
- }
26467
- val = (int) 0;
26468
- mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26469
- shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26470
- for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
26471
- PyObject *tmp, *digit;
26472
- digit = PyNumber_And(stepval, mask);
26473
- if (unlikely(!digit)) goto done;
26474
- idigit = PyLong_AsLong(digit);
26475
- Py_DECREF(digit);
26476
- if (unlikely(idigit < 0)) goto done;
26477
- tmp = PyNumber_Rshift(stepval, shift);
26478
- if (unlikely(!tmp)) goto done;
26479
- Py_DECREF(stepval); stepval = tmp;
26480
- val |= ((int) idigit) << bits;
26481
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26482
- if (Py_SIZE(stepval) == 0)
26483
- goto unpacking_done;
26484
- #endif
26485
- }
26486
- idigit = PyLong_AsLong(stepval);
26487
- if (unlikely(idigit < 0)) goto done;
26488
- remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
26489
- if (unlikely(idigit >= (1L << remaining_bits)))
26490
- goto raise_overflow;
26491
- val |= ((int) idigit) << bits;
26492
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26493
- unpacking_done:
26494
- #endif
26495
- if (!is_unsigned) {
26496
- if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
26497
- goto raise_overflow;
26498
- if (is_negative)
26499
- val = ~val;
26500
- }
26501
- ret = 0;
26502
- done:
26503
- Py_XDECREF(shift);
26504
- Py_XDECREF(mask);
26505
- Py_XDECREF(stepval);
26506
- #endif
26453
+ PyObject *v;
26454
+ PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26455
+ int bits, remaining_bits, is_negative = 0;
26456
+ int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26457
+ if (likely(PyLong_CheckExact(x))) {
26458
+ v = __Pyx_NewRef(x);
26459
+ } else {
26460
+ v = PyNumber_Long(x);
26461
+ if (unlikely(!v)) return (int) -1;
26462
+ assert(PyLong_CheckExact(v));
26463
+ }
26464
+ {
26465
+ int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
26466
+ if (unlikely(result < 0)) {
26507
26467
  Py_DECREF(v);
26508
- if (likely(!ret))
26509
- return val;
26468
+ return (int) -1;
26510
26469
  }
26511
- return (int) -1;
26470
+ is_negative = result == 1;
26512
26471
  }
26513
- } else {
26514
- int val;
26515
- PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26516
- if (!tmp) return (int) -1;
26517
- val = __Pyx_PyInt_As_int(tmp);
26518
- Py_DECREF(tmp);
26472
+ if (is_unsigned && unlikely(is_negative)) {
26473
+ Py_DECREF(v);
26474
+ goto raise_neg_overflow;
26475
+ } else if (is_negative) {
26476
+ stepval = PyNumber_Invert(v);
26477
+ Py_DECREF(v);
26478
+ if (unlikely(!stepval))
26479
+ return (int) -1;
26480
+ } else {
26481
+ stepval = v;
26482
+ }
26483
+ v = NULL;
26484
+ val = (int) 0;
26485
+ mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26486
+ shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26487
+ for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
26488
+ PyObject *tmp, *digit;
26489
+ long idigit;
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
+ val |= ((int) idigit) << bits;
26496
+ tmp = PyNumber_Rshift(stepval, shift);
26497
+ if (unlikely(!tmp)) goto done;
26498
+ Py_DECREF(stepval); stepval = tmp;
26499
+ }
26500
+ Py_DECREF(shift); shift = NULL;
26501
+ Py_DECREF(mask); mask = NULL;
26502
+ {
26503
+ long idigit = PyLong_AsLong(stepval);
26504
+ if (unlikely(idigit < 0)) goto done;
26505
+ remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
26506
+ if (unlikely(idigit >= (1L << remaining_bits)))
26507
+ goto raise_overflow;
26508
+ val |= ((int) idigit) << bits;
26509
+ }
26510
+ if (!is_unsigned) {
26511
+ if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
26512
+ goto raise_overflow;
26513
+ if (is_negative)
26514
+ val = ~val;
26515
+ }
26516
+ ret = 0;
26517
+ done:
26518
+ Py_XDECREF(shift);
26519
+ Py_XDECREF(mask);
26520
+ Py_XDECREF(stepval);
26521
+ #endif
26522
+ if (unlikely(ret))
26523
+ return (int) -1;
26519
26524
  return val;
26520
26525
  }
26521
26526
  raise_overflow:
@@ -26559,12 +26564,19 @@ raise_neg_overflow:
26559
26564
  }
26560
26565
  }
26561
26566
  {
26562
- int one = 1; int little = (int)*(unsigned char *)&one;
26563
26567
  unsigned char *bytes = (unsigned char *)&value;
26564
- #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
26568
+ #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
26569
+ if (is_unsigned) {
26570
+ return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
26571
+ } else {
26572
+ return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
26573
+ }
26574
+ #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
26575
+ int one = 1; int little = (int)*(unsigned char *)&one;
26565
26576
  return _PyLong_FromByteArray(bytes, sizeof(int),
26566
26577
  little, !is_unsigned);
26567
26578
  #else
26579
+ int one = 1; int little = (int)*(unsigned char *)&one;
26568
26580
  PyObject *from_bytes, *result = NULL;
26569
26581
  PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
26570
26582
  from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
@@ -26614,245 +26626,239 @@ raise_neg_overflow:
26614
26626
  }
26615
26627
  return (long) val;
26616
26628
  }
26617
- } else
26629
+ }
26618
26630
  #endif
26619
- if (likely(PyLong_Check(x))) {
26620
- if (is_unsigned) {
26631
+ if (unlikely(!PyLong_Check(x))) {
26632
+ long val;
26633
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26634
+ if (!tmp) return (long) -1;
26635
+ val = __Pyx_PyInt_As_long(tmp);
26636
+ Py_DECREF(tmp);
26637
+ return val;
26638
+ }
26639
+ if (is_unsigned) {
26621
26640
  #if CYTHON_USE_PYLONG_INTERNALS
26622
- if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26623
- goto raise_neg_overflow;
26624
- } else if (__Pyx_PyLong_IsCompact(x)) {
26625
- __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26626
- } else {
26627
- const digit* digits = __Pyx_PyLong_Digits(x);
26628
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26629
- switch (__Pyx_PyLong_DigitCount(x)) {
26630
- case 2:
26631
- if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
26632
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26633
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26634
- } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
26635
- return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26636
- }
26641
+ if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26642
+ goto raise_neg_overflow;
26643
+ } else if (__Pyx_PyLong_IsCompact(x)) {
26644
+ __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26645
+ } else {
26646
+ const digit* digits = __Pyx_PyLong_Digits(x);
26647
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26648
+ switch (__Pyx_PyLong_DigitCount(x)) {
26649
+ case 2:
26650
+ if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
26651
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26652
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26653
+ } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
26654
+ return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26637
26655
  }
26638
- break;
26639
- case 3:
26640
- if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
26641
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26642
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26643
- } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
26644
- return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26645
- }
26656
+ }
26657
+ break;
26658
+ case 3:
26659
+ if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
26660
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26661
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26662
+ } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
26663
+ return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26646
26664
  }
26647
- break;
26648
- case 4:
26649
- if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
26650
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26651
- __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])))
26652
- } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
26653
- return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26654
- }
26665
+ }
26666
+ break;
26667
+ case 4:
26668
+ if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
26669
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26670
+ __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])))
26671
+ } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
26672
+ return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
26655
26673
  }
26656
- break;
26657
- }
26674
+ }
26675
+ break;
26658
26676
  }
26677
+ }
26659
26678
  #endif
26660
26679
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
26661
- if (unlikely(Py_SIZE(x) < 0)) {
26662
- goto raise_neg_overflow;
26663
- }
26680
+ if (unlikely(Py_SIZE(x) < 0)) {
26681
+ goto raise_neg_overflow;
26682
+ }
26664
26683
  #else
26665
- {
26666
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26667
- if (unlikely(result < 0))
26668
- return (long) -1;
26669
- if (unlikely(result == 1))
26670
- goto raise_neg_overflow;
26671
- }
26684
+ {
26685
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26686
+ if (unlikely(result < 0))
26687
+ return (long) -1;
26688
+ if (unlikely(result == 1))
26689
+ goto raise_neg_overflow;
26690
+ }
26672
26691
  #endif
26673
- if ((sizeof(long) <= sizeof(unsigned long))) {
26674
- __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
26692
+ if ((sizeof(long) <= sizeof(unsigned long))) {
26693
+ __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
26675
26694
  #ifdef HAVE_LONG_LONG
26676
- } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
26677
- __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26695
+ } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
26696
+ __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
26678
26697
  #endif
26679
- }
26680
- } else {
26698
+ }
26699
+ } else {
26681
26700
  #if CYTHON_USE_PYLONG_INTERNALS
26682
- if (__Pyx_PyLong_IsCompact(x)) {
26683
- __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26684
- } else {
26685
- const digit* digits = __Pyx_PyLong_Digits(x);
26686
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26687
- switch (__Pyx_PyLong_SignedDigitCount(x)) {
26688
- case -2:
26689
- if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
26690
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26691
- __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26692
- } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26693
- return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26694
- }
26701
+ if (__Pyx_PyLong_IsCompact(x)) {
26702
+ __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
26703
+ } else {
26704
+ const digit* digits = __Pyx_PyLong_Digits(x);
26705
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26706
+ switch (__Pyx_PyLong_SignedDigitCount(x)) {
26707
+ case -2:
26708
+ if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
26709
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26710
+ __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26711
+ } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26712
+ return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26695
26713
  }
26696
- break;
26697
- case 2:
26698
- if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
26699
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26700
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26701
- } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26702
- return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26703
- }
26714
+ }
26715
+ break;
26716
+ case 2:
26717
+ if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
26718
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26719
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26720
+ } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26721
+ return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26704
26722
  }
26705
- break;
26706
- case -3:
26707
- if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26708
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26709
- __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26710
- } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26711
- return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26712
- }
26723
+ }
26724
+ break;
26725
+ case -3:
26726
+ if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
26727
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26728
+ __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26729
+ } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26730
+ return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26713
26731
  }
26714
- break;
26715
- case 3:
26716
- if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
26717
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26718
- __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26719
- } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26720
- return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26721
- }
26732
+ }
26733
+ break;
26734
+ case 3:
26735
+ if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
26736
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26737
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26738
+ } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26739
+ return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26722
26740
  }
26723
- break;
26724
- case -4:
26725
- if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26726
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26727
- __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])))
26728
- } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
26729
- return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26730
- }
26741
+ }
26742
+ break;
26743
+ case -4:
26744
+ if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
26745
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26746
+ __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])))
26747
+ } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
26748
+ return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26731
26749
  }
26732
- break;
26733
- case 4:
26734
- if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
26735
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26736
- __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])))
26737
- } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
26738
- return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26739
- }
26750
+ }
26751
+ break;
26752
+ case 4:
26753
+ if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
26754
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26755
+ __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])))
26756
+ } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
26757
+ return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
26740
26758
  }
26741
- break;
26742
- }
26759
+ }
26760
+ break;
26743
26761
  }
26762
+ }
26744
26763
  #endif
26745
- if ((sizeof(long) <= sizeof(long))) {
26746
- __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
26764
+ if ((sizeof(long) <= sizeof(long))) {
26765
+ __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
26747
26766
  #ifdef HAVE_LONG_LONG
26748
- } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
26749
- __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
26767
+ } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
26768
+ __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
26750
26769
  #endif
26751
- }
26752
26770
  }
26753
- {
26754
- long val;
26755
- PyObject *v = __Pyx_PyNumber_IntOrLong(x);
26756
- #if PY_MAJOR_VERSION < 3
26757
- if (likely(v) && !PyLong_Check(v)) {
26758
- PyObject *tmp = v;
26759
- v = PyNumber_Long(tmp);
26760
- Py_DECREF(tmp);
26761
- }
26762
- #endif
26763
- if (likely(v)) {
26764
- int ret = -1;
26765
- #if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26766
- int one = 1; int is_little = (int)*(unsigned char *)&one;
26767
- unsigned char *bytes = (unsigned char *)&val;
26768
- ret = _PyLong_AsByteArray((PyLongObject *)v,
26769
- bytes, sizeof(val),
26770
- is_little, !is_unsigned);
26771
- #else
26772
- PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26773
- int bits, remaining_bits, is_negative = 0;
26774
- long idigit;
26775
- int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26776
- if (unlikely(!PyLong_CheckExact(v))) {
26777
- PyObject *tmp = v;
26778
- v = PyNumber_Long(v);
26779
- assert(PyLong_CheckExact(v));
26780
- Py_DECREF(tmp);
26781
- if (unlikely(!v)) return (long) -1;
26782
- }
26783
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26784
- if (Py_SIZE(x) == 0)
26785
- return (long) 0;
26786
- is_negative = Py_SIZE(x) < 0;
26771
+ }
26772
+ {
26773
+ long val;
26774
+ int ret = -1;
26775
+ #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
26776
+ Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
26777
+ x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
26778
+ if (unlikely(bytes_copied == -1)) {
26779
+ } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
26780
+ goto raise_overflow;
26781
+ } else {
26782
+ ret = 0;
26783
+ }
26784
+ #elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
26785
+ int one = 1; int is_little = (int)*(unsigned char *)&one;
26786
+ unsigned char *bytes = (unsigned char *)&val;
26787
+ ret = _PyLong_AsByteArray((PyLongObject *)x,
26788
+ bytes, sizeof(val),
26789
+ is_little, !is_unsigned);
26787
26790
  #else
26788
- {
26789
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
26790
- if (unlikely(result < 0))
26791
- return (long) -1;
26792
- is_negative = result == 1;
26793
- }
26794
- #endif
26795
- if (is_unsigned && unlikely(is_negative)) {
26796
- goto raise_neg_overflow;
26797
- } else if (is_negative) {
26798
- stepval = PyNumber_Invert(v);
26799
- if (unlikely(!stepval))
26800
- return (long) -1;
26801
- } else {
26802
- stepval = __Pyx_NewRef(v);
26803
- }
26804
- val = (long) 0;
26805
- mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26806
- shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26807
- for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
26808
- PyObject *tmp, *digit;
26809
- digit = PyNumber_And(stepval, mask);
26810
- if (unlikely(!digit)) goto done;
26811
- idigit = PyLong_AsLong(digit);
26812
- Py_DECREF(digit);
26813
- if (unlikely(idigit < 0)) goto done;
26814
- tmp = PyNumber_Rshift(stepval, shift);
26815
- if (unlikely(!tmp)) goto done;
26816
- Py_DECREF(stepval); stepval = tmp;
26817
- val |= ((long) idigit) << bits;
26818
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26819
- if (Py_SIZE(stepval) == 0)
26820
- goto unpacking_done;
26821
- #endif
26822
- }
26823
- idigit = PyLong_AsLong(stepval);
26824
- if (unlikely(idigit < 0)) goto done;
26825
- remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
26826
- if (unlikely(idigit >= (1L << remaining_bits)))
26827
- goto raise_overflow;
26828
- val |= ((long) idigit) << bits;
26829
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
26830
- unpacking_done:
26831
- #endif
26832
- if (!is_unsigned) {
26833
- if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
26834
- goto raise_overflow;
26835
- if (is_negative)
26836
- val = ~val;
26837
- }
26838
- ret = 0;
26839
- done:
26840
- Py_XDECREF(shift);
26841
- Py_XDECREF(mask);
26842
- Py_XDECREF(stepval);
26843
- #endif
26791
+ PyObject *v;
26792
+ PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
26793
+ int bits, remaining_bits, is_negative = 0;
26794
+ int chunk_size = (sizeof(long) < 8) ? 30 : 62;
26795
+ if (likely(PyLong_CheckExact(x))) {
26796
+ v = __Pyx_NewRef(x);
26797
+ } else {
26798
+ v = PyNumber_Long(x);
26799
+ if (unlikely(!v)) return (long) -1;
26800
+ assert(PyLong_CheckExact(v));
26801
+ }
26802
+ {
26803
+ int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
26804
+ if (unlikely(result < 0)) {
26844
26805
  Py_DECREF(v);
26845
- if (likely(!ret))
26846
- return val;
26806
+ return (long) -1;
26847
26807
  }
26848
- return (long) -1;
26808
+ is_negative = result == 1;
26849
26809
  }
26850
- } else {
26851
- long val;
26852
- PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26853
- if (!tmp) return (long) -1;
26854
- val = __Pyx_PyInt_As_long(tmp);
26855
- Py_DECREF(tmp);
26810
+ if (is_unsigned && unlikely(is_negative)) {
26811
+ Py_DECREF(v);
26812
+ goto raise_neg_overflow;
26813
+ } else if (is_negative) {
26814
+ stepval = PyNumber_Invert(v);
26815
+ Py_DECREF(v);
26816
+ if (unlikely(!stepval))
26817
+ return (long) -1;
26818
+ } else {
26819
+ stepval = v;
26820
+ }
26821
+ v = NULL;
26822
+ val = (long) 0;
26823
+ mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
26824
+ shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
26825
+ for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
26826
+ PyObject *tmp, *digit;
26827
+ long idigit;
26828
+ digit = PyNumber_And(stepval, mask);
26829
+ if (unlikely(!digit)) goto done;
26830
+ idigit = PyLong_AsLong(digit);
26831
+ Py_DECREF(digit);
26832
+ if (unlikely(idigit < 0)) goto done;
26833
+ val |= ((long) idigit) << bits;
26834
+ tmp = PyNumber_Rshift(stepval, shift);
26835
+ if (unlikely(!tmp)) goto done;
26836
+ Py_DECREF(stepval); stepval = tmp;
26837
+ }
26838
+ Py_DECREF(shift); shift = NULL;
26839
+ Py_DECREF(mask); mask = NULL;
26840
+ {
26841
+ long idigit = PyLong_AsLong(stepval);
26842
+ if (unlikely(idigit < 0)) goto done;
26843
+ remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
26844
+ if (unlikely(idigit >= (1L << remaining_bits)))
26845
+ goto raise_overflow;
26846
+ val |= ((long) idigit) << bits;
26847
+ }
26848
+ if (!is_unsigned) {
26849
+ if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
26850
+ goto raise_overflow;
26851
+ if (is_negative)
26852
+ val = ~val;
26853
+ }
26854
+ ret = 0;
26855
+ done:
26856
+ Py_XDECREF(shift);
26857
+ Py_XDECREF(mask);
26858
+ Py_XDECREF(stepval);
26859
+ #endif
26860
+ if (unlikely(ret))
26861
+ return (long) -1;
26856
26862
  return val;
26857
26863
  }
26858
26864
  raise_overflow:
@@ -26896,12 +26902,19 @@ raise_neg_overflow:
26896
26902
  }
26897
26903
  }
26898
26904
  {
26899
- int one = 1; int little = (int)*(unsigned char *)&one;
26900
26905
  unsigned char *bytes = (unsigned char *)&value;
26901
- #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
26906
+ #if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
26907
+ if (is_unsigned) {
26908
+ return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
26909
+ } else {
26910
+ return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
26911
+ }
26912
+ #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
26913
+ int one = 1; int little = (int)*(unsigned char *)&one;
26902
26914
  return _PyLong_FromByteArray(bytes, sizeof(long),
26903
26915
  little, !is_unsigned);
26904
26916
  #else
26917
+ int one = 1; int little = (int)*(unsigned char *)&one;
26905
26918
  PyObject *from_bytes, *result = NULL;
26906
26919
  PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL;
26907
26920
  from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
@@ -26951,245 +26964,239 @@ raise_neg_overflow:
26951
26964
  }
26952
26965
  return (char) val;
26953
26966
  }
26954
- } else
26967
+ }
26955
26968
  #endif
26956
- if (likely(PyLong_Check(x))) {
26957
- if (is_unsigned) {
26969
+ if (unlikely(!PyLong_Check(x))) {
26970
+ char val;
26971
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
26972
+ if (!tmp) return (char) -1;
26973
+ val = __Pyx_PyInt_As_char(tmp);
26974
+ Py_DECREF(tmp);
26975
+ return val;
26976
+ }
26977
+ if (is_unsigned) {
26958
26978
  #if CYTHON_USE_PYLONG_INTERNALS
26959
- if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26960
- goto raise_neg_overflow;
26961
- } else if (__Pyx_PyLong_IsCompact(x)) {
26962
- __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26963
- } else {
26964
- const digit* digits = __Pyx_PyLong_Digits(x);
26965
- assert(__Pyx_PyLong_DigitCount(x) > 1);
26966
- switch (__Pyx_PyLong_DigitCount(x)) {
26967
- case 2:
26968
- if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
26969
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26970
- __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26971
- } else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
26972
- return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26973
- }
26979
+ if (unlikely(__Pyx_PyLong_IsNeg(x))) {
26980
+ goto raise_neg_overflow;
26981
+ } else if (__Pyx_PyLong_IsCompact(x)) {
26982
+ __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
26983
+ } else {
26984
+ const digit* digits = __Pyx_PyLong_Digits(x);
26985
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
26986
+ switch (__Pyx_PyLong_DigitCount(x)) {
26987
+ case 2:
26988
+ if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
26989
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
26990
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26991
+ } else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
26992
+ return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26974
26993
  }
26975
- break;
26976
- case 3:
26977
- if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
26978
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26979
- __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
26980
- } else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
26981
- return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26982
- }
26994
+ }
26995
+ break;
26996
+ case 3:
26997
+ if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
26998
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
26999
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27000
+ } else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
27001
+ return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26983
27002
  }
26984
- break;
26985
- case 4:
26986
- if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
26987
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
26988
- __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])))
26989
- } else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
26990
- return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26991
- }
27003
+ }
27004
+ break;
27005
+ case 4:
27006
+ if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
27007
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
27008
+ __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])))
27009
+ } else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
27010
+ return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
26992
27011
  }
26993
- break;
26994
- }
27012
+ }
27013
+ break;
26995
27014
  }
27015
+ }
26996
27016
  #endif
26997
27017
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
26998
- if (unlikely(Py_SIZE(x) < 0)) {
26999
- goto raise_neg_overflow;
27000
- }
27018
+ if (unlikely(Py_SIZE(x) < 0)) {
27019
+ goto raise_neg_overflow;
27020
+ }
27001
27021
  #else
27002
- {
27003
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
27004
- if (unlikely(result < 0))
27005
- return (char) -1;
27006
- if (unlikely(result == 1))
27007
- goto raise_neg_overflow;
27008
- }
27022
+ {
27023
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
27024
+ if (unlikely(result < 0))
27025
+ return (char) -1;
27026
+ if (unlikely(result == 1))
27027
+ goto raise_neg_overflow;
27028
+ }
27009
27029
  #endif
27010
- if ((sizeof(char) <= sizeof(unsigned long))) {
27011
- __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
27030
+ if ((sizeof(char) <= sizeof(unsigned long))) {
27031
+ __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
27012
27032
  #ifdef HAVE_LONG_LONG
27013
- } else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
27014
- __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
27033
+ } else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
27034
+ __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
27015
27035
  #endif
27016
- }
27017
- } else {
27036
+ }
27037
+ } else {
27018
27038
  #if CYTHON_USE_PYLONG_INTERNALS
27019
- if (__Pyx_PyLong_IsCompact(x)) {
27020
- __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
27021
- } else {
27022
- const digit* digits = __Pyx_PyLong_Digits(x);
27023
- assert(__Pyx_PyLong_DigitCount(x) > 1);
27024
- switch (__Pyx_PyLong_SignedDigitCount(x)) {
27025
- case -2:
27026
- if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
27027
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
27028
- __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27029
- } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
27030
- return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27031
- }
27039
+ if (__Pyx_PyLong_IsCompact(x)) {
27040
+ __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
27041
+ } else {
27042
+ const digit* digits = __Pyx_PyLong_Digits(x);
27043
+ assert(__Pyx_PyLong_DigitCount(x) > 1);
27044
+ switch (__Pyx_PyLong_SignedDigitCount(x)) {
27045
+ case -2:
27046
+ if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
27047
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
27048
+ __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27049
+ } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
27050
+ return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27032
27051
  }
27033
- break;
27034
- case 2:
27035
- if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
27036
- if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
27037
- __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27038
- } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
27039
- return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27040
- }
27052
+ }
27053
+ break;
27054
+ case 2:
27055
+ if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
27056
+ if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
27057
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27058
+ } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
27059
+ return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27041
27060
  }
27042
- break;
27043
- case -3:
27044
- if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
27045
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
27046
- __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27047
- } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
27048
- return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27049
- }
27061
+ }
27062
+ break;
27063
+ case -3:
27064
+ if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
27065
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
27066
+ __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27067
+ } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
27068
+ return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27050
27069
  }
27051
- break;
27052
- case 3:
27053
- if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
27054
- if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
27055
- __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27056
- } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
27057
- return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27058
- }
27070
+ }
27071
+ break;
27072
+ case 3:
27073
+ if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
27074
+ if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
27075
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
27076
+ } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
27077
+ return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27059
27078
  }
27060
- break;
27061
- case -4:
27062
- if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
27063
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
27064
- __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])))
27065
- } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
27066
- return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27067
- }
27079
+ }
27080
+ break;
27081
+ case -4:
27082
+ if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
27083
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
27084
+ __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])))
27085
+ } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
27086
+ return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27068
27087
  }
27069
- break;
27070
- case 4:
27071
- if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
27072
- if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
27073
- __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])))
27074
- } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
27075
- return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27076
- }
27088
+ }
27089
+ break;
27090
+ case 4:
27091
+ if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
27092
+ if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
27093
+ __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])))
27094
+ } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
27095
+ return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
27077
27096
  }
27078
- break;
27079
- }
27097
+ }
27098
+ break;
27080
27099
  }
27100
+ }
27081
27101
  #endif
27082
- if ((sizeof(char) <= sizeof(long))) {
27083
- __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
27102
+ if ((sizeof(char) <= sizeof(long))) {
27103
+ __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
27084
27104
  #ifdef HAVE_LONG_LONG
27085
- } else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
27086
- __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
27105
+ } else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
27106
+ __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
27087
27107
  #endif
27088
- }
27089
27108
  }
27090
- {
27091
- char val;
27092
- PyObject *v = __Pyx_PyNumber_IntOrLong(x);
27093
- #if PY_MAJOR_VERSION < 3
27094
- if (likely(v) && !PyLong_Check(v)) {
27095
- PyObject *tmp = v;
27096
- v = PyNumber_Long(tmp);
27097
- Py_DECREF(tmp);
27098
- }
27099
- #endif
27100
- if (likely(v)) {
27101
- int ret = -1;
27102
- #if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
27103
- int one = 1; int is_little = (int)*(unsigned char *)&one;
27104
- unsigned char *bytes = (unsigned char *)&val;
27105
- ret = _PyLong_AsByteArray((PyLongObject *)v,
27106
- bytes, sizeof(val),
27107
- is_little, !is_unsigned);
27108
- #else
27109
- PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
27110
- int bits, remaining_bits, is_negative = 0;
27111
- long idigit;
27112
- int chunk_size = (sizeof(long) < 8) ? 30 : 62;
27113
- if (unlikely(!PyLong_CheckExact(v))) {
27114
- PyObject *tmp = v;
27115
- v = PyNumber_Long(v);
27116
- assert(PyLong_CheckExact(v));
27117
- Py_DECREF(tmp);
27118
- if (unlikely(!v)) return (char) -1;
27119
- }
27120
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
27121
- if (Py_SIZE(x) == 0)
27122
- return (char) 0;
27123
- is_negative = Py_SIZE(x) < 0;
27109
+ }
27110
+ {
27111
+ char val;
27112
+ int ret = -1;
27113
+ #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
27114
+ Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
27115
+ x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
27116
+ if (unlikely(bytes_copied == -1)) {
27117
+ } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
27118
+ goto raise_overflow;
27119
+ } else {
27120
+ ret = 0;
27121
+ }
27122
+ #elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
27123
+ int one = 1; int is_little = (int)*(unsigned char *)&one;
27124
+ unsigned char *bytes = (unsigned char *)&val;
27125
+ ret = _PyLong_AsByteArray((PyLongObject *)x,
27126
+ bytes, sizeof(val),
27127
+ is_little, !is_unsigned);
27124
27128
  #else
27125
- {
27126
- int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
27127
- if (unlikely(result < 0))
27128
- return (char) -1;
27129
- is_negative = result == 1;
27130
- }
27131
- #endif
27132
- if (is_unsigned && unlikely(is_negative)) {
27133
- goto raise_neg_overflow;
27134
- } else if (is_negative) {
27135
- stepval = PyNumber_Invert(v);
27136
- if (unlikely(!stepval))
27137
- return (char) -1;
27138
- } else {
27139
- stepval = __Pyx_NewRef(v);
27140
- }
27141
- val = (char) 0;
27142
- mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
27143
- shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
27144
- for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
27145
- PyObject *tmp, *digit;
27146
- digit = PyNumber_And(stepval, mask);
27147
- if (unlikely(!digit)) goto done;
27148
- idigit = PyLong_AsLong(digit);
27149
- Py_DECREF(digit);
27150
- if (unlikely(idigit < 0)) goto done;
27151
- tmp = PyNumber_Rshift(stepval, shift);
27152
- if (unlikely(!tmp)) goto done;
27153
- Py_DECREF(stepval); stepval = tmp;
27154
- val |= ((char) idigit) << bits;
27155
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
27156
- if (Py_SIZE(stepval) == 0)
27157
- goto unpacking_done;
27158
- #endif
27159
- }
27160
- idigit = PyLong_AsLong(stepval);
27161
- if (unlikely(idigit < 0)) goto done;
27162
- remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
27163
- if (unlikely(idigit >= (1L << remaining_bits)))
27164
- goto raise_overflow;
27165
- val |= ((char) idigit) << bits;
27166
- #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000
27167
- unpacking_done:
27168
- #endif
27169
- if (!is_unsigned) {
27170
- if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
27171
- goto raise_overflow;
27172
- if (is_negative)
27173
- val = ~val;
27174
- }
27175
- ret = 0;
27176
- done:
27177
- Py_XDECREF(shift);
27178
- Py_XDECREF(mask);
27179
- Py_XDECREF(stepval);
27180
- #endif
27129
+ PyObject *v;
27130
+ PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
27131
+ int bits, remaining_bits, is_negative = 0;
27132
+ int chunk_size = (sizeof(long) < 8) ? 30 : 62;
27133
+ if (likely(PyLong_CheckExact(x))) {
27134
+ v = __Pyx_NewRef(x);
27135
+ } else {
27136
+ v = PyNumber_Long(x);
27137
+ if (unlikely(!v)) return (char) -1;
27138
+ assert(PyLong_CheckExact(v));
27139
+ }
27140
+ {
27141
+ int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
27142
+ if (unlikely(result < 0)) {
27181
27143
  Py_DECREF(v);
27182
- if (likely(!ret))
27183
- return val;
27144
+ return (char) -1;
27184
27145
  }
27185
- return (char) -1;
27146
+ is_negative = result == 1;
27186
27147
  }
27187
- } else {
27188
- char val;
27189
- PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
27190
- if (!tmp) return (char) -1;
27191
- val = __Pyx_PyInt_As_char(tmp);
27192
- Py_DECREF(tmp);
27148
+ if (is_unsigned && unlikely(is_negative)) {
27149
+ Py_DECREF(v);
27150
+ goto raise_neg_overflow;
27151
+ } else if (is_negative) {
27152
+ stepval = PyNumber_Invert(v);
27153
+ Py_DECREF(v);
27154
+ if (unlikely(!stepval))
27155
+ return (char) -1;
27156
+ } else {
27157
+ stepval = v;
27158
+ }
27159
+ v = NULL;
27160
+ val = (char) 0;
27161
+ mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
27162
+ shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
27163
+ for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
27164
+ PyObject *tmp, *digit;
27165
+ long idigit;
27166
+ digit = PyNumber_And(stepval, mask);
27167
+ if (unlikely(!digit)) goto done;
27168
+ idigit = PyLong_AsLong(digit);
27169
+ Py_DECREF(digit);
27170
+ if (unlikely(idigit < 0)) goto done;
27171
+ val |= ((char) idigit) << bits;
27172
+ tmp = PyNumber_Rshift(stepval, shift);
27173
+ if (unlikely(!tmp)) goto done;
27174
+ Py_DECREF(stepval); stepval = tmp;
27175
+ }
27176
+ Py_DECREF(shift); shift = NULL;
27177
+ Py_DECREF(mask); mask = NULL;
27178
+ {
27179
+ long idigit = PyLong_AsLong(stepval);
27180
+ if (unlikely(idigit < 0)) goto done;
27181
+ remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
27182
+ if (unlikely(idigit >= (1L << remaining_bits)))
27183
+ goto raise_overflow;
27184
+ val |= ((char) idigit) << bits;
27185
+ }
27186
+ if (!is_unsigned) {
27187
+ if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
27188
+ goto raise_overflow;
27189
+ if (is_negative)
27190
+ val = ~val;
27191
+ }
27192
+ ret = 0;
27193
+ done:
27194
+ Py_XDECREF(shift);
27195
+ Py_XDECREF(mask);
27196
+ Py_XDECREF(stepval);
27197
+ #endif
27198
+ if (unlikely(ret))
27199
+ return (char) -1;
27193
27200
  return val;
27194
27201
  }
27195
27202
  raise_overflow: