Cython 3.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. Cython/Build/BuildExecutable.py +169 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +323 -0
  4. Cython/Build/Dependencies.py +1306 -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 +76 -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 +8 -0
  18. Cython/CodeWriter.py +811 -0
  19. Cython/Compiler/AnalysedTreeTransforms.py +97 -0
  20. Cython/Compiler/Annotate.py +326 -0
  21. Cython/Compiler/AutoDocTransforms.py +320 -0
  22. Cython/Compiler/Buffer.py +680 -0
  23. Cython/Compiler/Builtin.py +934 -0
  24. Cython/Compiler/CmdLine.py +259 -0
  25. Cython/Compiler/Code.pxd +148 -0
  26. Cython/Compiler/Code.py +3375 -0
  27. Cython/Compiler/CodeGeneration.py +33 -0
  28. Cython/Compiler/CythonScope.py +187 -0
  29. Cython/Compiler/Dataclass.py +868 -0
  30. Cython/Compiler/DebugFlags.py +24 -0
  31. Cython/Compiler/Errors.py +295 -0
  32. Cython/Compiler/ExprNodes.py +15267 -0
  33. Cython/Compiler/FlowControl.pxd +97 -0
  34. Cython/Compiler/FlowControl.py +1455 -0
  35. Cython/Compiler/FusedNode.py +1002 -0
  36. Cython/Compiler/Future.py +16 -0
  37. Cython/Compiler/Interpreter.py +57 -0
  38. Cython/Compiler/Lexicon.py +340 -0
  39. Cython/Compiler/LineTable.py +114 -0
  40. Cython/Compiler/Main.py +853 -0
  41. Cython/Compiler/MatchCaseNodes.py +259 -0
  42. Cython/Compiler/MemoryView.py +922 -0
  43. Cython/Compiler/ModuleNode.py +4024 -0
  44. Cython/Compiler/Naming.py +374 -0
  45. Cython/Compiler/Nodes.py +10826 -0
  46. Cython/Compiler/Optimize.py +5256 -0
  47. Cython/Compiler/Options.py +835 -0
  48. Cython/Compiler/ParseTreeTransforms.pxd +77 -0
  49. Cython/Compiler/ParseTreeTransforms.py +4509 -0
  50. Cython/Compiler/Parsing.pxd +9 -0
  51. Cython/Compiler/Parsing.py +4789 -0
  52. Cython/Compiler/Pipeline.py +439 -0
  53. Cython/Compiler/PyrexTypes.py +5762 -0
  54. Cython/Compiler/Pythran.py +232 -0
  55. Cython/Compiler/Scanning.pxd +40 -0
  56. Cython/Compiler/Scanning.py +577 -0
  57. Cython/Compiler/StringEncoding.py +347 -0
  58. Cython/Compiler/Symtab.py +3080 -0
  59. Cython/Compiler/Tests/TestBuffer.py +105 -0
  60. Cython/Compiler/Tests/TestBuiltin.py +72 -0
  61. Cython/Compiler/Tests/TestCmdLine.py +586 -0
  62. Cython/Compiler/Tests/TestCode.py +86 -0
  63. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  64. Cython/Compiler/Tests/TestGrammar.py +202 -0
  65. Cython/Compiler/Tests/TestMemView.py +71 -0
  66. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  67. Cython/Compiler/Tests/TestScanning.py +134 -0
  68. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  69. Cython/Compiler/Tests/TestStringEncoding.py +33 -0
  70. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  71. Cython/Compiler/Tests/TestTreePath.py +103 -0
  72. Cython/Compiler/Tests/TestTypes.py +75 -0
  73. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  74. Cython/Compiler/Tests/TestVisitor.py +61 -0
  75. Cython/Compiler/Tests/Utils.py +36 -0
  76. Cython/Compiler/Tests/__init__.py +1 -0
  77. Cython/Compiler/TreeFragment.py +278 -0
  78. Cython/Compiler/TreePath.py +303 -0
  79. Cython/Compiler/TypeInference.py +584 -0
  80. Cython/Compiler/TypeSlots.py +1181 -0
  81. Cython/Compiler/UFuncs.py +311 -0
  82. Cython/Compiler/UtilNodes.py +389 -0
  83. Cython/Compiler/UtilityCode.py +344 -0
  84. Cython/Compiler/Version.py +8 -0
  85. Cython/Compiler/Visitor.pxd +53 -0
  86. Cython/Compiler/Visitor.py +861 -0
  87. Cython/Compiler/__init__.py +1 -0
  88. Cython/Coverage.py +448 -0
  89. Cython/Debugger/Cygdb.py +175 -0
  90. Cython/Debugger/DebugWriter.py +82 -0
  91. Cython/Debugger/Tests/TestLibCython.py +275 -0
  92. Cython/Debugger/Tests/__init__.py +1 -0
  93. Cython/Debugger/Tests/cfuncs.c +8 -0
  94. Cython/Debugger/Tests/codefile +49 -0
  95. Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
  96. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  97. Cython/Debugger/__init__.py +1 -0
  98. Cython/Debugger/libcython.py +1548 -0
  99. Cython/Debugger/libpython.py +2821 -0
  100. Cython/Debugging.py +20 -0
  101. Cython/Distutils/__init__.py +2 -0
  102. Cython/Distutils/build_ext.py +139 -0
  103. Cython/Distutils/extension.py +96 -0
  104. Cython/Distutils/old_build_ext.py +351 -0
  105. Cython/Includes/cpython/__init__.pxd +173 -0
  106. Cython/Includes/cpython/array.pxd +174 -0
  107. Cython/Includes/cpython/bool.pxd +37 -0
  108. Cython/Includes/cpython/buffer.pxd +112 -0
  109. Cython/Includes/cpython/bytearray.pxd +33 -0
  110. Cython/Includes/cpython/bytes.pxd +200 -0
  111. Cython/Includes/cpython/cellobject.pxd +35 -0
  112. Cython/Includes/cpython/ceval.pxd +8 -0
  113. Cython/Includes/cpython/codecs.pxd +121 -0
  114. Cython/Includes/cpython/complex.pxd +60 -0
  115. Cython/Includes/cpython/contextvars.pxd +145 -0
  116. Cython/Includes/cpython/conversion.pxd +36 -0
  117. Cython/Includes/cpython/datetime.pxd +395 -0
  118. Cython/Includes/cpython/descr.pxd +26 -0
  119. Cython/Includes/cpython/dict.pxd +187 -0
  120. Cython/Includes/cpython/exc.pxd +263 -0
  121. Cython/Includes/cpython/fileobject.pxd +57 -0
  122. Cython/Includes/cpython/float.pxd +47 -0
  123. Cython/Includes/cpython/function.pxd +65 -0
  124. Cython/Includes/cpython/genobject.pxd +25 -0
  125. Cython/Includes/cpython/getargs.pxd +12 -0
  126. Cython/Includes/cpython/instance.pxd +25 -0
  127. Cython/Includes/cpython/iterator.pxd +36 -0
  128. Cython/Includes/cpython/iterobject.pxd +24 -0
  129. Cython/Includes/cpython/list.pxd +92 -0
  130. Cython/Includes/cpython/long.pxd +149 -0
  131. Cython/Includes/cpython/longintrepr.pxd +14 -0
  132. Cython/Includes/cpython/mapping.pxd +63 -0
  133. Cython/Includes/cpython/marshal.pxd +66 -0
  134. Cython/Includes/cpython/mem.pxd +120 -0
  135. Cython/Includes/cpython/memoryview.pxd +50 -0
  136. Cython/Includes/cpython/method.pxd +49 -0
  137. Cython/Includes/cpython/module.pxd +208 -0
  138. Cython/Includes/cpython/number.pxd +258 -0
  139. Cython/Includes/cpython/object.pxd +433 -0
  140. Cython/Includes/cpython/pycapsule.pxd +143 -0
  141. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  142. Cython/Includes/cpython/pyport.pxd +8 -0
  143. Cython/Includes/cpython/pystate.pxd +95 -0
  144. Cython/Includes/cpython/pythread.pxd +53 -0
  145. Cython/Includes/cpython/ref.pxd +67 -0
  146. Cython/Includes/cpython/sequence.pxd +134 -0
  147. Cython/Includes/cpython/set.pxd +119 -0
  148. Cython/Includes/cpython/slice.pxd +70 -0
  149. Cython/Includes/cpython/time.pxd +129 -0
  150. Cython/Includes/cpython/tuple.pxd +72 -0
  151. Cython/Includes/cpython/type.pxd +53 -0
  152. Cython/Includes/cpython/unicode.pxd +639 -0
  153. Cython/Includes/cpython/version.pxd +32 -0
  154. Cython/Includes/cpython/weakref.pxd +78 -0
  155. Cython/Includes/libc/__init__.pxd +1 -0
  156. Cython/Includes/libc/complex.pxd +35 -0
  157. Cython/Includes/libc/errno.pxd +127 -0
  158. Cython/Includes/libc/float.pxd +43 -0
  159. Cython/Includes/libc/limits.pxd +28 -0
  160. Cython/Includes/libc/locale.pxd +46 -0
  161. Cython/Includes/libc/math.pxd +209 -0
  162. Cython/Includes/libc/setjmp.pxd +10 -0
  163. Cython/Includes/libc/signal.pxd +64 -0
  164. Cython/Includes/libc/stddef.pxd +9 -0
  165. Cython/Includes/libc/stdint.pxd +105 -0
  166. Cython/Includes/libc/stdio.pxd +80 -0
  167. Cython/Includes/libc/stdlib.pxd +72 -0
  168. Cython/Includes/libc/string.pxd +50 -0
  169. Cython/Includes/libc/threads.pxd +84 -0
  170. Cython/Includes/libc/time.pxd +51 -0
  171. Cython/Includes/libcpp/__init__.pxd +4 -0
  172. Cython/Includes/libcpp/algorithm.pxd +320 -0
  173. Cython/Includes/libcpp/any.pxd +16 -0
  174. Cython/Includes/libcpp/atomic.pxd +59 -0
  175. Cython/Includes/libcpp/barrier.pxd +22 -0
  176. Cython/Includes/libcpp/bit.pxd +29 -0
  177. Cython/Includes/libcpp/cast.pxd +12 -0
  178. Cython/Includes/libcpp/cmath.pxd +518 -0
  179. Cython/Includes/libcpp/complex.pxd +106 -0
  180. Cython/Includes/libcpp/deque.pxd +165 -0
  181. Cython/Includes/libcpp/exception.pxd +86 -0
  182. Cython/Includes/libcpp/execution.pxd +15 -0
  183. Cython/Includes/libcpp/forward_list.pxd +63 -0
  184. Cython/Includes/libcpp/functional.pxd +26 -0
  185. Cython/Includes/libcpp/future.pxd +103 -0
  186. Cython/Includes/libcpp/iterator.pxd +34 -0
  187. Cython/Includes/libcpp/latch.pxd +17 -0
  188. Cython/Includes/libcpp/limits.pxd +61 -0
  189. Cython/Includes/libcpp/list.pxd +117 -0
  190. Cython/Includes/libcpp/map.pxd +252 -0
  191. Cython/Includes/libcpp/memory.pxd +115 -0
  192. Cython/Includes/libcpp/mutex.pxd +130 -0
  193. Cython/Includes/libcpp/numbers.pxd +15 -0
  194. Cython/Includes/libcpp/numeric.pxd +131 -0
  195. Cython/Includes/libcpp/optional.pxd +34 -0
  196. Cython/Includes/libcpp/pair.pxd +1 -0
  197. Cython/Includes/libcpp/queue.pxd +25 -0
  198. Cython/Includes/libcpp/random.pxd +166 -0
  199. Cython/Includes/libcpp/semaphore.pxd +44 -0
  200. Cython/Includes/libcpp/set.pxd +228 -0
  201. Cython/Includes/libcpp/shared_mutex.pxd +72 -0
  202. Cython/Includes/libcpp/span.pxd +87 -0
  203. Cython/Includes/libcpp/stack.pxd +11 -0
  204. Cython/Includes/libcpp/stop_token.pxd +105 -0
  205. Cython/Includes/libcpp/string.pxd +355 -0
  206. Cython/Includes/libcpp/string_view.pxd +181 -0
  207. Cython/Includes/libcpp/typeindex.pxd +15 -0
  208. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  209. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  210. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  211. Cython/Includes/libcpp/utility.pxd +30 -0
  212. Cython/Includes/libcpp/vector.pxd +186 -0
  213. Cython/Includes/openmp.pxd +50 -0
  214. Cython/Includes/posix/__init__.pxd +1 -0
  215. Cython/Includes/posix/dlfcn.pxd +14 -0
  216. Cython/Includes/posix/fcntl.pxd +86 -0
  217. Cython/Includes/posix/ioctl.pxd +4 -0
  218. Cython/Includes/posix/mman.pxd +101 -0
  219. Cython/Includes/posix/resource.pxd +57 -0
  220. Cython/Includes/posix/select.pxd +21 -0
  221. Cython/Includes/posix/signal.pxd +73 -0
  222. Cython/Includes/posix/stat.pxd +98 -0
  223. Cython/Includes/posix/stdio.pxd +37 -0
  224. Cython/Includes/posix/stdlib.pxd +29 -0
  225. Cython/Includes/posix/strings.pxd +9 -0
  226. Cython/Includes/posix/time.pxd +71 -0
  227. Cython/Includes/posix/types.pxd +30 -0
  228. Cython/Includes/posix/uio.pxd +26 -0
  229. Cython/Includes/posix/unistd.pxd +271 -0
  230. Cython/Includes/posix/wait.pxd +38 -0
  231. Cython/Plex/Actions.pxd +24 -0
  232. Cython/Plex/Actions.py +119 -0
  233. Cython/Plex/DFA.pxd +14 -0
  234. Cython/Plex/DFA.py +164 -0
  235. Cython/Plex/Errors.py +48 -0
  236. Cython/Plex/Lexicons.py +178 -0
  237. Cython/Plex/Machines.pxd +36 -0
  238. Cython/Plex/Machines.py +238 -0
  239. Cython/Plex/Regexps.py +539 -0
  240. Cython/Plex/Scanners.pxd +47 -0
  241. Cython/Plex/Scanners.py +360 -0
  242. Cython/Plex/Transitions.pxd +14 -0
  243. Cython/Plex/Transitions.py +239 -0
  244. Cython/Plex/__init__.py +34 -0
  245. Cython/Runtime/__init__.py +1 -0
  246. Cython/Runtime/refnanny.pyx +237 -0
  247. Cython/Shadow.py +690 -0
  248. Cython/Shadow.pyi +521 -0
  249. Cython/StringIOTree.py +170 -0
  250. Cython/Tempita/__init__.py +4 -0
  251. Cython/Tempita/_looper.py +154 -0
  252. Cython/Tempita/_tempita.py +1091 -0
  253. Cython/TestUtils.py +410 -0
  254. Cython/Tests/TestCodeWriter.py +128 -0
  255. Cython/Tests/TestCythonUtils.py +202 -0
  256. Cython/Tests/TestJediTyper.py +223 -0
  257. Cython/Tests/TestShadow.py +114 -0
  258. Cython/Tests/TestStringIOTree.py +67 -0
  259. Cython/Tests/TestTestUtils.py +90 -0
  260. Cython/Tests/__init__.py +1 -0
  261. Cython/Tests/xmlrunner.py +390 -0
  262. Cython/Utility/AsyncGen.c +1002 -0
  263. Cython/Utility/Buffer.c +875 -0
  264. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  265. Cython/Utility/Builtins.c +776 -0
  266. Cython/Utility/CConvert.pyx +134 -0
  267. Cython/Utility/CMath.c +104 -0
  268. Cython/Utility/CommonStructures.c +118 -0
  269. Cython/Utility/Complex.c +378 -0
  270. Cython/Utility/Coroutine.c +2206 -0
  271. Cython/Utility/CpdefEnums.pyx +103 -0
  272. Cython/Utility/CppConvert.pyx +279 -0
  273. Cython/Utility/CppSupport.cpp +143 -0
  274. Cython/Utility/CythonFunction.c +1794 -0
  275. Cython/Utility/Dataclasses.c +185 -0
  276. Cython/Utility/Dataclasses.py +112 -0
  277. Cython/Utility/Embed.c +125 -0
  278. Cython/Utility/Exceptions.c +1012 -0
  279. Cython/Utility/ExtensionTypes.c +809 -0
  280. Cython/Utility/FunctionArguments.c +965 -0
  281. Cython/Utility/ImportExport.c +987 -0
  282. Cython/Utility/Lock.c +136 -0
  283. Cython/Utility/MemoryView.pxd +187 -0
  284. Cython/Utility/MemoryView.pyx +1481 -0
  285. Cython/Utility/MemoryView_C.c +1046 -0
  286. Cython/Utility/ModuleSetupCode.c +3059 -0
  287. Cython/Utility/NumpyImportArray.c +46 -0
  288. Cython/Utility/ObjectHandling.c +3342 -0
  289. Cython/Utility/Optimize.c +1589 -0
  290. Cython/Utility/Overflow.c +404 -0
  291. Cython/Utility/Printing.c +86 -0
  292. Cython/Utility/Profile.c +709 -0
  293. Cython/Utility/StringTools.c +1259 -0
  294. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  295. Cython/Utility/TestCythonScope.pyx +75 -0
  296. Cython/Utility/TestUtilityLoader.c +12 -0
  297. Cython/Utility/TypeConversion.c +1284 -0
  298. Cython/Utility/UFuncs.pyx +50 -0
  299. Cython/Utility/UFuncs_C.c +89 -0
  300. Cython/Utility/__init__.py +28 -0
  301. Cython/Utility/arrayarray.h +148 -0
  302. Cython/Utils.py +687 -0
  303. Cython/__init__.py +10 -0
  304. Cython/__init__.pyi +7 -0
  305. Cython/py.typed +0 -0
  306. cython-3.1.0.dist-info/COPYING.txt +19 -0
  307. cython-3.1.0.dist-info/LICENSE.txt +176 -0
  308. cython-3.1.0.dist-info/METADATA +636 -0
  309. cython-3.1.0.dist-info/RECORD +316 -0
  310. cython-3.1.0.dist-info/WHEEL +5 -0
  311. cython-3.1.0.dist-info/entry_points.txt +4 -0
  312. cython-3.1.0.dist-info/top_level.txt +3 -0
  313. cython.py +29 -0
  314. pyximport/__init__.py +4 -0
  315. pyximport/pyxbuild.py +160 -0
  316. pyximport/pyximport.py +482 -0
