Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.4.8__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 (704) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/METADATA +4 -3
  4. Nuitka_winsvc-2.4.8.dist-info/RECORD +954 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +18 -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 +400 -0
  13. nuitka/MainControl.py +200 -112
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +368 -175
  16. nuitka/Options.py +632 -213
  17. nuitka/OutputDirectories.py +40 -21
  18. nuitka/PostProcessing.py +73 -50
  19. nuitka/Progress.py +58 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +106 -19
  23. nuitka/Serialization.py +68 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +108 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +21 -7
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +202 -140
  33. nuitka/build/CCompilerVersion.scons +39 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +50 -54
  36. nuitka/build/SconsCaching.py +93 -90
  37. nuitka/build/SconsCompilerSettings.py +157 -69
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +154 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +147 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +105 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +18 -18
  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 +18 -18
  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 +91 -53
  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 +29 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/environment_variables.h +30 -0
  59. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  60. nuitka/build/include/nuitka/exception_groups.h +23 -26
  61. nuitka/build/include/nuitka/exceptions.h +593 -190
  62. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  63. nuitka/build/include/nuitka/freelists.h +38 -18
  64. nuitka/build/include/nuitka/helper/attributes.h +24 -18
  65. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  66. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  68. nuitka/build/include/nuitka/helper/calling_generated.h +17 -17
  69. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  70. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  71. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  72. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  73. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  74. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  75. nuitka/build/include/nuitka/helper/complex.h +17 -17
  76. nuitka/build/include/nuitka/helper/dictionaries.h +24 -22
  77. nuitka/build/include/nuitka/helper/floats.h +17 -18
  78. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  79. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  80. nuitka/build/include/nuitka/helper/ints.h +32 -20
  81. nuitka/build/include/nuitka/helper/iterators.h +17 -17
  82. nuitka/build/include/nuitka/helper/lists.h +26 -24
  83. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  84. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  85. nuitka/build/include/nuitka/helper/operations.h +17 -17
  86. nuitka/build/include/nuitka/helper/operations_binary_add.h +17 -17
  87. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  88. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  89. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  90. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  91. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  92. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  99. nuitka/build/include/nuitka/helper/operations_binary_sub.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_inplace_add.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  108. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  116. nuitka/build/include/nuitka/helper/raising.h +29 -17
  117. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  118. nuitka/build/include/nuitka/helper/richcomparisons.h +14 -14
  119. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  120. nuitka/build/include/nuitka/helper/sets.h +11 -12
  121. nuitka/build/include/nuitka/helper/slices.h +31 -25
  122. nuitka/build/include/nuitka/helper/strings.h +16 -17
  123. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  124. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  125. nuitka/build/include/nuitka/helpers.h +38 -20
  126. nuitka/build/include/nuitka/importing.h +28 -21
  127. nuitka/build/include/nuitka/jit_sources.h +25 -0
  128. nuitka/build/include/nuitka/prelude.h +128 -46
  129. nuitka/build/include/nuitka/printing.h +22 -17
  130. nuitka/build/include/nuitka/python_pgo.h +19 -18
  131. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  132. nuitka/build/include/nuitka/threading.h +32 -33
  133. nuitka/build/include/nuitka/tracing.h +28 -18
  134. nuitka/build/include/nuitka/type_aliases.h +27 -0
  135. nuitka/build/include/nuitka/unfreezing.h +29 -23
  136. nuitka/build/inline_copy/bin/scons.py +14 -0
  137. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  138. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  139. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  140. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  141. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  142. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  143. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  144. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  145. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  146. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  147. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  160. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  161. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  162. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  163. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  164. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  165. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  166. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  167. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  168. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  169. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  170. nuitka/build/static_src/CompiledAsyncgenType.c +176 -182
  171. nuitka/build/static_src/CompiledCellType.c +63 -40
  172. nuitka/build/static_src/CompiledCodeHelpers.c +181 -128
  173. nuitka/build/static_src/CompiledCoroutineType.c +196 -203
  174. nuitka/build/static_src/CompiledFrameType.c +287 -133
  175. nuitka/build/static_src/CompiledFunctionType.c +389 -95
  176. nuitka/build/static_src/CompiledGeneratorType.c +376 -252
  177. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +185 -198
  178. nuitka/build/static_src/CompiledMethodType.c +83 -71
  179. nuitka/build/static_src/HelpersAllocator.c +88 -19
  180. nuitka/build/static_src/HelpersAttributes.c +33 -54
  181. nuitka/build/static_src/HelpersBuiltin.c +43 -33
  182. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  183. nuitka/build/static_src/HelpersBytes.c +19 -20
  184. nuitka/build/static_src/HelpersCalling.c +33 -30
  185. nuitka/build/static_src/HelpersCallingGenerated.c +1000 -181
  186. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  187. nuitka/build/static_src/HelpersClasses.c +17 -17
  188. nuitka/build/static_src/HelpersComparisonEq.c +518 -492
  189. nuitka/build/static_src/HelpersComparisonEqUtils.c +21 -19
  190. nuitka/build/static_src/HelpersComparisonGe.c +513 -497
  191. nuitka/build/static_src/HelpersComparisonGt.c +512 -496
  192. nuitka/build/static_src/HelpersComparisonLe.c +513 -497
  193. nuitka/build/static_src/HelpersComparisonLt.c +512 -496
  194. nuitka/build/static_src/HelpersComparisonNe.c +520 -492
  195. nuitka/build/static_src/HelpersConsole.c +96 -0
  196. nuitka/build/static_src/HelpersConstantsBlob.c +542 -519
  197. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  198. nuitka/build/static_src/HelpersDictionaries.c +51 -29
  199. nuitka/build/static_src/HelpersDictionariesGenerated.c +177 -68
  200. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  201. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  202. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  203. nuitka/build/static_src/HelpersExceptions.c +161 -50
  204. nuitka/build/static_src/HelpersFiles.c +37 -17
  205. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  206. nuitka/build/static_src/HelpersFloats.c +37 -31
  207. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  208. nuitka/build/static_src/HelpersImport.c +48 -20
  209. nuitka/build/static_src/HelpersImportHard.c +53 -17
  210. nuitka/build/static_src/HelpersJitSources.c +46 -0
  211. nuitka/build/static_src/HelpersLists.c +140 -50
  212. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  213. nuitka/build/static_src/HelpersMappings.c +17 -17
  214. nuitka/build/static_src/HelpersMatching.c +137 -51
  215. nuitka/build/static_src/HelpersOperationBinaryAdd.c +173 -146
  216. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +99 -52
  217. nuitka/build/static_src/HelpersOperationBinaryBitand.c +50 -50
  218. nuitka/build/static_src/HelpersOperationBinaryBitor.c +50 -50
  219. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +50 -50
  220. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +41 -41
  221. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  222. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +41 -41
  223. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  224. nuitka/build/static_src/HelpersOperationBinaryLshift.c +47 -47
  225. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +24 -24
  226. nuitka/build/static_src/HelpersOperationBinaryMod.c +107 -107
  227. nuitka/build/static_src/HelpersOperationBinaryMult.c +81 -75
  228. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  229. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +41 -41
  230. nuitka/build/static_src/HelpersOperationBinaryPow.c +44 -44
  231. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  232. nuitka/build/static_src/HelpersOperationBinaryRshift.c +47 -47
  233. nuitka/build/static_src/HelpersOperationBinarySub.c +80 -80
  234. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +41 -41
  235. nuitka/build/static_src/HelpersOperationInplaceAdd.c +171 -153
  236. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  237. nuitka/build/static_src/HelpersOperationInplaceBitand.c +53 -53
  238. nuitka/build/static_src/HelpersOperationInplaceBitor.c +53 -53
  239. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +53 -53
  240. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +62 -62
  241. nuitka/build/static_src/HelpersOperationInplaceLshift.c +44 -44
  242. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +37 -37
  243. nuitka/build/static_src/HelpersOperationInplaceMod.c +134 -134
  244. nuitka/build/static_src/HelpersOperationInplaceMult.c +78 -78
  245. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +62 -62
  246. nuitka/build/static_src/HelpersOperationInplacePow.c +62 -62
  247. nuitka/build/static_src/HelpersOperationInplaceRshift.c +44 -44
  248. nuitka/build/static_src/HelpersOperationInplaceSub.c +112 -112
  249. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +62 -62
  250. nuitka/build/static_src/HelpersProfiling.c +24 -23
  251. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  252. nuitka/build/static_src/HelpersRaising.c +88 -20
  253. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  254. nuitka/build/static_src/HelpersSequences.c +18 -19
  255. nuitka/build/static_src/HelpersSlices.c +29 -23
  256. nuitka/build/static_src/HelpersStrings.c +234 -37
  257. nuitka/build/static_src/HelpersTuples.c +46 -34
  258. nuitka/build/static_src/HelpersTypes.c +68 -23
  259. nuitka/build/static_src/InspectPatcher.c +108 -27
  260. nuitka/build/static_src/MainProgram.c +359 -263
  261. nuitka/build/static_src/MetaPathBasedLoader.c +367 -242
  262. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  263. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  264. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +97 -22
  265. nuitka/build/static_src/OnefileBootstrap.c +276 -164
  266. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  267. nuitka/code_generation/AsyncgenCodes.py +19 -17
  268. nuitka/code_generation/AttributeCodes.py +31 -27
  269. nuitka/code_generation/BinaryOperationHelperDefinitions.py +24 -20
  270. nuitka/code_generation/BranchCodes.py +19 -17
  271. nuitka/code_generation/BuiltinCodes.py +20 -17
  272. nuitka/code_generation/CallCodes.py +19 -17
  273. nuitka/code_generation/ClassCodes.py +19 -17
  274. nuitka/code_generation/CodeGeneration.py +48 -27
  275. nuitka/code_generation/CodeHelperSelection.py +19 -17
  276. nuitka/code_generation/CodeHelpers.py +24 -20
  277. nuitka/code_generation/CodeObjectCodes.py +34 -24
  278. nuitka/code_generation/ComparisonCodes.py +38 -20
  279. nuitka/code_generation/ComparisonHelperDefinitions.py +19 -17
  280. nuitka/code_generation/ConditionalCodes.py +19 -17
  281. nuitka/code_generation/ConstantCodes.py +82 -28
  282. nuitka/code_generation/Contexts.py +152 -26
  283. nuitka/code_generation/CoroutineCodes.py +19 -17
  284. nuitka/code_generation/CtypesCodes.py +19 -17
  285. nuitka/code_generation/DictCodes.py +25 -23
  286. nuitka/code_generation/Emission.py +21 -18
  287. nuitka/code_generation/ErrorCodes.py +27 -33
  288. nuitka/code_generation/EvalCodes.py +24 -20
  289. nuitka/code_generation/ExceptionCodes.py +27 -18
  290. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +20 -17
  291. nuitka/code_generation/ExpressionCodes.py +19 -17
  292. nuitka/code_generation/FrameCodes.py +24 -20
  293. nuitka/code_generation/FunctionCodes.py +24 -21
  294. nuitka/code_generation/GeneratorCodes.py +23 -20
  295. nuitka/code_generation/GlobalConstants.py +43 -23
  296. nuitka/code_generation/GlobalsLocalsCodes.py +21 -19
  297. nuitka/code_generation/IdCodes.py +19 -17
  298. nuitka/code_generation/ImportCodes.py +90 -50
  299. nuitka/code_generation/Indentation.py +23 -22
  300. nuitka/code_generation/IndexCodes.py +19 -17
  301. nuitka/code_generation/InjectCCodes.py +14 -12
  302. nuitka/code_generation/IntegerCodes.py +19 -17
  303. nuitka/code_generation/IteratorCodes.py +19 -17
  304. nuitka/code_generation/JitCodes.py +44 -0
  305. nuitka/code_generation/LabelCodes.py +19 -17
  306. nuitka/code_generation/LineNumberCodes.py +19 -17
  307. nuitka/code_generation/ListCodes.py +32 -36
  308. nuitka/code_generation/LoaderCodes.py +22 -17
  309. nuitka/code_generation/LocalsDictCodes.py +56 -32
  310. nuitka/code_generation/LoopCodes.py +19 -17
  311. nuitka/code_generation/MatchCodes.py +42 -22
  312. nuitka/code_generation/ModuleCodes.py +43 -25
  313. nuitka/code_generation/Namify.py +27 -23
  314. nuitka/code_generation/NetworkxCodes.py +51 -0
  315. nuitka/code_generation/OperationCodes.py +29 -31
  316. nuitka/code_generation/PackageResourceCodes.py +59 -23
  317. nuitka/code_generation/PrintCodes.py +19 -17
  318. nuitka/code_generation/PythonAPICodes.py +19 -17
  319. nuitka/code_generation/RaisingCodes.py +19 -17
  320. nuitka/code_generation/Reports.py +19 -17
  321. nuitka/code_generation/ReturnCodes.py +19 -17
  322. nuitka/code_generation/SetCodes.py +19 -17
  323. nuitka/code_generation/SliceCodes.py +22 -20
  324. nuitka/code_generation/StringCodes.py +19 -17
  325. nuitka/code_generation/SubscriptCodes.py +24 -30
  326. nuitka/code_generation/TensorflowCodes.py +54 -0
  327. nuitka/code_generation/TryCodes.py +19 -17
  328. nuitka/code_generation/TupleCodes.py +20 -18
  329. nuitka/code_generation/TypeAliasCodes.py +71 -0
  330. nuitka/code_generation/VariableCodes.py +26 -22
  331. nuitka/code_generation/VariableDeclarations.py +20 -17
  332. nuitka/code_generation/YieldCodes.py +22 -20
  333. nuitka/code_generation/__init__.py +5 -4
  334. nuitka/code_generation/c_types/CTypeBases.py +19 -17
  335. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  336. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  337. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  338. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +19 -17
  339. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +19 -17
  340. nuitka/code_generation/c_types/CTypeNuitkaInts.py +19 -18
  341. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +19 -17
  342. nuitka/code_generation/c_types/CTypePyObjectPointers.py +27 -25
  343. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  344. nuitka/code_generation/c_types/__init__.py +5 -4
  345. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +18 -17
  346. nuitka/code_generation/templates/CodeTemplatesConstants.py +132 -36
  347. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +18 -17
  348. nuitka/code_generation/templates/CodeTemplatesExceptions.py +19 -18
  349. nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -17
  350. nuitka/code_generation/templates/CodeTemplatesFunction.py +18 -17
  351. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +19 -17
  352. nuitka/code_generation/templates/CodeTemplatesIterators.py +18 -18
  353. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  354. nuitka/code_generation/templates/CodeTemplatesModules.py +244 -165
  355. nuitka/code_generation/templates/CodeTemplatesVariables.py +42 -27
  356. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  357. nuitka/code_generation/templates/__init__.py +5 -4
  358. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  359. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +18 -18
  360. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +76 -25
  361. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  362. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  363. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  364. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  365. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +121 -48
  366. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +18 -18
  367. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +18 -18
  368. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  369. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  370. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  371. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +28 -28
  372. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  373. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  374. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +44 -32
  375. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +20 -20
  376. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +28 -28
  377. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +24 -24
  378. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +33 -29
  379. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  380. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +27 -27
  381. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  382. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  384. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +17 -17
  385. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  386. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +26 -24
  387. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  388. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  389. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  390. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  391. nuitka/containers/Namedtuples.py +19 -18
  392. nuitka/containers/OrderedSetsFallback.py +19 -17
  393. nuitka/containers/__init__.py +5 -4
  394. nuitka/distutils/Build.py +19 -18
  395. nuitka/distutils/DistutilCommands.py +34 -23
  396. nuitka/distutils/__init__.py +5 -4
  397. nuitka/finalizations/Finalization.py +20 -17
  398. nuitka/finalizations/FinalizeMarkups.py +21 -41
  399. nuitka/finalizations/__init__.py +5 -4
  400. nuitka/freezer/DependsExe.py +48 -28
  401. nuitka/freezer/DllDependenciesCommon.py +47 -20
  402. nuitka/freezer/DllDependenciesMacOS.py +147 -57
  403. nuitka/freezer/DllDependenciesPosix.py +29 -19
  404. nuitka/freezer/DllDependenciesWin32.py +29 -21
  405. nuitka/freezer/ImportDetection.py +20 -17
  406. nuitka/freezer/IncludedDataFiles.py +118 -47
  407. nuitka/freezer/IncludedEntryPoints.py +102 -38
  408. nuitka/freezer/Onefile.py +32 -22
  409. nuitka/freezer/Standalone.py +105 -50
  410. nuitka/freezer/__init__.py +5 -4
  411. nuitka/importing/IgnoreListing.py +19 -17
  412. nuitka/importing/ImportCache.py +24 -21
  413. nuitka/importing/ImportResolving.py +103 -95
  414. nuitka/importing/Importing.py +286 -92
  415. nuitka/importing/PreloadedPackages.py +21 -18
  416. nuitka/importing/Recursion.py +131 -47
  417. nuitka/importing/StandardLibrary.py +46 -28
  418. nuitka/importing/__init__.py +5 -4
  419. nuitka/nodes/AsyncgenNodes.py +19 -17
  420. nuitka/nodes/AttributeLookupNodes.py +19 -17
  421. nuitka/nodes/AttributeNodes.py +19 -17
  422. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  423. nuitka/nodes/BuiltinAllNodes.py +19 -17
  424. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  425. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  426. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  427. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  428. nuitka/nodes/BuiltinDictNodes.py +19 -17
  429. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  430. nuitka/nodes/BuiltinHashNodes.py +19 -17
  431. nuitka/nodes/BuiltinInputNodes.py +19 -17
  432. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  433. nuitka/nodes/BuiltinIteratorNodes.py +24 -20
  434. nuitka/nodes/BuiltinLenNodes.py +19 -17
  435. nuitka/nodes/BuiltinNextNodes.py +19 -17
  436. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  437. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  438. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  439. nuitka/nodes/BuiltinRefNodes.py +68 -19
  440. nuitka/nodes/BuiltinSumNodes.py +20 -18
  441. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  442. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  443. nuitka/nodes/BytesNodes.py +19 -17
  444. nuitka/nodes/CallNodes.py +19 -17
  445. nuitka/nodes/Checkers.py +19 -17
  446. nuitka/nodes/ChildrenHavingMixins.py +1250 -302
  447. nuitka/nodes/ClassNodes.py +49 -29
  448. nuitka/nodes/CodeObjectSpecs.py +29 -18
  449. nuitka/nodes/ComparisonNodes.py +19 -17
  450. nuitka/nodes/ConditionalNodes.py +21 -23
  451. nuitka/nodes/ConstantRefNodes.py +57 -17
  452. nuitka/nodes/ContainerMakingNodes.py +19 -17
  453. nuitka/nodes/ContainerOperationNodes.py +19 -17
  454. nuitka/nodes/CoroutineNodes.py +19 -17
  455. nuitka/nodes/CtypesNodes.py +19 -18
  456. nuitka/nodes/DictionaryNodes.py +19 -18
  457. nuitka/nodes/ExceptionNodes.py +29 -17
  458. nuitka/nodes/ExecEvalNodes.py +19 -17
  459. nuitka/nodes/ExpressionBases.py +34 -26
  460. nuitka/nodes/ExpressionBasesGenerated.py +54 -32
  461. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  462. nuitka/nodes/FrameNodes.py +19 -17
  463. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  464. nuitka/nodes/FunctionNodes.py +81 -35
  465. nuitka/nodes/FutureSpecs.py +35 -20
  466. nuitka/nodes/GeneratorNodes.py +21 -19
  467. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  468. nuitka/nodes/HardImportNodesGenerated.py +545 -129
  469. nuitka/nodes/ImportHardNodes.py +46 -38
  470. nuitka/nodes/ImportNodes.py +436 -446
  471. nuitka/nodes/IndicatorMixins.py +19 -17
  472. nuitka/nodes/InjectCNodes.py +19 -18
  473. nuitka/nodes/IterationHandles.py +55 -34
  474. nuitka/nodes/KeyValuePairNodes.py +19 -17
  475. nuitka/nodes/ListOperationNodes.py +33 -21
  476. nuitka/nodes/LocalsDictNodes.py +19 -17
  477. nuitka/nodes/LocalsScopes.py +41 -41
  478. nuitka/nodes/LoopNodes.py +28 -17
  479. nuitka/nodes/MatchNodes.py +37 -24
  480. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  481. nuitka/nodes/ModuleNodes.py +90 -31
  482. nuitka/nodes/NetworkxNodes.py +45 -0
  483. nuitka/nodes/NodeBases.py +45 -43
  484. nuitka/nodes/NodeMakingHelpers.py +21 -19
  485. nuitka/nodes/NodeMetaClasses.py +45 -28
  486. nuitka/nodes/OperatorNodes.py +28 -26
  487. nuitka/nodes/OperatorNodesUnary.py +20 -17
  488. nuitka/nodes/OsSysNodes.py +66 -18
  489. nuitka/nodes/OutlineNodes.py +22 -20
  490. nuitka/nodes/PackageMetadataNodes.py +37 -27
  491. nuitka/nodes/PackageResourceNodes.py +29 -23
  492. nuitka/nodes/PrintNodes.py +19 -17
  493. nuitka/nodes/ReturnNodes.py +20 -18
  494. nuitka/nodes/SideEffectNodes.py +19 -17
  495. nuitka/nodes/SliceNodes.py +20 -18
  496. nuitka/nodes/StatementBasesGenerated.py +125 -77
  497. nuitka/nodes/StatementNodes.py +19 -17
  498. nuitka/nodes/StrNodes.py +19 -17
  499. nuitka/nodes/StringConcatenationNodes.py +20 -17
  500. nuitka/nodes/SubscriptNodes.py +26 -24
  501. nuitka/nodes/TensorflowNodes.py +38 -0
  502. nuitka/nodes/TryNodes.py +19 -17
  503. nuitka/nodes/TypeMatchNodes.py +19 -17
  504. nuitka/nodes/TypeNodes.py +40 -17
  505. nuitka/nodes/VariableAssignNodes.py +122 -64
  506. nuitka/nodes/VariableDelNodes.py +19 -17
  507. nuitka/nodes/VariableNameNodes.py +19 -17
  508. nuitka/nodes/VariableRefNodes.py +63 -26
  509. nuitka/nodes/VariableReleaseNodes.py +19 -17
  510. nuitka/nodes/YieldNodes.py +21 -19
  511. nuitka/nodes/__init__.py +5 -4
  512. nuitka/nodes/shapes/BuiltinTypeShapes.py +145 -39
  513. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  514. nuitka/nodes/shapes/ShapeMixins.py +40 -17
  515. nuitka/nodes/shapes/StandardShapes.py +27 -20
  516. nuitka/nodes/shapes/__init__.py +5 -4
  517. nuitka/optimizations/BytecodeDemotion.py +19 -17
  518. nuitka/optimizations/FunctionInlining.py +22 -23
  519. nuitka/optimizations/Graphs.py +19 -17
  520. nuitka/optimizations/Optimization.py +39 -35
  521. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  522. nuitka/optimizations/Tags.py +19 -18
  523. nuitka/optimizations/TraceCollections.py +67 -24
  524. nuitka/optimizations/ValueTraces.py +92 -25
  525. nuitka/optimizations/__init__.py +5 -4
  526. nuitka/pgo/PGO.py +33 -23
  527. nuitka/pgo/__init__.py +5 -4
  528. nuitka/plugins/PluginBase.py +610 -109
  529. nuitka/plugins/Plugins.py +241 -58
  530. nuitka/plugins/YamlPluginBase.py +121 -0
  531. nuitka/plugins/__init__.py +5 -4
  532. nuitka/plugins/standard/AntiBloatPlugin.py +357 -129
  533. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  534. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  535. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  536. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  537. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  538. nuitka/plugins/standard/DillPlugin.py +42 -134
  539. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  540. nuitka/plugins/standard/EnumPlugin.py +19 -17
  541. nuitka/plugins/standard/EventletPlugin.py +19 -17
  542. nuitka/plugins/standard/GeventPlugin.py +19 -17
  543. nuitka/plugins/standard/GiPlugin.py +44 -28
  544. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  545. nuitka/plugins/standard/ImplicitImports.py +407 -46
  546. nuitka/plugins/standard/KivyPlugin.py +30 -17
  547. nuitka/plugins/standard/MatplotlibPlugin.py +88 -42
  548. nuitka/plugins/standard/MultiprocessingPlugin.py +25 -20
  549. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  550. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  551. nuitka/plugins/standard/PbrPlugin.py +21 -19
  552. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  553. nuitka/plugins/standard/PmwPlugin.py +30 -27
  554. nuitka/plugins/standard/PySidePyQtPlugin.py +74 -80
  555. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  556. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  557. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  558. nuitka/plugins/standard/TkinterPlugin.py +103 -53
  559. nuitka/plugins/standard/TorchPlugin.py +20 -17
  560. nuitka/plugins/standard/TransformersPlugin.py +94 -30
  561. nuitka/plugins/standard/TrioPlugin.py +18 -15
  562. nuitka/plugins/standard/UpxPlugin.py +21 -19
  563. nuitka/plugins/standard/__init__.py +5 -4
  564. nuitka/plugins/standard/standard.nuitka-package.config.yml +3449 -1299
  565. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  566. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +121 -66
  567. nuitka/reports/CompilationReportReader.py +67 -0
  568. nuitka/reports/LicenseReport.rst.j2 +21 -21
  569. nuitka/reports/Reports.py +352 -76
  570. nuitka/reports/__init__.py +5 -4
  571. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  572. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  573. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  574. nuitka/specs/BuiltinParameterSpecs.py +30 -20
  575. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  576. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  577. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  578. nuitka/specs/HardImportSpecs.py +67 -22
  579. nuitka/specs/ParameterSpecs.py +56 -41
  580. nuitka/specs/__init__.py +5 -4
  581. nuitka/tools/Basics.py +20 -18
  582. nuitka/tools/__init__.py +5 -4
  583. nuitka/tools/commercial/__init__.py +7 -6
  584. nuitka/tools/data_composer/DataComposer.py +78 -62
  585. nuitka/tools/data_composer/__init__.py +5 -4
  586. nuitka/tools/data_composer/__main__.py +18 -17
  587. nuitka/tools/environments/CreateEnvironment.py +20 -17
  588. nuitka/tools/environments/Virtualenv.py +60 -32
  589. nuitka/tools/environments/__init__.py +5 -4
  590. nuitka/tools/general/__init__.py +5 -4
  591. nuitka/tools/general/dll_report/__init__.py +5 -4
  592. nuitka/tools/general/dll_report/__main__.py +19 -21
  593. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  594. nuitka/tools/general/find_module/__init__.py +5 -4
  595. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  596. nuitka/tools/onefile_compressor/__init__.py +5 -4
  597. nuitka/tools/onefile_compressor/__main__.py +18 -17
  598. nuitka/tools/podman/Podman.py +19 -17
  599. nuitka/tools/podman/__init__.py +5 -4
  600. nuitka/tools/podman/__main__.py +35 -19
  601. nuitka/tools/profiler/__init__.py +5 -4
  602. nuitka/tools/profiler/__main__.py +18 -17
  603. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  604. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  605. nuitka/tools/scanning/__init__.py +5 -4
  606. nuitka/tools/specialize/CTypeDescriptions.py +93 -71
  607. nuitka/tools/specialize/Common.py +18 -17
  608. nuitka/tools/specialize/SpecializeC.py +31 -27
  609. nuitka/tools/specialize/SpecializePython.py +108 -45
  610. nuitka/tools/specialize/__init__.py +5 -4
  611. nuitka/tools/testing/Common.py +106 -52
  612. nuitka/tools/testing/Constructs.py +19 -17
  613. nuitka/tools/testing/OutputComparison.py +54 -18
  614. nuitka/tools/testing/Pythons.py +19 -18
  615. nuitka/tools/testing/RuntimeTracing.py +20 -19
  616. nuitka/tools/testing/SearchModes.py +26 -20
  617. nuitka/tools/testing/Valgrind.py +19 -17
  618. nuitka/tools/testing/__init__.py +5 -4
  619. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  620. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  621. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  622. nuitka/tools/testing/compare_with_cpython/__main__.py +36 -29
  623. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  624. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  625. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  626. nuitka/tools/testing/measure_construct_performance/__main__.py +22 -25
  627. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  628. nuitka/tools/testing/run_nuitka_tests/__main__.py +57 -40
  629. nuitka/tools/watch/AutoStage.py +144 -0
  630. nuitka/tools/watch/GitHub.py +113 -0
  631. nuitka/tools/watch/__init__.py +5 -4
  632. nuitka/tools/watch/__main__.py +322 -91
  633. nuitka/tree/Building.py +176 -147
  634. nuitka/tree/ComplexCallHelperFunctions.py +80 -58
  635. nuitka/tree/Extractions.py +19 -17
  636. nuitka/tree/InternalModule.py +29 -20
  637. nuitka/tree/Operations.py +19 -17
  638. nuitka/tree/ReformulationAssertStatements.py +20 -17
  639. nuitka/tree/ReformulationAssignmentStatements.py +92 -91
  640. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  641. nuitka/tree/ReformulationCallExpressions.py +20 -18
  642. nuitka/tree/ReformulationClasses.py +45 -39
  643. nuitka/tree/ReformulationClasses3.py +146 -98
  644. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  645. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  646. nuitka/tree/ReformulationDictionaryCreation.py +40 -35
  647. nuitka/tree/ReformulationExecStatements.py +42 -39
  648. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  649. nuitka/tree/ReformulationFunctionStatements.py +58 -54
  650. nuitka/tree/ReformulationImportStatements.py +34 -29
  651. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  652. nuitka/tree/ReformulationMatchStatements.py +244 -92
  653. nuitka/tree/ReformulationMultidist.py +22 -18
  654. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  655. nuitka/tree/ReformulationPrintStatements.py +23 -24
  656. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  657. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  658. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  659. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  660. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  661. nuitka/tree/ReformulationWithStatements.py +39 -41
  662. nuitka/tree/ReformulationYieldExpressions.py +21 -19
  663. nuitka/tree/SourceHandling.py +76 -31
  664. nuitka/tree/SyntaxErrors.py +19 -17
  665. nuitka/tree/TreeHelpers.py +33 -20
  666. nuitka/tree/VariableClosure.py +35 -39
  667. nuitka/tree/__init__.py +5 -4
  668. nuitka/utils/AppDirs.py +41 -20
  669. nuitka/utils/CStrings.py +66 -21
  670. nuitka/utils/CommandLineOptions.py +84 -19
  671. nuitka/utils/Distributions.py +445 -54
  672. nuitka/utils/Download.py +89 -57
  673. nuitka/utils/Execution.py +73 -34
  674. nuitka/utils/FileOperations.py +318 -74
  675. nuitka/utils/Hashing.py +55 -33
  676. nuitka/utils/Images.py +26 -19
  677. nuitka/utils/Importing.py +118 -24
  678. nuitka/utils/InstalledPythons.py +80 -75
  679. nuitka/utils/InstanceCounters.py +20 -17
  680. nuitka/utils/Jinja2.py +30 -22
  681. nuitka/utils/Json.py +19 -17
  682. nuitka/utils/MacOSApp.py +26 -18
  683. nuitka/utils/MemoryUsage.py +20 -18
  684. nuitka/utils/ModuleNames.py +42 -26
  685. nuitka/utils/ReExecute.py +50 -28
  686. nuitka/utils/Rest.py +20 -17
  687. nuitka/utils/SharedLibraries.py +161 -75
  688. nuitka/utils/Shebang.py +20 -17
  689. nuitka/utils/Signing.py +63 -18
  690. nuitka/utils/SlotMetaClasses.py +57 -0
  691. nuitka/utils/StaticLibraries.py +83 -56
  692. nuitka/utils/ThreadedExecutor.py +18 -17
  693. nuitka/utils/Timing.py +22 -20
  694. nuitka/utils/Utils.py +115 -25
  695. nuitka/utils/WindowsFileUsage.py +22 -20
  696. nuitka/utils/WindowsResources.py +25 -18
  697. nuitka/utils/Yaml.py +62 -24
  698. nuitka/utils/__init__.py +5 -4
  699. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  700. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  701. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  702. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/LICENSE.txt +0 -0
  703. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/entry_points.txt +0 -0
  704. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.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
