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,1513 @@
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+
4
+ """ Nodes that build and operate on dictionaries.
5
+
6
+ The "pair" is a sub-structure of the dictionary, representing a key/value pair
7
+ that is the child of the dictionary creation.
8
+
9
+ """
10
+
11
+ from nuitka import Constants
12
+ from nuitka.specs.BuiltinDictOperationSpecs import dict_fromkeys_spec
13
+ from nuitka.specs.BuiltinParameterSpecs import extractBuiltinArgs
14
+
15
+ from .AttributeNodes import makeExpressionAttributeLookup
16
+ from .BuiltinOperationNodeBasesGenerated import (
17
+ ExpressionDictOperationClearBase,
18
+ ExpressionDictOperationCopyBase,
19
+ ExpressionDictOperationFromkeys2Base,
20
+ ExpressionDictOperationFromkeys3Base,
21
+ ExpressionDictOperationGet2Base,
22
+ ExpressionDictOperationGet3Base,
23
+ ExpressionDictOperationHaskeyBase,
24
+ ExpressionDictOperationItemsBase,
25
+ ExpressionDictOperationIteritemsBase,
26
+ ExpressionDictOperationIterkeysBase,
27
+ ExpressionDictOperationItervaluesBase,
28
+ ExpressionDictOperationKeysBase,
29
+ ExpressionDictOperationPop2Base,
30
+ ExpressionDictOperationPop3Base,
31
+ ExpressionDictOperationPopitemBase,
32
+ ExpressionDictOperationSetdefault2Base,
33
+ ExpressionDictOperationSetdefault3Base,
34
+ ExpressionDictOperationUpdate2Base,
35
+ ExpressionDictOperationUpdate3Base,
36
+ ExpressionDictOperationValuesBase,
37
+ ExpressionDictOperationViewitemsBase,
38
+ ExpressionDictOperationViewkeysBase,
39
+ ExpressionDictOperationViewvaluesBase,
40
+ )
41
+ from .ChildrenHavingMixins import (
42
+ ChildrenExpressionDictOperationItemMixin,
43
+ ChildrenExpressionDictOperationUpdatePairsMixin,
44
+ ChildrenExpressionMakeDictMixin,
45
+ ChildrenHavingKeyDictArgMixin,
46
+ )
47
+ from .ConstantRefNodes import (
48
+ ExpressionConstantDictEmptyRef,
49
+ makeConstantRefNode,
50
+ )
51
+ from .ExpressionBases import ExpressionBase, ExpressionNoSideEffectsMixin
52
+ from .ExpressionShapeMixins import (
53
+ ExpressionBoolShapeExactMixin,
54
+ ExpressionDictShapeExactMixin,
55
+ )
56
+ from .NodeBases import SideEffectsFromChildrenMixin
57
+ from .NodeMakingHelpers import (
58
+ makeConstantReplacementNode,
59
+ makeRaiseExceptionExpressionFromTemplate,
60
+ makeRaiseExceptionReplacementExpression,
61
+ makeStatementOnlyNodesFromExpressions,
62
+ wrapExpressionWithSideEffects,
63
+ )
64
+ from .shapes.IteratorShapes import tshape_iterator
65
+ from .StatementBasesGenerated import (
66
+ StatementDictOperationRemoveBase,
67
+ StatementDictOperationSetBase,
68
+ StatementDictOperationSetKeyValueBase,
69
+ StatementDictOperationUpdateBase,
70
+ )
71
+
72
+
73
+ def makeExpressionMakeDict(pairs, source_ref):
74
+ if pairs:
75
+ return ExpressionMakeDict(pairs, source_ref)
76
+ else:
77
+ # TODO: Get rid of user provided for empty dict refs, makes no sense.
78
+ return ExpressionConstantDictEmptyRef(
79
+ user_provided=False, source_ref=source_ref
80
+ )
81
+
82
+
83
+ def makeExpressionMakeDictOrConstant(pairs, user_provided, source_ref):
84
+ # Create dictionary node or constant value if possible.
85
+
86
+ for pair in pairs:
87
+ if (
88
+ not pair.isCompileTimeConstant()
89
+ or pair.isKeyKnownToBeHashable() is not True
90
+ ):
91
+ result = makeExpressionMakeDict(pairs, source_ref)
92
+ break
93
+ else:
94
+ # Unless told otherwise, create the dictionary in its full size, so
95
+ # that no growing occurs and the constant becomes as similar as possible
96
+ # before being marshaled.
97
+ result = makeConstantRefNode(
98
+ constant=Constants.createConstantDict(
99
+ keys=[pair.getKeyCompileTimeConstant() for pair in pairs],
100
+ values=[pair.getValueCompileTimeConstant() for pair in pairs],
101
+ ),
102
+ user_provided=user_provided,
103
+ source_ref=source_ref,
104
+ )
105
+
106
+ if pairs:
107
+ result.setCompatibleSourceReference(
108
+ source_ref=pairs[-1].getCompatibleSourceReference()
109
+ )
110
+
111
+ return result
112
+
113
+
114
+ class ExpressionMakeDictMixin(object):
115
+ __slots__ = ()
116
+
117
+ def mayRaiseException(self, exception_type):
118
+ for pair in self.subnode_pairs:
119
+ if pair.mayRaiseException(exception_type):
120
+ return True
121
+
122
+ return False
123
+
124
+ def isKnownToBeIterable(self, count):
125
+ return count is None or count == len(self.subnode_pairs)
126
+
127
+ def getIterationLength(self):
128
+ pair_count = len(self.subnode_pairs)
129
+
130
+ # Hashing may consume elements.
131
+ if pair_count > 1:
132
+ return None
133
+ else:
134
+ return pair_count
135
+
136
+ @staticmethod
137
+ def getIterationMinLength():
138
+ return 1
139
+
140
+ @staticmethod
141
+ def canPredictIterationValues():
142
+ # Dictionaries are assumed to be fully predictable
143
+
144
+ # TODO: For some things, that may not be true, when key collisions
145
+ # happen for example. We will have to check that then.
146
+ return True
147
+
148
+ def getIterationValue(self, count):
149
+ return self.subnode_pairs[count].getKeyNode()
150
+
151
+ def isMappingWithConstantStringKeys(self):
152
+ return all(pair.isKeyExpressionConstantStrRef() for pair in self.subnode_pairs)
153
+
154
+ def getMappingStringKeyPairs(self):
155
+ return [
156
+ (pair.getKeyCompileTimeConstant(), pair.getValueNode())
157
+ for pair in self.subnode_pairs
158
+ ]
159
+
160
+ # TODO: Make this happen from auto-compute, children only side effects
161
+ def computeExpressionDrop(self, statement, trace_collection):
162
+ # Virtual method overload, pylint: disable=unused-argument
163
+ expressions = []
164
+
165
+ for pair in self.subnode_pairs:
166
+ expressions.extend(pair.extractSideEffects())
167
+
168
+ result = makeStatementOnlyNodesFromExpressions(expressions=expressions)
169
+
170
+ del self.parent
171
+
172
+ return (
173
+ result,
174
+ "new_statements",
175
+ """\
176
+ Removed sequence creation for unused sequence.""",
177
+ )
178
+
179
+ # TODO: Missing computeExpressionIter1 here. For now it would require us to
180
+ # add lots of temporary variables for keys, which then becomes the tuple,
181
+ # but for as long as we don't have efficient forward propagation of these,
182
+ # we won't do that. Otherwise we loose execution order of values with them
183
+ # remaining as side effects. We could limit ourselves to cases where
184
+ # isMappingWithConstantStringKeys is true, or keys had no side effects, but
185
+ # that feels wasted effort as we are going to have full propagation.
186
+
187
+ @staticmethod
188
+ def computeExpressionIter1(iter_node, trace_collection):
189
+ return iter_node, None, None
190
+
191
+ def onContentEscapes(self, trace_collection):
192
+ for pair in self.subnode_pairs:
193
+ pair.onContentEscapes(trace_collection)
194
+
195
+
196
+ class ExpressionMakeDict(
197
+ ExpressionDictShapeExactMixin,
198
+ SideEffectsFromChildrenMixin,
199
+ ExpressionMakeDictMixin,
200
+ ChildrenExpressionMakeDictMixin,
201
+ ExpressionBase,
202
+ ):
203
+ kind = "EXPRESSION_MAKE_DICT"
204
+
205
+ named_children = ("pairs|tuple",)
206
+
207
+ def __init__(self, pairs, source_ref):
208
+ assert pairs
209
+
210
+ ChildrenExpressionMakeDictMixin.__init__(
211
+ self,
212
+ pairs=pairs,
213
+ )
214
+
215
+ ExpressionBase.__init__(self, source_ref)
216
+
217
+ def computeExpression(self, trace_collection):
218
+ pairs = self.subnode_pairs
219
+
220
+ is_constant = True
221
+
222
+ for pair in pairs:
223
+ if pair.isKeyKnownToBeHashable() is False:
224
+ # The ones with constant keys are hashable.
225
+ key = pair.subnode_key
226
+
227
+ side_effects = []
228
+
229
+ for pair2 in pairs:
230
+ side_effects.extend(pair2.extractSideEffects())
231
+
232
+ if pair2 is pair:
233
+ break
234
+
235
+ result = makeRaiseExceptionExpressionFromTemplate(
236
+ exception_type="TypeError",
237
+ template="unhashable type: '%s'",
238
+ template_args=makeExpressionAttributeLookup(
239
+ expression=key.extractUnhashableNodeType(),
240
+ attribute_name="__name__",
241
+ source_ref=key.source_ref,
242
+ ),
243
+ source_ref=key.source_ref,
244
+ )
245
+ result = wrapExpressionWithSideEffects(
246
+ side_effects=side_effects,
247
+ old_node=key,
248
+ new_node=result,
249
+ )
250
+
251
+ return (
252
+ result,
253
+ "new_raise",
254
+ "Dictionary key is known to not be hashable.",
255
+ )
256
+
257
+ if is_constant:
258
+ if not pair.isCompileTimeConstant():
259
+ is_constant = False
260
+
261
+ if not is_constant:
262
+ return self, None, None
263
+
264
+ constant_value = Constants.createConstantDict(
265
+ keys=[pair.getKeyCompileTimeConstant() for pair in pairs],
266
+ values=[pair.getValueCompileTimeConstant() for pair in pairs],
267
+ )
268
+
269
+ new_node = makeConstantReplacementNode(
270
+ constant=constant_value, node=self, user_provided=True
271
+ )
272
+
273
+ return (
274
+ new_node,
275
+ "new_constant",
276
+ """\
277
+ Created dictionary found to be constant.""",
278
+ )
279
+
280
+ @staticmethod
281
+ def getTruthValue():
282
+ # Cannot be empty
283
+ return True
284
+
285
+
286
+ class StatementDictOperationSetMixin(object):
287
+ __slots__ = ()
288
+
289
+ def computeStatementOperation(self, trace_collection):
290
+ key = self.subnode_key
291
+
292
+ if not key.isKnownToBeHashable():
293
+ # Any exception may be raised.
294
+ trace_collection.onExceptionRaiseExit(BaseException)
295
+
296
+ # TODO: Until we have proper dictionary tracing, do this.
297
+ trace_collection.removeKnowledge(self.subnode_dict_arg)
298
+
299
+ return self, None, None
300
+
301
+ def mayRaiseException(self, exception_type):
302
+ key = self.subnode_key
303
+
304
+ if not key.isKnownToBeHashable():
305
+ return True
306
+
307
+ if key.mayRaiseException(exception_type):
308
+ return True
309
+
310
+ value = self.subnode_value
311
+
312
+ if value.mayRaiseException(exception_type):
313
+ return True
314
+
315
+ return False
316
+
317
+ def mayRaiseExceptionOperation(self):
318
+ return not self.subnode_key.isKnownToBeHashable()
319
+
320
+
321
+ class StatementDictOperationSet(
322
+ StatementDictOperationSetMixin, StatementDictOperationSetBase
323
+ ):
324
+ kind = "STATEMENT_DICT_OPERATION_SET"
325
+
326
+ named_children = ("value", "dict_arg", "key")
327
+ auto_compute_handling = "operation"
328
+
329
+
330
+ class StatementDictOperationSetKeyValue(
331
+ StatementDictOperationSetMixin, StatementDictOperationSetKeyValueBase
332
+ ):
333
+ kind = "STATEMENT_DICT_OPERATION_SET_KEY_VALUE"
334
+
335
+ named_children = ("value", "dict_arg", "key")
336
+ auto_compute_handling = "operation"
337
+
338
+
339
+ class StatementDictOperationRemove(StatementDictOperationRemoveBase):
340
+ kind = "STATEMENT_DICT_OPERATION_REMOVE"
341
+
342
+ named_children = ("dict_arg", "key")
343
+ auto_compute_handling = "operation"
344
+
345
+ def computeStatementOperation(self, trace_collection):
346
+ # Any exception may be raised, we don't know if the key is present.
347
+ trace_collection.onExceptionRaiseExit(BaseException)
348
+
349
+ # TODO: Until we have proper dictionary tracing, do this.
350
+ trace_collection.removeKnowledge(self.subnode_dict_arg)
351
+
352
+ return self, None, None
353
+
354
+ def mayRaiseException(self, exception_type):
355
+ key = self.subnode_key
356
+
357
+ if not key.isKnownToBeHashable():
358
+ return True
359
+
360
+ if key.mayRaiseException(exception_type):
361
+ return True
362
+
363
+ # TODO: Could check dict for knowledge about keys.
364
+ return True
365
+
366
+
367
+ class ExpressionDictOperationPop2(ExpressionDictOperationPop2Base):
368
+ """This operation represents d.pop(key), i.e. default None."""
369
+
370
+ kind = "EXPRESSION_DICT_OPERATION_POP2"
371
+
372
+ __slots__ = ("known_hashable_key",)
373
+
374
+ def __init__(self, dict_arg, key, source_ref):
375
+ ExpressionDictOperationPop2Base.__init__(
376
+ self,
377
+ dict_arg=dict_arg,
378
+ key=key,
379
+ source_ref=source_ref,
380
+ )
381
+
382
+ self.known_hashable_key = None
383
+
384
+ def computeExpression(self, trace_collection):
385
+ dict_arg = self.subnode_dict_arg
386
+ key = self.subnode_key
387
+
388
+ if self.known_hashable_key is None:
389
+ self.known_hashable_key = key.isKnownToBeHashable()
390
+
391
+ if self.known_hashable_key is False:
392
+ trace_collection.onExceptionRaiseExit(BaseException)
393
+
394
+ return makeUnhashableExceptionReplacementExpression(
395
+ node=self,
396
+ key=key,
397
+ operation="dict.pop",
398
+ side_effects=(dict_arg, key),
399
+ )
400
+
401
+ # TODO: Check if dict_arg has key.
402
+
403
+ # TODO: Until we have proper dictionary tracing, do this.
404
+ trace_collection.removeKnowledge(dict_arg)
405
+
406
+ # TODO: Until we can know KeyError won't happen, but then we should change into
407
+ # something else.
408
+ trace_collection.onExceptionRaiseExit(BaseException)
409
+
410
+ # TODO: Check for "None" default and demote to ExpressionDictOperationSetdefault3 in
411
+ # that case.
412
+ return self, None, None
413
+
414
+ # TODO: These turn this into dictionary item removals, as value is unused.
415
+ # def computeExpressionDrop(self, statement, trace_collection):
416
+
417
+ # TODO: Might raise KeyError depending on dictionary.
418
+ @staticmethod
419
+ def mayRaiseException(exception_type):
420
+ return True
421
+
422
+ # if self.known_hashable_key is None:
423
+ # return True
424
+ # else:
425
+ # return self.subnode_dict_arg.mayRaiseException(
426
+ # exception_type
427
+ # ) or self.subnode_key.mayRaiseException(exception_type)
428
+
429
+
430
+ class ExpressionDictOperationPop3(ExpressionDictOperationPop3Base):
431
+ """This operation represents d.pop(key, default)."""
432
+
433
+ kind = "EXPRESSION_DICT_OPERATION_POP3"
434
+
435
+ __slots__ = ("known_hashable_key",)
436
+
437
+ def __init__(self, dict_arg, key, default, source_ref):
438
+ ExpressionDictOperationPop3Base.__init__(
439
+ self,
440
+ dict_arg=dict_arg,
441
+ key=key,
442
+ default=default,
443
+ source_ref=source_ref,
444
+ )
445
+
446
+ self.known_hashable_key = None
447
+
448
+ def computeExpression(self, trace_collection):
449
+ dict_arg = self.subnode_dict_arg
450
+ key = self.subnode_key
451
+
452
+ if self.known_hashable_key is None:
453
+ self.known_hashable_key = key.isKnownToBeHashable()
454
+
455
+ if self.known_hashable_key is False:
456
+ trace_collection.onExceptionRaiseExit(BaseException)
457
+
458
+ return makeUnhashableExceptionReplacementExpression(
459
+ node=self,
460
+ key=key,
461
+ operation="dict.pop",
462
+ side_effects=(dict_arg, key, self.subnode_default),
463
+ )
464
+
465
+ # TODO: Check if dict_arg has key
466
+
467
+ # TODO: Until we have proper dictionary tracing, do this.
468
+ trace_collection.removeKnowledge(dict_arg)
469
+
470
+ # TODO: Check for "None" default and demote to ExpressionDictOperationSetdefault3 in
471
+ # that case.
472
+ return self, None, None
473
+
474
+ # TODO: These turn this into dictionary item removals, as value is unused.
475
+ # def computeExpressionDrop(self, statement, trace_collection):
476
+
477
+ def mayRaiseException(self, exception_type):
478
+ if self.known_hashable_key is None:
479
+ return True
480
+ else:
481
+ return (
482
+ self.subnode_dict_arg.mayRaiseException(exception_type)
483
+ or self.subnode_key.mayRaiseException(exception_type)
484
+ or self.subnode_default.mayRaiseException(exception_type)
485
+ )
486
+
487
+
488
+ class ExpressionDictOperationPopitem(ExpressionDictOperationPopitemBase):
489
+ """This operation represents d.popitem()."""
490
+
491
+ kind = "EXPRESSION_DICT_OPERATION_POPITEM"
492
+
493
+ def computeExpression(self, trace_collection):
494
+ dict_arg = self.subnode_dict_arg
495
+
496
+ # TODO: Check if dict_arg is not empty.
497
+
498
+ # TODO: Until we have proper dictionary tracing, do this.
499
+ trace_collection.removeKnowledge(dict_arg)
500
+
501
+ # TODO: Until we can know KeyError won't happen, but then we should change into
502
+ # something else.
503
+ trace_collection.onExceptionRaiseExit(BaseException)
504
+
505
+ return self, None, None
506
+
507
+ # TODO: These turn this into dictionary item removal, as value is unused.
508
+ # def computeExpressionDrop(self, statement, trace_collection):
509
+
510
+ # TODO: Might raise KeyError depending on dictionary.
511
+ @staticmethod
512
+ def mayRaiseException(exception_type):
513
+ return True
514
+
515
+
516
+ class ExpressionDictOperationSetdefault2(ExpressionDictOperationSetdefault2Base):
517
+ """This operation represents d.setdefault(key), i.e. default None."""
518
+
519
+ kind = "EXPRESSION_DICT_OPERATION_SETDEFAULT2"
520
+
521
+ __slots__ = ("known_hashable_key",)
522
+
523
+ def __init__(self, dict_arg, key, source_ref):
524
+ ExpressionDictOperationSetdefault2Base.__init__(
525
+ self,
526
+ dict_arg=dict_arg,
527
+ key=key,
528
+ source_ref=source_ref,
529
+ )
530
+
531
+ self.known_hashable_key = None
532
+
533
+ def computeExpression(self, trace_collection):
534
+ dict_arg = self.subnode_dict_arg
535
+ key = self.subnode_key
536
+
537
+ if self.known_hashable_key is None:
538
+ self.known_hashable_key = key.isKnownToBeHashable()
539
+
540
+ if self.known_hashable_key is False:
541
+ trace_collection.onExceptionRaiseExit(BaseException)
542
+
543
+ return makeUnhashableExceptionReplacementExpression(
544
+ node=self,
545
+ key=key,
546
+ operation="dict.setdefault",
547
+ side_effects=(dict_arg, key),
548
+ )
549
+
550
+ # TODO: Check if dict_arg has key, and eliminate this node entirely
551
+ # if that's the case with hashing of the key as a remaining side effect
552
+ # though.
553
+
554
+ # TODO: Until we have proper dictionary tracing, do this.
555
+ trace_collection.removeKnowledge(dict_arg)
556
+
557
+ # TODO: Check for "None" default and demote to ExpressionDictOperationSetdefault3 in
558
+ # that case.
559
+ return self, None, None
560
+
561
+ def mayRaiseException(self, exception_type):
562
+ if self.known_hashable_key is not True:
563
+ return True
564
+ else:
565
+ return self.subnode_dict_arg.mayRaiseException(
566
+ exception_type
567
+ ) or self.subnode_key.mayRaiseException(exception_type)
568
+
569
+
570
+ class ExpressionDictOperationSetdefault3(ExpressionDictOperationSetdefault3Base):
571
+ """This operation represents d.setdefault(key, default)."""
572
+
573
+ kind = "EXPRESSION_DICT_OPERATION_SETDEFAULT3"
574
+
575
+ __slots__ = ("known_hashable_key",)
576
+
577
+ def __init__(self, dict_arg, key, default, source_ref):
578
+ ExpressionDictOperationSetdefault3Base.__init__(
579
+ self,
580
+ dict_arg=dict_arg,
581
+ key=key,
582
+ default=default,
583
+ source_ref=source_ref,
584
+ )
585
+
586
+ # TODO: Slots could be part of base class generation too.
587
+ self.known_hashable_key = None
588
+
589
+ def computeExpression(self, trace_collection):
590
+ dict_arg = self.subnode_dict_arg
591
+ key = self.subnode_key
592
+
593
+ if self.known_hashable_key is None:
594
+ self.known_hashable_key = key.isKnownToBeHashable()
595
+
596
+ if self.known_hashable_key is False:
597
+ trace_collection.onExceptionRaiseExit(BaseException)
598
+
599
+ return makeUnhashableExceptionReplacementExpression(
600
+ node=self,
601
+ key=key,
602
+ operation="dict.setdefault",
603
+ side_effects=(dict_arg, key, self.subnode_default),
604
+ )
605
+
606
+ # TODO: Check if dict_arg has key, and eliminate this node entirely
607
+ # if that's the case with hashing of the key as a remaining side effect
608
+ # though.
609
+
610
+ # TODO: Until we have proper dictionary tracing, do this.
611
+ trace_collection.removeKnowledge(dict_arg)
612
+
613
+ # TODO: Check for "None" default and demote to ExpressionDictOperationSetdefault3 in
614
+ # that case.
615
+ return self, None, None
616
+
617
+ def mayRaiseException(self, exception_type):
618
+ if self.known_hashable_key is not True:
619
+ return True
620
+ else:
621
+ return (
622
+ self.subnode_dict_arg.mayRaiseException(exception_type)
623
+ or self.subnode_key.mayRaiseException(exception_type)
624
+ or self.subnode_default.mayRaiseException(exception_type)
625
+ )
626
+
627
+
628
+ class ExpressionDictOperationItem(
629
+ ChildrenExpressionDictOperationItemMixin, ExpressionBase
630
+ ):
631
+ """This operation represents d[key] with an exception for missing key."""
632
+
633
+ kind = "EXPRESSION_DICT_OPERATION_ITEM"
634
+
635
+ named_children = ("dict_arg", "key")
636
+
637
+ def __init__(self, dict_arg, key, source_ref):
638
+ ChildrenExpressionDictOperationItemMixin.__init__(
639
+ self, dict_arg=dict_arg, key=key
640
+ )
641
+
642
+ ExpressionBase.__init__(self, source_ref)
643
+
644
+ def computeExpression(self, trace_collection):
645
+ dict_arg = self.subnode_dict_arg
646
+ key = self.subnode_key
647
+
648
+ if dict_arg.isCompileTimeConstant() and key.isCompileTimeConstant():
649
+ return trace_collection.getCompileTimeComputationResult(
650
+ node=self,
651
+ computation=lambda: self.getCompileTimeConstant()[
652
+ dict_arg.getCompileTimeConstant()[key.getCompileTimeConstant()]
653
+ ],
654
+ user_provided=dict_arg.user_provided,
655
+ description="Dictionary item lookup with constant key.",
656
+ )
657
+
658
+ # TODO: Only if the key is not hashable.
659
+ trace_collection.onExceptionRaiseExit(BaseException)
660
+
661
+ return self, None, None
662
+
663
+
664
+ class ExpressionDictOperationGet2(ExpressionDictOperationGet2Base):
665
+ """This operation represents d.get(key) with no exception for missing key but None default."""
666
+
667
+ kind = "EXPRESSION_DICT_OPERATION_GET2"
668
+
669
+ named_children = ("dict_arg", "key")
670
+
671
+ __slots__ = ("known_hashable_key",)
672
+
673
+ def __init__(self, dict_arg, key, source_ref):
674
+ ExpressionDictOperationGet2Base.__init__(
675
+ self, dict_arg=dict_arg, key=key, source_ref=source_ref
676
+ )
677
+
678
+ self.known_hashable_key = None
679
+
680
+ def computeExpression(self, trace_collection):
681
+ dict_arg = self.subnode_dict_arg
682
+ key = self.subnode_key
683
+
684
+ if self.known_hashable_key is None:
685
+ self.known_hashable_key = self.subnode_key.isKnownToBeHashable()
686
+
687
+ if self.known_hashable_key is False:
688
+ trace_collection.onExceptionRaiseExit(BaseException)
689
+
690
+ return makeUnhashableExceptionReplacementExpression(
691
+ node=self,
692
+ key=key,
693
+ operation="dict.get",
694
+ side_effects=(dict_arg, key),
695
+ )
696
+
697
+ if dict_arg.isCompileTimeConstant() and key.isCompileTimeConstant():
698
+ result = wrapExpressionWithSideEffects(
699
+ new_node=makeConstantReplacementNode(
700
+ constant=dict_arg.getCompileTimeConstant().get(
701
+ key.getCompileTimeConstant()
702
+ ),
703
+ node=self,
704
+ user_provided=dict_arg.user_provided,
705
+ ),
706
+ old_node=self,
707
+ side_effects=(dict_arg, key),
708
+ )
709
+
710
+ return (
711
+ result,
712
+ "new_expression",
713
+ "Compile time computed 'dict.get' on constant argument.",
714
+ )
715
+
716
+ if self.known_hashable_key is None:
717
+ trace_collection.onExceptionRaiseExit(BaseException)
718
+
719
+ return self, None, None
720
+
721
+ def mayRaiseException(self, exception_type):
722
+ if self.known_hashable_key is None:
723
+ return True
724
+ else:
725
+ return self.subnode_dict_arg.mayRaiseException(
726
+ exception_type
727
+ ) or self.subnode_key.mayRaiseException(exception_type)
728
+
729
+ def mayHaveSideEffects(self):
730
+ if self.known_hashable_key is None:
731
+ return True
732
+ else:
733
+ return (
734
+ self.subnode_dict_arg.mayHaveSideEffects()
735
+ or self.subnode_key.mayHaveSideEffects()
736
+ )
737
+
738
+ def extractSideEffects(self):
739
+ if self.known_hashable_key is None:
740
+ return (self,)
741
+ else:
742
+ return (
743
+ self.subnode_dict_arg.extractSideEffects()
744
+ + self.subnode_key.extractSideEffects()
745
+ )
746
+
747
+
748
+ class ExpressionDictOperationGet3(ExpressionDictOperationGet3Base):
749
+ """This operation represents d.get(key, default) with no exception for missing key but default value."""
750
+
751
+ kind = "EXPRESSION_DICT_OPERATION_GET3"
752
+
753
+ named_children = ("dict_arg", "key", "default")
754
+
755
+ __slots__ = ("known_hashable_key",)
756
+
757
+ def __init__(self, dict_arg, key, default, source_ref):
758
+ ExpressionDictOperationGet3Base.__init__(
759
+ self, dict_arg=dict_arg, key=key, default=default, source_ref=source_ref
760
+ )
761
+
762
+ self.known_hashable_key = None
763
+
764
+ def computeExpression(self, trace_collection):
765
+ dict_arg = self.subnode_dict_arg
766
+ key = self.subnode_key
767
+
768
+ if self.known_hashable_key is None:
769
+ self.known_hashable_key = key.isKnownToBeHashable()
770
+
771
+ if self.known_hashable_key is False:
772
+ trace_collection.onExceptionRaiseExit(BaseException)
773
+
774
+ return makeUnhashableExceptionReplacementExpression(
775
+ node=self,
776
+ key=key,
777
+ operation="dict.get",
778
+ side_effects=(dict_arg, key, self.subnode_default),
779
+ )
780
+
781
+ # TODO: With dictionary tracing, this could become more transparent.
782
+ if dict_arg.isCompileTimeConstant() and key.isCompileTimeConstant():
783
+ dict_value = dict_arg.getCompileTimeConstant()
784
+ key_value = key.getCompileTimeConstant()
785
+
786
+ if key_value in dict_value:
787
+ # Side effects of args must be retained, but it's not used.
788
+ result = wrapExpressionWithSideEffects(
789
+ new_node=makeConstantReplacementNode(
790
+ constant=dict_value[key_value],
791
+ node=self,
792
+ user_provided=dict_arg.user_provided,
793
+ ),
794
+ old_node=self,
795
+ side_effects=(
796
+ dict_arg,
797
+ key,
798
+ self.subnode_default,
799
+ ),
800
+ )
801
+
802
+ description = "Compile time computed 'dict.get' on constant argument to not use default."
803
+ else:
804
+ # Side effects of dict and key must be retained, but it's not used.
805
+ result = wrapExpressionWithSideEffects(
806
+ new_node=self.subnode_default,
807
+ old_node=self,
808
+ side_effects=(dict_arg, key),
809
+ )
810
+
811
+ description = "Compile time computed 'dict.get' on constant argument to use default."
812
+
813
+ return (result, "new_expression", description)
814
+
815
+ if self.known_hashable_key is None:
816
+ trace_collection.onExceptionRaiseExit(BaseException)
817
+
818
+ return self, None, None
819
+
820
+ def mayRaiseException(self, exception_type):
821
+ if self.known_hashable_key is None:
822
+ return True
823
+ else:
824
+ return (
825
+ self.subnode_dict_arg.mayRaiseException(exception_type)
826
+ or self.subnode_key.mayRaiseException(exception_type)
827
+ or self.subnode_default.mayRaiseException(exception_type)
828
+ )
829
+
830
+ def mayHaveSideEffects(self):
831
+ if self.known_hashable_key is None:
832
+ return True
833
+ else:
834
+ return (
835
+ self.subnode_dict_arg.mayHaveSideEffects()
836
+ or self.subnode_key.mayHaveSideEffects()
837
+ or self.subnode_default.mayHaveSideEffects()
838
+ )
839
+
840
+ def extractSideEffects(self):
841
+ if self.known_hashable_key is None:
842
+ return (self,)
843
+ else:
844
+ return (
845
+ self.subnode_dict_arg.extractSideEffects()
846
+ + self.subnode_key.extractSideEffects()
847
+ + self.subnode_defaults.extractSideEffects()
848
+ )
849
+
850
+
851
+ class ExpressionDictOperationCopy(
852
+ SideEffectsFromChildrenMixin,
853
+ ExpressionDictOperationCopyBase,
854
+ ):
855
+ kind = "EXPRESSION_DICT_OPERATION_COPY"
856
+
857
+ def computeExpression(self, trace_collection):
858
+ dict_arg = self.subnode_dict_arg
859
+
860
+ if dict_arg.isCompileTimeConstant():
861
+ result = makeConstantReplacementNode(
862
+ constant=dict_arg.getCompileTimeConstant().copy(),
863
+ node=self,
864
+ user_provided=dict_arg.user_provided,
865
+ )
866
+
867
+ return (
868
+ result,
869
+ "new_expression",
870
+ "Compile time computed 'dict.copy' on constant argument.",
871
+ )
872
+
873
+ trace_collection.onExceptionRaiseExit(BaseException)
874
+
875
+ return self, None, None
876
+
877
+ def mayRaiseException(self, exception_type):
878
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
879
+
880
+
881
+ class ExpressionDictOperationClear(ExpressionDictOperationClearBase):
882
+ kind = "EXPRESSION_DICT_OPERATION_CLEAR"
883
+
884
+ def computeExpression(self, trace_collection):
885
+ # Once we do dictionary tracing, we should tell it, we know its new value
886
+ # perfectly, and that we have no use for previous value.
887
+ # trace_collection.onDictionaryReplaceValueWithKnownValue(self.subnode_dict_arg, {})
888
+
889
+ return self, None, None
890
+
891
+ def mayRaiseException(self, exception_type):
892
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
893
+
894
+
895
+ class ExpressionDictOperationKeys(
896
+ SideEffectsFromChildrenMixin,
897
+ ExpressionDictOperationKeysBase,
898
+ ):
899
+ kind = "EXPRESSION_DICT_OPERATION_KEYS"
900
+
901
+ def computeExpression(self, trace_collection):
902
+ dict_arg = self.subnode_dict_arg
903
+
904
+ if dict_arg.isCompileTimeConstant():
905
+ result = makeConstantReplacementNode(
906
+ constant=dict_arg.getCompileTimeConstant().keys(),
907
+ node=self,
908
+ user_provided=dict_arg.user_provided,
909
+ )
910
+
911
+ return (
912
+ result,
913
+ "new_expression",
914
+ "Compile time computed 'dict.keys' on constant argument.",
915
+ )
916
+
917
+ return self, None, None
918
+
919
+ def mayRaiseException(self, exception_type):
920
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
921
+
922
+
923
+ class ExpressionDictOperationViewkeys(
924
+ SideEffectsFromChildrenMixin, ExpressionDictOperationViewkeysBase
925
+ ):
926
+ kind = "EXPRESSION_DICT_OPERATION_VIEWKEYS"
927
+
928
+ def computeExpression(self, trace_collection):
929
+ trace_collection.onExceptionRaiseExit(BaseException)
930
+
931
+ return self, None, None
932
+
933
+ @staticmethod
934
+ def getTypeShape():
935
+ # TODO: Actually iterator that yields key values
936
+ return tshape_iterator
937
+
938
+ def mayRaiseException(self, exception_type):
939
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
940
+
941
+
942
+ class ExpressionDictOperationIterkeys(
943
+ SideEffectsFromChildrenMixin, ExpressionDictOperationIterkeysBase
944
+ ):
945
+ kind = "EXPRESSION_DICT_OPERATION_ITERKEYS"
946
+
947
+ def computeExpression(self, trace_collection):
948
+ trace_collection.onExceptionRaiseExit(BaseException)
949
+
950
+ return self, None, None
951
+
952
+ @staticmethod
953
+ def getTypeShape():
954
+ # TODO: Actually iterator yield keys
955
+ return tshape_iterator
956
+
957
+ def mayRaiseException(self, exception_type):
958
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
959
+
960
+
961
+ class ExpressionDictOperationValues(
962
+ SideEffectsFromChildrenMixin,
963
+ ExpressionDictOperationValuesBase,
964
+ ):
965
+ kind = "EXPRESSION_DICT_OPERATION_VALUES"
966
+
967
+ def computeExpression(self, trace_collection):
968
+ dict_arg = self.subnode_dict_arg
969
+
970
+ if dict_arg.isCompileTimeConstant():
971
+ result = makeConstantReplacementNode(
972
+ constant=dict_arg.getCompileTimeConstant().values(),
973
+ node=self,
974
+ user_provided=dict_arg.user_provided,
975
+ )
976
+
977
+ return (
978
+ result,
979
+ "new_expression",
980
+ "Compile time computed 'dict.values' on constant argument.",
981
+ )
982
+
983
+ return self, None, None
984
+
985
+ def mayRaiseException(self, exception_type):
986
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
987
+
988
+
989
+ class ExpressionDictOperationViewvalues(
990
+ SideEffectsFromChildrenMixin, ExpressionDictOperationViewvaluesBase
991
+ ):
992
+ kind = "EXPRESSION_DICT_OPERATION_VIEWVALUES"
993
+
994
+ def computeExpression(self, trace_collection):
995
+ trace_collection.onExceptionRaiseExit(BaseException)
996
+
997
+ return self, None, None
998
+
999
+ @staticmethod
1000
+ def getTypeShape():
1001
+ # TODO: Actually iterator that yields key values
1002
+ return tshape_iterator
1003
+
1004
+ def mayRaiseException(self, exception_type):
1005
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
1006
+
1007
+
1008
+ class ExpressionDictOperationItervalues(
1009
+ SideEffectsFromChildrenMixin, ExpressionDictOperationItervaluesBase
1010
+ ):
1011
+ kind = "EXPRESSION_DICT_OPERATION_ITERVALUES"
1012
+
1013
+ def computeExpression(self, trace_collection):
1014
+ trace_collection.onExceptionRaiseExit(BaseException)
1015
+
1016
+ return self, None, None
1017
+
1018
+ @staticmethod
1019
+ def getTypeShape():
1020
+ # TODO: Actually the iterator yield values.
1021
+ return tshape_iterator
1022
+
1023
+ def mayRaiseException(self, exception_type):
1024
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
1025
+
1026
+
1027
+ class ExpressionDictOperationItems(
1028
+ SideEffectsFromChildrenMixin,
1029
+ ExpressionDictOperationItemsBase,
1030
+ ):
1031
+ kind = "EXPRESSION_DICT_OPERATION_ITEMS"
1032
+
1033
+ def computeExpression(self, trace_collection):
1034
+ dict_arg = self.subnode_dict_arg
1035
+
1036
+ if dict_arg.isCompileTimeConstant():
1037
+ result = makeConstantReplacementNode(
1038
+ constant=dict_arg.getCompileTimeConstant().items(),
1039
+ node=self,
1040
+ user_provided=dict_arg.user_provided,
1041
+ )
1042
+
1043
+ return (
1044
+ result,
1045
+ "new_expression",
1046
+ "Compile time computed 'dict.items' on constant argument.",
1047
+ )
1048
+
1049
+ return self, None, None
1050
+
1051
+ def mayRaiseException(self, exception_type):
1052
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
1053
+
1054
+
1055
+ class ExpressionDictOperationIteritems(
1056
+ SideEffectsFromChildrenMixin, ExpressionDictOperationIteritemsBase
1057
+ ):
1058
+ kind = "EXPRESSION_DICT_OPERATION_ITERITEMS"
1059
+
1060
+ def computeExpression(self, trace_collection):
1061
+ trace_collection.onExceptionRaiseExit(BaseException)
1062
+
1063
+ return self, None, None
1064
+
1065
+ @staticmethod
1066
+ def getTypeShape():
1067
+ # TODO: Actually iterator that yields 2 element tuples, add shapes
1068
+ # for that too.
1069
+ return tshape_iterator
1070
+
1071
+ def mayRaiseException(self, exception_type):
1072
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
1073
+
1074
+
1075
+ class ExpressionDictOperationViewitems(
1076
+ SideEffectsFromChildrenMixin, ExpressionDictOperationViewitemsBase
1077
+ ):
1078
+ kind = "EXPRESSION_DICT_OPERATION_VIEWITEMS"
1079
+
1080
+ def computeExpression(self, trace_collection):
1081
+ trace_collection.onExceptionRaiseExit(BaseException)
1082
+
1083
+ return self, None, None
1084
+
1085
+ @staticmethod
1086
+ def getTypeShape():
1087
+ # TODO: Actually iterator that yields key values
1088
+ return tshape_iterator
1089
+
1090
+ def mayRaiseException(self, exception_type):
1091
+ return self.subnode_dict_arg.mayRaiseException(exception_type)
1092
+
1093
+
1094
+ class ExpressionDictOperationUpdate2(ExpressionDictOperationUpdate2Base):
1095
+ """This operation represents d.update(iterable)."""
1096
+
1097
+ kind = "EXPRESSION_DICT_OPERATION_UPDATE2"
1098
+
1099
+ def __init__(self, dict_arg, iterable, source_ref):
1100
+ # TODO: Change generation of attribute nodes to pass it like this already.
1101
+ if type(iterable) is tuple:
1102
+ (iterable,) = iterable
1103
+
1104
+ ExpressionDictOperationUpdate2Base.__init__(
1105
+ self,
1106
+ dict_arg=dict_arg,
1107
+ iterable=iterable,
1108
+ source_ref=source_ref,
1109
+ )
1110
+
1111
+ def computeExpression(self, trace_collection):
1112
+ # TODO: Until we have proper dictionary tracing, do this.
1113
+ trace_collection.removeKnowledge(self.subnode_dict_arg)
1114
+ # TODO: Using it might change it, unfortunately
1115
+ trace_collection.removeKnowledge(self.subnode_iterable)
1116
+
1117
+ # TODO: Until we can know iteration error won't happen, but then we should change into
1118
+ # something else.
1119
+ trace_collection.onExceptionRaiseExit(BaseException)
1120
+
1121
+ # TODO: Check empty, and remove itself if that's the case.
1122
+ return self, None, None
1123
+
1124
+ # TODO: Might raise non-iterable depending on value shape, or not hashable from content.
1125
+ @staticmethod
1126
+ def mayRaiseException(exception_type):
1127
+ return True
1128
+
1129
+
1130
+ def makeExpressionDictOperationUpdate3(dict_arg, iterable, pairs, source_ref):
1131
+ # Artefact of star argument parsing iterable, where it is also optional
1132
+ # revolved on the outside here
1133
+ if type(iterable) is tuple:
1134
+ if not iterable:
1135
+ iterable = None
1136
+ else:
1137
+ (iterable,) = iterable
1138
+
1139
+ if iterable is not None:
1140
+ return ExpressionDictOperationUpdate3(dict_arg, iterable, pairs, source_ref)
1141
+ else:
1142
+ return ExpressionDictOperationUpdatePairs(dict_arg, pairs, source_ref)
1143
+
1144
+
1145
+ class ExpressionDictOperationUpdate3(ExpressionDictOperationUpdate3Base):
1146
+ """This operation represents d.update(iterable, **pairs)."""
1147
+
1148
+ kind = "EXPRESSION_DICT_OPERATION_UPDATE3"
1149
+
1150
+ def __init__(self, dict_arg, iterable, pairs, source_ref):
1151
+ ExpressionDictOperationUpdate3Base.__init__(
1152
+ self,
1153
+ dict_arg=dict_arg,
1154
+ iterable=iterable,
1155
+ pairs=pairs,
1156
+ source_ref=source_ref,
1157
+ )
1158
+
1159
+ def computeExpression(self, trace_collection):
1160
+ # TODO: Until we have proper dictionary tracing, do this.
1161
+ trace_collection.removeKnowledge(self.subnode_dict_arg)
1162
+ # TODO: Using it might change it, unfortunately
1163
+ # TODO: When iterable is empty, this should be specialized further to
1164
+ # ExpressionDictOperationUpdatePairs
1165
+ trace_collection.removeKnowledge(self.subnode_iterable)
1166
+
1167
+ for pair in self.subnode_pairs:
1168
+ trace_collection.removeKnowledge(pair)
1169
+
1170
+ # TODO: Until we can know iteration error won't happen, but then we should change into
1171
+ # something else.
1172
+ trace_collection.onExceptionRaiseExit(BaseException)
1173
+
1174
+ # TODO: Check empty, and remove itself if that's the case.
1175
+ return self, None, None
1176
+
1177
+ # TODO: Might raise non-iterable depending on value shape, or not hashable from content.
1178
+ @staticmethod
1179
+ def mayRaiseException(exception_type):
1180
+ return True
1181
+
1182
+
1183
+ class ExpressionDictOperationUpdatePairs(
1184
+ ChildrenExpressionDictOperationUpdatePairsMixin, ExpressionBase
1185
+ ):
1186
+ """This operation represents d.update(iterable, **pairs)."""
1187
+
1188
+ kind = "EXPRESSION_DICT_OPERATION_UPDATE_PAIRS"
1189
+
1190
+ named_children = ("dict_arg", "pairs|tuple")
1191
+
1192
+ def __init__(self, dict_arg, pairs, source_ref):
1193
+ ChildrenExpressionDictOperationUpdatePairsMixin.__init__(
1194
+ self,
1195
+ dict_arg=dict_arg,
1196
+ pairs=pairs,
1197
+ )
1198
+
1199
+ ExpressionBase.__init__(self, source_ref)
1200
+
1201
+ def computeExpression(self, trace_collection):
1202
+ # TODO: Until we have proper dictionary tracing, do this.
1203
+ trace_collection.removeKnowledge(self.subnode_dict_arg)
1204
+ # TODO: Using it might change it, unfortunately
1205
+ # TODO: When iterable is empty, this should be specialized further.
1206
+
1207
+ for pair in self.subnode_pairs:
1208
+ trace_collection.removeKnowledge(pair)
1209
+
1210
+ # TODO: Until we can know KeyError won't happen, but then we should change into
1211
+ # something else.
1212
+ trace_collection.onExceptionRaiseExit(BaseException)
1213
+
1214
+ # TODO: Check empty, and remove itself if that's the case.
1215
+ return self, None, None
1216
+
1217
+ # TODO: Might raise non-iterable depending on value shape, or not hashable from content.
1218
+ @staticmethod
1219
+ def mayRaiseException(exception_type):
1220
+ return True
1221
+
1222
+
1223
+ class StatementDictOperationUpdate(StatementDictOperationUpdateBase):
1224
+ """Update dict value.
1225
+
1226
+ This is mainly used for re-formulations, where a dictionary
1227
+ update will be performed on what is known not to be a
1228
+ general mapping.
1229
+ """
1230
+
1231
+ kind = "STATEMENT_DICT_OPERATION_UPDATE"
1232
+
1233
+ named_children = ("dict_arg", "value")
1234
+ auto_compute_handling = "operation"
1235
+
1236
+ def computeStatementOperation(self, trace_collection):
1237
+ # TODO: Until we have proper dictionary tracing, do this.
1238
+ trace_collection.removeKnowledge(self.subnode_dict_arg)
1239
+ # TODO: Using it might change it, unfortunately
1240
+ trace_collection.removeKnowledge(self.subnode_value)
1241
+
1242
+ # TODO: Until we can know iteration error won't happen, but then we should change into
1243
+ # something else.
1244
+ trace_collection.onExceptionRaiseExit(BaseException)
1245
+
1246
+ # TODO: Check empty, and remove itself if that's the case.
1247
+ return self, None, None
1248
+
1249
+
1250
+ def makeUnhashableExceptionReplacementExpression(node, key, side_effects, operation):
1251
+ unhashable_type_name = (
1252
+ key.extractUnhashableNodeType().getCompileTimeConstant().__name__
1253
+ )
1254
+ result = makeRaiseExceptionReplacementExpression(
1255
+ expression=node,
1256
+ exception_type="TypeError",
1257
+ exception_value="unhashable type: '%s'" % unhashable_type_name,
1258
+ )
1259
+ result = wrapExpressionWithSideEffects(
1260
+ side_effects=side_effects,
1261
+ old_node=node,
1262
+ new_node=result,
1263
+ )
1264
+
1265
+ return (
1266
+ result,
1267
+ "new_raise",
1268
+ "Dictionary operation '%s' with key of type '%s' that is known to not be hashable."
1269
+ % (operation, unhashable_type_name),
1270
+ )
1271
+
1272
+
1273
+ class ExpressionDictOperationInNotInUncertainMixin(object):
1274
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
1275
+ __slots__ = ()
1276
+
1277
+ def computeExpression(self, trace_collection):
1278
+ if self.known_hashable_key is None:
1279
+ self.known_hashable_key = self.subnode_key.isKnownToBeHashable()
1280
+
1281
+ if self.known_hashable_key is False:
1282
+ trace_collection.onExceptionRaiseExit(BaseException)
1283
+
1284
+ return makeUnhashableExceptionReplacementExpression(
1285
+ node=self,
1286
+ key=self.subnode_key,
1287
+ operation="in (dict)",
1288
+ side_effects=self.getVisitableNodes(),
1289
+ )
1290
+
1291
+ if self.known_hashable_key is None:
1292
+ trace_collection.onExceptionRaiseExit(BaseException)
1293
+
1294
+ if self.subnode_key.isCompileTimeConstant():
1295
+ truth_value = self.subnode_dict_arg.getExpressionDictInConstant(
1296
+ self.subnode_key.getCompileTimeConstant()
1297
+ )
1298
+
1299
+ if truth_value is not None:
1300
+ # TODO: Ugly that this code is not drawing from derived class methods.
1301
+ if "NOT" in self.kind:
1302
+ truth_value = not truth_value
1303
+
1304
+ result = wrapExpressionWithSideEffects(
1305
+ new_node=makeConstantReplacementNode(
1306
+ constant=truth_value, node=self, user_provided=True
1307
+ ),
1308
+ old_node=self,
1309
+ side_effects=self.getVisitableNodes(),
1310
+ )
1311
+
1312
+ return result, "new_constant", "Predicted dict 'in' truth value"
1313
+
1314
+ return self, None, None
1315
+
1316
+ def mayRaiseException(self, exception_type):
1317
+ return (
1318
+ self.subnode_key.mayRaiseException(exception_type)
1319
+ or self.subnode_dict_arg.mayRaiseException(exception_type)
1320
+ or self.known_hashable_key is not True
1321
+ )
1322
+
1323
+ def mayHaveSideEffects(self):
1324
+ return self.mayRaiseException(BaseException)
1325
+
1326
+ def extractSideEffects(self):
1327
+ if self.known_hashable_key is not True:
1328
+ return (self,)
1329
+ else:
1330
+ # No side effects at all but from the children.
1331
+ result = []
1332
+
1333
+ # The order of evaluation is different for "in" and "has_key", so we go
1334
+ # through visitable nodes.
1335
+ for child in self.getVisitableNodes():
1336
+ result.extend(child.extractSideEffects())
1337
+
1338
+ return tuple(result)
1339
+
1340
+
1341
+ class ExpressionDictOperationInNotInUncertainBase(
1342
+ ExpressionDictOperationInNotInUncertainMixin,
1343
+ ExpressionBoolShapeExactMixin,
1344
+ ChildrenHavingKeyDictArgMixin,
1345
+ ExpressionBase,
1346
+ ):
1347
+ # Follows the reversed nature of "in", with the dictionary on the right
1348
+ # side of things.
1349
+ named_children = ("key", "dict_arg")
1350
+
1351
+ __slots__ = ("known_hashable_key",)
1352
+
1353
+ def __init__(self, key, dict_arg, source_ref):
1354
+ ChildrenHavingKeyDictArgMixin.__init__(
1355
+ self,
1356
+ key=key,
1357
+ dict_arg=dict_arg,
1358
+ )
1359
+
1360
+ ExpressionBase.__init__(self, source_ref)
1361
+
1362
+ self.known_hashable_key = None
1363
+
1364
+
1365
+ class ExpressionDictOperationIn(ExpressionDictOperationInNotInUncertainBase):
1366
+ kind = "EXPRESSION_DICT_OPERATION_IN"
1367
+
1368
+
1369
+ class ExpressionDictOperationNotIn(ExpressionDictOperationInNotInUncertainBase):
1370
+ kind = "EXPRESSION_DICT_OPERATION_NOT_IN"
1371
+
1372
+
1373
+ class ExpressionDictOperationHaskey(
1374
+ ExpressionDictOperationInNotInUncertainMixin,
1375
+ ExpressionDictOperationHaskeyBase,
1376
+ ):
1377
+ kind = "EXPRESSION_DICT_OPERATION_HASKEY"
1378
+
1379
+ # Different order of arguments.
1380
+ named_children = ("dict_arg", "key")
1381
+
1382
+ __slots__ = ("known_hashable_key",)
1383
+
1384
+ def __init__(self, key, dict_arg, source_ref):
1385
+ ExpressionDictOperationHaskeyBase.__init__(
1386
+ self, key=key, dict_arg=dict_arg, source_ref=source_ref
1387
+ )
1388
+
1389
+ self.known_hashable_key = None
1390
+
1391
+
1392
+ class ExpressionDictOperationFromkeys2(ExpressionDictOperationFromkeys2Base):
1393
+ kind = "EXPRESSION_DICT_OPERATION_FROMKEYS2"
1394
+
1395
+ def computeExpression(self, trace_collection):
1396
+ if self.mayRaiseExceptionOperation():
1397
+ trace_collection.onExceptionRaiseExit(BaseException)
1398
+
1399
+ if self.subnode_iterable.isCompileTimeConstant():
1400
+ # TODO: Could be assert against it being None with a compile time constant,
1401
+ # we will usually be able to tell?
1402
+ # This is actually OK to use like this, pylint: disable=bad-chained-comparison
1403
+ if None is not self.subnode_iterable.getIterationLength() < 256:
1404
+ return trace_collection.getCompileTimeComputationResult(
1405
+ node=self,
1406
+ computation=lambda: dict.fromkeys(
1407
+ self.subnode_iterable.getCompileTimeConstant()
1408
+ ),
1409
+ description="Computed 'dict.fromkeys' with constant value.",
1410
+ )
1411
+
1412
+ return self, None, None
1413
+
1414
+ def mayRaiseException(self, exception_type):
1415
+ return (
1416
+ self.subnode_iterable.mayRaiseException(exception_type)
1417
+ or self.mayRaiseExceptionOperation()
1418
+ )
1419
+
1420
+ def mayRaiseExceptionOperation(self):
1421
+ # This is actually OK to use like this, pylint: disable=bad-chained-comparison
1422
+ return None is not self.subnode_iterable.getIterationLength() < 256
1423
+
1424
+
1425
+ class ExpressionDictOperationFromkeys3(ExpressionDictOperationFromkeys3Base):
1426
+ kind = "EXPRESSION_DICT_OPERATION_FROMKEYS3"
1427
+
1428
+ def computeExpression(self, trace_collection):
1429
+ if self.mayRaiseExceptionOperation():
1430
+ trace_collection.onExceptionRaiseExit(BaseException)
1431
+
1432
+ if (
1433
+ self.subnode_iterable.isCompileTimeConstant()
1434
+ and self.subnode_value.isCompileTimeConstant()
1435
+ ):
1436
+ # TODO: Could be assert against it being None with a compile time constant,
1437
+ # we will usually be able to tell?
1438
+ # This is actually OK to use like this, pylint: disable=bad-chained-comparison
1439
+ if None is not self.subnode_iterable.getIterationLength() < 256:
1440
+ return trace_collection.getCompileTimeComputationResult(
1441
+ node=self,
1442
+ computation=lambda: dict.fromkeys(
1443
+ self.subnode_iterable.getCompileTimeConstant(),
1444
+ self.subnode_value.getCompileTimeConstant(),
1445
+ ),
1446
+ description="Computed 'dict.fromkeys' with constant values.",
1447
+ )
1448
+
1449
+ return self, None, None
1450
+
1451
+ def mayRaiseException(self, exception_type):
1452
+ return (
1453
+ self.subnode_iterable.mayRaiseException(exception_type)
1454
+ or self.subnode_value.mayRaiseException(exception_type)
1455
+ or self.mayRaiseExceptionOperation()
1456
+ )
1457
+
1458
+ def mayRaiseExceptionOperation(self):
1459
+ # This is actually OK to use like this, pylint: disable=bad-chained-comparison
1460
+ return None is not self.subnode_iterable.getIterationLength() < 256
1461
+
1462
+
1463
+ class ExpressionDictOperationFromkeysRef(ExpressionNoSideEffectsMixin, ExpressionBase):
1464
+ kind = "EXPRESSION_DICT_OPERATION_FROMKEYS_REF"
1465
+
1466
+ def finalize(self):
1467
+ del self.parent
1468
+
1469
+ def computeExpressionRaw(self, trace_collection):
1470
+ return self, None, None
1471
+
1472
+ def computeExpressionCall(self, call_node, call_args, call_kw, trace_collection):
1473
+ # Anything may happen. On next pass, if replaced, we might be better
1474
+ # but not now.
1475
+ trace_collection.onExceptionRaiseExit(BaseException)
1476
+
1477
+ def wrapExpressionDictOperationFromkeys(iterable, value, source_ref):
1478
+ if value is None:
1479
+ return ExpressionDictOperationFromkeys2(
1480
+ iterable=iterable, source_ref=source_ref
1481
+ )
1482
+ else:
1483
+ return ExpressionDictOperationFromkeys3(
1484
+ iterable=iterable, value=value, source_ref=source_ref
1485
+ )
1486
+
1487
+ result = extractBuiltinArgs(
1488
+ node=call_node,
1489
+ builtin_class=wrapExpressionDictOperationFromkeys,
1490
+ builtin_spec=dict_fromkeys_spec,
1491
+ )
1492
+
1493
+ return trace_collection.computedExpressionResult(
1494
+ expression=result,
1495
+ change_tags="new_expression",
1496
+ change_desc="Call to 'dict.fromkeys' recognized.",
1497
+ )
1498
+
1499
+
1500
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
1501
+ # integrates with CPython, but also works on its own.
1502
+ #
1503
+ # Licensed under the Apache License, Version 2.0 (the "License");
1504
+ # you may not use this file except in compliance with the License.
1505
+ # You may obtain a copy of the License at
1506
+ #
1507
+ # http://www.apache.org/licenses/LICENSE-2.0
1508
+ #
1509
+ # Unless required by applicable law or agreed to in writing, software
1510
+ # distributed under the License is distributed on an "AS IS" BASIS,
1511
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1512
+ # See the License for the specific language governing permissions and
1513
+ # limitations under the License.