Cython 3.2.0__cp39-abi3-win32.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 (333) hide show
  1. Cython/Build/BuildExecutable.py +169 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +350 -0
  4. Cython/Build/Dependencies.py +1314 -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 +94 -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 +11 -0
  18. Cython/CodeWriter.py +815 -0
  19. Cython/Compiler/AnalysedTreeTransforms.py +97 -0
  20. Cython/Compiler/Annotate.py +328 -0
  21. Cython/Compiler/AutoDocTransforms.py +320 -0
  22. Cython/Compiler/Buffer.py +680 -0
  23. Cython/Compiler/Builtin.py +984 -0
  24. Cython/Compiler/CmdLine.py +263 -0
  25. Cython/Compiler/Code.pxd +149 -0
  26. Cython/Compiler/Code.py +3746 -0
  27. Cython/Compiler/Code.pyd +0 -0
  28. Cython/Compiler/CodeGeneration.py +33 -0
  29. Cython/Compiler/CythonScope.py +191 -0
  30. Cython/Compiler/Dataclass.py +864 -0
  31. Cython/Compiler/DebugFlags.py +24 -0
  32. Cython/Compiler/Errors.py +297 -0
  33. Cython/Compiler/ExprNodes.py +15562 -0
  34. Cython/Compiler/FlowControl.pxd +97 -0
  35. Cython/Compiler/FlowControl.py +1451 -0
  36. Cython/Compiler/FlowControl.pyd +0 -0
  37. Cython/Compiler/FusedNode.py +971 -0
  38. Cython/Compiler/FusedNode.pyd +0 -0
  39. Cython/Compiler/Future.py +16 -0
  40. Cython/Compiler/Interpreter.py +57 -0
  41. Cython/Compiler/Lexicon.py +421 -0
  42. Cython/Compiler/LineTable.py +114 -0
  43. Cython/Compiler/LineTable.pyd +0 -0
  44. Cython/Compiler/Main.py +857 -0
  45. Cython/Compiler/MatchCaseNodes.py +259 -0
  46. Cython/Compiler/MemoryView.py +905 -0
  47. Cython/Compiler/ModuleNode.py +4235 -0
  48. Cython/Compiler/Naming.py +363 -0
  49. Cython/Compiler/Nodes.py +10831 -0
  50. Cython/Compiler/Optimize.py +5288 -0
  51. Cython/Compiler/Options.py +843 -0
  52. Cython/Compiler/ParseTreeTransforms.pxd +78 -0
  53. Cython/Compiler/ParseTreeTransforms.py +4638 -0
  54. Cython/Compiler/Parsing.pxd +9 -0
  55. Cython/Compiler/Parsing.py +4775 -0
  56. Cython/Compiler/Parsing.pyd +0 -0
  57. Cython/Compiler/Pipeline.py +439 -0
  58. Cython/Compiler/PyrexTypes.py +5870 -0
  59. Cython/Compiler/Pythran.py +232 -0
  60. Cython/Compiler/Scanning.pxd +48 -0
  61. Cython/Compiler/Scanning.py +701 -0
  62. Cython/Compiler/Scanning.pyd +0 -0
  63. Cython/Compiler/StringEncoding.py +298 -0
  64. Cython/Compiler/Symtab.py +3073 -0
  65. Cython/Compiler/Tests/TestBuffer.py +105 -0
  66. Cython/Compiler/Tests/TestBuiltin.py +72 -0
  67. Cython/Compiler/Tests/TestCmdLine.py +586 -0
  68. Cython/Compiler/Tests/TestCode.py +144 -0
  69. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  70. Cython/Compiler/Tests/TestGrammar.py +202 -0
  71. Cython/Compiler/Tests/TestMemView.py +71 -0
  72. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  73. Cython/Compiler/Tests/TestScanning.py +134 -0
  74. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  75. Cython/Compiler/Tests/TestStringEncoding.py +21 -0
  76. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  77. Cython/Compiler/Tests/TestTreePath.py +103 -0
  78. Cython/Compiler/Tests/TestTypes.py +75 -0
  79. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  80. Cython/Compiler/Tests/TestVisitor.py +61 -0
  81. Cython/Compiler/Tests/Utils.py +36 -0
  82. Cython/Compiler/Tests/__init__.py +1 -0
  83. Cython/Compiler/TreeFragment.py +278 -0
  84. Cython/Compiler/TreePath.py +303 -0
  85. Cython/Compiler/TypeInference.py +591 -0
  86. Cython/Compiler/TypeSlots.py +1174 -0
  87. Cython/Compiler/UFuncs.py +311 -0
  88. Cython/Compiler/UtilNodes.py +389 -0
  89. Cython/Compiler/UtilityCode.py +344 -0
  90. Cython/Compiler/Version.py +8 -0
  91. Cython/Compiler/Visitor.pxd +53 -0
  92. Cython/Compiler/Visitor.py +861 -0
  93. Cython/Compiler/Visitor.pyd +0 -0
  94. Cython/Compiler/__init__.py +1 -0
  95. Cython/Coverage.py +448 -0
  96. Cython/Debugger/Cygdb.py +177 -0
  97. Cython/Debugger/DebugWriter.py +82 -0
  98. Cython/Debugger/Tests/TestLibCython.py +275 -0
  99. Cython/Debugger/Tests/__init__.py +1 -0
  100. Cython/Debugger/Tests/cfuncs.c +8 -0
  101. Cython/Debugger/Tests/codefile +49 -0
  102. Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
  103. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  104. Cython/Debugger/__init__.py +1 -0
  105. Cython/Debugger/libcython.py +1548 -0
  106. Cython/Debugger/libpython.py +2821 -0
  107. Cython/Debugging.py +20 -0
  108. Cython/Distutils/__init__.py +2 -0
  109. Cython/Distutils/build_ext.py +139 -0
  110. Cython/Distutils/extension.py +96 -0
  111. Cython/Distutils/old_build_ext.py +351 -0
  112. Cython/Includes/cpython/__init__.pxd +173 -0
  113. Cython/Includes/cpython/array.pxd +178 -0
  114. Cython/Includes/cpython/bool.pxd +37 -0
  115. Cython/Includes/cpython/buffer.pxd +112 -0
  116. Cython/Includes/cpython/bytearray.pxd +33 -0
  117. Cython/Includes/cpython/bytes.pxd +200 -0
  118. Cython/Includes/cpython/cellobject.pxd +35 -0
  119. Cython/Includes/cpython/ceval.pxd +8 -0
  120. Cython/Includes/cpython/codecs.pxd +121 -0
  121. Cython/Includes/cpython/complex.pxd +60 -0
  122. Cython/Includes/cpython/contextvars.pxd +145 -0
  123. Cython/Includes/cpython/conversion.pxd +36 -0
  124. Cython/Includes/cpython/datetime.pxd +395 -0
  125. Cython/Includes/cpython/descr.pxd +26 -0
  126. Cython/Includes/cpython/dict.pxd +187 -0
  127. Cython/Includes/cpython/exc.pxd +263 -0
  128. Cython/Includes/cpython/fileobject.pxd +57 -0
  129. Cython/Includes/cpython/float.pxd +47 -0
  130. Cython/Includes/cpython/function.pxd +65 -0
  131. Cython/Includes/cpython/genobject.pxd +25 -0
  132. Cython/Includes/cpython/getargs.pxd +12 -0
  133. Cython/Includes/cpython/instance.pxd +25 -0
  134. Cython/Includes/cpython/iterator.pxd +36 -0
  135. Cython/Includes/cpython/iterobject.pxd +24 -0
  136. Cython/Includes/cpython/list.pxd +92 -0
  137. Cython/Includes/cpython/long.pxd +149 -0
  138. Cython/Includes/cpython/longintrepr.pxd +14 -0
  139. Cython/Includes/cpython/mapping.pxd +63 -0
  140. Cython/Includes/cpython/marshal.pxd +66 -0
  141. Cython/Includes/cpython/mem.pxd +120 -0
  142. Cython/Includes/cpython/memoryview.pxd +50 -0
  143. Cython/Includes/cpython/method.pxd +49 -0
  144. Cython/Includes/cpython/module.pxd +208 -0
  145. Cython/Includes/cpython/number.pxd +258 -0
  146. Cython/Includes/cpython/object.pxd +433 -0
  147. Cython/Includes/cpython/pycapsule.pxd +143 -0
  148. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  149. Cython/Includes/cpython/pyport.pxd +8 -0
  150. Cython/Includes/cpython/pystate.pxd +95 -0
  151. Cython/Includes/cpython/pythread.pxd +53 -0
  152. Cython/Includes/cpython/ref.pxd +141 -0
  153. Cython/Includes/cpython/sequence.pxd +134 -0
  154. Cython/Includes/cpython/set.pxd +119 -0
  155. Cython/Includes/cpython/slice.pxd +70 -0
  156. Cython/Includes/cpython/time.pxd +129 -0
  157. Cython/Includes/cpython/tuple.pxd +72 -0
  158. Cython/Includes/cpython/type.pxd +53 -0
  159. Cython/Includes/cpython/unicode.pxd +639 -0
  160. Cython/Includes/cpython/version.pxd +32 -0
  161. Cython/Includes/cpython/weakref.pxd +78 -0
  162. Cython/Includes/libc/__init__.pxd +1 -0
  163. Cython/Includes/libc/complex.pxd +35 -0
  164. Cython/Includes/libc/errno.pxd +127 -0
  165. Cython/Includes/libc/float.pxd +43 -0
  166. Cython/Includes/libc/limits.pxd +28 -0
  167. Cython/Includes/libc/locale.pxd +46 -0
  168. Cython/Includes/libc/math.pxd +209 -0
  169. Cython/Includes/libc/setjmp.pxd +10 -0
  170. Cython/Includes/libc/signal.pxd +64 -0
  171. Cython/Includes/libc/stddef.pxd +9 -0
  172. Cython/Includes/libc/stdint.pxd +105 -0
  173. Cython/Includes/libc/stdio.pxd +80 -0
  174. Cython/Includes/libc/stdlib.pxd +72 -0
  175. Cython/Includes/libc/string.pxd +50 -0
  176. Cython/Includes/libc/threads.pxd +234 -0
  177. Cython/Includes/libc/time.pxd +52 -0
  178. Cython/Includes/libcpp/__init__.pxd +4 -0
  179. Cython/Includes/libcpp/algorithm.pxd +320 -0
  180. Cython/Includes/libcpp/any.pxd +16 -0
  181. Cython/Includes/libcpp/atomic.pxd +59 -0
  182. Cython/Includes/libcpp/barrier.pxd +22 -0
  183. Cython/Includes/libcpp/bit.pxd +29 -0
  184. Cython/Includes/libcpp/cast.pxd +12 -0
  185. Cython/Includes/libcpp/cmath.pxd +518 -0
  186. Cython/Includes/libcpp/complex.pxd +106 -0
  187. Cython/Includes/libcpp/condition_variable.pxd +322 -0
  188. Cython/Includes/libcpp/deque.pxd +165 -0
  189. Cython/Includes/libcpp/exception.pxd +86 -0
  190. Cython/Includes/libcpp/execution.pxd +15 -0
  191. Cython/Includes/libcpp/forward_list.pxd +63 -0
  192. Cython/Includes/libcpp/functional.pxd +26 -0
  193. Cython/Includes/libcpp/future.pxd +103 -0
  194. Cython/Includes/libcpp/iterator.pxd +34 -0
  195. Cython/Includes/libcpp/latch.pxd +17 -0
  196. Cython/Includes/libcpp/limits.pxd +61 -0
  197. Cython/Includes/libcpp/list.pxd +117 -0
  198. Cython/Includes/libcpp/map.pxd +252 -0
  199. Cython/Includes/libcpp/memory.pxd +115 -0
  200. Cython/Includes/libcpp/mutex.pxd +387 -0
  201. Cython/Includes/libcpp/numbers.pxd +15 -0
  202. Cython/Includes/libcpp/numeric.pxd +131 -0
  203. Cython/Includes/libcpp/optional.pxd +34 -0
  204. Cython/Includes/libcpp/pair.pxd +1 -0
  205. Cython/Includes/libcpp/queue.pxd +25 -0
  206. Cython/Includes/libcpp/random.pxd +166 -0
  207. Cython/Includes/libcpp/semaphore.pxd +43 -0
  208. Cython/Includes/libcpp/set.pxd +228 -0
  209. Cython/Includes/libcpp/shared_mutex.pxd +96 -0
  210. Cython/Includes/libcpp/span.pxd +87 -0
  211. Cython/Includes/libcpp/stack.pxd +11 -0
  212. Cython/Includes/libcpp/stop_token.pxd +117 -0
  213. Cython/Includes/libcpp/string.pxd +355 -0
  214. Cython/Includes/libcpp/string_view.pxd +183 -0
  215. Cython/Includes/libcpp/typeindex.pxd +15 -0
  216. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  217. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  218. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  219. Cython/Includes/libcpp/utility.pxd +30 -0
  220. Cython/Includes/libcpp/vector.pxd +186 -0
  221. Cython/Includes/numpy/math.pxd +150 -0
  222. Cython/Includes/openmp.pxd +50 -0
  223. Cython/Includes/posix/__init__.pxd +1 -0
  224. Cython/Includes/posix/dlfcn.pxd +14 -0
  225. Cython/Includes/posix/fcntl.pxd +86 -0
  226. Cython/Includes/posix/ioctl.pxd +4 -0
  227. Cython/Includes/posix/mman.pxd +101 -0
  228. Cython/Includes/posix/resource.pxd +57 -0
  229. Cython/Includes/posix/select.pxd +21 -0
  230. Cython/Includes/posix/signal.pxd +73 -0
  231. Cython/Includes/posix/stat.pxd +98 -0
  232. Cython/Includes/posix/stdio.pxd +37 -0
  233. Cython/Includes/posix/stdlib.pxd +29 -0
  234. Cython/Includes/posix/strings.pxd +9 -0
  235. Cython/Includes/posix/time.pxd +71 -0
  236. Cython/Includes/posix/types.pxd +30 -0
  237. Cython/Includes/posix/uio.pxd +26 -0
  238. Cython/Includes/posix/unistd.pxd +271 -0
  239. Cython/Includes/posix/wait.pxd +38 -0
  240. Cython/Plex/Actions.pxd +24 -0
  241. Cython/Plex/Actions.py +119 -0
  242. Cython/Plex/Actions.pyd +0 -0
  243. Cython/Plex/DFA.pxd +14 -0
  244. Cython/Plex/DFA.py +164 -0
  245. Cython/Plex/DFA.pyd +0 -0
  246. Cython/Plex/Errors.py +48 -0
  247. Cython/Plex/Lexicons.py +178 -0
  248. Cython/Plex/Machines.pxd +36 -0
  249. Cython/Plex/Machines.py +238 -0
  250. Cython/Plex/Machines.pyd +0 -0
  251. Cython/Plex/Regexps.py +535 -0
  252. Cython/Plex/Scanners.pxd +45 -0
  253. Cython/Plex/Scanners.py +328 -0
  254. Cython/Plex/Scanners.pyd +0 -0
  255. Cython/Plex/Transitions.pxd +14 -0
  256. Cython/Plex/Transitions.py +239 -0
  257. Cython/Plex/Transitions.pyd +0 -0
  258. Cython/Plex/__init__.py +34 -0
  259. Cython/Runtime/__init__.py +1 -0
  260. Cython/Runtime/refnanny.pyd +0 -0
  261. Cython/Runtime/refnanny.pyx +237 -0
  262. Cython/Shadow.py +690 -0
  263. Cython/Shadow.pyi +521 -0
  264. Cython/StringIOTree.py +170 -0
  265. Cython/StringIOTree.pyd +0 -0
  266. Cython/Tempita/__init__.py +4 -0
  267. Cython/Tempita/_looper.py +154 -0
  268. Cython/Tempita/_tempita.py +1091 -0
  269. Cython/Tempita/_tempita.pyd +0 -0
  270. Cython/TestUtils.py +422 -0
  271. Cython/Tests/TestCodeWriter.py +128 -0
  272. Cython/Tests/TestCythonUtils.py +202 -0
  273. Cython/Tests/TestJediTyper.py +223 -0
  274. Cython/Tests/TestShadow.py +114 -0
  275. Cython/Tests/TestStringIOTree.py +67 -0
  276. Cython/Tests/TestTestUtils.py +90 -0
  277. Cython/Tests/__init__.py +1 -0
  278. Cython/Tests/xmlrunner.py +390 -0
  279. Cython/Utility/AsyncGen.c +1031 -0
  280. Cython/Utility/Buffer.c +865 -0
  281. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  282. Cython/Utility/Builtins.c +810 -0
  283. Cython/Utility/CConvert.pyx +134 -0
  284. Cython/Utility/CMath.c +104 -0
  285. Cython/Utility/CommonStructures.c +226 -0
  286. Cython/Utility/Complex.c +378 -0
  287. Cython/Utility/Coroutine.c +2300 -0
  288. Cython/Utility/CpdefEnums.pyx +103 -0
  289. Cython/Utility/CppConvert.pyx +282 -0
  290. Cython/Utility/CppSupport.cpp +151 -0
  291. Cython/Utility/CythonFunction.c +1832 -0
  292. Cython/Utility/Dataclasses.c +101 -0
  293. Cython/Utility/Embed.c +121 -0
  294. Cython/Utility/Exceptions.c +1016 -0
  295. Cython/Utility/ExtensionTypes.c +996 -0
  296. Cython/Utility/FunctionArguments.c +1043 -0
  297. Cython/Utility/FusedFunction.pyx +44 -0
  298. Cython/Utility/ImportExport.c +907 -0
  299. Cython/Utility/MemoryView.pxd +188 -0
  300. Cython/Utility/MemoryView.pyx +1482 -0
  301. Cython/Utility/MemoryView_C.c +927 -0
  302. Cython/Utility/ModuleSetupCode.c +3203 -0
  303. Cython/Utility/NumpyImportArray.c +46 -0
  304. Cython/Utility/ObjectHandling.c +3273 -0
  305. Cython/Utility/Optimize.c +1603 -0
  306. Cython/Utility/Overflow.c +384 -0
  307. Cython/Utility/Printing.c +86 -0
  308. Cython/Utility/Profile.c +732 -0
  309. Cython/Utility/StringTools.c +1379 -0
  310. Cython/Utility/Synchronization.c +399 -0
  311. Cython/Utility/TString.c +356 -0
  312. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  313. Cython/Utility/TestCythonScope.pyx +75 -0
  314. Cython/Utility/TestUtilityLoader.c +12 -0
  315. Cython/Utility/TypeConversion.c +1385 -0
  316. Cython/Utility/UFuncs.pyx +50 -0
  317. Cython/Utility/UFuncs_C.c +89 -0
  318. Cython/Utility/__init__.py +28 -0
  319. Cython/Utility/arrayarray.h +167 -0
  320. Cython/Utils.py +687 -0
  321. Cython/Utils.pyd +0 -0
  322. Cython/__init__.py +10 -0
  323. Cython/__init__.pyi +7 -0
  324. Cython/py.typed +0 -0
  325. cython-3.2.0.dist-info/METADATA +85 -0
  326. cython-3.2.0.dist-info/RECORD +333 -0
  327. cython-3.2.0.dist-info/WHEEL +5 -0
  328. cython-3.2.0.dist-info/entry_points.txt +4 -0
  329. cython-3.2.0.dist-info/top_level.txt +3 -0
  330. cython.py +29 -0
  331. pyximport/__init__.py +4 -0
  332. pyximport/pyxbuild.py +160 -0
  333. pyximport/pyximport.py +482 -0
