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,404 @@
1
+ /*
2
+ These functions provide integer arithmetic with integer checking. They do not
3
+ actually raise an exception when an overflow is detected, but rather set a bit
4
+ in the overflow parameter. (This parameter may be reused across several
5
+ arithmetic operations, so should be or-ed rather than assigned to.)
6
+
7
+ The implementation is divided into two parts, the signed and unsigned basecases,
8
+ which is where the magic happens, and a generic template matching a specific
9
+ type to an implementation based on its (c-compile-time) size and signedness.
10
+
11
+ When possible, branching is avoided, and preference is given to speed over
12
+ accuracy (a low rate of falsely "detected" overflows are acceptable,
13
+ undetected overflows are not).
14
+
15
+
16
+ TODO: Hook up checking.
17
+ TODO: Conditionally support 128-bit with intmax_t?
18
+ */
19
+
20
+ /////////////// Common.proto ///////////////
21
+
22
+ static int __Pyx_check_twos_complement(void) {
23
+ if ((-1) != (~0)) {
24
+ PyErr_SetString(PyExc_RuntimeError, "Two's complement required for overflow checks.");
25
+ return 1;
26
+ } else if ((sizeof(short) == sizeof(int))) {
27
+ PyErr_SetString(PyExc_RuntimeError, "sizeof(short) < sizeof(int) required for overflow checks.");
28
+ return 1;
29
+ } else {
30
+ return 0;
31
+ }
32
+ }
33
+
34
+ #define __PYX_SIGN_BIT(type) ((((unsigned type) 1) << (sizeof(type) * 8 - 1)))
35
+ #define __PYX_HALF_MAX(type) ((((type) 1) << (sizeof(type) * 8 - 2)))
36
+ #define __PYX_MIN(type) ((__PYX_IS_UNSIGNED(type) ? (type) 0 : 0 - __PYX_HALF_MAX(type) - __PYX_HALF_MAX(type)))
37
+ #define __PYX_MAX(type) ((~__PYX_MIN(type)))
38
+
39
+ #define __Pyx_add_no_overflow(a, b, overflow) ((a) + (b))
40
+ #define __Pyx_add_const_no_overflow(a, b, overflow) ((a) + (b))
41
+ #define __Pyx_sub_no_overflow(a, b, overflow) ((a) - (b))
42
+ #define __Pyx_sub_const_no_overflow(a, b, overflow) ((a) - (b))
43
+ #define __Pyx_mul_no_overflow(a, b, overflow) ((a) * (b))
44
+ #define __Pyx_mul_const_no_overflow(a, b, overflow) ((a) * (b))
45
+ #define __Pyx_div_no_overflow(a, b, overflow) ((a) / (b))
46
+ #define __Pyx_div_const_no_overflow(a, b, overflow) ((a) / (b))
47
+
48
+ #if defined(__has_builtin)
49
+ # if __has_builtin(__builtin_add_overflow) && !defined(__ibmxl__)
50
+ # define __PYX_HAVE_BUILTIN_OVERFLOW
51
+ # endif
52
+ #elif defined(__GNUC__) && (__GNUC__ >= 5) && (!defined(__INTEL_COMPILER) || (__INTEL_COMPILER >= 1800))
53
+ # define __PYX_HAVE_BUILTIN_OVERFLOW
54
+ #endif
55
+
56
+ #if defined(__GNUC__)
57
+ # define __Pyx_is_constant(x) (__builtin_constant_p(x))
58
+ #elif defined(__has_builtin)
59
+ # if __has_builtin(__builtin_constant_p)
60
+ # define __Pyx_is_constant(x) (__builtin_constant_p(x))
61
+ # endif
62
+ #else
63
+ # define __Pyx_is_constant(x) (0)
64
+ #endif
65
+
66
+ /////////////// Common.init ///////////////
67
+
68
+ if (likely(__Pyx_check_twos_complement() == 0)); else
69
+ // error propagation code is appended automatically
70
+
71
+ /////////////// BaseCaseUnsigned.proto ///////////////
72
+
73
+ {{if UINT == "long long"}}#ifdef HAVE_LONG_LONG{{endif}}
74
+
75
+ static CYTHON_INLINE {{UINT}} __Pyx_add_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow);
76
+ static CYTHON_INLINE {{UINT}} __Pyx_sub_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow);
77
+ static CYTHON_INLINE {{UINT}} __Pyx_mul_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow);
78
+ static CYTHON_INLINE {{UINT}} __Pyx_div_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow);
79
+
80
+ // Use these when b is known at compile time.
81
+ #define __Pyx_add_const_{{NAME}}_checking_overflow __Pyx_add_{{NAME}}_checking_overflow
82
+ #define __Pyx_sub_const_{{NAME}}_checking_overflow __Pyx_sub_{{NAME}}_checking_overflow
83
+ #if defined(__PYX_HAVE_BUILTIN_OVERFLOW)
84
+ #define __Pyx_mul_const_{{NAME}}_checking_overflow __Pyx_mul_{{NAME}}_checking_overflow
85
+ #else
86
+ static CYTHON_INLINE {{UINT}} __Pyx_mul_const_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} constant, int *overflow);
87
+ #endif
88
+ #define __Pyx_div_const_{{NAME}}_checking_overflow __Pyx_div_{{NAME}}_checking_overflow
89
+
90
+ {{if UINT == "long long"}}#endif{{endif}}
91
+
92
+ /////////////// BaseCaseUnsigned ///////////////
93
+
94
+ {{if UINT == "long long"}}#ifdef HAVE_LONG_LONG{{endif}}
95
+
96
+ #if defined(__PYX_HAVE_BUILTIN_OVERFLOW)
97
+
98
+ static CYTHON_INLINE {{UINT}} __Pyx_add_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
99
+ {{UINT}} result;
100
+ *overflow |= __builtin_add_overflow(a, b, &result);
101
+ return result;
102
+ }
103
+
104
+ static CYTHON_INLINE {{UINT}} __Pyx_sub_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
105
+ {{UINT}} result;
106
+ *overflow |= __builtin_sub_overflow(a, b, &result);
107
+ return result;
108
+ }
109
+
110
+ static CYTHON_INLINE {{UINT}} __Pyx_mul_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
111
+ {{UINT}} result;
112
+ *overflow |= __builtin_mul_overflow(a, b, &result);
113
+ return result;
114
+ }
115
+
116
+ #else
117
+
118
+ static CYTHON_INLINE {{UINT}} __Pyx_add_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
119
+ {{UINT}} r = a + b;
120
+ *overflow |= r < a;
121
+ return r;
122
+ }
123
+
124
+ static CYTHON_INLINE {{UINT}} __Pyx_sub_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
125
+ {{UINT}} r = a - b;
126
+ *overflow |= r > a;
127
+ return r;
128
+ }
129
+
130
+ static CYTHON_INLINE {{UINT}} __Pyx_mul_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
131
+ // if we have a constant, use the constant version
132
+ if (__Pyx_is_constant(b)) {
133
+ return __Pyx_mul_const_{{NAME}}_checking_overflow(a, b, overflow);
134
+ } else if (__Pyx_is_constant(a)) {
135
+ return __Pyx_mul_const_{{NAME}}_checking_overflow(b, a, overflow);
136
+ } else if ((sizeof({{UINT}}) < sizeof(unsigned long))) {
137
+ unsigned long big_r = ((unsigned long) a) * ((unsigned long) b);
138
+ {{UINT}} r = ({{UINT}}) big_r;
139
+ *overflow |= big_r != r;
140
+ return r;
141
+ #ifdef HAVE_LONG_LONG
142
+ } else if ((sizeof({{UINT}}) < sizeof(unsigned PY_LONG_LONG))) {
143
+ unsigned PY_LONG_LONG big_r = ((unsigned PY_LONG_LONG) a) * ((unsigned PY_LONG_LONG) b);
144
+ {{UINT}} r = ({{UINT}}) big_r;
145
+ *overflow |= big_r != r;
146
+ return r;
147
+ #endif
148
+ } else {
149
+ return __Pyx_mul_const_{{NAME}}_checking_overflow(a, b, overflow);
150
+ }
151
+ }
152
+
153
+ static CYTHON_INLINE {{UINT}} __Pyx_mul_const_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
154
+ // note that deliberately the overflow check is written such that it divides by b; this
155
+ // function is used when b is a constant thus the compiler should be able to eliminate the
156
+ // (very slow on most CPUs!) division operation
157
+ {{UINT}} prod;
158
+ if (__Pyx_is_constant(a) && !__Pyx_is_constant(b)) {
159
+ // if a is a compile-time constant and b isn't, swap them
160
+ {{UINT}} temp = b;
161
+ b = a;
162
+ a = temp;
163
+ }
164
+ prod = a * b;
165
+ if (b != 0)
166
+ *overflow |= a > (__PYX_MAX({{UINT}}) / b);
167
+ return prod;
168
+ }
169
+ #endif // __PYX_HAVE_BUILTIN_OVERFLOW
170
+
171
+
172
+ static CYTHON_INLINE {{UINT}} __Pyx_div_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
173
+ if (b == 0) {
174
+ *overflow |= 1;
175
+ return 0;
176
+ }
177
+ return a / b;
178
+ }
179
+
180
+ {{if UINT == "long long"}}#endif{{endif}}
181
+
182
+
183
+ /////////////// BaseCaseSigned.proto ///////////////
184
+
185
+ {{if INT == "long long"}}#ifdef HAVE_LONG_LONG{{endif}}
186
+
187
+ static CYTHON_INLINE {{INT}} __Pyx_add_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow);
188
+ static CYTHON_INLINE {{INT}} __Pyx_sub_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow);
189
+ static CYTHON_INLINE {{INT}} __Pyx_mul_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow);
190
+ static CYTHON_INLINE {{INT}} __Pyx_div_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow);
191
+
192
+
193
+ // Use when b is known at compile time.
194
+ #define __Pyx_add_const_{{NAME}}_checking_overflow __Pyx_add_{{NAME}}_checking_overflow
195
+ #define __Pyx_sub_const_{{NAME}}_checking_overflow __Pyx_sub_{{NAME}}_checking_overflow
196
+ #if defined(__PYX_HAVE_BUILTIN_OVERFLOW)
197
+ #define __Pyx_mul_const_{{NAME}}_checking_overflow __Pyx_mul_{{NAME}}_checking_overflow
198
+ #else
199
+ static CYTHON_INLINE {{INT}} __Pyx_mul_const_{{NAME}}_checking_overflow({{INT}} a, {{INT}} constant, int *overflow);
200
+ #endif
201
+ #define __Pyx_div_const_{{NAME}}_checking_overflow __Pyx_div_{{NAME}}_checking_overflow
202
+
203
+ {{if INT == "long long"}}#endif{{endif}}
204
+
205
+ /////////////// BaseCaseSigned ///////////////
206
+
207
+ {{if INT == "long long"}}#ifdef HAVE_LONG_LONG{{endif}}
208
+
209
+ #if defined(__PYX_HAVE_BUILTIN_OVERFLOW)
210
+
211
+ static CYTHON_INLINE {{INT}} __Pyx_add_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
212
+ {{INT}} result;
213
+ *overflow |= __builtin_add_overflow(a, b, &result);
214
+ return result;
215
+ }
216
+
217
+ static CYTHON_INLINE {{INT}} __Pyx_sub_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
218
+ {{INT}} result;
219
+ *overflow |= __builtin_sub_overflow(a, b, &result);
220
+ return result;
221
+ }
222
+
223
+ static CYTHON_INLINE {{INT}} __Pyx_mul_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
224
+ {{INT}} result;
225
+ *overflow |= __builtin_mul_overflow(a, b, &result);
226
+ return result;
227
+ }
228
+
229
+ #else
230
+
231
+ static CYTHON_INLINE {{INT}} __Pyx_add_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
232
+ if ((sizeof({{INT}}) < sizeof(long))) {
233
+ long big_r = ((long) a) + ((long) b);
234
+ {{INT}} r = ({{INT}}) big_r;
235
+ *overflow |= big_r != r;
236
+ return r;
237
+ #ifdef HAVE_LONG_LONG
238
+ } else if ((sizeof({{INT}}) < sizeof(PY_LONG_LONG))) {
239
+ PY_LONG_LONG big_r = ((PY_LONG_LONG) a) + ((PY_LONG_LONG) b);
240
+ {{INT}} r = ({{INT}}) big_r;
241
+ *overflow |= big_r != r;
242
+ return r;
243
+ #endif
244
+ } else {
245
+ // Signed overflow undefined, but unsigned overflow is well defined. Casting is
246
+ // implementation-defined, but we assume two's complement (see __Pyx_check_twos_complement
247
+ // above), and arithmetic in two's-complement is the same as unsigned arithmetic.
248
+ unsigned {{INT}} r = (unsigned {{INT}}) a + (unsigned {{INT}}) b;
249
+ // Overflow happened if the operands have the same sign, but the result
250
+ // has opposite sign.
251
+ *overflow |= (((unsigned {{INT}})a ^ r) & ((unsigned {{INT}})b ^ r)) >> (8 * sizeof({{INT}}) - 1);
252
+ return ({{INT}}) r;
253
+ }
254
+ }
255
+
256
+ static CYTHON_INLINE {{INT}} __Pyx_sub_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
257
+ // Compilers don't handle widening as well in the subtraction case, so don't bother
258
+ unsigned {{INT}} r = (unsigned {{INT}}) a - (unsigned {{INT}}) b;
259
+ // Overflow happened if the operands differing signs, and the result
260
+ // has opposite sign to a.
261
+ *overflow |= (((unsigned {{INT}})a ^ (unsigned {{INT}})b) & ((unsigned {{INT}})a ^ r)) >> (8 * sizeof({{INT}}) - 1);
262
+ return ({{INT}}) r;
263
+ }
264
+
265
+ static CYTHON_INLINE {{INT}} __Pyx_mul_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
266
+ // if we have a constant, use the constant version
267
+ if (__Pyx_is_constant(b)) {
268
+ return __Pyx_mul_const_{{NAME}}_checking_overflow(a, b, overflow);
269
+ } else if (__Pyx_is_constant(a)) {
270
+ return __Pyx_mul_const_{{NAME}}_checking_overflow(b, a, overflow);
271
+ } else if ((sizeof({{INT}}) < sizeof(long))) {
272
+ long big_r = ((long) a) * ((long) b);
273
+ {{INT}} r = ({{INT}}) big_r;
274
+ *overflow |= big_r != r;
275
+ return ({{INT}}) r;
276
+ #ifdef HAVE_LONG_LONG
277
+ } else if ((sizeof({{INT}}) < sizeof(PY_LONG_LONG))) {
278
+ PY_LONG_LONG big_r = ((PY_LONG_LONG) a) * ((PY_LONG_LONG) b);
279
+ {{INT}} r = ({{INT}}) big_r;
280
+ *overflow |= big_r != r;
281
+ return ({{INT}}) r;
282
+ #endif
283
+ } else {
284
+ return __Pyx_mul_const_{{NAME}}_checking_overflow(a, b, overflow);
285
+ }
286
+ }
287
+
288
+ static CYTHON_INLINE {{INT}} __Pyx_mul_const_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
289
+ // note that deliberately all these comparisons are written such that they divide by b; this
290
+ // function is used when b is a constant thus the compiler should be able to eliminate the
291
+ // (very slow on most CPUs!) division operations
292
+ if (__Pyx_is_constant(a) && !__Pyx_is_constant(b)) {
293
+ // if a is a compile-time constant and b isn't, swap them
294
+ {{INT}} temp = b;
295
+ b = a;
296
+ a = temp;
297
+ }
298
+ if (b > 1) {
299
+ *overflow |= a > __PYX_MAX({{INT}}) / b;
300
+ *overflow |= a < __PYX_MIN({{INT}}) / b;
301
+ } else if (b == -1) {
302
+ *overflow |= a == __PYX_MIN({{INT}});
303
+ } else if (b < -1) {
304
+ *overflow |= a > __PYX_MIN({{INT}}) / b;
305
+ *overflow |= a < __PYX_MAX({{INT}}) / b;
306
+ }
307
+ return ({{INT}}) (((unsigned {{INT}})a) * ((unsigned {{INT}}) b));
308
+ }
309
+ #endif // defined(__PYX_HAVE_BUILTIN_OVERFLOW)
310
+
311
+ static CYTHON_INLINE {{INT}} __Pyx_div_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
312
+ if (b == 0) {
313
+ *overflow |= 1;
314
+ return 0;
315
+ }
316
+ *overflow |= a == __PYX_MIN({{INT}}) && b == -1;
317
+ return ({{INT}}) ((unsigned {{INT}}) a / (unsigned {{INT}}) b);
318
+ }
319
+
320
+ {{if INT == "long long"}}#endif{{endif}}
321
+
322
+
323
+ /////////////// SizeCheck.init ///////////////
324
+
325
+ if (likely(__Pyx_check_sane_{{NAME}}() == 0)); else
326
+ // error propagation code is appended automatically
327
+
328
+ /////////////// SizeCheck.proto ///////////////
329
+
330
+ static int __Pyx_check_sane_{{NAME}}(void) {
331
+ if (((sizeof({{TYPE}}) <= sizeof(int)) ||
332
+ #ifdef HAVE_LONG_LONG
333
+ (sizeof({{TYPE}}) == sizeof(PY_LONG_LONG)) ||
334
+ #endif
335
+ (sizeof({{TYPE}}) == sizeof(long)))) {
336
+ return 0;
337
+ } else {
338
+ PyErr_Format(PyExc_RuntimeError, \
339
+ "Bad size for int type %.{{max(60, len(TYPE))}}s: %d", "{{TYPE}}", (int) sizeof({{TYPE}}));
340
+ return 1;
341
+ }
342
+ }
343
+
344
+
345
+ /////////////// Binop.proto ///////////////
346
+
347
+ static CYTHON_INLINE {{TYPE}} __Pyx_{{BINOP}}_{{NAME}}_checking_overflow({{TYPE}} a, {{TYPE}} b, int *overflow);
348
+
349
+ /////////////// Binop ///////////////
350
+
351
+ static CYTHON_INLINE {{TYPE}} __Pyx_{{BINOP}}_{{NAME}}_checking_overflow({{TYPE}} a, {{TYPE}} b, int *overflow) {
352
+ if ((sizeof({{TYPE}}) < sizeof(int))) {
353
+ return __Pyx_{{BINOP}}_no_overflow(a, b, overflow);
354
+ } else if (__PYX_IS_UNSIGNED({{TYPE}})) {
355
+ if ((sizeof({{TYPE}}) == sizeof(unsigned int))) {
356
+ return ({{TYPE}}) __Pyx_{{BINOP}}_unsigned_int_checking_overflow(a, b, overflow);
357
+ } else if ((sizeof({{TYPE}}) == sizeof(unsigned long))) {
358
+ return ({{TYPE}}) __Pyx_{{BINOP}}_unsigned_long_checking_overflow(a, b, overflow);
359
+ #ifdef HAVE_LONG_LONG
360
+ } else if ((sizeof({{TYPE}}) == sizeof(unsigned PY_LONG_LONG))) {
361
+ return ({{TYPE}}) __Pyx_{{BINOP}}_unsigned_long_long_checking_overflow(a, b, overflow);
362
+ #endif
363
+ } else {
364
+ abort(); return 0; /* handled elsewhere */
365
+ }
366
+ } else {
367
+ if ((sizeof({{TYPE}}) == sizeof(int))) {
368
+ return ({{TYPE}}) __Pyx_{{BINOP}}_int_checking_overflow(a, b, overflow);
369
+ } else if ((sizeof({{TYPE}}) == sizeof(long))) {
370
+ return ({{TYPE}}) __Pyx_{{BINOP}}_long_checking_overflow(a, b, overflow);
371
+ #ifdef HAVE_LONG_LONG
372
+ } else if ((sizeof({{TYPE}}) == sizeof(PY_LONG_LONG))) {
373
+ return ({{TYPE}}) __Pyx_{{BINOP}}_long_long_checking_overflow(a, b, overflow);
374
+ #endif
375
+ } else {
376
+ abort(); return 0; /* handled elsewhere */
377
+ }
378
+ }
379
+ }
380
+
381
+ /////////////// LeftShift.proto ///////////////
382
+
383
+ static CYTHON_INLINE {{TYPE}} __Pyx_lshift_{{NAME}}_checking_overflow({{TYPE}} a, {{TYPE}} b, int *overflow) {
384
+ int overflow_check =
385
+ #if {{SIGNED}}
386
+ (a < 0) || (b < 0) ||
387
+ #endif
388
+ // the following must be a _logical_ OR as the RHS is undefined if the LHS is true
389
+ (b >= ({{TYPE}}) (8 * sizeof({{TYPE}}))) || (a > (__PYX_MAX({{TYPE}}) >> b));
390
+ if (overflow_check) {
391
+ *overflow |= 1;
392
+ return 0;
393
+ } else {
394
+ return a << b;
395
+ }
396
+ }
397
+ #define __Pyx_lshift_const_{{NAME}}_checking_overflow __Pyx_lshift_{{NAME}}_checking_overflow
398
+
399
+
400
+ /////////////// UnaryNegOverflows.proto ///////////////
401
+
402
+ // from intobject.c
403
+ #define __Pyx_UNARY_NEG_WOULD_OVERFLOW(x) \
404
+ (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x)))
@@ -0,0 +1,86 @@
1
+ ////////////////////// Print.proto //////////////////////
2
+
3
+ static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/
4
+
5
+ ////////////////////// Print.module_state_decls /////////////
6
+ //@substitute: naming
7
+ PyObject* $print_function;
8
+ PyObject* $print_function_kwargs;
9
+
10
+ ////////////////////// Print.cleanup //////////////////////
11
+
12
+ Py_CLEAR(NAMED_CGLOBAL(print_function));
13
+ Py_CLEAR(NAMED_CGLOBAL(print_function_kwargs));
14
+
15
+ ////////////////////// Print //////////////////////
16
+
17
+ static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
18
+ PyObject* kwargs = 0;
19
+ PyObject* result = 0;
20
+ PyObject* end_string;
21
+ if (unlikely(!NAMED_CGLOBAL(print_function))) {
22
+ NAMED_CGLOBAL(print_function) = PyObject_GetAttr(NAMED_CGLOBAL(builtins_cname), PYIDENT("print"));
23
+ if (!NAMED_CGLOBAL(print_function))
24
+ return -1;
25
+ }
26
+ if (stream) {
27
+ kwargs = PyDict_New();
28
+ if (unlikely(!kwargs))
29
+ return -1;
30
+ if (unlikely(PyDict_SetItem(kwargs, PYIDENT("file"), stream) < 0))
31
+ goto bad;
32
+ if (!newline) {
33
+ end_string = PyUnicode_FromStringAndSize(" ", 1);
34
+ if (unlikely(!end_string))
35
+ goto bad;
36
+ if (PyDict_SetItem(kwargs, PYIDENT("end"), end_string) < 0) {
37
+ Py_DECREF(end_string);
38
+ goto bad;
39
+ }
40
+ Py_DECREF(end_string);
41
+ }
42
+ } else if (!newline) {
43
+ if (unlikely(!NAMED_CGLOBAL(print_function_kwargs))) {
44
+ NAMED_CGLOBAL(print_function_kwargs) = PyDict_New();
45
+ if (unlikely(!NAMED_CGLOBAL(print_function_kwargs)))
46
+ return -1;
47
+ end_string = PyUnicode_FromStringAndSize(" ", 1);
48
+ if (unlikely(!end_string))
49
+ return -1;
50
+ if (PyDict_SetItem(NAMED_CGLOBAL(print_function_kwargs), PYIDENT("end"), end_string) < 0) {
51
+ Py_DECREF(end_string);
52
+ return -1;
53
+ }
54
+ Py_DECREF(end_string);
55
+ }
56
+ kwargs = NAMED_CGLOBAL(print_function_kwargs);
57
+ }
58
+ result = PyObject_Call(NAMED_CGLOBAL(print_function), arg_tuple, kwargs);
59
+ if (unlikely(kwargs) && (kwargs != NAMED_CGLOBAL(print_function_kwargs)))
60
+ Py_DECREF(kwargs);
61
+ if (!result)
62
+ return -1;
63
+ Py_DECREF(result);
64
+ return 0;
65
+ bad:
66
+ if (kwargs != NAMED_CGLOBAL(print_function_kwargs))
67
+ Py_XDECREF(kwargs);
68
+ return -1;
69
+ }
70
+
71
+ ////////////////////// PrintOne.proto //////////////////////
72
+ //@requires: Print
73
+
74
+ static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
75
+
76
+ ////////////////////// PrintOne //////////////////////
77
+
78
+ static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
79
+ int res;
80
+ PyObject* arg_tuple = PyTuple_Pack(1, o);
81
+ if (unlikely(!arg_tuple))
82
+ return -1;
83
+ res = __Pyx_Print(stream, arg_tuple, 1);
84
+ Py_DECREF(arg_tuple);
85
+ return res;
86
+ }