21
  # spell-checker: ignore dask,numba,statsmodels,matplotlib,sqlalchemy,ipykernel
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,34 @@ 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
+ )
95
114
  else:
96
115
  self.control_tags["use_setuptools"] = True
97
116
 
@@ -109,6 +128,10 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
109
128
  noinclude_pytest_mode,
110
129
  "pytest",
111
130
  )
131
+ self.handled_modules["distributed.utils_test"] = (
132
+ noinclude_pytest_mode,
133
+ "pytest",
134
+ )
112
135
  else:
113
136
  self.control_tags["use_pytest"] = True
114
137
 
@@ -124,6 +147,14 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
124
147
  noinclude_unittest_mode,
125
148
  "unittest",
126
149
  )
150
+ self.handled_modules["keras.src.testing_infra"] = (
151
+ noinclude_unittest_mode,
152
+ "unittest",
153
+ )
154
+ self.handled_modules["tf_keras.src.testing_infra"] = (
155
+ noinclude_unittest_mode,
156
+ "unittest",
157
+ )
127
158
  else:
128
159
  self.control_tags["use_unittest"] = True
129
160
 
@@ -138,6 +169,10 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
138
169
  noinclude_ipython_mode,
139
170
  "IPython",
140
171
  )
172
+ self.handled_modules["altair._magics"] = (
173
+ noinclude_ipython_mode,
174
+ "IPython",
175
+ )
141
176
  else:
