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
@@ -1,20 +1,6 @@
1
- # Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- #
3
- # Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- # integrates with CPython, but also works on its own.
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
1
+ # Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+
18
4
  """ Standard plug-in to avoid bloat at compile time.
19
5
 
20
6
  Nuitka hard codes stupid monkey patching normally not needed here and avoids
@@ -23,23 +9,24 @@ that to be done and causing massive degradations.
23
9
  """
24
10
 
25
11
  import ast
26
- import os
27
12
  import re
28
- import sys
29
13
 
30
14
  from nuitka.containers.OrderedDicts import OrderedDict
31
15
  from nuitka.Errors import NuitkaForbiddenImportEncounter
32
16
  from nuitka.ModuleRegistry import getModuleByName
33
- from nuitka.plugins.PluginBase import NuitkaPluginBase
17
+ from nuitka.Options import isExperimental
18
+ from nuitka.plugins.YamlPluginBase import NuitkaYamlPluginBase
34
19
  from nuitka.utils.ModuleNames import ModuleName
35
- from nuitka.utils.Yaml import getYamlPackageConfiguration
36
20
 
37
- # spell-checker: ignore dask,numba,statsmodels,matplotlib,sqlalchemy,ipykernel
21
+ # spell-checker: ignore dask,numba,statsmodels,matplotlib,sqlalchemy,ipykernel,pyximport
38
22
 
39
23
  _mode_choices = ("error", "warning", "nofollow", "allow")
40
24
 
41
25
 
42
- class NuitkaPluginAntiBloat(NuitkaPluginBase):
26
+ class NuitkaPluginAntiBloat(NuitkaYamlPluginBase):
27
+ # Lots of details, a bunch of state is cached and tracked across functions
28
+ # pylint: disable=too-many-instance-attributes
29
+
43
30
  plugin_name = "anti-bloat"
44
31
  plugin_desc = (
45
32
  "Patch stupid imports out of widely used library modules source codes."
@@ -54,6 +41,7 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
54
41
  noinclude_setuptools_mode,
55
42
  noinclude_pytest_mode,
56
43
  noinclude_unittest_mode,
44
+ noinclude_pydoc_mode,
57
45
  noinclude_ipython_mode,
58
46
  noinclude_dask_mode,
59
47
  noinclude_numba_mode,
@@ -61,7 +49,10 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
61
49
  custom_choices,
62
50
  show_changes,
63
51
  ):
64
- # Many details, due to many repetitive arguments, pylint: disable=too-many-branches,too-many-statements
52
+ # Many details, due to many repetitive arguments,
53
+ # pylint: disable=too-many-branches,too-many-locals,too-many-statements
54
+
55
+ NuitkaYamlPluginBase.__init__(self)
65
56
 
66
57
  self.show_changes = show_changes
67
58
 
@@ -72,6 +63,8 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
72
63
  noinclude_pytest_mode = noinclude_default_mode
73
64
  if noinclude_unittest_mode is None:
74
65
  noinclude_unittest_mode = noinclude_default_mode
66
+ if noinclude_pydoc_mode is None:
67
+ noinclude_pydoc_mode = noinclude_default_mode
75
68
  if noinclude_ipython_mode is None:
76
69
  noinclude_ipython_mode = noinclude_default_mode
77
70
  if noinclude_dask_mode is None:
@@ -79,8 +72,6 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
79
72
  if noinclude_numba_mode is None:
80
73
  noinclude_numba_mode = noinclude_default_mode
81
74
 
82
- self.config = getYamlPackageConfiguration()
83
-
84
75
  self.handled_modules = OrderedDict()
85
76
 
86
77
  # These should be checked, to allow disabling anti-bloat contents.
@@ -92,6 +83,38 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
92
83
  noinclude_setuptools_mode,
93
84
  "setuptools",
94
85
  )
