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,103 @@
1
+ #################### EnumBase ####################
2
+
3
+ cimport cython
4
+
5
+ cdef extern from *:
6
+ int PY_VERSION_HEX
7
+
8
+ # @cython.internal
9
+ cdef object __Pyx_EnumBase
10
+ from enum import IntEnum as __Pyx_EnumBase
11
+
12
+ cdef object __Pyx_FlagBase
13
+ from enum import IntFlag as __Pyx_FlagBase
14
+
15
+ #################### EnumType ####################
16
+ #@requires: EnumBase
17
+
18
+ cdef extern from *:
19
+ object {{enum_to_pyint_func}}({{name}} value)
20
+
21
+ # create new IntFlag() - the assumption is that C enums are sufficiently commonly
22
+ # used as flags that this is the most appropriate base class
23
+ {{name}} = __Pyx_FlagBase('{{name}}', [
24
+ {{for item in items}}
25
+ ('{{item}}', {{enum_to_pyint_func}}({{item}})),
26
+ {{endfor}}
27
+ # Try to look up the module name dynamically if possible
28
+ ], module=globals().get("__module__", '{{static_modname}}'))
29
+
30
+ if PY_VERSION_HEX >= 0x030B0000:
31
+ # Python 3.11 starts making the behaviour of flags stricter
32
+ # (only including powers of 2 when iterating). Since we're using
33
+ # "flag" because C enums *might* be used as flags, not because
34
+ # we want strict flag behaviour, manually undo some of this.
35
+ {{name}}._member_names_ = list({{name}}.__members__)
36
+
37
+ {{if enum_doc is not None}}
38
+ {{name}}.__doc__ = {{ repr(enum_doc) }}
39
+ {{endif}}
40
+
41
+
42
+ #################### CppScopedEnumType ####################
43
+ #@requires: EnumBase
44
+ cdef dict __Pyx_globals = globals()
45
+
46
+ __Pyx_globals["{{name}}"] = __Pyx_EnumBase('{{name}}', [
47
+ {{for item in items}}
48
+ ('{{item}}', <{{underlying_type}}>({{name}}.{{item}})),
49
+ {{endfor}}
50
+ ], module=__Pyx_globals.get("__module__", '{{static_modname}}'))
51
+
52
+ {{if enum_doc is not None}}
53
+ __Pyx_globals["{{name}}"].__doc__ = {{ repr(enum_doc) }}
54
+ {{endif}}
55
+
56
+
57
+ #################### EnumTypeToPy ####################
58
+
59
+ {{if module_name}}
60
+ cdef object __pyx_imported_enum_{{funcname}} = None
61
+ {{endif}}
62
+
63
+ @cname("{{funcname}}")
64
+ cdef {{funcname}}({{name}} c_val):
65
+ cdef object __pyx_enum
66
+ {{if module_name}}
67
+ global __pyx_imported_enum_{{funcname}}
68
+ # There's a complication here: the Python enum wrapping is only generated
69
+ # for enums defined in the same module that they're used in. Therefore, if
70
+ # the enum was cimported from a different module, we try to import it.
71
+ # If that fails we return an int equivalent as the next best option.
72
+ if __pyx_imported_enum_{{funcname}} is None:
73
+ try:
74
+ from {{module_name}} import {{name}} as __pyx_imported_enum_{{funcname}}
75
+ except ImportError:
76
+ __pyx_imported_enum_{{funcname}} = False # False indicates "don't try again"
77
+ import warnings
78
+ warnings.warn(
79
+ f"enum class {{name}} not importable from {{module_name}}. "
80
+ "You are probably using a cpdef enum declared in a .pxd file that "
81
+ "does not have a .py or .pyx file.")
82
+ if __pyx_imported_enum_{{funcname}} is False:
83
+ # shortcut - if the import failed there's no point repeating it
84
+ # (and repeating the warning)
85
+ return <{{underlying_type}}>c_val
86
+ __pyx_enum = __pyx_imported_enum_{{funcname}}
87
+ {{else}}
88
+ __pyx_enum = {{name}}
89
+ {{endif}}
90
+ # TODO - Cython only manages to optimize C enums to a switch currently
91
+ if 0:
92
+ pass
93
+ {{for item in items}}
94
+ elif c_val == {{name}}.{{item}}:
95
+ return __pyx_enum.{{item}}
96
+ {{endfor}}
97
+ else:
98
+ underlying_c_val = <{{underlying_type}}>c_val
99
+ {{if is_flag}}
100
+ return __pyx_enum(underlying_c_val)
101
+ {{else}}
102
+ raise ValueError(f"{underlying_c_val} is not a valid {{name}}")
103
+ {{endif}}
@@ -0,0 +1,282 @@
1
+ # TODO: Figure out how many of the pass-by-value copies the compiler can eliminate.
2
+
3
+
4
+ #################### string.from_py ####################
5
+
6
+ cdef extern from *:
7
+ cdef cppclass string "{{type}}":
8
+ string() except +
9
+ string(char* c_str, size_t size) except +
10
+ cdef const char* __Pyx_PyObject_AsStringAndSize(object, Py_ssize_t*) except NULL
11
+
12
+ @cname("{{cname}}")
13
+ cdef string {{cname}}(object o) except *:
14
+ cdef Py_ssize_t length = 0
15
+ cdef const char* data = __Pyx_PyObject_AsStringAndSize(o, &length)
16
+ return string(data, <size_t> length)
17
+
18
+
19
+ #################### string.to_py ####################
20
+
21
+ #cimport cython
22
+ #from libcpp.string cimport string
23
+ cdef extern from *:
24
+ const Py_ssize_t PY_SSIZE_T_MAX
25
+ cdef cppclass string "{{type}}":
26
+ char* data()
27
+ size_t size()
28
+
29
+ {{for py_type in ['PyObject', 'PyUnicode', 'PyBytes', 'PyByteArray']}}
30
+ cdef extern from *:
31
+ cdef object __Pyx_{{py_type}}_FromStringAndSize(const char*, size_t)
32
+
33
+ @cname("{{cname.replace("PyObject", py_type, 1)}}")
34
+ cdef inline object {{cname.replace("PyObject", py_type, 1)}}(const string& s):
35
+ if s.size() > <size_t> PY_SSIZE_T_MAX:
36
+ raise MemoryError()
37
+ return __Pyx_{{py_type}}_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
38
+ {{endfor}}
39
+
40
+
41
+ #################### vector.from_py ####################
42
+ #@requires: ObjectHandling.c::LengthHint
43
+
44
+ cdef extern from *:
45
+ cdef cppclass vector "std::vector" [T]:
46
+ void push_back(T&) except +
47
+ void reserve(size_t) except +
48
+
49
+ cdef Py_ssize_t __Pyx_PyObject_LengthHint(object o, Py_ssize_t defaultval) except -1
50
+
51
+ @cname("{{cname}}")
52
+ cdef vector[X] {{cname}}(object o) except *:
53
+
54
+ cdef vector[X] v
55
+ cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)
56
+
57
+ if s > 0:
58
+ v.reserve(<size_t> s)
59
+
60
+ for item in o:
61
+ v.push_back(<X>item)
62
+
63
+ return v
64
+
65
+
66
+ #################### vector.to_py ####################
67
+
68
+ cdef extern from *:
69
+ cdef cppclass vector "std::vector" [T]:
70
+ size_t size()
71
+ T& operator[](size_t)
72
+
73
+ cdef extern from "Python.h":
74
+ void Py_INCREF(object)
75
+ list PyList_New(Py_ssize_t size)
76
+ int __Pyx_PyList_SET_ITEM(object list, Py_ssize_t i, object o) except -1
77
+ const Py_ssize_t PY_SSIZE_T_MAX
78
+
79
+ @cname("{{cname}}")
80
+ cdef object {{cname}}(const vector[X]& v):
81
+ if v.size() > <size_t> PY_SSIZE_T_MAX:
82
+ raise MemoryError()
83
+ v_size_signed = <Py_ssize_t> v.size()
84
+
85
+ o = PyList_New(v_size_signed)
86
+
87
+ cdef Py_ssize_t i
88
+ cdef object item
89
+
90
+ for i in range(v_size_signed):
91
+ item = v[i]
92
+ Py_INCREF(item)
93
+ __Pyx_PyList_SET_ITEM(o, i, item)
94
+
95
+ return o
96
+
97
+ #################### list.from_py ####################
98
+
99
+ cdef extern from *:
100
+ cdef cppclass cpp_list "std::list" [T]:
101
+ void push_back(T&) except +
102
+
103
+ @cname("{{cname}}")
104
+ cdef cpp_list[X] {{cname}}(object o) except *:
105
+ cdef cpp_list[X] l
106
+ for item in o:
107
+ l.push_back(<X>item)
108
+ return l
109
+
110
+
111
+ #################### list.to_py ####################
112
+
113
+ cimport cython
114
+
115
+ cdef extern from *:
116
+ cdef cppclass cpp_list "std::list" [T]:
117
+ cppclass const_iterator:
118
+ T& operator*()
119
+ const_iterator operator++()
120
+ bint operator!=(const_iterator)
121
+ const_iterator begin()
122
+ const_iterator end()
123
+ size_t size()
124
+
125
+ cdef extern from "Python.h":
126
+ void Py_INCREF(object)
127
+ list PyList_New(Py_ssize_t size)
128
+ void __Pyx_PyList_SET_ITEM(object list, Py_ssize_t i, object o)
129
+ cdef Py_ssize_t PY_SSIZE_T_MAX
130
+
131
+ @cname("{{cname}}")
132
+ cdef object {{cname}}(const cpp_list[X]& v):
133
+ if v.size() > <size_t> PY_SSIZE_T_MAX:
134
+ raise MemoryError()
135
+
136
+ o = PyList_New(<Py_ssize_t> v.size())
137
+
138
+ cdef object item
139
+ cdef Py_ssize_t i = 0
140
+ cdef cpp_list[X].const_iterator iter = v.begin()
141
+
142
+ while iter != v.end():
143
+ item = cython.operator.dereference(iter)
144
+ Py_INCREF(item)
145
+ __Pyx_PyList_SET_ITEM(o, i, item)
146
+ cython.operator.preincrement(iter)
147
+ i += 1
148
+
149
+ return o
150
+
151
+
152
+ #################### set.from_py ####################
153
+
154
+ cdef extern from *:
155
+ cdef cppclass set "std::{{maybe_unordered}}set" [T]:
156
+ void insert(T&) except +
157
+
158
+ @cname("{{cname}}")
159
+ cdef set[X] {{cname}}(object o) except *:
160
+ cdef set[X] s
161
+ for item in o:
162
+ s.insert(<X>item)
163
+ return s
164
+
165
+
166
+ #################### set.to_py ####################
167
+
168
+ cimport cython
169
+
170
+ cdef extern from *:
171
+ cdef cppclass cpp_set "std::{{maybe_unordered}}set" [T]:
172
+ cppclass const_iterator:
173
+ T& operator*()
174
+ const_iterator operator++()
175
+ bint operator!=(const_iterator)
176
+ const_iterator begin()
177
+ const_iterator end()
178
+
179
+ @cname("{{cname}}")
180
+ cdef object {{cname}}(const cpp_set[X]& s):
181
+ return {v for v in s}
182
+
183
+ #################### pair.from_py ####################
184
+
185
+ cdef extern from *:
186
+ cdef cppclass pair "std::pair" [T, U]:
187
+ pair() except +
188
+ pair(T&, U&) except +
189
+
190
+ @cname("{{cname}}")
191
+ cdef pair[X,Y] {{cname}}(object o) except *:
192
+ x, y = o
193
+ return pair[X,Y](<X>x, <Y>y)
194
+
195
+
196
+ #################### pair.to_py ####################
197
+
198
+ cdef extern from *:
199
+ cdef cppclass pair "std::pair" [T, U]:
200
+ T first
201
+ U second
202
+
203
+ @cname("{{cname}}")
204
+ cdef object {{cname}}(const pair[X,Y]& p):
205
+ return p.first, p.second
206
+
207
+
208
+ #################### map.from_py ####################
209
+
210
+ cdef extern from *:
211
+ cdef cppclass pair "std::pair" [T, U]:
212
+ pair(T&, U&) except +
213
+ cdef cppclass map "std::{{maybe_unordered}}map" [T, U]:
214
+ void insert(pair[T, U]&) except +
215
+ cdef cppclass vector "std::vector" [T]:
216
+ pass
217
+
218
+
219
+ @cname("{{cname}}")
220
+ cdef map[X,Y] {{cname}}(object o) except *:
221
+ cdef map[X,Y] m
222
+ for key, value in o.items():
223
+ m.insert(pair[X,Y](<X>key, <Y>value))
224
+ return m
225
+
226
+
227
+ #################### map.to_py ####################
228
+ # TODO: Work out const so that this can take a const
229
+ # reference rather than pass by value.
230
+
231
+ cimport cython
232
+
233
+ cdef extern from *:
234
+ cdef cppclass map "std::{{maybe_unordered}}map" [T, U]:
235
+ cppclass value_type:
236
+ T first
237
+ U second
238
+ cppclass const_iterator:
239
+ value_type& operator*()
240
+ const_iterator operator++()
241
+ bint operator!=(const_iterator)
242
+ const_iterator begin()
243
+ const_iterator end()
244
+
245
+ @cname("{{cname}}")
246
+ cdef object {{cname}}(const map[X,Y]& s):
247
+ o = {}
248
+ cdef const map[X,Y].value_type *key_value
249
+ cdef map[X,Y].const_iterator iter = s.begin()
250
+ while iter != s.end():
251
+ key_value = &cython.operator.dereference(iter)
252
+ o[key_value.first] = key_value.second
253
+ cython.operator.preincrement(iter)
254
+ return o
255
+
256
+
257
+ #################### complex.from_py ####################
258
+
259
+ cdef extern from *:
260
+ cdef cppclass std_complex "std::complex" [T]:
261
+ std_complex()
262
+ std_complex(T, T) except +
263
+
264
+ @cname("{{cname}}")
265
+ cdef std_complex[X] {{cname}}(object o) except *:
266
+ cdef double complex z = o
267
+ return std_complex[X](<X>z.real, <X>z.imag)
268
+
269
+
270
+ #################### complex.to_py ####################
271
+
272
+ cdef extern from *:
273
+ cdef cppclass std_complex "std::complex" [T]:
274
+ X real()
275
+ X imag()
276
+
277
+ @cname("{{cname}}")
278
+ cdef object {{cname}}(const std_complex[X]& z):
279
+ cdef double complex tmp
280
+ tmp.real = <double>z.real()
281
+ tmp.imag = <double>z.imag()
282
+ return tmp
@@ -0,0 +1,151 @@
1
+ /////////////// CppExceptionConversion.proto ///////////////
2
+
3
+ #ifndef __Pyx_CppExn2PyErr
4
+ #include <new>
5
+ #include <typeinfo>
6
+ #include <stdexcept>
7
+ #include <ios>
8
+
9
+ static void __Pyx_CppExn2PyErr() {
10
+ // Catch a handful of different errors here and turn them into the
11
+ // equivalent Python errors.
12
+ try {
13
+ if (PyErr_Occurred())
14
+ ; // let the latest Python exn pass through and ignore the current one
15
+ else
16
+ throw;
17
+ } catch (const std::bad_alloc& exn) {
18
+ PyErr_SetString(PyExc_MemoryError, exn.what());
19
+ } catch (const std::bad_cast& exn) {
20
+ PyErr_SetString(PyExc_TypeError, exn.what());
21
+ } catch (const std::bad_typeid& exn) {
22
+ PyErr_SetString(PyExc_TypeError, exn.what());
23
+ } catch (const std::domain_error& exn) {
24
+ PyErr_SetString(PyExc_ValueError, exn.what());
25
+ } catch (const std::invalid_argument& exn) {
26
+ PyErr_SetString(PyExc_ValueError, exn.what());
27
+ } catch (const std::ios_base::failure& exn) {
28
+ // Unfortunately, in standard C++ we have no way of distinguishing EOF
29
+ // from other errors here; be careful with the exception mask
30
+ PyErr_SetString(PyExc_IOError, exn.what());
31
+ } catch (const std::out_of_range& exn) {
32
+ // Change out_of_range to IndexError
33
+ PyErr_SetString(PyExc_IndexError, exn.what());
34
+ } catch (const std::overflow_error& exn) {
35
+ PyErr_SetString(PyExc_OverflowError, exn.what());
36
+ } catch (const std::range_error& exn) {
37
+ PyErr_SetString(PyExc_ArithmeticError, exn.what());
38
+ } catch (const std::underflow_error& exn) {
39
+ PyErr_SetString(PyExc_ArithmeticError, exn.what());
40
+ } catch (const std::exception& exn) {
41
+ PyErr_SetString(PyExc_RuntimeError, exn.what());
42
+ }
43
+ catch (...)
44
+ {
45
+ PyErr_SetString(PyExc_RuntimeError, "Unknown exception");
46
+ }
47
+ }
48
+ #endif
49
+
50
+ /////////////// PythranConversion.proto ///////////////
51
+
52
+ template <class T>
53
+ auto __Pyx_pythran_to_python(T &&value) -> decltype(to_python(
54
+ typename pythonic::returnable<typename std::remove_cv<typename std::remove_reference<T>::type>::type>::type{std::forward<T>(value)}))
55
+ {
56
+ using returnable_type = typename pythonic::returnable<typename std::remove_cv<typename std::remove_reference<T>::type>::type>::type;
57
+ return to_python(returnable_type{std::forward<T>(value)});
58
+ }
59
+
60
+ #define __Pyx_PythranShapeAccessor(x) (pythonic::builtins::getattr(pythonic::types::attr::SHAPE{}, x))
61
+
62
+ ////////////// MoveIfSupported.proto //////////////////
63
+
64
+ #if CYTHON_USE_CPP_STD_MOVE
65
+ #include <utility>
66
+ #define __PYX_STD_MOVE_IF_SUPPORTED(x) std::move(x)
67
+ #else
68
+ #define __PYX_STD_MOVE_IF_SUPPORTED(x) x
69
+ #endif
70
+
71
+ ////////////// EnumClassDecl.proto //////////////////
72
+ //@proto_block: utility_code_proto_before_types
73
+
74
+ #if defined (_MSC_VER)
75
+ #if _MSC_VER >= 1910
76
+ #define __PYX_ENUM_CLASS_DECL enum
77
+ #else
78
+ #define __PYX_ENUM_CLASS_DECL
79
+ #endif
80
+ #else
81
+ #define __PYX_ENUM_CLASS_DECL enum
82
+ #endif
83
+
84
+ ////////////// OptionalLocals.proto ////////////////
85
+ //@proto_block: utility_code_proto_before_types
86
+
87
+ #include <utility>
88
+ #if defined(CYTHON_USE_BOOST_OPTIONAL)
89
+ // fallback mode - std::optional is preferred but this gives
90
+ // people with a less up-to-date compiler a chance
91
+ #include <boost/optional.hpp>
92
+ #define __Pyx_Optional_BaseType boost::optional
93
+ #else
94
+ #include <optional>
95
+ // since std::optional is a C++17 features, a templated using declaration should be safe
96
+ // (although it could be replaced with a define)
97
+ template <typename T>
98
+ using __Pyx_Optional_BaseType = std::optional<T>;
99
+ #endif
100
+
101
+ // This class reuses as much of the implementation of std::optional as possible.
102
+ // The only place it differs significantly is the assignment operators, which use
103
+ // "emplace" (thus requiring move/copy constructors, but not move/copy
104
+ // assignment operators). This is preferred because it lets us work with assignable
105
+ // types (for example those with const members)
106
+ template <typename T>
107
+ class __Pyx_Optional_Type : private __Pyx_Optional_BaseType<T> {
108
+ public:
109
+ using __Pyx_Optional_BaseType<T>::__Pyx_Optional_BaseType;
110
+ using __Pyx_Optional_BaseType<T>::has_value;
111
+ using __Pyx_Optional_BaseType<T>::operator*;
112
+ using __Pyx_Optional_BaseType<T>::operator->;
113
+ #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)
114
+ __Pyx_Optional_Type(const __Pyx_Optional_Type& rhs)
115
+ : __Pyx_Optional_BaseType<T>(rhs)
116
+ {}
117
+
118
+ __Pyx_Optional_Type(__Pyx_Optional_Type&& rhs)
119
+ : __Pyx_Optional_BaseType<T>(std::move(rhs))
120
+ {}
121
+
122
+ __Pyx_Optional_Type& operator=(const __Pyx_Optional_Type& rhs) {
123
+ this->emplace(*rhs);
124
+ return *this;
125
+ }
126
+ __Pyx_Optional_Type& operator=(__Pyx_Optional_Type&& rhs) {
127
+ this->emplace(std::move(*rhs));
128
+ return *this;
129
+ }
130
+ template <typename U=T>
131
+ __Pyx_Optional_Type& operator=(U&& rhs) {
132
+ this->emplace(std::forward<U>(rhs));
133
+ return *this;
134
+ }
135
+ #else
136
+ // Note - the "cpp_locals" feature is designed to require C++14.
137
+ // This pre-c++11 fallback is largely untested, and definitely won't work
138
+ // in all the cases that the more modern version does
139
+ using __Pyx_Optional_BaseType<T>::operator=; // the chances are emplace can't work...
140
+ #endif
141
+ };
142
+
143
+ //////////////////////// DefaultPlacementNew.proto ///////////////////////
144
+
145
+ #include <new>
146
+
147
+ // avoid having to know the name of the class being constructed (e.g. when user is accessing through a typedef)
148
+ template<typename T>
149
+ void __Pyx_default_placement_construct(T* x) {
150
+ new (static_cast<void*>(x)) T();
151
+ }