Cython 3.2.0__cp39-abi3-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. Cython/Build/BuildExecutable.py +169 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +350 -0
  4. Cython/Build/Dependencies.py +1314 -0
  5. Cython/Build/Distutils.py +1 -0
  6. Cython/Build/Inline.py +463 -0
  7. Cython/Build/IpythonMagic.py +560 -0
  8. Cython/Build/SharedModule.py +94 -0
  9. Cython/Build/Tests/TestCyCache.py +194 -0
  10. Cython/Build/Tests/TestCythonizeArgsParser.py +481 -0
  11. Cython/Build/Tests/TestDependencies.py +133 -0
  12. Cython/Build/Tests/TestInline.py +177 -0
  13. Cython/Build/Tests/TestIpythonMagic.py +287 -0
  14. Cython/Build/Tests/TestRecythonize.py +212 -0
  15. Cython/Build/Tests/TestStripLiterals.py +155 -0
  16. Cython/Build/Tests/__init__.py +1 -0
  17. Cython/Build/__init__.py +11 -0
  18. Cython/CodeWriter.py +815 -0
  19. Cython/Compiler/AnalysedTreeTransforms.py +97 -0
  20. Cython/Compiler/Annotate.py +328 -0
  21. Cython/Compiler/AutoDocTransforms.py +320 -0
  22. Cython/Compiler/Buffer.py +680 -0
  23. Cython/Compiler/Builtin.py +984 -0
  24. Cython/Compiler/CmdLine.py +263 -0
  25. Cython/Compiler/Code.pxd +149 -0
  26. Cython/Compiler/Code.py +3746 -0
  27. Cython/Compiler/Code.pyd +0 -0
  28. Cython/Compiler/CodeGeneration.py +33 -0
  29. Cython/Compiler/CythonScope.py +191 -0
  30. Cython/Compiler/Dataclass.py +864 -0
  31. Cython/Compiler/DebugFlags.py +24 -0
  32. Cython/Compiler/Errors.py +297 -0
  33. Cython/Compiler/ExprNodes.py +15562 -0
  34. Cython/Compiler/FlowControl.pxd +97 -0
  35. Cython/Compiler/FlowControl.py +1451 -0
  36. Cython/Compiler/FlowControl.pyd +0 -0
  37. Cython/Compiler/FusedNode.py +971 -0
  38. Cython/Compiler/FusedNode.pyd +0 -0
  39. Cython/Compiler/Future.py +16 -0
  40. Cython/Compiler/Interpreter.py +57 -0
  41. Cython/Compiler/Lexicon.py +421 -0
  42. Cython/Compiler/LineTable.py +114 -0
  43. Cython/Compiler/LineTable.pyd +0 -0
  44. Cython/Compiler/Main.py +857 -0
  45. Cython/Compiler/MatchCaseNodes.py +259 -0
  46. Cython/Compiler/MemoryView.py +905 -0
  47. Cython/Compiler/ModuleNode.py +4235 -0
  48. Cython/Compiler/Naming.py +363 -0
  49. Cython/Compiler/Nodes.py +10831 -0
  50. Cython/Compiler/Optimize.py +5288 -0
  51. Cython/Compiler/Options.py +843 -0
  52. Cython/Compiler/ParseTreeTransforms.pxd +78 -0
  53. Cython/Compiler/ParseTreeTransforms.py +4638 -0
  54. Cython/Compiler/Parsing.pxd +9 -0
  55. Cython/Compiler/Parsing.py +4775 -0
  56. Cython/Compiler/Parsing.pyd +0 -0
  57. Cython/Compiler/Pipeline.py +439 -0
  58. Cython/Compiler/PyrexTypes.py +5870 -0
  59. Cython/Compiler/Pythran.py +232 -0
  60. Cython/Compiler/Scanning.pxd +48 -0
  61. Cython/Compiler/Scanning.py +701 -0
  62. Cython/Compiler/Scanning.pyd +0 -0
  63. Cython/Compiler/StringEncoding.py +298 -0
  64. Cython/Compiler/Symtab.py +3073 -0
  65. Cython/Compiler/Tests/TestBuffer.py +105 -0
  66. Cython/Compiler/Tests/TestBuiltin.py +72 -0
  67. Cython/Compiler/Tests/TestCmdLine.py +586 -0
  68. Cython/Compiler/Tests/TestCode.py +144 -0
  69. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  70. Cython/Compiler/Tests/TestGrammar.py +202 -0
  71. Cython/Compiler/Tests/TestMemView.py +71 -0
  72. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  73. Cython/Compiler/Tests/TestScanning.py +134 -0
  74. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  75. Cython/Compiler/Tests/TestStringEncoding.py +21 -0
  76. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  77. Cython/Compiler/Tests/TestTreePath.py +103 -0
  78. Cython/Compiler/Tests/TestTypes.py +75 -0
  79. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  80. Cython/Compiler/Tests/TestVisitor.py +61 -0
  81. Cython/Compiler/Tests/Utils.py +36 -0
  82. Cython/Compiler/Tests/__init__.py +1 -0
  83. Cython/Compiler/TreeFragment.py +278 -0
  84. Cython/Compiler/TreePath.py +303 -0
  85. Cython/Compiler/TypeInference.py +591 -0
  86. Cython/Compiler/TypeSlots.py +1174 -0
  87. Cython/Compiler/UFuncs.py +311 -0
  88. Cython/Compiler/UtilNodes.py +389 -0
  89. Cython/Compiler/UtilityCode.py +344 -0
  90. Cython/Compiler/Version.py +8 -0
  91. Cython/Compiler/Visitor.pxd +53 -0
  92. Cython/Compiler/Visitor.py +861 -0
  93. Cython/Compiler/Visitor.pyd +0 -0
  94. Cython/Compiler/__init__.py +1 -0
  95. Cython/Coverage.py +448 -0
  96. Cython/Debugger/Cygdb.py +177 -0
  97. Cython/Debugger/DebugWriter.py +82 -0
  98. Cython/Debugger/Tests/TestLibCython.py +275 -0
  99. Cython/Debugger/Tests/__init__.py +1 -0
  100. Cython/Debugger/Tests/cfuncs.c +8 -0
  101. Cython/Debugger/Tests/codefile +49 -0
  102. Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
  103. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  104. Cython/Debugger/__init__.py +1 -0
  105. Cython/Debugger/libcython.py +1548 -0
  106. Cython/Debugger/libpython.py +2821 -0
  107. Cython/Debugging.py +20 -0
  108. Cython/Distutils/__init__.py +2 -0
  109. Cython/Distutils/build_ext.py +139 -0
  110. Cython/Distutils/extension.py +96 -0
  111. Cython/Distutils/old_build_ext.py +351 -0
  112. Cython/Includes/cpython/__init__.pxd +173 -0
  113. Cython/Includes/cpython/array.pxd +178 -0
  114. Cython/Includes/cpython/bool.pxd +37 -0
  115. Cython/Includes/cpython/buffer.pxd +112 -0
  116. Cython/Includes/cpython/bytearray.pxd +33 -0
  117. Cython/Includes/cpython/bytes.pxd +200 -0
  118. Cython/Includes/cpython/cellobject.pxd +35 -0
  119. Cython/Includes/cpython/ceval.pxd +8 -0
  120. Cython/Includes/cpython/codecs.pxd +121 -0
  121. Cython/Includes/cpython/complex.pxd +60 -0
  122. Cython/Includes/cpython/contextvars.pxd +145 -0
  123. Cython/Includes/cpython/conversion.pxd +36 -0
  124. Cython/Includes/cpython/datetime.pxd +395 -0
  125. Cython/Includes/cpython/descr.pxd +26 -0
  126. Cython/Includes/cpython/dict.pxd +187 -0
  127. Cython/Includes/cpython/exc.pxd +263 -0
  128. Cython/Includes/cpython/fileobject.pxd +57 -0
  129. Cython/Includes/cpython/float.pxd +47 -0
  130. Cython/Includes/cpython/function.pxd +65 -0
  131. Cython/Includes/cpython/genobject.pxd +25 -0
  132. Cython/Includes/cpython/getargs.pxd +12 -0
  133. Cython/Includes/cpython/instance.pxd +25 -0
  134. Cython/Includes/cpython/iterator.pxd +36 -0
  135. Cython/Includes/cpython/iterobject.pxd +24 -0
  136. Cython/Includes/cpython/list.pxd +92 -0
  137. Cython/Includes/cpython/long.pxd +149 -0
  138. Cython/Includes/cpython/longintrepr.pxd +14 -0
  139. Cython/Includes/cpython/mapping.pxd +63 -0
  140. Cython/Includes/cpython/marshal.pxd +66 -0
  141. Cython/Includes/cpython/mem.pxd +120 -0
  142. Cython/Includes/cpython/memoryview.pxd +50 -0
  143. Cython/Includes/cpython/method.pxd +49 -0
  144. Cython/Includes/cpython/module.pxd +208 -0
  145. Cython/Includes/cpython/number.pxd +258 -0
  146. Cython/Includes/cpython/object.pxd +433 -0
  147. Cython/Includes/cpython/pycapsule.pxd +143 -0
  148. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  149. Cython/Includes/cpython/pyport.pxd +8 -0
  150. Cython/Includes/cpython/pystate.pxd +95 -0
  151. Cython/Includes/cpython/pythread.pxd +53 -0
  152. Cython/Includes/cpython/ref.pxd +141 -0
  153. Cython/Includes/cpython/sequence.pxd +134 -0
  154. Cython/Includes/cpython/set.pxd +119 -0
  155. Cython/Includes/cpython/slice.pxd +70 -0
  156. Cython/Includes/cpython/time.pxd +129 -0
  157. Cython/Includes/cpython/tuple.pxd +72 -0
  158. Cython/Includes/cpython/type.pxd +53 -0
  159. Cython/Includes/cpython/unicode.pxd +639 -0
  160. Cython/Includes/cpython/version.pxd +32 -0
  161. Cython/Includes/cpython/weakref.pxd +78 -0
  162. Cython/Includes/libc/__init__.pxd +1 -0
  163. Cython/Includes/libc/complex.pxd +35 -0
  164. Cython/Includes/libc/errno.pxd +127 -0
  165. Cython/Includes/libc/float.pxd +43 -0
  166. Cython/Includes/libc/limits.pxd +28 -0
  167. Cython/Includes/libc/locale.pxd +46 -0
  168. Cython/Includes/libc/math.pxd +209 -0
  169. Cython/Includes/libc/setjmp.pxd +10 -0
  170. Cython/Includes/libc/signal.pxd +64 -0
  171. Cython/Includes/libc/stddef.pxd +9 -0
  172. Cython/Includes/libc/stdint.pxd +105 -0
  173. Cython/Includes/libc/stdio.pxd +80 -0
  174. Cython/Includes/libc/stdlib.pxd +72 -0
  175. Cython/Includes/libc/string.pxd +50 -0
  176. Cython/Includes/libc/threads.pxd +234 -0
  177. Cython/Includes/libc/time.pxd +52 -0
  178. Cython/Includes/libcpp/__init__.pxd +4 -0
  179. Cython/Includes/libcpp/algorithm.pxd +320 -0
  180. Cython/Includes/libcpp/any.pxd +16 -0
  181. Cython/Includes/libcpp/atomic.pxd +59 -0
  182. Cython/Includes/libcpp/barrier.pxd +22 -0
  183. Cython/Includes/libcpp/bit.pxd +29 -0
  184. Cython/Includes/libcpp/cast.pxd +12 -0
  185. Cython/Includes/libcpp/cmath.pxd +518 -0
  186. Cython/Includes/libcpp/complex.pxd +106 -0
  187. Cython/Includes/libcpp/condition_variable.pxd +322 -0
  188. Cython/Includes/libcpp/deque.pxd +165 -0
  189. Cython/Includes/libcpp/exception.pxd +86 -0
  190. Cython/Includes/libcpp/execution.pxd +15 -0
  191. Cython/Includes/libcpp/forward_list.pxd +63 -0
  192. Cython/Includes/libcpp/functional.pxd +26 -0
  193. Cython/Includes/libcpp/future.pxd +103 -0
  194. Cython/Includes/libcpp/iterator.pxd +34 -0
  195. Cython/Includes/libcpp/latch.pxd +17 -0
  196. Cython/Includes/libcpp/limits.pxd +61 -0
  197. Cython/Includes/libcpp/list.pxd +117 -0
  198. Cython/Includes/libcpp/map.pxd +252 -0
  199. Cython/Includes/libcpp/memory.pxd +115 -0
  200. Cython/Includes/libcpp/mutex.pxd +387 -0
  201. Cython/Includes/libcpp/numbers.pxd +15 -0
  202. Cython/Includes/libcpp/numeric.pxd +131 -0
  203. Cython/Includes/libcpp/optional.pxd +34 -0
  204. Cython/Includes/libcpp/pair.pxd +1 -0
  205. Cython/Includes/libcpp/queue.pxd +25 -0
  206. Cython/Includes/libcpp/random.pxd +166 -0
  207. Cython/Includes/libcpp/semaphore.pxd +43 -0
  208. Cython/Includes/libcpp/set.pxd +228 -0
  209. Cython/Includes/libcpp/shared_mutex.pxd +96 -0
  210. Cython/Includes/libcpp/span.pxd +87 -0
  211. Cython/Includes/libcpp/stack.pxd +11 -0
  212. Cython/Includes/libcpp/stop_token.pxd +117 -0
  213. Cython/Includes/libcpp/string.pxd +355 -0
  214. Cython/Includes/libcpp/string_view.pxd +183 -0
  215. Cython/Includes/libcpp/typeindex.pxd +15 -0
  216. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  217. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  218. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  219. Cython/Includes/libcpp/utility.pxd +30 -0
  220. Cython/Includes/libcpp/vector.pxd +186 -0
  221. Cython/Includes/numpy/math.pxd +150 -0
  222. Cython/Includes/openmp.pxd +50 -0
  223. Cython/Includes/posix/__init__.pxd +1 -0
  224. Cython/Includes/posix/dlfcn.pxd +14 -0
  225. Cython/Includes/posix/fcntl.pxd +86 -0
  226. Cython/Includes/posix/ioctl.pxd +4 -0
  227. Cython/Includes/posix/mman.pxd +101 -0
  228. Cython/Includes/posix/resource.pxd +57 -0
  229. Cython/Includes/posix/select.pxd +21 -0
  230. Cython/Includes/posix/signal.pxd +73 -0
  231. Cython/Includes/posix/stat.pxd +98 -0
  232. Cython/Includes/posix/stdio.pxd +37 -0
  233. Cython/Includes/posix/stdlib.pxd +29 -0
  234. Cython/Includes/posix/strings.pxd +9 -0
  235. Cython/Includes/posix/time.pxd +71 -0
  236. Cython/Includes/posix/types.pxd +30 -0
  237. Cython/Includes/posix/uio.pxd +26 -0
  238. Cython/Includes/posix/unistd.pxd +271 -0
  239. Cython/Includes/posix/wait.pxd +38 -0
  240. Cython/Plex/Actions.pxd +24 -0
  241. Cython/Plex/Actions.py +119 -0
  242. Cython/Plex/Actions.pyd +0 -0
  243. Cython/Plex/DFA.pxd +14 -0
  244. Cython/Plex/DFA.py +164 -0
  245. Cython/Plex/DFA.pyd +0 -0
  246. Cython/Plex/Errors.py +48 -0
  247. Cython/Plex/Lexicons.py +178 -0
  248. Cython/Plex/Machines.pxd +36 -0
  249. Cython/Plex/Machines.py +238 -0
  250. Cython/Plex/Machines.pyd +0 -0
  251. Cython/Plex/Regexps.py +535 -0
  252. Cython/Plex/Scanners.pxd +45 -0
  253. Cython/Plex/Scanners.py +328 -0
  254. Cython/Plex/Scanners.pyd +0 -0
  255. Cython/Plex/Transitions.pxd +14 -0
  256. Cython/Plex/Transitions.py +239 -0
  257. Cython/Plex/Transitions.pyd +0 -0
  258. Cython/Plex/__init__.py +34 -0
  259. Cython/Runtime/__init__.py +1 -0
  260. Cython/Runtime/refnanny.pyd +0 -0
  261. Cython/Runtime/refnanny.pyx +237 -0
  262. Cython/Shadow.py +690 -0
  263. Cython/Shadow.pyi +521 -0
  264. Cython/StringIOTree.py +170 -0
  265. Cython/StringIOTree.pyd +0 -0
  266. Cython/Tempita/__init__.py +4 -0
  267. Cython/Tempita/_looper.py +154 -0
  268. Cython/Tempita/_tempita.py +1091 -0
  269. Cython/Tempita/_tempita.pyd +0 -0
  270. Cython/TestUtils.py +422 -0
  271. Cython/Tests/TestCodeWriter.py +128 -0
  272. Cython/Tests/TestCythonUtils.py +202 -0
  273. Cython/Tests/TestJediTyper.py +223 -0
  274. Cython/Tests/TestShadow.py +114 -0
  275. Cython/Tests/TestStringIOTree.py +67 -0
  276. Cython/Tests/TestTestUtils.py +90 -0
  277. Cython/Tests/__init__.py +1 -0
  278. Cython/Tests/xmlrunner.py +390 -0
  279. Cython/Utility/AsyncGen.c +1031 -0
  280. Cython/Utility/Buffer.c +865 -0
  281. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  282. Cython/Utility/Builtins.c +810 -0
  283. Cython/Utility/CConvert.pyx +134 -0
  284. Cython/Utility/CMath.c +104 -0
  285. Cython/Utility/CommonStructures.c +226 -0
  286. Cython/Utility/Complex.c +378 -0
  287. Cython/Utility/Coroutine.c +2300 -0
  288. Cython/Utility/CpdefEnums.pyx +103 -0
  289. Cython/Utility/CppConvert.pyx +282 -0
  290. Cython/Utility/CppSupport.cpp +151 -0
  291. Cython/Utility/CythonFunction.c +1832 -0
  292. Cython/Utility/Dataclasses.c +101 -0
  293. Cython/Utility/Embed.c +121 -0
  294. Cython/Utility/Exceptions.c +1016 -0
  295. Cython/Utility/ExtensionTypes.c +996 -0
  296. Cython/Utility/FunctionArguments.c +1043 -0
  297. Cython/Utility/FusedFunction.pyx +44 -0
  298. Cython/Utility/ImportExport.c +907 -0
  299. Cython/Utility/MemoryView.pxd +188 -0
  300. Cython/Utility/MemoryView.pyx +1482 -0
  301. Cython/Utility/MemoryView_C.c +927 -0
  302. Cython/Utility/ModuleSetupCode.c +3203 -0
  303. Cython/Utility/NumpyImportArray.c +46 -0
  304. Cython/Utility/ObjectHandling.c +3273 -0
  305. Cython/Utility/Optimize.c +1603 -0
  306. Cython/Utility/Overflow.c +384 -0
  307. Cython/Utility/Printing.c +86 -0
  308. Cython/Utility/Profile.c +732 -0
  309. Cython/Utility/StringTools.c +1379 -0
  310. Cython/Utility/Synchronization.c +399 -0
  311. Cython/Utility/TString.c +356 -0
  312. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  313. Cython/Utility/TestCythonScope.pyx +75 -0
  314. Cython/Utility/TestUtilityLoader.c +12 -0
  315. Cython/Utility/TypeConversion.c +1385 -0
  316. Cython/Utility/UFuncs.pyx +50 -0
  317. Cython/Utility/UFuncs_C.c +89 -0
  318. Cython/Utility/__init__.py +28 -0
  319. Cython/Utility/arrayarray.h +167 -0
  320. Cython/Utils.py +687 -0
  321. Cython/Utils.pyd +0 -0
  322. Cython/__init__.py +10 -0
  323. Cython/__init__.pyi +7 -0
  324. Cython/py.typed +0 -0
  325. cython-3.2.0.dist-info/METADATA +85 -0
  326. cython-3.2.0.dist-info/RECORD +333 -0
  327. cython-3.2.0.dist-info/WHEEL +5 -0
  328. cython-3.2.0.dist-info/entry_points.txt +4 -0
  329. cython-3.2.0.dist-info/top_level.txt +3 -0
  330. cython.py +29 -0
  331. pyximport/__init__.py +4 -0
  332. pyximport/pyxbuild.py +160 -0
  333. pyximport/pyximport.py +482 -0
