ez-a-sync 0.32.26__cp39-cp39-win_amd64.whl → 0.32.28__cp39-cp39-win_amd64.whl

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

Potentially problematic release.


This version of ez-a-sync might be problematic. Click here for more details.

Files changed (71) hide show
  1. a_sync/_smart.c +63 -43
  2. a_sync/_smart.cp39-win_amd64.pyd +0 -0
  3. a_sync/a_sync/_descriptor.c +83 -63
  4. a_sync/a_sync/_descriptor.cp39-win_amd64.pyd +0 -0
  5. a_sync/a_sync/_flags.c +13 -10
  6. a_sync/a_sync/_flags.cp39-win_amd64.pyd +0 -0
  7. a_sync/a_sync/_helpers.c +76 -56
  8. a_sync/a_sync/_helpers.cp39-win_amd64.pyd +0 -0
  9. a_sync/a_sync/_kwargs.c +45 -25
  10. a_sync/a_sync/_kwargs.cp39-win_amd64.pyd +0 -0
  11. a_sync/a_sync/abstract.c +54 -24
  12. a_sync/a_sync/abstract.cp39-win_amd64.pyd +0 -0
  13. a_sync/a_sync/abstract.pyi +2 -2
  14. a_sync/a_sync/base.c +186 -162
  15. a_sync/a_sync/base.cp39-win_amd64.pyd +0 -0
  16. a_sync/a_sync/flags.c +13 -10
  17. a_sync/a_sync/flags.cp39-win_amd64.pyd +0 -0
  18. a_sync/a_sync/function.c +106 -77
  19. a_sync/a_sync/function.cp39-win_amd64.pyd +0 -0
  20. a_sync/a_sync/method.c +150 -118
  21. a_sync/a_sync/method.cp39-win_amd64.pyd +0 -0
  22. a_sync/a_sync/method.pyi +2 -1
  23. a_sync/a_sync/modifiers/manager.c +60 -40
  24. a_sync/a_sync/modifiers/manager.cp39-win_amd64.pyd +0 -0
  25. a_sync/a_sync/property.c +104 -78
  26. a_sync/a_sync/property.cp39-win_amd64.pyd +0 -0
  27. a_sync/async_property/cached.c +71 -51
  28. a_sync/async_property/cached.cp39-win_amd64.pyd +0 -0
  29. a_sync/async_property/proxy.c +37 -17
  30. a_sync/async_property/proxy.cp39-win_amd64.pyd +0 -0
  31. a_sync/asyncio/as_completed.c +33 -13
  32. a_sync/asyncio/as_completed.cp39-win_amd64.pyd +0 -0
  33. a_sync/asyncio/create_task.c +59 -21
  34. a_sync/asyncio/create_task.cp39-win_amd64.pyd +0 -0
  35. a_sync/asyncio/gather.c +42 -22
  36. a_sync/asyncio/gather.cp39-win_amd64.pyd +0 -0
  37. a_sync/asyncio/igather.c +42 -18
  38. a_sync/asyncio/igather.cp39-win_amd64.pyd +0 -0
  39. a_sync/asyncio/sleep.c +24 -4
  40. a_sync/asyncio/sleep.cp39-win_amd64.pyd +0 -0
  41. a_sync/debugging.c +52 -32
  42. a_sync/debugging.cp39-win_amd64.pyd +0 -0
  43. a_sync/exceptions.c +36 -20
  44. a_sync/exceptions.cp39-win_amd64.pyd +0 -0
  45. a_sync/executor.py +44 -0
  46. a_sync/functools.c +31 -11
  47. a_sync/functools.cp39-win_amd64.pyd +0 -0
  48. a_sync/iter.c +166 -96
  49. a_sync/iter.cp39-win_amd64.pyd +0 -0
  50. a_sync/primitives/_debug.c +61 -41
  51. a_sync/primitives/_debug.cp39-win_amd64.pyd +0 -0
  52. a_sync/primitives/_loggable.c +48 -22
  53. a_sync/primitives/_loggable.cp39-win_amd64.pyd +0 -0
  54. a_sync/primitives/locks/counter.c +93 -63
  55. a_sync/primitives/locks/counter.cp39-win_amd64.pyd +0 -0
  56. a_sync/primitives/locks/event.c +75 -54
  57. a_sync/primitives/locks/event.cp39-win_amd64.pyd +0 -0
  58. a_sync/primitives/locks/prio_semaphore.c +119 -79
  59. a_sync/primitives/locks/prio_semaphore.cp39-win_amd64.pyd +0 -0
  60. a_sync/primitives/locks/prio_semaphore.pyi +2 -2
  61. a_sync/primitives/locks/semaphore.c +91 -64
  62. a_sync/primitives/locks/semaphore.cp39-win_amd64.pyd +0 -0
  63. a_sync/primitives/locks/semaphore.pyi +10 -9
  64. a_sync/primitives/queue.py +5 -1
  65. a_sync/utils/repr.c +55 -35
  66. a_sync/utils/repr.cp39-win_amd64.pyd +0 -0
  67. {ez_a_sync-0.32.26.dist-info → ez_a_sync-0.32.28.dist-info}/METADATA +1 -1
  68. {ez_a_sync-0.32.26.dist-info → ez_a_sync-0.32.28.dist-info}/RECORD +71 -71
  69. {ez_a_sync-0.32.26.dist-info → ez_a_sync-0.32.28.dist-info}/WHEEL +0 -0
  70. {ez_a_sync-0.32.26.dist-info → ez_a_sync-0.32.28.dist-info}/licenses/LICENSE.txt +0 -0
  71. {ez_a_sync-0.32.26.dist-info → ez_a_sync-0.32.28.dist-info}/top_level.txt +0 -0
