Cython 3.3.0__cp315-cp315-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. Cython/Build/BuildExecutable.py +156 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +349 -0
  4. Cython/Build/Dependencies.py +1281 -0
  5. Cython/Build/Distutils.py +1 -0
  6. Cython/Build/Inline.py +467 -0
  7. Cython/Build/IpythonMagic.py +559 -0
  8. Cython/Build/SharedModule.py +165 -0
  9. Cython/Build/Tests/TestCyCache.py +195 -0
  10. Cython/Build/Tests/TestCythonizeArgsParser.py +480 -0
  11. Cython/Build/Tests/TestDependencies.py +133 -0
  12. Cython/Build/Tests/TestInline.py +177 -0
  13. Cython/Build/Tests/TestIpythonMagic.py +303 -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 +825 -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 +679 -0
  23. Cython/Compiler/Builtin.py +1102 -0
  24. Cython/Compiler/CmdLine.py +373 -0
  25. Cython/Compiler/Code.cp315-win_amd64.pyd +0 -0
  26. Cython/Compiler/Code.pxd +154 -0
  27. Cython/Compiler/Code.py +3760 -0
  28. Cython/Compiler/CodeGeneration.py +33 -0
  29. Cython/Compiler/CythonScope.py +208 -0
  30. Cython/Compiler/Dataclass.py +890 -0
  31. Cython/Compiler/DebugFlags.py +24 -0
  32. Cython/Compiler/Errors.py +310 -0
  33. Cython/Compiler/ExprNodes.py +16273 -0
  34. Cython/Compiler/FlowControl.cp315-win_amd64.pyd +0 -0
  35. Cython/Compiler/FlowControl.pxd +112 -0
  36. Cython/Compiler/FlowControl.py +1573 -0
  37. Cython/Compiler/FusedNode.cp315-win_amd64.pyd +0 -0
  38. Cython/Compiler/FusedNode.py +978 -0
  39. Cython/Compiler/Future.py +16 -0
  40. Cython/Compiler/Interpreter.py +57 -0
  41. Cython/Compiler/Lexicon.py +422 -0
  42. Cython/Compiler/LineTable.cp315-win_amd64.pyd +0 -0
  43. Cython/Compiler/LineTable.py +114 -0
  44. Cython/Compiler/Main.py +856 -0
  45. Cython/Compiler/MatchCaseNodes.py +2200 -0
  46. Cython/Compiler/MemoryView.py +930 -0
  47. Cython/Compiler/ModuleNode.py +4548 -0
  48. Cython/Compiler/Naming.py +370 -0
  49. Cython/Compiler/Nodes.py +11304 -0
  50. Cython/Compiler/Optimize.py +5564 -0
  51. Cython/Compiler/Options.py +840 -0
  52. Cython/Compiler/ParseTreeTransforms.pxd +80 -0
  53. Cython/Compiler/ParseTreeTransforms.py +4808 -0
  54. Cython/Compiler/Parsing.cp315-win_amd64.pyd +0 -0
  55. Cython/Compiler/Parsing.pxd +9 -0
  56. Cython/Compiler/Parsing.py +4809 -0
  57. Cython/Compiler/Pipeline.py +439 -0
  58. Cython/Compiler/PyrexTypes.py +6588 -0
  59. Cython/Compiler/Pythran.py +232 -0
  60. Cython/Compiler/Scanning.cp315-win_amd64.pyd +0 -0
  61. Cython/Compiler/Scanning.pxd +70 -0
  62. Cython/Compiler/Scanning.py +720 -0
  63. Cython/Compiler/StringEncoding.cp315-win_amd64.pyd +0 -0
  64. Cython/Compiler/StringEncoding.py +354 -0
  65. Cython/Compiler/Symtab.py +3121 -0
  66. Cython/Compiler/Tests/TestBuffer.py +105 -0
  67. Cython/Compiler/Tests/TestBuiltin.py +196 -0
  68. Cython/Compiler/Tests/TestCmdLine.py +652 -0
  69. Cython/Compiler/Tests/TestCode.py +145 -0
  70. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  71. Cython/Compiler/Tests/TestGrammar.py +202 -0
  72. Cython/Compiler/Tests/TestMemView.py +71 -0
  73. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  74. Cython/Compiler/Tests/TestScanning.py +132 -0
  75. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  76. Cython/Compiler/Tests/TestStringEncoding.py +20 -0
  77. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  78. Cython/Compiler/Tests/TestTreePath.py +103 -0
  79. Cython/Compiler/Tests/TestTypes.py +119 -0
  80. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  81. Cython/Compiler/Tests/TestVisitor.py +119 -0
  82. Cython/Compiler/Tests/Utils.py +36 -0
  83. Cython/Compiler/Tests/__init__.py +1 -0
  84. Cython/Compiler/TreeFragment.py +279 -0
  85. Cython/Compiler/TreePath.py +303 -0
  86. Cython/Compiler/TypeInference.py +611 -0
  87. Cython/Compiler/TypeSlots.py +1329 -0
  88. Cython/Compiler/UFuncs.py +317 -0
  89. Cython/Compiler/UtilNodes.py +389 -0
  90. Cython/Compiler/UtilityCode.py +354 -0
  91. Cython/Compiler/Version.py +8 -0
  92. Cython/Compiler/Visitor.cp315-win_amd64.pyd +0 -0
  93. Cython/Compiler/Visitor.pxd +52 -0
  94. Cython/Compiler/Visitor.py +914 -0
  95. Cython/Compiler/__init__.py +1 -0
  96. Cython/Coverage.py +448 -0
  97. Cython/Debugger/Cygdb.py +214 -0
  98. Cython/Debugger/DebugWriter.py +82 -0
  99. Cython/Debugger/Tests/TestLibCython.py +280 -0
  100. Cython/Debugger/Tests/__init__.py +1 -0
  101. Cython/Debugger/Tests/cfuncs.c +8 -0
  102. Cython/Debugger/Tests/codefile +49 -0
  103. Cython/Debugger/Tests/test_libcython_in_gdb.py +580 -0
  104. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  105. Cython/Debugger/__init__.py +1 -0
  106. Cython/Debugger/libcython.py +1548 -0
  107. Cython/Debugger/libpython.py +2821 -0
  108. Cython/Debugging.py +20 -0
  109. Cython/Distutils/__init__.py +2 -0
  110. Cython/Distutils/build_ext.py +143 -0
  111. Cython/Distutils/extension.py +96 -0
  112. Cython/Distutils/old_build_ext.py +351 -0
  113. Cython/Includes/cpython/__init__.pxd +173 -0
  114. Cython/Includes/cpython/array.pxd +152 -0
  115. Cython/Includes/cpython/bool.pxd +37 -0
  116. Cython/Includes/cpython/buffer.pxd +112 -0
  117. Cython/Includes/cpython/bytearray.pxd +33 -0
  118. Cython/Includes/cpython/bytes.pxd +200 -0
  119. Cython/Includes/cpython/cellobject.pxd +35 -0
  120. Cython/Includes/cpython/ceval.pxd +8 -0
  121. Cython/Includes/cpython/codecs.pxd +121 -0
  122. Cython/Includes/cpython/complex.pxd +60 -0
  123. Cython/Includes/cpython/contextvars.pxd +145 -0
  124. Cython/Includes/cpython/conversion.pxd +36 -0
  125. Cython/Includes/cpython/datetime.pxd +395 -0
  126. Cython/Includes/cpython/descr.pxd +26 -0
  127. Cython/Includes/cpython/dict.pxd +268 -0
  128. Cython/Includes/cpython/exc.pxd +263 -0
  129. Cython/Includes/cpython/fileobject.pxd +57 -0
  130. Cython/Includes/cpython/float.pxd +56 -0
  131. Cython/Includes/cpython/frozendict.pxd +37 -0
  132. Cython/Includes/cpython/function.pxd +65 -0
  133. Cython/Includes/cpython/genobject.pxd +25 -0
  134. Cython/Includes/cpython/getargs.pxd +12 -0
  135. Cython/Includes/cpython/instance.pxd +25 -0
  136. Cython/Includes/cpython/iterator.pxd +36 -0
  137. Cython/Includes/cpython/iterobject.pxd +24 -0
  138. Cython/Includes/cpython/list.pxd +144 -0
  139. Cython/Includes/cpython/long.pxd +180 -0
  140. Cython/Includes/cpython/longintrepr.pxd +14 -0
  141. Cython/Includes/cpython/mapping.pxd +63 -0
  142. Cython/Includes/cpython/marshal.pxd +66 -0
  143. Cython/Includes/cpython/mem.pxd +120 -0
  144. Cython/Includes/cpython/memoryview.pxd +50 -0
  145. Cython/Includes/cpython/method.pxd +49 -0
  146. Cython/Includes/cpython/module.pxd +208 -0
  147. Cython/Includes/cpython/number.pxd +258 -0
  148. Cython/Includes/cpython/object.pxd +430 -0
  149. Cython/Includes/cpython/pycapsule.pxd +143 -0
  150. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  151. Cython/Includes/cpython/pyport.pxd +8 -0
  152. Cython/Includes/cpython/pystate.pxd +95 -0
  153. Cython/Includes/cpython/pythread.pxd +53 -0
  154. Cython/Includes/cpython/ref.pxd +141 -0
  155. Cython/Includes/cpython/sentinel.pxd +17 -0
  156. Cython/Includes/cpython/sequence.pxd +134 -0
  157. Cython/Includes/cpython/set.pxd +119 -0
  158. Cython/Includes/cpython/slice.pxd +70 -0
  159. Cython/Includes/cpython/time.pxd +129 -0
  160. Cython/Includes/cpython/tuple.pxd +72 -0
  161. Cython/Includes/cpython/type.pxd +146 -0
  162. Cython/Includes/cpython/unicode.pxd +639 -0
  163. Cython/Includes/cpython/version.pxd +32 -0
  164. Cython/Includes/cpython/weakref.pxd +78 -0
  165. Cython/Includes/libc/__init__.pxd +1 -0
  166. Cython/Includes/libc/complex.pxd +35 -0
  167. Cython/Includes/libc/errno.pxd +127 -0
  168. Cython/Includes/libc/float.pxd +43 -0
  169. Cython/Includes/libc/limits.pxd +28 -0
  170. Cython/Includes/libc/locale.pxd +46 -0
  171. Cython/Includes/libc/math.pxd +209 -0
  172. Cython/Includes/libc/setjmp.pxd +10 -0
  173. Cython/Includes/libc/signal.pxd +64 -0
  174. Cython/Includes/libc/stddef.pxd +9 -0
  175. Cython/Includes/libc/stdint.pxd +105 -0
  176. Cython/Includes/libc/stdio.pxd +80 -0
  177. Cython/Includes/libc/stdlib.pxd +72 -0
  178. Cython/Includes/libc/string.pxd +50 -0
  179. Cython/Includes/libc/threads.pxd +234 -0
  180. Cython/Includes/libc/time.pxd +52 -0
  181. Cython/Includes/libcpp/__init__.pxd +4 -0
  182. Cython/Includes/libcpp/algorithm.pxd +320 -0
  183. Cython/Includes/libcpp/any.pxd +16 -0
  184. Cython/Includes/libcpp/atomic.pxd +59 -0
  185. Cython/Includes/libcpp/barrier.pxd +22 -0
  186. Cython/Includes/libcpp/bit.pxd +29 -0
  187. Cython/Includes/libcpp/cast.pxd +12 -0
  188. Cython/Includes/libcpp/cmath.pxd +518 -0
  189. Cython/Includes/libcpp/complex.pxd +106 -0
  190. Cython/Includes/libcpp/condition_variable.pxd +322 -0
  191. Cython/Includes/libcpp/deque.pxd +165 -0
  192. Cython/Includes/libcpp/exception.pxd +216 -0
  193. Cython/Includes/libcpp/execution.pxd +15 -0
  194. Cython/Includes/libcpp/forward_list.pxd +63 -0
  195. Cython/Includes/libcpp/functional.pxd +26 -0
  196. Cython/Includes/libcpp/future.pxd +103 -0
  197. Cython/Includes/libcpp/iterator.pxd +34 -0
  198. Cython/Includes/libcpp/latch.pxd +17 -0
  199. Cython/Includes/libcpp/limits.pxd +61 -0
  200. Cython/Includes/libcpp/list.pxd +117 -0
  201. Cython/Includes/libcpp/map.pxd +252 -0
  202. Cython/Includes/libcpp/memory.pxd +115 -0
  203. Cython/Includes/libcpp/mutex.pxd +387 -0
  204. Cython/Includes/libcpp/numbers.pxd +15 -0
  205. Cython/Includes/libcpp/numeric.pxd +131 -0
  206. Cython/Includes/libcpp/optional.pxd +34 -0
  207. Cython/Includes/libcpp/pair.pxd +1 -0
  208. Cython/Includes/libcpp/queue.pxd +25 -0
  209. Cython/Includes/libcpp/random.pxd +166 -0
  210. Cython/Includes/libcpp/semaphore.pxd +43 -0
  211. Cython/Includes/libcpp/set.pxd +228 -0
  212. Cython/Includes/libcpp/shared_mutex.pxd +96 -0
  213. Cython/Includes/libcpp/span.pxd +87 -0
  214. Cython/Includes/libcpp/stack.pxd +11 -0
  215. Cython/Includes/libcpp/stop_token.pxd +117 -0
  216. Cython/Includes/libcpp/string.pxd +355 -0
  217. Cython/Includes/libcpp/string_view.pxd +183 -0
  218. Cython/Includes/libcpp/typeindex.pxd +15 -0
  219. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  220. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  221. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  222. Cython/Includes/libcpp/utility.pxd +30 -0
  223. Cython/Includes/libcpp/vector.pxd +186 -0
  224. Cython/Includes/numpy/math.pxd +150 -0
  225. Cython/Includes/openmp.pxd +50 -0
  226. Cython/Includes/posix/__init__.pxd +1 -0
  227. Cython/Includes/posix/dlfcn.pxd +14 -0
  228. Cython/Includes/posix/fcntl.pxd +86 -0
  229. Cython/Includes/posix/ioctl.pxd +4 -0
  230. Cython/Includes/posix/mman.pxd +101 -0
  231. Cython/Includes/posix/resource.pxd +57 -0
  232. Cython/Includes/posix/select.pxd +21 -0
  233. Cython/Includes/posix/signal.pxd +73 -0
  234. Cython/Includes/posix/stat.pxd +98 -0
  235. Cython/Includes/posix/stdio.pxd +37 -0
  236. Cython/Includes/posix/stdlib.pxd +29 -0
  237. Cython/Includes/posix/strings.pxd +9 -0
  238. Cython/Includes/posix/time.pxd +71 -0
  239. Cython/Includes/posix/types.pxd +30 -0
  240. Cython/Includes/posix/uio.pxd +26 -0
  241. Cython/Includes/posix/unistd.pxd +271 -0
  242. Cython/Includes/posix/wait.pxd +38 -0
  243. Cython/LZSS.cp315-win_amd64.pyd +0 -0
  244. Cython/LZSS.py +184 -0
  245. Cython/Plex/Actions.cp315-win_amd64.pyd +0 -0
  246. Cython/Plex/Actions.pxd +24 -0
  247. Cython/Plex/Actions.py +119 -0
  248. Cython/Plex/DFA.cp315-win_amd64.pyd +0 -0
  249. Cython/Plex/DFA.pxd +14 -0
  250. Cython/Plex/DFA.py +164 -0
  251. Cython/Plex/Errors.py +48 -0
  252. Cython/Plex/Lexicons.py +178 -0
  253. Cython/Plex/Machines.cp315-win_amd64.pyd +0 -0
  254. Cython/Plex/Machines.pxd +36 -0
  255. Cython/Plex/Machines.py +238 -0
  256. Cython/Plex/Regexps.py +535 -0
  257. Cython/Plex/Scanners.cp315-win_amd64.pyd +0 -0
  258. Cython/Plex/Scanners.pxd +45 -0
  259. Cython/Plex/Scanners.py +328 -0
  260. Cython/Plex/Transitions.cp315-win_amd64.pyd +0 -0
  261. Cython/Plex/Transitions.pxd +14 -0
  262. Cython/Plex/Transitions.py +239 -0
  263. Cython/Plex/__init__.py +34 -0
  264. Cython/Runtime/__init__.py +1 -0
  265. Cython/Runtime/refnanny.cp315-win_amd64.pyd +0 -0
  266. Cython/Runtime/refnanny.pyx +237 -0
  267. Cython/Shadow.py +1174 -0
  268. Cython/StringIOTree.cp315-win_amd64.pyd +0 -0
  269. Cython/StringIOTree.py +169 -0
  270. Cython/Tempita/__init__.py +4 -0
  271. Cython/Tempita/_looper.py +154 -0
  272. Cython/Tempita/_tempita.cp315-win_amd64.pyd +0 -0
  273. Cython/Tempita/_tempita.py +1087 -0
  274. Cython/TestUtils.py +472 -0
  275. Cython/Tests/TestCodeWriter.py +128 -0
  276. Cython/Tests/TestCythonUtils.py +202 -0
  277. Cython/Tests/TestJediTyper.py +223 -0
  278. Cython/Tests/TestShadow.py +125 -0
  279. Cython/Tests/TestStringIOTree.py +68 -0
  280. Cython/Tests/TestTestUtils.py +89 -0
  281. Cython/Tests/__init__.py +1 -0
  282. Cython/Tests/xmlrunner.py +390 -0
  283. Cython/Utility/AsyncGen.c +1152 -0
  284. Cython/Utility/Buffer.c +866 -0
  285. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  286. Cython/Utility/Builtins.c +1068 -0
  287. Cython/Utility/CConvert.pyx +153 -0
  288. Cython/Utility/CMath.c +104 -0
  289. Cython/Utility/CommonStructures.c +244 -0
  290. Cython/Utility/Complex.c +378 -0
  291. Cython/Utility/Coroutine.c +2344 -0
  292. Cython/Utility/CpdefEnums.pyx +119 -0
  293. Cython/Utility/CppConvert.pyx +282 -0
  294. Cython/Utility/CppSupport.cpp +151 -0
  295. Cython/Utility/CythonFunction.c +2185 -0
  296. Cython/Utility/Dataclasses.c +101 -0
  297. Cython/Utility/Embed.c +129 -0
  298. Cython/Utility/Exceptions.c +1331 -0
  299. Cython/Utility/Exceptions_Cy.pyx +109 -0
  300. Cython/Utility/ExtensionTypes.c +1199 -0
  301. Cython/Utility/FunctionArguments.c +1052 -0
  302. Cython/Utility/FusedFunction.pyx +44 -0
  303. Cython/Utility/ImportExport.c +972 -0
  304. Cython/Utility/MatchCase.c +981 -0
  305. Cython/Utility/MatchCase_Cy.pyx +12 -0
  306. Cython/Utility/MemoryView.pxd +108 -0
  307. Cython/Utility/MemoryView.pyx +1499 -0
  308. Cython/Utility/MemoryView_C.c +1056 -0
  309. Cython/Utility/ModuleSetupCode.c +3319 -0
  310. Cython/Utility/NumpyImportArray.c +46 -0
  311. Cython/Utility/ObjectHandling.c +3404 -0
  312. Cython/Utility/Optimize.c +2564 -0
  313. Cython/Utility/Overflow.c +378 -0
  314. Cython/Utility/Profile.c +736 -0
  315. Cython/Utility/StringTools.c +1534 -0
  316. Cython/Utility/Synchronization.c +438 -0
  317. Cython/Utility/TString.c +369 -0
  318. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  319. Cython/Utility/TestCythonScope.pyx +75 -0
  320. Cython/Utility/TestUtilityLoader.c +12 -0
  321. Cython/Utility/TypeConversion.c +1588 -0
  322. Cython/Utility/UFuncs.pyx +50 -0
  323. Cython/Utility/UFuncs_C.c +89 -0
  324. Cython/Utility/__init__.py +28 -0
  325. Cython/Utility/arrayarray.h +172 -0
  326. Cython/Utils.cp315-win_amd64.pyd +0 -0
  327. Cython/Utils.py +680 -0
  328. Cython/__init__.py +12 -0
  329. Cython/_shared.cp315-win_amd64.pyd +0 -0
  330. Cython/py.typed +0 -0
  331. cython-3.3.0.dist-info/METADATA +555 -0
  332. cython-3.3.0.dist-info/RECORD +339 -0
  333. cython-3.3.0.dist-info/WHEEL +5 -0
  334. cython-3.3.0.dist-info/entry_points.txt +4 -0
  335. cython-3.3.0.dist-info/top_level.txt +3 -0
  336. cython.py +29 -0
  337. pyximport/__init__.py +4 -0
  338. pyximport/pyxbuild.py +160 -0
  339. pyximport/pyximport.py +482 -0
