Cython 3.1.0__py3-none-any.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.
Files changed (316) hide show
  1. Cython/Build/BuildExecutable.py +169 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +323 -0
  4. Cython/Build/Dependencies.py +1306 -0
  5. Cython/Build/Distutils.py +1 -0
  6. Cython/Build/Inline.py +463 -0
  7. Cython/Build/IpythonMagic.py +560 -0
  8. Cython/Build/SharedModule.py +76 -0
  9. Cython/Build/Tests/TestCyCache.py +194 -0
  10. Cython/Build/Tests/TestCythonizeArgsParser.py +481 -0
  11. Cython/Build/Tests/TestDependencies.py +133 -0
  12. Cython/Build/Tests/TestInline.py +177 -0
  13. Cython/Build/Tests/TestIpythonMagic.py +287 -0
  14. Cython/Build/Tests/TestRecythonize.py +212 -0
  15. Cython/Build/Tests/TestStripLiterals.py +155 -0
  16. Cython/Build/Tests/__init__.py +1 -0
  17. Cython/Build/__init__.py +8 -0
  18. Cython/CodeWriter.py +811 -0
  19. Cython/Compiler/AnalysedTreeTransforms.py +97 -0
  20. Cython/Compiler/Annotate.py +326 -0
  21. Cython/Compiler/AutoDocTransforms.py +320 -0
  22. Cython/Compiler/Buffer.py +680 -0
  23. Cython/Compiler/Builtin.py +934 -0
  24. Cython/Compiler/CmdLine.py +259 -0
  25. Cython/Compiler/Code.pxd +148 -0
  26. Cython/Compiler/Code.py +3375 -0
  27. Cython/Compiler/CodeGeneration.py +33 -0
  28. Cython/Compiler/CythonScope.py +187 -0
  29. Cython/Compiler/Dataclass.py +868 -0
  30. Cython/Compiler/DebugFlags.py +24 -0
  31. Cython/Compiler/Errors.py +295 -0
  32. Cython/Compiler/ExprNodes.py +15267 -0
  33. Cython/Compiler/FlowControl.pxd +97 -0
  34. Cython/Compiler/FlowControl.py +1455 -0
  35. Cython/Compiler/FusedNode.py +1002 -0
  36. Cython/Compiler/Future.py +16 -0
  37. Cython/Compiler/Interpreter.py +57 -0
  38. Cython/Compiler/Lexicon.py +340 -0
  39. Cython/Compiler/LineTable.py +114 -0
  40. Cython/Compiler/Main.py +853 -0
  41. Cython/Compiler/MatchCaseNodes.py +259 -0
  42. Cython/Compiler/MemoryView.py +922 -0
  43. Cython/Compiler/ModuleNode.py +4024 -0
  44. Cython/Compiler/Naming.py +374 -0
  45. Cython/Compiler/Nodes.py +10826 -0
  46. Cython/Compiler/Optimize.py +5256 -0
  47. Cython/Compiler/Options.py +835 -0
  48. Cython/Compiler/ParseTreeTransforms.pxd +77 -0
  49. Cython/Compiler/ParseTreeTransforms.py +4509 -0
  50. Cython/Compiler/Parsing.pxd +9 -0
  51. Cython/Compiler/Parsing.py +4789 -0
  52. Cython/Compiler/Pipeline.py +439 -0
  53. Cython/Compiler/PyrexTypes.py +5762 -0
  54. Cython/Compiler/Pythran.py +232 -0
  55. Cython/Compiler/Scanning.pxd +40 -0
  56. Cython/Compiler/Scanning.py +577 -0
  57. Cython/Compiler/StringEncoding.py +347 -0
  58. Cython/Compiler/Symtab.py +3080 -0
  59. Cython/Compiler/Tests/TestBuffer.py +105 -0
  60. Cython/Compiler/Tests/TestBuiltin.py +72 -0
  61. Cython/Compiler/Tests/TestCmdLine.py +586 -0
  62. Cython/Compiler/Tests/TestCode.py +86 -0
  63. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  64. Cython/Compiler/Tests/TestGrammar.py +202 -0
  65. Cython/Compiler/Tests/TestMemView.py +71 -0
  66. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  67. Cython/Compiler/Tests/TestScanning.py +134 -0
  68. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  69. Cython/Compiler/Tests/TestStringEncoding.py +33 -0
  70. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  71. Cython/Compiler/Tests/TestTreePath.py +103 -0
  72. Cython/Compiler/Tests/TestTypes.py +75 -0
  73. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  74. Cython/Compiler/Tests/TestVisitor.py +61 -0
  75. Cython/Compiler/Tests/Utils.py +36 -0
  76. Cython/Compiler/Tests/__init__.py +1 -0
  77. Cython/Compiler/TreeFragment.py +278 -0
  78. Cython/Compiler/TreePath.py +303 -0
  79. Cython/Compiler/TypeInference.py +584 -0
  80. Cython/Compiler/TypeSlots.py +1181 -0
  81. Cython/Compiler/UFuncs.py +311 -0
  82. Cython/Compiler/UtilNodes.py +389 -0
  83. Cython/Compiler/UtilityCode.py +344 -0
  84. Cython/Compiler/Version.py +8 -0
  85. Cython/Compiler/Visitor.pxd +53 -0
  86. Cython/Compiler/Visitor.py +861 -0
  87. Cython/Compiler/__init__.py +1 -0
  88. Cython/Coverage.py +448 -0
  89. Cython/Debugger/Cygdb.py +175 -0
  90. Cython/Debugger/DebugWriter.py +82 -0
  91. Cython/Debugger/Tests/TestLibCython.py +275 -0
  92. Cython/Debugger/Tests/__init__.py +1 -0
  93. Cython/Debugger/Tests/cfuncs.c +8 -0
  94. Cython/Debugger/Tests/codefile +49 -0
  95. Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
  96. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  97. Cython/Debugger/__init__.py +1 -0
  98. Cython/Debugger/libcython.py +1548 -0
  99. Cython/Debugger/libpython.py +2821 -0
  100. Cython/Debugging.py +20 -0
  101. Cython/Distutils/__init__.py +2 -0
  102. Cython/Distutils/build_ext.py +139 -0
  103. Cython/Distutils/extension.py +96 -0
  104. Cython/Distutils/old_build_ext.py +351 -0
  105. Cython/Includes/cpython/__init__.pxd +173 -0
  106. Cython/Includes/cpython/array.pxd +174 -0
  107. Cython/Includes/cpython/bool.pxd +37 -0
  108. Cython/Includes/cpython/buffer.pxd +112 -0
  109. Cython/Includes/cpython/bytearray.pxd +33 -0
  110. Cython/Includes/cpython/bytes.pxd +200 -0
  111. Cython/Includes/cpython/cellobject.pxd +35 -0
  112. Cython/Includes/cpython/ceval.pxd +8 -0
  113. Cython/Includes/cpython/codecs.pxd +121 -0
  114. Cython/Includes/cpython/complex.pxd +60 -0
  115. Cython/Includes/cpython/contextvars.pxd +145 -0
  116. Cython/Includes/cpython/conversion.pxd +36 -0
  117. Cython/Includes/cpython/datetime.pxd +395 -0
  118. Cython/Includes/cpython/descr.pxd +26 -0
  119. Cython/Includes/cpython/dict.pxd +187 -0
  120. Cython/Includes/cpython/exc.pxd +263 -0
  121. Cython/Includes/cpython/fileobject.pxd +57 -0
  122. Cython/Includes/cpython/float.pxd +47 -0
  123. Cython/Includes/cpython/function.pxd +65 -0
  124. Cython/Includes/cpython/genobject.pxd +25 -0
  125. Cython/Includes/cpython/getargs.pxd +12 -0
  126. Cython/Includes/cpython/instance.pxd +25 -0
  127. Cython/Includes/cpython/iterator.pxd +36 -0
  128. Cython/Includes/cpython/iterobject.pxd +24 -0
  129. Cython/Includes/cpython/list.pxd +92 -0
  130. Cython/Includes/cpython/long.pxd +149 -0
  131. Cython/Includes/cpython/longintrepr.pxd +14 -0
  132. Cython/Includes/cpython/mapping.pxd +63 -0
  133. Cython/Includes/cpython/marshal.pxd +66 -0
  134. Cython/Includes/cpython/mem.pxd +120 -0
  135. Cython/Includes/cpython/memoryview.pxd +50 -0
  136. Cython/Includes/cpython/method.pxd +49 -0
  137. Cython/Includes/cpython/module.pxd +208 -0
  138. Cython/Includes/cpython/number.pxd +258 -0
  139. Cython/Includes/cpython/object.pxd +433 -0
  140. Cython/Includes/cpython/pycapsule.pxd +143 -0
  141. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  142. Cython/Includes/cpython/pyport.pxd +8 -0
  143. Cython/Includes/cpython/pystate.pxd +95 -0
  144. Cython/Includes/cpython/pythread.pxd +53 -0
  145. Cython/Includes/cpython/ref.pxd +67 -0
  146. Cython/Includes/cpython/sequence.pxd +134 -0
  147. Cython/Includes/cpython/set.pxd +119 -0
  148. Cython/Includes/cpython/slice.pxd +70 -0
  149. Cython/Includes/cpython/time.pxd +129 -0
  150. Cython/Includes/cpython/tuple.pxd +72 -0
  151. Cython/Includes/cpython/type.pxd +53 -0
  152. Cython/Includes/cpython/unicode.pxd +639 -0
  153. Cython/Includes/cpython/version.pxd +32 -0
  154. Cython/Includes/cpython/weakref.pxd +78 -0
  155. Cython/Includes/libc/__init__.pxd +1 -0
  156. Cython/Includes/libc/complex.pxd +35 -0
  157. Cython/Includes/libc/errno.pxd +127 -0
  158. Cython/Includes/libc/float.pxd +43 -0
  159. Cython/Includes/libc/limits.pxd +28 -0
  160. Cython/Includes/libc/locale.pxd +46 -0
  161. Cython/Includes/libc/math.pxd +209 -0
  162. Cython/Includes/libc/setjmp.pxd +10 -0
  163. Cython/Includes/libc/signal.pxd +64 -0
  164. Cython/Includes/libc/stddef.pxd +9 -0
  165. Cython/Includes/libc/stdint.pxd +105 -0
  166. Cython/Includes/libc/stdio.pxd +80 -0
  167. Cython/Includes/libc/stdlib.pxd +72 -0
  168. Cython/Includes/libc/string.pxd +50 -0
  169. Cython/Includes/libc/threads.pxd +84 -0
  170. Cython/Includes/libc/time.pxd +51 -0
  171. Cython/Includes/libcpp/__init__.pxd +4 -0
  172. Cython/Includes/libcpp/algorithm.pxd +320 -0
  173. Cython/Includes/libcpp/any.pxd +16 -0
  174. Cython/Includes/libcpp/atomic.pxd +59 -0
  175. Cython/Includes/libcpp/barrier.pxd +22 -0
  176. Cython/Includes/libcpp/bit.pxd +29 -0
  177. Cython/Includes/libcpp/cast.pxd +12 -0
  178. Cython/Includes/libcpp/cmath.pxd +518 -0
  179. Cython/Includes/libcpp/complex.pxd +106 -0
  180. Cython/Includes/libcpp/deque.pxd +165 -0
  181. Cython/Includes/libcpp/exception.pxd +86 -0
  182. Cython/Includes/libcpp/execution.pxd +15 -0
  183. Cython/Includes/libcpp/forward_list.pxd +63 -0
  184. Cython/Includes/libcpp/functional.pxd +26 -0
  185. Cython/Includes/libcpp/future.pxd +103 -0
  186. Cython/Includes/libcpp/iterator.pxd +34 -0
  187. Cython/Includes/libcpp/latch.pxd +17 -0
  188. Cython/Includes/libcpp/limits.pxd +61 -0
  189. Cython/Includes/libcpp/list.pxd +117 -0
  190. Cython/Includes/libcpp/map.pxd +252 -0
  191. Cython/Includes/libcpp/memory.pxd +115 -0
  192. Cython/Includes/libcpp/mutex.pxd +130 -0
  193. Cython/Includes/libcpp/numbers.pxd +15 -0
  194. Cython/Includes/libcpp/numeric.pxd +131 -0
  195. Cython/Includes/libcpp/optional.pxd +34 -0
  196. Cython/Includes/libcpp/pair.pxd +1 -0
  197. Cython/Includes/libcpp/queue.pxd +25 -0
  198. Cython/Includes/libcpp/random.pxd +166 -0
  199. Cython/Includes/libcpp/semaphore.pxd +44 -0
  200. Cython/Includes/libcpp/set.pxd +228 -0
  201. Cython/Includes/libcpp/shared_mutex.pxd +72 -0
  202. Cython/Includes/libcpp/span.pxd +87 -0
  203. Cython/Includes/libcpp/stack.pxd +11 -0
  204. Cython/Includes/libcpp/stop_token.pxd +105 -0
  205. Cython/Includes/libcpp/string.pxd +355 -0
  206. Cython/Includes/libcpp/string_view.pxd +181 -0
  207. Cython/Includes/libcpp/typeindex.pxd +15 -0
  208. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  209. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  210. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  211. Cython/Includes/libcpp/utility.pxd +30 -0
  212. Cython/Includes/libcpp/vector.pxd +186 -0
  213. Cython/Includes/openmp.pxd +50 -0
  214. Cython/Includes/posix/__init__.pxd +1 -0
  215. Cython/Includes/posix/dlfcn.pxd +14 -0
  216. Cython/Includes/posix/fcntl.pxd +86 -0
  217. Cython/Includes/posix/ioctl.pxd +4 -0
  218. Cython/Includes/posix/mman.pxd +101 -0
  219. Cython/Includes/posix/resource.pxd +57 -0
  220. Cython/Includes/posix/select.pxd +21 -0
  221. Cython/Includes/posix/signal.pxd +73 -0
  222. Cython/Includes/posix/stat.pxd +98 -0
  223. Cython/Includes/posix/stdio.pxd +37 -0
  224. Cython/Includes/posix/stdlib.pxd +29 -0
  225. Cython/Includes/posix/strings.pxd +9 -0
  226. Cython/Includes/posix/time.pxd +71 -0
  227. Cython/Includes/posix/types.pxd +30 -0
  228. Cython/Includes/posix/uio.pxd +26 -0
  229. Cython/Includes/posix/unistd.pxd +271 -0
  230. Cython/Includes/posix/wait.pxd +38 -0
  231. Cython/Plex/Actions.pxd +24 -0
  232. Cython/Plex/Actions.py +119 -0
  233. Cython/Plex/DFA.pxd +14 -0
  234. Cython/Plex/DFA.py +164 -0
  235. Cython/Plex/Errors.py +48 -0
  236. Cython/Plex/Lexicons.py +178 -0
  237. Cython/Plex/Machines.pxd +36 -0
  238. Cython/Plex/Machines.py +238 -0
  239. Cython/Plex/Regexps.py +539 -0
  240. Cython/Plex/Scanners.pxd +47 -0
  241. Cython/Plex/Scanners.py +360 -0
  242. Cython/Plex/Transitions.pxd +14 -0
  243. Cython/Plex/Transitions.py +239 -0
  244. Cython/Plex/__init__.py +34 -0
  245. Cython/Runtime/__init__.py +1 -0
  246. Cython/Runtime/refnanny.pyx +237 -0
  247. Cython/Shadow.py +690 -0
  248. Cython/Shadow.pyi +521 -0
  249. Cython/StringIOTree.py +170 -0
  250. Cython/Tempita/__init__.py +4 -0
  251. Cython/Tempita/_looper.py +154 -0
  252. Cython/Tempita/_tempita.py +1091 -0
  253. Cython/TestUtils.py +410 -0
  254. Cython/Tests/TestCodeWriter.py +128 -0
  255. Cython/Tests/TestCythonUtils.py +202 -0
  256. Cython/Tests/TestJediTyper.py +223 -0
  257. Cython/Tests/TestShadow.py +114 -0
  258. Cython/Tests/TestStringIOTree.py +67 -0
  259. Cython/Tests/TestTestUtils.py +90 -0
  260. Cython/Tests/__init__.py +1 -0
  261. Cython/Tests/xmlrunner.py +390 -0
  262. Cython/Utility/AsyncGen.c +1002 -0
  263. Cython/Utility/Buffer.c +875 -0
  264. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  265. Cython/Utility/Builtins.c +776 -0
  266. Cython/Utility/CConvert.pyx +134 -0
  267. Cython/Utility/CMath.c +104 -0
  268. Cython/Utility/CommonStructures.c +118 -0
  269. Cython/Utility/Complex.c +378 -0
  270. Cython/Utility/Coroutine.c +2206 -0
  271. Cython/Utility/CpdefEnums.pyx +103 -0
  272. Cython/Utility/CppConvert.pyx +279 -0
  273. Cython/Utility/CppSupport.cpp +143 -0
  274. Cython/Utility/CythonFunction.c +1794 -0
  275. Cython/Utility/Dataclasses.c +185 -0
  276. Cython/Utility/Dataclasses.py +112 -0
  277. Cython/Utility/Embed.c +125 -0
  278. Cython/Utility/Exceptions.c +1012 -0
  279. Cython/Utility/ExtensionTypes.c +809 -0
  280. Cython/Utility/FunctionArguments.c +965 -0
  281. Cython/Utility/ImportExport.c +987 -0
  282. Cython/Utility/Lock.c +136 -0
  283. Cython/Utility/MemoryView.pxd +187 -0
  284. Cython/Utility/MemoryView.pyx +1481 -0
  285. Cython/Utility/MemoryView_C.c +1046 -0
  286. Cython/Utility/ModuleSetupCode.c +3059 -0
  287. Cython/Utility/NumpyImportArray.c +46 -0
  288. Cython/Utility/ObjectHandling.c +3342 -0
  289. Cython/Utility/Optimize.c +1589 -0
  290. Cython/Utility/Overflow.c +404 -0
  291. Cython/Utility/Printing.c +86 -0
  292. Cython/Utility/Profile.c +709 -0
  293. Cython/Utility/StringTools.c +1259 -0
  294. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  295. Cython/Utility/TestCythonScope.pyx +75 -0
  296. Cython/Utility/TestUtilityLoader.c +12 -0
  297. Cython/Utility/TypeConversion.c +1284 -0
  298. Cython/Utility/UFuncs.pyx +50 -0
  299. Cython/Utility/UFuncs_C.c +89 -0
  300. Cython/Utility/__init__.py +28 -0
  301. Cython/Utility/arrayarray.h +148 -0
  302. Cython/Utils.py +687 -0
  303. Cython/__init__.py +10 -0
  304. Cython/__init__.pyi +7 -0
  305. Cython/py.typed +0 -0
  306. cython-3.1.0.dist-info/COPYING.txt +19 -0
  307. cython-3.1.0.dist-info/LICENSE.txt +176 -0
  308. cython-3.1.0.dist-info/METADATA +636 -0
  309. cython-3.1.0.dist-info/RECORD +316 -0
  310. cython-3.1.0.dist-info/WHEEL +5 -0
  311. cython-3.1.0.dist-info/entry_points.txt +4 -0
  312. cython-3.1.0.dist-info/top_level.txt +3 -0
  313. cython.py +29 -0
  314. pyximport/__init__.py +4 -0
  315. pyximport/pyxbuild.py +160 -0
  316. pyximport/pyximport.py +482 -0