a_sync/exceptions.c CHANGED
@@ -1,4 +1,4 @@
1
- /* Generated by Cython 3.1.2 */
1
+ /* Generated by Cython 3.1.4 */
2
2
 
3
3
  /* BEGIN: Cython Metadata
4
4
  {
@@ -29,8 +29,8 @@ END: Cython Metadata */
29
29
  #elif PY_VERSION_HEX < 0x03080000
30
30
  #error Cython requires Python 3.8+.
31
31
  #else
32
- #define __PYX_ABI_VERSION "3_1_2"
33
- #define CYTHON_HEX_VERSION 0x030102F0
32
+ #define __PYX_ABI_VERSION "3_1_4"
33
+ #define CYTHON_HEX_VERSION 0x030104F0
34
34
  #define CYTHON_FUTURE_DIVISION 1
35
35
  /* CModulePreamble */
36
36
  #include <stddef.h>
@@ -393,6 +393,9 @@ END: Cython Metadata */
393
393
  enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
394
394
  #endif
395
395
  #endif
396
+ #ifndef CYTHON_LOCK_AND_GIL_DEADLOCK_AVOIDANCE_TIME
397
+ #define CYTHON_LOCK_AND_GIL_DEADLOCK_AVOIDANCE_TIME 100
398
+ #endif
396
399
  #ifndef __has_attribute
397
400
  #define __has_attribute(x) 0
398
401
  #endif
@@ -1935,18 +1938,18 @@ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
1935
1938
  if (!__Pyx_PyThreadState_Current->tracing) {\
1936
1939
  if (likely(__pyx_frame_code)) Py_INCREF(__pyx_frame_code);\
1937
1940
  else __pyx_frame_code = (PyObject*) __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno);\
1938
- if (unlikely(!__pyx_frame_code)) goto_error;\
1939
- ret = __Pyx__TraceStartFunc(__pyx_pymonitoring_state, __pyx_frame_code, offset, skip_event);\
1940
- }\
1941
+ if (unlikely(!__pyx_frame_code)) ret = -1;\
1942
+ else ret = __Pyx__TraceStartFunc(__pyx_pymonitoring_state, __pyx_frame_code, offset, skip_event);\
1943
+ } else __pyx_frame_code = NULL;\
1941
1944
  PyGILState_Release(state);\
1942
- }\
1945
+ } else __pyx_frame_code = NULL;\
1943
1946
  } else {\
1944
1947
  if (!__Pyx_PyThreadState_Current->tracing) {\
1945
1948
  if (likely(__pyx_frame_code)) Py_INCREF(__pyx_frame_code);\
1946
1949
  else __pyx_frame_code = (PyObject*) __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno);\
1947
- if (unlikely(!__pyx_frame_code)) goto_error;\
1948
- ret = __Pyx__TraceStartFunc(__pyx_pymonitoring_state, __pyx_frame_code, offset, skip_event);\
1949
- }\
1950
+ if (unlikely(!__pyx_frame_code)) ret = -1;\
1951
+ else ret = __Pyx__TraceStartFunc(__pyx_pymonitoring_state, __pyx_frame_code, offset, skip_event);\
1952
+ } else __pyx_frame_code = NULL;\
1950
1953
  }\
1951
1954
  if (unlikely(ret == -1)) goto_error;\