@@ -0,0 +1,24 @@
1
+ # Can be enabled at the command line with --debug-xxx.
2
+
3
+ debug_disposal_code = 0
4
+ debug_temp_alloc = 0
5
+ debug_coercion = 0
6
+
7
+ # Write comments into the C code that show where temporary variables
8
+ # are allocated and released.
9
+ debug_temp_code_comments = 0
10
+
11
+ # Write a call trace of the code generation phase into the C code.
12
+ debug_trace_code_generation = 0
13
+
14
+ # Do not replace exceptions with user-friendly error messages.
15
+ debug_no_exception_intercept = 0
16
+
17
+ # Print a message each time a new stage in the pipeline is entered.
18
+ debug_verbose_pipeline = 0
19
+
20
+ # Print a message each time an Entry type is assigned.
21
+ debug_verbose_entry_types = False
22
+
23
+ # Raise an exception when an error is encountered.
24
+ debug_exception_on_error = 0
@@ -0,0 +1,295 @@
1
+ #
2
+ # Errors
3
+ #
4
+
5
+ any_string_type = (bytes, str)
6
+
7
+ import sys
8
+ from contextlib import contextmanager
9
+
10
+ try:
11
+ from threading import local as _threadlocal
12
+ except ImportError:
13
+ class _threadlocal: pass
14
+
15
+ threadlocal = _threadlocal()
16
+
17
+ from ..Utils import open_new_file
18
+ from . import DebugFlags
19
+ from . import Options
20
+
21
+
22
+ class PyrexError(Exception):
23
+ pass
24
+
25
+
26
+ class PyrexWarning(Exception):
27
+ pass
28
+
29
+ class CannotSpecialize(PyrexError):
30
+ pass
31
+
32
+ def context(position):
33
+ source = position[0]
34
+ assert not (isinstance(source, any_string_type)), (
35
+ "Please replace filename strings with Scanning.FileSourceDescriptor instances %r" % source)
36
+ try:
37
+ F = source.get_lines()
38
+ except UnicodeDecodeError:
39
+ # file has an encoding problem
40
+ s = "[unprintable code]\n"
41
+ else:
42
+ s = ''.join(F[max(0, position[1]-6):position[1]])
43
+ s = '...\n%s%s^\n' % (s, ' '*(position[2]))
44
+ s = '%s\n%s%s\n' % ('-'*60, s, '-'*60)
45
+ return s
46
+
47
+ def format_position(position):
48
+ if position:
49
+ return "%s:%d:%d: " % (position[0].get_error_description(),
50
+ position[1], position[2])
51
+ return ''
52
+
53
+ def format_error(message, position):
54
+ if position:
55
+ pos_str = format_position(position)
56
+ cont = context(position)
57
+ message = '\nError compiling Cython file:\n%s\n%s%s' % (cont, pos_str, message or '')
58
+ return message
59
+
60
+ class CompileError(PyrexError):
61
+
62
+ def __init__(self, position = None, message = ""):
63
+ self.position = position
64
+ self.message_only = message
65
+ self.formatted_message = format_error(message, position)
66
+ self.reported = False
67
+ Exception.__init__(self, self.formatted_message)
68
+ # Python Exception subclass pickling is broken,
69
+ # see https://bugs.python.org/issue1692335
70
+ self.args = (position, message)
71
+
72
+ def __str__(self):
73
+ return self.formatted_message
74
+
75
+ class CompileWarning(PyrexWarning):
76
+
77
+ def __init__(self, position = None, message = ""):
78
+ self.position = position
79
+ Exception.__init__(self, format_position(position) + message)
80
+
81
+ class InternalError(Exception):
82
+ # If this is ever raised, there is a bug in the compiler.
83
+
84
+ def __init__(self, message):
85
+ self.message_only = message
86
+ Exception.__init__(self, "Internal compiler error: %s"
87
+ % message)
88
+
89
+ class AbortError(Exception):
90
+ # Throw this to stop the compilation immediately.
91
+
92
+ def __init__(self, message):
93
+ self.message_only = message
94
+ Exception.__init__(self, "Abort error: %s" % message)
95
+
96
+ class CompilerCrash(CompileError):
97
+ # raised when an unexpected exception occurs in a transform
98
+ def __init__(self, pos, context, message, cause, stacktrace=None):
99
+ if message:
100
+ message = '\n' + message
101
+ else:
102
+ message = '\n'
103
+ self.message_only = message
104
+ if context:
105
+ message = "Compiler crash in %s%s" % (context, message)
106
+ if stacktrace:
107
+ import traceback
108
+ message += (
109
+ '\n\nCompiler crash traceback from this point on:\n' +
110
+ ''.join(traceback.format_tb(stacktrace)))
111
+ if cause:
112
+ if not stacktrace:
113
+ message += '\n'
114
+ message += '%s: %s' % (cause.__class__.__name__, cause)
115
+ CompileError.__init__(self, pos, message)
116
+ # Python Exception subclass pickling is broken,
117
+ # see https://bugs.python.org/issue1692335
118
+ self.args = (pos, context, message, cause, stacktrace)
119
+
120
+ class NoElementTreeInstalledException(PyrexError):
121
+ """raised when the user enabled options.gdb_debug but no ElementTree
122
+ implementation was found
123
+ """
124
+
125
+ def open_listing_file(path, echo_to_stderr=True):
126
+ # Begin a new error listing. If path is None, no file
127
+ # is opened, the error counter is just reset.
128
+ if path is not None:
129
+ threadlocal.cython_errors_listing_file = open_new_file(path)
130
+ else:
131
+ threadlocal.cython_errors_listing_file = None
132
+ if echo_to_stderr:
133
+ threadlocal.cython_errors_echo_file = sys.stderr
134
+ else:
135
+ threadlocal.cython_errors_echo_file = None
136
+ threadlocal.cython_errors_count = 0
137
+
138
+ def close_listing_file():
139
+ if threadlocal.cython_errors_listing_file:
140
+ threadlocal.cython_errors_listing_file.close()
141
+ threadlocal.cython_errors_listing_file = None
142
+
143
+ def report_error(err, use_stack=True):
144
+ error_stack = threadlocal.cython_errors_stack
145
+ if error_stack and use_stack:
146
+ error_stack[-1].append(err)
147
+ else:
148
+ # See Main.py for why dual reporting occurs. Quick fix for now.
149
+ if err.reported: return
150
+ err.reported = True
151
+ try: line = "%s\n" % err
152
+ except UnicodeEncodeError:
153
+ # Python <= 2.5 does this for non-ASCII Unicode exceptions
154
+ line = format_error(getattr(err, 'message_only', "[unprintable exception message]"),
155
+ getattr(err, 'position', None)) + '\n'
156
+ listing_file = threadlocal.cython_errors_listing_file
157
+ if listing_file:
158
+ try: listing_file.write(line)
159
+ except UnicodeEncodeError:
160
+ listing_file.write(line.encode('ASCII', 'replace'))
161
+ echo_file = threadlocal.cython_errors_echo_file
162
+ if echo_file:
163
+ try: echo_file.write(line)
164
+ except UnicodeEncodeError:
165
+ echo_file.write(line.encode('ASCII', 'replace'))
166
+ threadlocal.cython_errors_count += 1
167
+ if Options.fast_fail:
168
+ raise AbortError("fatal errors")
169
+
170
+ def error(position, message):
171
+ #print("Errors.error:", repr(position), repr(message)) ###
172
+ if position is None:
173
+ raise InternalError(message)
174
+ err = CompileError(position, message)
175
+ if DebugFlags.debug_exception_on_error: raise Exception(err) # debug
176
+ report_error(err)
177
+ return err
178
+
179
+
180
+ LEVEL = 1 # warn about all errors level 1 or higher
181
+
182
+ def _write_file_encode(file, line):
183
+ try:
184
+ file.write(line)
185
+ except UnicodeEncodeError:
186
+ file.write(line.encode('ascii', 'replace'))
187
+
188
+
189
+ def performance_hint(position, message, env):
190
+ if not env.directives['show_performance_hints']:
191
+ return
192
+ warn = CompileWarning(position, message)
193
+ line = "performance hint: %s\n" % warn
194
+ listing_file = threadlocal.cython_errors_listing_file
195
+ if listing_file:
196
+ _write_file_encode(listing_file, line)
197
+ echo_file = threadlocal.cython_errors_echo_file
198
+ if echo_file:
199
+ _write_file_encode(echo_file, line)
200
+ return warn
201
+
202
+
203
+ def message(position, message, level=1):
204
+ if level < LEVEL:
205
+ return
206
+ warn = CompileWarning(position, message)
207
+ line = "note: %s\n" % warn
208
+ listing_file = threadlocal.cython_errors_listing_file
209
+ if listing_file:
210
+ _write_file_encode(listing_file, line)
211
+ echo_file = threadlocal.cython_errors_echo_file
212
+ if echo_file:
213
+ _write_file_encode(echo_file, line)
214
+ return warn
215
+
216
+
217
+ def warning(position, message, level=0):
218
+ if level < LEVEL:
219
+ return
220
+ if Options.warning_errors and position:
221
+ return error(position, message)
222
+ warn = CompileWarning(position, message)
223
+ line = "warning: %s\n" % warn
224
+ listing_file = threadlocal.cython_errors_listing_file
225
+ if listing_file:
226
+ _write_file_encode(listing_file, line)
227
+ echo_file = threadlocal.cython_errors_echo_file
228
+ if echo_file:
229
+ _write_file_encode(echo_file, line)
230
+ return warn
231
+
232
+
233
+ def warn_once(position, message, level=0):
234
+ if level < LEVEL:
235
+ return
236
+ warn_once_seen = threadlocal.cython_errors_warn_once_seen
237
+ if message in warn_once_seen:
238
+ return
239
+ warn = CompileWarning(position, message)
240
+ line = "warning: %s\n" % warn
241
+ listing_file = threadlocal.cython_errors_listing_file
242
+ if listing_file:
243
+ _write_file_encode(listing_file, line)
244
+ echo_file = threadlocal.cython_errors_echo_file
245
+ if echo_file:
246
+ _write_file_encode(echo_file, line)
247
+ warn_once_seen.add(message)
248
+ return warn
249
+
250
+
251
+ # These functions can be used to momentarily suppress errors.
252
+
253
+ def hold_errors():
254
+ errors = []
255
+ threadlocal.cython_errors_stack.append(errors)
256
+ return errors
257
+
258
+
259
+ def release_errors(ignore=False):
260
+ held_errors = threadlocal.cython_errors_stack.pop()
261
+ if not ignore:
262
+ for err in held_errors:
263
+ report_error(err)
264
+
265
+
266
+ def held_errors():
267
+ return threadlocal.cython_errors_stack[-1]
268
+
269
+
270
+ # same as context manager:
271
+
272
+ @contextmanager
273
+ def local_errors(ignore=False):
274
+ errors = hold_errors()
275
+ try:
276
+ yield errors
277
+ finally:
278
+ release_errors(ignore=ignore)
279
+
280
+
281
+ # Keep all global state in thread local storage to support parallel cythonisation in distutils.
282
+
283
+ def init_thread():
284
+ threadlocal.cython_errors_count = 0
285
+ threadlocal.cython_errors_listing_file = None
286
+ threadlocal.cython_errors_echo_file = None
287
+ threadlocal.cython_errors_warn_once_seen = set()
288
+ threadlocal.cython_errors_stack = []
289
+
290
+ def reset():
291
+ threadlocal.cython_errors_warn_once_seen.clear()
292
+ del threadlocal.cython_errors_stack[:]
293
+
294
+ def get_errors_count():
295
+ return threadlocal.cython_errors_count