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,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,297 @@
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]"
41
+ else:
42
+ s = '\n'.join(F[max(0, position[1]-6):position[1]])
43
+ s = '...\n%s\n%s^' % (s, ' '*(position[2]))
44
+
45
+ hbar = '-' * 60
46
+ s = f'{hbar}\n{s}\n{hbar}\n'
47
+ return s
48
+
49
+ def format_position(position):
50
+ if position:
51
+ return "%s:%d:%d: " % (position[0].get_error_description(),
52
+ position[1], position[2])
53
+ return ''
54
+
55
+ def format_error(message, position):
56
+ if position:
57
+ pos_str = format_position(position)
58
+ cont = context(position)
59
+ message = '\nError compiling Cython file:\n%s%s%s' % (cont, pos_str, message or '')
60
+ return message
61
+
62
+ class CompileError(PyrexError):
63
+
64
+ def __init__(self, position = None, message = ""):
65
+ self.position = position
66
+ self.message_only = message
67
+ self.formatted_message = format_error(message, position)
68
+ self.reported = False
69
+ Exception.__init__(self, self.formatted_message)
70
+ # Python Exception subclass pickling is broken,
71
+ # see https://bugs.python.org/issue1692335
72
+ self.args = (position, message)
73
+
74
+ def __str__(self):
75
+ return self.formatted_message
76
+
77
+ class CompileWarning(PyrexWarning):
78
+
79
+ def __init__(self, position = None, message = ""):
80
+ self.position = position
81
+ Exception.__init__(self, format_position(position) + message)
82
+
83
+ class InternalError(Exception):
84
+ # If this is ever raised, there is a bug in the compiler.
85
+
86
+ def __init__(self, message):
87
+ self.message_only = message
88
+ Exception.__init__(self, "Internal compiler error: %s"
89
+ % message)
90
+
91
+ class AbortError(Exception):
92
+ # Throw this to stop the compilation immediately.
93
+
94
+ def __init__(self, message):
95
+ self.message_only = message
96
+ Exception.__init__(self, "Abort error: %s" % message)
97
+
98
+ class CompilerCrash(CompileError):
99
+ # raised when an unexpected exception occurs in a transform
100
+ def __init__(self, pos, context, message, cause, stacktrace=None):
101
+ if message:
102
+ message = '\n' + message
103
+ else:
104
+ message = '\n'
105
+ self.message_only = message
106
+ if context:
107
+ message = "Compiler crash in %s%s" % (context, message)
108
+ if stacktrace:
109
+ import traceback
110
+ message += (
111
+ '\n\nCompiler crash traceback from this point on:\n' +
112
+ ''.join(traceback.format_tb(stacktrace)))
113
+ if cause:
114
+ if not stacktrace:
115
+ message += '\n'
116
+ message += '%s: %s' % (cause.__class__.__name__, cause)
117
+ CompileError.__init__(self, pos, message)
118
+ # Python Exception subclass pickling is broken,
119
+ # see https://bugs.python.org/issue1692335
120
+ self.args = (pos, context, message, cause, stacktrace)
121
+
122
+ class NoElementTreeInstalledException(PyrexError):
123
+ """raised when the user enabled options.gdb_debug but no ElementTree
124
+ implementation was found
125
+ """
126
+
127
+ def open_listing_file(path, echo_to_stderr=True):
128
+ # Begin a new error listing. If path is None, no file
129
+ # is opened, the error counter is just reset.
130
+ if path is not None:
131
+ threadlocal.cython_errors_listing_file = open_new_file(path)
132
+ else:
133
+ threadlocal.cython_errors_listing_file = None
134
+ if echo_to_stderr:
135
+ threadlocal.cython_errors_echo_file = sys.stderr
136
+ else:
137
+ threadlocal.cython_errors_echo_file = None
138
+ threadlocal.cython_errors_count = 0
139
+
140
+ def close_listing_file():
141
+ if threadlocal.cython_errors_listing_file:
142
+ threadlocal.cython_errors_listing_file.close()
143
+ threadlocal.cython_errors_listing_file = None
144
+
145
+ def report_error(err, use_stack=True):
146
+ error_stack = threadlocal.cython_errors_stack
147
+ if error_stack and use_stack:
148
+ error_stack[-1].append(err)
149
+ else:
150
+ # See Main.py for why dual reporting occurs. Quick fix for now.
151
+ if err.reported: return
152
+ err.reported = True
153
+ try: line = "%s\n" % err
154
+ except UnicodeEncodeError:
155
+ # Python <= 2.5 does this for non-ASCII Unicode exceptions
156
+ line = format_error(getattr(err, 'message_only', "[unprintable exception message]"),
157
+ getattr(err, 'position', None)) + '\n'
158
+ listing_file = threadlocal.cython_errors_listing_file
159
+ if listing_file:
160
+ try: listing_file.write(line)
161
+ except UnicodeEncodeError:
162
+ listing_file.write(line.encode('ASCII', 'replace'))
163
+ echo_file = threadlocal.cython_errors_echo_file
164
+ if echo_file:
165
+ try: echo_file.write(line)
166
+ except UnicodeEncodeError:
167
+ echo_file.write(line.encode('ASCII', 'replace'))
168
+ threadlocal.cython_errors_count += 1
169
+ if Options.fast_fail:
170
+ raise AbortError("fatal errors")
171
+
172
+ def error(position, message):
173
+ #print("Errors.error:", repr(position), repr(message)) ###
174
+ if position is None:
175
+ raise InternalError(message)
176
+ err = CompileError(position, message)
177
+ if DebugFlags.debug_exception_on_error: raise Exception(err) # debug
178
+ report_error(err)
179
+ return err
180
+
181
+
182
+ LEVEL = 1 # warn about all errors level 1 or higher
183
+
184
+ def _write_file_encode(file, line):
185
+ try:
186
+ file.write(line)
187
+ except UnicodeEncodeError:
188
+ file.write(line.encode('ascii', 'replace'))
189
+
190
+
191
+ def performance_hint(position, message, env):
192
+ if not env.directives['show_performance_hints']:
193
+ return
194
+ warn = CompileWarning(position, message)
195
+ line = "performance hint: %s\n" % warn
196
+ listing_file = threadlocal.cython_errors_listing_file
197
+ if listing_file:
198
+ _write_file_encode(listing_file, line)
199
+ echo_file = threadlocal.cython_errors_echo_file
200
+ if echo_file:
201
+ _write_file_encode(echo_file, line)
202
+ return warn
203
+
204
+
205
+ def message(position, message, level=1):
206
+ if level < LEVEL:
207
+ return
208
+ warn = CompileWarning(position, message)
209
+ line = "note: %s\n" % warn
210
+ listing_file = threadlocal.cython_errors_listing_file
211
+ if listing_file:
212
+ _write_file_encode(listing_file, line)
213
+ echo_file = threadlocal.cython_errors_echo_file
214
+ if echo_file:
215
+ _write_file_encode(echo_file, line)
216
+ return warn
217
+
218
+
219
+ def warning(position, message, level=0):
220
+ if level < LEVEL:
221
+ return
222
+ if Options.warning_errors and position:
223
+ return error(position, message)
224
+ warn = CompileWarning(position, message)
225
+ line = "warning: %s\n" % warn
226
+ listing_file = threadlocal.cython_errors_listing_file
227
+ if listing_file:
228
+ _write_file_encode(listing_file, line)
229
+ echo_file = threadlocal.cython_errors_echo_file
230
+ if echo_file:
231
+ _write_file_encode(echo_file, line)
232
+ return warn
233
+
234
+
235
+ def warn_once(position, message, level=0):
236
+ if level < LEVEL:
237
+ return
238
+ warn_once_seen = threadlocal.cython_errors_warn_once_seen
239
+ if message in warn_once_seen:
240
+ return
241
+ warn = CompileWarning(position, message)
242
+ line = "warning: %s\n" % warn
243
+ listing_file = threadlocal.cython_errors_listing_file
244
+ if listing_file:
245
+ _write_file_encode(listing_file, line)
246
+ echo_file = threadlocal.cython_errors_echo_file
247
+ if echo_file:
248
+ _write_file_encode(echo_file, line)
249
+ warn_once_seen.add(message)
250
+ return warn
251
+
252
+
253
+ # These functions can be used to momentarily suppress errors.
254
+
255
+ def hold_errors():
256
+ errors = []
257
+ threadlocal.cython_errors_stack.append(errors)
258
+ return errors
259
+
260
+
261
+ def release_errors(ignore=False):
262
+ held_errors = threadlocal.cython_errors_stack.pop()
263
+ if not ignore:
264
+ for err in held_errors:
265
+ report_error(err)
266
+
267
+
268
+ def held_errors():
269
+ return threadlocal.cython_errors_stack[-1]
270
+
271
+
272
+ # same as context manager:
273
+
274
+ @contextmanager
275
+ def local_errors(ignore=False):
276
+ errors = hold_errors()
277
+ try:
278
+ yield errors
279
+ finally:
280
+ release_errors(ignore=ignore)
281
+
282
+
283
+ # Keep all global state in thread local storage to support parallel cythonisation in distutils.
284
+
285
+ def init_thread():
286
+ threadlocal.cython_errors_count = 0
287
+ threadlocal.cython_errors_listing_file = None
288
+ threadlocal.cython_errors_echo_file = None
289
+ threadlocal.cython_errors_warn_once_seen = set()
290
+ threadlocal.cython_errors_stack = []
291
+
292
+ def reset():
293
+ threadlocal.cython_errors_warn_once_seen.clear()
294
+ del threadlocal.cython_errors_stack[:]
295
+
296
+ def get_errors_count():
297
+ return threadlocal.cython_errors_count