1952
1955
  }
@@ -2704,7 +2707,7 @@ static unsigned long __Pyx_get_runtime_version(void);
2704
2707
  static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer);
2705
2708
 
2706
2709
  /* VoidPtrImport.proto */
2707
- static int __Pyx_ImportVoidPtr_3_1_2(PyObject *module, const char *name, void **p, const char *sig);
2710
+ static int __Pyx_ImportVoidPtr_3_1_4(PyObject *module, const char *name, void **p, const char *sig);
2708
2711
 
2709
2712
  /* MultiPhaseInitModuleState.proto */
2710
2713
  #if CYTHON_PEP489_MULTI_PHASE_INIT && CYTHON_USE_MODULE_STATE
@@ -5234,8 +5237,12 @@ static PyObject *__pyx_pf_6a_sync_10exceptions_27SyncModeInAsyncContextError___i
5234
5237
  * err += f"Check your traceback to determine which, then try calling asynchronously instead with one of the following kwargs:\n"
5235
5238
  */
5236
5239
  __Pyx_TraceLine(320,5,0,__PYX_ERR(0, 320, __pyx_L1_error))
5237
- __pyx_t_1 = (__Pyx_PyUnicode_IS_TRUE(__pyx_v_err) != 0);
5238
- if (unlikely(((!CYTHON_ASSUME_SAFE_MACROS) && __pyx_t_1 < 0))) __PYX_ERR(0, 320, __pyx_L1_error)
5240
+ {
5241
+ Py_ssize_t __pyx_temp = __Pyx_PyUnicode_IS_TRUE(__pyx_v_err);
5242
+ if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 320, __pyx_L1_error)
5243
+ __pyx_t_1 = (__pyx_temp != 0);
5244
+ }
5245
+
5239
5246
  __pyx_t_2 = (!__pyx_t_1);