@@ -0,0 +1,119 @@
1
+ #################### EnumBase ####################
2
+
3
+ cdef extern from *:
4
+ object PyImport_Import(object)
5
+
6
+ cdef object __Pyx_FlexibleEnumBase
7
+ class __Pyx_FlexibleEnumBase(PyImport_Import("enum").IntEnum):
8
+ @classmethod
9
+ def _missing_(cls, value):
10
+ # This is a trimmed down version of "EnumFlag._missing_" with
11
+ # the flag-specific details removed.
12
+ pseudo_member = int.__new__(cls, value)
13
+ if not hasattr(pseudo_member, '_value_'):
14
+ pseudo_member._value_ = value
15
+ pseudo_member._name_ = None
16
+ # _value2member_map_ is an undocumented detail of enum so don't fail
17
+ # if we can't use it to cache pseudo-members
18
+ value2member_map = getattr(cls, '_value2member_map_', None)
19
+ if value2member_map is not None:
20
+ pseudo_member = value2member_map.setdefault(value, pseudo_member)
21
+ return pseudo_member
22
+
23
+ def __repr__(self):
24
+ if self._name_ is None:
25
+ # arbitrary value pseudo member
26
+ return f"<{self.__class__.__name__}: {self._value_!r}>"
27
+ return super().__repr__()
28
+
29
+
30
+ #################### EnumType ####################
31
+ # requires EnumBase but this is done manually to avoid duplication
32
+
33
+ cdef extern from *:
34
+ object {{enum_to_pyint_func}}({{name}} value)
35
+
36
+
37
+ # Create new IntFlag()-like enums:
38
+ # the assumption is that C enums are sufficiently commonly
39
+ # used as flags that this is the most appropriate base class.
40
+ # On Python 3.15+ IntFlag doesn't accept negative numbers however.
41
+ {{name}} = __Pyx_FlexibleEnumBase('{{name}}', [
42
+ {{for item in items}}
43
+ ('{{item}}', {{enum_to_pyint_func}}({{item}})),
44
+ {{endfor}}
45
+ # Try to look up the module name dynamically if possible
46
+ ], module=globals().get("__module__", '{{static_modname}}'))
47
+
48
+ {{if enum_doc is not None}}
49
+ {{name}}.__doc__ = {{ repr(enum_doc) }}
50
+ {{endif}}
51
+
52
+
53
+ #################### CppScopedEnumBase ####################
54
+
55
+ cdef object __Pyx_EnumBase
56
+ from enum import IntEnum as __Pyx_EnumBase
57
+
58
+ #################### CppScopedEnumType ####################
59
+ # requires CppScopedEnumBase (but this is done manually to avoid duplication)
60
+ cdef dict __Pyx_globals = globals()
61
+
62
+ __Pyx_globals["{{name}}"] = __Pyx_EnumBase('{{name}}', [
63
+ {{for item in items}}
64
+ ('{{item}}', <{{underlying_type}}>({{name}}.{{item}})),
65
+ {{endfor}}
66
+ ], module=__Pyx_globals.get("__module__", '{{static_modname}}'))
67
+
68
+ {{if enum_doc is not None}}
69
+ __Pyx_globals["{{name}}"].__doc__ = {{ repr(enum_doc) }}
70
+ {{endif}}
71
+
72
+
73
+ #################### EnumTypeToPy ####################
74
+
75
+ {{if module_name}}
76
+ cdef object __pyx_imported_enum_{{funcname}} = None
77
+ {{endif}}
78
+
79
+ @cname("{{funcname}}")
80
+ cdef {{funcname}}({{name}} c_val):
81
+ cdef object __pyx_enum
82
+ {{if module_name}}
83
+ global __pyx_imported_enum_{{funcname}}
84
+ # There's a complication here: the Python enum wrapping is only generated
85
+ # for enums defined in the same module that they're used in. Therefore, if
86
+ # the enum was cimported from a different module, we try to import it.
87
+ # If that fails we return an int equivalent as the next best option.
88
+ if __pyx_imported_enum_{{funcname}} is None:
89
+ try:
90
+ from {{module_name}} import {{name}} as __pyx_imported_enum_{{funcname}}
91
+ except ImportError:
92
+ __pyx_imported_enum_{{funcname}} = False # False indicates "don't try again"
93
+ import warnings
94
+ warnings.warn(
95
+ f"enum class {{name}} not importable from {{module_name}}. "
96
+ "You are probably using a cpdef enum declared in a .pxd file that "
97
+ "does not have a .py or .pyx file.")
98
+ if __pyx_imported_enum_{{funcname}} is False:
99
+ # shortcut - if the import failed there's no point repeating it
100
+ # (and repeating the warning)
101
+ return <{{underlying_type}}>c_val
102
+ __pyx_enum = __pyx_imported_enum_{{funcname}}
103
+ {{else}}
104
+ __pyx_enum = {{name}}
105
+ {{endif}}
106
+ # TODO - Cython only manages to optimize C enums to a switch currently
107
+ if 0:
108
+ pass
109
+ {{for item in items}}
110
+ elif c_val == {{name}}.{{item}}:
111
+ return __pyx_enum.{{item}}
112
+ {{endfor}}
113
+ else:
114
+ underlying_c_val = <{{underlying_type}}>c_val
115
+ {{if is_flag}}
116
+ return __pyx_enum(underlying_c_val)
117
+ {{else}}
118
+ raise ValueError(f"{underlying_c_val} is not a valid {{name}}")
119
+ {{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
+ }