86
+ self.handled_modules["triton"] = (
87
+ noinclude_setuptools_mode,
88
+ "setuptools",
89
+ )
90
+ self.handled_modules["Cython"] = (
91
+ noinclude_setuptools_mode,
92
+ "setuptools",
93
+ )
94
+ self.handled_modules["cython"] = (
95
+ noinclude_setuptools_mode,
96
+ "setuptools",
97
+ )
98
+ self.handled_modules["pyximport"] = (
99
+ noinclude_setuptools_mode,
100
+ "setuptools",
101
+ )
102
+ self.handled_modules["paddle.utils.cpp_extension"] = (
103
+ noinclude_setuptools_mode,
104
+ "setuptools",
105
+ )
106
+ self.handled_modules["torch.utils.cpp_extension"] = (
107
+ noinclude_setuptools_mode,
108
+ "setuptools",
109
+ )
110
+ self.handled_modules["numpy.distutils"] = (
111
+ noinclude_setuptools_mode,
112
+ "setuptools",
113
+ )
114
+ self.handled_modules["wheel.util"] = (
115
+ noinclude_setuptools_mode,
116
+ "setuptools",
117
+ )
95
118
  else:
96
119
  self.control_tags["use_setuptools"] = True
97
120
 
@@ -109,6 +132,10 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
109
132
  noinclude_pytest_mode,
110
133
  "pytest",
111
134
  )
135
+ self.handled_modules["distributed.utils_test"] = (
136
+ noinclude_pytest_mode,
137
+ "pytest",
138
+ )
112
139
  else:
113
140
  self.control_tags["use_pytest"] = True
114
141
 
@@ -124,6 +151,14 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
124
151
  noinclude_unittest_mode,
125
152
  "unittest",
126
153
  )
154
+ self.handled_modules["keras.src.testing_infra"] = (
155
+ noinclude_unittest_mode,
156
+ "unittest",
157
+ )
158
+ self.handled_modules["tf_keras.src.testing_infra"] = (
159
+ noinclude_unittest_mode,
160
+ "unittest",
161
+ )
127
162
  else:
128
163
  self.control_tags["use_unittest"] = True
129
164
 
@@ -138,6 +173,10 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
138
173
  noinclude_ipython_mode,
139
174
  "IPython",
140
175
  )
176
+ self.handled_modules["altair._magics"] = (
177
+ noinclude_ipython_mode,
178
+ "IPython",
179
+ )
141
180
  else:
142
181
  self.control_tags["use_ipython"] = True
143
182
 
@@ -147,6 +186,11 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
147
186
  else:
148
187
  self.control_tags["use_dask"] = True
149
188
 
189
+ if noinclude_pydoc_mode != "allow":
190
+ self.handled_modules["pydoc"] = noinclude_pydoc_mode, "pydoc"
191
+ else:
192
+ self.control_tags["use_pydoc"] = True
193
+
150
194
  if noinclude_numba_mode != "allow":
151
195
  self.handled_modules["numba"] = noinclude_numba_mode, "numba"
152
196
  self.handled_modules["sparse"] = noinclude_numba_mode, "numba"
@@ -199,6 +243,12 @@ form 'module_name:[%s]'."""
199
243
  # information given for that.
200
244
  self.no_auto_follows = {}
201
245
 
246
+ # Keep track of modules prevented from being followed at all.
247
+ self.no_follows = OrderedDict()
248
+
249
+ # Cache execution context for anti-bloat configs.
250
+ self.context_codes = {}
251
+
202
252
  def getEvaluationConditionControlTags(self):
203
253
  return self.control_tags
204
254
 
@@ -221,7 +271,7 @@ form 'module_name:[%s]'."""
221
271
  dest="show_changes",
222
272
  default=False,
223
273
  help="""\
224
- Annotate what changes are by the plugin done.""",
274
+ Annotate what changes are done by the plugin.""",
225
275
  )
226
276
 
227
277
  group.add_option(
@@ -257,6 +307,17 @@ What to do if a unittest import is encountered. This package can be big with
257
307
  dependencies, and should definitely be avoided.""",
258
308
  )
259
309
 
