oxython 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. Cython/Build/BuildExecutable.py +156 -0
  2. Cython/Build/Cache.py +198 -0
  3. Cython/Build/Cythonize.py +349 -0
  4. Cython/Build/Dependencies.py +1320 -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 +222 -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.pxd +154 -0
  26. Cython/Compiler/Code.py +3760 -0
  27. Cython/Compiler/CodeGeneration.py +33 -0
  28. Cython/Compiler/CythonScope.py +208 -0
  29. Cython/Compiler/Dataclass.py +890 -0
  30. Cython/Compiler/DebugFlags.py +24 -0
  31. Cython/Compiler/Errors.py +310 -0
  32. Cython/Compiler/ExprNodes.py +16319 -0
  33. Cython/Compiler/FlowControl.pxd +112 -0
  34. Cython/Compiler/FlowControl.py +1575 -0
  35. Cython/Compiler/FusedNode.py +978 -0
  36. Cython/Compiler/Future.py +16 -0
  37. Cython/Compiler/Interpreter.py +57 -0
  38. Cython/Compiler/Lexicon.py +442 -0
  39. Cython/Compiler/LineTable.py +114 -0
  40. Cython/Compiler/Main.py +879 -0
  41. Cython/Compiler/MatchCaseNodes.py +2200 -0
  42. Cython/Compiler/MemoryView.py +930 -0
  43. Cython/Compiler/ModuleNode.py +4558 -0
  44. Cython/Compiler/Naming.py +370 -0
  45. Cython/Compiler/Nodes.py +11334 -0
  46. Cython/Compiler/Optimize.py +5563 -0
  47. Cython/Compiler/Options.py +841 -0
  48. Cython/Compiler/ParseTreeTransforms.pxd +80 -0
  49. Cython/Compiler/ParseTreeTransforms.py +4808 -0
  50. Cython/Compiler/Parsing.pxd +9 -0
  51. Cython/Compiler/Parsing.py +5442 -0
  52. Cython/Compiler/Pipeline.py +439 -0
  53. Cython/Compiler/PyrexTypes.py +6588 -0
  54. Cython/Compiler/Pythran.py +232 -0
  55. Cython/Compiler/Scanning.pxd +74 -0
  56. Cython/Compiler/Scanning.py +771 -0
  57. Cython/Compiler/StringEncoding.py +354 -0
  58. Cython/Compiler/Symtab.py +3122 -0
  59. Cython/Compiler/Tests/TestBuffer.py +105 -0
  60. Cython/Compiler/Tests/TestBuiltin.py +196 -0
  61. Cython/Compiler/Tests/TestCmdLine.py +652 -0
  62. Cython/Compiler/Tests/TestCode.py +145 -0
  63. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  64. Cython/Compiler/Tests/TestGrammar.py +202 -0
  65. Cython/Compiler/Tests/TestMemView.py +71 -0
  66. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  67. Cython/Compiler/Tests/TestScanning.py +132 -0
  68. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  69. Cython/Compiler/Tests/TestStringEncoding.py +20 -0
  70. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  71. Cython/Compiler/Tests/TestTreePath.py +103 -0
  72. Cython/Compiler/Tests/TestTypes.py +119 -0
  73. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  74. Cython/Compiler/Tests/TestVisitor.py +119 -0
  75. Cython/Compiler/Tests/Utils.py +36 -0
  76. Cython/Compiler/Tests/__init__.py +1 -0
  77. Cython/Compiler/TreeFragment.py +279 -0
  78. Cython/Compiler/TreePath.py +303 -0
  79. Cython/Compiler/TypeInference.py +626 -0
  80. Cython/Compiler/TypeSlots.py +1330 -0
  81. Cython/Compiler/UFuncs.py +317 -0
  82. Cython/Compiler/UtilNodes.py +389 -0
  83. Cython/Compiler/UtilityCode.py +354 -0
  84. Cython/Compiler/Version.py +8 -0
  85. Cython/Compiler/Visitor.pxd +52 -0
  86. Cython/Compiler/Visitor.py +914 -0
  87. Cython/Compiler/__init__.py +1 -0
  88. Cython/Coverage.py +448 -0
  89. Cython/Debugger/Cygdb.py +214 -0
  90. Cython/Debugger/DebugWriter.py +82 -0
  91. Cython/Debugger/Tests/TestLibCython.py +280 -0
  92. Cython/Debugger/Tests/__init__.py +1 -0
  93. Cython/Debugger/Tests/cfuncs.c +8 -0
  94. Cython/Debugger/Tests/codefile +49 -0
  95. Cython/Debugger/Tests/test_libcython_in_gdb.py +580 -0
  96. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  97. Cython/Debugger/__init__.py +1 -0
  98. Cython/Debugger/libcython.py +1548 -0
  99. Cython/Debugger/libpython.py +2821 -0
  100. Cython/Debugging.py +20 -0
  101. Cython/Distutils/__init__.py +2 -0
  102. Cython/Distutils/build_ext.py +143 -0
  103. Cython/Distutils/extension.py +96 -0
  104. Cython/Distutils/old_build_ext.py +351 -0
  105. Cython/Includes/cpython/__init__.pxd +173 -0
  106. Cython/Includes/cpython/array.pxd +159 -0
  107. Cython/Includes/cpython/bool.pxd +37 -0
  108. Cython/Includes/cpython/buffer.pxd +112 -0
  109. Cython/Includes/cpython/bytearray.pxd +33 -0
  110. Cython/Includes/cpython/bytes.pxd +200 -0
  111. Cython/Includes/cpython/cellobject.pxd +35 -0
  112. Cython/Includes/cpython/ceval.pxd +8 -0
  113. Cython/Includes/cpython/codecs.pxd +121 -0
  114. Cython/Includes/cpython/complex.pxd +60 -0
  115. Cython/Includes/cpython/contextvars.pxd +145 -0
  116. Cython/Includes/cpython/conversion.pxd +36 -0
  117. Cython/Includes/cpython/datetime.pxd +395 -0
  118. Cython/Includes/cpython/descr.pxd +26 -0
  119. Cython/Includes/cpython/dict.pxd +268 -0
  120. Cython/Includes/cpython/exc.pxd +263 -0
  121. Cython/Includes/cpython/fileobject.pxd +57 -0
  122. Cython/Includes/cpython/float.pxd +56 -0
  123. Cython/Includes/cpython/frozendict.pxd +37 -0
  124. Cython/Includes/cpython/function.pxd +65 -0
  125. Cython/Includes/cpython/genobject.pxd +25 -0
  126. Cython/Includes/cpython/getargs.pxd +12 -0
  127. Cython/Includes/cpython/instance.pxd +25 -0
  128. Cython/Includes/cpython/iterator.pxd +36 -0
  129. Cython/Includes/cpython/iterobject.pxd +24 -0
  130. Cython/Includes/cpython/list.pxd +144 -0
  131. Cython/Includes/cpython/long.pxd +180 -0
  132. Cython/Includes/cpython/longintrepr.pxd +14 -0
  133. Cython/Includes/cpython/mapping.pxd +63 -0
  134. Cython/Includes/cpython/marshal.pxd +66 -0
  135. Cython/Includes/cpython/mem.pxd +120 -0
  136. Cython/Includes/cpython/memoryview.pxd +50 -0
  137. Cython/Includes/cpython/method.pxd +49 -0
  138. Cython/Includes/cpython/module.pxd +208 -0
  139. Cython/Includes/cpython/number.pxd +258 -0
  140. Cython/Includes/cpython/object.pxd +430 -0
  141. Cython/Includes/cpython/pycapsule.pxd +143 -0
  142. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  143. Cython/Includes/cpython/pyport.pxd +8 -0
  144. Cython/Includes/cpython/pystate.pxd +95 -0
  145. Cython/Includes/cpython/pythread.pxd +53 -0
  146. Cython/Includes/cpython/ref.pxd +141 -0
  147. Cython/Includes/cpython/sentinel.pxd +17 -0
  148. Cython/Includes/cpython/sequence.pxd +134 -0
  149. Cython/Includes/cpython/set.pxd +119 -0
  150. Cython/Includes/cpython/slice.pxd +70 -0
  151. Cython/Includes/cpython/time.pxd +129 -0
  152. Cython/Includes/cpython/tuple.pxd +72 -0
  153. Cython/Includes/cpython/type.pxd +146 -0
  154. Cython/Includes/cpython/unicode.pxd +639 -0
  155. Cython/Includes/cpython/version.pxd +32 -0
  156. Cython/Includes/cpython/weakref.pxd +78 -0
  157. Cython/Includes/libc/__init__.pxd +1 -0
  158. Cython/Includes/libc/complex.pxd +35 -0
  159. Cython/Includes/libc/errno.pxd +127 -0
  160. Cython/Includes/libc/float.pxd +43 -0
  161. Cython/Includes/libc/limits.pxd +28 -0
  162. Cython/Includes/libc/locale.pxd +46 -0
  163. Cython/Includes/libc/math.pxd +209 -0
  164. Cython/Includes/libc/setjmp.pxd +10 -0
  165. Cython/Includes/libc/signal.pxd +64 -0
  166. Cython/Includes/libc/stdbool.pxd +5 -0
  167. Cython/Includes/libc/stddef.pxd +9 -0
  168. Cython/Includes/libc/stdint.pxd +105 -0
  169. Cython/Includes/libc/stdio.pxd +80 -0
  170. Cython/Includes/libc/stdlib.pxd +72 -0
  171. Cython/Includes/libc/string.pxd +50 -0
  172. Cython/Includes/libc/threads.pxd +234 -0
  173. Cython/Includes/libc/time.pxd +52 -0
  174. Cython/Includes/libcpp/__init__.pxd +4 -0
  175. Cython/Includes/libcpp/algorithm.pxd +320 -0
  176. Cython/Includes/libcpp/any.pxd +16 -0
  177. Cython/Includes/libcpp/atomic.pxd +59 -0
  178. Cython/Includes/libcpp/barrier.pxd +22 -0
  179. Cython/Includes/libcpp/bit.pxd +29 -0
  180. Cython/Includes/libcpp/cast.pxd +12 -0
  181. Cython/Includes/libcpp/cmath.pxd +518 -0
  182. Cython/Includes/libcpp/complex.pxd +106 -0
  183. Cython/Includes/libcpp/condition_variable.pxd +322 -0
  184. Cython/Includes/libcpp/deque.pxd +165 -0
  185. Cython/Includes/libcpp/exception.pxd +216 -0
  186. Cython/Includes/libcpp/execution.pxd +15 -0
  187. Cython/Includes/libcpp/forward_list.pxd +63 -0
  188. Cython/Includes/libcpp/functional.pxd +26 -0
  189. Cython/Includes/libcpp/future.pxd +103 -0
  190. Cython/Includes/libcpp/iterator.pxd +34 -0
  191. Cython/Includes/libcpp/latch.pxd +17 -0
  192. Cython/Includes/libcpp/limits.pxd +61 -0
  193. Cython/Includes/libcpp/list.pxd +117 -0
  194. Cython/Includes/libcpp/map.pxd +252 -0
  195. Cython/Includes/libcpp/memory.pxd +115 -0
  196. Cython/Includes/libcpp/mutex.pxd +387 -0
  197. Cython/Includes/libcpp/numbers.pxd +15 -0
  198. Cython/Includes/libcpp/numeric.pxd +131 -0
  199. Cython/Includes/libcpp/optional.pxd +34 -0
  200. Cython/Includes/libcpp/pair.pxd +1 -0
  201. Cython/Includes/libcpp/queue.pxd +25 -0
  202. Cython/Includes/libcpp/random.pxd +166 -0
  203. Cython/Includes/libcpp/semaphore.pxd +43 -0
  204. Cython/Includes/libcpp/set.pxd +228 -0
  205. Cython/Includes/libcpp/shared_mutex.pxd +96 -0
  206. Cython/Includes/libcpp/span.pxd +87 -0
  207. Cython/Includes/libcpp/stack.pxd +11 -0
  208. Cython/Includes/libcpp/stop_token.pxd +117 -0
  209. Cython/Includes/libcpp/string.pxd +355 -0
  210. Cython/Includes/libcpp/string_view.pxd +183 -0
  211. Cython/Includes/libcpp/typeindex.pxd +15 -0
  212. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  213. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  214. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  215. Cython/Includes/libcpp/utility.pxd +30 -0
  216. Cython/Includes/libcpp/vector.pxd +186 -0
  217. Cython/Includes/numpy/math.pxd +150 -0
  218. Cython/Includes/openmp.pxd +50 -0
  219. Cython/Includes/posix/__init__.pxd +1 -0
  220. Cython/Includes/posix/dlfcn.pxd +14 -0
  221. Cython/Includes/posix/fcntl.pxd +86 -0
  222. Cython/Includes/posix/ioctl.pxd +4 -0
  223. Cython/Includes/posix/mman.pxd +101 -0
  224. Cython/Includes/posix/resource.pxd +57 -0
  225. Cython/Includes/posix/select.pxd +21 -0
  226. Cython/Includes/posix/signal.pxd +73 -0
  227. Cython/Includes/posix/stat.pxd +98 -0
  228. Cython/Includes/posix/stdio.pxd +37 -0
  229. Cython/Includes/posix/stdlib.pxd +29 -0
  230. Cython/Includes/posix/strings.pxd +9 -0
  231. Cython/Includes/posix/time.pxd +71 -0
  232. Cython/Includes/posix/types.pxd +30 -0
  233. Cython/Includes/posix/uio.pxd +26 -0
  234. Cython/Includes/posix/unistd.pxd +271 -0
  235. Cython/Includes/posix/wait.pxd +38 -0
  236. Cython/LZSS.py +184 -0
  237. Cython/Plex/Actions.pxd +24 -0
  238. Cython/Plex/Actions.py +119 -0
  239. Cython/Plex/DFA.pxd +14 -0
  240. Cython/Plex/DFA.py +164 -0
  241. Cython/Plex/Errors.py +48 -0
  242. Cython/Plex/Lexicons.py +178 -0
  243. Cython/Plex/Machines.pxd +36 -0
  244. Cython/Plex/Machines.py +238 -0
  245. Cython/Plex/Regexps.py +535 -0
  246. Cython/Plex/Scanners.pxd +45 -0
  247. Cython/Plex/Scanners.py +328 -0
  248. Cython/Plex/Transitions.pxd +14 -0
  249. Cython/Plex/Transitions.py +239 -0
  250. Cython/Plex/__init__.py +34 -0
  251. Cython/Runtime/__init__.py +1 -0
  252. Cython/Runtime/refnanny.pyx +237 -0
  253. Cython/Shadow.py +1172 -0
  254. Cython/StringIOTree.py +169 -0
  255. Cython/Tempita/__init__.py +4 -0
  256. Cython/Tempita/_looper.py +154 -0
  257. Cython/Tempita/_tempita.py +1087 -0
  258. Cython/TestUtils.py +472 -0
  259. Cython/Tests/TestCodeWriter.py +128 -0
  260. Cython/Tests/TestCythonUtils.py +237 -0
  261. Cython/Tests/TestJediTyper.py +223 -0
  262. Cython/Tests/TestShadow.py +125 -0
  263. Cython/Tests/TestStringIOTree.py +68 -0
  264. Cython/Tests/TestTestUtils.py +89 -0
  265. Cython/Tests/__init__.py +1 -0
  266. Cython/Tests/xmlrunner.py +390 -0
  267. Cython/Utility/AsyncGen.c +1152 -0
  268. Cython/Utility/Buffer.c +866 -0
  269. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  270. Cython/Utility/Builtins.c +1068 -0
  271. Cython/Utility/CConvert.pyx +153 -0
  272. Cython/Utility/CMath.c +104 -0
  273. Cython/Utility/CommonStructures.c +244 -0
  274. Cython/Utility/Complex.c +378 -0
  275. Cython/Utility/Coroutine.c +2344 -0
  276. Cython/Utility/CpdefEnums.pyx +119 -0
  277. Cython/Utility/CppConvert.pyx +284 -0
  278. Cython/Utility/CppSupport.cpp +151 -0
  279. Cython/Utility/CythonFunction.c +2143 -0
  280. Cython/Utility/Dataclasses.c +101 -0
  281. Cython/Utility/Embed.c +129 -0
  282. Cython/Utility/Exceptions.c +1331 -0
  283. Cython/Utility/Exceptions_Cy.pyx +109 -0
  284. Cython/Utility/ExtensionTypes.c +1199 -0
  285. Cython/Utility/FunctionArguments.c +1052 -0
  286. Cython/Utility/FusedFunction.pyx +44 -0
  287. Cython/Utility/ImportExport.c +972 -0
  288. Cython/Utility/MatchCase.c +985 -0
  289. Cython/Utility/MatchCase_Cy.pyx +12 -0
  290. Cython/Utility/MemoryView.pxd +108 -0
  291. Cython/Utility/MemoryView.pyx +1499 -0
  292. Cython/Utility/MemoryView_C.c +1056 -0
  293. Cython/Utility/ModuleSetupCode.c +3349 -0
  294. Cython/Utility/NumpyImportArray.c +46 -0
  295. Cython/Utility/ObjectHandling.c +3404 -0
  296. Cython/Utility/Optimize.c +2575 -0
  297. Cython/Utility/Overflow.c +378 -0
  298. Cython/Utility/Profile.c +736 -0
  299. Cython/Utility/StringTools.c +1534 -0
  300. Cython/Utility/Synchronization.c +438 -0
  301. Cython/Utility/TString.c +369 -0
  302. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  303. Cython/Utility/TestCythonScope.pyx +75 -0
  304. Cython/Utility/TestUtilityLoader.c +12 -0
  305. Cython/Utility/TypeConversion.c +1588 -0
  306. Cython/Utility/UFuncs.pyx +50 -0
  307. Cython/Utility/UFuncs_C.c +89 -0
  308. Cython/Utility/__init__.py +28 -0
  309. Cython/Utility/arrayarray.h +190 -0
  310. Cython/Utils.py +682 -0
  311. Cython/__init__.py +12 -0
  312. Cython/py.typed +0 -0
  313. cython.py +29 -0
  314. oxython-0.1.0.dist-info/METADATA +138 -0
  315. oxython-0.1.0.dist-info/RECORD +321 -0
  316. oxython-0.1.0.dist-info/WHEEL +5 -0
  317. oxython-0.1.0.dist-info/entry_points.txt +4 -0
  318. oxython-0.1.0.dist-info/top_level.txt +3 -0
  319. pyximport/__init__.py +4 -0
  320. pyximport/pyxbuild.py +160 -0
  321. 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,284 @@
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 __pyx_cpp_string "{{type}}":
8
+ __pyx_cpp_string() except +
9
+ __pyx_cpp_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 __pyx_cpp_string {{cname}}(object o) except *:
14
+ cdef Py_ssize_t length = 0
15
+ cdef const char* data = __Pyx_PyObject_AsStringAndSize(o, &length)
16
+ return __pyx_cpp_string(data, <size_t> length)
17
+
18
+
19
+ #################### string.to_py ####################
20
+
21
+ #cimport cython
22
+ #from libcpp.string cimport string as __pyx_cpp_string
23
+ cdef extern from *:
24
+ const Py_ssize_t PY_SSIZE_T_MAX
25
+ cdef cppclass __pyx_cpp_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 __pyx_cpp_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 __pyx_cpp_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 __pyx_cpp_vector[X] {{cname}}(object o) except *:
53
+
54
+ cdef __pyx_cpp_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 __pyx_cpp_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
+ object PyList_New(Py_ssize_t size)
76
+ int __Pyx_PyList_SET_ITEM(object pylist, 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 __pyx_cpp_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 __pyx_cpp_list "std::list" [T]:
101
+ void push_back(T&) except +
102
+
103
+ @cname("{{cname}}")
104
+ cdef __pyx_cpp_list[X] {{cname}}(object o) except *:
105
+ cdef __pyx_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 __pyx_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
+ object PyList_New(Py_ssize_t size)
128
+ void __Pyx_PyList_SET_ITEM(object pylist, Py_ssize_t i, object o)
129
+ cdef Py_ssize_t PY_SSIZE_T_MAX
130
+
131
+ @cname("{{cname}}")
132
+ cdef object {{cname}}(const __pyx_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 __pyx_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 __pyx_cpp_set "std::{{maybe_unordered}}set" [T]:
156
+ void insert(T&) except +
157
+
158
+ @cname("{{cname}}")
159
+ cdef __pyx_cpp_set[X] {{cname}}(object o) except *:
160
+ cdef __pyx_cpp_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 __pyx_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 __pyx_cpp_set[X]& s):
181
+ return {v for v in s}
182
+
183
+ #################### pair.from_py ####################
184
+
185
+ cdef extern from *:
186
+ cdef cppclass __pyx_cpp_pair "std::pair" [T, U]:
187
+ __pyx_cpp_pair() except +
188
+ __pyx_cpp_pair(T&, U&) except +
189
+
190
+ @cname("{{cname}}")
191
+ cdef __pyx_cpp_pair[X,Y] {{cname}}(object o) except *:
192
+ x, y = o
193
+ return __pyx_cpp_pair[X,Y](<X>x, <Y>y)
194
+
195
+
196
+ #################### pair.to_py ####################
197
+
198
+ cdef extern from *:
199
+ cdef cppclass __pyx_cpp_pair "std::pair" [T, U]:
200
+ T first
201
+ U second
202
+
203
+ @cname("{{cname}}")
204
+ cdef object {{cname}}(const __pyx_cpp_pair[X,Y]& p):
205
+ return p.first, p.second
206
+
207
+
208
+ #################### map.from_py ####################
209
+
210
+ cdef extern from *:
211
+ cdef cppclass __pyx_cpp_pair "std::pair" [T, U]:
212
+ __pyx_cpp_pair(T&, U&) except +
213
+ cdef cppclass __pyx_cpp_map "std::{{maybe_unordered}}map" [T, U]:
214
+ void insert(__pyx_cpp_pair[T, U]&) except +
215
+
216
+
217
+ @cname("{{cname}}")
218
+ cdef __pyx_cpp_map[X,Y] {{cname}}(object o) except *:
219
+ cdef __pyx_cpp_map[X,Y] m
220
+ for key, value in o.items():
221
+ m.insert(__pyx_cpp_pair[X,Y](<X>key, <Y>value))
222
+ return m
223
+
224
+
225
+ #################### map.to_py ####################
226
+ # TODO: Work out const so that this can take a const
227
+ # reference rather than pass by value.
228
+
229
+ cimport cython
230
+
231
+ cdef extern from *:
232
+ cdef cppclass __pyx_cpp_map "std::{{maybe_unordered}}map" [T, U]:
233
+ cppclass value_type:
234
+ T first
235
+ U second
236
+ cppclass const_iterator:
237
+ value_type& operator*()
238
+ const_iterator operator++()
239
+ bint operator!=(const_iterator)
240
+ const_iterator begin()
241
+ const_iterator end()
242
+
243
+ @cname("{{cname}}")
244
+ cdef object {{cname}}(const __pyx_cpp_map[X,Y]& s):
245
+ o = {}
246
+ cdef const __pyx_cpp_map[X,Y].value_type *key_value
247
+ cdef __pyx_cpp_map[X,Y].const_iterator iter = s.begin()
248
+ while iter != s.end():
249
+ key_value = &cython.operator.dereference(iter)
250
+ o[key_value.first] = key_value.second
251
+ cython.operator.preincrement(iter)
252
+ return o
253
+
254
+
255
+ #################### complex.from_py ####################
256
+
257
+ cimport cython
258
+
259
+ cdef extern from *:
260
+ cdef cppclass __pyx_cpp_std_complex "std::complex" [T]:
261
+ __pyx_cpp_std_complex()
262
+ __pyx_cpp_std_complex(T, T) except +
263
+
264
+ @cname("{{cname}}")
265
+ cdef __pyx_cpp_std_complex[X] {{cname}}(object o) except *:
266
+ cdef cython.doublecomplex z = o
267
+ return __pyx_cpp_std_complex[X](<X>z.real, <X>z.imag)
268
+
269
+
270
+ #################### complex.to_py ####################
271
+
272
+ cimport cython
273
+
274
+ cdef extern from *:
275
+ cdef cppclass __pyx_cpp_std_complex "std::complex" [T]:
276
+ X real()
277
+ X imag()
278
+
279
+ @cname("{{cname}}")
280
+ cdef object {{cname}}(const __pyx_cpp_std_complex[X]& z):
281
+ cdef cython.doublecomplex tmp
282
+ tmp.real = <cython.double>z.real()
283
+ tmp.imag = <cython.double>z.imag()
284
+ 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
+ }