142
177
  self.control_tags["use_ipython"] = True
143
178
 
@@ -147,6 +182,11 @@ class NuitkaPluginAntiBloat(NuitkaPluginBase):
147
182
  else:
148
183
  self.control_tags["use_dask"] = True
149
184
 
185
+ if noinclude_pydoc_mode != "allow":
186
+ self.handled_modules["pydoc"] = noinclude_pydoc_mode, "pydoc"
187
+ else:
188
+ self.control_tags["use_pydoc"] = True
189
+
150
190
  if noinclude_numba_mode != "allow":
151
191
  self.handled_modules["numba"] = noinclude_numba_mode, "numba"
152
192
  self.handled_modules["sparse"] = noinclude_numba_mode, "numba"
@@ -199,6 +239,12 @@ form 'module_name:[%s]'."""
199
239
  # information given for that.
200
240
  self.no_auto_follows = {}
201
241
 
242
+ # Keep track of modules prevented from being followed at all.
243
+ self.no_follows = OrderedDict()
244
+
245
+ # Cache execution context for anti-bloat configs.
246
+ self.context_codes = {}
247
+
202
248
  def getEvaluationConditionControlTags(self):
203
249
  return self.control_tags
204
250
 
@@ -257,6 +303,17 @@ What to do if a unittest import is encountered. This package can be big with
257
303
  dependencies, and should definitely be avoided.""",