@@ -0,0 +1,344 @@
1
+ import Cython
2
+ from .TreeFragment import parse_from_strings, StringParseContext
3
+ from .Scanning import FileSourceDescriptor
4
+ from .Errors import CompileError
5
+ from . import Symtab
6
+ from . import Naming
7
+ from . import Code
8
+ from . import Options
9
+
10
+ import os.path
11
+ import re
12
+ import io
13
+
14
+
15
+ class NonManglingModuleScope(Symtab.ModuleScope):
16
+
17
+ def __init__(self, prefix, *args, **kw):
18
+ self.prefix = prefix
19
+ self.cython_scope = None
20
+ self.cpp = kw.pop('cpp', False)
21
+ Symtab.ModuleScope.__init__(self, *args, **kw)
22
+
23
+ def add_imported_entry(self, name, entry, pos):
24
+ entry.used = True
25
+ return super().add_imported_entry(name, entry, pos)
26
+
27
+ def mangle(self, prefix, name=None):
28
+ if name:
29
+ if prefix in (Naming.typeobj_prefix, Naming.func_prefix, Naming.var_prefix, Naming.pyfunc_prefix):
30
+ # Functions, classes etc. gets a manually defined prefix easily
31
+ # manually callable instead (the one passed to CythonUtilityCode)
32
+ prefix = self.prefix
33
+ return "%s%s" % (prefix, name)
34
+ else:
35
+ return Symtab.ModuleScope.mangle(self, prefix)
36
+
37
+
38
+ class CythonUtilityCodeContext(StringParseContext):
39
+ scope = None
40
+
41
+ def find_module(self, module_name, from_module=None, pos=None, need_pxd=True, absolute_fallback=True, relative_import=False):
42
+ if from_module:
43
+ raise AssertionError("Relative imports not supported in utility code.")
44
+ if module_name != self.module_name:
45
+ if module_name not in self.modules:
46
+ raise AssertionError("Only the cython cimport is supported.")
47
+ else:
48
+ return self.modules[module_name]
49
+
50
+ if self.scope is None:
51
+ self.scope = NonManglingModuleScope(
52
+ self.prefix, module_name, parent_module=None, context=self, cpp=self.cpp)
53
+
54
+ return self.scope
55
+
56
+
57
+ class CythonUtilityCode(Code.UtilityCodeBase):
58
+ """
59
+ Utility code written in the Cython language itself.
60
+
61
+ The @cname decorator can set the cname for a function, method of cdef class.
62
+ Functions decorated with @cname('c_func_name') get the given cname.
63
+
64
+ For cdef classes the rules are as follows:
65
+ obj struct -> <cname>_obj
66
+ obj type ptr -> <cname>_type
67
+ methods -> <class_cname>_<method_cname>
68
+
69
+ For methods the cname decorator is optional, but without the decorator the
70
+ methods will not be prototyped. See Cython.Compiler.CythonScope and
71
+ tests/run/cythonscope.pyx for examples.
72
+ """
73
+
74
+ is_cython_utility = True
75
+
76
+ def __init__(self, impl, name="__pyxutil", prefix="", requires=None,
77
+ file=None, from_scope=None, context=None, compiler_directives=None,
78
+ outer_module_scope=None):
79
+ # 1) We need to delay the parsing/processing, so that all modules can be
80
+ # imported without import loops
81
+ # 2) The same utility code object can be used for multiple source files;
82
+ # while the generated node trees can be altered in the compilation of a
83
+ # single file.
84
+ # Hence, delay any processing until later.
85
+ context_types = {}
86
+ if context is not None:
87
+ from .PyrexTypes import BaseType
88
+ for key, value in context.items():
89
+ if isinstance(value, BaseType):
90
+ context[key] = key
91
+ context_types[key] = value
92
+ impl = Code.sub_tempita(impl, context, file, name)
93
+ self.impl = impl
94
+ self.name = name
95
+ self.file = file
96
+ self.prefix = prefix
97
+ self.requires = requires or []
98
+ self.from_scope = from_scope
99
+ self.outer_module_scope = outer_module_scope
100
+ self.compiler_directives = compiler_directives
101
+ self.context_types = context_types
102
+
103
+ def __eq__(self, other):
104
+ if isinstance(other, CythonUtilityCode):
105
+ return self._equality_params() == other._equality_params()
106
+ else:
107
+ return False
108
+
109
+ def _equality_params(self):
110
+ outer_scope = self.outer_module_scope
111
+ while isinstance(outer_scope, NonManglingModuleScope):
112
+ outer_scope = outer_scope.outer_scope
113
+ return self.impl, outer_scope, self.compiler_directives
114
+
115
+ def __hash__(self):
116
+ return hash(self.impl)
117
+
118
+ def get_tree(self, entries_only=False, cython_scope=None):
119
+ from .AnalysedTreeTransforms import AutoTestDictTransform
120
+ # The AutoTestDictTransform creates the statement "__test__ = {}",
121
+ # which when copied into the main ModuleNode overwrites
122
+ # any __test__ in user code; not desired
123
+ excludes = [AutoTestDictTransform]
124
+
125
+ from . import Pipeline, ParseTreeTransforms
126
+ context = CythonUtilityCodeContext(
127
+ self.name, compiler_directives=self.compiler_directives,
128
+ cpp=cython_scope.is_cpp() if cython_scope else False)
129
+ context.prefix = self.prefix
130
+ context.cython_scope = cython_scope
131
+ #context = StringParseContext(self.name)
132
+ tree = parse_from_strings(
133
+ self.name, self.impl, context=context, allow_struct_enum_decorator=True,
134
+ in_utility_code=True)
135
+ pipeline = Pipeline.create_pipeline(context, 'pyx', exclude_classes=excludes)
136
+
137
+ if entries_only:
138
+ p = []
139
+ for t in pipeline:
140
+ p.append(t)
141
+ if isinstance(t, ParseTreeTransforms.AnalyseDeclarationsTransform):
142
+ break
143
+
144
+ pipeline = p
145
+
146
+ transform = ParseTreeTransforms.CnameDirectivesTransform(context)
147
+ # InterpretCompilerDirectives already does a cdef declarator check
148
+ #before = ParseTreeTransforms.DecoratorTransform
149
+ before = ParseTreeTransforms.InterpretCompilerDirectives
150
+ pipeline = Pipeline.insert_into_pipeline(pipeline, transform,
151
+ before=before)
152
+
153
+ def merge_scope(scope):
154
+ def merge_scope_transform(module_node):
155
+ module_node.scope.merge_in(scope)
156
+ return module_node
157
+ return merge_scope_transform
158
+
159
+ if self.from_scope:
160
+ pipeline = Pipeline.insert_into_pipeline(
161
+ pipeline, merge_scope(self.from_scope),
162
+ before=ParseTreeTransforms.AnalyseDeclarationsTransform)
163
+
164
+ for dep in self.requires:
165
+ if isinstance(dep, CythonUtilityCode) and hasattr(dep, 'tree') and not cython_scope:
166
+ pipeline = Pipeline.insert_into_pipeline(
167
+ pipeline, merge_scope(dep.tree.scope),
168
+ before=ParseTreeTransforms.AnalyseDeclarationsTransform)
169
+
170
+ if self.outer_module_scope:
171
+ # inject outer module between utility code module and builtin module
172
+ def scope_transform(module_node):
173
+ module_node.scope.outer_scope = self.outer_module_scope
174
+ return module_node
175
+
176
+ pipeline = Pipeline.insert_into_pipeline(
177
+ pipeline, scope_transform,
178
+ before=ParseTreeTransforms.AnalyseDeclarationsTransform)
179
+
180
+ if self.context_types:
181
+ # inject types into module scope
182
+ def scope_transform(module_node):
183
+ dummy_entry = object()
184
+ for name, type in self.context_types.items():
185
+ # Restore the old type entry after declaring the type.
186
+ # We need to access types in the scope, but this shouldn't alter the entry
187
+ # that is visible from everywhere else
188
+ old_type_entry = getattr(type, "entry", dummy_entry)
189
+ entry = module_node.scope.declare_type(name, type, None, visibility='extern')
190
+ if old_type_entry is not dummy_entry:
191
+ type.entry = old_type_entry
192
+ entry.in_cinclude = True
193
+ return module_node
194
+
195
+ pipeline = Pipeline.insert_into_pipeline(
196
+ pipeline, scope_transform,
197
+ before=ParseTreeTransforms.AnalyseDeclarationsTransform)
198
+
199
+ (err, tree) = Pipeline.run_pipeline(pipeline, tree, printtree=False)
200
+ assert not err, err
201
+ self.tree = tree
202
+ return tree
203
+
204
+ def put_code(self, output):
205
+ pass
206
+
207
+ @classmethod
208
+ def load(cls, util_code_name, from_file, **kwargs):
209
+ if re.search("[.]c(pp)?::", util_code_name):
210
+ # We're trying to load a C/C++ utility code.
211
+ # For now, just handle the simple case with no tempita
212
+ return Code.UtilityCode.load_cached(util_code_name, from_file)
213
+ return super().load(util_code_name, from_file, **kwargs)
214
+
215
+ @classmethod
216
+ def load_as_string(cls, util_code_name, from_file=None, **kwargs):
217
+ """
218
+ Load a utility code as a string. Returns (proto, implementation)
219
+ """
220
+ util = cls.load(util_code_name, from_file, **kwargs)
221
+ return util.proto, util.impl # keep line numbers => no lstrip()
222
+
223
+ def declare_in_scope(self, dest_scope, used=False, cython_scope=None,
224
+ allowlist=None):
225
+ """
226
+ Declare all entries from the utility code in dest_scope. Code will only
227
+ be included for used entries. If module_name is given, declare the
228
+ type entries with that name.
229
+ """
230
+ tree = self.get_tree(entries_only=True, cython_scope=cython_scope)
231
+
232
+ entries = tree.scope.entries
233
+ entries.pop('__name__')
234
+ entries.pop('__file__')
235
+ entries.pop('__builtins__')
236
+ entries.pop('__doc__')
237
+
238
+ for entry in entries.values():
239
+ entry.utility_code_definition = self
240
+ entry.used = used
241
+
242
+ original_scope = tree.scope
243
+ dest_scope.merge_in(original_scope, merge_unused=True, allowlist=allowlist)
244
+ tree.scope = dest_scope
245
+
246
+ for dep in self.requires:
247
+ if dep.is_cython_utility:
248
+ dep.declare_in_scope(dest_scope, cython_scope=cython_scope)
249
+
250
+ return original_scope
251
+
252
+ @staticmethod
253
+ def filter_inherited_directives(current_directives):
254
+ """
255
+ Cython utility code should usually only pick up a few directives from the
256
+ environment (those that intentionally control its function) and ignore most
257
+ other compiler directives. This function provides a sensible default list
258
+ of directives to copy.
259
+ """
260
+ from .Options import _directive_defaults
261
+ utility_code_directives = dict(_directive_defaults)
262
+ inherited_directive_names = (
263
+ 'binding', 'always_allow_keywords', 'allow_none_for_extension_args',
264
+ 'auto_pickle', 'ccomplex',
265
+ 'c_string_type', 'c_string_encoding',
266
+ 'optimize.inline_defnode_calls', 'optimize.unpack_method_calls',
267
+ 'optimize.unpack_method_calls_in_pyinit', 'optimize.use_switch')
268
+ for name in inherited_directive_names:
269
+ if name in current_directives:
270
+ utility_code_directives[name] = current_directives[name]
271
+ return utility_code_directives
272
+
273
+
274
+ class TemplatedFileSourceDescriptor(FileSourceDescriptor):
275
+
276
+ def __init__(self, filename, path_description, context):
277
+ super().__init__(filename, path_description)
278
+ self._context = context
279
+
280
+ def get_file_object(self, encoding=None, error_handling=None):
281
+ with super().get_file_object(encoding, error_handling) as f:
282
+ data = f.read()
283
+ ret = Code.sub_tempita(data, self._context, self.filename)
284
+ # We need stream to have .encoding attribute set
285
+ stream = io.TextIOWrapper(io.BytesIO(ret.encode(f.encoding)), encoding=f.encoding, errors=error_handling)
286
+ return stream
287
+
288
+
289
+ class CythonSharedUtilityCode(Code.AbstractUtilityCode):
290
+ def __init__(self, pxd_name, shared_utility_qualified_name, template_context, requires):
291
+ self._pxd_name = pxd_name
292
+ self._shared_utility_qualified_name = shared_utility_qualified_name
293
+ self.template_context = template_context
294
+ self.requires = requires
295
+ self._shared_library_scope = None
296
+
297
+ def find_module(self, context):
298
+ scope = context
299
+ for name, is_package in scope._split_qualified_name(self._shared_utility_qualified_name, relative_import=False):
300
+ scope = scope.find_submodule(name, as_package=is_package)
301
+
302
+ pxd_pathname = os.path.join(
303
+ os.path.split(Cython.__file__)[0],
304
+ 'Utility',
305
+ self._pxd_name
306
+ )
307
+ try:
308
+ rel_path = self._shared_utility_qualified_name.replace('.', os.sep) + os.path.splitext(pxd_pathname)[1]
309
+ source_desc = TemplatedFileSourceDescriptor(pxd_pathname, rel_path, self.template_context)
310
+ source_desc.in_utility_code = True
311
+ err, result = context.process_pxd(source_desc, scope, self._shared_utility_qualified_name)
312
+ (pxd_codenodes, pxd_scope) = result
313
+ context.utility_pxds[self._pxd_name] = (pxd_codenodes, pxd_scope)
314
+ scope.pxd_file_loaded = True
315
+ if err:
316
+ raise err
317
+ except CompileError:
318
+ pass
319
+ return scope
320
+
321
+ def declare_in_scope(self, dest_scope, used=False, cython_scope=None,
322
+ allowlist=None):
323
+ if self._pxd_name not in cython_scope.context.utility_pxds:
324
+ self._shared_library_scope = self.find_module(cython_scope.context)
325
+ for dep in self.requires:
326
+ if dep.is_cython_utility:
327
+ dep.declare_in_scope(scope, cython_scope=cython_scope)
328
+ for e in self._shared_library_scope.c_class_entries:
329
+ dest_scope.add_imported_entry(e.name, e, e.pos)
330
+ return dest_scope
331
+
332
+ def get_shared_library_scope(self, cython_scope):
333
+ if self._pxd_name not in cython_scope.context.utility_pxds:
334
+ self._shared_library_scope = self.find_module(cython_scope.context)
335
+ return self._shared_library_scope
336
+
337
+
338
+ def declare_declarations_in_scope(declaration_string, env, private_type=True,
339
+ *args, **kwargs):
340
+ """
341
+ Declare some declarations given as Cython code in declaration_string
342
+ in scope env.
343
+ """
344
+ 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