Cython 3.1.0a1__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 (301) hide show
  1. Cython/Build/BuildExecutable.py +169 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +250 -0
  4. Cython/Build/Dependencies.py +1275 -0
  5. Cython/Build/Distutils.py +1 -0
  6. Cython/Build/Inline.py +342 -0
  7. Cython/Build/IpythonMagic.py +560 -0
  8. Cython/Build/Tests/TestCyCache.py +119 -0
  9. Cython/Build/Tests/TestCythonizeArgsParser.py +481 -0
  10. Cython/Build/Tests/TestDependencies.py +133 -0
  11. Cython/Build/Tests/TestInline.py +112 -0
  12. Cython/Build/Tests/TestIpythonMagic.py +287 -0
  13. Cython/Build/Tests/TestRecythonize.py +212 -0
  14. Cython/Build/Tests/TestStripLiterals.py +155 -0
  15. Cython/Build/Tests/__init__.py +1 -0
  16. Cython/Build/__init__.py +8 -0
  17. Cython/CodeWriter.py +811 -0
  18. Cython/Compiler/AnalysedTreeTransforms.py +97 -0
  19. Cython/Compiler/Annotate.py +326 -0
  20. Cython/Compiler/AutoDocTransforms.py +314 -0
  21. Cython/Compiler/Buffer.py +680 -0
  22. Cython/Compiler/Builtin.py +862 -0
  23. Cython/Compiler/CmdLine.py +243 -0
  24. Cython/Compiler/Code.pxd +145 -0
  25. Cython/Compiler/Code.py +3328 -0
  26. Cython/Compiler/CodeGeneration.py +33 -0
  27. Cython/Compiler/CythonScope.py +179 -0
  28. Cython/Compiler/Dataclass.py +868 -0
  29. Cython/Compiler/DebugFlags.py +21 -0
  30. Cython/Compiler/Errors.py +295 -0
  31. Cython/Compiler/ExprNodes.py +15051 -0
  32. Cython/Compiler/FlowControl.pxd +97 -0
  33. Cython/Compiler/FlowControl.py +1438 -0
  34. Cython/Compiler/FusedNode.py +998 -0
  35. Cython/Compiler/Future.py +16 -0
  36. Cython/Compiler/Interpreter.py +57 -0
  37. Cython/Compiler/Lexicon.py +340 -0
  38. Cython/Compiler/LineTable.py +114 -0
  39. Cython/Compiler/Main.py +779 -0
  40. Cython/Compiler/MatchCaseNodes.py +259 -0
  41. Cython/Compiler/MemoryView.py +860 -0
  42. Cython/Compiler/ModuleNode.py +4065 -0
  43. Cython/Compiler/Naming.py +369 -0
  44. Cython/Compiler/Nodes.py +10557 -0
  45. Cython/Compiler/Optimize.py +5269 -0
  46. Cython/Compiler/Options.py +828 -0
  47. Cython/Compiler/ParseTreeTransforms.pxd +78 -0
  48. Cython/Compiler/ParseTreeTransforms.py +4441 -0
  49. Cython/Compiler/Parsing.pxd +9 -0
  50. Cython/Compiler/Parsing.py +4797 -0
  51. Cython/Compiler/Pipeline.py +425 -0
  52. Cython/Compiler/PyrexTypes.py +5572 -0
  53. Cython/Compiler/Pythran.py +223 -0
  54. Cython/Compiler/Scanning.pxd +40 -0
  55. Cython/Compiler/Scanning.py +574 -0
  56. Cython/Compiler/StringEncoding.py +347 -0
  57. Cython/Compiler/Symtab.py +2998 -0
  58. Cython/Compiler/Tests/TestBuffer.py +105 -0
  59. Cython/Compiler/Tests/TestBuiltin.py +72 -0
  60. Cython/Compiler/Tests/TestCmdLine.py +573 -0
  61. Cython/Compiler/Tests/TestCode.py +86 -0
  62. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  63. Cython/Compiler/Tests/TestGrammar.py +202 -0
  64. Cython/Compiler/Tests/TestMemView.py +71 -0
  65. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  66. Cython/Compiler/Tests/TestScanning.py +134 -0
  67. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  68. Cython/Compiler/Tests/TestStringEncoding.py +33 -0
  69. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  70. Cython/Compiler/Tests/TestTreePath.py +93 -0
  71. Cython/Compiler/Tests/TestTypes.py +75 -0
  72. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  73. Cython/Compiler/Tests/TestVisitor.py +61 -0
  74. Cython/Compiler/Tests/Utils.py +36 -0
  75. Cython/Compiler/Tests/__init__.py +1 -0
  76. Cython/Compiler/TreeFragment.py +278 -0
  77. Cython/Compiler/TreePath.py +290 -0
  78. Cython/Compiler/TypeInference.py +584 -0
  79. Cython/Compiler/TypeSlots.py +1181 -0
  80. Cython/Compiler/UFuncs.py +311 -0
  81. Cython/Compiler/UtilNodes.py +387 -0
  82. Cython/Compiler/UtilityCode.py +274 -0
  83. Cython/Compiler/Version.py +8 -0
  84. Cython/Compiler/Visitor.pxd +53 -0
  85. Cython/Compiler/Visitor.py +861 -0
  86. Cython/Compiler/__init__.py +1 -0
  87. Cython/Coverage.py +443 -0
  88. Cython/Debugger/Cygdb.py +179 -0
  89. Cython/Debugger/DebugWriter.py +82 -0
  90. Cython/Debugger/Tests/TestLibCython.py +275 -0
  91. Cython/Debugger/Tests/__init__.py +1 -0
  92. Cython/Debugger/Tests/cfuncs.c +8 -0
  93. Cython/Debugger/Tests/codefile +49 -0
  94. Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
  95. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  96. Cython/Debugger/__init__.py +1 -0
  97. Cython/Debugger/libcython.py +1549 -0
  98. Cython/Debugger/libpython.py +2821 -0
  99. Cython/Debugging.py +20 -0
  100. Cython/Distutils/__init__.py +2 -0
  101. Cython/Distutils/build_ext.py +137 -0
  102. Cython/Distutils/extension.py +96 -0
  103. Cython/Distutils/old_build_ext.py +351 -0
  104. Cython/Includes/cpython/__init__.pxd +173 -0
  105. Cython/Includes/cpython/array.pxd +174 -0
  106. Cython/Includes/cpython/bool.pxd +37 -0
  107. Cython/Includes/cpython/buffer.pxd +112 -0
  108. Cython/Includes/cpython/bytearray.pxd +33 -0
  109. Cython/Includes/cpython/bytes.pxd +200 -0
  110. Cython/Includes/cpython/cellobject.pxd +35 -0
  111. Cython/Includes/cpython/ceval.pxd +8 -0
  112. Cython/Includes/cpython/codecs.pxd +121 -0
  113. Cython/Includes/cpython/complex.pxd +55 -0
  114. Cython/Includes/cpython/contextvars.pxd +141 -0
  115. Cython/Includes/cpython/conversion.pxd +36 -0
  116. Cython/Includes/cpython/datetime.pxd +384 -0
  117. Cython/Includes/cpython/descr.pxd +26 -0
  118. Cython/Includes/cpython/dict.pxd +187 -0
  119. Cython/Includes/cpython/exc.pxd +263 -0
  120. Cython/Includes/cpython/fileobject.pxd +57 -0
  121. Cython/Includes/cpython/float.pxd +47 -0
  122. Cython/Includes/cpython/function.pxd +65 -0
  123. Cython/Includes/cpython/genobject.pxd +25 -0
  124. Cython/Includes/cpython/getargs.pxd +12 -0
  125. Cython/Includes/cpython/instance.pxd +25 -0
  126. Cython/Includes/cpython/iterator.pxd +36 -0
  127. Cython/Includes/cpython/iterobject.pxd +24 -0
  128. Cython/Includes/cpython/list.pxd +92 -0
  129. Cython/Includes/cpython/long.pxd +149 -0
  130. Cython/Includes/cpython/longintrepr.pxd +19 -0
  131. Cython/Includes/cpython/mapping.pxd +63 -0
  132. Cython/Includes/cpython/marshal.pxd +66 -0
  133. Cython/Includes/cpython/mem.pxd +120 -0
  134. Cython/Includes/cpython/memoryview.pxd +50 -0
  135. Cython/Includes/cpython/method.pxd +49 -0
  136. Cython/Includes/cpython/module.pxd +208 -0
  137. Cython/Includes/cpython/number.pxd +258 -0
  138. Cython/Includes/cpython/object.pxd +433 -0
  139. Cython/Includes/cpython/pycapsule.pxd +143 -0
  140. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  141. Cython/Includes/cpython/pyport.pxd +8 -0
  142. Cython/Includes/cpython/pystate.pxd +95 -0
  143. Cython/Includes/cpython/pythread.pxd +53 -0
  144. Cython/Includes/cpython/ref.pxd +67 -0
  145. Cython/Includes/cpython/sequence.pxd +134 -0
  146. Cython/Includes/cpython/set.pxd +119 -0
  147. Cython/Includes/cpython/slice.pxd +70 -0
  148. Cython/Includes/cpython/time.pxd +129 -0
  149. Cython/Includes/cpython/tuple.pxd +72 -0
  150. Cython/Includes/cpython/type.pxd +53 -0
  151. Cython/Includes/cpython/unicode.pxd +639 -0
  152. Cython/Includes/cpython/version.pxd +32 -0
  153. Cython/Includes/cpython/weakref.pxd +42 -0
  154. Cython/Includes/libc/__init__.pxd +1 -0
  155. Cython/Includes/libc/complex.pxd +35 -0
  156. Cython/Includes/libc/errno.pxd +127 -0
  157. Cython/Includes/libc/float.pxd +43 -0
  158. Cython/Includes/libc/limits.pxd +28 -0
  159. Cython/Includes/libc/locale.pxd +46 -0
  160. Cython/Includes/libc/math.pxd +209 -0
  161. Cython/Includes/libc/setjmp.pxd +10 -0
  162. Cython/Includes/libc/signal.pxd +64 -0
  163. Cython/Includes/libc/stddef.pxd +9 -0
  164. Cython/Includes/libc/stdint.pxd +105 -0
  165. Cython/Includes/libc/stdio.pxd +80 -0
  166. Cython/Includes/libc/stdlib.pxd +72 -0
  167. Cython/Includes/libc/string.pxd +50 -0
  168. Cython/Includes/libc/time.pxd +47 -0
  169. Cython/Includes/libcpp/__init__.pxd +4 -0
  170. Cython/Includes/libcpp/algorithm.pxd +320 -0
  171. Cython/Includes/libcpp/any.pxd +16 -0
  172. Cython/Includes/libcpp/atomic.pxd +59 -0
  173. Cython/Includes/libcpp/bit.pxd +29 -0
  174. Cython/Includes/libcpp/cast.pxd +12 -0
  175. Cython/Includes/libcpp/cmath.pxd +518 -0
  176. Cython/Includes/libcpp/complex.pxd +106 -0
  177. Cython/Includes/libcpp/deque.pxd +165 -0
  178. Cython/Includes/libcpp/execution.pxd +15 -0
  179. Cython/Includes/libcpp/forward_list.pxd +63 -0
  180. Cython/Includes/libcpp/functional.pxd +26 -0
  181. Cython/Includes/libcpp/iterator.pxd +34 -0
  182. Cython/Includes/libcpp/limits.pxd +61 -0
  183. Cython/Includes/libcpp/list.pxd +117 -0
  184. Cython/Includes/libcpp/map.pxd +252 -0
  185. Cython/Includes/libcpp/memory.pxd +115 -0
  186. Cython/Includes/libcpp/numbers.pxd +15 -0
  187. Cython/Includes/libcpp/numeric.pxd +131 -0
  188. Cython/Includes/libcpp/optional.pxd +34 -0
  189. Cython/Includes/libcpp/pair.pxd +1 -0
  190. Cython/Includes/libcpp/queue.pxd +25 -0
  191. Cython/Includes/libcpp/random.pxd +166 -0
  192. Cython/Includes/libcpp/set.pxd +228 -0
  193. Cython/Includes/libcpp/stack.pxd +11 -0
  194. Cython/Includes/libcpp/string.pxd +333 -0
  195. Cython/Includes/libcpp/typeindex.pxd +15 -0
  196. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  197. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  198. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  199. Cython/Includes/libcpp/utility.pxd +30 -0
  200. Cython/Includes/libcpp/vector.pxd +167 -0
  201. Cython/Includes/openmp.pxd +50 -0
  202. Cython/Includes/posix/__init__.pxd +1 -0
  203. Cython/Includes/posix/dlfcn.pxd +14 -0
  204. Cython/Includes/posix/fcntl.pxd +86 -0
  205. Cython/Includes/posix/ioctl.pxd +4 -0
  206. Cython/Includes/posix/mman.pxd +101 -0
  207. Cython/Includes/posix/resource.pxd +57 -0
  208. Cython/Includes/posix/select.pxd +21 -0
  209. Cython/Includes/posix/signal.pxd +73 -0
  210. Cython/Includes/posix/stat.pxd +98 -0
  211. Cython/Includes/posix/stdio.pxd +37 -0
  212. Cython/Includes/posix/stdlib.pxd +29 -0
  213. Cython/Includes/posix/strings.pxd +9 -0
  214. Cython/Includes/posix/time.pxd +71 -0
  215. Cython/Includes/posix/types.pxd +30 -0
  216. Cython/Includes/posix/uio.pxd +26 -0
  217. Cython/Includes/posix/unistd.pxd +271 -0
  218. Cython/Includes/posix/wait.pxd +38 -0
  219. Cython/Plex/Actions.pxd +24 -0
  220. Cython/Plex/Actions.py +119 -0
  221. Cython/Plex/DFA.pxd +14 -0
  222. Cython/Plex/DFA.py +164 -0
  223. Cython/Plex/Errors.py +48 -0
  224. Cython/Plex/Lexicons.py +178 -0
  225. Cython/Plex/Machines.pxd +36 -0
  226. Cython/Plex/Machines.py +238 -0
  227. Cython/Plex/Regexps.py +539 -0
  228. Cython/Plex/Scanners.pxd +47 -0
  229. Cython/Plex/Scanners.py +360 -0
  230. Cython/Plex/Transitions.pxd +14 -0
  231. Cython/Plex/Transitions.py +239 -0
  232. Cython/Plex/__init__.py +34 -0
  233. Cython/Runtime/__init__.py +1 -0
  234. Cython/Runtime/refnanny.pyx +261 -0
  235. Cython/Shadow.py +656 -0
  236. Cython/Shadow.pyi +521 -0
  237. Cython/StringIOTree.py +170 -0
  238. Cython/Tempita/__init__.py +4 -0
  239. Cython/Tempita/_looper.py +154 -0
  240. Cython/Tempita/_tempita.py +1091 -0
  241. Cython/TestUtils.py +417 -0
  242. Cython/Tests/TestCodeWriter.py +128 -0
  243. Cython/Tests/TestCythonUtils.py +202 -0
  244. Cython/Tests/TestJediTyper.py +223 -0
  245. Cython/Tests/TestShadow.py +114 -0
  246. Cython/Tests/TestStringIOTree.py +67 -0
  247. Cython/Tests/TestTestUtils.py +90 -0
  248. Cython/Tests/__init__.py +1 -0
  249. Cython/Tests/xmlrunner.py +390 -0
  250. Cython/Utility/AsyncGen.c +1263 -0
  251. Cython/Utility/Buffer.c +875 -0
  252. Cython/Utility/Builtins.c +660 -0
  253. Cython/Utility/CConvert.pyx +134 -0
  254. Cython/Utility/CMath.c +95 -0
  255. Cython/Utility/CommonStructures.c +139 -0
  256. Cython/Utility/Complex.c +378 -0
  257. Cython/Utility/Coroutine.c +2413 -0
  258. Cython/Utility/CpdefEnums.pyx +108 -0
  259. Cython/Utility/CppConvert.pyx +279 -0
  260. Cython/Utility/CppSupport.cpp +133 -0
  261. Cython/Utility/CythonFunction.c +1851 -0
  262. Cython/Utility/Dataclasses.c +185 -0
  263. Cython/Utility/Dataclasses.py +112 -0
  264. Cython/Utility/Embed.c +125 -0
  265. Cython/Utility/Exceptions.c +1017 -0
  266. Cython/Utility/ExtensionTypes.c +797 -0
  267. Cython/Utility/FunctionArguments.c +573 -0
  268. Cython/Utility/ImportExport.c +912 -0
  269. Cython/Utility/MemoryView.pyx +1478 -0
  270. Cython/Utility/MemoryView_C.c +992 -0
  271. Cython/Utility/ModuleSetupCode.c +2501 -0
  272. Cython/Utility/NumpyImportArray.c +46 -0
  273. Cython/Utility/ObjectHandling.c +3054 -0
  274. Cython/Utility/Optimize.c +1533 -0
  275. Cython/Utility/Overflow.c +404 -0
  276. Cython/Utility/Printing.c +86 -0
  277. Cython/Utility/Profile.c +660 -0
  278. Cython/Utility/StringTools.c +1206 -0
  279. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  280. Cython/Utility/TestCythonScope.pyx +75 -0
  281. Cython/Utility/TestUtilityLoader.c +12 -0
  282. Cython/Utility/TypeConversion.c +1329 -0
  283. Cython/Utility/UFuncs.pyx +50 -0
  284. Cython/Utility/UFuncs_C.c +89 -0
  285. Cython/Utility/__init__.py +28 -0
  286. Cython/Utility/arrayarray.h +143 -0
  287. Cython/Utils.py +687 -0
  288. Cython/__init__.py +10 -0
  289. Cython/__init__.pyi +7 -0
  290. Cython/py.typed +0 -0
  291. Cython-3.1.0a1.dist-info/COPYING.txt +19 -0
  292. Cython-3.1.0a1.dist-info/LICENSE.txt +176 -0
  293. Cython-3.1.0a1.dist-info/METADATA +67 -0
  294. Cython-3.1.0a1.dist-info/RECORD +301 -0
  295. Cython-3.1.0a1.dist-info/WHEEL +5 -0
  296. Cython-3.1.0a1.dist-info/entry_points.txt +4 -0
  297. Cython-3.1.0a1.dist-info/top_level.txt +3 -0
  298. cython.py +29 -0
  299. pyximport/__init__.py +4 -0
  300. pyximport/pyxbuild.py +160 -0
  301. pyximport/pyximport.py +482 -0