Cython/Utility/Lock.c ADDED
@@ -0,0 +1,136 @@
1
+ ////////////////////// PyThreadTypeLock.proto //////////
2
+ //@proto_block: utility_code_proto_before_types
3
+
4
+ // This lock type always uses PyThread_type_lock. The main reason
5
+ // to use it is if you are using the Limited API and want to
6
+ // share locks between modules.
7
+
8
+ #define __Pyx_Locks_PyThreadTypeLock PyThread_type_lock
9
+ #define __Pyx_Locks_PyThreadTypeLock_DECL NULL
10
+ #define __Pyx_Locks_PyThreadTypeLock_Init(l) l = PyThread_allocate_lock()
11
+ #define __Pyx_Locks_PyThreadTypeLock_Delete(l) PyThread_free_lock(l)
12
+ #define __Pyx_Locks_PyThreadTypeLock_LockNogil(l) (void)PyThread_acquire_lock(l, WAIT_LOCK)
13
+ #define __Pyx_Locks_PyThreadTypeLock_Unlock(l) PyThread_release_lock(l)
14
+ static void __Pyx__Locks_PyThreadTypeLock_Lock(__Pyx_Locks_PyThreadTypeLock lock); /* proto */
15
+ static void __Pyx__Locks_PyThreadTypeLock_LockGil(__Pyx_Locks_PyThreadTypeLock lock); /* proto */
16
+ // CYTHON_INLINE because these may be unused
17
+ static CYTHON_INLINE void __Pyx_Locks_PyThreadTypeLock_Lock(__Pyx_Locks_PyThreadTypeLock lock) {
18
+ __Pyx__Locks_PyThreadTypeLock_Lock(lock);
19
+ }
20
+ static CYTHON_INLINE void __Pyx_Locks_PyThreadTypeLock_LockGil(__Pyx_Locks_PyThreadTypeLock lock) {
21
+ __Pyx__Locks_PyThreadTypeLock_LockGil(lock);
22
+ }
23
+
24
+ ////////////////////// PyThreadTypeLock ////////////////
25
+
26
+ static void __Pyx__Locks_PyThreadTypeLock_LockGil_slow_spin(__Pyx_Locks_PyThreadTypeLock lock) {
27
+ while (1) {
28
+ // If we've been spinning for a while take a slower path, where
29
+ // we release the GIL, get the lock, release the lock, reacquire the GIL
30
+ // and then hope the lock is still available when we try to reacquire it.
31
+ Py_BEGIN_ALLOW_THREADS
32
+ (void)PyThread_acquire_lock(lock, WAIT_LOCK);
33
+ PyThread_release_lock(lock);
34
+ Py_END_ALLOW_THREADS
35
+ if (likely(PyThread_acquire_lock_timed(lock, 0, 0) == PY_LOCK_ACQUIRED)) {
36
+ // All good - we got the lock
37
+ return;
38
+ }
39
+ }
40
+ }
41
+
42
+ static void __Pyx__Locks_PyThreadTypeLock_LockGil_quick_spin(__Pyx_Locks_PyThreadTypeLock lock) {
43
+ for (int spin_count=0; spin_count<100; ++spin_count) {
44
+ // Release and re-acquire the GIL, try to get the lock again.
45
+ Py_BEGIN_ALLOW_THREADS
46
+ Py_END_ALLOW_THREADS
47
+ if (likely(PyThread_acquire_lock_timed(lock, 0, 0) == PY_LOCK_ACQUIRED)) {
48
+ // All good - we got the lock
49
+ return;
50
+ }
51
+ }
52
+ __Pyx__Locks_PyThreadTypeLock_LockGil_slow_spin(lock);
53
+ }
54
+
55
+ static CYTHON_INLINE void __Pyx__Locks_PyThreadTypeLock_LockGil(__Pyx_Locks_PyThreadTypeLock lock) {
56
+ if (likely(PyThread_acquire_lock_timed(lock, 0, 0) == PY_LOCK_ACQUIRED)) {
57
+ // All good - we got the lock
58
+ return;
59
+ }
60
+ __Pyx__Locks_PyThreadTypeLock_LockGil_quick_spin(lock);
61
+ }
62
+
63
+ static void __Pyx__Locks_PyThreadTypeLock_Lock(__Pyx_Locks_PyThreadTypeLock lock) {
64
+ #if CYTHON_COMPILING_IN_LIMITED_API
65
+ // We can't tell if we have the GIL. Therefore make sure we do have it
66
+ // and then restore whatever state was there before.
67
+ PyGILState_STATE state = PyGILState_Ensure();
68
+ __Pyx_Locks_PyThreadTypeLock_LockNogil(lock);
69
+ PyGILState_Release(state);
70
+ #else
71
+ if (PyGILState_Check()) {
72
+ __Pyx_Locks_PyThreadTypeLock_LockGil(lock);
73
+ } else {
74
+ __Pyx_Locks_PyThreadTypeLock_LockNogil(lock);
75
+ }
76
+ #endif
77
+ }
78
+
79
+ ////////////////////// PyMutex.proto ////////////////////
80
+ //@proto_block: utility_code_proto_before_types
81
+ //@requires: PyThreadTypeLock
82
+
83
+ // We support two implementations - a Py3.13+ version using PyMutex and
84
+ // an older version using PyThread_type_lock.
85
+ // In principle it'd be possible to also use things like c++ std::mutex
86
+ // (in the absence of PyMutex). I've decided against this for ABI reasons.
87
+
88
+ // With the Limited API There is an ABI problem - if a lock is ever
89
+ // shared between two modules then they must agree on the definition,
90
+ // and so Limited API sharing with regular API will disagree.
91
+
92
+ // Therefore I explicitly ban Limited API modules from using
93
+ // CythonLockType in a public way. However, they can use
94
+ // CythonCompatibleLockType which will always be PyThread_type_lock.
95
+
96
+ #if PY_VERSION_HEX > 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
97
+ #define __Pyx_Locks_PyMutex PyMutex
98
+ #define __Pyx_Locks_PyMutex_DECL {0}
99
+ #define __Pyx_Locks_PyMutex_Init(l) (void)(l)
100
+ #define __Pyx_Locks_PyMutex_Delete(l) (void)(l)
101
+ // Py_Mutex takes care of all GIL handling itself
102
+ #define __Pyx_Locks_PyMutex_Lock(l) PyMutex_Lock(&l)
103
+ #define __Pyx_Locks_PyMutex_Unlock(l) PyMutex_Unlock(&l)
104
+ #define __Pyx_Locks_PyMutex_LockGil(l) PyMutex_Lock(&l)
105
+ #define __Pyx_Locks_PyMutex_LockNogil(l) PyMutex_Lock(&l)
106
+
107
+ #else
108
+
109
+ #define __Pyx_Locks_PyMutex __Pyx_Locks_PyThreadTypeLock
110
+ #define __Pyx_Locks_PyMutex_DECL __Pyx_Locks_PyThreadTypeLock_DECL
111
+ #define __Pyx_Locks_PyMutex_Init(l) __Pyx_Locks_PyThreadTypeLock_Init(l)
112
+ #define __Pyx_Locks_PyMutex_Delete(l) __Pyx_Locks_PyThreadTypeLock_Delete(l)
113
+ #define __Pyx_Locks_PyMutex_Lock(l) __Pyx_Locks_PyThreadTypeLock_Lock(l)
114
+ #define __Pyx_Locks_PyMutex_Unlock(l) __Pyx_Locks_PyThreadTypeLock_Unlock(l)
115
+ #define __Pyx_Locks_PyMutex_LockGil(l) __Pyx_Locks_PyThreadTypeLock_LockGil(l)
116
+ #define __Pyx_Locks_PyMutex_LockNogil(l) __Pyx_Locks_PyThreadTypeLock_LockNogil(l)
117
+
118
+ #endif
119
+
120
+ //////////////////////////// CythonPyMutexPublicCheck ///////////////////////////////////
121
+
122
+ #ifndef CYTHON_UNSAFE_IGNORE_PYMUTEX_ABI_COMPATIBILITY
123
+ #define CYTHON_UNSAFE_IGNORE_PYMUTEX_ABI_COMPATIBILITY 0
124
+ #endif
125
+
126
+ /* CYTHON_UNSAFE_IGNORE_PYMUTEX_ABI_COMPATIBILITY is left for an advanced user who
127
+ * wants to disable this error. However, please don't complain to us when your code
128
+ * breaks. Whatever you do, the Limited API version always uses the "compatible" lock
129
+ * type anyway, so you're only saving yourself a few extra characters typing.
130
+ */
131
+ #if CYTHON_COMPILING_IN_LIMITED_API && !CYTHON_UNSAFE_IGNORE_PYMUTEX_ABI_COMPATIBILITY
132
+ #error cython.pymutex is shared between multiple modules in the Limited API.\
133
+ This is intentionally disabled because it is not possible for regular API and Limited API\
134
+ modules to be compatible with each other. Use cython.pythread_type_lock for a safe\
135
+ alternative lock type instead.
136
+ #endif
@@ -0,0 +1,187 @@
1
+ # from cpython cimport ...
2
+
3
+ cimport cython
4
+ cdef extern from "Python.h":
5
+ ctypedef struct PyObject
6
+ ctypedef void *PyThread_type_lock
7
+
8
+ cdef extern from *:
9
+ ctypedef struct {{memviewslice_name}}:
10
+ pass
11
+
12
+ ctypedef struct __pyx_buffer "Py_buffer":
13
+ PyObject *obj
14
+
15
+ ctypedef struct __Pyx_TypeInfo:
16
+ pass
17
+
18
+ cdef struct __pyx_memoryview "__pyx_memoryview_obj":
19
+ Py_buffer view
20
+ PyObject *obj
21
+ const __Pyx_TypeInfo *typeinfo
22
+
23
+ ctypedef int __pyx_atomic_int_type
24
+
25
+ {{memviewslice_name}} slice_copy_contig "__pyx_memoryview_copy_new_contig"(
26
+ {{memviewslice_name}} *from_mvs,
27
+ char *mode, int ndim,
28
+ size_t sizeof_dtype, int contig_flag,
29
+ bint dtype_is_object) except * nogil
30
+ bint slice_is_contig "__pyx_memviewslice_is_contig" (
31
+ {{memviewslice_name}} mvs, char order, int ndim) nogil
32
+ bint slices_overlap "__pyx_slices_overlap" ({{memviewslice_name}} *slice1,
33
+ {{memviewslice_name}} *slice2,
34
+ int ndim, size_t itemsize) nogil
35
+
36
+ @cname("__pyx_array")
37
+ cdef class array:
38
+
39
+ cdef:
40
+ char *data
41
+ Py_ssize_t len
42
+ char *format
43
+ int ndim
44
+ Py_ssize_t *_shape
45
+ Py_ssize_t *_strides
46
+ Py_ssize_t itemsize
47
+ unicode mode # FIXME: this should have been a simple 'char'
48
+ bytes _format
49
+ void (*callback_free_data)(void *data) noexcept
50
+ # cdef object _memview
51
+ cdef bint free_data
52
+ cdef bint dtype_is_object
53
+
54
+ @cname('get_memview')
55
+ cdef get_memview(self)
56
+
57
+ @cname("__pyx_array_allocate_buffer")
58
+ cdef int _allocate_buffer(array self) except -1
59
+
60
+ @cname("__pyx_array_new")
61
+ cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, const char *c_mode, char *buf)
62
+
63
+ @cname('__pyx_memoryview')
64
+ cdef class memoryview:
65
+
66
+ cdef object obj
67
+ cdef object _size
68
+ cdef object _array_interface
69
+ cdef PyThread_type_lock lock
70
+ cdef __pyx_atomic_int_type acquisition_count
71
+ cdef Py_buffer view
72
+ cdef int flags
73
+ cdef bint dtype_is_object
74
+ cdef const __Pyx_TypeInfo *typeinfo
75
+
76
+ cdef char *get_item_pointer(memoryview self, object index) except NULL
77
+ cdef is_slice(self, obj)
78
+ cdef setitem_slice_assignment(self, dst, src)
79
+ cdef setitem_slice_assign_scalar(self, memoryview dst, value)
80
+ cdef setitem_indexed(self, index, value)
81
+ cdef convert_item_to_object(self, char *itemp)
82
+ cdef assign_item_from_object(self, char *itemp, object value)
83
+ cdef _get_base(self)
84
+
85
+ @cname('__pyx_memoryview_new')
86
+ cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, const __Pyx_TypeInfo *typeinfo)
87
+
88
+ @cname('__pyx_memoryview_check')
89
+ cdef inline bint memoryview_check(object o) noexcept:
90
+ return isinstance(o, memoryview)
91
+
92
+ @cname('__pyx_memview_slice')
93
+ cdef memoryview memview_slice(memoryview memview, object indices)
94
+
95
+ @cname('__pyx_memoryview_slice_memviewslice')
96
+ cdef int slice_memviewslice(
97
+ {{memviewslice_name}} *dst,
98
+ Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
99
+ int dim, int new_ndim, int *suboffset_dim,
100
+ Py_ssize_t start, Py_ssize_t stop, Py_ssize_t step,
101
+ int have_start, int have_stop, int have_step,
102
+ bint is_slice) except -1 nogil
103
+
104
+ @cname('__pyx_pybuffer_index')
105
+ cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,
106
+ Py_ssize_t dim) except NULL
107
+
108
+ @cname('__pyx_memslice_transpose')
109
+ cdef int transpose_memslice({{memviewslice_name}} *memslice) except -1 nogil
110
+
111
+ @cname('__pyx_memoryview_fromslice')
112
+ cdef memoryview_fromslice({{memviewslice_name}} memviewslice,
113
+ int ndim,
114
+ object (*to_object_func)(char *),
115
+ int (*to_dtype_func)(char *, object) except 0,
116
+ bint dtype_is_object)
117
+
118
+ @cname('__pyx_memoryview_get_slice_from_memoryview')
119
+ cdef {{memviewslice_name}} *get_slice_from_memview(memoryview memview,
120
+ {{memviewslice_name}} *mslice) except NULL
121
+
122
+ @cname('__pyx_memoryview_slice_copy')
123
+ cdef void slice_copy(memoryview memview, {{memviewslice_name}} *dst) noexcept
124
+
125
+ @cname('__pyx_memoryview_copy_object')
126
+ cdef memoryview_copy(memoryview memview)
127
+
128
+ @cname('__pyx_memoryview_copy_object_from_slice')
129
+ cdef memoryview_copy_from_slice(memoryview memview, {{memviewslice_name}} *memviewslice)
130
+
131
+ @cname('__pyx_get_best_slice_order')
132
+ cdef char get_best_order({{memviewslice_name}} *mslice, int ndim) noexcept nogil
133
+
134
+ @cname('__pyx_memoryview_slice_get_size')
135
+ cdef Py_ssize_t slice_get_size({{memviewslice_name}} *src, int ndim) noexcept nogil
136
+
137
+ @cname('__pyx_fill_contig_strides_array')
138
+ cdef Py_ssize_t fill_contig_strides_array(
139
+ Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
140
+ int ndim, char order) noexcept nogil
141
+
142
+ @cname('__pyx_memoryview_copy_data_to_temp')
143
+ cdef void *copy_data_to_temp({{memviewslice_name}} *src,
144
+ {{memviewslice_name}} *tmpslice,
145
+ char order,
146
+ int ndim) except NULL nogil
147
+
148
+ @cname('__pyx_memoryview_err_extents')
149
+ cdef int _err_extents(int i, Py_ssize_t extent1,
150
+ Py_ssize_t extent2) except -1 with gil
151
+
152
+ @cname('__pyx_memoryview_err_dim')
153
+ cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil
154
+
155
+ @cname('__pyx_memoryview_err')
156
+ cdef int _err(PyObject *error, str msg) except -1 with gil
157
+
158
+ @cname('__pyx_memoryview_err_no_memory')
159
+ cdef int _err_no_memory() except -1 with gil
160
+
161
+ @cname('__pyx_memoryview_copy_contents')
162
+ cdef int memoryview_copy_contents({{memviewslice_name}} src,
163
+ {{memviewslice_name}} dst,
164
+ int src_ndim, int dst_ndim,
165
+ bint dtype_is_object) except -1 nogil
166
+
167
+ @cname('__pyx_memoryview_broadcast_leading')
168
+ cdef void broadcast_leading({{memviewslice_name}} *mslice,
169
+ int ndim,
170
+ int ndim_other) noexcept nogil
171
+
172
+ @cname('__pyx_memoryview_refcount_copying')
173
+ cdef void refcount_copying({{memviewslice_name}} *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil
174
+
175
+ @cname('__pyx_memoryview_refcount_objects_in_slice')
176
+ cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,
177
+ Py_ssize_t *strides, int ndim, bint inc) noexcept
178
+
179
+ @cname('__pyx_memoryview_slice_assign_scalar')
180
+ cdef void slice_assign_scalar({{memviewslice_name}} *dst, int ndim,
181
+ size_t itemsize, void *item,
182
+ bint dtype_is_object) noexcept nogil
183
+
184
+ @cname('__pyx_memoryview__slice_assign_scalar')
185
+ cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,
186
+ Py_ssize_t *strides, int ndim,
187
+ size_t itemsize, void *item) noexcept nogil