5240
5247
  if (__pyx_t_2) {
5241
5248
 
@@ -6224,9 +6231,9 @@ static int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate) {
6224
6231
  /*--- Variable import code ---*/
6225
6232
  __pyx_t_1 = PyImport_ImportModule("a_sync.a_sync.flags"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
6226
6233
  __Pyx_GOTREF(__pyx_t_1);
6227
- if (__Pyx_ImportVoidPtr_3_1_2(__pyx_t_1, "AFFIRMATIVE_FLAGS", (void **)&__pyx_vp_6a_sync_6a_sync_5flags_AFFIRMATIVE_FLAGS, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
6228
- if (__Pyx_ImportVoidPtr_3_1_2(__pyx_t_1, "NEGATIVE_FLAGS", (void **)&__pyx_vp_6a_sync_6a_sync_5flags_NEGATIVE_FLAGS, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
6229
- if (__Pyx_ImportVoidPtr_3_1_2(__pyx_t_1, "VIABLE_FLAGS", (void **)&__pyx_vp_6a_sync_6a_sync_5flags_VIABLE_FLAGS, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
6234
+ if (__Pyx_ImportVoidPtr_3_1_4(__pyx_t_1, "AFFIRMATIVE_FLAGS", (void **)&__pyx_vp_6a_sync_6a_sync_5flags_AFFIRMATIVE_FLAGS, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
6235
+ if (__Pyx_ImportVoidPtr_3_1_4(__pyx_t_1, "NEGATIVE_FLAGS", (void **)&__pyx_vp_6a_sync_6a_sync_5flags_NEGATIVE_FLAGS, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
6236
+ if (__Pyx_ImportVoidPtr_3_1_4(__pyx_t_1, "VIABLE_FLAGS", (void **)&__pyx_vp_6a_sync_6a_sync_5flags_VIABLE_FLAGS, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
6230
6237
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
6231
6238
  __Pyx_RefNannyFinishContext();
6232
6239
  return 0;
@@ -9867,6 +9874,7 @@ static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject
9867
9874
  changed = 1;
9868
9875
  }
9869
9876
  #endif // CYTHON_METH_FASTCALL
9877
+ #if !CYTHON_COMPILING_IN_PYPY
9870
9878
  else if (strcmp(memb->name, "__module__") == 0) {
9871
9879
  PyObject *descr;
9872
9880
  assert(memb->type == T_OBJECT);
@@ -9881,11 +9889,13 @@ static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject
9881
9889
  }
9882
9890
  changed = 1;
9883
9891
  }
9892
+ #endif // !CYTHON_COMPILING_IN_PYPY
9884
9893
  }
9885
9894
  memb++;
9886
9895
  }
9887
9896
  }
9888
9897
  #endif // !CYTHON_COMPILING_IN_LIMITED_API
9898
+ #if !CYTHON_COMPILING_IN_PYPY
9889
9899
  slot = spec->slots;
9890
9900
  while (slot && slot->slot && slot->slot != Py_tp_getset)
9891
9901
  slot++;
@@ -9917,6 +9927,7 @@ static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject
9917
9927
  ++getset;
9918
9928
  }
9919
9929
  }
9930
+ #endif // !CYTHON_COMPILING_IN_PYPY
9920
9931
  if (changed)
9921
9932
  PyType_Modified(type);
9922
9933
  #endif // PY_VERSION_HEX > 0x030900B1
@@ -10049,7 +10060,7 @@ bad:
10049
10060
  }
10050
10061
 
10051
10062
  /* CommonTypesMetaclass */
10052
- PyObject* __pyx_CommonTypesMetaclass_get_module(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED void* context) {
10063
+ static PyObject* __pyx_CommonTypesMetaclass_get_module(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED void* context) {
10053
10064
  return PyUnicode_FromString(__PYX_ABI_MODULE_NAME);
10054
10065
  }
10055
10066
  static PyGetSetDef __pyx_CommonTypesMetaclass_getset[] = {
@@ -10078,6 +10089,7 @@ static int __pyx_CommonTypesMetaclass_init(PyObject *module) {
10078
10089
  return -1;
10079
10090
  }
10080
10091
  mstate->__pyx_CommonTypesMetaclassType = __Pyx_FetchCommonTypeFromSpec(NULL, module, &__pyx_CommonTypesMetaclass_spec, bases);
10092
+ Py_DECREF(bases);
10081
10093
  if (unlikely(mstate->__pyx_CommonTypesMetaclassType == NULL)) {
10082
10094
  return -1;
10083
10095
  }
@@ -12446,9 +12458,9 @@ static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt
12446
12458
  }
12447
12459
 
12448
12460
  /* VoidPtrImport */
12449
- #ifndef __PYX_HAVE_RT_ImportVoidPtr_3_1_2
12450
- #define __PYX_HAVE_RT_ImportVoidPtr_3_1_2
12451
- static int __Pyx_ImportVoidPtr_3_1_2(PyObject *module, const char *name, void **p, const char *sig) {
12461
+ #ifndef __PYX_HAVE_RT_ImportVoidPtr_3_1_4
12462
+ #define __PYX_HAVE_RT_ImportVoidPtr_3_1_4
12463
+ static int __Pyx_ImportVoidPtr_3_1_4(PyObject *module, const char *name, void **p, const char *sig) {
12452
12464
  PyObject *d = 0;
12453
12465
  PyObject *cobj = 0;
12454
12466
  d = PyObject_GetAttrString(module, "__pyx_capi__");
@@ -12545,6 +12557,10 @@ bad:
12545
12557
  PyCode_NewWithPosOnlyArgs
12546
12558
  #endif
12547
12559
  (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, __pyx_mstate_global->__pyx_empty_bytes);
12560
+ #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030c00A1
12561
+ if (likely(result))
12562
+ result->_co_firsttraceable = 0;
12563
+ #endif
12548
12564
  return result;
12549
12565
  }
12550
12566
  #elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY
Binary file
a_sync/executor.py CHANGED
@@ -15,9 +15,11 @@ See Also:
15
15
  """
16
16
 
17
17
  import asyncio
18
+ import atexit
18
19
  import concurrent.futures
19
20
  import multiprocessing.context
20
21
  import queue
22
+ import signal
21
23
  import threading
22
24
  import weakref
23
25
  from asyncio import sleep
@@ -27,6 +29,47 @@ from concurrent.futures import _base, thread
27
29
  from a_sync._typing import *
28
30
  from a_sync.primitives._debug import _DebugDaemonMixin
29
31
 
32
+ # === Executor Shutdown Logic ===
33
+ # All executors (module-level and user-created) are registered for shutdown on interpreter exit and signals.
34
+ # Signal handlers are chainable: after our cleanup, the previous handler is called (unless SIG_DFL or SIG_IGN).
35
+ # This ensures compatibility with other libraries and deduplicates shutdown logic.
36
+
37
+ _EXECUTORS = set()
38
+
39
+
40
+ def register_executor(executor) -> None:
41
+ """Register an executor for shutdown on exit/signals."""
42
+ _EXECUTORS.add(executor)
43
+
44
+
45
+ def _shutdown_all_executors(*args) -> None:
46
+ """Shutdown all registered executors (non-blocking)."""
47
+ for executor in list(_EXECUTORS):
48
+ try:
49
+ executor.shutdown(wait=False)
50
+ except Exception:
51
+ pass
52
+
53
+
54
+ def _register_executor_shutdown() -> None:
55
+ """Register atexit and chainable signal handlers for executor shutdown."""
56
+ atexit.register(_shutdown_all_executors)
57
+
58
+ def make_chainable_signal_handler(signalnum):
59
+ prev_handler = signal.getsignal(signalnum)
60
+
61
+ def handler(signum, frame):
62
+ _shutdown_all_executors()
63
+ if callable(prev_handler) and prev_handler not in (signal.SIG_DFL, signal.SIG_IGN):
64
+ prev_handler(signum, frame)
65
+
66
+ signal.signal(signalnum, handler)
67
+
68
+ make_chainable_signal_handler(signal.SIGINT)
69
+ make_chainable_signal_handler(signal.SIGTERM)
70
+
71
+
72
+ _register_executor_shutdown()
30
73
 
31
74
  TEN_MINUTES = 60 * 10
32
75
 
@@ -209,6 +252,7 @@ class _AsyncExecutorMixin(concurrent.futures.Executor, _DebugDaemonMixin):
209
252
  def __init_mixin__(self):
210
253
  self.sync_mode = self._max_workers == 0
211
254
  self.__super_submit = super().submit
255
+ register_executor(self)
212
256
 
213
257
  async def _debug_daemon(self, fut: asyncio.Future, fn, *args, **kwargs) -> None:
214
258
  """
a_sync/functools.c CHANGED
@@ -1,4 +1,4 @@
1
- /* Generated by Cython 3.1.2 */
1
+ /* Generated by Cython 3.1.4 */
2
2
 
3
3
  /* BEGIN: Cython Metadata
4
4
  {
@@ -29,8 +29,8 @@ END: Cython Metadata */
29
29
  #elif PY_VERSION_HEX < 0x03080000
30
30
  #error Cython requires Python 3.8+.
31
31
  #else
32
- #define __PYX_ABI_VERSION "3_1_2"
33
- #define CYTHON_HEX_VERSION 0x030102F0
32
+ #define __PYX_ABI_VERSION "3_1_4"
33
+ #define CYTHON_HEX_VERSION 0x030104F0
34
34
  #define CYTHON_FUTURE_DIVISION 1
35
35
  /* CModulePreamble */
36
36
  #include <stddef.h>
@@ -393,6 +393,9 @@ END: Cython Metadata */
393
393
  enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
394
394
  #endif
395
395
  #endif
396
+ #ifndef CYTHON_LOCK_AND_GIL_DEADLOCK_AVOIDANCE_TIME
397
+ #define CYTHON_LOCK_AND_GIL_DEADLOCK_AVOIDANCE_TIME 100
398
+ #endif
396
399
  #ifndef __has_attribute
397
400
  #define __has_attribute(x) 0
398
401
  #endif
@@ -1964,18 +1967,18 @@ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
1964
1967
  if (!__Pyx_PyThreadState_Current->tracing) {\
1965
1968
  if (likely(__pyx_frame_code)) Py_INCREF(__pyx_frame_code);\
1966
1969
  else __pyx_frame_code = (PyObject*) __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno);\
1967
- if (unlikely(!__pyx_frame_code)) goto_error;\
1968
- ret = __Pyx__TraceStartFunc(__pyx_pymonitoring_state, __pyx_frame_code, offset, skip_event);\
1969
- }\
1970
+ if (unlikely(!__pyx_frame_code)) ret = -1;\
1971
+ else ret = __Pyx__TraceStartFunc(__pyx_pymonitoring_state, __pyx_frame_code, offset, skip_event);\
1972
+ } else __pyx_frame_code = NULL;\
1970
1973
  PyGILState_Release(state);\
1971
- }\
1974
+ } else __pyx_frame_code = NULL;\
1972
1975
  } else {\
1973
1976
  if (!__Pyx_PyThreadState_Current->tracing) {\
1974
1977
  if (likely(__pyx_frame_code)) Py_INCREF(__pyx_frame_code);\
1975
1978
  else __pyx_frame_code = (PyObject*) __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno);\
1976
- if (unlikely(!__pyx_frame_code)) goto_error;\
1977
- ret = __Pyx__TraceStartFunc(__pyx_pymonitoring_state, __pyx_frame_code, offset, skip_event);\
1978
- }\
1979
+ if (unlikely(!__pyx_frame_code)) ret = -1;\
1980
+ else ret = __Pyx__TraceStartFunc(__pyx_pymonitoring_state, __pyx_frame_code, offset, skip_event);\
1981
+ } else __pyx_frame_code = NULL;\
1979
1982
  }\
1980
1983
  if (unlikely(ret == -1)) goto_error;\
1981
1984
  }