@@ -0,0 +1,274 @@
1
+ from .TreeFragment import parse_from_strings, StringParseContext
2
+ from . import Symtab
3
+ from . import Naming
4
+ from . import Code
5
+
6
+ import re
7
+
8
+
9
+ class NonManglingModuleScope(Symtab.ModuleScope):
10
+
11
+ def __init__(self, prefix, *args, **kw):
12
+ self.prefix = prefix
13
+ self.cython_scope = None
14
+ self.cpp = kw.pop('cpp', False)
15
+ Symtab.ModuleScope.__init__(self, *args, **kw)
16
+
17
+ def add_imported_entry(self, name, entry, pos):
18
+ entry.used = True
19
+ return super().add_imported_entry(name, entry, pos)
20
+
21
+ def mangle(self, prefix, name=None):
22
+ if name:
23
+ if prefix in (Naming.typeobj_prefix, Naming.func_prefix, Naming.var_prefix, Naming.pyfunc_prefix):
24
+ # Functions, classes etc. gets a manually defined prefix easily
25
+ # manually callable instead (the one passed to CythonUtilityCode)
26
+ prefix = self.prefix
27
+ return "%s%s" % (prefix, name)
28
+ else:
29
+ return Symtab.ModuleScope.mangle(self, prefix)
30
+
31
+
32
+ class CythonUtilityCodeContext(StringParseContext):
33
+ scope = None
34
+
35
+ def find_module(self, module_name, from_module=None, pos=None, need_pxd=True, absolute_fallback=True, relative_import=False):
36
+ if from_module:
37
+ raise AssertionError("Relative imports not supported in utility code.")
38
+ if module_name != self.module_name:
39
+ if module_name not in self.modules:
40
+ raise AssertionError("Only the cython cimport is supported.")
41
+ else:
42
+ return self.modules[module_name]
43
+
44
+ if self.scope is None:
45
+ self.scope = NonManglingModuleScope(
46
+ self.prefix, module_name, parent_module=None, context=self, cpp=self.cpp)
47
+
48
+ return self.scope
49
+
50
+
51
+ class CythonUtilityCode(Code.UtilityCodeBase):
52
+ """
53
+ Utility code written in the Cython language itself.
54
+
55
+ The @cname decorator can set the cname for a function, method of cdef class.
56
+ Functions decorated with @cname('c_func_name') get the given cname.
57
+
58
+ For cdef classes the rules are as follows:
59
+ obj struct -> <cname>_obj
60
+ obj type ptr -> <cname>_type
61
+ methods -> <class_cname>_<method_cname>
62
+
63
+ For methods the cname decorator is optional, but without the decorator the
64
+ methods will not be prototyped. See Cython.Compiler.CythonScope and
65
+ tests/run/cythonscope.pyx for examples.
66
+ """
67
+
68
+ is_cython_utility = True
69
+
70
+ def __init__(self, impl, name="__pyxutil", prefix="", requires=None,
71
+ file=None, from_scope=None, context=None, compiler_directives=None,
72
+ outer_module_scope=None):
73
+ # 1) We need to delay the parsing/processing, so that all modules can be
74
+ # imported without import loops
75
+ # 2) The same utility code object can be used for multiple source files;
76
+ # while the generated node trees can be altered in the compilation of a
77
+ # single file.
78
+ # Hence, delay any processing until later.
79
+ context_types = {}
80
+ if context is not None:
81
+ from .PyrexTypes import BaseType
82
+ for key, value in context.items():
83
+ if isinstance(value, BaseType):
84
+ context[key] = key
85
+ context_types[key] = value
86
+ impl = Code.sub_tempita(impl, context, file, name)
87
+ self.impl = impl
88
+ self.name = name
89
+ self.file = file
90
+ self.prefix = prefix
91
+ self.requires = requires or []
92
+ self.from_scope = from_scope
93
+ self.outer_module_scope = outer_module_scope
94
+ self.compiler_directives = compiler_directives
95
+ self.context_types = context_types
96
+
97
+ def __eq__(self, other):
98
+ if isinstance(other, CythonUtilityCode):
99
+ return self._equality_params() == other._equality_params()
100
+ else:
101
+ return False
102
+
103
+ def _equality_params(self):
104
+ outer_scope = self.outer_module_scope
105
+ while isinstance(outer_scope, NonManglingModuleScope):
106
+ outer_scope = outer_scope.outer_scope
107
+ return self.impl, outer_scope, self.compiler_directives
108
+
109
+ def __hash__(self):
110
+ return hash(self.impl)
111
+
112
+ def get_tree(self, entries_only=False, cython_scope=None):
113
+ from .AnalysedTreeTransforms import AutoTestDictTransform
114
+ # The AutoTestDictTransform creates the statement "__test__ = {}",
115
+ # which when copied into the main ModuleNode overwrites
116
+ # any __test__ in user code; not desired
117
+ excludes = [AutoTestDictTransform]
118
+
119
+ from . import Pipeline, ParseTreeTransforms
120
+ context = CythonUtilityCodeContext(
121
+ self.name, compiler_directives=self.compiler_directives,
122
+ cpp=cython_scope.is_cpp() if cython_scope else False)
123
+ context.prefix = self.prefix
124
+ context.cython_scope = cython_scope
125
+ #context = StringParseContext(self.name)
126
+ tree = parse_from_strings(
127
+ self.name, self.impl, context=context, allow_struct_enum_decorator=True,
128
+ in_utility_code=True)
129
+ pipeline = Pipeline.create_pipeline(context, 'pyx', exclude_classes=excludes)
130
+
131
+ if entries_only:
132
+ p = []
133
+ for t in pipeline:
134
+ p.append(t)
135
+ if isinstance(t, ParseTreeTransforms.AnalyseDeclarationsTransform):
136
+ break
137
+
138
+ pipeline = p
139
+
140
+ transform = ParseTreeTransforms.CnameDirectivesTransform(context)
141
+ # InterpretCompilerDirectives already does a cdef declarator check
142
+ #before = ParseTreeTransforms.DecoratorTransform
143
+ before = ParseTreeTransforms.InterpretCompilerDirectives
144
+ pipeline = Pipeline.insert_into_pipeline(pipeline, transform,
145
+ before=before)
146
+
147
+ def merge_scope(scope):
148
+ def merge_scope_transform(module_node):
149
+ module_node.scope.merge_in(scope)
150
+ return module_node
151
+ return merge_scope_transform
152
+
153
+ if self.from_scope:
154
+ pipeline = Pipeline.insert_into_pipeline(
155
+ pipeline, merge_scope(self.from_scope),
156
+ before=ParseTreeTransforms.AnalyseDeclarationsTransform)
157
+
158
+ for dep in self.requires:
159
+ if isinstance(dep, CythonUtilityCode) and hasattr(dep, 'tree') and not cython_scope:
160
+ pipeline = Pipeline.insert_into_pipeline(
161
+ pipeline, merge_scope(dep.tree.scope),
162
+ before=ParseTreeTransforms.AnalyseDeclarationsTransform)
163
+
164
+ if self.outer_module_scope:
165
+ # inject outer module between utility code module and builtin module
166
+ def scope_transform(module_node):
167
+ module_node.scope.outer_scope = self.outer_module_scope
168
+ return module_node
169
+
170
+ pipeline = Pipeline.insert_into_pipeline(
171
+ pipeline, scope_transform,
172
+ before=ParseTreeTransforms.AnalyseDeclarationsTransform)
173
+
174
+ if self.context_types:
175
+ # inject types into module scope
176
+ def scope_transform(module_node):
177
+ dummy_entry = object()
178
+ for name, type in self.context_types.items():
179
+ # Restore the old type entry after declaring the type.
180
+ # We need to access types in the scope, but this shouldn't alter the entry
181
+ # that is visible from everywhere else
182
+ old_type_entry = getattr(type, "entry", dummy_entry)
183
+ entry = module_node.scope.declare_type(name, type, None, visibility='extern')
184
+ if old_type_entry is not dummy_entry:
185
+ type.entry = old_type_entry
186
+ entry.in_cinclude = True
187
+ return module_node
188
+
189
+ pipeline = Pipeline.insert_into_pipeline(
190
+ pipeline, scope_transform,
191
+ before=ParseTreeTransforms.AnalyseDeclarationsTransform)
192
+
193
+ (err, tree) = Pipeline.run_pipeline(pipeline, tree, printtree=False)
194
+ assert not err, err
195
+ self.tree = tree
196
+ return tree
197
+
198
+ def put_code(self, output):
199
+ pass
200
+
201
+ @classmethod
202
+ def load(cls, util_code_name, from_file, **kwargs):
203
+ if re.search("[.]c(pp)?::", util_code_name):
204
+ # We're trying to load a C/C++ utility code.
205
+ # For now, just handle the simple case with no tempita
206
+ return Code.UtilityCode.load_cached(util_code_name, from_file)
207
+ return super().load(util_code_name, from_file, **kwargs)
208
+
209
+ @classmethod
210
+ def load_as_string(cls, util_code_name, from_file=None, **kwargs):
211
+ """
212
+ Load a utility code as a string. Returns (proto, implementation)
213
+ """
214
+ util = cls.load(util_code_name, from_file, **kwargs)
215
+ return util.proto, util.impl # keep line numbers => no lstrip()
216
+
217
+ def declare_in_scope(self, dest_scope, used=False, cython_scope=None,
218
+ allowlist=None):
219
+ """
220
+ Declare all entries from the utility code in dest_scope. Code will only
221
+ be included for used entries. If module_name is given, declare the
222
+ type entries with that name.
223
+ """
224
+ tree = self.get_tree(entries_only=True, cython_scope=cython_scope)
225
+
226
+ entries = tree.scope.entries
227
+ entries.pop('__name__')
228
+ entries.pop('__file__')
229
+ entries.pop('__builtins__')
230
+ entries.pop('__doc__')
231
+
232
+ for entry in entries.values():
233
+ entry.utility_code_definition = self
234
+ entry.used = used
235
+
236
+ original_scope = tree.scope
237
+ dest_scope.merge_in(original_scope, merge_unused=True, allowlist=allowlist)
238
+ tree.scope = dest_scope
239
+
240
+ for dep in self.requires:
241
+ if dep.is_cython_utility:
242
+ dep.declare_in_scope(dest_scope, cython_scope=cython_scope)
243
+
244
+ return original_scope
245
+
246
+ @staticmethod
247
+ def filter_inherited_directives(current_directives):
248
+ """
249
+ Cython utility code should usually only pick up a few directives from the
250
+ environment (those that intentionally control its function) and ignore most
251
+ other compiler directives. This function provides a sensible default list
252
+ of directives to copy.
253
+ """
254
+ from .Options import _directive_defaults
255
+ utility_code_directives = dict(_directive_defaults)
256
+ inherited_directive_names = (
257
+ 'binding', 'always_allow_keywords', 'allow_none_for_extension_args',
258
+ 'auto_pickle', 'ccomplex',
259
+ 'c_string_type', 'c_string_encoding',
260
+ 'optimize.inline_defnode_calls', 'optimize.unpack_method_calls',
261
+ 'optimize.unpack_method_calls_in_pyinit', 'optimize.use_switch')
262
+ for name in inherited_directive_names:
263
+ if name in current_directives:
264
+ utility_code_directives[name] = current_directives[name]
265
+ return utility_code_directives
266
+
267
+
268
+ def declare_declarations_in_scope(declaration_string, env, private_type=True,
269
+ *args, **kwargs):
270
+ """
271
+ Declare some declarations given as Cython code in declaration_string
272
+ in scope env.
273
+ """
274
+ CythonUtilityCode(declaration_string, *args, **kwargs).declare_in_scope(env)
@@ -0,0 +1,8 @@
1
+ # for backwards compatibility
2
+
3
+
4
+ from .. import __version__ as version
5
+
6
+ # For 'generated by' header line in C files.
7
+
8
+ watermark = str(version)
@@ -0,0 +1,53 @@
1
+ cimport cython
2
+
3
+ cdef class TreeVisitor:
4
+ cdef public list access_path
5
+ cdef dict dispatch_table
6
+
7
+ cpdef visit(self, obj)
8
+ cdef _visit(self, obj)
9
+ cdef find_handler(self, obj)
10
+ cdef _visitchild(self, child, parent, attrname, idx)
11
+ cdef dict _visitchildren(self, parent, attrs, exclude)
12
+ cpdef visitchildren(self, parent, attrs=*, exclude=*)
13
+ cdef _raise_compiler_error(self, child, e)
14
+
15
+ cdef class VisitorTransform(TreeVisitor):
16
+ cdef dict _process_children(self, parent, attrs=*, exclude=*)
17
+ cpdef visitchildren(self, parent, attrs=*, exclude=*)
18
+ cdef list _flatten_list(self, list orig_list)
19
+ cpdef visitchild(self, parent, str attr, idx=*)
20
+
21
+ cdef class CythonTransform(VisitorTransform):
22
+ cdef public context
23
+ cdef public current_directives
24
+
25
+ cdef class ScopeTrackingTransform(CythonTransform):
26
+ cdef public scope_type
27
+ cdef public scope_node
28
+ cdef visit_scope(self, node, scope_type)
29
+
30
+ cdef class EnvTransform(CythonTransform):
31
+ cdef public list env_stack
32
+
33
+ cdef class MethodDispatcherTransform(EnvTransform):
34
+ @cython.final
35
+ cdef _visit_binop_node(self, node)
36
+ @cython.final
37
+ cdef _find_handler(self, match_name, bint has_kwargs)
38
+ @cython.final
39
+ cdef _delegate_to_assigned_value(self, node, function, arg_list, kwargs)
40
+ @cython.final
41
+ cdef _dispatch_to_handler(self, node, function, arg_list, kwargs)
42
+ @cython.final
43
+ cdef _dispatch_to_method_handler(self, attr_name, self_arg,
44
+ is_unbound_method, type_name,
45
+ node, function, arg_list, kwargs)
46
+
47
+ cdef class RecursiveNodeReplacer(VisitorTransform):
48
+ cdef public orig_node
49
+ cdef public new_node
50
+
51
+ cdef class NodeFinder(TreeVisitor):
52
+ cdef node
53
+ cdef public bint found