258
304
  )
259
305
 
306
+ group.add_option(
307
+ "--noinclude-pydoc-mode",
308
+ action="store",
309
+ dest="noinclude_pydoc_mode",
310
+ choices=_mode_choices,
311
+ default=None,
312
+ help="""\
313
+ What to do if a pydoc import is encountered. This package use is mark of useless
314
+ code for deployments and should be avoided.""",
315
+ )
316
+
260
317
  group.add_option(
261
318
  "--noinclude-IPython-mode",
262
319
  action="store",
@@ -313,73 +370,64 @@ which can and should be a top level package and then one choice, "error",
313
370
  "warning", "nofollow", e.g. PyQt5:error.""",
314
371
  )
315
372
 
373
+ def _getContextCode(self, module_name, anti_bloat_config):
374
+ context_code = anti_bloat_config.get("context", "")
375
+ if type(context_code) in (tuple, list):
376
+ context_code = "\n".join(context_code)
377
+
378
+ if context_code not in self.context_codes:
379
+ context = {}
380
+
381
+ try:
382
+ # We trust the yaml files, pylint: disable=exec-used
383
+ exec(context_code, context)
384
+ except Exception as e: # pylint: disable=broad-except
385
+ self.sysexit(
386
+ """\
387
+ Error, cannot exec module '%s', context code '%s' due to: %s"""
388
+ % (module_name, context_code, e)
389
+ )
390
+
391
+ self.context_codes[context_code] = context
392
+
393
+ return dict(self.context_codes[context_code])
394
+
316
395
  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
396
+ # Complex dealing with many cases, pylint: disable=too-many-branches
318
397
 
319
398
  description = anti_bloat_config.get("description", "description not given")
320
399
 
321
400
  # To allow detection if it did anything.
322
401
  change_count = 0
323
402
 
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", {}
403
+ for replace_src, replace_code in (
404
+ anti_bloat_config.get("replacements") or {}
336
405
  ).items():
337
406
  # Avoid the eval, if the replace doesn't hit.
338
407
  if replace_src not in source_code:
339
408
  continue
340
409
 
341
410
  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
- )
411
+ replace_dst = self.evaluateExpression(
412
+ full_name=module_name,
413
+ expression=replace_code,
414
+ config_name="module '%s' config 'replacements' " % module_name,
415
+ extra_context=self._getContextCode(
416
+ module_name=module_name, anti_bloat_config=anti_bloat_config
417
+ ),
418
+ single_value=True,
419
+ )
365
420
  else:
366
421
  replace_dst = ""
367
422
 
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
423
  old = source_code
376
424
  source_code = source_code.replace(replace_src, replace_dst)
377
425
 
378
426
  if old != source_code:
379
427
  change_count += 1
380
428
 
381
- for replace_src, replace_dst in anti_bloat_config.get(
382
- "replacements_plain", {}
429
+ for replace_src, replace_dst in (
430
+ anti_bloat_config.get("replacements_plain") or {}
383
431
  ).items():
384
432
  old = source_code
385
433
  source_code = source_code.replace(replace_src, replace_dst)
@@ -387,32 +435,31 @@ Error, module '%s' replacement expression code for '%s' needs to generate string
387
435
  if old != source_code:
388
436
  change_count += 1
389
437
 
390
- for replace_src, replace_dst in anti_bloat_config.get(
391
- "replacements_re", {}
438
+ for replace_src, replace_dst in (
439
+ anti_bloat_config.get("replacements_re") or {}
392
440
  ).items():
393
441
  old = source_code
394
- source_code = re.sub(replace_src, replace_dst, source_code)
442
+ source_code = re.sub(replace_src, replace_dst, source_code, re.S)
395
443
 
396
444
  if old != source_code:
397
445
  change_count += 1
446
+ elif isExperimental("display-anti-bloat-mismatches"):
447
+ self.info("No match in %s no match %r" % (module_name, replace_src))
398
448
 
399
449
  append_code = anti_bloat_config.get("append_result", "")
400
450
  if type(append_code) in (tuple, list):
401
451
  append_code = "\n".join(append_code)
402
452
 
403
453
  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
- )
454
+ append_result = self.evaluateExpression(
455
+ full_name=module_name,
456
+ expression=append_code,
457
+ config_name="module '%s' config 'append_code'" % module_name,
458
+ extra_context=self._getContextCode(
459
+ module_name=module_name, anti_bloat_config=anti_bloat_config
460
+ ),
461
+ single_value=True,
462
+ )
416
463
 
417
464
  source_code += "\n" + append_result
418
465
  change_count += 1
@@ -446,7 +493,7 @@ Error, cannot evaluate module '%s' append code '%s' in '%s' due to: %s"""
446
493
 
447
494
  return source_code
448
495
 
449
- def onModuleSourceCode(self, module_name, source_code):
496
+ def onModuleSourceCode(self, module_name, source_filename, source_code):
450
497
  for anti_bloat_config in self.config.get(module_name, section="anti-bloat"):
451
498
  if self.evaluateCondition(
452
499
  full_name=module_name, condition=anti_bloat_config.get("when", "True")
@@ -462,14 +509,6 @@ Error, cannot evaluate module '%s' append code '%s' in '%s' due to: %s"""
462
509
  def _onFunctionBodyParsing(
463
510
  self, module_name, anti_bloat_config, function_name, body
464
511
  ):
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
512
  replace_code = anti_bloat_config.get("change_function", {}).get(function_name)
474
513
 
475
514
  if replace_code == "un-callable":
@@ -481,18 +520,16 @@ Error, cannot evaluate module '%s' append code '%s' in '%s' due to: %s"""
481
520
  if replace_code is None:
482
521
  return False
483
522
 
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
- )
523
+ replacement = self.evaluateExpression(
524
+ full_name=module_name,
525
+ expression=replace_code,
526
+ config_name="module '%s' config 'change_function' of '%s'"
527
+ % (module_name, function_name),
528
+ extra_context=self._getContextCode(
529
+ module_name=module_name, anti_bloat_config=anti_bloat_config
530
+ ),
531
+ single_value=True,
532
+ )
496
533
 
497
534
  # Single node is required, extract the generated module body with
498
535
  # single expression only statement value or a function body.
@@ -533,6 +570,140 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
533
570
 
534
571
  return result
535
572
 
573
+ def _onClassBodyParsing(self, module_name, anti_bloat_config, class_name, node):
574
+ replace_code = anti_bloat_config.get("change_class", {}).get(class_name)
575
+
576
+ if replace_code == "un-usable":
577
+ replace_code = """
578
+ '''
579
+ class %(class_name)s:
580
+ def __init__(self, *args, **kwargs):
581
+ raise RuntimeError("Must not call %(module_name)s.%(class_name)s")
582
+ '''
583
+ """ % {
584
+ "module_name": module_name,
585
+ "class_name": class_name,
586
+ }
587
+
588
+ if replace_code is None:
589
+ return False
590
+
591
+ replacement = self.evaluateExpression(
592
+ full_name=module_name,
593
+ expression=replace_code,
594
+ config_name="module '%s' config 'change_class' of '%s'"
595
+ % (module_name, class_name),
596
+ extra_context=self._getContextCode(
597
+ module_name=module_name, anti_bloat_config=anti_bloat_config
598
+ ),
599
+ single_value=True,
600
+ )
601
+
602
+ # Single node is required, extract the generated module body with
603
+ # single expression only statement value or a function body.
604
+ replacement = ast.parse(replacement).body[0]
605
+
606
+ node.body[:] = replacement.body
607
+ node.bases = replacement.bases
608
+
609
+ if self.show_changes:
610
+ self.info(
611
+ "Updated module '%s' class '%s'." % (module_name.asString(), class_name)
612
+ )
613
+
614
+ return True
615
+
616
+ def onClassBodyParsing(self, module_name, class_name, node):
617
+ result = False
618
+
619
+ config = self.config.get(module_name, section="anti-bloat")
620
+
621
+ if config:
622
+ for anti_bloat_config in config:
623
+ if self._onClassBodyParsing(
624
+ module_name=module_name,
625
+ anti_bloat_config=anti_bloat_config,
626
+ class_name=class_name,
627
+ node=node,
628
+ ):
629
+ result = True
630
+
631
+ return result
632
+
633
+ def _getModuleBloatModeOverrides(self, using_module_name, intended_module_name):
634
+ # Finding a matching configuration aborts the search, not finding one
635
+ # means default behavior should apply.
636
+ for _config_module_name, bloat_mode_overrides in self.getYamlConfigItem(
637
+ module_name=using_module_name,
638
+ section="anti-bloat",
639
+ item_name="bloat-mode-overrides",
640
+ default={},
641
+ decide_relevant=(lambda config_item: intended_module_name in config_item),
642
+ recursive=True,
643
+ ):
644
+ return bloat_mode_overrides[intended_module_name]
645
+
646
+ return None
647
+
648
+ def decideAnnotations(self, module_name):
649
+ # Finding a matching configuration aborts the search, not finding one
650
+ # means default behavior should apply.
651
+ for _config_module_name, annotations_config_value in self.getYamlConfigItem(
652
+ module_name=module_name,
653
+ section="anti-bloat",
654
+ item_name="annotations",
655
+ default=None,
656
+ decide_relevant=(lambda config_item: config_item in ("yes", "no")),
657
+ recursive=True,
658
+ ):
659
+ return annotations_config_value == "yes"
660
+
661
+ return None
662
+
663
+ def decideDocStrings(self, module_name):
664
+ # Finding a matching configuration aborts the search, not finding one
665
+ # means default behavior should apply.
666
+ for _config_module_name, doc_strings_config_value in self.getYamlConfigItem(
667
+ module_name=module_name,
668
+ section="anti-bloat",
669
+ item_name="doc_strings",
670
+ default=None,
671
+ decide_relevant=(lambda config_item: config_item in ("yes", "no")),
672
+ recursive=True,
673
+ ):
674
+ return doc_strings_config_value == "yes"
675
+
676
+ return None
677
+
678
+ def decideAsserts(self, module_name):
679
+ # Finding a matching configuration aborts the search, not finding one
680
+ # means default behavior should apply.
681
+ for _config_module_name, asserts_config_value in self.getYamlConfigItem(
682
+ module_name=module_name,
683
+ section="anti-bloat",
684
+ item_name="asserts",
685
+ default=None,
686
+ decide_relevant=(lambda config_item: config_item in ("yes", "no")),
687
+ recursive=True,
688
+ ):
689
+ return asserts_config_value == "yes"
690
+
691
+ return None
692
+
693
+ def _applyNoFollowConfiguration(self, module_name):
694
+ for (
695
+ config_of_module_name,
696
+ no_follow_pattern,
697
+ description,
698
+ ) in self.getYamlConfigItemItems(
699
+ module_name=module_name,
700
+ section="anti-bloat",
701
+ item_name="no-follow",
702
+ decide_relevant=lambda key, value: True,
703
+ recursive=True,
704
+ ):
705
+ self.no_follows[no_follow_pattern] = (config_of_module_name, description)
706
+
536
707
  def onModuleRecursion(
537
708
  self,
538
709
  module_name,
@@ -542,6 +713,11 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
542
713
  source_ref,
543
714
  reason,
544
715
  ):
716
+ # pylint: disable=too-many-branches
717
+
718
+ # First off, activate "no-follow" configurations of this module.
719
+ self._applyNoFollowConfiguration(module_name=module_name)
720
+
545
721
  # Do not even look at these. It's either included by a module that is in standard
546
722
  # library, or included for a module in standard library.
547
723
  if reason == "stdlib" or (
@@ -552,6 +728,8 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
552
728
 
553
729
  # This will allow "unittest.mock" to pass "unittest". It's kind of a hack and
554
730
  # hopefully unusual.
731
+ if module_name == "unittest" and reason == "import path parent":
732
+ return
555
733
  if module_name == "unittest.mock" and module_name not in self.handled_modules:
556
734
  return
557
735
 
@@ -567,6 +745,15 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
567
745
  return
568
746
 
569
747
  if module_name.hasNamespace(handled_module_name):
748
+ if using_module_name is not None:
749
+ override_mode = self._getModuleBloatModeOverrides(
750
+ using_module_name=using_module_name,
751
+ intended_module_name=intended_module_name,
752
+ )
753
+
754
+ if override_mode is not None:
755
+ mode = override_mode
756
+
570
757
  # Make sure the compilation aborts or warns if asked to
571
758
  if mode == "error":
572
759
  raise NuitkaForbiddenImportEncounter(
@@ -585,13 +772,20 @@ Error, cannot eval module '%s' function '%s' replacement code '%s' in '%s' due t
585
772
  )
586
773
 
587
774
  if key not in self.warnings_given:
775
+ if handled_module_name == intended_module_name:
776
+ handled_module_name_desc = "'%s'" % handled_module_name
777
+ else:
778
+ handled_module_name_desc = (
779
+ "'%s' (intending to avoid '%s')"
780
+ % (handled_module_name, intended_module_name)
781
+ )
782
+
588
783
  self.warning(
589
784
  """\
590
- Undesirable import of '%s' (intending to avoid '%s') in \
591
- '%s' (at '%s') encountered. It may slow down compilation."""
785
+ Undesirable import of %s in '%s' (at '%s') encountered. It may \
786
+ slow down compilation."""
592
787
  % (
593
- handled_module_name,
594
- intended_module_name,
788
+ handled_module_name_desc,
595
789
  using_module_name,
596
790
  source_ref.getAsString(),
597
791
  ),
@@ -623,25 +817,43 @@ Undesirable import of '%s' (intending to avoid '%s') in \
623
817
  )
624
818
 
625
819
  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
- )
820
+
821
+ def decideRelevant(key, value):
822
+ # Only checking keys of configs, pylint: disable=unused-argument
823
+
824
+ return module_name.hasNamespace(key)
825
+
826
+ for (
827
+ config_of_module_name,
828
+ no_auto_follow,
829
+ description,
830
+ ) in self.getYamlConfigItemItems(
831
+ module_name=using_module_name,
832
+ section="anti-bloat",
833
+ item_name="no-auto-follow",
834
+ decide_relevant=decideRelevant,
835
+ recursive=True,
836
+ ):
837
+ assert module_name.hasNamespace(no_auto_follow), no_auto_follow
838
+
839
+ self.no_auto_follows[no_auto_follow] = description
840
+
841
+ return (
842
+ False,
843
+ "according to yaml 'no-auto-follow' configuration of '%s' for '%s'"
844
+ % (config_of_module_name, no_auto_follow),
845
+ )
846
+
847
+ for no_follow_pattern, (
848
+ config_of_module_name,
849
+ description,
850
+ ) in self.no_follows.items():
851
+ if module_name.matchesToShellPattern(no_follow_pattern)[0]:
852
+ return (
853
+ False,
854
+ "according to yaml 'no-follow' configuration of '%s' for '%s'"
855
+ % (config_of_module_name, no_follow_pattern),
856
+ )
645
857
 
646
858
  # Do not provide an opinion about it.
647
859
  return None
@@ -675,3 +887,19 @@ Undesirable import of '%s' (intending to avoid '%s') in \
675
887
  Not including '%s' automatically in order to avoid bloat, but this may cause: %s."""
676
888
  % (module_name, description)
677
889
  )
890
+
891
+
892
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
893
+ # integrates with CPython, but also works on its own.
894
+ #
895
+ # Licensed under the Apache License, Version 2.0 (the "License");
896
+ # you may not use this file except in compliance with the License.
897
+ # You may obtain a copy of the License at
898
+ #
899
+ # http://www.apache.org/licenses/LICENSE-2.0
900
+ #
901
+ # Unless required by applicable law or agreed to in writing, software
902
+ # distributed under the License is distributed on an "AS IS" BASIS,
903
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
904
+ # See the License for the specific language governing permissions and
905
+ # limitations under the License.