Nuitka-winsvc 2.7.7__cp313-cp313-win_amd64.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.

Potentially problematic release.


This version of Nuitka-winsvc might be problematic. Click here for more details.

Files changed (995) hide show
  1. nuitka/Builtins.py +259 -0
  2. nuitka/BytecodeCaching.py +184 -0
  3. nuitka/Bytecodes.py +109 -0
  4. nuitka/CacheCleanup.py +54 -0
  5. nuitka/Constants.py +425 -0
  6. nuitka/Errors.py +93 -0
  7. nuitka/HardImportRegistry.py +408 -0
  8. nuitka/MainControl.py +1201 -0
  9. nuitka/ModuleRegistry.py +364 -0
  10. nuitka/OptionParsing.py +2473 -0
  11. nuitka/Options.py +2948 -0
  12. nuitka/OutputDirectories.py +201 -0
  13. nuitka/PostProcessing.py +551 -0
  14. nuitka/Progress.py +252 -0
  15. nuitka/PythonFlavors.py +426 -0
  16. nuitka/PythonOperators.py +146 -0
  17. nuitka/PythonVersions.py +513 -0
  18. nuitka/Serialization.py +291 -0
  19. nuitka/SourceCodeReferences.py +176 -0
  20. nuitka/Tracing.py +579 -0
  21. nuitka/TreeXML.py +141 -0
  22. nuitka/Variables.py +515 -0
  23. nuitka/Version.py +88 -0
  24. nuitka/__init__.py +19 -0
  25. nuitka/__main__.py +224 -0
  26. nuitka/__past__.py +217 -0
  27. nuitka/build/Backend.scons +1111 -0
  28. nuitka/build/CCompilerVersion.scons +281 -0
  29. nuitka/build/DataComposerInterface.py +116 -0
  30. nuitka/build/Offsets.scons +626 -0
  31. nuitka/build/Onefile.scons +564 -0
  32. nuitka/build/SconsCaching.py +451 -0
  33. nuitka/build/SconsCompilerSettings.py +1133 -0
  34. nuitka/build/SconsHacks.py +215 -0
  35. nuitka/build/SconsInterface.py +664 -0
  36. nuitka/build/SconsProgress.py +100 -0
  37. nuitka/build/SconsSpawn.py +436 -0
  38. nuitka/build/SconsUtils.py +939 -0
  39. nuitka/build/__init__.py +19 -0
  40. nuitka/build/include/nuitka/allocator.h +450 -0
  41. nuitka/build/include/nuitka/builtins.h +97 -0
  42. nuitka/build/include/nuitka/calling.h +123 -0
  43. nuitka/build/include/nuitka/checkers.h +39 -0
  44. nuitka/build/include/nuitka/checksum_tools.h +28 -0
  45. nuitka/build/include/nuitka/compiled_asyncgen.h +281 -0
  46. nuitka/build/include/nuitka/compiled_cell.h +64 -0
  47. nuitka/build/include/nuitka/compiled_coroutine.h +271 -0
  48. nuitka/build/include/nuitka/compiled_frame.h +502 -0
  49. nuitka/build/include/nuitka/compiled_function.h +170 -0
  50. nuitka/build/include/nuitka/compiled_generator.h +287 -0
  51. nuitka/build/include/nuitka/compiled_method.h +54 -0
  52. nuitka/build/include/nuitka/constants.h +251 -0
  53. nuitka/build/include/nuitka/constants_blob.h +34 -0
  54. nuitka/build/include/nuitka/debug_settings.h +60 -0
  55. nuitka/build/include/nuitka/environment_variables.h +30 -0
  56. nuitka/build/include/nuitka/environment_variables_system.h +51 -0
  57. nuitka/build/include/nuitka/exception_groups.h +167 -0
  58. nuitka/build/include/nuitka/exceptions.h +1458 -0
  59. nuitka/build/include/nuitka/filesystem_paths.h +117 -0
  60. nuitka/build/include/nuitka/freelists.h +92 -0
  61. nuitka/build/include/nuitka/hedley.h +1774 -0
  62. nuitka/build/include/nuitka/helper/attributes.h +90 -0
  63. nuitka/build/include/nuitka/helper/boolean.h +86 -0
  64. nuitka/build/include/nuitka/helper/bytearrays.h +34 -0
  65. nuitka/build/include/nuitka/helper/bytes.h +28 -0
  66. nuitka/build/include/nuitka/helper/calling_generated.h +132 -0
  67. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  68. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  69. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  70. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_eq.h +247 -0
  74. nuitka/build/include/nuitka/helper/comparisons_ge.h +197 -0
  75. nuitka/build/include/nuitka/helper/comparisons_gt.h +197 -0
  76. nuitka/build/include/nuitka/helper/comparisons_le.h +247 -0
  77. nuitka/build/include/nuitka/helper/comparisons_lt.h +247 -0
  78. nuitka/build/include/nuitka/helper/comparisons_ne.h +197 -0
  79. nuitka/build/include/nuitka/helper/complex.h +46 -0
  80. nuitka/build/include/nuitka/helper/dictionaries.h +481 -0
  81. nuitka/build/include/nuitka/helper/floats.h +32 -0
  82. nuitka/build/include/nuitka/helper/import_hard.h +121 -0
  83. nuitka/build/include/nuitka/helper/indexes.h +47 -0
  84. nuitka/build/include/nuitka/helper/ints.h +165 -0
  85. nuitka/build/include/nuitka/helper/iterators.h +376 -0
  86. nuitka/build/include/nuitka/helper/lists.h +94 -0
  87. nuitka/build/include/nuitka/helper/lists_generated.h +36 -0
  88. nuitka/build/include/nuitka/helper/mappings.h +39 -0
  89. nuitka/build/include/nuitka/helper/operations.h +114 -0
  90. nuitka/build/include/nuitka/helper/operations_binary_add.h +240 -0
  91. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +108 -0
  92. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +108 -0
  93. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +108 -0
  94. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +103 -0
  95. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  96. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +103 -0
  97. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +99 -0
  98. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +60 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_mod.h +304 -0
  100. nuitka/build/include/nuitka/helper/operations_binary_mult.h +247 -0
  101. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +125 -0
  102. nuitka/build/include/nuitka/helper/operations_binary_pow.h +90 -0
  103. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +99 -0
  104. nuitka/build/include/nuitka/helper/operations_binary_sub.h +117 -0
  105. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +103 -0
  106. nuitka/build/include/nuitka/helper/operations_builtin_types.h +247 -0
  107. nuitka/build/include/nuitka/helper/operations_inplace_add.h +173 -0
  108. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +76 -0
  109. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +76 -0
  110. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +76 -0
  111. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +95 -0
  112. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +62 -0
  113. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +60 -0
  114. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +218 -0
  115. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +184 -0
  116. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +115 -0
  117. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +87 -0
  118. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +62 -0
  119. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +102 -0
  120. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +95 -0
  121. nuitka/build/include/nuitka/helper/raising.h +114 -0
  122. nuitka/build/include/nuitka/helper/rangeobjects.h +66 -0
  123. nuitka/build/include/nuitka/helper/richcomparisons.h +35 -0
  124. nuitka/build/include/nuitka/helper/sequences.h +33 -0
  125. nuitka/build/include/nuitka/helper/sets.h +25 -0
  126. nuitka/build/include/nuitka/helper/slices.h +314 -0
  127. nuitka/build/include/nuitka/helper/strings.h +30 -0
  128. nuitka/build/include/nuitka/helper/subscripts.h +390 -0
  129. nuitka/build/include/nuitka/helper/tuples.h +187 -0
  130. nuitka/build/include/nuitka/helpers.h +417 -0
  131. nuitka/build/include/nuitka/importing.h +149 -0
  132. nuitka/build/include/nuitka/incbin.h +402 -0
  133. nuitka/build/include/nuitka/jit_sources.h +25 -0
  134. nuitka/build/include/nuitka/prelude.h +626 -0
  135. nuitka/build/include/nuitka/printing.h +84 -0
  136. nuitka/build/include/nuitka/python_pgo.h +57 -0
  137. nuitka/build/include/nuitka/safe_string_ops.h +57 -0
  138. nuitka/build/include/nuitka/threading.h +142 -0
  139. nuitka/build/include/nuitka/tracing.h +82 -0
  140. nuitka/build/include/nuitka/type_aliases.h +30 -0
  141. nuitka/build/include/nuitka/unfreezing.h +91 -0
  142. nuitka/build/inline_copy/appdirs/LICENSE.txt +23 -0
  143. nuitka/build/inline_copy/appdirs/appdirs.py +611 -0
  144. nuitka/build/inline_copy/atomicwrites/LICENSE +19 -0
  145. nuitka/build/inline_copy/atomicwrites/atomicwrites.py +226 -0
  146. nuitka/build/inline_copy/bin/scons.py +58 -0
  147. nuitka/build/inline_copy/clcache/clcache/LICENSE +30 -0
  148. nuitka/build/inline_copy/clcache/clcache/__init__.py +4 -0
  149. nuitka/build/inline_copy/clcache/clcache/caching.py +2008 -0
  150. nuitka/build/inline_copy/colorama/LICENSE.txt +27 -0
  151. nuitka/build/inline_copy/colorama/colorama/__init__.py +6 -0
  152. nuitka/build/inline_copy/colorama/colorama/ansi.py +102 -0
  153. nuitka/build/inline_copy/colorama/colorama/ansitowin32.py +258 -0
  154. nuitka/build/inline_copy/colorama/colorama/initialise.py +80 -0
  155. nuitka/build/inline_copy/colorama/colorama/win32.py +152 -0
  156. nuitka/build/inline_copy/colorama/colorama/winterm.py +169 -0
  157. nuitka/build/inline_copy/glob2/LICENSE +27 -0
  158. nuitka/build/inline_copy/glob2/glob2/__init__.py +5 -0
  159. nuitka/build/inline_copy/glob2/glob2/compat.py +167 -0
  160. nuitka/build/inline_copy/glob2/glob2/fnmatch.py +141 -0
  161. nuitka/build/inline_copy/glob2/glob2/impl.py +216 -0
  162. nuitka/build/inline_copy/jinja2/LICENSE.rst +28 -0
  163. nuitka/build/inline_copy/jinja2/README.rst +2 -0
  164. nuitka/build/inline_copy/jinja2/jinja2/__init__.py +72 -0
  165. nuitka/build/inline_copy/jinja2/jinja2/_compat.py +105 -0
  166. nuitka/build/inline_copy/jinja2/jinja2/_identifier.py +2 -0
  167. nuitka/build/inline_copy/jinja2/jinja2/bccache.py +361 -0
  168. nuitka/build/inline_copy/jinja2/jinja2/compiler.py +1721 -0
  169. nuitka/build/inline_copy/jinja2/jinja2/constants.py +32 -0
  170. nuitka/build/inline_copy/jinja2/jinja2/debug.py +378 -0
  171. nuitka/build/inline_copy/jinja2/jinja2/defaults.py +56 -0
  172. nuitka/build/inline_copy/jinja2/jinja2/environment.py +1276 -0
  173. nuitka/build/inline_copy/jinja2/jinja2/exceptions.py +146 -0
  174. nuitka/build/inline_copy/jinja2/jinja2/ext.py +627 -0
  175. nuitka/build/inline_copy/jinja2/jinja2/filters.py +1190 -0
  176. nuitka/build/inline_copy/jinja2/jinja2/idtracking.py +286 -0
  177. nuitka/build/inline_copy/jinja2/jinja2/lexer.py +739 -0
  178. nuitka/build/inline_copy/jinja2/jinja2/loaders.py +483 -0
  179. nuitka/build/inline_copy/jinja2/jinja2/meta.py +106 -0
  180. nuitka/build/inline_copy/jinja2/jinja2/nativetypes.py +220 -0
  181. nuitka/build/inline_copy/jinja2/jinja2/nodes.py +999 -0
  182. nuitka/build/inline_copy/jinja2/jinja2/optimizer.py +49 -0
  183. nuitka/build/inline_copy/jinja2/jinja2/parser.py +903 -0
  184. nuitka/build/inline_copy/jinja2/jinja2/runtime.py +808 -0
  185. nuitka/build/inline_copy/jinja2/jinja2/sandbox.py +488 -0
  186. nuitka/build/inline_copy/jinja2/jinja2/tests.py +174 -0
  187. nuitka/build/inline_copy/jinja2/jinja2/utils.py +642 -0
  188. nuitka/build/inline_copy/jinja2/jinja2/visitor.py +87 -0
  189. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Action.py +1475 -0
  190. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Builder.py +905 -0
  191. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/CacheDir.py +314 -0
  192. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Conftest.py +805 -0
  193. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Debug.py +251 -0
  194. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Defaults.py +646 -0
  195. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Environment.py +2561 -0
  196. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/EnvironmentValues.py +119 -0
  197. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Errors.py +222 -0
  198. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Executor.py +660 -0
  199. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Job.py +439 -0
  200. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Memoize.py +242 -0
  201. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Alias.py +176 -0
  202. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/FS.py +3861 -0
  203. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Python.py +195 -0
  204. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/__init__.py +1784 -0
  205. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/PathList.py +224 -0
  206. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/__init__.py +341 -0
  207. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/aix.py +81 -0
  208. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/cygwin.py +61 -0
  209. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/darwin.py +70 -0
  210. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/hpux.py +45 -0
  211. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/irix.py +41 -0
  212. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/mingw.py +33 -0
  213. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/os2.py +55 -0
  214. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/posix.py +124 -0
  215. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/sunos.py +47 -0
  216. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/virtualenv.py +115 -0
  217. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/win32.py +429 -0
  218. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConf.py +1119 -0
  219. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConsign.py +453 -0
  220. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/C.py +226 -0
  221. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Dir.py +131 -0
  222. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Prog.py +114 -0
  223. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/RC.py +57 -0
  224. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/__init__.py +436 -0
  225. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Interactive.py +372 -0
  226. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Main.py +1469 -0
  227. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConsOptions.py +1071 -0
  228. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConscript.py +686 -0
  229. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/__init__.py +425 -0
  230. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Subst.py +979 -0
  231. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Taskmaster.py +1062 -0
  232. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/386asm.py +61 -0
  233. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/GettextCommon.py +429 -0
  234. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/__init__.py +52 -0
  235. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/arch.py +66 -0
  236. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/common.py +371 -0
  237. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/netframework.py +83 -0
  238. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/sdk.py +411 -0
  239. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vc.py +994 -0
  240. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vs.py +608 -0
  241. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/PharLapCommon.py +116 -0
  242. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/__init__.py +882 -0
  243. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixc++.py +43 -0
  244. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcc.py +74 -0
  245. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcxx.py +77 -0
  246. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixlink.py +78 -0
  247. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/applelink.py +209 -0
  248. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ar.py +63 -0
  249. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/as.py +49 -0
  250. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/asm.py +78 -0
  251. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/bcc32.py +81 -0
  252. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/c++.py +44 -0
  253. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cc.py +105 -0
  254. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clang.py +91 -0
  255. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangCommon/__init__.py +18 -0
  256. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangxx.py +99 -0
  257. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cxx.py +95 -0
  258. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cyglink.py +212 -0
  259. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/default.py +50 -0
  260. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/filesystem.py +98 -0
  261. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/g++.py +45 -0
  262. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gas.py +56 -0
  263. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gcc.py +110 -0
  264. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gettext_tool.py +69 -0
  265. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gnulink.py +70 -0
  266. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gxx.py +78 -0
  267. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpc++.py +45 -0
  268. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcc.py +53 -0
  269. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcxx.py +88 -0
  270. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hplink.py +72 -0
  271. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icc.py +59 -0
  272. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icl.py +52 -0
  273. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink.py +55 -0
  274. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink32.py +60 -0
  275. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/install.py +510 -0
  276. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/intelc.py +617 -0
  277. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/link.py +72 -0
  278. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/LoadableModule.py +131 -0
  279. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/SharedLibrary.py +218 -0
  280. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/__init__.py +171 -0
  281. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkloc.py +112 -0
  282. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/m4.py +63 -0
  283. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/masm.py +77 -0
  284. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mingw.py +232 -0
  285. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgfmt.py +132 -0
  286. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msginit.py +137 -0
  287. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgmerge.py +125 -0
  288. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslib.py +73 -0
  289. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslink.py +339 -0
  290. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mssdk.py +50 -0
  291. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvc.py +325 -0
  292. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvs.py +2116 -0
  293. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwcc.py +207 -0
  294. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwld.py +108 -0
  295. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/nasm.py +72 -0
  296. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rmic.py +139 -0
  297. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rpcgen.py +70 -0
  298. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgiar.py +68 -0
  299. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgic++.py +43 -0
  300. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicc.py +53 -0
  301. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicxx.py +61 -0
  302. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgilink.py +59 -0
  303. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunar.py +64 -0
  304. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunc++.py +45 -0
  305. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncc.py +58 -0
  306. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncxx.py +153 -0
  307. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunlink.py +79 -0
  308. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tar.py +73 -0
  309. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/textfile.py +198 -0
  310. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tlib.py +53 -0
  311. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/wix.py +104 -0
  312. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/xgettext.py +337 -0
  313. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/zip.py +120 -0
  314. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Util.py +2134 -0
  315. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/ConfigureCache.py +171 -0
  316. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/__init__.py +0 -0
  317. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/sconsign.py +494 -0
  318. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/BoolVariable.py +96 -0
  319. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/EnumVariable.py +110 -0
  320. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +152 -0
  321. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PackageVariable.py +107 -0
  322. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PathVariable.py +158 -0
  323. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/__init__.py +334 -0
  324. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Warnings.py +238 -0
  325. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/__init__.py +9 -0
  326. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/__init__.py +104 -0
  327. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/_scons_dbm.py +42 -0
  328. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/win32.py +101 -0
  329. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/cpp.py +640 -0
  330. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/dblite.py +295 -0
  331. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/exitfuncs.py +59 -0
  332. nuitka/build/inline_copy/markupsafe/LICENSE.rst +28 -0
  333. nuitka/build/inline_copy/markupsafe/markupsafe/__init__.py +327 -0
  334. nuitka/build/inline_copy/markupsafe/markupsafe/_compat.py +33 -0
  335. nuitka/build/inline_copy/markupsafe/markupsafe/_constants.py +264 -0
  336. nuitka/build/inline_copy/markupsafe/markupsafe/_native.py +69 -0
  337. nuitka/build/inline_copy/pefile/LICENSE.txt +21 -0
  338. nuitka/build/inline_copy/pefile/ordlookup/__init__.py +41 -0
  339. nuitka/build/inline_copy/pefile/ordlookup/oleaut32.py +400 -0
  340. nuitka/build/inline_copy/pefile/ordlookup/ws2_32.py +120 -0
  341. nuitka/build/inline_copy/pefile/pefile.py +8034 -0
  342. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +3272 -0
  343. nuitka/build/inline_copy/pkg_resources/pkg_resources/py31compat.py +21 -0
  344. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  345. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  346. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  347. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  348. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  349. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  350. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  351. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  352. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  353. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  354. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  355. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  356. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  357. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  358. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  359. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  360. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  361. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  362. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  363. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  364. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  365. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  366. nuitka/build/inline_copy/stubgen/six.py +998 -0
  367. nuitka/build/inline_copy/stubgen/stubgen.py +484 -0
  368. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +40 -0
  369. nuitka/build/inline_copy/tqdm/tqdm/_main.py +9 -0
  370. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +97 -0
  371. nuitka/build/inline_copy/tqdm/tqdm/_tqdm.py +9 -0
  372. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_notebook.py +9 -0
  373. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_pandas.py +24 -0
  374. nuitka/build/inline_copy/tqdm/tqdm/_utils.py +12 -0
  375. nuitka/build/inline_copy/tqdm/tqdm/auto.py +44 -0
  376. nuitka/build/inline_copy/tqdm/tqdm/autonotebook.py +28 -0
  377. nuitka/build/inline_copy/tqdm/tqdm/dask.py +46 -0
  378. nuitka/build/inline_copy/tqdm/tqdm/notebook.py +316 -0
  379. nuitka/build/inline_copy/tqdm/tqdm/std.py +1524 -0
  380. nuitka/build/inline_copy/tqdm/tqdm/tk.py +207 -0
  381. nuitka/build/inline_copy/tqdm/tqdm/utils.py +351 -0
  382. nuitka/build/inline_copy/tqdm/tqdm/version.py +2 -0
  383. nuitka/build/inline_copy/yaml/LICENSE +20 -0
  384. nuitka/build/inline_copy/yaml/yaml/__init__.py +427 -0
  385. nuitka/build/inline_copy/yaml/yaml/composer.py +139 -0
  386. nuitka/build/inline_copy/yaml/yaml/constructor.py +748 -0
  387. nuitka/build/inline_copy/yaml/yaml/cyaml.py +101 -0
  388. nuitka/build/inline_copy/yaml/yaml/dumper.py +62 -0
  389. nuitka/build/inline_copy/yaml/yaml/emitter.py +1137 -0
  390. nuitka/build/inline_copy/yaml/yaml/error.py +75 -0
  391. nuitka/build/inline_copy/yaml/yaml/events.py +86 -0
  392. nuitka/build/inline_copy/yaml/yaml/loader.py +63 -0
  393. nuitka/build/inline_copy/yaml/yaml/nodes.py +49 -0
  394. nuitka/build/inline_copy/yaml/yaml/parser.py +589 -0
  395. nuitka/build/inline_copy/yaml/yaml/reader.py +185 -0
  396. nuitka/build/inline_copy/yaml/yaml/representer.py +389 -0
  397. nuitka/build/inline_copy/yaml/yaml/resolver.py +227 -0
  398. nuitka/build/inline_copy/yaml/yaml/scanner.py +1435 -0
  399. nuitka/build/inline_copy/yaml/yaml/serializer.py +111 -0
  400. nuitka/build/inline_copy/yaml/yaml/tokens.py +104 -0
  401. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  402. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  403. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  404. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  405. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  406. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  407. nuitka/build/inline_copy/zstd/LICENSE.txt +30 -0
  408. nuitka/build/inline_copy/zstd/common/bitstream.h +463 -0
  409. nuitka/build/inline_copy/zstd/common/compiler.h +288 -0
  410. nuitka/build/inline_copy/zstd/common/cpu.h +213 -0
  411. nuitka/build/inline_copy/zstd/common/debug.h +107 -0
  412. nuitka/build/inline_copy/zstd/common/entropy_common.c +360 -0
  413. nuitka/build/inline_copy/zstd/common/error_private.c +56 -0
  414. nuitka/build/inline_copy/zstd/common/error_private.h +80 -0
  415. nuitka/build/inline_copy/zstd/common/fse.h +715 -0
  416. nuitka/build/inline_copy/zstd/common/fse_decompress.c +393 -0
  417. nuitka/build/inline_copy/zstd/common/huf.h +361 -0
  418. nuitka/build/inline_copy/zstd/common/mem.h +426 -0
  419. nuitka/build/inline_copy/zstd/common/xxhash.c +826 -0
  420. nuitka/build/inline_copy/zstd/common/xxhash.h +285 -0
  421. nuitka/build/inline_copy/zstd/common/zstd_common.c +83 -0
  422. nuitka/build/inline_copy/zstd/common/zstd_deps.h +111 -0
  423. nuitka/build/inline_copy/zstd/common/zstd_errors.h +95 -0
  424. nuitka/build/inline_copy/zstd/common/zstd_internal.h +478 -0
  425. nuitka/build/inline_copy/zstd/decompress/huf_decompress.c +1350 -0
  426. nuitka/build/inline_copy/zstd/decompress/zstd_ddict.c +244 -0
  427. nuitka/build/inline_copy/zstd/decompress/zstd_ddict.h +44 -0
  428. nuitka/build/inline_copy/zstd/decompress/zstd_decompress.c +1930 -0
  429. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.c +1540 -0
  430. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.h +62 -0
  431. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_internal.h +190 -0
  432. nuitka/build/inline_copy/zstd/zstd.h +2391 -0
  433. nuitka/build/static_src/CompiledAsyncgenType.c +2211 -0
  434. nuitka/build/static_src/CompiledCellType.c +300 -0
  435. nuitka/build/static_src/CompiledCodeHelpers.c +2160 -0
  436. nuitka/build/static_src/CompiledCoroutineType.c +1946 -0
  437. nuitka/build/static_src/CompiledFrameType.c +1337 -0
  438. nuitka/build/static_src/CompiledFunctionType.c +3320 -0
  439. nuitka/build/static_src/CompiledGeneratorType.c +1997 -0
  440. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +2117 -0
  441. nuitka/build/static_src/CompiledMethodType.c +614 -0
  442. nuitka/build/static_src/GenerateHeadersMain.c +30 -0
  443. nuitka/build/static_src/HelpersAllocator.c +939 -0
  444. nuitka/build/static_src/HelpersAttributes.c +1241 -0
  445. nuitka/build/static_src/HelpersBuiltin.c +901 -0
  446. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +3594 -0
  447. nuitka/build/static_src/HelpersBytes.c +107 -0
  448. nuitka/build/static_src/HelpersCalling.c +397 -0
  449. nuitka/build/static_src/HelpersCallingGenerated.c +14361 -0
  450. nuitka/build/static_src/HelpersChecksumTools.c +59 -0
  451. nuitka/build/static_src/HelpersClasses.c +91 -0
  452. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  453. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  454. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  455. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  456. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  457. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  458. nuitka/build/static_src/HelpersComparisonEq.c +12070 -0
  459. nuitka/build/static_src/HelpersComparisonEqUtils.c +169 -0
  460. nuitka/build/static_src/HelpersComparisonGe.c +11871 -0
  461. nuitka/build/static_src/HelpersComparisonGt.c +11855 -0
  462. nuitka/build/static_src/HelpersComparisonLe.c +11957 -0
  463. nuitka/build/static_src/HelpersComparisonLt.c +11941 -0
  464. nuitka/build/static_src/HelpersComparisonNe.c +11979 -0
  465. nuitka/build/static_src/HelpersConsole.c +124 -0
  466. nuitka/build/static_src/HelpersConstantsBlob.c +1487 -0
  467. nuitka/build/static_src/HelpersDeepcopy.c +636 -0
  468. nuitka/build/static_src/HelpersDictionaries.c +1739 -0
  469. nuitka/build/static_src/HelpersDictionariesGenerated.c +738 -0
  470. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  471. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  472. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +97 -0
  473. nuitka/build/static_src/HelpersExceptions.c +298 -0
  474. nuitka/build/static_src/HelpersFiles.c +353 -0
  475. nuitka/build/static_src/HelpersFilesystemPaths.c +1322 -0
  476. nuitka/build/static_src/HelpersFloats.c +92 -0
  477. nuitka/build/static_src/HelpersHeapStorage.c +68 -0
  478. nuitka/build/static_src/HelpersImport.c +506 -0
  479. nuitka/build/static_src/HelpersImportHard.c +526 -0
  480. nuitka/build/static_src/HelpersJitSources.c +48 -0
  481. nuitka/build/static_src/HelpersLists.c +899 -0
  482. nuitka/build/static_src/HelpersListsGenerated.c +564 -0
  483. nuitka/build/static_src/HelpersMappings.c +46 -0
  484. nuitka/build/static_src/HelpersMatching.c +192 -0
  485. nuitka/build/static_src/HelpersOperationBinaryAdd.c +6477 -0
  486. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +703 -0
  487. nuitka/build/static_src/HelpersOperationBinaryBitand.c +2738 -0
  488. nuitka/build/static_src/HelpersOperationBinaryBitor.c +2738 -0
  489. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +2738 -0
  490. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +2406 -0
  491. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +33 -0
  492. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  493. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +2422 -0
  494. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +220 -0
  495. nuitka/build/static_src/HelpersOperationBinaryLshift.c +2846 -0
  496. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +453 -0
  497. nuitka/build/static_src/HelpersOperationBinaryMod.c +6549 -0
  498. nuitka/build/static_src/HelpersOperationBinaryMult.c +6438 -0
  499. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +125 -0
  500. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +2355 -0
  501. nuitka/build/static_src/HelpersOperationBinaryPow.c +2743 -0
  502. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +26 -0
  503. nuitka/build/static_src/HelpersOperationBinaryRshift.c +2706 -0
  504. nuitka/build/static_src/HelpersOperationBinarySub.c +2649 -0
  505. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +2415 -0
  506. nuitka/build/static_src/HelpersOperationInplaceAdd.c +5211 -0
  507. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +144 -0
  508. nuitka/build/static_src/HelpersOperationInplaceBitand.c +1826 -0
  509. nuitka/build/static_src/HelpersOperationInplaceBitor.c +1826 -0
  510. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +1826 -0
  511. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +2605 -0
  512. nuitka/build/static_src/HelpersOperationInplaceLshift.c +1594 -0
  513. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +603 -0
  514. nuitka/build/static_src/HelpersOperationInplaceMod.c +4762 -0
  515. nuitka/build/static_src/HelpersOperationInplaceMult.c +4689 -0
  516. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +2553 -0
  517. nuitka/build/static_src/HelpersOperationInplacePow.c +2807 -0
  518. nuitka/build/static_src/HelpersOperationInplaceRshift.c +1534 -0
  519. nuitka/build/static_src/HelpersOperationInplaceSub.c +2894 -0
  520. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +2612 -0
  521. nuitka/build/static_src/HelpersProfiling.c +104 -0
  522. nuitka/build/static_src/HelpersPythonPgo.c +113 -0
  523. nuitka/build/static_src/HelpersRaising.c +447 -0
  524. nuitka/build/static_src/HelpersSafeStrings.c +185 -0
  525. nuitka/build/static_src/HelpersSequences.c +134 -0
  526. nuitka/build/static_src/HelpersSlices.c +73 -0
  527. nuitka/build/static_src/HelpersStrings.c +998 -0
  528. nuitka/build/static_src/HelpersTuples.c +148 -0
  529. nuitka/build/static_src/HelpersTypes.c +329 -0
  530. nuitka/build/static_src/InspectPatcher.c +439 -0
  531. nuitka/build/static_src/MainProgram.c +2060 -0
  532. nuitka/build/static_src/MetaPathBasedLoader.c +2290 -0
  533. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +125 -0
  534. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +158 -0
  535. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +785 -0
  536. nuitka/build/static_src/OnefileBootstrap.c +1580 -0
  537. nuitka/build/static_src/OnefileSplashScreen.cpp +275 -0
  538. nuitka/code_generation/AsyncgenCodes.py +186 -0
  539. nuitka/code_generation/AttributeCodes.py +357 -0
  540. nuitka/code_generation/BinaryOperationHelperDefinitions.py +720 -0
  541. nuitka/code_generation/BranchCodes.py +67 -0
  542. nuitka/code_generation/BuiltinCodes.py +529 -0
  543. nuitka/code_generation/CallCodes.py +1186 -0
  544. nuitka/code_generation/ClassCodes.py +156 -0
  545. nuitka/code_generation/CodeGeneration.py +1078 -0
  546. nuitka/code_generation/CodeHelperSelection.py +81 -0
  547. nuitka/code_generation/CodeHelpers.py +455 -0
  548. nuitka/code_generation/CodeObjectCodes.py +165 -0
  549. nuitka/code_generation/ComparisonCodes.py +569 -0
  550. nuitka/code_generation/ComparisonHelperDefinitions.py +146 -0
  551. nuitka/code_generation/ConditionalCodes.py +236 -0
  552. nuitka/code_generation/ConstantCodes.py +243 -0
  553. nuitka/code_generation/Contexts.py +1248 -0
  554. nuitka/code_generation/CoroutineCodes.py +253 -0
  555. nuitka/code_generation/CtypesCodes.py +46 -0
  556. nuitka/code_generation/DictCodes.py +918 -0
  557. nuitka/code_generation/Emission.py +75 -0
  558. nuitka/code_generation/ErrorCodes.py +281 -0
  559. nuitka/code_generation/EvalCodes.py +444 -0
  560. nuitka/code_generation/ExceptionCodes.py +337 -0
  561. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +227 -0
  562. nuitka/code_generation/ExpressionCodes.py +61 -0
  563. nuitka/code_generation/FrameCodes.py +518 -0
  564. nuitka/code_generation/FunctionCodes.py +858 -0
  565. nuitka/code_generation/GeneratorCodes.py +218 -0
  566. nuitka/code_generation/GlobalConstants.py +249 -0
  567. nuitka/code_generation/GlobalsLocalsCodes.py +211 -0
  568. nuitka/code_generation/IdCodes.py +53 -0
  569. nuitka/code_generation/ImportCodes.py +468 -0
  570. nuitka/code_generation/Indentation.py +45 -0
  571. nuitka/code_generation/IndexCodes.py +50 -0
  572. nuitka/code_generation/InjectCCodes.py +28 -0
  573. nuitka/code_generation/IntegerCodes.py +110 -0
  574. nuitka/code_generation/IteratorCodes.py +378 -0
  575. nuitka/code_generation/JitCodes.py +44 -0
  576. nuitka/code_generation/LabelCodes.py +68 -0
  577. nuitka/code_generation/LineNumberCodes.py +91 -0
  578. nuitka/code_generation/ListCodes.py +502 -0
  579. nuitka/code_generation/LoaderCodes.py +193 -0
  580. nuitka/code_generation/LocalsDictCodes.py +359 -0
  581. nuitka/code_generation/LoopCodes.py +88 -0
  582. nuitka/code_generation/MatchCodes.py +67 -0
  583. nuitka/code_generation/ModuleCodes.py +247 -0
  584. nuitka/code_generation/Namify.py +260 -0
  585. nuitka/code_generation/NetworkxCodes.py +51 -0
  586. nuitka/code_generation/OperationCodes.py +398 -0
  587. nuitka/code_generation/PackageResourceCodes.py +986 -0
  588. nuitka/code_generation/PrintCodes.py +93 -0
  589. nuitka/code_generation/PythonAPICodes.py +215 -0
  590. nuitka/code_generation/RaisingCodes.py +481 -0
  591. nuitka/code_generation/Reports.py +115 -0
  592. nuitka/code_generation/ReturnCodes.py +143 -0
  593. nuitka/code_generation/SetCodes.py +196 -0
  594. nuitka/code_generation/SliceCodes.py +465 -0
  595. nuitka/code_generation/StringCodes.py +303 -0
  596. nuitka/code_generation/SubscriptCodes.py +263 -0
  597. nuitka/code_generation/TensorflowCodes.py +54 -0
  598. nuitka/code_generation/TryCodes.py +326 -0
  599. nuitka/code_generation/TupleCodes.py +115 -0
  600. nuitka/code_generation/TypeAliasCodes.py +120 -0
  601. nuitka/code_generation/VariableCodes.py +519 -0
  602. nuitka/code_generation/VariableDeclarations.py +279 -0
  603. nuitka/code_generation/YieldCodes.py +253 -0
  604. nuitka/code_generation/__init__.py +19 -0
  605. nuitka/code_generation/c_types/CTypeBases.py +177 -0
  606. nuitka/code_generation/c_types/CTypeBooleans.py +104 -0
  607. nuitka/code_generation/c_types/CTypeCFloats.py +57 -0
  608. nuitka/code_generation/c_types/CTypeCLongs.py +45 -0
  609. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +109 -0
  610. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +150 -0
  611. nuitka/code_generation/c_types/CTypeNuitkaInts.py +200 -0
  612. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +107 -0
  613. nuitka/code_generation/c_types/CTypePyObjectPointers.py +572 -0
  614. nuitka/code_generation/c_types/CTypeVoids.py +92 -0
  615. nuitka/code_generation/c_types/__init__.py +19 -0
  616. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +106 -0
  617. nuitka/code_generation/templates/CodeTemplatesConstants.py +296 -0
  618. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +109 -0
  619. nuitka/code_generation/templates/CodeTemplatesExceptions.py +84 -0
  620. nuitka/code_generation/templates/CodeTemplatesFrames.py +235 -0
  621. nuitka/code_generation/templates/CodeTemplatesFunction.py +117 -0
  622. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +130 -0
  623. nuitka/code_generation/templates/CodeTemplatesIterators.py +40 -0
  624. nuitka/code_generation/templates/CodeTemplatesLoader.py +180 -0
  625. nuitka/code_generation/templates/CodeTemplatesModules.py +710 -0
  626. nuitka/code_generation/templates/CodeTemplatesVariables.py +388 -0
  627. nuitka/code_generation/templates/TemplateDebugWrapper.py +80 -0
  628. nuitka/code_generation/templates/__init__.py +19 -0
  629. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +321 -0
  630. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +143 -0
  631. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +677 -0
  632. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +165 -0
  633. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +38 -0
  634. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +41 -0
  635. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +53 -0
  636. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +364 -0
  637. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +37 -0
  638. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +53 -0
  639. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +20 -0
  640. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +148 -0
  641. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  642. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +352 -0
  643. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +115 -0
  644. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  645. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +31 -0
  646. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +32 -0
  647. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +112 -0
  648. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +157 -0
  649. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +115 -0
  650. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +99 -0
  651. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +115 -0
  652. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +281 -0
  653. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +420 -0
  654. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +51 -0
  655. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +71 -0
  656. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +327 -0
  657. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +411 -0
  658. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +59 -0
  659. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +229 -0
  660. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +47 -0
  661. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +55 -0
  662. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +58 -0
  663. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +62 -0
  664. nuitka/containers/Namedtuples.py +51 -0
  665. nuitka/containers/OrderedDicts.py +191 -0
  666. nuitka/containers/OrderedSets.py +123 -0
  667. nuitka/containers/OrderedSetsFallback.py +139 -0
  668. nuitka/containers/__init__.py +19 -0
  669. nuitka/distutils/Build.py +76 -0
  670. nuitka/distutils/DistutilCommands.py +438 -0
  671. nuitka/distutils/__init__.py +19 -0
  672. nuitka/finalizations/Finalization.py +35 -0
  673. nuitka/finalizations/FinalizeMarkups.py +136 -0
  674. nuitka/finalizations/__init__.py +19 -0
  675. nuitka/freezer/DependsExe.py +257 -0
  676. nuitka/freezer/DllDependenciesCommon.py +97 -0
  677. nuitka/freezer/DllDependenciesMacOS.py +444 -0
  678. nuitka/freezer/DllDependenciesPosix.py +242 -0
  679. nuitka/freezer/DllDependenciesWin32.py +315 -0
  680. nuitka/freezer/ImportDetection.py +359 -0
  681. nuitka/freezer/IncludedDataFiles.py +689 -0
  682. nuitka/freezer/IncludedEntryPoints.py +376 -0
  683. nuitka/freezer/Onefile.py +296 -0
  684. nuitka/freezer/Standalone.py +520 -0
  685. nuitka/freezer/__init__.py +19 -0
  686. nuitka/importing/IgnoreListing.py +449 -0
  687. nuitka/importing/ImportCache.py +95 -0
  688. nuitka/importing/ImportResolving.py +186 -0
  689. nuitka/importing/Importing.py +1200 -0
  690. nuitka/importing/PreloadedPackages.py +164 -0
  691. nuitka/importing/Recursion.py +611 -0
  692. nuitka/importing/StandardLibrary.py +429 -0
  693. nuitka/importing/__init__.py +19 -0
  694. nuitka/nodes/AsyncgenNodes.py +107 -0
  695. nuitka/nodes/AttributeLookupNodes.py +124 -0
  696. nuitka/nodes/AttributeNodes.py +386 -0
  697. nuitka/nodes/AttributeNodesGenerated.py +10734 -0
  698. nuitka/nodes/BuiltinAllNodes.py +115 -0
  699. nuitka/nodes/BuiltinAnyNodes.py +124 -0
  700. nuitka/nodes/BuiltinComplexNodes.py +83 -0
  701. nuitka/nodes/BuiltinDecodingNodes.py +52 -0
  702. nuitka/nodes/BuiltinDecoratorNodes.py +85 -0
  703. nuitka/nodes/BuiltinDictNodes.py +140 -0
  704. nuitka/nodes/BuiltinFormatNodes.py +159 -0
  705. nuitka/nodes/BuiltinHashNodes.py +63 -0
  706. nuitka/nodes/BuiltinInputNodes.py +39 -0
  707. nuitka/nodes/BuiltinIntegerNodes.py +170 -0
  708. nuitka/nodes/BuiltinIteratorNodes.py +391 -0
  709. nuitka/nodes/BuiltinLenNodes.py +61 -0
  710. nuitka/nodes/BuiltinNextNodes.py +111 -0
  711. nuitka/nodes/BuiltinOpenNodes.py +148 -0
  712. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +7367 -0
  713. nuitka/nodes/BuiltinRangeNodes.py +690 -0
  714. nuitka/nodes/BuiltinRefNodes.py +314 -0
  715. nuitka/nodes/BuiltinSumNodes.py +104 -0
  716. nuitka/nodes/BuiltinTypeNodes.py +454 -0
  717. nuitka/nodes/BuiltinVarsNodes.py +44 -0
  718. nuitka/nodes/BytesNodes.py +829 -0
  719. nuitka/nodes/CallNodes.py +217 -0
  720. nuitka/nodes/Checkers.py +55 -0
  721. nuitka/nodes/ChildrenHavingMixins.py +21576 -0
  722. nuitka/nodes/ClassNodes.py +286 -0
  723. nuitka/nodes/CodeObjectSpecs.py +230 -0
  724. nuitka/nodes/ComparisonNodes.py +687 -0
  725. nuitka/nodes/ConditionalNodes.py +884 -0
  726. nuitka/nodes/ConstantRefNodes.py +1717 -0
  727. nuitka/nodes/ContainerMakingNodes.py +408 -0
  728. nuitka/nodes/ContainerOperationNodes.py +87 -0
  729. nuitka/nodes/CoroutineNodes.py +144 -0
  730. nuitka/nodes/CtypesNodes.py +51 -0
  731. nuitka/nodes/DictionaryNodes.py +1513 -0
  732. nuitka/nodes/ExceptionNodes.py +393 -0
  733. nuitka/nodes/ExecEvalNodes.py +229 -0
  734. nuitka/nodes/ExpressionBases.py +1301 -0
  735. nuitka/nodes/ExpressionBasesGenerated.py +2103 -0
  736. nuitka/nodes/ExpressionShapeMixins.py +886 -0
  737. nuitka/nodes/FrameNodes.py +413 -0
  738. nuitka/nodes/FunctionAttributeNodes.py +102 -0
  739. nuitka/nodes/FunctionNodes.py +1303 -0
  740. nuitka/nodes/FutureSpecs.py +224 -0
  741. nuitka/nodes/GeneratorNodes.py +201 -0
  742. nuitka/nodes/GlobalsLocalsNodes.py +209 -0
  743. nuitka/nodes/HardImportNodesGenerated.py +3599 -0
  744. nuitka/nodes/ImportHardNodes.py +185 -0
  745. nuitka/nodes/ImportNodes.py +1366 -0
  746. nuitka/nodes/IndicatorMixins.py +79 -0
  747. nuitka/nodes/InjectCNodes.py +51 -0
  748. nuitka/nodes/IterationHandles.py +407 -0
  749. nuitka/nodes/KeyValuePairNodes.py +378 -0
  750. nuitka/nodes/ListOperationNodes.py +525 -0
  751. nuitka/nodes/LocalsDictNodes.py +717 -0
  752. nuitka/nodes/LocalsScopes.py +505 -0
  753. nuitka/nodes/LoopNodes.py +445 -0
  754. nuitka/nodes/MatchNodes.py +60 -0
  755. nuitka/nodes/ModuleAttributeNodes.py +180 -0
  756. nuitka/nodes/ModuleNodes.py +1137 -0
  757. nuitka/nodes/NetworkxNodes.py +45 -0
  758. nuitka/nodes/NodeBases.py +890 -0
  759. nuitka/nodes/NodeMakingHelpers.py +481 -0
  760. nuitka/nodes/NodeMetaClasses.py +172 -0
  761. nuitka/nodes/OperatorNodes.py +944 -0
  762. nuitka/nodes/OperatorNodesUnary.py +403 -0
  763. nuitka/nodes/OsSysNodes.py +215 -0
  764. nuitka/nodes/OutlineNodes.py +372 -0
  765. nuitka/nodes/PackageMetadataNodes.py +982 -0
  766. nuitka/nodes/PackageResourceNodes.py +424 -0
  767. nuitka/nodes/PrintNodes.py +105 -0
  768. nuitka/nodes/ReturnNodes.py +255 -0
  769. nuitka/nodes/SideEffectNodes.py +139 -0
  770. nuitka/nodes/SliceNodes.py +386 -0
  771. nuitka/nodes/StatementBasesGenerated.py +3419 -0
  772. nuitka/nodes/StatementNodes.py +316 -0
  773. nuitka/nodes/StrNodes.py +919 -0
  774. nuitka/nodes/StringConcatenationNodes.py +103 -0
  775. nuitka/nodes/SubscriptNodes.py +245 -0
  776. nuitka/nodes/TensorflowNodes.py +38 -0
  777. nuitka/nodes/TryNodes.py +519 -0
  778. nuitka/nodes/TypeMatchNodes.py +65 -0
  779. nuitka/nodes/TypeNodes.py +390 -0
  780. nuitka/nodes/VariableAssignNodes.py +1177 -0
  781. nuitka/nodes/VariableDelNodes.py +320 -0
  782. nuitka/nodes/VariableNameNodes.py +153 -0
  783. nuitka/nodes/VariableRefNodes.py +895 -0
  784. nuitka/nodes/VariableReleaseNodes.py +153 -0
  785. nuitka/nodes/YieldNodes.py +121 -0
  786. nuitka/nodes/__init__.py +19 -0
  787. nuitka/nodes/shapes/BuiltinTypeShapes.py +4290 -0
  788. nuitka/nodes/shapes/ControlFlowDescriptions.py +199 -0
  789. nuitka/nodes/shapes/IteratorShapes.py +71 -0
  790. nuitka/nodes/shapes/ShapeMixins.py +255 -0
  791. nuitka/nodes/shapes/StandardShapes.py +1384 -0
  792. nuitka/nodes/shapes/__init__.py +19 -0
  793. nuitka/optimizations/BytecodeDemotion.py +105 -0
  794. nuitka/optimizations/FunctionInlining.py +110 -0
  795. nuitka/optimizations/Graphs.py +70 -0
  796. nuitka/optimizations/Optimization.py +363 -0
  797. nuitka/optimizations/OptimizeBuiltinCalls.py +1582 -0
  798. nuitka/optimizations/Tags.py +76 -0
  799. nuitka/optimizations/TraceCollections.py +1257 -0
  800. nuitka/optimizations/ValueTraces.py +980 -0
  801. nuitka/optimizations/__init__.py +19 -0
  802. nuitka/pgo/PGO.py +160 -0
  803. nuitka/pgo/__init__.py +19 -0
  804. nuitka/plugins/PluginBase.py +1924 -0
  805. nuitka/plugins/Plugins.py +2007 -0
  806. nuitka/plugins/YamlPluginBase.py +121 -0
  807. nuitka/plugins/__init__.py +19 -0
  808. nuitka/plugins/standard/AntiBloatPlugin.py +1024 -0
  809. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +95 -0
  810. nuitka/plugins/standard/DataFilesPlugin.py +311 -0
  811. nuitka/plugins/standard/DelvewheelPlugin.py +150 -0
  812. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  813. nuitka/plugins/standard/DillPlugin/cloudpickle-postLoad.py +67 -0
  814. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +223 -0
  815. nuitka/plugins/standard/DillPlugin.py +137 -0
  816. nuitka/plugins/standard/DllFilesPlugin.py +527 -0
  817. nuitka/plugins/standard/EnumPlugin.py +64 -0
  818. nuitka/plugins/standard/EventletPlugin.py +57 -0
  819. nuitka/plugins/standard/GeventPlugin.py +64 -0
  820. nuitka/plugins/standard/GiPlugin.py +118 -0
  821. nuitka/plugins/standard/GlfwPlugin.py +138 -0
  822. nuitka/plugins/standard/ImplicitImports.py +845 -0
  823. nuitka/plugins/standard/KivyPlugin.py +141 -0
  824. nuitka/plugins/standard/MatplotlibPlugin.py +256 -0
  825. nuitka/plugins/standard/MultiprocessingPlugin.py +199 -0
  826. nuitka/plugins/standard/NumpyPlugin.py +35 -0
  827. nuitka/plugins/standard/OptionsNannyPlugin.py +158 -0
  828. nuitka/plugins/standard/PbrPlugin.py +62 -0
  829. nuitka/plugins/standard/PkgResourcesPlugin.py +162 -0
  830. nuitka/plugins/standard/PlaywrightPlugin.py +179 -0
  831. nuitka/plugins/standard/PmwPlugin.py +248 -0
  832. nuitka/plugins/standard/PySidePyQtPlugin.py +1666 -0
  833. nuitka/plugins/standard/PywebViewPlugin.py +81 -0
  834. nuitka/plugins/standard/SpacyPlugin.py +137 -0
  835. nuitka/plugins/standard/TensorflowPlugin.py +35 -0
  836. nuitka/plugins/standard/TkinterPlugin.py +416 -0
  837. nuitka/plugins/standard/TorchPlugin.py +35 -0
  838. nuitka/plugins/standard/TransformersPlugin.py +121 -0
  839. nuitka/plugins/standard/TrioPlugin.py +33 -0
  840. nuitka/plugins/standard/UpxPlugin.py +174 -0
  841. nuitka/plugins/standard/__init__.py +19 -0
  842. nuitka/plugins/standard/standard.nuitka-package.config.yml +9313 -0
  843. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +78 -0
  844. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +468 -0
  845. nuitka/reports/CompilationReportReader.py +83 -0
  846. nuitka/reports/LicenseReport.rst.j2 +41 -0
  847. nuitka/reports/Reports.py +961 -0
  848. nuitka/reports/__init__.py +19 -0
  849. nuitka/specs/BuiltinBytesOperationSpecs.py +180 -0
  850. nuitka/specs/BuiltinDictOperationSpecs.py +82 -0
  851. nuitka/specs/BuiltinListOperationSpecs.py +80 -0
  852. nuitka/specs/BuiltinParameterSpecs.py +831 -0
  853. nuitka/specs/BuiltinStrOperationSpecs.py +181 -0
  854. nuitka/specs/BuiltinTypeOperationSpecs.py +34 -0
  855. nuitka/specs/BuiltinUnicodeOperationSpecs.py +123 -0
  856. nuitka/specs/HardImportSpecs.py +236 -0
  857. nuitka/specs/ParameterSpecs.py +630 -0
  858. nuitka/specs/__init__.py +19 -0
  859. nuitka/tools/Basics.py +55 -0
  860. nuitka/tools/__init__.py +19 -0
  861. nuitka/tools/commercial/__init__.py +21 -0
  862. nuitka/tools/data_composer/DataComposer.py +593 -0
  863. nuitka/tools/data_composer/__init__.py +19 -0
  864. nuitka/tools/data_composer/__main__.py +41 -0
  865. nuitka/tools/environments/CreateEnvironment.py +69 -0
  866. nuitka/tools/environments/Virtualenv.py +158 -0
  867. nuitka/tools/environments/__init__.py +19 -0
  868. nuitka/tools/general/__init__.py +19 -0
  869. nuitka/tools/general/dll_report/__init__.py +19 -0
  870. nuitka/tools/general/dll_report/__main__.py +83 -0
  871. nuitka/tools/general/find_module/FindModuleCode.py +127 -0
  872. nuitka/tools/general/find_module/__init__.py +19 -0
  873. nuitka/tools/general/generate_header/GenerateHeader.py +73 -0
  874. nuitka/tools/general/generate_header/__init__.py +19 -0
  875. nuitka/tools/onefile_compressor/OnefileCompressor.py +390 -0
  876. nuitka/tools/onefile_compressor/__init__.py +19 -0
  877. nuitka/tools/onefile_compressor/__main__.py +41 -0
  878. nuitka/tools/podman/Podman.py +55 -0
  879. nuitka/tools/podman/__init__.py +19 -0
  880. nuitka/tools/podman/__main__.py +425 -0
  881. nuitka/tools/profiler/__init__.py +19 -0
  882. nuitka/tools/profiler/__main__.py +93 -0
  883. nuitka/tools/scanning/DisplayDistributions.py +39 -0
  884. nuitka/tools/scanning/DisplayPackageDLLs.py +151 -0
  885. nuitka/tools/scanning/DisplayPackageData.py +73 -0
  886. nuitka/tools/scanning/__init__.py +19 -0
  887. nuitka/tools/specialize/CTypeDescriptions.py +1928 -0
  888. nuitka/tools/specialize/Common.py +380 -0
  889. nuitka/tools/specialize/SpecializeC.py +1483 -0
  890. nuitka/tools/specialize/SpecializePython.py +1151 -0
  891. nuitka/tools/specialize/__init__.py +19 -0
  892. nuitka/tools/testing/Common.py +2007 -0
  893. nuitka/tools/testing/Constructs.py +53 -0
  894. nuitka/tools/testing/DocTests.py +156 -0
  895. nuitka/tools/testing/OutputComparison.py +313 -0
  896. nuitka/tools/testing/Pythons.py +34 -0
  897. nuitka/tools/testing/RuntimeTracing.py +260 -0
  898. nuitka/tools/testing/SearchModes.py +208 -0
  899. nuitka/tools/testing/Valgrind.py +103 -0
  900. nuitka/tools/testing/__init__.py +19 -0
  901. nuitka/tools/testing/check_reference_counts/__init__.py +19 -0
  902. nuitka/tools/testing/check_reference_counts/__main__.py +107 -0
  903. nuitka/tools/testing/compare_with_cpython/__init__.py +19 -0
  904. nuitka/tools/testing/compare_with_cpython/__main__.py +942 -0
  905. nuitka/tools/testing/find_sxs_modules/__init__.py +19 -0
  906. nuitka/tools/testing/find_sxs_modules/__main__.py +73 -0
  907. nuitka/tools/testing/measure_construct_performance/__init__.py +19 -0
  908. nuitka/tools/testing/measure_construct_performance/__main__.py +288 -0
  909. nuitka/tools/testing/run_nuitka_tests/__init__.py +19 -0
  910. nuitka/tools/testing/run_nuitka_tests/__main__.py +1091 -0
  911. nuitka/tools/watch/AutoStage.py +145 -0
  912. nuitka/tools/watch/Common.py +55 -0
  913. nuitka/tools/watch/Conda.py +125 -0
  914. nuitka/tools/watch/GitHub.py +113 -0
  915. nuitka/tools/watch/Pacman.py +73 -0
  916. nuitka/tools/watch/Pipenv.py +145 -0
  917. nuitka/tools/watch/__init__.py +19 -0
  918. nuitka/tools/watch/__main__.py +615 -0
  919. nuitka/tree/Building.py +1459 -0
  920. nuitka/tree/ComplexCallHelperFunctions.py +2150 -0
  921. nuitka/tree/Extractions.py +48 -0
  922. nuitka/tree/FutureSpecState.py +71 -0
  923. nuitka/tree/InternalModule.py +96 -0
  924. nuitka/tree/Operations.py +45 -0
  925. nuitka/tree/ReformulationAssertStatements.py +97 -0
  926. nuitka/tree/ReformulationAssignmentStatements.py +1260 -0
  927. nuitka/tree/ReformulationBooleanExpressions.py +97 -0
  928. nuitka/tree/ReformulationCallExpressions.py +314 -0
  929. nuitka/tree/ReformulationClasses.py +407 -0
  930. nuitka/tree/ReformulationClasses3.py +1149 -0
  931. nuitka/tree/ReformulationComparisonExpressions.py +174 -0
  932. nuitka/tree/ReformulationContractionExpressions.py +676 -0
  933. nuitka/tree/ReformulationDictionaryCreation.py +304 -0
  934. nuitka/tree/ReformulationExecStatements.py +386 -0
  935. nuitka/tree/ReformulationForLoopStatements.py +215 -0
  936. nuitka/tree/ReformulationFunctionStatements.py +931 -0
  937. nuitka/tree/ReformulationImportStatements.py +333 -0
  938. nuitka/tree/ReformulationLambdaExpressions.py +185 -0
  939. nuitka/tree/ReformulationMatchStatements.py +797 -0
  940. nuitka/tree/ReformulationMultidist.py +80 -0
  941. nuitka/tree/ReformulationNamespacePackages.py +239 -0
  942. nuitka/tree/ReformulationPrintStatements.py +127 -0
  943. nuitka/tree/ReformulationSequenceCreation.py +438 -0
  944. nuitka/tree/ReformulationSubscriptExpressions.py +123 -0
  945. nuitka/tree/ReformulationTryExceptStatements.py +418 -0
  946. nuitka/tree/ReformulationTryFinallyStatements.py +239 -0
  947. nuitka/tree/ReformulationWhileLoopStatements.py +160 -0
  948. nuitka/tree/ReformulationWithStatements.py +382 -0
  949. nuitka/tree/ReformulationYieldExpressions.py +133 -0
  950. nuitka/tree/SourceHandling.py +476 -0
  951. nuitka/tree/SyntaxErrors.py +143 -0
  952. nuitka/tree/TreeHelpers.py +720 -0
  953. nuitka/tree/VariableClosure.py +483 -0
  954. nuitka/tree/__init__.py +19 -0
  955. nuitka/utils/AppDirs.py +104 -0
  956. nuitka/utils/CStrings.py +208 -0
  957. nuitka/utils/CommandLineOptions.py +207 -0
  958. nuitka/utils/Distributions.py +728 -0
  959. nuitka/utils/Download.py +217 -0
  960. nuitka/utils/Execution.py +517 -0
  961. nuitka/utils/FileOperations.py +1587 -0
  962. nuitka/utils/Hashing.py +137 -0
  963. nuitka/utils/Images.py +79 -0
  964. nuitka/utils/Importing.py +335 -0
  965. nuitka/utils/InlineCopies.py +52 -0
  966. nuitka/utils/InstalledPythons.py +254 -0
  967. nuitka/utils/InstanceCounters.py +86 -0
  968. nuitka/utils/Jinja2.py +158 -0
  969. nuitka/utils/Json.py +40 -0
  970. nuitka/utils/MacOSApp.py +134 -0
  971. nuitka/utils/MemoryUsage.py +165 -0
  972. nuitka/utils/ModuleNames.py +317 -0
  973. nuitka/utils/PackageResources.py +44 -0
  974. nuitka/utils/ReExecute.py +152 -0
  975. nuitka/utils/Rest.py +60 -0
  976. nuitka/utils/SharedLibraries.py +1014 -0
  977. nuitka/utils/Shebang.py +113 -0
  978. nuitka/utils/Signing.py +144 -0
  979. nuitka/utils/SlotMetaClasses.py +57 -0
  980. nuitka/utils/StaticLibraries.py +260 -0
  981. nuitka/utils/ThreadedExecutor.py +87 -0
  982. nuitka/utils/Timing.py +102 -0
  983. nuitka/utils/Utils.py +483 -0
  984. nuitka/utils/WindowsFileUsage.py +337 -0
  985. nuitka/utils/WindowsResources.py +652 -0
  986. nuitka/utils/Yaml.py +247 -0
  987. nuitka/utils/__init__.py +19 -0
  988. nuitka_winsvc-2.7.7.data/scripts/nuitka-run.cmd +24 -0
  989. nuitka_winsvc-2.7.7.data/scripts/nuitka.cmd +30 -0
  990. nuitka_winsvc-2.7.7.dist-info/METADATA +115 -0
  991. nuitka_winsvc-2.7.7.dist-info/RECORD +995 -0
  992. nuitka_winsvc-2.7.7.dist-info/WHEEL +5 -0
  993. nuitka_winsvc-2.7.7.dist-info/entry_points.txt +7 -0
  994. nuitka_winsvc-2.7.7.dist-info/licenses/LICENSE.txt +202 -0
  995. nuitka_winsvc-2.7.7.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1257 @@
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+
4
+ """ Trace collection (also often still referred to as constraint collection).
5
+
6
+ At the core of value propagation there is the collection of constraints that
7
+ allow to propagate knowledge forward or not.
8
+
9
+ This is about collecting these constraints and to manage them.
10
+ """
11
+
12
+ import contextlib
13
+ from collections import defaultdict
14
+ from contextlib import contextmanager
15
+
16
+ from nuitka import Variables
17
+ from nuitka.__past__ import iterItems # Python3 compatibility.
18
+ from nuitka.containers.OrderedDicts import OrderedDict
19
+ from nuitka.containers.OrderedSets import OrderedSet
20
+ from nuitka.ModuleRegistry import addUsedModule
21
+ from nuitka.nodes.NodeMakingHelpers import getComputationResult
22
+ from nuitka.nodes.shapes.StandardShapes import tshape_uninitialized
23
+ from nuitka.Tracing import (
24
+ inclusion_logger,
25
+ printError,
26
+ printLine,
27
+ printSeparator,
28
+ )
29
+ from nuitka.tree.SourceHandling import readSourceLine
30
+ from nuitka.utils.InstanceCounters import (
31
+ counted_del,
32
+ counted_init,
33
+ isCountingInstances,
34
+ )
35
+ from nuitka.utils.Timing import TimerReport
36
+
37
+ from .ValueTraces import (
38
+ ValueTraceAssign,
39
+ ValueTraceAssignUnescapable,
40
+ ValueTraceAssignUnescapablePropagated,
41
+ ValueTraceAssignVeryTrusted,
42
+ ValueTraceDeleted,
43
+ ValueTraceEscaped,
44
+ ValueTraceInit,
45
+ ValueTraceInitStarArgs,
46
+ ValueTraceInitStarDict,
47
+ ValueTraceLoopComplete,
48
+ ValueTraceLoopIncomplete,
49
+ ValueTraceMerge,
50
+ ValueTraceUninitialized,
51
+ ValueTraceUnknown,
52
+ )
53
+
54
+ # Keeping trace of how often branches are merged between calls
55
+ _merge_counts = defaultdict(int)
56
+
57
+
58
+ def fetchMergeCounts():
59
+ result = dict(_merge_counts)
60
+ _merge_counts.clear()
61
+ return result
62
+
63
+
64
+ signalChange = None
65
+
66
+
67
+ @contextmanager
68
+ def withChangeIndicationsTo(signal_change):
69
+ """Decide where change indications should go to."""
70
+
71
+ global signalChange # Singleton, pylint: disable=global-statement
72
+
73
+ old = signalChange
74
+ signalChange = signal_change
75
+ yield
76
+ signalChange = old
77
+
78
+
79
+ class CollectionUpdateMixin(object):
80
+ """Mixin to use in every collection to add traces."""
81
+
82
+ # Mixins are not allowed to specify slots.
83
+ __slots__ = ()
84
+
85
+ def hasVariableTrace(self, variable, version):
86
+ return (variable, version) in self.variable_traces
87
+
88
+ def getVariableTrace(self, variable, version):
89
+ return self.variable_traces[(variable, version)]
90
+
91
+ def getVariableTraces(self, variable):
92
+ result = []
93
+
94
+ for key, variable_trace in iterItems(self.variable_traces):
95
+ candidate = key[0]
96
+
97
+ if variable is candidate:
98
+ result.append(variable_trace)
99
+
100
+ return result
101
+
102
+ def getVariableTracesAll(self):
103
+ return self.variable_traces
104
+
105
+ def addVariableTrace(self, variable, version, trace):
106
+ key = variable, version
107
+
108
+ assert key not in self.variable_traces, (key, self)
109
+ self.variable_traces[key] = trace
110
+
111
+ def addVariableMergeMultipleTrace(self, variable, traces):
112
+ version = variable.allocateTargetNumber()
113
+
114
+ trace_merge = ValueTraceMerge(traces)
115
+
116
+ self.addVariableTrace(variable, version, trace_merge)
117
+
118
+ return version
119
+
120
+
121
+ class CollectionStartPointMixin(CollectionUpdateMixin):
122
+ """Mixin to use in start points of collections.
123
+
124
+ These are modules, functions, etc. typically entry points.
125
+ """
126
+
127
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
128
+ __slots__ = ()
129
+
130
+ # Many things are traced
131
+
132
+ def __init__(self):
133
+ # Variable assignments performed in here, last issued number, only used
134
+ # to determine the next number that should be used for a new assignment.
135
+ self.variable_versions = {}
136
+
137
+ # The full trace of a variable with a version for the function or module
138
+ # this is.
139
+ self.variable_traces = {}
140
+
141
+ self.break_collections = None
142
+ self.continue_collections = None
143
+ self.return_collections = None
144
+ self.exception_collections = None
145
+
146
+ self.outline_functions = None
147
+
148
+ def getLoopBreakCollections(self):
149
+ return self.break_collections
150
+
151
+ def onLoopBreak(self, collection=None):
152
+ if collection is None:
153
+ collection = self
154
+
155
+ self.break_collections.append(
156
+ TraceCollectionBranch(parent=collection, name="loop break")
157
+ )
158
+
159
+ def getLoopContinueCollections(self):
160
+ return self.continue_collections
161
+
162
+ def onLoopContinue(self, collection=None):
163
+ if collection is None:
164
+ collection = self
165
+
166
+ self.continue_collections.append(
167
+ TraceCollectionBranch(parent=collection, name="loop continue")
168
+ )
169
+
170
+ def onFunctionReturn(self, collection=None):
171
+ if collection is None:
172
+ collection = self
173
+
174
+ if self.return_collections is not None:
175
+ self.return_collections.append(
176
+ TraceCollectionBranch(parent=collection, name="return")
177
+ )
178
+
179
+ def onExceptionRaiseExit(self, raisable_exceptions, collection=None):
180
+ """Indicate to the trace collection what exceptions may have occurred.
181
+
182
+ Args:
183
+ raisable_exception: Currently ignored, one or more exceptions that
184
+ could occur, e.g. "BaseException".
185
+ collection: To pass the collection that will be the parent
186
+ Notes:
187
+ Currently this is unused. Passing "collection" as an argument, so
188
+ we know the original collection to attach the branch to, is maybe
189
+ not the most clever way to do this
190
+
191
+ We also might want to specialize functions for specific exceptions,
192
+ there is little point in providing BaseException as an argument in
193
+ so many places.
194
+
195
+ The actual storage of the exceptions that can occur is currently
196
+ missing entirely. We just use this to detect "any exception" by
197
+ not being empty.
198
+ """
199
+
200
+ # TODO: We might want to track per exception, pylint: disable=unused-argument
201
+
202
+ if self.exception_collections is not None:
203
+ if collection is None:
204
+ collection = self
205
+
206
+ self.exception_collections.append(
207
+ TraceCollectionBranch(parent=collection, name="exception")
208
+ )
209
+
210
+ def getFunctionReturnCollections(self):
211
+ return self.return_collections
212
+
213
+ def getExceptionRaiseCollections(self):
214
+ return self.exception_collections
215
+
216
+ def hasEmptyTraces(self, variable):
217
+ # TODO: Combine these steps into one for performance gains.
218
+ traces = self.getVariableTraces(variable)
219
+ return areEmptyTraces(traces)
220
+
221
+ def hasReadOnlyTraces(self, variable):
222
+ # TODO: Combine these steps into one for performance gains.
223
+ traces = self.getVariableTraces(variable)
224
+ return areReadOnlyTraces(traces)
225
+
226
+ def initVariableUnknown(self, variable):
227
+ trace = ValueTraceUnknown(owner=self.owner, previous=None)
228
+
229
+ self.addVariableTrace(variable, 0, trace)
230
+
231
+ return trace
232
+
233
+ def initVariableModule(self, variable):
234
+ trace = ValueTraceUnknown(owner=self.owner, previous=None)
235
+
236
+ self.addVariableTrace(variable, 0, trace)
237
+
238
+ return trace
239
+
240
+ def initVariableInit(self, variable):
241
+ trace = ValueTraceInit(self.owner)
242
+
243
+ self.addVariableTrace(variable, 0, trace)
244
+
245
+ return trace
246
+
247
+ def initVariableInitStarArgs(self, variable):
248
+ trace = ValueTraceInitStarArgs(self.owner)
249
+
250
+ self.addVariableTrace(variable, 0, trace)
251
+
252
+ return trace
253
+
254
+ def initVariableInitStarDict(self, variable):
255
+ trace = ValueTraceInitStarDict(self.owner)
256
+
257
+ self.addVariableTrace(variable, 0, trace)
258
+
259
+ return trace
260
+
261
+ def initVariableUninitialized(self, variable):
262
+ trace = ValueTraceUninitialized(owner=self.owner, previous=None)
263
+
264
+ self.addVariableTrace(variable, 0, trace)
265
+
266
+ return trace
267
+
268
+ def updateVariablesFromCollection(self, old_collection, source_ref):
269
+ Variables.updateVariablesFromCollection(old_collection, self, source_ref)
270
+
271
+ @contextlib.contextmanager
272
+ def makeAbortStackContext(
273
+ self, catch_breaks, catch_continues, catch_returns, catch_exceptions
274
+ ):
275
+ if catch_breaks:
276
+ old_break_collections = self.break_collections
277
+ self.break_collections = []
278
+ if catch_continues:
279
+ old_continue_collections = self.continue_collections
280
+ self.continue_collections = []
281
+ if catch_returns:
282
+ old_return_collections = self.return_collections
283
+ self.return_collections = []
284
+ if catch_exceptions:
285
+ old_exception_collections = self.exception_collections
286
+ self.exception_collections = []
287
+
288
+ yield
289
+
290
+ if catch_breaks:
291
+ self.break_collections = old_break_collections
292
+ if catch_continues:
293
+ self.continue_collections = old_continue_collections
294
+ if catch_returns:
295
+ self.return_collections = old_return_collections
296
+ if catch_exceptions:
297
+ self.exception_collections = old_exception_collections
298
+
299
+ def initVariable(self, variable):
300
+ return variable.initVariable(self)
301
+
302
+ def addOutlineFunction(self, outline):
303
+ if self.outline_functions is None:
304
+ self.outline_functions = [outline]
305
+ else:
306
+ self.outline_functions.append(outline)
307
+
308
+ def getOutlineFunctions(self):
309
+ return self.outline_functions
310
+
311
+ def onLocalsDictEscaped(self, locals_scope):
312
+ locals_scope.preventLocalsDictPropagation()
313
+
314
+ for variable in locals_scope.variables.values():
315
+ self.markActiveVariableAsEscaped(variable)
316
+
317
+ # TODO: Limit to the scope.
318
+ # TODO: Does the above code not do that already?
319
+ for variable in self.variable_actives:
320
+ if variable.isTempVariable() or variable.isModuleVariable():
321
+ continue
322
+
323
+ self.markActiveVariableAsEscaped(variable)
324
+
325
+ def onUsedFunction(self, function_body):
326
+ owning_module = function_body.getParentModule()
327
+
328
+ # Make sure the owning module is added to the used set. This is most
329
+ # important for helper functions, or modules, which otherwise have
330
+ # become unused.
331
+ addUsedModule(
332
+ module=owning_module,
333
+ using_module=None,
334
+ usage_tag="function",
335
+ reason="Function %s" % self.name,
336
+ source_ref=owning_module.source_ref,
337
+ )
338
+
339
+ needs_visit = owning_module.addUsedFunction(function_body)
340
+
341
+ if needs_visit or function_body.isExpressionFunctionPureBody():
342
+ function_body.computeFunctionRaw(self)
343
+
344
+
345
+ class TraceCollectionBase(object):
346
+ """This contains for logic for maintaining active traces.
347
+
348
+ They are kept for "variable" and versions.
349
+ """
350
+
351
+ __slots__ = ("owner", "parent", "name", "variable_actives")
352
+
353
+ if isCountingInstances():
354
+ __del__ = counted_del()
355
+
356
+ @counted_init
357
+ def __init__(self, owner, name, parent):
358
+ self.owner = owner
359
+ self.parent = parent
360
+ self.name = name
361
+
362
+ # Currently active values in the tracing.
363
+ self.variable_actives = {}
364
+
365
+ def __repr__(self):
366
+ return "<%s for %s at 0x%x>" % (self.__class__.__name__, self.name, id(self))
367
+
368
+ def getOwner(self):
369
+ return self.owner
370
+
371
+ def dumpActiveTraces(self, indent=""):
372
+ printSeparator()
373
+ printLine("Active are:")
374
+ for variable, version in sorted(
375
+ self.variable_actives.items(), key=lambda var: var[0].variable_name
376
+ ):
377
+ printLine("%s %s:" % (variable, version))
378
+ self.getVariableCurrentTrace(variable).dump(indent)
379
+
380
+ printSeparator()
381
+
382
+ def getVariableCurrentTrace(self, variable):
383
+ """Get the current value trace associated to this variable
384
+
385
+ It is also created on the fly if necessary. We create them
386
+ lazy so to keep the tracing branches minimal where possible.
387
+ """
388
+
389
+ return self.getVariableTrace(
390
+ variable=variable, version=self._getCurrentVariableVersion(variable)
391
+ )
392
+
393
+ def markCurrentVariableTrace(self, variable, version):
394
+ self.variable_actives[variable] = version
395
+
396
+ def _getCurrentVariableVersion(self, variable):
397
+ try:
398
+ return self.variable_actives[variable]
399
+ except KeyError:
400
+ # Initialize variables on the fly.
401
+ if not self.hasVariableTrace(variable, 0):
402
+ self.initVariable(variable)
403
+
404
+ self.markCurrentVariableTrace(variable, 0)
405
+
406
+ return self.variable_actives[variable]
407
+
408
+ def markActiveVariableAsEscaped(self, variable):
409
+ current = self.getVariableCurrentTrace(variable)
410
+
411
+ if current.isTraceThatNeedsEscape():
412
+ version = variable.allocateTargetNumber()
413
+
414
+ self.addVariableTrace(
415
+ variable,
416
+ version,
417
+ ValueTraceEscaped(owner=self.owner, previous=current),
418
+ )
419
+
420
+ self.markCurrentVariableTrace(variable, version)
421
+
422
+ def markClosureVariableAsUnknown(self, variable):
423
+ current = self.getVariableCurrentTrace(variable)
424
+
425
+ if not current.isUnknownTrace():
426
+ version = variable.allocateTargetNumber()
427
+
428
+ self.addVariableTrace(
429
+ variable,
430
+ version,
431
+ ValueTraceUnknown(owner=self.owner, previous=current),
432
+ )
433
+
434
+ self.markCurrentVariableTrace(variable, version)
435
+
436
+ def markActiveVariableAsUnknown(self, variable):
437
+ current = self.getVariableCurrentTrace(variable)
438
+
439
+ if not current.isUnknownOrVeryTrustedTrace():
440
+ version = variable.allocateTargetNumber()
441
+
442
+ self.addVariableTrace(
443
+ variable,
444
+ version,
445
+ ValueTraceUnknown(owner=self.owner, previous=current),
446
+ )
447
+
448
+ self.markCurrentVariableTrace(variable, version)
449
+
450
+ def markActiveVariableAsLoopMerge(
451
+ self, loop_node, current, variable, shapes, incomplete
452
+ ):
453
+ if incomplete:
454
+ result = ValueTraceLoopIncomplete(loop_node, current, shapes)
455
+ else:
456
+ # TODO: Empty is a missing optimization somewhere, but it also happens that
457
+ # a variable is getting released in a loop.
458
+ # assert shapes, (variable, current)
459
+
460
+ if not shapes:
461
+ shapes.add(tshape_uninitialized)
462
+
463
+ result = ValueTraceLoopComplete(loop_node, current, shapes)
464
+
465
+ version = variable.allocateTargetNumber()
466
+ self.addVariableTrace(variable, version, result)
467
+
468
+ self.markCurrentVariableTrace(variable, version)
469
+
470
+ return result
471
+
472
+ @staticmethod
473
+ def signalChange(tags, source_ref, message):
474
+ # This is monkey patched from another module. pylint: disable=I0021,not-callable
475
+ signalChange(tags, source_ref, message)
476
+
477
+ @staticmethod
478
+ def mustAlias(a, b):
479
+ if a.isExpressionVariableRef() and b.isExpressionVariableRef():
480
+ return a.getVariable() is b.getVariable()
481
+
482
+ return False
483
+
484
+ @staticmethod
485
+ def mustNotAlias(a, b):
486
+ # TODO: not yet really implemented
487
+ if a.isExpressionConstantRef() and b.isExpressionConstantRef():
488
+ if a.isMutable() or b.isMutable():
489
+ return True
490
+
491
+ return False
492
+
493
+ def onControlFlowEscape(self, node):
494
+ # TODO: One day, we should trace which nodes exactly cause a variable
495
+ # to be considered escaped, pylint: disable=unused-argument
496
+ for variable in self.variable_actives:
497
+ variable.onControlFlowEscape(self)
498
+
499
+ def removeKnowledge(self, node):
500
+ if node.isExpressionVariableRef():
501
+ node.variable.removeKnowledge(self)
502
+
503
+ def onValueEscapeStr(self, node):
504
+ # TODO: We can ignore these for now.
505
+ pass
506
+
507
+ def removeAllKnowledge(self):
508
+ for variable in self.variable_actives:
509
+ variable.removeAllKnowledge(self)
510
+
511
+ def onVariableSet(self, variable, version, assign_node):
512
+ variable_trace = ValueTraceAssign(
513
+ owner=self.owner,
514
+ assign_node=assign_node,
515
+ previous=self.getVariableCurrentTrace(variable),
516
+ )
517
+
518
+ self.addVariableTrace(variable, version, variable_trace)
519
+
520
+ # Make references point to it.
521
+ self.markCurrentVariableTrace(variable, version)
522
+
523
+ return variable_trace
524
+
525
+ def onVariableSetAliasing(self, variable, version, assign_node, source):
526
+ other_variable_trace = source.variable_trace
527
+
528
+ if other_variable_trace.__class__ is ValueTraceAssignUnescapable:
529
+ return self.onVariableSetToUnescapableValue(
530
+ variable=variable, version=version, assign_node=assign_node
531
+ )
532
+ elif other_variable_trace.__class__ is ValueTraceAssignVeryTrusted:
533
+ return self.onVariableSetToVeryTrustedValue(
534
+ variable=variable, version=version, assign_node=assign_node
535
+ )
536
+ else:
537
+ result = self.onVariableSet(
538
+ variable=variable, version=version, assign_node=assign_node
539
+ )
540
+
541
+ self.removeKnowledge(source)
542
+
543
+ return result
544
+
545
+ def onVariableSetToUnescapableValue(self, variable, version, assign_node):
546
+ variable_trace = ValueTraceAssignUnescapable(
547
+ owner=self.owner,
548
+ assign_node=assign_node,
549
+ previous=self.getVariableCurrentTrace(variable),
550
+ )
551
+
552
+ self.addVariableTrace(variable, version, variable_trace)
553
+
554
+ # Make references point to it.
555
+ self.markCurrentVariableTrace(variable, version)
556
+
557
+ return variable_trace
558
+
559
+ def onVariableSetToVeryTrustedValue(self, variable, version, assign_node):
560
+ variable_trace = ValueTraceAssignVeryTrusted(
561
+ owner=self.owner,
562
+ assign_node=assign_node,
563
+ previous=self.getVariableCurrentTrace(variable),
564
+ )
565
+
566
+ self.addVariableTrace(variable, version, variable_trace)
567
+
568
+ # Make references point to it.
569
+ self.markCurrentVariableTrace(variable, version)
570
+
571
+ return variable_trace
572
+
573
+ def onVariableSetToUnescapablePropagatedValue(
574
+ self, variable, version, assign_node, replacement
575
+ ):
576
+ variable_trace = ValueTraceAssignUnescapablePropagated(
577
+ owner=self.owner,
578
+ assign_node=assign_node,
579
+ previous=self.getVariableCurrentTrace(variable),
580
+ replacement=replacement,
581
+ )
582
+
583
+ self.addVariableTrace(variable, version, variable_trace)
584
+
585
+ # Make references point to it.
586
+ self.markCurrentVariableTrace(variable, version)
587
+
588
+ return variable_trace
589
+
590
+ def onVariableDel(self, variable, version, del_node):
591
+ # Add a new trace, allocating a new version for the variable, and
592
+ # remember the delete of the current
593
+ old_trace = self.getVariableCurrentTrace(variable)
594
+
595
+ # TODO: Annotate value content as escaped.
596
+
597
+ variable_trace = ValueTraceDeleted(
598
+ owner=self.owner, del_node=del_node, previous=old_trace
599
+ )
600
+
601
+ # Assign to not initialized again.
602
+ self.addVariableTrace(variable, version, variable_trace)
603
+
604
+ # Make references point to it.
605
+ self.markCurrentVariableTrace(variable, version)
606
+
607
+ return variable_trace
608
+
609
+ def onLocalsUsage(self, locals_scope):
610
+ self.onLocalsDictEscaped(locals_scope)
611
+
612
+ result = []
613
+
614
+ scope_locals_variables = locals_scope.getLocalsRelevantVariables()
615
+
616
+ for variable in self.variable_actives:
617
+ if variable.isLocalVariable() and variable in scope_locals_variables:
618
+ variable_trace = self.getVariableCurrentTrace(variable)
619
+
620
+ variable_trace.addNameUsage()
621
+ result.append((variable, variable_trace))
622
+
623
+ return result
624
+
625
+ def onVariableContentEscapes(self, variable):
626
+ self.markActiveVariableAsEscaped(variable)
627
+
628
+ def onExpression(self, expression, allow_none=False):
629
+ if expression is None and allow_none:
630
+ return None
631
+
632
+ parent = expression.parent
633
+ assert parent, expression
634
+
635
+ # Now compute this expression, allowing it to replace itself with
636
+ # something else as part of a local peep hole optimization.
637
+ new_node, change_tags, change_desc = expression.computeExpressionRaw(self)
638
+
639
+ if change_tags is not None:
640
+ # This is mostly for tracing and indication that a change occurred
641
+ # and it may be interesting to look again.
642
+ self.signalChange(change_tags, expression.getSourceReference(), change_desc)
643
+
644
+ if new_node is not expression:
645
+ parent.replaceChild(expression, new_node)
646
+
647
+ return new_node
648
+
649
+ def onStatement(self, statement):
650
+ try:
651
+ new_statement, change_tags, change_desc = statement.computeStatement(self)
652
+
653
+ # print new_statement, change_tags, change_desc
654
+ if new_statement is not statement:
655
+ self.signalChange(
656
+ change_tags, statement.getSourceReference(), change_desc
657
+ )
658
+
659
+ return new_statement
660
+ except Exception:
661
+ printError(
662
+ "Problem with statement at %s:\n-> %s"
663
+ % (
664
+ statement.source_ref.getAsString(),
665
+ readSourceLine(statement.source_ref),
666
+ )
667
+ )
668
+ raise
669
+
670
+ def computedStatementResult(self, statement, change_tags, change_desc):
671
+ """Make sure the replacement statement is computed.
672
+
673
+ Use this when a replacement expression needs to be seen by the trace
674
+ collection and be computed, without causing any duplication, but where
675
+ otherwise there would be loss of annotated effects.
676
+
677
+ This may e.g. be true for nodes that need an initial run to know their
678
+ exception result and type shape.
679
+ """
680
+ # Need to compute the replacement still.
681
+ new_statement = statement.computeStatement(self)
682
+
683
+ if new_statement[0] is not statement:
684
+ # Signal intermediate result as well.
685
+ self.signalChange(change_tags, statement.getSourceReference(), change_desc)
686
+
687
+ return new_statement
688
+ else:
689
+ return statement, change_tags, change_desc
690
+
691
+ def computedExpressionResult(self, expression, change_tags, change_desc):
692
+ """Make sure the replacement expression is computed.
693
+
694
+ Use this when a replacement expression needs to be seen by the trace
695
+ collection and be computed, without causing any duplication, but where
696
+ otherwise there would be loss of annotated effects.
697
+
698
+ This may e.g. be true for nodes that need an initial run to know their
699
+ exception result and type shape.
700
+ """
701
+
702
+ # Need to compute the replacement still.
703
+ new_expression = expression.computeExpression(self)
704
+
705
+ if new_expression[0] is not expression:
706
+ # Signal intermediate result as well.
707
+ self.signalChange(change_tags, expression.getSourceReference(), change_desc)
708
+
709
+ return new_expression
710
+ else:
711
+ return expression, change_tags, change_desc
712
+
713
+ def computedExpressionResultRaw(self, expression, change_tags, change_desc):
714
+ """Make sure the replacement expression is computed.
715
+
716
+ Use this when a replacement expression needs to be seen by the trace
717
+ collection and be computed, without causing any duplication, but where
718
+ otherwise there would be loss of annotated effects.
719
+
720
+ This may e.g. be true for nodes that need an initial run to know their
721
+ exception result and type shape.
722
+
723
+ This is for raw, i.e. subnodes are not yet computed automatically.
724
+ """
725
+
726
+ # Need to compute the replacement still.
727
+ new_expression = expression.computeExpressionRaw(self)
728
+
729
+ if new_expression[0] is not expression:
730
+ # Signal intermediate result as well.
731
+ self.signalChange(change_tags, expression.getSourceReference(), change_desc)
732
+
733
+ return new_expression
734
+ else:
735
+ return expression, change_tags, change_desc
736
+
737
+ def mergeBranches(self, collection_yes, collection_no):
738
+ """Merge two alternative branches into this trace.
739
+
740
+ This is mostly for merging conditional branches, or other ways
741
+ of having alternative control flow. This deals with up to two
742
+ alternative branches to both change this collection.
743
+ """
744
+
745
+ # Many branches due to inlining the actual merge and preparing it
746
+ # pylint: disable=too-many-branches
747
+
748
+ if collection_yes is None:
749
+ if collection_no is not None:
750
+ # Handle one branch case, we need to merge versions backwards as
751
+ # they may make themselves obsolete.
752
+ collection1 = self
753
+ collection2 = collection_no
754
+ else:
755
+ # Refuse to do stupid work
756
+ return
757
+ elif collection_no is None:
758
+ # Handle one branch case, we need to merge versions backwards as
759
+ # they may make themselves obsolete.
760
+ collection1 = self
761
+ collection2 = collection_yes
762
+ else:
763
+ # Handle two branch case, they may or may not do the same things.
764
+ collection1 = collection_yes
765
+ collection2 = collection_no
766
+
767
+ _merge_counts[2] += 1
768
+
769
+ variable_versions = {}
770
+
771
+ for variable, version in iterItems(collection1.variable_actives):
772
+ variable_versions[variable] = version
773
+
774
+ for variable, version in iterItems(collection2.variable_actives):
775
+ if variable not in variable_versions:
776
+ if version != 0:
777
+ variable_versions[variable] = 0, version
778
+ else:
779
+ variable_versions[variable] = 0
780
+ else:
781
+ other = variable_versions[variable]
782
+
783
+ if other != version:
784
+ variable_versions[variable] = other, version
785
+
786
+ # That would not be fast, pylint: disable=consider-using-dict-items
787
+ for variable in variable_versions:
788
+ if variable not in collection2.variable_actives:
789
+ if variable_versions[variable] != 0:
790
+ variable_versions[variable] = variable_versions[variable], 0
791
+
792
+ self.variable_actives = {}
793
+
794
+ for variable, versions in iterItems(variable_versions):
795
+ if type(versions) is tuple:
796
+ trace1 = self.getVariableTrace(variable, versions[0])
797
+ trace2 = self.getVariableTrace(variable, versions[1])
798
+
799
+ if trace1.isEscapeTrace() and trace1.previous is trace2:
800
+ version = versions[0]
801
+ elif trace2.isEscapeTrace() and trace2.previous is trace1:
802
+ version = versions[1]
803
+ else:
804
+ version = self.addVariableMergeMultipleTrace(
805
+ variable=variable,
806
+ traces=(
807
+ trace1,
808
+ trace2,
809
+ ),
810
+ )
811
+ else:
812
+ version = versions
813
+
814
+ self.markCurrentVariableTrace(variable, version)
815
+
816
+ def mergeMultipleBranches(self, collections):
817
+ # This one is really complex, pylint: disable=too-many-branches
818
+
819
+ assert collections
820
+
821
+ # Optimize for length 1, which is trivial merge and needs not a
822
+ # lot of work, and length 2 has dedicated code as it's so frequent.
823
+ merge_size = len(collections)
824
+
825
+ if merge_size == 1:
826
+ self.replaceBranch(collections[0])
827
+ return
828
+ elif merge_size == 2:
829
+ return self.mergeBranches(*collections)
830
+
831
+ _merge_counts[len(collections)] += 1
832
+
833
+ with TimerReport(
834
+ message="Running merge for %s took %%.2f seconds" % collections,
835
+ decider=False,
836
+ ):
837
+ variable_versions = defaultdict(OrderedSet)
838
+
839
+ for collection in collections:
840
+ for variable, version in iterItems(collection.variable_actives):
841
+ variable_versions[variable].add(version)
842
+
843
+ for collection in collections:
844
+ for variable, versions in iterItems(variable_versions):
845
+ if variable not in collection.variable_actives:
846
+ versions.add(0)
847
+
848
+ self.variable_actives = {}
849
+
850
+ for variable, versions in iterItems(variable_versions):
851
+ if len(versions) == 1:
852
+ (version,) = versions
853
+ else:
854
+ traces = []
855
+ escaped = []
856
+ winner_version = None
857
+
858
+ for version in versions:
859
+ trace = self.getVariableTrace(variable, version)
860
+
861
+ if trace.isEscapeTrace():
862
+ winner_version = version
863
+ escaped_trace = trace.previous
864
+
865
+ if escaped_trace in traces:
866
+ traces.remove(trace.previous)
867
+
868
+ escaped.append(escaped)
869
+ traces.append(trace)
870
+ else:
871
+ if trace not in escaped:
872
+ traces.append(trace)
873
+
874
+ if len(traces) == 1:
875
+ version = winner_version
876
+ assert winner_version is not None
877
+ else:
878
+ version = self.addVariableMergeMultipleTrace(
879
+ variable=variable, traces=tuple(traces)
880
+ )
881
+
882
+ self.markCurrentVariableTrace(variable, version)
883
+
884
+ # print("Leave mergeMultipleBranches", len(collections))
885
+
886
+ def replaceBranch(self, collection_replace):
887
+ self.variable_actives.update(collection_replace.variable_actives)
888
+ collection_replace.variable_actives = None
889
+
890
+ _merge_counts[1] += 1
891
+
892
+ def onLoopBreak(self, collection=None):
893
+ if collection is None:
894
+ collection = self
895
+
896
+ return self.parent.onLoopBreak(collection)
897
+
898
+ def onLoopContinue(self, collection=None):
899
+ if collection is None:
900
+ collection = self
901
+
902
+ return self.parent.onLoopContinue(collection)
903
+
904
+ def onFunctionReturn(self, collection=None):
905
+ if collection is None:
906
+ collection = self
907
+
908
+ return self.parent.onFunctionReturn(collection)
909
+
910
+ def onExceptionRaiseExit(self, raisable_exceptions, collection=None):
911
+ if collection is None:
912
+ collection = self
913
+
914
+ return self.parent.onExceptionRaiseExit(raisable_exceptions, collection)
915
+
916
+ def getLoopBreakCollections(self):
917
+ return self.parent.getLoopBreakCollections()
918
+
919
+ def getLoopContinueCollections(self):
920
+ return self.parent.getLoopContinueCollections()
921
+
922
+ def getFunctionReturnCollections(self):
923
+ return self.parent.getFunctionReturnCollections()
924
+
925
+ def getExceptionRaiseCollections(self):
926
+ return self.parent.getExceptionRaiseCollections()
927
+
928
+ def makeAbortStackContext(
929
+ self, catch_breaks, catch_continues, catch_returns, catch_exceptions
930
+ ):
931
+ return self.parent.makeAbortStackContext(
932
+ catch_breaks=catch_breaks,
933
+ catch_continues=catch_continues,
934
+ catch_returns=catch_returns,
935
+ catch_exceptions=catch_exceptions,
936
+ )
937
+
938
+ def onLocalsDictEscaped(self, locals_scope):
939
+ self.parent.onLocalsDictEscaped(locals_scope)
940
+
941
+ def getCompileTimeComputationResult(
942
+ self, node, computation, description, user_provided=False
943
+ ):
944
+ new_node, change_tags, message = getComputationResult(
945
+ node=node,
946
+ computation=computation,
947
+ description=description,
948
+ user_provided=user_provided,
949
+ )
950
+
951
+ if change_tags == "new_raise":
952
+ self.onExceptionRaiseExit(BaseException)
953
+
954
+ return new_node, change_tags, message
955
+
956
+ def addOutlineFunction(self, outline):
957
+ self.parent.addOutlineFunction(outline)
958
+
959
+ def getVeryTrustedModuleVariables(self):
960
+ return self.parent.getVeryTrustedModuleVariables()
961
+
962
+ def onUsedFunction(self, function_body):
963
+ return self.parent.onUsedFunction(function_body)
964
+
965
+ def onModuleUsageAttempts(self, module_usage_attempts):
966
+ self.parent.onModuleUsageAttempts(module_usage_attempts)
967
+
968
+ def onModuleUsageAttempt(self, module_usage_attempt):
969
+ self.parent.onModuleUsageAttempt(module_usage_attempt)
970
+
971
+ def onDistributionUsed(self, distribution_name, node, success):
972
+ self.parent.onDistributionUsed(
973
+ distribution_name=distribution_name, node=node, success=success
974
+ )
975
+
976
+
977
+ class TraceCollectionBranch(CollectionUpdateMixin, TraceCollectionBase):
978
+ __slots__ = ("variable_traces",)
979
+
980
+ def __init__(self, name, parent):
981
+ TraceCollectionBase.__init__(self, owner=parent.owner, name=name, parent=parent)
982
+
983
+ # Detach from others
984
+ self.variable_actives = dict(parent.variable_actives)
985
+
986
+ # For quick access without going to parent.
987
+ self.variable_traces = parent.variable_traces
988
+
989
+ def computeBranch(self, branch):
990
+ assert branch.isStatementsSequence()
991
+
992
+ result = branch.computeStatementsSequence(self)
993
+
994
+ if result is not branch:
995
+ branch.parent.replaceChild(branch, result)
996
+
997
+ return result
998
+
999
+ def initVariable(self, variable):
1000
+ variable_trace = self.parent.initVariable(variable)
1001
+
1002
+ self.variable_actives[variable] = 0
1003
+
1004
+ return variable_trace
1005
+
1006
+
1007
+ class TraceCollectionFunction(CollectionStartPointMixin, TraceCollectionBase):
1008
+ __slots__ = (
1009
+ "variable_versions",
1010
+ "variable_traces",
1011
+ "break_collections",
1012
+ "continue_collections",
1013
+ "return_collections",
1014
+ "exception_collections",
1015
+ "outline_functions",
1016
+ "very_trusted_module_variables",
1017
+ )
1018
+
1019
+ def __init__(self, parent, function_body):
1020
+ assert (
1021
+ function_body.isExpressionFunctionBody()
1022
+ or function_body.isExpressionGeneratorObjectBody()
1023
+ or function_body.isExpressionCoroutineObjectBody()
1024
+ or function_body.isExpressionAsyncgenObjectBody()
1025
+ ), function_body
1026
+
1027
+ CollectionStartPointMixin.__init__(self)
1028
+
1029
+ TraceCollectionBase.__init__(
1030
+ self,
1031
+ owner=function_body,
1032
+ name="collection_" + function_body.getCodeName(),
1033
+ parent=parent,
1034
+ )
1035
+
1036
+ if parent is not None:
1037
+ self.very_trusted_module_variables = parent.getVeryTrustedModuleVariables()
1038
+ else:
1039
+ self.very_trusted_module_variables = ()
1040
+
1041
+ if function_body.isExpressionFunctionBody():
1042
+ parameters = function_body.getParameters()
1043
+
1044
+ for parameter_variable in parameters.getTopLevelVariables():
1045
+ self.initVariableInit(parameter_variable)
1046
+ self.variable_actives[parameter_variable] = 0
1047
+
1048
+ list_star_variable = parameters.getListStarArgVariable()
1049
+ if list_star_variable is not None:
1050
+ self.initVariableInitStarArgs(list_star_variable)
1051
+ self.variable_actives[list_star_variable] = 0
1052
+
1053
+ dict_star_variable = parameters.getDictStarArgVariable()
1054
+ if dict_star_variable is not None:
1055
+ self.initVariableInitStarDict(dict_star_variable)
1056
+ self.variable_actives[dict_star_variable] = 0
1057
+
1058
+ for closure_variable in function_body.getClosureVariables():
1059
+ self.initVariableUnknown(closure_variable)
1060
+ self.variable_actives[closure_variable] = 0
1061
+
1062
+ # TODO: Have special function type for exec functions stuff.
1063
+ locals_scope = function_body.getLocalsScope()
1064
+
1065
+ if locals_scope is not None:
1066
+ if not locals_scope.isMarkedForPropagation():
1067
+ for locals_dict_variable in locals_scope.variables.values():
1068
+ self.initVariableUninitialized(locals_dict_variable)
1069
+ else:
1070
+ function_body.locals_scope = None
1071
+
1072
+ def initVariableModule(self, variable):
1073
+ trusted_node = self.very_trusted_module_variables.get(variable)
1074
+
1075
+ if trusted_node is None:
1076
+ return CollectionStartPointMixin.initVariableModule(self, variable)
1077
+
1078
+ assign_trace = ValueTraceAssignVeryTrusted(
1079
+ self.owner, assign_node=trusted_node.getParent(), previous=None
1080
+ )
1081
+
1082
+ # This is rare enough to not need a more optimized code.
1083
+ self.addVariableTrace(variable, 0, assign_trace)
1084
+ self.markActiveVariableAsEscaped(variable)
1085
+
1086
+ return self.getVariableCurrentTrace(variable)
1087
+
1088
+
1089
+ class TraceCollectionPureFunction(TraceCollectionFunction):
1090
+ """Pure functions don't feed their parent."""
1091
+
1092
+ __slots__ = ("used_functions",)
1093
+
1094
+ def __init__(self, function_body):
1095
+ TraceCollectionFunction.__init__(self, parent=None, function_body=function_body)
1096
+
1097
+ self.used_functions = OrderedSet()
1098
+
1099
+ def getUsedFunctions(self):
1100
+ return self.used_functions
1101
+
1102
+ def onUsedFunction(self, function_body):
1103
+ self.used_functions.add(function_body)
1104
+
1105
+ TraceCollectionFunction.onUsedFunction(self, function_body=function_body)
1106
+
1107
+
1108
+ class TraceCollectionModule(CollectionStartPointMixin, TraceCollectionBase):
1109
+ __slots__ = (
1110
+ "variable_versions",
1111
+ "variable_traces",
1112
+ "break_collections",
1113
+ "continue_collections",
1114
+ "return_collections",
1115
+ "exception_collections",
1116
+ "outline_functions",
1117
+ "very_trusted_module_variables",
1118
+ "module_usage_attempts",
1119
+ "distribution_names",
1120
+ )
1121
+
1122
+ def __init__(self, module, very_trusted_module_variables):
1123
+ assert module.isCompiledPythonModule(), module
1124
+
1125
+ CollectionStartPointMixin.__init__(self)
1126
+
1127
+ TraceCollectionBase.__init__(
1128
+ self, owner=module, name="module:" + module.getFullName(), parent=None
1129
+ )
1130
+
1131
+ self.very_trusted_module_variables = very_trusted_module_variables
1132
+
1133
+ # Attempts to use a module in this module.
1134
+ self.module_usage_attempts = OrderedSet()
1135
+
1136
+ # Attempts to use a distribution in this module.
1137
+ self.distribution_names = OrderedDict()
1138
+
1139
+ def getVeryTrustedModuleVariables(self):
1140
+ return self.very_trusted_module_variables
1141
+
1142
+ def updateVeryTrustedModuleVariables(self, very_trusted_module_variables):
1143
+ result = self.very_trusted_module_variables != very_trusted_module_variables
1144
+
1145
+ self.very_trusted_module_variables = very_trusted_module_variables
1146
+
1147
+ return result
1148
+
1149
+ def getModuleUsageAttempts(self):
1150
+ return self.module_usage_attempts
1151
+
1152
+ def onModuleUsageAttempts(self, module_usage_attempts):
1153
+ self.module_usage_attempts.update(module_usage_attempts)
1154
+
1155
+ def onModuleUsageAttempt(self, module_usage_attempt):
1156
+ self.module_usage_attempts.add(module_usage_attempt)
1157
+
1158
+ def getUsedDistributions(self):
1159
+ return self.distribution_names
1160
+
1161
+ def onDistributionUsed(self, distribution_name, node, success):
1162
+ inclusion_logger.info_to_file_only(
1163
+ "Cannot find distribution '%s' at '%s', expect potential run time problem, unless this is unused code."
1164
+ % (distribution_name, node.source_ref.getAsString())
1165
+ )
1166
+
1167
+ self.distribution_names[distribution_name] = success
1168
+
1169
+
1170
+ # TODO: This should not exist, but be part of decision at the time these are collected.
1171
+ def areEmptyTraces(variable_traces):
1172
+ """Do these traces contain any writes or accesses."""
1173
+ # Many cases immediately return, that is how we do it here,
1174
+ # pylint: disable=too-many-branches,too-many-return-statements
1175
+
1176
+ for variable_trace in variable_traces:
1177
+ if variable_trace.isAssignTrace():
1178
+ return False
1179
+ elif variable_trace.isInitTrace():
1180
+ return False
1181
+ elif variable_trace.isDeletedTrace():
1182
+ # A "del" statement can do this, and needs to prevent variable
1183
+ # from being removed.
1184
+
1185
+ return False
1186
+ elif variable_trace.isUninitializedTrace():
1187
+ if variable_trace.getUsageCount():
1188
+ # Checking definite is enough, the merges, we shall see
1189
+ # them as well.
1190
+ return False
1191
+ elif variable_trace.isUnknownTrace():
1192
+ if variable_trace.getUsageCount():
1193
+ # Checking definite is enough, the merges, we shall see
1194
+ # them as well.
1195
+ return False
1196
+ elif variable_trace.isEscapeTrace():
1197
+ if variable_trace.getUsageCount():
1198
+ # Checking definite is enough, the merges, we shall see
1199
+ # them as well.
1200
+ return False
1201
+ elif variable_trace.isMergeTrace():
1202
+ if variable_trace.getUsageCount():
1203
+ # Checking definite is enough, the merges, we shall see
1204
+ # them as well.
1205
+ return False
1206
+ elif variable_trace.isLoopTrace():
1207
+ return False
1208
+ else:
1209
+ assert False, variable_trace
1210
+
1211
+ return True
1212
+
1213
+
1214
+ def areReadOnlyTraces(variable_traces):
1215
+ """Do these traces contain any writes."""
1216
+
1217
+ # Many cases immediately return, that is how we do it here,
1218
+ for variable_trace in variable_traces:
1219
+ if variable_trace.isAssignTrace():
1220
+ return False
1221
+ elif variable_trace.isInitTrace():
1222
+ pass
1223
+ elif variable_trace.isDeletedTrace():
1224
+ # A "del" statement can do this, and needs to prevent variable
1225
+ # from being not released.
1226
+
1227
+ return False
1228
+ elif variable_trace.isUninitializedTrace():
1229
+ pass
1230
+ elif variable_trace.isUnknownTrace():
1231
+ return False
1232
+ elif variable_trace.isEscapeTrace():
1233
+ pass
1234
+ elif variable_trace.isMergeTrace():
1235
+ pass
1236
+ elif variable_trace.isLoopTrace():
1237
+ pass
1238
+ else:
1239
+ assert False, variable_trace
1240
+
1241
+ return True
1242
+
1243
+
1244
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
1245
+ # integrates with CPython, but also works on its own.
1246
+ #
1247
+ # Licensed under the Apache License, Version 2.0 (the "License");
1248
+ # you may not use this file except in compliance with the License.
1249
+ # You may obtain a copy of the License at
1250
+ #
1251
+ # http://www.apache.org/licenses/LICENSE-2.0
1252
+ #
1253
+ # Unless required by applicable law or agreed to in writing, software
1254
+ # distributed under the License is distributed on an "AS IS" BASIS,
1255
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1256
+ # See the License for the specific language governing permissions and
1257
+ # limitations under the License.