Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__cp311-cp311-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 (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +93 -54
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,938 @@
1
+ "Usage: unparse.py <path to source file>"
2
+ from __future__ import print_function, unicode_literals
3
+ import six
4
+ import sys
5
+ import ast
6
+ import os
7
+ import tokenize
8
+ from six import StringIO
9
+ from six.moves import cStringIO
10
+
11
+ # Large float and imaginary literals get turned into infinities in the AST.
12
+ # We unparse those infinities to INFSTR.
13
+ INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1)
14
+
15
+
16
+ def interleave(inter, f, seq):
17
+ """Call f on each item in seq, calling inter() in between."""
18
+ seq = iter(seq)
19
+ try:
20
+ f(next(seq))
21
+ except StopIteration:
22
+ pass
23
+ else:
24
+ for x in seq:
25
+ inter()
26
+ f(x)
27
+
28
+
29
+ class Unparser:
30
+ """Methods in this class recursively traverse an AST and
31
+ output source code for the abstract syntax; original formatting
32
+ is disregarded."""
33
+
34
+ def __init__(self, tree, file=sys.stdout):
35
+ """Unparser(tree, file=sys.stdout) -> None.
36
+ Print the source for tree to file."""
37
+ self.f = file
38
+ self.future_imports = []
39
+ self._indent = 0
40
+ self.dispatch(tree)
41
+ print("", file=self.f)
42
+ self.f.flush()
43
+
44
+ def fill(self, text=""):
45
+ "Indent a piece of text, according to the current indentation level"
46
+ self.f.write("\n" + " " * self._indent + text)
47
+
48
+ def write(self, text):
49
+ "Append a piece of text to the current line."
50
+ self.f.write(six.text_type(text))
51
+
52
+ def enter(self):
53
+ "Print ':', and increase the indentation."
54
+ self.write(":")
55
+ self._indent += 1
56
+
57
+ def leave(self):
58
+ "Decrease the indentation level."
59
+ self._indent -= 1
60
+
61
+ def dispatch(self, tree):
62
+ "Dispatcher function, dispatching tree type T to method _T."
63
+ if isinstance(tree, list):
64
+ for t in tree:
65
+ self.dispatch(t)
66
+ return
67
+ meth = getattr(self, "_" + tree.__class__.__name__)
68
+ meth(tree)
69
+
70
+ ############### Unparsing methods ######################
71
+ # There should be one method per concrete grammar type #
72
+ # Constructors should be grouped by sum type. Ideally, #
73
+ # this would follow the order in the grammar, but #
74
+ # currently doesn't. #
75
+ ########################################################
76
+
77
+ def _Module(self, tree):
78
+ for stmt in tree.body:
79
+ self.dispatch(stmt)
80
+
81
+ def _Interactive(self, tree):
82
+ for stmt in tree.body:
83
+ self.dispatch(stmt)
84
+
85
+ def _Expression(self, tree):
86
+ self.dispatch(tree.body)
87
+
88
+ # stmt
89
+ def _Expr(self, tree):
90
+ self.fill()
91
+ self.dispatch(tree.value)
92
+
93
+ def _NamedExpr(self, tree):
94
+ self.write("(")
95
+ self.dispatch(tree.target)
96
+ self.write(" := ")
97
+ self.dispatch(tree.value)
98
+ self.write(")")
99
+
100
+ def _Import(self, t):
101
+ self.fill("import ")
102
+ interleave(lambda: self.write(", "), self.dispatch, t.names)
103
+
104
+ def _ImportFrom(self, t):
105
+ # A from __future__ import may affect unparsing, so record it.
106
+ if t.module and t.module == "__future__":
107
+ self.future_imports.extend(n.name for n in t.names)
108
+
109
+ self.fill("from ")
110
+ self.write("." * t.level)
111
+ if t.module:
112
+ self.write(t.module)
113
+ self.write(" import ")
114
+ interleave(lambda: self.write(", "), self.dispatch, t.names)
115
+
116
+ def _Assign(self, t):
117
+ self.fill()
118
+ for target in t.targets:
119
+ self.dispatch(target)
120
+ self.write(" = ")
121
+ self.dispatch(t.value)
122
+
123
+ def _AugAssign(self, t):
124
+ self.fill()
125
+ self.dispatch(t.target)
126
+ self.write(" " + self.binop[t.op.__class__.__name__] + "= ")
127
+ self.dispatch(t.value)
128
+
129
+ def _AnnAssign(self, t):
130
+ self.fill()
131
+ if not t.simple and isinstance(t.target, ast.Name):
132
+ self.write("(")
133
+ self.dispatch(t.target)
134
+ if not t.simple and isinstance(t.target, ast.Name):
135
+ self.write(")")
136
+ self.write(": ")
137
+ self.dispatch(t.annotation)
138
+ if t.value:
139
+ self.write(" = ")
140
+ self.dispatch(t.value)
141
+
142
+ def _Return(self, t):
143
+ self.fill("return")
144
+ if t.value:
145
+ self.write(" ")
146
+ self.dispatch(t.value)
147
+
148
+ def _Pass(self, t):
149
+ self.fill("pass")
150
+
151
+ def _Break(self, t):
152
+ self.fill("break")
153
+
154
+ def _Continue(self, t):
155
+ self.fill("continue")
156
+
157
+ def _Delete(self, t):
158
+ self.fill("del ")
159
+ interleave(lambda: self.write(", "), self.dispatch, t.targets)
160
+
161
+ def _Assert(self, t):
162
+ self.fill("assert ")
163
+ self.dispatch(t.test)
164
+ if t.msg:
165
+ self.write(", ")
166
+ self.dispatch(t.msg)
167
+
168
+ def _Exec(self, t):
169
+ self.fill("exec ")
170
+ self.dispatch(t.body)
171
+ if t.globals:
172
+ self.write(" in ")
173
+ self.dispatch(t.globals)
174
+ if t.locals:
175
+ self.write(", ")
176
+ self.dispatch(t.locals)
177
+
178
+ def _Print(self, t):
179
+ self.fill("print ")
180
+ do_comma = False
181
+ if t.dest:
182
+ self.write(">>")
183
+ self.dispatch(t.dest)
184
+ do_comma = True
185
+ for e in t.values:
186
+ if do_comma:
187
+ self.write(", ")
188
+ else:
189
+ do_comma = True
190
+ self.dispatch(e)
191
+ if not t.nl:
192
+ self.write(",")
193
+
194
+ def _Global(self, t):
195
+ self.fill("global ")
196
+ interleave(lambda: self.write(", "), self.write, t.names)
197
+
198
+ def _Nonlocal(self, t):
199
+ self.fill("nonlocal ")
200
+ interleave(lambda: self.write(", "), self.write, t.names)
201
+
202
+ def _Await(self, t):
203
+ self.write("(")
204
+ self.write("await")
205
+ if t.value:
206
+ self.write(" ")
207
+ self.dispatch(t.value)
208
+ self.write(")")
209
+
210
+ def _Yield(self, t):
211
+ self.write("(")
212
+ self.write("yield")
213
+ if t.value:
214
+ self.write(" ")
215
+ self.dispatch(t.value)
216
+ self.write(")")
217
+
218
+ def _YieldFrom(self, t):
219
+ self.write("(")
220
+ self.write("yield from")
221
+ if t.value:
222
+ self.write(" ")
223
+ self.dispatch(t.value)
224
+ self.write(")")
225
+
226
+ def _Raise(self, t):
227
+ self.fill("raise")
228
+ if six.PY3:
229
+ if not t.exc:
230
+ assert not t.cause
231
+ return
232
+ self.write(" ")
233
+ self.dispatch(t.exc)
234
+ if t.cause:
235
+ self.write(" from ")
236
+ self.dispatch(t.cause)
237
+ else:
238
+ self.write(" ")
239
+ if t.type:
240
+ self.dispatch(t.type)
241
+ if t.inst:
242
+ self.write(", ")
243
+ self.dispatch(t.inst)
244
+ if t.tback:
245
+ self.write(", ")
246
+ self.dispatch(t.tback)
247
+
248
+ def _Try(self, t):
249
+ self.fill("try")
250
+ self.enter()
251
+ self.dispatch(t.body)
252
+ self.leave()
253
+ for ex in t.handlers:
254
+ self.dispatch(ex)
255
+ if t.orelse:
256
+ self.fill("else")
257
+ self.enter()
258
+ self.dispatch(t.orelse)
259
+ self.leave()
260
+ if t.finalbody:
261
+ self.fill("finally")
262
+ self.enter()
263
+ self.dispatch(t.finalbody)
264
+ self.leave()
265
+
266
+ def _TryExcept(self, t):
267
+ self.fill("try")
268
+ self.enter()
269
+ self.dispatch(t.body)
270
+ self.leave()
271
+
272
+ for ex in t.handlers:
273
+ self.dispatch(ex)
274
+ if t.orelse:
275
+ self.fill("else")
276
+ self.enter()
277
+ self.dispatch(t.orelse)
278
+ self.leave()
279
+
280
+ def _TryFinally(self, t):
281
+ if len(t.body) == 1 and isinstance(t.body[0], ast.TryExcept):
282
+ # try-except-finally
283
+ self.dispatch(t.body)
284
+ else:
285
+ self.fill("try")
286
+ self.enter()
287
+ self.dispatch(t.body)
288
+ self.leave()
289
+
290
+ self.fill("finally")
291
+ self.enter()
292
+ self.dispatch(t.finalbody)
293
+ self.leave()
294
+
295
+ def _ExceptHandler(self, t):
296
+ self.fill("except")
297
+ if t.type:
298
+ self.write(" ")
299
+ self.dispatch(t.type)
300
+ if t.name:
301
+ self.write(" as ")
302
+ if six.PY3:
303
+ self.write(t.name)
304
+ else:
305
+ self.dispatch(t.name)
306
+ self.enter()
307
+ self.dispatch(t.body)
308
+ self.leave()
309
+
310
+ def _ClassDef(self, t):
311
+ self.write("\n")
312
+ for deco in t.decorator_list:
313
+ self.fill("@")
314
+ self.dispatch(deco)
315
+ self.fill("class " + t.name)
316
+ if six.PY3:
317
+ self.write("(")
318
+ comma = False
319
+ for e in t.bases:
320
+ if comma:
321
+ self.write(", ")
322
+ else:
323
+ comma = True
324
+ self.dispatch(e)
325
+ for e in t.keywords:
326
+ if comma:
327
+ self.write(", ")
328
+ else:
329
+ comma = True
330
+ self.dispatch(e)
331
+ if sys.version_info[:2] < (3, 5):
332
+ if t.starargs:
333
+ if comma:
334
+ self.write(", ")
335
+ else:
336
+ comma = True
337
+ self.write("*")
338
+ self.dispatch(t.starargs)
339
+ if t.kwargs:
340
+ if comma:
341
+ self.write(", ")
342
+ else:
343
+ comma = True
344
+ self.write("**")
345
+ self.dispatch(t.kwargs)
346
+ self.write(")")
347
+ elif t.bases:
348
+ self.write("(")
349
+ for a in t.bases:
350
+ self.dispatch(a)
351
+ self.write(", ")
352
+ self.write(")")
353
+ self.enter()
354
+ self.dispatch(t.body)
355
+ self.leave()
356
+
357
+ def _FunctionDef(self, t):
358
+ self.__FunctionDef_helper(t, "def")
359
+
360
+ def _AsyncFunctionDef(self, t):
361
+ self.__FunctionDef_helper(t, "async def")
362
+
363
+ def __FunctionDef_helper(self, t, fill_suffix):
364
+ self.write("\n")
365
+ for deco in t.decorator_list:
366
+ self.fill("@")
367
+ self.dispatch(deco)
368
+ def_str = fill_suffix + " " + t.name + "("
369
+ self.fill(def_str)
370
+ self.dispatch(t.args)
371
+ self.write(")")
372
+ if getattr(t, "returns", False):
373
+ self.write(" -> ")
374
+ self.dispatch(t.returns)
375
+ self.enter()
376
+ self.dispatch(t.body)
377
+ self.leave()
378
+
379
+ def _For(self, t):
380
+ self.__For_helper("for ", t)
381
+
382
+ def _AsyncFor(self, t):
383
+ self.__For_helper("async for ", t)
384
+
385
+ def __For_helper(self, fill, t):
386
+ self.fill(fill)
387
+ self.dispatch(t.target)
388
+ self.write(" in ")
389
+ self.dispatch(t.iter)
390
+ self.enter()
391
+ self.dispatch(t.body)
392
+ self.leave()
393
+ if t.orelse:
394
+ self.fill("else")
395
+ self.enter()
396
+ self.dispatch(t.orelse)
397
+ self.leave()
398
+
399
+ def _If(self, t):
400
+ self.fill("if ")
401
+ self.dispatch(t.test)
402
+ self.enter()
403
+ self.dispatch(t.body)
404
+ self.leave()
405
+ # collapse nested ifs into equivalent elifs.
406
+ while t.orelse and len(t.orelse) == 1 and isinstance(t.orelse[0], ast.If):
407
+ t = t.orelse[0]
408
+ self.fill("elif ")
409
+ self.dispatch(t.test)
410
+ self.enter()
411
+ self.dispatch(t.body)
412
+ self.leave()
413
+ # final else
414
+ if t.orelse:
415
+ self.fill("else")
416
+ self.enter()
417
+ self.dispatch(t.orelse)
418
+ self.leave()
419
+
420
+ def _While(self, t):
421
+ self.fill("while ")
422
+ self.dispatch(t.test)
423
+ self.enter()
424
+ self.dispatch(t.body)
425
+ self.leave()
426
+ if t.orelse:
427
+ self.fill("else")
428
+ self.enter()
429
+ self.dispatch(t.orelse)
430
+ self.leave()
431
+
432
+ def _generic_With(self, t, async_=False):
433
+ self.fill("async with " if async_ else "with ")
434
+ if hasattr(t, "items"):
435
+ interleave(lambda: self.write(", "), self.dispatch, t.items)
436
+ else:
437
+ self.dispatch(t.context_expr)
438
+ if t.optional_vars:
439
+ self.write(" as ")
440
+ self.dispatch(t.optional_vars)
441
+ self.enter()
442
+ self.dispatch(t.body)
443
+ self.leave()
444
+
445
+ def _With(self, t):
446
+ self._generic_With(t)
447
+
448
+ def _AsyncWith(self, t):
449
+ self._generic_With(t, async_=True)
450
+
451
+ # expr
452
+ def _Bytes(self, t):
453
+ self.write(repr(t.s))
454
+
455
+ def _Str(self, tree):
456
+ if six.PY3:
457
+ self.write(repr(tree.s))
458
+ else:
459
+ # if from __future__ import unicode_literals is in effect,
460
+ # then we want to output string literals using a 'b' prefix
461
+ # and unicode literals with no prefix.
462
+ if "unicode_literals" not in self.future_imports:
463
+ self.write(repr(tree.s))
464
+ elif isinstance(tree.s, str):
465
+ self.write("b" + repr(tree.s))
466
+ elif isinstance(tree.s, unicode):
467
+ self.write(repr(tree.s).lstrip("u"))
468
+ else:
469
+ assert False, "shouldn't get here"
470
+
471
+ def _JoinedStr(self, t):
472
+ # JoinedStr(expr* values)
473
+ self.write("f")
474
+ string = StringIO()
475
+ self._fstring_JoinedStr(t, string.write)
476
+ # Deviation from `unparse.py`: Try to find an unused quote.
477
+ # This change is made to handle _very_ complex f-strings.
478
+ v = string.getvalue()
479
+ if "\n" in v or "\r" in v:
480
+ quote_types = ["'''", '"""']
481
+ else:
482
+ quote_types = ["'", '"', '"""', "'''"]
483
+ for quote_type in quote_types:
484
+ if quote_type not in v:
485
+ v = "{quote_type}{v}{quote_type}".format(quote_type=quote_type, v=v)
486
+ break
487
+ else:
488
+ v = repr(v)
489
+ self.write(v)
490
+
491
+ def _FormattedValue(self, t):
492
+ # FormattedValue(expr value, int? conversion, expr? format_spec)
493
+ self.write("f")
494
+ string = StringIO()
495
+ self._fstring_JoinedStr(t, string.write)
496
+ self.write(repr(string.getvalue()))
497
+
498
+ def _fstring_JoinedStr(self, t, write):
499
+ for value in t.values:
500
+ meth = getattr(self, "_fstring_" + type(value).__name__)
501
+ meth(value, write)
502
+
503
+ def _fstring_Str(self, t, write):
504
+ value = t.s.replace("{", "{{").replace("}", "}}")
505
+ write(value)
506
+
507
+ def _fstring_Constant(self, t, write):
508
+ assert isinstance(t.value, str)
509
+ value = t.value.replace("{", "{{").replace("}", "}}")
510
+ write(value)
511
+
512
+ def _fstring_FormattedValue(self, t, write):
513
+ write("{")
514
+ expr = StringIO()
515
+ Unparser(t.value, expr)
516
+ expr = expr.getvalue().rstrip("\n")
517
+ if expr.startswith("{"):
518
+ write(" ") # Separate pair of opening brackets as "{ {"
519
+ write(expr)
520
+ if t.conversion != -1:
521
+ conversion = chr(t.conversion)
522
+ assert conversion in "sra"
523
+ write("!{conversion}".format(conversion=conversion))
524
+ if t.format_spec:
525
+ write(":")
526
+ meth = getattr(self, "_fstring_" + type(t.format_spec).__name__)
527
+ meth(t.format_spec, write)
528
+ write("}")
529
+
530
+ def _Name(self, t):
531
+ self.write(t.id)
532
+
533
+ def _NameConstant(self, t):
534
+ self.write(repr(t.value))
535
+
536
+ def _Repr(self, t):
537
+ self.write("`")
538
+ self.dispatch(t.value)
539
+ self.write("`")
540
+
541
+ def _write_constant(self, value):
542
+ if isinstance(value, (float, complex)):
543
+ # Substitute overflowing decimal literal for AST infinities.
544
+ self.write(repr(value).replace("inf", INFSTR))
545
+ else:
546
+ self.write(repr(value))
547
+
548
+ def _Constant(self, t):
549
+ value = t.value
550
+ if isinstance(value, tuple):
551
+ self.write("(")
552
+ if len(value) == 1:
553
+ self._write_constant(value[0])
554
+ self.write(",")
555
+ else:
556
+ interleave(lambda: self.write(", "), self._write_constant, value)
557
+ self.write(")")
558
+ elif value is Ellipsis: # instead of `...` for Py2 compatibility
559
+ self.write("...")
560
+ else:
561
+ if t.kind == "u":
562
+ self.write("u")
563
+ self._write_constant(t.value)
564
+
565
+ def _Num(self, t):
566
+ repr_n = repr(t.n)
567
+ if six.PY3:
568
+ self.write(repr_n.replace("inf", INFSTR))
569
+ else:
570
+ # Parenthesize negative numbers, to avoid turning (-1)**2 into -1**2.
571
+ if repr_n.startswith("-"):
572
+ self.write("(")
573
+ if "inf" in repr_n and repr_n.endswith("*j"):
574
+ repr_n = repr_n.replace("*j", "j")
575
+ # Substitute overflowing decimal literal for AST infinities.
576
+ self.write(repr_n.replace("inf", INFSTR))
577
+ if repr_n.startswith("-"):
578
+ self.write(")")
579
+
580
+ def _List(self, t):
581
+ self.write("[")
582
+ interleave(lambda: self.write(", "), self.dispatch, t.elts)
583
+ self.write("]")
584
+
585
+ def _ListComp(self, t):
586
+ self.write("[")
587
+ self.dispatch(t.elt)
588
+ for gen in t.generators:
589
+ self.dispatch(gen)
590
+ self.write("]")
591
+
592
+ def _GeneratorExp(self, t):
593
+ self.write("(")
594
+ self.dispatch(t.elt)
595
+ for gen in t.generators:
596
+ self.dispatch(gen)
597
+ self.write(")")
598
+
599
+ def _SetComp(self, t):
600
+ self.write("{")
601
+ self.dispatch(t.elt)
602
+ for gen in t.generators:
603
+ self.dispatch(gen)
604
+ self.write("}")
605
+
606
+ def _DictComp(self, t):
607
+ self.write("{")
608
+ self.dispatch(t.key)
609
+ self.write(": ")
610
+ self.dispatch(t.value)
611
+ for gen in t.generators:
612
+ self.dispatch(gen)
613
+ self.write("}")
614
+
615
+ def _comprehension(self, t):
616
+ if getattr(t, "is_async", False):
617
+ self.write(" async for ")
618
+ else:
619
+ self.write(" for ")
620
+ self.dispatch(t.target)
621
+ self.write(" in ")
622
+ self.dispatch(t.iter)
623
+ for if_clause in t.ifs:
624
+ self.write(" if ")
625
+ self.dispatch(if_clause)
626
+
627
+ def _IfExp(self, t):
628
+ self.write("(")
629
+ self.dispatch(t.body)
630
+ self.write(" if ")
631
+ self.dispatch(t.test)
632
+ self.write(" else ")
633
+ self.dispatch(t.orelse)
634
+ self.write(")")
635
+
636
+ def _Set(self, t):
637
+ assert t.elts # should be at least one element
638
+ self.write("{")
639
+ interleave(lambda: self.write(", "), self.dispatch, t.elts)
640
+ self.write("}")
641
+
642
+ def _Dict(self, t):
643
+ self.write("{")
644
+
645
+ def write_key_value_pair(k, v):
646
+ self.dispatch(k)
647
+ self.write(": ")
648
+ self.dispatch(v)
649
+
650
+ def write_item(item):
651
+ k, v = item
652
+ if k is None:
653
+ # for dictionary unpacking operator in dicts {**{'y': 2}}
654
+ # see PEP 448 for details
655
+ self.write("**")
656
+ self.dispatch(v)
657
+ else:
658
+ write_key_value_pair(k, v)
659
+
660
+ interleave(lambda: self.write(", "), write_item, zip(t.keys, t.values))
661
+ self.write("}")
662
+
663
+ def _Tuple(self, t):
664
+ self.write("(")
665
+ if len(t.elts) == 1:
666
+ elt = t.elts[0]
667
+ self.dispatch(elt)
668
+ self.write(",")
669
+ else:
670
+ interleave(lambda: self.write(", "), self.dispatch, t.elts)
671
+ self.write(")")
672
+
673
+ unop = {"Invert": "~", "Not": "not", "UAdd": "+", "USub": "-"}
674
+
675
+ def _UnaryOp(self, t):
676
+ self.write("(")
677
+ self.write(self.unop[t.op.__class__.__name__])
678
+ self.write(" ")
679
+ if six.PY2 and isinstance(t.op, ast.USub) and isinstance(t.operand, ast.Num):
680
+ # If we're applying unary minus to a number, parenthesize the number.
681
+ # This is necessary: -2147483648 is different from -(2147483648) on
682
+ # a 32-bit machine (the first is an int, the second a long), and
683
+ # -7j is different from -(7j). (The first has real part 0.0, the second
684
+ # has real part -0.0.)
685
+ self.write("(")
686
+ self.dispatch(t.operand)
687
+ self.write(")")
688
+ else:
689
+ self.dispatch(t.operand)
690
+ self.write(")")
691
+
692
+ binop = {
693
+ "Add": "+",
694
+ "Sub": "-",
695
+ "Mult": "*",
696
+ "MatMult": "@",
697
+ "Div": "/",
698
+ "Mod": "%",
699
+ "LShift": "<<",
700
+ "RShift": ">>",
701
+ "BitOr": "|",
702
+ "BitXor": "^",
703
+ "BitAnd": "&",
704
+ "FloorDiv": "//",
705
+ "Pow": "**",
706
+ }
707
+
708
+ def _BinOp(self, t):
709
+ self.write("(")
710
+ self.dispatch(t.left)
711
+ self.write(" " + self.binop[t.op.__class__.__name__] + " ")
712
+ self.dispatch(t.right)
713
+ self.write(")")
714
+
715
+ cmpops = {
716
+ "Eq": "==",
717
+ "NotEq": "!=",
718
+ "Lt": "<",
719
+ "LtE": "<=",
720
+ "Gt": ">",
721
+ "GtE": ">=",
722
+ "Is": "is",
723
+ "IsNot": "is not",
724
+ "In": "in",
725
+ "NotIn": "not in",
726
+ }
727
+
728
+ def _Compare(self, t):
729
+ self.write("(")
730
+ self.dispatch(t.left)
731
+ for o, e in zip(t.ops, t.comparators):
732
+ self.write(" " + self.cmpops[o.__class__.__name__] + " ")
733
+ self.dispatch(e)
734
+ self.write(")")
735
+
736
+ boolops = {ast.And: "and", ast.Or: "or"}
737
+
738
+ def _BoolOp(self, t):
739
+ self.write("(")
740
+ s = " %s " % self.boolops[t.op.__class__]
741
+ interleave(lambda: self.write(s), self.dispatch, t.values)
742
+ self.write(")")
743
+
744
+ def _Attribute(self, t):
745
+ self.dispatch(t.value)
746
+ # Special case: 3.__abs__() is a syntax error, so if t.value
747
+ # is an integer literal then we need to either parenthesize
748
+ # it or add an extra space to get 3 .__abs__().
749
+ if isinstance(
750
+ t.value, getattr(ast, "Constant", getattr(ast, "Num", None))
751
+ ) and isinstance(t.value.n, int):
752
+ self.write(" ")
753
+ self.write(".")
754
+ self.write(t.attr)
755
+
756
+ def _Call(self, t):
757
+ self.dispatch(t.func)
758
+ self.write("(")
759
+ comma = False
760
+ for e in t.args:
761
+ if comma:
762
+ self.write(", ")
763
+ else:
764
+ comma = True
765
+ self.dispatch(e)
766
+ for e in t.keywords:
767
+ if comma:
768
+ self.write(", ")
769
+ else:
770
+ comma = True
771
+ self.dispatch(e)
772
+ if sys.version_info[:2] < (3, 5):
773
+ if t.starargs:
774
+ if comma:
775
+ self.write(", ")
776
+ else:
777
+ comma = True
778
+ self.write("*")
779
+ self.dispatch(t.starargs)
780
+ if t.kwargs:
781
+ if comma:
782
+ self.write(", ")
783
+ else:
784
+ comma = True
785
+ self.write("**")
786
+ self.dispatch(t.kwargs)
787
+ self.write(")")
788
+
789
+ def _Subscript(self, t):
790
+ self.dispatch(t.value)
791
+ self.write("[")
792
+ self.dispatch(t.slice)
793
+ self.write("]")
794
+
795
+ def _Starred(self, t):
796
+ self.write("*")
797
+ self.dispatch(t.value)
798
+
799
+ # slice
800
+ def _Ellipsis(self, t):
801
+ self.write("...")
802
+
803
+ def _Index(self, t):
804
+ self.dispatch(t.value)
805
+
806
+ def _Slice(self, t):
807
+ if t.lower:
808
+ self.dispatch(t.lower)
809
+ self.write(":")
810
+ if t.upper:
811
+ self.dispatch(t.upper)
812
+ if t.step:
813
+ self.write(":")
814
+ self.dispatch(t.step)
815
+
816
+ def _ExtSlice(self, t):
817
+ interleave(lambda: self.write(", "), self.dispatch, t.dims)
818
+
819
+ # argument
820
+ def _arg(self, t):
821
+ self.write(t.arg)
822
+ if t.annotation:
823
+ self.write(": ")
824
+ self.dispatch(t.annotation)
825
+
826
+ # others
827
+ def _arguments(self, t):
828
+ first = True
829
+ # normal arguments
830
+ all_args = getattr(t, "posonlyargs", []) + t.args
831
+ defaults = [None] * (len(all_args) - len(t.defaults)) + t.defaults
832
+ for index, elements in enumerate(zip(all_args, defaults), 1):
833
+ a, d = elements
834
+ if first:
835
+ first = False
836
+ else:
837
+ self.write(", ")
838
+ self.dispatch(a)
839
+ if d:
840
+ self.write("=")
841
+ self.dispatch(d)
842
+ if index == len(getattr(t, "posonlyargs", ())):
843
+ self.write(", /")
844
+
845
+ # varargs, or bare '*' if no varargs but keyword-only arguments present
846
+ if t.vararg or getattr(t, "kwonlyargs", False):
847
+ if first:
848
+ first = False
849
+ else:
850
+ self.write(", ")
851
+ self.write("*")
852
+ if t.vararg:
853
+ if hasattr(t.vararg, "arg"):
854
+ self.write(t.vararg.arg)
855
+ if t.vararg.annotation:
856
+ self.write(": ")
857
+ self.dispatch(t.vararg.annotation)
858
+ else:
859
+ self.write(t.vararg)
860
+ if getattr(t, "varargannotation", None):
861
+ self.write(": ")
862
+ self.dispatch(t.varargannotation)
863
+
864
+ # keyword-only arguments
865
+ if getattr(t, "kwonlyargs", False):
866
+ for a, d in zip(t.kwonlyargs, t.kw_defaults):
867
+ if first:
868
+ first = False
869
+ else:
870
+ self.write(", ")
871
+ self.dispatch(a),
872
+ if d:
873
+ self.write("=")
874
+ self.dispatch(d)
875
+
876
+ # kwargs
877
+ if t.kwarg:
878
+ if first:
879
+ first = False
880
+ else:
881
+ self.write(", ")
882
+ if hasattr(t.kwarg, "arg"):
883
+ self.write("**" + t.kwarg.arg)
884
+ if t.kwarg.annotation:
885
+ self.write(": ")
886
+ self.dispatch(t.kwarg.annotation)
887
+ else:
888
+ self.write("**" + t.kwarg)
889
+ if getattr(t, "kwargannotation", None):
890
+ self.write(": ")
891
+ self.dispatch(t.kwargannotation)
892
+
893
+ def _keyword(self, t):
894
+ if t.arg is None:
895
+ # starting from Python 3.5 this denotes a kwargs part of the invocation
896
+ self.write("**")
897
+ else:
898
+ self.write(t.arg)
899
+ self.write("=")
900
+ self.dispatch(t.value)
901
+
902
+ def _Lambda(self, t):
903
+ self.write("(")
904
+ self.write("lambda ")
905
+ self.dispatch(t.args)
906
+ self.write(": ")
907
+ self.dispatch(t.body)
908
+ self.write(")")
909
+
910
+ def _alias(self, t):
911
+ self.write(t.name)
912
+ if t.asname:
913
+ self.write(" as " + t.asname)
914
+
915
+ def _withitem(self, t):
916
+ self.dispatch(t.context_expr)
917
+ if t.optional_vars:
918
+ self.write(" as ")
919
+ self.dispatch(t.optional_vars)
920
+
921
+
922
+ def roundtrip(filename, output=sys.stdout):
923
+ if six.PY3:
924
+ with open(filename, "rb") as pyfile:
925
+ encoding = tokenize.detect_encoding(pyfile.readline)[0]
926
+ with open(filename, "r", encoding=encoding) as pyfile:
927
+ source = pyfile.read()
928
+ else:
929
+ with open(filename, "r") as pyfile:
930
+ source = pyfile.read()
931
+ tree = compile(source, filename, "exec", ast.PyCF_ONLY_AST, dont_inherit=True)
932
+ Unparser(tree, output)
933
+
934
+
935
+ def unparse(tree):
936
+ v = cStringIO()
937
+ Unparser(tree, file=v)
938
+ return v.getvalue()