@@ -8776,6 +8779,7 @@ static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject
8776
8779
  changed = 1;
8777
8780
  }
8778
8781
  #endif // CYTHON_METH_FASTCALL
8782
+ #if !CYTHON_COMPILING_IN_PYPY
8779
8783
  else if (strcmp(memb->name, "__module__") == 0) {
8780
8784
  PyObject *descr;
8781
8785
  assert(memb->type == T_OBJECT);
@@ -8790,11 +8794,13 @@ static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject
8790
8794
  }
8791
8795
  changed = 1;
8792
8796
  }
8797
+ #endif // !CYTHON_COMPILING_IN_PYPY
8793
8798
  }
8794
8799
  memb++;
8795
8800
  }
8796
8801
  }
8797
8802
  #endif // !CYTHON_COMPILING_IN_LIMITED_API
8803
+ #if !CYTHON_COMPILING_IN_PYPY
8798
8804
  slot = spec->slots;
8799
8805
  while (slot && slot->slot && slot->slot != Py_tp_getset)
8800
8806
  slot++;
@@ -8826,6 +8832,7 @@ static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject
8826
8832
  ++getset;
8827
8833
  }
8828
8834
  }
8835
+ #endif // !CYTHON_COMPILING_IN_PYPY
8829
8836
  if (changed)