310
+ group.add_option(
311
+ "--noinclude-pydoc-mode",
312
+ action="store",
313
+ dest="noinclude_pydoc_mode",
314
+ choices=_mode_choices,
315
+ default=None,
316
+ help="""\
317
+ What to do if a pydoc import is encountered. This package use is mark of useless
318
+ code for deployments and should be avoided.""",
319
+ )
320
+
260
321
  group.add_option(
261
322
  "--noinclude-IPython-mode",
262
323
  action="store",
@@ -313,73 +374,64 @@ which can and should be a top level package and then one choice, "error",
313
374
  "warning", "nofollow", e.g. PyQt5:error.""",
314
375
  )
315
376
 
377
+ def _getContextCode(self, module_name, anti_bloat_config):
378
+ context_code = anti_bloat_config.get("context", "")
379
+ if type(context_code) in (tuple, list):
380
+ context_code = "\n".join(context_code)
381
+
382
+ if context_code not in self.context_codes:
383
+ context = {}
384
+
385
+ try:
386
+ # We trust the yaml files, pylint: disable=exec-used
387
+ exec(context_code, context)
388
+ except Exception as e: # pylint: disable=broad-except
389
+ self.sysexit(
390
+ """\
391
+ Error, cannot exec module '%s', context code '%s' due to: %s"""
392
+ % (module_name, context_code, e)
393
+ )
394
+
395
+ self.context_codes[context_code] = context
396
+
397
+ return dict(self.context_codes[context_code])
398
+
316
399
  def _onModuleSourceCode(self, module_name, anti_bloat_config, source_code):
317
- # Complex dealing with many cases, pylint: disable=too-many-branches,too-many-locals,too-many-statements
400
+ # Complex dealing with many cases, pylint: disable=too-many-branches
318
401
 
319
402
  description = anti_bloat_config.get("description", "description not given")
320
403
 
321
404
  # To allow detection if it did anything.
322
405
  change_count = 0
323
406
 
324
- context = {"sys": sys, "os": os}
325
-
326
- context_code = anti_bloat_config.get("context", "")
327
- if type(context_code) in (tuple, list):
328
- context_code = "\n".join(context_code)
329
- context["version"] = self.getPackageVersion
330
-
331
- # We trust the yaml files, pylint: disable=eval-used,exec-used
332
- context_ready = not bool(context_code)
333
-
334
- for replace_src, replace_code in anti_bloat_config.get(
335
- "replacements", {}
407
+ for replace_src, replace_code in (
408
+ anti_bloat_config.get("replacements") or {}
336
409
  ).items():
337
410
  # Avoid the eval, if the replace doesn't hit.
338
411
  if replace_src not in source_code:
339
412
  continue
340
413
 
341
414
  if replace_code:
342
- if not context_ready:
343
- try:
344
- exec(context_code, context)
345
- except Exception as e: # pylint: disable=broad-except
346
- self.sysexit(
347
- """\
348
- Error, cannot exec module '%s', execute context code '%s' due to: %s"""
349
- % (module_name, context_code, e)
350
- )
351
-
352
- context_ready = True
353
-
354
- if "__dirname__" in replace_code:
355
- context["__dirname__"] = self.locateModule(module_name)
356
-
357
- try:
358
- replace_dst = eval(replace_code, context)
359
- except Exception as e: # pylint: disable=broad-except
360
- self.sysexit(
361
- """\
362
- Error, cannot eval module '%s' replacement expression code '%s' in '%s' due to: %s"""
363
- % (module_name, replace_code, context_code, e)
364
- )
415
+ replace_dst = self.evaluateExpression(
416
+ full_name=module_name,
417
+ expression=replace_code,
418
+ config_name="module '%s' config 'replacements'" % module_name,
419
+ extra_context=self._getContextCode(
420
+ module_name=module_name, anti_bloat_config=anti_bloat_config
421
+ ),
422
+ single_value=True,
423
+ )
365
424
  else:
366
425
  replace_dst = ""
367
426
 
368
- if type(replace_dst) is not str:
369
- self.sysexit(
370
- """\
371
- Error, module '%s' replacement expression code for '%s' needs to generate string, not %s"""
372
- % (module_name, replace_code, type(replace_dst))
373
- )
374
-
375
427
  old = source_code
376
428
  source_code = source_code.replace(replace_src, replace_dst)
377
429
 
378
430
  if old != source_code:
379
431
  change_count += 1
380
432
 
381
- for replace_src, replace_dst in anti_bloat_config.get(
382
- "replacements_plain", {}
433
+ for replace_src, replace_dst in (
434
+ anti_bloat_config.get("replacements_plain") or {}
383
435
  ).items():
384
436
  old = source_code
385
437
  source_code = source_code.replace(replace_src, replace_dst)
@@ -387,32 +439,31 @@ Error, module '%s' replacement expression code for '%s' needs to generate string
387
439
  if old != source_code:
388
440
  change_count += 1
389
441
 
390
- for replace_src, replace_dst in anti_bloat_config.get(
391
- "replacements_re", {}
442
+ for replace_src, replace_dst in (
443
+ anti_bloat_config.get("replacements_re") or {}
392
444
  ).items():
393
445
  old = source_code
394
- source_code = re.sub(replace_src, replace_dst, source_code)
446
+ source_code = re.sub(replace_src, replace_dst, source_code, re.S)
395
447
 
396
448
  if old != source_code:
397
449
  change_count += 1
450
+ elif isExperimental("display-anti-bloat-mismatches"):
451
+ self.info("No match in %s no match %r" % (module_name, replace_src))
398
452
 
399
453
  append_code = anti_bloat_config.get("append_result", "")
400
454
  if type(append_code) in (tuple, list):
401
455
  append_code = "\n".join(append_code)
402
456
 
403
457
  if append_code:
404
- if not context_ready:
405
- exec(context_code, context)
406
- context_ready = True
407
-
408
- try:
409
- append_result = eval(append_code, context)
410
- except Exception as e: # pylint: disable=broad-except
411
- self.sysexit(
412
- """\
413
- Error, cannot evaluate module '%s' append code '%s' in '%s' due to: %s"""
414
- % (module_name, append_code, context_code, e)
415
- )
458
+ append_result = self.evaluateExpression(
459
+ full_name=module_name,
460
+ expression=append_code,
461
+ config_name="module '%s' config 'append_code'" % module_name,
462
+ extra_context=self._getContextCode(
463
+ module_name=module_name, anti_bloat_config=anti_bloat_config
464
+ ),
465
+ single_value=True,
466
+ )
416
467
 
417
468
  source_code += "\n" + append_result
418
469
  change_count += 1
@@ -446,7 +497,7 @@ Error, cannot evaluate module '%s' append code '%s' in '%s' due to: %s"""
446
497
 
447
498
  return source_code
448
499
 
449
- def onModuleSourceCode(self, module_name, source_code):
500
+ def onModuleSourceCode(self, module_name, source_filename, source_code):
450
501
  for anti_bloat_config in self.config.get(module_name, section="anti-bloat"):
451
502
  if self.evaluateCondition(
452
503
  full_name=module_name, condition=anti_bloat_config.get("when", "True")
@@ -462,14 +513,6 @@ Error, cannot evaluate module '%s' append code '%s' in '%s' due to: %s"""
462
513
  def _onFunctionBodyParsing(
463
514
  self, module_name, anti_bloat_config, function_name, body
464
515
  ):
465
- context = {}
466
- context_code = anti_bloat_config.get("context", "")
467
- if type(context_code) in (tuple, list):
468
- context_code = "\n".join(context_code)
469
-
470
- # We trust the yaml files, pylint: disable=eval-used,exec-used
471
- context_ready = not bool(context_code)
472
-
473
516
  replace_code = anti_bloat_config.get("change_function", {}).get(function_name)
474
517
 
475
518
  if replace_code == "un-callable":
@@ -481,18 +524,16 @@ Error, cannot evaluate module '%s' append code '%s' in '%s' due to: %s"""
481
524
  if replace_code is None:
482
525
  return False
483
526
 
484
- if not context_ready:
485
- exec(context_code, context)
486
- context_ready = True
487
-
488
- try:
489
- replacement = eval(replace_code, context)
490
- except Exception as e: # pylint: disable=broad-except
491
- self.sysexit(
492
- """\
493
- Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due to: %s"""
494
- % (module_name, function_name, replace_code, context_code, e)
495
- )
527
+ replacement = self.evaluateExpression(
528
+ full_name=module_name,
529
+ expression=replace_code,
530
+ config_name="module '%s' config 'change_function' of '%s'"
531
+ % (module_name, function_name),
532
+ extra_context=self._getContextCode(
533
+ module_name=module_name, anti_bloat_config=anti_bloat_config
534
+ ),
535
+ single_value=True,
536
+ )
496
537
 
497
538
  # Single node is required, extract the generated module body with
498
539
  # single expression only statement value or a function body.
@@ -519,10 +560,10 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
519
560
  def onFunctionBodyParsing(self, module_name, function_name, body):
520
561
  result = False
521
562
 
522
- config = self.config.get(module_name, section="anti-bloat")
523
-
524
- if config:
525
- for anti_bloat_config in config:
563
+ for anti_bloat_config in self.config.get(module_name, section="anti-bloat"):
564
+ if self.evaluateCondition(
565
+ full_name=module_name, condition=anti_bloat_config.get("when", "True")
566
+ ):
526
567
  if self._onFunctionBodyParsing(
527
568
  module_name=module_name,
528
569
  anti_bloat_config=anti_bloat_config,
@@ -533,6 +574,140 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
533
574
 
534
575
  return result
535
576
 
577
+ def _onClassBodyParsing(self, module_name, anti_bloat_config, class_name, node):
578
+ replace_code = anti_bloat_config.get("change_class", {}).get(class_name)
579
+
580
+ if replace_code == "un-usable":
581
+ replace_code = """
582
+ '''
583
+ class %(class_name)s:
584
+ def __init__(self, *args, **kwargs):
585
+ raise RuntimeError("Must not call %(module_name)s.%(class_name)s")
586
+ '''
587
+ """ % {
588
+ "module_name": module_name,
589
+ "class_name": class_name,
590
+ }
591
+
592
+ if replace_code is None:
593
+ return False
594
+
595
+ replacement = self.evaluateExpression(
596
+ full_name=module_name,
597
+ expression=replace_code,
598
+ config_name="module '%s' config 'change_class' of '%s'"
599
+ % (module_name, class_name),
600
+ extra_context=self._getContextCode(
601
+ module_name=module_name, anti_bloat_config=anti_bloat_config
602
+ ),
603
+ single_value=True,
604
+ )
605
+
606
+ # Single node is required, extract the generated module body with
607
+ # single expression only statement value or a function body.
608
+ replacement = ast.parse(replacement).body[0]
609
+
610
+ node.body[:] = replacement.body
611
+ node.bases[:] = replacement.bases
612
+
613
+ if self.show_changes:
614
+ self.info(
615
+ "Updated module '%s' class '%s'." % (module_name.asString(), class_name)
616
+ )
617
+
618
+ return True
619
+
620
+ def onClassBodyParsing(self, module_name, class_name, node):
621
+ result = False
622
+
623
+ for anti_bloat_config in self.config.get(module_name, section="anti-bloat"):
624
+ if self.evaluateCondition(
625
+ full_name=module_name, condition=anti_bloat_config.get("when", "True")
626
+ ):
627
+ if self._onClassBodyParsing(
628
+ module_name=module_name,
629
+ anti_bloat_config=anti_bloat_config,
630
+ class_name=class_name,
631
+ node=node,
632
+ ):
633
+ result = True
634
+
635
+ return result
636
+
637
+ def _getModuleBloatModeOverrides(self, using_module_name, intended_module_name):
638
+ # Finding a matching configuration aborts the search, not finding one
639
+ # means default behavior should apply.
640
+ for _config_module_name, bloat_mode_overrides in self.getYamlConfigItem(
641
+ module_name=using_module_name,
642
+ section="anti-bloat",
643
+ item_name="bloat-mode-overrides",
644
+ default={},
645
+ decide_relevant=(lambda config_item: intended_module_name in config_item),
646
+ recursive=True,
647
+ ):
648
+ return bloat_mode_overrides[intended_module_name]
649
+
650
+ return None
651
+
652
+ def decideAnnotations(self, module_name):
653
+ # Finding a matching configuration aborts the search, not finding one
654
+ # means default behavior should apply.
655
+ for _config_module_name, annotations_config_value in self.getYamlConfigItem(
656
+ module_name=module_name,
657
+ section="anti-bloat",
658
+ item_name="annotations",
659
+ default=None,
660
+ decide_relevant=(lambda config_item: config_item in ("yes", "no")),
661
+ recursive=True,
662
+ ):
663
+ return annotations_config_value == "yes"
664
+
665
+ return None
666
+
667
+ def decideDocStrings(self, module_name):
668
+ # Finding a matching configuration aborts the search, not finding one
669
+ # means default behavior should apply.
670
+ for _config_module_name, doc_strings_config_value in self.getYamlConfigItem(
671
+ module_name=module_name,
672
+ section="anti-bloat",
673
+ item_name="doc_strings",
674
+ default=None,
675
+ decide_relevant=(lambda config_item: config_item in ("yes", "no")),
676
+ recursive=True,
677
+ ):
678
+ return doc_strings_config_value == "yes"
679
+
680
+ return None
681
+
682
+ def decideAsserts(self, module_name):
683
+ # Finding a matching configuration aborts the search, not finding one
684
+ # means default behavior should apply.
685
+ for _config_module_name, asserts_config_value in self.getYamlConfigItem(
686
+ module_name=module_name,
687
+ section="anti-bloat",
688
+ item_name="asserts",
689
+ default=None,
690
+ decide_relevant=(lambda config_item: config_item in ("yes", "no")),
691
+ recursive=True,
692
+ ):
693
+ return asserts_config_value == "yes"
694
+
695
+ return None
696
+
697
+ def _applyNoFollowConfiguration(self, module_name):
698
+ for (
699
+ config_of_module_name,
700
+ no_follow_pattern,
701
+ description,
702
+ ) in self.getYamlConfigItemItems(
703
+ module_name=module_name,
704
+ section="anti-bloat",
705
+ item_name="no-follow",
706
+ decide_relevant=lambda key, value: True,
707
+ recursive=True,
708
+ ):
709
+ self.no_follows[no_follow_pattern] = (config_of_module_name, description)
710
+
536
711
  def onModuleRecursion(
537
712
  self,
538
713
  module_name,
@@ -542,6 +717,11 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
542
717
  source_ref,
543
718
  reason,
544
719
  ):
720
+ # pylint: disable=too-many-branches
721
+
722
+ # First off, activate "no-follow" configurations of this module.
723
+ self._applyNoFollowConfiguration(module_name=module_name)
724
+
545
725
  # Do not even look at these. It's either included by a module that is in standard
546
726
  # library, or included for a module in standard library.
547
727
  if reason == "stdlib" or (
@@ -552,6 +732,8 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
552
732
 
553
733
  # This will allow "unittest.mock" to pass "unittest". It's kind of a hack and
554
734
  # hopefully unusual.
735
+ if module_name == "unittest" and reason == "import path parent":
736
+ return
555
737
  if module_name == "unittest.mock" and module_name not in self.handled_modules:
556
738
  return
557
739
 
@@ -567,6 +749,15 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
567
749
  return
568
750
 
569
751
  if module_name.hasNamespace(handled_module_name):
752
+ if using_module_name is not None:
753
+ override_mode = self._getModuleBloatModeOverrides(
754
+ using_module_name=using_module_name,
755
+ intended_module_name=intended_module_name,
756
+ )
757
+
758
+ if override_mode is not None:
759
+ mode = override_mode
760
+
570
761
  # Make sure the compilation aborts or warns if asked to
571
762
  if mode == "error":
572
763
  raise NuitkaForbiddenImportEncounter(
@@ -585,13 +776,20 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
585
776
  )
586
777
 
587
778
  if key not in self.warnings_given:
779
+ if handled_module_name == intended_module_name:
780
+ handled_module_name_desc = "'%s'" % handled_module_name
781
+ else:
782
+ handled_module_name_desc = (
783
+ "'%s' (intending to avoid '%s')"
784
+ % (handled_module_name, intended_module_name)
785
+ )
786
+
588
787
  self.warning(
589
788
  """\
590
- Undesirable import of '%s' (intending to avoid '%s') in \
591
- '%s' (at '%s') encountered. It may slow down compilation."""
789
+ Undesirable import of %s in '%s' (at '%s') encountered. It may \
790
+ slow down compilation."""
592
791
  % (
593
- handled_module_name,
594
- intended_module_name,
792
+ handled_module_name_desc,
595
793
  using_module_name,
596
794
  source_ref.getAsString(),
597
795
  ),
@@ -623,25 +821,43 @@ Undesirable import of '%s' (intending to avoid '%s') in \
623
821
  )
624
822
 
625
823
  if using_module_name is not None:
626
- config = self.config.get(using_module_name, section="anti-bloat")
627
-
628
- if config:
629
- for anti_bloat_config in config:
630
- no_auto_follows = anti_bloat_config.get("no-auto-follow", {})
631
-
632
- for no_auto_follow, description in no_auto_follows.items():
633
- if module_name.hasNamespace(no_auto_follow):
634
- if self.evaluateCondition(
635
- full_name=module_name,
636
- condition=anti_bloat_config.get("when", "True"),
637
- ):
638
- self.no_auto_follows[no_auto_follow] = description
639
-
640
- return (
641
- False,
642
- "according to yaml 'no-auto-follow' configuration of '%s'"
643
- % using_module_name,
644
- )
824
+
825
+ def decideRelevant(key, value):
826
+ # Only checking keys of configs, pylint: disable=unused-argument
827
+
828
+ return module_name.hasNamespace(key)
829
+
830
+ for (
831
+ config_of_module_name,
832
+ no_auto_follow,
833
+ description,
834
+ ) in self.getYamlConfigItemItems(
835
+ module_name=using_module_name,
836
+ section="anti-bloat",
837
+ item_name="no-auto-follow",
838
+ decide_relevant=decideRelevant,
839
+ recursive=True,
840
+ ):
841
+ assert module_name.hasNamespace(no_auto_follow), no_auto_follow
842
+
843
+ self.no_auto_follows[no_auto_follow] = description
844
+
845
+ return (
846
+ False,
847
+ "according to yaml 'no-auto-follow' configuration of '%s' for '%s'"
848
+ % (config_of_module_name, no_auto_follow),
849
+ )
850
+
851
+ for no_follow_pattern, (
852
+ config_of_module_name,
853
+ description,
854
+ ) in self.no_follows.items():
855
+ if module_name.matchesToShellPattern(no_follow_pattern)[0]:
856
+ return (
857
+ False,
858
+ "according to yaml 'no-follow' configuration of '%s' for '%s'"
859
+ % (config_of_module_name, no_follow_pattern),
860
+ )
645
861
 
646
862
  # Do not provide an opinion about it.
647
863
  return None
@@ -657,6 +873,13 @@ Undesirable import of '%s' (intending to avoid '%s') in \
657
873
  if module_name.hasNamespace(handled_module_name):
658
874
  return "bytecode"
659
875
 
876
+ # TODO: Detect effective "change_class" and "change_function"
877
+ # configuration for standard library modules, but often enough we are
878
+ # happy to let the bytecode not have the effect, but for these ones it's
879
+ # required. TODO: Make the compilation mode part of the config.
880
+ if module_name == "xmlrpc.server":
881
+ return "compiled"
882
+
660
883
  def onModuleCompleteSet(self, module_set):
661
884
  # TODO: Maybe have an entry point that works on the set of names
662
885
  # instead, we are not looking at the modules, and most plugins probably
@@ -675,3 +898,19 @@ Undesirable import of '%s' (intending to avoid '%s') in \
675
898
  Not including '%s' automatically in order to avoid bloat, but this may cause: %s."""
676
899
  % (module_name, description)
677
900
  )
901
+
902
+
903
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
904
+ # integrates with CPython, but also works on its own.
905
+ #
906
+ # Licensed under the Apache License, Version 2.0 (the "License");
907
+ # you may not use this file except in compliance with the License.
908
+ # You may obtain a copy of the License at
909
+ #
910
+ # http://www.apache.org/licenses/LICENSE-2.0
911
+ #
912
+ # Unless required by applicable law or agreed to in writing, software
913
+ # distributed under the License is distributed on an "AS IS" BASIS,
914
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
915
+ # See the License for the specific language governing permissions and
916
+ # limitations under the License.