@@ -0,0 +1,322 @@
1
+ # cython: preliminary_late_includes_cy28=True
2
+
3
+ from libcpp.mutex cimport unique_lock, mutex
4
+ from libcpp.stop_token cimport stop_token
5
+ from libcpp cimport bool as _bool
6
+
7
+ cdef extern from "<condition_variable>" namespace "std" nogil:
8
+ cdef enum class cv_status:
9
+ no_timeout
10
+ timeout
11
+
12
+ cdef cppclass condition_variable:
13
+ cppclass native_handle_type:
14
+ pass
15
+
16
+ condition_variable() except+
17
+
18
+ void notify_one() noexcept
19
+ void notify_all() noexcept
20
+
21
+ # Be very wary of calling any of the wait functions with the GIL held.
22
+ # Also be a little wary of re-acquiring the GIL in the predicate
23
+ # (because in principle it may deadlock with the lock).
24
+ # The predicate should not require the GIL or throw Python exceptions.
25
+ void wait(unique_lock[mutex]& lock) except+
26
+ void wait[Predicate](unique_lock[mutex]& lock, Predicate pred) except+
27
+
28
+ cv_status wait_for[Duration](unique_lock[mutex]& lock, const Duration &duration) except+
29
+ _bool wait_for[Duration, Predicate](unique_lock[mutex]& lock, const Duration &duration, Predicate pred) except+
30
+ cv_status wait_until[TimePoint](unique_lock[mutex]& lock, const TimePoint& time_point) except+
31
+ _bool wait_until[TimePoint, Predicate](unique_lock[mutex]& lock, const TimePoint& time_point, Predicate pred) except+
32
+
33
+ native_handle_type native_handle() except+
34
+
35
+ cdef cppclass condition_variable_any:
36
+ condition_variable_any() except+
37
+
38
+ void notify_one() noexcept
39
+ void notify_all() noexcept
40
+
41
+ # Be very wary of calling any of the wait functions with the GIL held.
42
+ # Also be a little wary of re-acquiring the GIL in the predicate
43
+ # (because in principle it may deadlock with the lock).
44
+ # The predicate should not require the GIL or throw Python exceptions.
45
+ void wait[Lock](Lock& lock) except+
46
+ void wait[Lock, Predicate](Lock& lock, Predicate pred) except+
47
+ _bool wait[Lock, Predicate](Lock& lock, stop_token stoken, Predicate pred) except+
48
+
49
+ cv_status wait_for[Lock, Duration](Lock& lock, const Duration &duration) except+
50
+ _bool wait_for[Lock, Duration, Predicate](Lock& lock, const Duration &duration, Predicate pred) except+
51
+ _bool wait_for[Lock, Duration, Predicate](Lock& lock, stop_token stoken, const Duration &duration, Predicate pred) except+
52
+ cv_status wait_until[Lock, TimePoint](Lock& lock, const TimePoint &time_point) except+
53
+ _bool wait_until[Lock, TimePoint, Predicate](Lock& lock, const TimePoint &time_point, Predicate pred) except+
54
+ _bool wait_until[Lock, TimePoint, Predicate](Lock& lock, stop_token stoken, const TimePoint &time_point, Predicate pred) except+
55
+
56
+ void notify_all_at_thread_exit(condition_variable& cv, unique_lock[mutex]& lock) except+
57
+
58
+ cdef inline void _dummy_force_utility_code_inclusion() nogil:
59
+ with nogil:
60
+ pass
61
+
62
+ cdef extern from *:
63
+ """
64
+ namespace {
65
+
66
+ template <typename Lock>
67
+ void __Pyx_libcpp_cv_relock_at_end(Lock& lock, __Pyx_UnknownThreadState &ts) {
68
+ if (__Pyx_UnknownThreadStateMayHaveHadGil(ts)) {
69
+ lock.unlock(); // unlocking should not throw
70
+ __Pyx_RestoreUnknownThread(ts);
71
+ // ensure_gil, release_gil and py_safe_std_lock are defined in mutex.pdx
72
+ PyGILState_STATE gil_state = __pyx_libcpp_mutex_limited_api_ensure_gil();
73
+ auto cleanup = __pyx_make_libcpp_mutex_cleanup_on_exit([&gil_state](){
74
+ __pyx_libcpp_mutex_limited_api_release_gil(gil_state);
75
+ });
76
+ __pyx_py_safe_std_lock(lock);
77
+ } else {
78
+ __Pyx_RestoreUnknownThread(ts);
79
+ }
80
+ }
81
+
82
+ template <typename Lock, typename Predicate>
83
+ class __Pyx_libcpp_cv_WrappedPySafePredicate {
84
+ Lock *lock;
85
+ Predicate *pred;
86
+ __Pyx_UnknownThreadState *ts;
87
+ public:
88
+ __Pyx_libcpp_cv_WrappedPySafePredicate(Lock *l, Predicate *p, __Pyx_UnknownThreadState *ts)
89
+ : lock(l)
90
+ , pred(p)
91
+ , ts(ts)
92
+ {}
93
+
94
+ bool operator()() const {
95
+ PyGILState_STATE gil_state;
96
+ lock->unlock();
97
+ int had_gil_on_call = __Pyx_UnknownThreadStateDefinitelyHadGil(*ts);
98
+ if (had_gil_on_call) {
99
+ __Pyx_RestoreUnknownThread(*ts);
100
+ } else {
101
+ gil_state = PyGILState_Ensure();
102
+ }
103
+ auto release_gil = __pyx_make_libcpp_mutex_cleanup_on_exit(
104
+ [&]() {
105
+ if (had_gil_on_call) {
106
+ *ts = __Pyx_SaveUnknownThread();
107
+ } else {
108
+ PyGILState_Release(gil_state);
109
+ }
110
+ });
111
+ __pyx_py_safe_std_lock(*lock);
112
+ // No need to unlock - the condition variable is responsible for that and it shouldn't be possible
113
+ // to deadlock from here.
114
+ bool result = (*pred)();
115
+ if (PyErr_Occurred()) {
116
+ // The PyErr_Occurred check in __Pyx_CppExn2PyErr will deal with
117
+ // presenting the exception to Cython.
118
+ throw std::exception();
119
+ }
120
+ return result;
121
+ }
122
+ };
123
+
124
+ template <typename Lock, typename Predicate>
125
+ __Pyx_libcpp_cv_WrappedPySafePredicate<Lock, Predicate> __Pyx_libcpp_cv_py_safe_wrap_predicate(Lock* lock, Predicate* pred, __Pyx_UnknownThreadState* ts) {
126
+ return __Pyx_libcpp_cv_WrappedPySafePredicate<Lock, Predicate>(lock, pred, ts);
127
+ }
128
+
129
+ class __Pyx_libcpp_cv_WrappedPyObjectPredicate {
130
+ PyObject *pred; // unowned
131
+ public:
132
+ explicit __Pyx_libcpp_cv_WrappedPyObjectPredicate(PyObject *pred) : pred(pred) {}
133
+
134
+ bool operator()() const {
135
+ PyObject *res = PyObject_CallObject(pred, nullptr);
136
+ if (res) {
137
+ auto is_true = PyObject_IsTrue(res);
138
+ Py_DECREF(res);
139
+ return is_true; // exceptions don't matter - we have a PyErr_Occurred check outside
140
+ }
141
+ return false; // we have a PyErr_Occurred check outside
142
+ }
143
+ };
144
+
145
+ inline bool __Pyx_libcpp_cv_dummy_predicate() { return true; } // Just used for type deduction, not called
146
+
147
+ template <typename Lock, typename CV_T>
148
+ void __Pyx_libcpp_cv_py_safe_wait_2arg(CV_T& cv, Lock& lock) {
149
+ __Pyx_UnknownThreadState ts = __Pyx_SaveUnknownThread();
150
+ auto cleanup = __pyx_make_libcpp_mutex_cleanup_on_exit(
151
+ [&ts, &lock](){
152
+ __Pyx_libcpp_cv_relock_at_end(lock, ts);
153
+ }
154
+ );
155
+ cv.wait(lock);
156
+ }
157
+
158
+ template <typename Lock, typename Predicate, typename CV_T, typename ...Args>
159
+ auto __Pyx_libcpp_cv_py_safe_wait_impl(CV_T& cv, Lock& lock, Predicate pred, Args&&... args)
160
+ -> decltype(cv.wait(lock, std::forward<Args>(args)..., __Pyx_libcpp_cv_dummy_predicate)) {
161
+ __Pyx_UnknownThreadState ts = __Pyx_SaveUnknownThread();
162
+ auto cleanup = __pyx_make_libcpp_mutex_cleanup_on_exit(
163
+ [&ts, &lock](){
164
+ __Pyx_libcpp_cv_relock_at_end(lock, ts);
165
+ });
166
+ return cv.wait(lock, std::forward<Args>(args)..., __Pyx_libcpp_cv_py_safe_wrap_predicate(&lock, &pred, &ts));
167
+ }
168
+
169
+ template <typename Predicate, typename Lock, typename CV>
170
+ void __Pyx_libcpp_cv_py_safe_wait_3arg(CV& cv, Lock& lock, Predicate predicate) {
171
+ return __Pyx_libcpp_cv_py_safe_wait_impl(cv, lock, std::move(predicate));
172
+ }
173
+
174
+ // StopToken only templated not break c++11 (where std::stop_token doesn't yet exist)
175
+ template <typename Lock, typename Predicate, typename StopToken>
176
+ bool __Pyx_libcpp_cv_py_safe_wait_4arg(std::condition_variable_any& cv, Lock& lock, StopToken stoken, Predicate pred) {
177
+ // note in impl, predicate comes first
178
+ return __Pyx_libcpp_cv_py_safe_wait_impl(cv, lock, std::move(pred), std::move(stoken));
179
+ }
180
+
181
+ template <typename Lock, typename CV_T>
182
+ void __Pyx_libcpp_cv_py_safe_wait_object3(CV_T& cv, Lock& lock, PyObject *pred) {
183
+ __Pyx_libcpp_cv_py_safe_wait_impl(
184
+ cv, lock,
185
+ __Pyx_libcpp_cv_WrappedPyObjectPredicate(pred));
186
+ }
187
+
188
+ template <typename Lock, typename CV_T, typename StopToken>
189
+ bool __Pyx_libcpp_cv_py_safe_wait_object4(CV_T& cv, Lock& lock, StopToken st, PyObject *pred) {
190
+ return __Pyx_libcpp_cv_py_safe_wait_impl(
191
+ cv, lock,
192
+ __Pyx_libcpp_cv_WrappedPyObjectPredicate(pred),
193
+ std::move(st));
194
+ }
195
+
196
+ template <typename Duration, typename Lock, typename CV_T>
197
+ std::cv_status __Pyx_libcpp_cv_py_safe_wait_for_3arg(CV_T& cv, Lock& lock, const Duration& duration) {
198
+ __Pyx_UnknownThreadState ts = __Pyx_SaveUnknownThread();
199
+ auto cleanup = __pyx_make_libcpp_mutex_cleanup_on_exit(
200
+ [&ts, &lock](){
201
+ __Pyx_libcpp_cv_relock_at_end(lock, ts);
202
+ }
203
+ );
204
+ return cv.wait_for(lock, duration);
205
+ }
206
+
207
+ template <typename Duration, typename Lock, typename Predicate, typename CV_T, typename ...Args>
208
+ bool __Pyx_libcpp_cv_py_safe_wait_for_impl(CV_T& cv, Lock& lock, const Duration &duration, Predicate pred, Args&&... args) {
209
+ __Pyx_UnknownThreadState ts = __Pyx_SaveUnknownThread();
210
+ auto cleanup = __pyx_make_libcpp_mutex_cleanup_on_exit(
211
+ [&ts, &lock](){
212
+ __Pyx_libcpp_cv_relock_at_end(lock, ts);
213
+ });
214
+ return cv.wait_for(lock, std::forward<Args>(args)..., duration, __Pyx_libcpp_cv_py_safe_wrap_predicate(&lock, &pred, &ts));
215
+ }
216
+
217
+ template <typename Duration, typename Predicate, typename Lock, typename CV>
218
+ bool __Pyx_libcpp_cv_py_safe_wait_for_4arg(CV& cv, Lock& lock, const Duration& duration, Predicate predicate) {
219
+ return __Pyx_libcpp_cv_py_safe_wait_for_impl(cv, lock, duration, std::move(predicate));
220
+ }
221
+
222
+ template <typename Duration, typename Predicate, typename Lock, typename CV, typename StopToken>
223
+ bool __Pyx_libcpp_cv_py_safe_wait_for_5arg(CV& cv, Lock& lock, StopToken stop_token, const Duration& duration, Predicate predicate) {
224
+ return __Pyx_libcpp_cv_py_safe_wait_for_impl(cv, lock, duration, std::move(predicate), std::move(stop_token));
225
+ }
226
+
227
+ template <typename Duration, typename Lock, typename CV_T>
228
+ bool __Pyx_libcpp_cv_py_safe_wait_for_object4(CV_T& cv, Lock& lock, const Duration& duration, PyObject *pred) {
229
+ return __Pyx_libcpp_cv_py_safe_wait_for_impl(
230
+ cv, lock, duration,
231
+ __Pyx_libcpp_cv_WrappedPyObjectPredicate(pred));
232
+ }
233
+
234
+ template <typename Duration, typename Lock, typename CV_T, typename StopToken>
235
+ bool __Pyx_libcpp_cv_py_safe_wait_for_object5(CV_T& cv, Lock& lock, StopToken st, const Duration& duration, PyObject *pred) {
236
+ return __Pyx_libcpp_cv_py_safe_wait_for_impl(
237
+ cv, lock, duration,
238
+ __Pyx_libcpp_cv_WrappedPyObjectPredicate(pred),
239
+ std::move(st));
240
+ }
241
+
242
+ template <typename Timepoint, typename Lock, typename CV_T>
243
+ std::cv_status __Pyx_libcpp_cv_py_safe_wait_until_3arg(CV_T& cv, Lock& lock, const Timepoint& timepoint) {
244
+ __Pyx_UnknownThreadState ts = __Pyx_SaveUnknownThread();
245
+ auto cleanup = __pyx_make_libcpp_mutex_cleanup_on_exit(
246
+ [&ts, &lock](){
247
+ __Pyx_libcpp_cv_relock_at_end(lock, ts);
248
+ }
249
+ );
250
+ return cv.wait_until(lock, timepoint);
251
+ }
252
+
253
+ template <typename Timepoint, typename Lock, typename Predicate, typename CV_T, typename ...Args>
254
+ bool __Pyx_libcpp_cv_py_safe_wait_until_impl(CV_T& cv, Lock& lock, const Timepoint &timepoint, Predicate pred, Args&&... args) {
255
+ __Pyx_UnknownThreadState ts = __Pyx_SaveUnknownThread();
256
+ auto cleanup = __pyx_make_libcpp_mutex_cleanup_on_exit(
257
+ [&ts, &lock](){
258
+ __Pyx_libcpp_cv_relock_at_end(lock, ts);
259
+ });
260
+ return cv.wait_until(lock, std::forward<Args>(args)..., timepoint, __Pyx_libcpp_cv_py_safe_wrap_predicate(&lock, &pred, &ts));
261
+ }
262
+
263
+ template <typename Timepoint, typename Predicate, typename Lock, typename CV>
264
+ bool __Pyx_libcpp_cv_py_safe_wait_until_4arg(CV& cv, Lock& lock, const Timepoint& timepoint, Predicate predicate) {
265
+ return __Pyx_libcpp_cv_py_safe_wait_until_impl(cv, lock, timepoint, std::move(predicate));
266
+ }
267
+
268
+ template <typename Timepoint, typename Predicate, typename Lock, typename CV, typename StopToken>
269
+ bool __Pyx_libcpp_cv_py_safe_wait_until_5arg(CV& cv, Lock& lock, StopToken stop_token, const Timepoint& timepoint, Predicate predicate) {
270
+ return __Pyx_libcpp_cv_py_safe_wait_until_impl(cv, lock, timepoint, std::move(predicate), std::move(stop_token));
271
+ }
272
+
273
+ template <typename Timepoint, typename Lock, typename CV_T>
274
+ bool __Pyx_libcpp_cv_py_safe_wait_until_object4(CV_T& cv, Lock& lock, const Timepoint& timepoint, PyObject *pred) {
275
+ return __Pyx_libcpp_cv_py_safe_wait_until_impl(
276
+ cv, lock, timepoint,
277
+ __Pyx_libcpp_cv_WrappedPyObjectPredicate(pred));
278
+ }
279
+
280
+ template <typename Timepoint, typename Lock, typename CV_T, typename StopToken>
281
+ bool __Pyx_libcpp_cv_py_safe_wait_until_object5(CV_T& cv, Lock& lock, StopToken st, const Timepoint& timepoint, PyObject *pred) {
282
+ return __Pyx_libcpp_cv_py_safe_wait_until_impl(
283
+ cv, lock, timepoint,
284
+ __Pyx_libcpp_cv_WrappedPyObjectPredicate(pred),
285
+ std::move(st));
286
+ }
287
+
288
+ } // namespace
289
+ """
290
+ # py_safe functions:
291
+ # * Release the GIL when blocking
292
+ # * Restore the GIL to whatever state it was when called (without deadlock)
293
+ # * Hold the GIL while evaluating the predicate (without deadlock)
294
+ # * Can accept a Python object callable predicate
295
+ # The condition_variable_any versions require a lockable class that implements try_lock in addition to lock and unlock
296
+ #
297
+ void py_safe_wait "__Pyx_libcpp_cv_py_safe_wait_2arg" (condition_variable& cv, unique_lock[mutex]& lock) except+ nogil
298
+ void py_safe_object_wait "__Pyx_libcpp_cv_py_safe_wait_object3" (condition_variable& cv, unique_lock[mutex]& lock, object predicate) except+
299
+ void py_safe_wait "__Pyx_libcpp_cv_py_safe_wait_3arg" [Predicate](condition_variable& cv, unique_lock[mutex]& lock, Predicate predicate) except+ nogil
300
+ void py_safe_wait "__Pyx_libcpp_cv_py_safe_wait_2arg" [Lock](condition_variable_any& cv, Lock& lock) except+ nogil
301
+ void py_safe_object_wait "__Pyx_libcpp_cv_py_safe_wait_object3" [Lock](condition_variable_any& cv, Lock& lock, object predicate) except+
302
+ void py_safe_wait "__Pyx_libcpp_cv_py_safe_wait_3arg" [Predicate, Lock](condition_variable_any& cv, Lock& lock, Predicate predicate) except+ nogil
303
+ _bool py_safe_object_wait "__Pyx_libcpp_cv_py_safe_wait_object4" [Lock](condition_variable_any& cv, Lock& lock, stop_token stoken, object predicate) except+
304
+ _bool py_safe_wait "__Pyx_libcpp_cv_py_safe_wait_4arg" [Lock, Predicate](condition_variable_any& cv, Lock& lock, stop_token stoken, Predicate predicate) except+ nogil
305
+
306
+ cv_status py_safe_wait_for "__Pyx_libcpp_cv_py_safe_wait_for_3arg" [Duration](condition_variable& cv, unique_lock[mutex]& lock, const Duration &duration) except+ nogil
307
+ _bool py_safe_object_wait_for "__Pyx_libcpp_cv_py_safe_wait_for_object4" [Duration](condition_variable& cv, unique_lock[mutex]& lock, const Duration &duration, object pred) except+
308
+ _bool py_safe_wait_for "__Pyx_libcpp_cv_py_safe_wait_for_4arg" [Duration, Predicate](condition_variable& cv, unique_lock[mutex]& lock, const Duration &duration, Predicate pred) except+ nogil
309
+ cv_status py_safe_wait_for "__Pyx_libcpp_cv_py_safe_wait_for_3arg" [Duration, Lock](condition_variable_any& cv, Lock& lock, const Duration &duration) except+ nogil
310
+ _bool py_safe_object_wait_for "__Pyx_libcpp_cv_py_safe_wait_for_object4" [Duration, Lock](condition_variable_any& cv, Lock& lock, const Duration &duration, object pred) except+
311
+ _bool py_safe_wait_for "__Pyx_libcpp_cv_py_safe_wait_for_4arg" [Duration, Predicate, Lock](condition_variable_any& cv, Lock& lock, const Duration &duration, Predicate pred) except+ nogil
312
+ _bool py_safe_object_wait_for "__Pyx_libcpp_cv_py_safe_wait_for_object5" [Duration, Lock](condition_variable_any& cv, Lock& lock, stop_token stoken, const Duration &duration, object pred) except+
313
+ _bool py_safe_wait_for "__Pyx_libcpp_cv_py_safe_wait_for_5arg" [Duration, Predicate, Lock](condition_variable_any& cv, Lock& lock, stop_token stoken, const Duration &duration, Predicate pred) except+ nogil
314
+
315
+ cv_status py_safe_wait_until "__Pyx_libcpp_cv_py_safe_wait_until_3arg" [Timepoint](condition_variable& cv, unique_lock[mutex]& lock, const Timepoint &timepoint) except+ nogil
316
+ _bool py_safe_object_wait_until "__Pyx_libcpp_cv_py_safe_wait_until_object4" [Timepoint](condition_variable& cv, unique_lock[mutex]& lock, const Timepoint &timepoint, object pred) except+
317
+ _bool py_safe_wait_until "__Pyx_libcpp_cv_py_safe_wait_until_4arg" [Timepoint, Predicate](condition_variable& cv, unique_lock[mutex]& lock, const Timepoint &timepoint, Predicate pred) except+ nogil
318
+ cv_status py_safe_wait_until "__Pyx_libcpp_cv_py_safe_wait_until_3arg" [Timepoint, Lock](condition_variable_any& cv, Lock& lock, const Timepoint &timepoint) except+ nogil
319
+ _bool py_safe_object_wait_until "__Pyx_libcpp_cv_py_safe_wait_until_object4" [Timepoint, Lock](condition_variable_any& cv, Lock& lock, const Timepoint &timepoint, object pred) except+
320
+ _bool py_safe_wait_until "__Pyx_libcpp_cv_py_safe_wait_until_4arg" [Timepoint, Predicate, Lock](condition_variable_any& cv, Lock& lock, const Timepoint &timepoint, Predicate pred) except+ nogil
321
+ _bool py_safe_object_wait_until "__Pyx_libcpp_cv_py_safe_wait_until_object5" [Timepoint, Lock](condition_variable_any& cv, Lock& lock, stop_token stoken, const Timepoint &timepoint, object pred) except+
322
+ _bool py_safe_wait_until "__Pyx_libcpp_cv_py_safe_wait_until_5arg" [Timepoint, Predicate, Lock](condition_variable_any& cv, Lock& lock, stop_token stoken, const Timepoint &timepoint, Predicate pred) except+ nogil
@@ -0,0 +1,165 @@
1
+ cdef extern from "<deque>" namespace "std" nogil:
2
+ cdef cppclass deque[T,ALLOCATOR=*]:
3
+ ctypedef T value_type
4
+ ctypedef ALLOCATOR allocator_type
5
+
6
+ # these should really be allocator_type.size_type and
7
+ # allocator_type.difference_type to be true to the C++ definition
8
+ # but cython doesn't support deferred access on template arguments
9
+ ctypedef size_t size_type
10
+ ctypedef ptrdiff_t difference_type
11
+
12
+ cppclass const_iterator
13
+ cppclass iterator:
14
+ iterator() except +
15
+ iterator(iterator&) except +
16
+ value_type& operator*()
17
+ iterator operator++()
18
+ iterator operator--()
19
+ iterator operator++(int)
20
+ iterator operator--(int)
21
+ iterator operator+(size_type)
22
+ iterator operator-(size_type)
23
+ difference_type operator-(iterator)
24
+ difference_type operator-(const_iterator)
25
+ bint operator==(iterator)
26
+ bint operator==(const_iterator)
27
+ bint operator!=(iterator)
28
+ bint operator!=(const_iterator)
29
+ bint operator<(iterator)
30
+ bint operator<(const_iterator)
31
+ bint operator>(iterator)
32
+ bint operator>(const_iterator)
33
+ bint operator<=(iterator)
34
+ bint operator<=(const_iterator)
35
+ bint operator>=(iterator)
36
+ bint operator>=(const_iterator)
37
+ cppclass const_iterator:
38
+ const_iterator() except +
39
+ const_iterator(iterator&) except +
40
+ const_iterator(const_iterator&) except +
41
+ operator=(iterator&) except +
42
+ const value_type& operator*()
43
+ const_iterator operator++()
44
+ const_iterator operator--()
45
+ const_iterator operator++(int)
46
+ const_iterator operator--(int)
47
+ const_iterator operator+(size_type)
48
+ const_iterator operator-(size_type)
49
+ difference_type operator-(iterator)
50
+ difference_type operator-(const_iterator)
51
+ bint operator==(iterator)
52
+ bint operator==(const_iterator)
53
+ bint operator!=(iterator)
54
+ bint operator!=(const_iterator)
55
+ bint operator<(iterator)
56
+ bint operator<(const_iterator)
57
+ bint operator>(iterator)
58
+ bint operator>(const_iterator)
59
+ bint operator<=(iterator)
60
+ bint operator<=(const_iterator)
61
+ bint operator>=(iterator)
62
+ bint operator>=(const_iterator)
63
+
64
+ cppclass const_reverse_iterator
65
+ cppclass reverse_iterator:
66
+ reverse_iterator() except +
67
+ reverse_iterator(reverse_iterator&) except +
68
+ value_type& operator*()
69
+ reverse_iterator operator++()
70
+ reverse_iterator operator--()
71
+ reverse_iterator operator++(int)
72
+ reverse_iterator operator--(int)
73
+ reverse_iterator operator+(size_type)
74
+ reverse_iterator operator-(size_type)
75
+ difference_type operator-(iterator)
76
+ difference_type operator-(const_iterator)
77
+ bint operator==(reverse_iterator)
78
+ bint operator==(const_reverse_iterator)
79
+ bint operator!=(reverse_iterator)
80
+ bint operator!=(const_reverse_iterator)
81
+ bint operator<(reverse_iterator)
82
+ bint operator<(const_reverse_iterator)
83
+ bint operator>(reverse_iterator)
84
+ bint operator>(const_reverse_iterator)
85
+ bint operator<=(reverse_iterator)
86
+ bint operator<=(const_reverse_iterator)
87
+ bint operator>=(reverse_iterator)
88
+ bint operator>=(const_reverse_iterator)
89
+ cppclass const_reverse_iterator:
90
+ const_reverse_iterator() except +
91
+ const_reverse_iterator(reverse_iterator&) except +
92
+ operator=(reverse_iterator&) except +
93
+ const value_type& operator*()
94
+ const_reverse_iterator operator++()
95
+ const_reverse_iterator operator--()
96
+ const_reverse_iterator operator++(int)
97
+ const_reverse_iterator operator--(int)
98
+ const_reverse_iterator operator+(size_type)
99
+ const_reverse_iterator operator-(size_type)
100
+ difference_type operator-(iterator)
101
+ difference_type operator-(const_iterator)
102
+ bint operator==(reverse_iterator)
103
+ bint operator==(const_reverse_iterator)
104
+ bint operator!=(reverse_iterator)
105
+ bint operator!=(const_reverse_iterator)
106
+ bint operator<(reverse_iterator)
107
+ bint operator<(const_reverse_iterator)
108
+ bint operator>(reverse_iterator)
109
+ bint operator>(const_reverse_iterator)
110
+ bint operator<=(reverse_iterator)
111
+ bint operator<=(const_reverse_iterator)
112
+ bint operator>=(reverse_iterator)
113
+ bint operator>=(const_reverse_iterator)
114
+
115
+ deque() except +
116
+ deque(deque&) except +
117
+ deque(size_t) except +
118
+ deque(size_t, T&) except +
119
+ #deque[InputIt](InputIt, InputIt)
120
+ T& operator[](size_t)
121
+ #deque& operator=(deque&)
122
+ bint operator==(deque&, deque&)
123
+ bint operator!=(deque&, deque&)
124
+ bint operator<(deque&, deque&)
125
+ bint operator>(deque&, deque&)
126
+ bint operator<=(deque&, deque&)
127
+ bint operator>=(deque&, deque&)
128
+ void assign(size_t, T&) except +
129
+ void assign[InputIt](InputIt, InputIt) except +
130
+ T& at(size_t) except +
131
+ T& back()
132
+ iterator begin()
133
+ const_iterator const_begin "begin"()
134
+ const_iterator cbegin()
135
+ void clear()
136
+ bint empty()
137
+ iterator end()
138
+ const_iterator const_end "end"()
139
+ const_iterator cend()
140
+ iterator erase(iterator) except +
141
+ iterator erase(iterator, iterator) except +
142
+ T& front()
143
+ iterator insert(iterator, T&) except +
144
+ void insert(iterator, size_t, T&) except +
145
+ void insert[InputIt](iterator, InputIt, InputIt) except +
146
+ size_t max_size()
147
+ void pop_back()
148
+ void pop_front()
149
+ void push_back(T&) except +
150
+ void push_front(T&) except +
151
+ reverse_iterator rbegin()
152
+ #const_reverse_iterator rbegin()
153
+ const_reverse_iterator crbegin()
154
+ reverse_iterator rend()
155
+ #const_reverse_iterator rend()
156
+ const_reverse_iterator crend()
157
+ void resize(size_t) except +
158
+ void resize(size_t, T&) except +
159
+ size_t size()
160
+ void swap(deque&)
161
+
162
+ # C++11 methods
163
+ void shrink_to_fit() except +
164
+ T& emplace_front(...) except +
165
+ T& emplace_back(...) except +
@@ -0,0 +1,86 @@
1
+ from libcpp cimport bool
2
+
3
+ cdef extern from "<exception>" namespace "std" nogil:
4
+ cdef cppclass exception_ptr:
5
+ bool operator bool()
6
+
7
+ exception_ptr make_exception_ptr[E](E e) noexcept
8
+ void rethrow_exception(exception_ptr) except +
9
+ # current_exception skipped because it'll be almost impossible to use from Cython
10
+
11
+ cdef extern from *:
12
+ """
13
+ static void __Pyx_CppExn2PyErr(void);
14
+
15
+ CYTHON_UNUSED static void __pyx_deallocate_exception_ptr_capsule(PyObject *c) {
16
+ std::exception_ptr *ptr = static_cast<std::exception_ptr*>(
17
+ PyCapsule_GetPointer(c, "std::exception_ptr wrapper"));
18
+ delete ptr;
19
+ PyErr_Clear();
20
+ }
21
+
22
+ CYTHON_UNUSED static void __pyx_to_exception_ptr() {
23
+ try {
24
+ __Pyx_CppExn2PyErr(); // First do regular exception conversion
25
+ throw;
26
+ } catch (...) {
27
+ PyObject *type, *value, *tb;
28
+ PyErr_Fetch(&type, &value, &tb);
29
+ Py_XDECREF(value);
30
+ Py_XDECREF(tb);
31
+ std::exception_ptr *current = new std::exception_ptr(std::current_exception());
32
+ PyObject *capsule = PyCapsule_New(
33
+ static_cast<void*>(current),
34
+ "std::exception_ptr wrapper",
35
+ &__pyx_deallocate_exception_ptr_capsule);
36
+ if (!capsule)
37
+ delete current; // otherwise it'll be leaked
38
+ else
39
+ PyErr_SetObject(type ? type : PyExc_Exception, capsule);
40
+ Py_DECREF(type);
41
+ }
42
+ }
43
+
44
+ CYTHON_UNUSED static std::exception_ptr __pyx_wrapped_exception_ptr_from_exception(PyObject *e) {
45
+ PyObject *args = NULL, *arg0 = NULL;
46
+ std::exception_ptr result;
47
+ Py_ssize_t size;
48
+ #if __PYX_LIMITED_VERSION_HEX < 0x030C0000
49
+ args = PyObject_GetAttrString(e, "args");
50
+ #else
51
+ args = PyException_GetArgs(e);
52
+ #endif
53
+ if (!args)
54
+ goto done;
55
+ size = PyTuple_Size(args);
56
+ if (size != 1) {
57
+ if (size != -1)
58
+ PyErr_SetString(PyExc_ValueError, "exception args were not the expected length of 1");
59
+ goto done;
60
+ }
61
+ arg0 = PyTuple_GetItem(args, 0);
62
+ if (!arg0)
63
+ goto done;
64
+ {
65
+ std::exception_ptr* wrapped = static_cast<std::exception_ptr*>(
66
+ PyCapsule_GetPointer(arg0, "std::exception_ptr wrapper"));
67
+ if (!wrapped) {
68
+ goto done;
69
+ }
70
+ result = *wrapped;
71
+ }
72
+
73
+ done:
74
+ Py_XDECREF(args);
75
+ return result;
76
+ }
77
+ """
78
+ # This can be used as `except +exception_ptr_error_handler`.
79
+ # It raises a generic Exception, with a wrapped exception_ptr as its value.
80
+ void exception_ptr_error_handler "__pyx_to_exception_ptr"() except *
81
+ # Extract the exception_ptr from a caught exception
82
+ exception_ptr wrapped_exception_ptr_from_exception "__pyx_wrapped_exception_ptr_from_exception"(e) except *
83
+
84
+ # Dummy inline function to force __Pyx_CppExn2PyErr to be included for utility code above
85
+ cdef inline void __pyx_call_rethrow_exception "__pyx_call_rethrow_exception"(exception_ptr e) except*:
86
+ rethrow_exception(e)
@@ -0,0 +1,15 @@
1
+
2
+ cdef extern from "<execution>" namespace "std::execution" nogil:
3
+ cdef cppclass sequenced_policy:
4
+ pass
5
+ cdef cppclass parallel_policy:
6
+ pass
7
+ cdef cppclass parallel_unsequenced_policy:
8
+ pass
9
+ cdef cppclass unsequenced_policy:
10
+ pass
11
+
12
+ const sequenced_policy seq "std::execution::seq"
13
+ const parallel_policy par "std::execution::par"
14
+ const parallel_unsequenced_policy par_unseq "std::execution::par_unseq"
15
+ const unsequenced_policy unseq "std::execution::unseq"
@@ -0,0 +1,63 @@
1
+ cdef extern from "<forward_list>" namespace "std" nogil:
2
+ cdef cppclass forward_list[T,ALLOCATOR=*]:
3
+ ctypedef T value_type
4
+ ctypedef ALLOCATOR allocator_type
5
+
6
+ # these should really be allocator_type.size_type and
7
+ # allocator_type.difference_type to be true to the C++ definition
8
+ # but cython doesn't support deferred access on template arguments
9
+ ctypedef size_t size_type
10
+ ctypedef ptrdiff_t difference_type
11
+
12
+ cppclass iterator:
13
+ iterator()
14
+ iterator(iterator &)
15
+ T& operator*()
16
+ iterator operator++()
17
+ iterator operator++(int)
18
+ bint operator==(iterator)
19
+ bint operator!=(iterator)
20
+ cppclass const_iterator(iterator):
21
+ pass
22
+ forward_list() except +
23
+ forward_list(forward_list&) except +
24
+ forward_list(size_t, T&) except +
25
+ #forward_list& operator=(forward_list&)
26
+ bint operator==(forward_list&, forward_list&)
27
+ bint operator!=(forward_list&, forward_list&)
28
+ bint operator<(forward_list&, forward_list&)
29
+ bint operator>(forward_list&, forward_list&)
30
+ bint operator<=(forward_list&, forward_list&)
31
+ bint operator>=(forward_list&, forward_list&)
32
+ void assign(size_t, T&)
33
+ T& front()
34
+ iterator before_begin()
35
+ const_iterator const_before_begin "before_begin"()
36
+ iterator begin()
37
+ const_iterator const_begin "begin"()
38
+ iterator end()
39
+ const_iterator const_end "end"()
40
+ bint empty()
41
+ size_t max_size()
42
+ void clear()
43
+ iterator insert_after(iterator, T&)
44
+ void insert_after(iterator, size_t, T&)
45
+ iterator erase_after(iterator)
46
+ iterator erase_after(iterator, iterator)
47
+ void push_front(T&)
48
+ void pop_front()
49
+ void resize(size_t)
50
+ void resize(size_t, T&)
51
+ void swap(forward_list&)
52
+ void merge(forward_list&)
53
+ void merge[Compare](forward_list&, Compare)
54
+ void splice_after(iterator, forward_list&)
55
+ void splice_after(iterator, forward_list&, iterator)
56
+ void splice_after(iterator, forward_list&, iterator, iterator)
57
+ void remove(const T&)
58
+ void remove_if[Predicate](Predicate)
59
+ void reverse()
60
+ void unique()
61
+ void unique[Predicate](Predicate)
62
+ void sort()
63
+ void sort[Compare](Compare)
@@ -0,0 +1,26 @@
1
+ from libcpp cimport bool
2
+
3
+ cdef extern from "<functional>" namespace "std" nogil:
4
+ cdef cppclass function[T]:
5
+ function() except +
6
+ function(T*) except +
7
+ function(function&) except +
8
+ function(void*) except +
9
+
10
+ function operator=(T*)
11
+ function operator=(function&)
12
+ function operator=(void*)
13
+ function operator=[U](U)
14
+
15
+ bool operator bool()
16
+
17
+ # Comparisons
18
+ cdef cppclass greater[T=*]:
19
+ # https://github.com/cython/cython/issues/3193
20
+ greater() except +
21
+ bool operator()(const T& lhs, const T& rhs) except +
22
+
23
+ cdef cppclass reference_wrapper[T]:
24
+ reference_wrapper()
25
+ reference_wrapper(T)
26
+ T& get() const