8830
8837
  PyType_Modified(type);
8831
8838
  #endif // PY_VERSION_HEX > 0x030900B1
@@ -8958,7 +8965,7 @@ bad:
8958
8965
  }
8959
8966
 
8960
8967
  /* CommonTypesMetaclass */
8961
- PyObject* __pyx_CommonTypesMetaclass_get_module(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED void* context) {
8968
+ static PyObject* __pyx_CommonTypesMetaclass_get_module(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED void* context) {
8962
8969
  return PyUnicode_FromString(__PYX_ABI_MODULE_NAME);
8963
8970
  }
8964
8971
  static PyGetSetDef __pyx_CommonTypesMetaclass_getset[] = {
@@ -8987,6 +8994,7 @@ static int __pyx_CommonTypesMetaclass_init(PyObject *module) {
8987
8994
  return -1;
8988
8995
  }
8989
8996
  mstate->__pyx_CommonTypesMetaclassType = __Pyx_FetchCommonTypeFromSpec(NULL, module, &__pyx_CommonTypesMetaclass_spec, bases);
8997
+ Py_DECREF(bases);
8990
8998
  if (unlikely(mstate->__pyx_CommonTypesMetaclassType == NULL)) {
8991
8999
  return -1;
8992
9000
  }
@@ -10256,6 +10264,13 @@ try_unpack:
10256
10264
 
10257
10265
  /* PyObjectCallMethod0 */
10258
10266
  static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
10267
+ #if CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000))
10268
+ PyObject *args[1] = {obj};
10269
+ (void) __Pyx_PyObject_GetMethod;
10270
+ (void) __Pyx_PyObject_CallOneArg;
10271
+ (void) __Pyx_PyObject_CallNoArg;
10272
+ return PyObject_VectorcallMethod(method_name, args, 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
10273
+ #else
10259
10274
  PyObject *method = NULL, *result = NULL;
10260
10275
  int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
10261
10276
  if (likely(is_method)) {
@@ -10268,6 +10283,7 @@ static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name
10268
10283
  Py_DECREF(method);
10269
10284
  bad:
10270
10285
  return result;
10286
+ #endif
10271
10287
  }
10272
10288
 
10273
10289
  /* ValidateBasesTuple */
@@ -11886,6 +11902,10 @@ bad:
11886
11902
  PyCode_NewWithPosOnlyArgs
11887
11903
  #endif
11888
11904
  (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, __pyx_mstate_global->__pyx_empty_bytes);
11905
+ #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030c00A1
11906
+ if (likely(result))
11907
+ result->_co_firsttraceable = 0;
11908
+ #endif
11889
11909
  return result;
11890
11910
  }
11891
11911
  #elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY
Binary file