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
Cython/Shadow.pyi ADDED
@@ -0,0 +1,521 @@
1
+ import dataclasses as dataclasses
2
+ from builtins import (int as py_int, float as py_float,
3
+ bool as py_bool, str as py_str, complex as py_complex)
4
+ from types import TracebackType
5
+ from typing import (
6
+ Any, Iterable, Sequence, Optional, Type, TypeVar, Generic, Callable, overload,
7
+ TypeAlias, Annotated,
8
+ )
9
+
10
+ # Type checkers assume typing_extensions is always present
11
+ from typing_extensions import Literal, ParamSpec, overload, final as final
12
+
13
+ # Normally all imports aren't exported in stub files but we can explicitly expose
14
+ # imports by using import ... as ... (with the same name) which was done for
15
+ # dataclasses and the final decorator.
16
+
17
+ __version__: str
18
+
19
+ # Predefined types
20
+
21
+ Py_UCS4 = py_int | str
22
+ Py_UNICODE = py_int | str
23
+
24
+ bint = py_bool
25
+ void = Type[None]
26
+ basestring = py_str
27
+ unicode = py_str
28
+
29
+ compiled: bool
30
+
31
+
32
+ _T = TypeVar('_T')
33
+ _P = ParamSpec('_P')
34
+ _C = TypeVar('_C', bound='Callable')
35
+ _TypeT = TypeVar('_TypeT', bound='Type')
36
+ _Decorator = Callable[[_C], _C]
37
+
38
+
39
+ _func_deco: _Decorator
40
+
41
+ cfunc = ccall = compile = ufunc = _func_deco
42
+
43
+ def locals(**kwargs: Any) -> _Decorator: ...
44
+
45
+ def _class_deco(__cls: _TypeT) -> _TypeT: ...
46
+
47
+ cclass = internal = c_api_binop_methods = type_version_tag = no_gc_clear = no_gc = total_ordering = _class_deco
48
+
49
+ # May be a bit hard to read but essentially means:
50
+ # > Returns a callable that takes another callable with these parameters and *some*
51
+ # > return value, then returns another callable with the same parameters but
52
+ # > the return type is the previous 'type' parameter.
53
+ # On Python 3.5, the latest version of Mypy available is 0.910 which doesn't understand ParamSpec
54
+ def returns(__type: Type[_T]) -> Callable[[Callable[_P, object]], Callable[_P, _T]]: ... # type: ignore
55
+
56
+ def exceptval(__val: Any, *, check: bool = False) -> _Decorator: ...
57
+
58
+ class _EmptyDecoratorAndManager(object):
59
+ @overload
60
+ def __call__(self, __val: bool) -> _Decorator: ...
61
+
62
+ @overload
63
+ def __call__(self, __func: _C) -> _C: ...
64
+
65
+ def __enter__(self) -> None: ...
66
+
67
+ def __exit__(
68
+ self,
69
+ exc_type: Optional[Type[BaseException]],
70
+ exc: Optional[BaseException],
71
+ tb: Optional[TracebackType]
72
+ ) -> None: ...
73
+ _empty_decorator_and_manager: _EmptyDecoratorAndManager
74
+
75
+ @overload
76
+ def _compiler_directive(__func: _C) -> _C: ...
77
+
78
+ @overload
79
+ def _compiler_directive(__val: bool = ...) -> _Decorator: ...
80
+
81
+ # These all come from 'Compiler directives' on Source Files and Compilation.
82
+ # The following directives are missing as they need to be global:
83
+ # - c_string_type
84
+ # - c_string_encoding
85
+ # Note that c_api_binop_methods and type_version_tag is defined above.
86
+
87
+ annotation_typing = returns = wraparound = boundscheck = initializedcheck = \
88
+ nonecheck = cdivision = cdivision_warnings = \
89
+ profile = linetrace = infer_types = \
90
+ freelist = auto_pickle = cpow = trashcan = \
91
+ auto_cpdef = c_api_binop_methods = \
92
+ allow_none_for_extension_args = callspec = show_performance_hints = \
93
+ cpp_locals = py2_import = iterable_coroutine = remove_unreachable = \
94
+ _empty_decorator_and_manager
95
+
96
+ binding = embedsignature = always_allow_keywords = unraisable_tracebacks = \
97
+ cpp_locals = \
98
+ _compiler_directive
99
+
100
+ # overflowcheck() has to be specialized because there is also overflowcheck.fold
101
+ class _OverflowcheckClass:
102
+ def __call__(self, __val: bool = ...) -> _Decorator: ...
103
+
104
+ def fold(self, __val: bool = ...) -> _Decorator: ...
105
+
106
+ overflowcheck = _OverflowcheckClass()
107
+
108
+ class optimize:
109
+ @staticmethod
110
+ def use_switch(__val: bool = ...) -> _Decorator: ...
111
+
112
+ @staticmethod
113
+ def unpack_method_calls(__val: bool = ...) -> _Decorator: ...
114
+
115
+ class warn:
116
+ @staticmethod
117
+ def undeclared(__val: bool = ...) -> _Decorator: ...
118
+
119
+ @staticmethod
120
+ def unreachable(__val: bool = ...) -> _Decorator: ...
121
+
122
+ @staticmethod
123
+ def maybe_uninitialized(__val: bool = ...) -> _Decorator: ...
124
+
125
+ @staticmethod
126
+ def unused(__val: bool = ...) -> _Decorator: ...
127
+
128
+ @staticmethod
129
+ def unused_argument(__val: bool = ...) -> _Decorator: ...
130
+
131
+ @staticmethod
132
+ def multiple_declarators(__val: bool = ...) -> _Decorator: ...
133
+
134
+ @overload
135
+ def inline(__func: _C) -> _C: ...
136
+
137
+ @overload
138
+ def inline(__code: str, *, get_type: Callable[[object, object], str] = ..., lib_dir: str = ...,
139
+ cython_include_dirs: Iterable[str] = ..., cython_compiler_directives: Iterable[str] = ...,
140
+ force: bool = ..., quiet: bool = ..., locals: dict[str, str] = ..., globals: dict[str, str] = ...,
141
+ language_level: str = ...) -> Any: ...
142
+
143
+ def cdiv(__a: int, __b: int) -> int: ...
144
+
145
+ def cmod(__a: int, __b: int) -> int: ...
146
+
147
+ @overload
148
+ def cast(__t: Type[_T], __value: Any) -> _T: ...
149
+
150
+ # On Python 3.5, the latest version of Mypy available is 0.910 which doesn't understand ParamSpec
151
+ @overload
152
+ def cast(__t: Callable[_P, _T], *args: _P.args, **kwargs: _P.kwargs) -> _T: ... # type: ignore
153
+
154
+ def sizeof(__obj: object) -> int: ...
155
+
156
+ def typeof(__obj: object) -> str: ...
157
+
158
+ def address(__obj: object) -> PointerType: ...
159
+
160
+ const: TypeAlias = Annotated[_T, "cython.const"]
161
+ volatile: TypeAlias = Annotated[_T, "cython.volatile"]
162
+
163
+
164
+ @overload
165
+ def declare(
166
+ t: Optional[Callable[..., _T]] = ...,
167
+ value: Any = ...,
168
+ ) -> _T:
169
+ ...
170
+
171
+ # This one is for attributes, they cannot have initializers through cython.declare() currently.
172
+ @overload
173
+ def declare(
174
+ t: Callable[..., _T],
175
+ *,
176
+ visibility: Literal['public', 'readonly', 'private'] = ...,
177
+ ) -> _T:
178
+ ...
179
+
180
+ @overload
181
+ def declare(**kwargs: type) -> None: ...
182
+
183
+
184
+ class _nogil:
185
+ @overload
186
+ def __call__(self, __val: bool) -> _Decorator: ...
187
+
188
+ @overload
189
+ def __call__(self, __func: _C) -> _C: ...
190
+
191
+ @overload
192
+ def __call__(self) -> '_nogil': ...
193
+
194
+ def __enter__(self) -> None: ...
195
+
196
+ def __exit__(
197
+ self,
198
+ exc_type: Optional[Type[BaseException]],
199
+ exc: Optional[BaseException],
200
+ tb: Optional[TracebackType]
201
+ ) -> None: ...
202
+
203
+ nogil = gil = _nogil
204
+
205
+
206
+ class _ArrayType(Generic[_T]):
207
+ is_array: bool
208
+ subtypes: Sequence[str]
209
+ dtype: _T
210
+ ndim: int
211
+ is_c_contig: bool
212
+ is_f_contig: bool
213
+ inner_contig: bool
214
+ broadcasting: Any
215
+
216
+ # broadcasting is not used, so it's not clear about its type
217
+ def __init__(self, dtype: _T, ndim: int, is_c_contig: bool = ...,
218
+ is_f_contig: bool = ..., inner_contig: bool = ...,
219
+ broadcasting: Any = ...) -> None: ...
220
+ def __repr__(self) -> str: ...
221
+
222
+
223
+ class CythonTypeObject(object):
224
+ ...
225
+
226
+ class CythonType(CythonTypeObject):
227
+ ...
228
+
229
+ class PointerType(CythonType, Generic[_T]):
230
+ def __init__(
231
+ self,
232
+ value: Optional[ArrayType[_T] | PointerType[_T] | list[_T] | int] = ...
233
+ ) -> None: ...
234
+ def __getitem__(self, ix: int) -> _T: ...
235
+ def __setitem__(self, ix: int, value: _T) -> None: ...
236
+ def __eq__(self, value: object) -> bool: ...
237
+ def __repr__(self) -> str: ...
238
+
239
+ class ArrayType(PointerType[_T]):
240
+ def __init__(self) -> None: ...
241
+
242
+ def index_type(
243
+ base_type: _T, item: tuple | slice | int) -> _ArrayType[_T]: ...
244
+
245
+ class pointer(PointerType[_T]):
246
+ def __new__(cls, basetype: _T) -> Type[PointerType[_T]]: ...
247
+ def __class_getitem__(cls, basetype: _T) -> Type[PointerType[_T]]: ...
248
+
249
+ class array(ArrayType[_T]):
250
+ def __new__(basetype: _T, n: int) -> Type[ArrayType[_T, int]]: ...
251
+ def __class_getitem__(cls, item: tuple[_T, int]) -> Type[ArrayType[_T, int]]: ...
252
+
253
+ def struct(**members: type) -> Type[Any]: ...
254
+
255
+ def union(**members: type) -> Type[Any]: ...
256
+
257
+ def fused_type(*args: Any) -> Type[Any]: ...
258
+
259
+
260
+ class typedef(CythonType, Generic[_T]):
261
+ name: str
262
+
263
+ def __init__(self, type: _T, name: Optional[str] = ...) -> None: ...
264
+ def __call__(self, *arg: Any) -> _T: ...
265
+ def __repr__(self) -> str: ...
266
+ __getitem__ = index_type
267
+
268
+ NULL: pointer[Any]
269
+
270
+ ##### START: GENERATED LIST OF GENERATED TYPES #####
271
+ # Generated by "Tools/cython-generate-shadow-pyi.py" on 2024-09-24 11:45:22.474391
272
+
273
+ const_bint : TypeAlias = const[bint]
274
+ p_const_bint = pointer[const[bint]]
275
+ pp_const_bint = pointer[pointer[const[bint]]]
276
+ ppp_const_bint = pointer[pointer[pointer[const[bint]]]]
277
+ p_bint = pointer[bint]
278
+ pp_bint = pointer[pointer[bint]]
279
+ ppp_bint = pointer[pointer[pointer[bint]]]
280
+ char : TypeAlias = py_int
281
+ const_char : TypeAlias = const[py_int]
282
+ p_const_char : TypeAlias = pointer[const[py_int]]
283
+ pp_const_char = pointer[pointer[const[py_int]]]
284
+ ppp_const_char = pointer[pointer[pointer[const[py_int]]]]
285
+ p_char = pointer[py_int]
286
+ pp_char = pointer[pointer[py_int]]
287
+ ppp_char = pointer[pointer[pointer[py_int]]]
288
+ complex : TypeAlias = py_complex
289
+ const_complex : TypeAlias = const[py_complex]
290
+ p_const_complex = pointer[const[py_complex]]
291
+ pp_const_complex = pointer[pointer[const[py_complex]]]
292
+ ppp_const_complex = pointer[pointer[pointer[const[py_complex]]]]
293
+ p_complex = pointer[py_complex]
294
+ pp_complex = pointer[pointer[py_complex]]
295
+ ppp_complex = pointer[pointer[pointer[py_complex]]]
296
+ double : TypeAlias = py_float
297
+ const_double : TypeAlias = const[py_float]
298
+ p_const_double = pointer[const[py_float]]
299
+ pp_const_double = pointer[pointer[const[py_float]]]
300
+ ppp_const_double = pointer[pointer[pointer[const[py_float]]]]
301
+ p_double = pointer[py_float]
302
+ pp_double = pointer[pointer[py_float]]
303
+ ppp_double = pointer[pointer[pointer[py_float]]]
304
+ doublecomplex : TypeAlias = py_complex
305
+ const_doublecomplex : TypeAlias = const[py_complex]
306
+ p_const_doublecomplex = pointer[const[py_complex]]
307
+ pp_const_doublecomplex = pointer[pointer[const[py_complex]]]
308
+ ppp_const_doublecomplex = pointer[pointer[pointer[const[py_complex]]]]
309
+ p_doublecomplex = pointer[py_complex]
310
+ pp_doublecomplex = pointer[pointer[py_complex]]
311
+ ppp_doublecomplex = pointer[pointer[pointer[py_complex]]]
312
+ float : TypeAlias = py_float
313
+ const_float : TypeAlias = const[py_float]
314
+ p_const_float = pointer[const[py_float]]
315
+ pp_const_float = pointer[pointer[const[py_float]]]
316
+ ppp_const_float = pointer[pointer[pointer[const[py_float]]]]
317
+ p_float = pointer[py_float]
318
+ pp_float = pointer[pointer[py_float]]
319
+ ppp_float = pointer[pointer[pointer[py_float]]]
320
+ floatcomplex : TypeAlias = py_complex
321
+ const_floatcomplex : TypeAlias = const[py_complex]
322
+ p_const_floatcomplex = pointer[const[py_complex]]
323
+ pp_const_floatcomplex = pointer[pointer[const[py_complex]]]
324
+ ppp_const_floatcomplex = pointer[pointer[pointer[const[py_complex]]]]
325
+ p_floatcomplex = pointer[py_complex]
326
+ pp_floatcomplex = pointer[pointer[py_complex]]
327
+ ppp_floatcomplex = pointer[pointer[pointer[py_complex]]]
328
+ int : TypeAlias = py_int
329
+ const_int : TypeAlias = const[py_int]
330
+ p_const_int = pointer[const[py_int]]
331
+ pp_const_int = pointer[pointer[const[py_int]]]
332
+ ppp_const_int = pointer[pointer[pointer[const[py_int]]]]
333
+ p_int = pointer[py_int]
334
+ pp_int = pointer[pointer[py_int]]
335
+ ppp_int = pointer[pointer[pointer[py_int]]]
336
+ long : TypeAlias = py_int
337
+ const_long : TypeAlias = const[py_int]
338
+ p_const_long = pointer[const[py_int]]
339
+ pp_const_long = pointer[pointer[const[py_int]]]
340
+ ppp_const_long = pointer[pointer[pointer[const[py_int]]]]
341
+ p_long = pointer[py_int]
342
+ pp_long = pointer[pointer[py_int]]
343
+ ppp_long = pointer[pointer[pointer[py_int]]]
344
+ py_long : TypeAlias = py_int
345
+ longdouble : TypeAlias = py_float
346
+ const_longdouble : TypeAlias = const[py_float]
347
+ p_const_longdouble = pointer[const[py_float]]
348
+ pp_const_longdouble = pointer[pointer[const[py_float]]]
349
+ ppp_const_longdouble = pointer[pointer[pointer[const[py_float]]]]
350
+ p_longdouble = pointer[py_float]
351
+ pp_longdouble = pointer[pointer[py_float]]
352
+ ppp_longdouble = pointer[pointer[pointer[py_float]]]
353
+ longdoublecomplex : TypeAlias = py_complex
354
+ const_longdoublecomplex : TypeAlias = const[py_complex]
355
+ p_const_longdoublecomplex = pointer[const[py_complex]]
356
+ pp_const_longdoublecomplex = pointer[pointer[const[py_complex]]]
357
+ ppp_const_longdoublecomplex = pointer[pointer[pointer[const[py_complex]]]]
358
+ p_longdoublecomplex = pointer[py_complex]
359
+ pp_longdoublecomplex = pointer[pointer[py_complex]]
360
+ ppp_longdoublecomplex = pointer[pointer[pointer[py_complex]]]
361
+ longlong : TypeAlias = py_int
362
+ const_longlong : TypeAlias = const[py_int]
363
+ p_const_longlong = pointer[const[py_int]]
364
+ pp_const_longlong = pointer[pointer[const[py_int]]]
365
+ ppp_const_longlong = pointer[pointer[pointer[const[py_int]]]]
366
+ p_longlong = pointer[py_int]
367
+ pp_longlong = pointer[pointer[py_int]]
368
+ ppp_longlong = pointer[pointer[pointer[py_int]]]
369
+ schar : TypeAlias = py_int
370
+ const_schar : TypeAlias = const[py_int]
371
+ p_const_schar = pointer[const[py_int]]
372
+ pp_const_schar = pointer[pointer[const[py_int]]]
373
+ ppp_const_schar = pointer[pointer[pointer[const[py_int]]]]
374
+ p_schar = pointer[py_int]
375
+ pp_schar = pointer[pointer[py_int]]
376
+ ppp_schar = pointer[pointer[pointer[py_int]]]
377
+ short : TypeAlias = py_int
378
+ const_short : TypeAlias = const[py_int]
379
+ p_const_short = pointer[const[py_int]]
380
+ pp_const_short = pointer[pointer[const[py_int]]]
381
+ ppp_const_short = pointer[pointer[pointer[const[py_int]]]]
382
+ p_short = pointer[py_int]
383
+ pp_short = pointer[pointer[py_int]]
384
+ ppp_short = pointer[pointer[pointer[py_int]]]
385
+ sint : TypeAlias = py_int
386
+ const_sint : TypeAlias = const[py_int]
387
+ p_const_sint = pointer[const[py_int]]
388
+ pp_const_sint = pointer[pointer[const[py_int]]]
389
+ ppp_const_sint = pointer[pointer[pointer[const[py_int]]]]
390
+ p_sint = pointer[py_int]
391
+ pp_sint = pointer[pointer[py_int]]
392
+ ppp_sint = pointer[pointer[pointer[py_int]]]
393
+ slong : TypeAlias = py_int
394
+ const_slong : TypeAlias = const[py_int]
395
+ p_const_slong = pointer[const[py_int]]
396
+ pp_const_slong = pointer[pointer[const[py_int]]]
397
+ ppp_const_slong = pointer[pointer[pointer[const[py_int]]]]
398
+ p_slong = pointer[py_int]
399
+ pp_slong = pointer[pointer[py_int]]
400
+ ppp_slong = pointer[pointer[pointer[py_int]]]
401
+ slonglong : TypeAlias = py_int
402
+ const_slonglong : TypeAlias = const[py_int]
403
+ p_const_slonglong = pointer[const[py_int]]
404
+ pp_const_slonglong = pointer[pointer[const[py_int]]]
405
+ ppp_const_slonglong = pointer[pointer[pointer[const[py_int]]]]
406
+ p_slonglong = pointer[py_int]
407
+ pp_slonglong = pointer[pointer[py_int]]
408
+ ppp_slonglong = pointer[pointer[pointer[py_int]]]
409
+ sshort : TypeAlias = py_int
410
+ const_sshort : TypeAlias = const[py_int]
411
+ p_const_sshort = pointer[const[py_int]]
412
+ pp_const_sshort = pointer[pointer[const[py_int]]]
413
+ ppp_const_sshort = pointer[pointer[pointer[const[py_int]]]]
414
+ p_sshort = pointer[py_int]
415
+ pp_sshort = pointer[pointer[py_int]]
416
+ ppp_sshort = pointer[pointer[pointer[py_int]]]
417
+ Py_hash_t : TypeAlias = py_int
418
+ const_Py_hash_t : TypeAlias = const[py_int]
419
+ p_const_Py_hash_t = pointer[const[py_int]]
420
+ pp_const_Py_hash_t = pointer[pointer[const[py_int]]]
421
+ ppp_const_Py_hash_t = pointer[pointer[pointer[const[py_int]]]]
422
+ p_Py_hash_t = pointer[py_int]
423
+ pp_Py_hash_t = pointer[pointer[py_int]]
424
+ ppp_Py_hash_t = pointer[pointer[pointer[py_int]]]
425
+ ptrdiff_t : TypeAlias = py_int
426
+ const_ptrdiff_t : TypeAlias = const[py_int]
427
+ p_const_ptrdiff_t = pointer[const[py_int]]
428
+ pp_const_ptrdiff_t = pointer[pointer[const[py_int]]]
429
+ ppp_const_ptrdiff_t = pointer[pointer[pointer[const[py_int]]]]
430
+ p_ptrdiff_t = pointer[py_int]
431
+ pp_ptrdiff_t = pointer[pointer[py_int]]
432
+ ppp_ptrdiff_t = pointer[pointer[pointer[py_int]]]
433
+ size_t : TypeAlias = py_int
434
+ const_size_t : TypeAlias = const[py_int]
435
+ p_const_size_t = pointer[const[py_int]]
436
+ pp_const_size_t = pointer[pointer[const[py_int]]]
437
+ ppp_const_size_t = pointer[pointer[pointer[const[py_int]]]]
438
+ p_size_t = pointer[py_int]
439
+ pp_size_t = pointer[pointer[py_int]]
440
+ ppp_size_t = pointer[pointer[pointer[py_int]]]
441
+ ssize_t : TypeAlias = py_int
442
+ const_ssize_t : TypeAlias = const[py_int]
443
+ p_const_ssize_t = pointer[const[py_int]]
444
+ pp_const_ssize_t = pointer[pointer[const[py_int]]]
445
+ ppp_const_ssize_t = pointer[pointer[pointer[const[py_int]]]]
446
+ p_ssize_t = pointer[py_int]
447
+ pp_ssize_t = pointer[pointer[py_int]]
448
+ ppp_ssize_t = pointer[pointer[pointer[py_int]]]
449
+ Py_ssize_t : TypeAlias = py_int
450
+ const_Py_ssize_t : TypeAlias = const[py_int]
451
+ p_const_Py_ssize_t = pointer[const[py_int]]
452
+ pp_const_Py_ssize_t = pointer[pointer[const[py_int]]]
453
+ ppp_const_Py_ssize_t = pointer[pointer[pointer[const[py_int]]]]
454
+ p_Py_ssize_t = pointer[py_int]
455
+ pp_Py_ssize_t = pointer[pointer[py_int]]
456
+ ppp_Py_ssize_t = pointer[pointer[pointer[py_int]]]
457
+ Py_tss_t : TypeAlias = Any
458
+ const_Py_tss_t : TypeAlias = const[Any]
459
+ p_Py_tss_t = pointer[Any]
460
+ pp_Py_tss_t = pointer[pointer[Any]]
461
+ ppp_Py_tss_t = pointer[pointer[pointer[Any]]]
462
+ uchar : TypeAlias = py_int
463
+ const_uchar : TypeAlias = const[py_int]
464
+ p_const_uchar = pointer[const[py_int]]
465
+ pp_const_uchar = pointer[pointer[const[py_int]]]
466
+ ppp_const_uchar = pointer[pointer[pointer[const[py_int]]]]
467
+ p_uchar = pointer[py_int]
468
+ pp_uchar = pointer[pointer[py_int]]
469
+ ppp_uchar = pointer[pointer[pointer[py_int]]]
470
+ const_Py_UCS4 : TypeAlias = const[py_int]
471
+ p_const_Py_UCS4 = pointer[const[py_int]]
472
+ pp_const_Py_UCS4 = pointer[pointer[const[py_int]]]
473
+ ppp_const_Py_UCS4 = pointer[pointer[pointer[const[py_int]]]]
474
+ p_Py_UCS4 = pointer[py_int]
475
+ pp_Py_UCS4 = pointer[pointer[py_int]]
476
+ ppp_Py_UCS4 = pointer[pointer[pointer[py_int]]]
477
+ uint : TypeAlias = py_int
478
+ const_uint : TypeAlias = const[py_int]
479
+ p_const_uint = pointer[const[py_int]]
480
+ pp_const_uint = pointer[pointer[const[py_int]]]
481
+ ppp_const_uint = pointer[pointer[pointer[const[py_int]]]]
482
+ p_uint = pointer[py_int]
483
+ pp_uint = pointer[pointer[py_int]]
484
+ ppp_uint = pointer[pointer[pointer[py_int]]]
485
+ ulong : TypeAlias = py_int
486
+ const_ulong : TypeAlias = const[py_int]
487
+ p_const_ulong = pointer[const[py_int]]
488
+ pp_const_ulong = pointer[pointer[const[py_int]]]
489
+ ppp_const_ulong = pointer[pointer[pointer[const[py_int]]]]
490
+ p_ulong = pointer[py_int]
491
+ pp_ulong = pointer[pointer[py_int]]
492
+ ppp_ulong = pointer[pointer[pointer[py_int]]]
493
+ ulonglong : TypeAlias = py_int
494
+ const_ulonglong : TypeAlias = const[py_int]
495
+ p_const_ulonglong = pointer[const[py_int]]
496
+ pp_const_ulonglong = pointer[pointer[const[py_int]]]
497
+ ppp_const_ulonglong = pointer[pointer[pointer[const[py_int]]]]
498
+ p_ulonglong = pointer[py_int]
499
+ pp_ulonglong = pointer[pointer[py_int]]
500
+ ppp_ulonglong = pointer[pointer[pointer[py_int]]]
501
+ const_Py_UNICODE : TypeAlias = const[py_int]
502
+ p_const_Py_UNICODE = pointer[const[py_int]]
503
+ pp_const_Py_UNICODE = pointer[pointer[const[py_int]]]
504
+ ppp_const_Py_UNICODE = pointer[pointer[pointer[const[py_int]]]]
505
+ p_Py_UNICODE = pointer[py_int]
506
+ pp_Py_UNICODE = pointer[pointer[py_int]]
507
+ ppp_Py_UNICODE = pointer[pointer[pointer[py_int]]]
508
+ ushort : TypeAlias = py_int
509
+ const_ushort : TypeAlias = const[py_int]
510
+ p_const_ushort = pointer[const[py_int]]
511
+ pp_const_ushort = pointer[pointer[const[py_int]]]
512
+ ppp_const_ushort = pointer[pointer[pointer[const[py_int]]]]
513
+ p_ushort = pointer[py_int]
514
+ pp_ushort = pointer[pointer[py_int]]
515
+ ppp_ushort = pointer[pointer[pointer[py_int]]]
516
+ const_void : TypeAlias = const[Any]
517
+ p_void = pointer[Any]
518
+ pp_void = pointer[pointer[Any]]
519
+ ppp_void = pointer[pointer[pointer[Any]]]
520
+
521
+ ##### END: GENERATED LIST OF GENERATED TYPES #####
Cython/StringIOTree.py ADDED
@@ -0,0 +1,170 @@
1
+ r"""
2
+ Implements a buffer with insertion points. When you know you need to
3
+ "get back" to a place and write more later, simply call insertion_point()
4
+ at that spot and get a new StringIOTree object that is "left behind".
5
+
6
+ EXAMPLE:
7
+
8
+ >>> a = StringIOTree()
9
+ >>> _= a.write('first\n')
10
+ >>> b = a.insertion_point()
11
+ >>> _= a.write('third\n')
12
+ >>> _= b.write('second\n')
13
+ >>> a.getvalue().split()
14
+ ['first', 'second', 'third']
15
+
16
+ >>> c = b.insertion_point()
17
+ >>> d = c.insertion_point()
18
+ >>> _= d.write('alpha\n')
19
+ >>> _= b.write('gamma\n')
20
+ >>> _= c.write('beta\n')
21
+ >>> b.getvalue().split()
22
+ ['second', 'alpha', 'beta', 'gamma']
23
+
24
+ >>> try: from cStringIO import StringIO
25
+ ... except ImportError: from io import StringIO
26
+
27
+ >>> i = StringIOTree()
28
+ >>> d.insert(i)
29
+ >>> _= i.write('inserted\n')
30
+ >>> out = StringIO()
31
+ >>> a.copyto(out)
32
+ >>> out.getvalue().split()
33
+ ['first', 'second', 'alpha', 'inserted', 'beta', 'gamma', 'third']
34
+ """
35
+
36
+
37
+ from io import StringIO
38
+
39
+
40
+ class StringIOTree:
41
+ """
42
+ See module docs.
43
+ """
44
+
45
+ def __init__(self, stream=None):
46
+ self.prepended_children = []
47
+ if stream is None:
48
+ stream = StringIO()
49
+ self.stream = stream
50
+ self.write = stream.write
51
+ self.markers = []
52
+
53
+ def empty(self):
54
+ if self.stream.tell():
55
+ return False
56
+ return all([child.empty() for child in self.prepended_children]) if self.prepended_children else True
57
+
58
+ def getvalue(self):
59
+ content = []
60
+ self._collect_in(content)
61
+ return "".join(content)
62
+
63
+ def _collect_in(self, target_list):
64
+ x: StringIOTree
65
+ for x in self.prepended_children:
66
+ x._collect_in(target_list)
67
+ stream_content = self.stream.getvalue()
68
+ if stream_content:
69
+ target_list.append(stream_content)
70
+
71
+ def copyto(self, target):
72
+ """Potentially cheaper than getvalue as no string concatenation
73
+ needs to happen."""
74
+ child: StringIOTree
75
+ for child in self.prepended_children:
76
+ child.copyto(target)
77
+ stream_content = self.stream.getvalue()
78
+ if stream_content:
79
+ target.write(stream_content)
80
+
81
+ def commit(self):
82
+ # Save what we have written until now so that the buffer
83
+ # itself is empty -- this makes it ready for insertion
84
+ if self.stream.tell():
85
+ self.prepended_children.append(StringIOTree(self.stream))
86
+ self.prepended_children[-1].markers = self.markers
87
+ self.markers = []
88
+ self.stream = StringIO()
89
+ self.write = self.stream.write
90
+
91
+ def reset(self):
92
+ self.prepended_children = []
93
+ self.markers = []
94
+ self.stream = StringIO()
95
+ self.write = self.stream.write
96
+
97
+ def insert(self, iotree):
98
+ """
99
+ Insert a StringIOTree (and all of its contents) at this location.
100
+ Further writing to self appears after what is inserted.
101
+ """
102
+ self.commit()
103
+ self.prepended_children.append(iotree)
104
+
105
+ def insertion_point(self):
106
+ """
107
+ Returns a new StringIOTree, which is left behind at the current position
108
+ (it what is written to the result will appear right before whatever is
109
+ next written to self).
110
+
111
+ Calling getvalue() or copyto() on the result will only return the
112
+ contents written to it.
113
+ """
114
+ # Save what we have written until now
115
+ # This is so that getvalue on the result doesn't include it.
116
+ self.commit()
117
+ # Construct the new forked object to return
118
+ other = StringIOTree()
119
+ self.prepended_children.append(other)
120
+ return other
121
+
122
+ def allmarkers(self):
123
+ c: StringIOTree
124
+ children = self.prepended_children
125
+ return [m for c in children for m in c.allmarkers()] + self.markers
126
+
127
+ """
128
+ # Print the result of allmarkers in a nice human-readable form. Use it only for debugging.
129
+ # Prints e.g.
130
+ # /path/to/source.pyx:
131
+ # cython line 2 maps to 3299-3343
132
+ # cython line 4 maps to 2236-2245 2306 3188-3201
133
+ # /path/to/othersource.pyx:
134
+ # cython line 3 maps to 1234-1270
135
+ # ...
136
+ # Note: In the example above, 3343 maps to line 2, 3344 does not.
137
+ def print_hr_allmarkers(self):
138
+ from collections import defaultdict
139
+ markers = self.allmarkers()
140
+ totmap = defaultdict(lambda: defaultdict(list))
141
+ for c_lineno, (cython_desc, cython_lineno) in enumerate(markers):
142
+ if cython_lineno > 0 and cython_desc.filename is not None:
143
+ totmap[cython_desc.filename][cython_lineno].append(c_lineno + 1)
144
+ reprstr = ""
145
+ if totmap == 0:
146
+ reprstr += "allmarkers is empty\n"
147
+ try:
148
+ sorted(totmap.items())
149
+ except:
150
+ print(totmap)
151
+ print(totmap.items())
152
+ for cython_path, filemap in sorted(totmap.items()):
153
+ reprstr += cython_path + ":\n"
154
+ for cython_lineno, c_linenos in sorted(filemap.items()):
155
+ reprstr += "\tcython line " + str(cython_lineno) + " maps to "
156
+ i = 0
157
+ while i < len(c_linenos):
158
+ reprstr += str(c_linenos[i])
159
+ flag = False
160
+ while i+1 < len(c_linenos) and c_linenos[i+1] == c_linenos[i]+1:
161
+ i += 1
162
+ flag = True
163
+ if flag:
164
+ reprstr += "-" + str(c_linenos[i]) + " "
165
+ i += 1
166
+ reprstr += "\n"
167
+
168
+ import sys
169
+ sys.stdout.write(reprstr)
170
+ """
Binary file
@@ -0,0 +1,4 @@
1
+ # The original Tempita implements all of its templating code here.
2
+ # Moved it to _tempita.py to make the compilation portable.
3
+
4
+ from ._tempita import *