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
  """
19
5
  Plugins: Welcome to Nuitka! This is your shortest way to become part of it.
20
6
 
@@ -31,9 +17,10 @@ import functools
31
17
  import inspect
32
18
  import os
33
19
  import sys
20
+ import unittest
34
21
 
35
22
  from nuitka import Options
36
- from nuitka.__past__ import getMetaClassBase
23
+ from nuitka.__past__ import iter_modules, unicode
37
24
  from nuitka.containers.Namedtuples import makeNamedtupleClass
38
25
  from nuitka.containers.OrderedSets import OrderedSet
39
26
  from nuitka.freezer.IncludedDataFiles import (
@@ -50,27 +37,53 @@ from nuitka.freezer.IncludedEntryPoints import (
50
37
  )
51
38
  from nuitka.ModuleRegistry import (
52
39
  addModuleInfluencingCondition,
40
+ addModuleInfluencingDetection,
41
+ addModuleInfluencingParameter,
42
+ addModuleInfluencingVariable,
53
43
  getModuleInclusionInfoByName,
54
44
  )
55
45
  from nuitka.Options import (
56
- hasPythonFlagNoAnnotations,
57
- hasPythonFlagNoAsserts,
58
- hasPythonFlagNoDocStrings,
46
+ getCompanyName,
47
+ getFileVersion,
48
+ getProductFileVersion,
49
+ getProductName,
50
+ getProductVersion,
59
51
  isDeploymentMode,
52
+ isOnefileMode,
53
+ isOnefileTempDirMode,
60
54
  isStandaloneMode,
61
55
  shallCreateAppBundle,
62
56
  shallMakeModule,
63
57
  shallShowExecutedCommands,
64
58
  )
65
- from nuitka.PythonFlavors import isAnacondaPython, isDebianPackagePython
59
+ from nuitka.PythonFlavors import (
60
+ isAnacondaPython,
61
+ isDebianPackagePython,
62
+ isNuitkaPython,
63
+ )
66
64
  from nuitka.PythonVersions import (
67
65
  getTestExecutionPythonVersions,
68
66
  python_version,
67
+ python_version_full_str,
68
+ python_version_str,
69
69
  )
70
70
  from nuitka.Tracing import plugins_logger
71
- from nuitka.utils.Distributions import isDistributionCondaPackage
72
- from nuitka.utils.Execution import NuitkaCalledProcessError, check_output
73
- from nuitka.utils.Importing import isBuiltinModuleName
71
+ from nuitka.utils.AppDirs import getAppdirsModule
72
+ from nuitka.utils.Distributions import (
73
+ getDistributionFromModuleName,
74
+ getDistributionName,
75
+ isDistributionCondaPackage,
76
+ )
77
+ from nuitka.utils.Execution import (
78
+ NuitkaCalledProcessError,
79
+ check_output,
80
+ withEnvironmentVarsOverridden,
81
+ )
82
+ from nuitka.utils.FileOperations import (
83
+ changeFilenameExtension,
84
+ getFileContents,
85
+ )
86
+ from nuitka.utils.Importing import getSharedLibrarySuffix, isBuiltinModuleName
74
87
  from nuitka.utils.ModuleNames import (
75
88
  ModuleName,
76
89
  makeTriggerModuleName,
@@ -78,11 +91,15 @@ from nuitka.utils.ModuleNames import (
78
91
  pre_module_load_trigger_name,
79
92
  )
80
93
  from nuitka.utils.SharedLibraries import locateDLL, locateDLLsInDirectory
94
+ from nuitka.utils.SlotMetaClasses import getMetaClassBase
95
+ from nuitka.utils.StaticLibraries import getSystemStaticLibPythonPath
81
96
  from nuitka.utils.Utils import (
82
97
  getArchitecture,
98
+ isAndroidBasedLinux,
83
99
  isLinux,
84
100
  isMacOS,
85
101
  isWin32Windows,
102
+ withNoWarning,
86
103
  )
87
104
 
88
105
  _warned_unused_plugins = set()
@@ -94,6 +111,127 @@ _package_versions = {}
94
111
  # "getEvaluationConditionControlTags" value.
95
112
  control_tags = {}
96
113
 
114
+ _context_dict = None
115
+
116
+ # Populated when "constants" and "variables" yaml sections get evaluated.
117
+ _module_config_constants = {}
118
+ _module_config_variables = {}
119
+
120
+
121
+ def _getImportLibModule():
122
+ try:
123
+ import importlib
124
+ except ImportError:
125
+ return None
126
+ else:
127
+ return importlib
128
+
129
+
130
+ def _makeEvaluationContext(logger, full_name, config_name):
131
+ context = TagContext(logger=logger, full_name=full_name, config_name=config_name)
132
+ context.update(control_tags)
133
+
134
+ context.update(_getEvaluationContext())
135
+
136
+ return context
137
+
138
+
139
+ def _getEvaluationContext():
140
+ # Using global here, as this is really a singleton, in the form of a module,
141
+ # pylint: disable=global-statement
142
+ global _context_dict
143
+
144
+ if _context_dict is None:
145
+ _context_dict = {
146
+ "macos": isMacOS(),
147
+ "win32": isWin32Windows(),
148
+ "linux": isLinux(),
149
+ "android": isAndroidBasedLinux(),
150
+ "android32": isAndroidBasedLinux() and sys.maxsize < 2**32,
151
+ "android64": isAndroidBasedLinux() and sys.maxsize >= 2**64 - 1,
152
+ "anaconda": isAnacondaPython(),
153
+ "is_conda_package": isDistributionCondaPackage,
154
+ "debian_python": isDebianPackagePython(),
155
+ "nuitka_python": isNuitkaPython(),
156
+ "standalone": isStandaloneMode(),
157
+ "onefile": isOnefileMode(),
158
+ "onefile_cached": not isOnefileTempDirMode(),
159
+ "module_mode": shallMakeModule(),
160
+ "deployment": isDeploymentMode(),
161
+ # Version information
162
+ "company": getCompanyName(),
163
+ "product": getProductName(),
164
+ "file_version": getFileVersion(),
165
+ "product_version": getProductVersion(),
166
+ "combined_version": getProductFileVersion(),
167
+ # Querying package versions.
168
+ "version": _getPackageVersion,
169
+ "version_str": _getPackageVersionStr,
170
+ "get_dist_name": _getDistributionNameFromPackageName,
171
+ "plugin": _isPluginActive,
172
+ # Iterating packages
173
+ "iterate_modules": _iterate_module_names,
174
+ # Locating package directories
175
+ "_get_module_directory": _getModuleDirectory,
176
+ # Querying package properties
177
+ "has_builtin_module": isBuiltinModuleName,
178
+ # Architectures
179
+ "arch_x86": getArchitecture() == "x86",
180
+ "arch_amd64": getArchitecture() == "x86_64",
181
+ "arch_arm64": getArchitecture() == "arm64",
182
+ # Frequent used modules
183
+ "sys": sys,
184
+ "os": os,
185
+ "importlib": _getImportLibModule(),
186
+ "appdirs": getAppdirsModule(),
187
+ "unittest": unittest,
188
+ # Python version string
189
+ "python_version_str": python_version_str,
190
+ "python_version_full_str": python_version_full_str,
191
+ # Technical requirements
192
+ "static_libpython": getSystemStaticLibPythonPath() is not None,
193
+ # Builtins
194
+ "True": True,
195
+ "False": False,
196
+ "None": None,
197
+ "repr": repr,
198
+ "len": len,
199
+ "str": str,
200
+ "bool": bool,
201
+ "int": int,
202
+ "tuple": tuple,
203
+ "list": list,
204
+ "dict": dict,
205
+ "set": set,
206
+ "getattr": getattr,
207
+ "hasattr": hasattr,
208
+ "frozenset": frozenset,
209
+ "__import__": __import__,
210
+ }
211
+
212
+ versions = getTestExecutionPythonVersions()
213
+
214
+ for version in versions:
215
+ big, major = version.split(".")
216
+ numeric_version = int(big) * 256 + int(major) * 16
217
+ is_same_or_higher_version = python_version >= numeric_version
218
+
219
+ _context_dict["python" + big + major + "_or_higher"] = (
220
+ is_same_or_higher_version
221
+ )
222
+ _context_dict["before_python" + big + major] = not is_same_or_higher_version
223
+
224
+ _context_dict["before_python3"] = python_version < 0x300
225
+ _context_dict["python3_or_higher"] = python_version >= 0x300
226
+
227
+ if not isNuitkaPython():
228
+ _context_dict["extension_std_suffix"] = getSharedLibrarySuffix(
229
+ preferred=True
230
+ )
231
+ _context_dict["extension_suffix"] = getSharedLibrarySuffix(preferred=False)
232
+
233
+ return _context_dict
234
+
97
235
 
98
236
  def _convertVersionToTuple(version_str):
99
237
  def numberize(v):
@@ -104,6 +242,8 @@ def _convertVersionToTuple(version_str):
104
242
 
105
243
 
106
244
  def _getPackageNameFromDistributionName(distribution_name):
245
+ # spell-checker: ignore opencv, pyobjc, objc
246
+
107
247
  if distribution_name in ("opencv-python", "opencv-python-headless"):
108
248
  return "cv2"
109
249
  elif distribution_name == "pyobjc":
@@ -112,6 +252,16 @@ def _getPackageNameFromDistributionName(distribution_name):
112
252
  return distribution_name
113
253
 
114
254
 
255
+ def _getDistributionNameFromPackageName(package_name):
256
+ package_name = ModuleName(package_name)
257
+ distribution = getDistributionFromModuleName(package_name)
258
+
259
+ if distribution is None:
260
+ return package_name.asString()
261
+ else:
262
+ return getDistributionName(distribution)
263
+
264
+
115
265
  def _getPackageVersion(distribution_name):
116
266
  if distribution_name not in _package_versions:
117
267
  try:
@@ -157,13 +307,48 @@ def _getPackageVersion(distribution_name):
157
307
  return _package_versions[distribution_name]
158
308
 
159
309
 
310
+ def _getPackageVersionStr(distribution_name):
311
+ version = _getPackageVersion(distribution_name)
312
+
313
+ if version is not None:
314
+ version = ".".join(str(d) for d in version)
315
+
316
+ return version
317
+
318
+
319
+ def _getModuleDirectory(module_name):
320
+ from nuitka.importing.Importing import locateModule
321
+
322
+ _module_name, module_filename, _module_kind, _finding = locateModule(
323
+ module_name=ModuleName(module_name), parent_package=None, level=0
324
+ )
325
+
326
+ return module_filename
327
+
328
+
329
+ def _iterate_module_names(package_name):
330
+ package_name = ModuleName(package_name)
331
+ package_path = _getModuleDirectory(module_name=package_name)
332
+
333
+ result = []
334
+
335
+ for module_info in iter_modules([package_path]):
336
+ module_name = package_name.getChildNamed(module_info.name)
337
+ result.append(module_name.asString())
338
+
339
+ if module_info.ispkg: # spell-checker: ignore ispkg
340
+ result.extend(_iterate_module_names(package_name=module_name))
341
+
342
+ return result
343
+
344
+
160
345
  def _isPluginActive(plugin_name):
161
346
  from .Plugins import getUserActivatedPluginNames
162
347
 
163
348
  return plugin_name in getUserActivatedPluginNames()
164
349
 
165
350
 
166
- class NuitkaPluginBase(getMetaClassBase("Plugin")):
351
+ class NuitkaPluginBase(getMetaClassBase("Plugin", require_slots=False)):
167
352
  """Nuitka base class for all plugins.
168
353
 
169
354
  Derive your plugin from "NuitkaPluginBase" please.
@@ -273,7 +458,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
273
458
  # Virtual method, pylint: disable=no-self-use,unused-argument
274
459
  return ()
275
460
 
276
- def onModuleSourceCode(self, module_name, source_code):
461
+ def onModuleSourceCode(self, module_name, source_filename, source_code):
277
462
  """Inspect or modify source code.
278
463
 
279
464
  Args:
@@ -286,6 +471,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
286
471
  going to allow simply checking the source code without the need to
287
472
  pass it back.
288
473
  """
474
+ # Virtual method, pylint: disable=unused-argument
289
475
  self.checkModuleSourceCode(module_name, source_code)
290
476
 
291
477
  return source_code
@@ -431,6 +617,25 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
431
617
  # Virtual method, pylint: disable=no-self-use,unused-argument
432
618
  return None
433
619
 
620
+ def onModuleUsageLookAhead(
621
+ self, module_name, module_filename, module_kind, get_module_source
622
+ ):
623
+ """React to tentative recursion of a module coming up.
624
+
625
+ For definite usage, use onModuleRecursion where it's a fact and
626
+ happening next. This may be a usage that is later optimized away
627
+ and doesn't impact anything. The main usage is to setup e.g.
628
+ hard imports as a factory, e.g. with detectable lazy loaders.
629
+
630
+ Args:
631
+ module_name: full module name
632
+ module_filename: filename
633
+ module_kind: one of "py", "extension" (shared library)
634
+ get_module_source: callable to get module source code if any
635
+ Returns:
636
+ None
637
+ """
638
+
434
639
  def onModuleRecursion(
435
640
  self,
436
641
  module_name,
@@ -440,7 +645,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
440
645
  source_ref,
441
646
  reason,
442
647
  ):
443
- """React to recursion to a module coming up.
648
+ """React to recursion of a module coming up.
444
649
 
445
650
  Args:
446
651
  module_name: full module name
@@ -555,22 +760,28 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
555
760
  """
556
761
  return locateDLLsInDirectory(directory)
557
762
 
558
- def makeDllEntryPoint(self, source_path, dest_path, package_name, reason):
763
+ def makeDllEntryPoint(
764
+ self, source_path, dest_path, module_name, package_name, reason
765
+ ):
559
766
  """Create an entry point, as expected to be provided by getExtraDlls."""
560
767
  return makeDllEntryPoint(
561
768
  logger=self,
562
769
  source_path=source_path,
563
770
  dest_path=dest_path,
771
+ module_name=module_name,
564
772
  package_name=package_name,
565
773
  reason=reason,
566
774
  )
567
775
 
568
- def makeExeEntryPoint(self, source_path, dest_path, package_name, reason):
776
+ def makeExeEntryPoint(
777
+ self, source_path, dest_path, module_name, package_name, reason
778
+ ):
569
779
  """Create an entry point, as expected to be provided by getExtraDlls."""
570
780
  return makeExeEntryPoint(
571
781
  logger=self,
572
782
  source_path=source_path,
573
783
  dest_path=dest_path,
784
+ module_name=module_name,
574
785
  package_name=package_name,
575
786
  reason=reason,
576
787
  )
@@ -716,6 +927,7 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
716
927
  ignore_suffixes=(),
717
928
  only_suffixes=(),
718
929
  normalize=True,
930
+ raw=False,
719
931
  ):
720
932
  return makeIncludedDataDirectory(
721
933
  source_path=source_path,
@@ -728,6 +940,7 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
728
940
  ignore_suffixes=ignore_suffixes,
729
941
  only_suffixes=only_suffixes,
730
942
  normalize=normalize,
943
+ raw=raw,
731
944
  )
732
945
 
733
946
  def makeIncludedEmptyDirectory(self, dest_path, reason, tags):
@@ -866,6 +1079,18 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
866
1079
  # Virtual method, pylint: disable=no-self-use,unused-argument
867
1080
  return None
868
1081
 
1082
+ def decideAnnotations(self, module_name):
1083
+ # Virtual method, pylint: disable=no-self-use,unused-argument
1084
+ return None
1085
+
1086
+ def decideDocStrings(self, module_name):
1087
+ # Virtual method, pylint: disable=no-self-use,unused-argument
1088
+ return None
1089
+
1090
+ def decideAssertions(self, module_name):
1091
+ # Virtual method, pylint: disable=no-self-use,unused-argument
1092
+ return None
1093
+
869
1094
  def getPreprocessorSymbols(self):
870
1095
  """Decide which C defines to be used in compilation.
871
1096
 
@@ -904,6 +1129,21 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
904
1129
  # Virtual method, pylint: disable=no-self-use
905
1130
  return None
906
1131
 
1132
+ @classmethod
1133
+ def getPluginDataFilesDir(cls):
1134
+ """Helper function that returns path, where data files for the plugin are stored."""
1135
+ plugin_filename = sys.modules[cls.__module__].__file__
1136
+ return changeFilenameExtension(plugin_filename, "")
1137
+
1138
+ def getPluginDataFileContents(self, filename):
1139
+ """Helper function that returns contents of a plugin data file."""
1140
+ return getFileContents(
1141
+ os.path.join(
1142
+ self.getPluginDataFilesDir(),
1143
+ filename,
1144
+ )
1145
+ )
1146
+
907
1147
  def getExtraCodeFiles(self):
908
1148
  """Add extra code files to the compilation.
909
1149
 
@@ -992,7 +1232,8 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
992
1232
  _runtime_information_cache = {}
993
1233
 
994
1234
  def queryRuntimeInformationMultiple(self, info_name, setup_codes, values):
995
- info_name = self.plugin_name.replace("-", "_") + "_" + info_name
1235
+ info_name = self.plugin_name + "_" + info_name
1236
+ info_name = info_name.replace("-", "_").replace(".", "_")
996
1237
 
997
1238
  if info_name in self._runtime_information_cache:
998
1239
  return self._runtime_information_cache[info_name]
@@ -1028,13 +1269,20 @@ except ImportError:
1028
1269
  }
1029
1270
 
1030
1271
  if shallShowExecutedCommands():
1031
- self.info("Executing query command:\n%s" % cmd)
1272
+ self.info("Executing query command:\n%s" % cmd, keep_format=True)
1273
+
1274
+ env = dict(os.environ)
1275
+ env["PYTHONIOENCODING"] = "utf8"
1032
1276
 
1033
1277
  try:
1034
- feedback = check_output([sys.executable, "-c", cmd])
1278
+ feedback = check_output([sys.executable, "-c", cmd], env=env)
1035
1279
  except NuitkaCalledProcessError as e:
1036
1280
  if e.returncode == 38:
1037
1281
  return None
1282
+
1283
+ if Options.is_debug:
1284
+ self.info(cmd, keep_format=True)
1285
+
1038
1286
  raise
1039
1287
 
1040
1288
  if str is not bytes: # We want to work with strings, that's hopefully OK.
@@ -1079,6 +1327,14 @@ except ImportError:
1079
1327
  # Virtual method, pylint: disable=no-self-use,unused-argument
1080
1328
  return False
1081
1329
 
1330
+ def onClassBodyParsing(self, module_name, class_name, node):
1331
+ # Virtual method, pylint: disable=no-self-use,unused-argument
1332
+ """Provide a different class body for the class of that module.
1333
+
1334
+ Should return a boolean, indicating if any actual change was done.
1335
+ """
1336
+ return False
1337
+
1082
1338
  def getCacheContributionValues(self, module_name):
1083
1339
  """Provide values that represent the include of a plugin on the compilation.
1084
1340
 
@@ -1090,6 +1346,11 @@ except ImportError:
1090
1346
  # Virtual method, pylint: disable=unused-argument
1091
1347
  return self.plugin_name
1092
1348
 
1349
+ def getExtraConstantDefaultPopulation(self):
1350
+ """Provide extra global constant values to code generation."""
1351
+ # Virtual method, pylint: disable=no-self-use
1352
+ return ()
1353
+
1093
1354
  def decideAllowOutsideDependencies(self, module_name):
1094
1355
  """Decide if outside of Python dependencies are allowed.
1095
1356
 
@@ -1100,14 +1361,218 @@ except ImportError:
1100
1361
  return None
1101
1362
 
1102
1363
  @staticmethod
1103
- def getPackageVersion(distribution_name):
1364
+ def getPackageVersion(module_name):
1104
1365
  """Provide package version of a distribution."""
1366
+ distribution_name = _getDistributionNameFromPackageName(module_name)
1367
+
1105
1368
  return _getPackageVersion(distribution_name)
1106
1369
 
1107
1370
  def getEvaluationConditionControlTags(self):
1108
1371
  # Virtual method, pylint: disable=no-self-use
1109
1372
  return {}
1110
1373
 
1374
+ @staticmethod
1375
+ def isValueForEvaluation(expression):
1376
+ return '"' in expression or "'" in expression or "(" in expression
1377
+
1378
+ def evaluateExpressionOrConstant(
1379
+ self, full_name, expression, config_name, extra_context, single_value
1380
+ ):
1381
+ if self.isValueForEvaluation(expression):
1382
+ return self.evaluateExpression(
1383
+ full_name=full_name,
1384
+ expression=expression,
1385
+ config_name=config_name,
1386
+ extra_context=extra_context,
1387
+ single_value=single_value,
1388
+ )
1389
+ else:
1390
+ return expression
1391
+
1392
+ def getExpressionConstants(self, full_name):
1393
+ if full_name not in _module_config_constants:
1394
+ constants = {}
1395
+
1396
+ for count, constant_config in enumerate(
1397
+ self.config.get(full_name, section="constants"), start=1
1398
+ ):
1399
+ declarations = constant_config.get("declarations")
1400
+
1401
+ if declarations and self.evaluateCondition(
1402
+ full_name=full_name,
1403
+ condition=constant_config.get("when", "True"),
1404
+ ):
1405
+ for constant_name, constant_value in declarations.items():
1406
+ constants[constant_name] = self.evaluateExpressionOrConstant(
1407
+ full_name=full_name,
1408
+ expression=constant_value,
1409
+ config_name="constants config #%d" % count,
1410
+ extra_context=None,
1411
+ single_value=False,
1412
+ )
1413
+
1414
+ _module_config_constants[full_name] = constants
1415
+
1416
+ return _module_config_constants[full_name]
1417
+
1418
+ def getExpressionVariables(self, full_name):
1419
+ if full_name not in _module_config_variables:
1420
+ variables = {}
1421
+
1422
+ for count, variable_config in enumerate(
1423
+ self.config.get(full_name, section="variables")
1424
+ ):
1425
+ environment = variable_config.get("environment", {})
1426
+ setup_codes = variable_config.get("setup_code", [])
1427
+ if type(setup_codes) is str:
1428
+ setup_codes = setup_codes.splitlines()
1429
+ declarations = variable_config.get("declarations", {})
1430
+
1431
+ if len(declarations) < 1:
1432
+ self.sysexit(
1433
+ "Error, no variable 'declarations' for %s makes no sense."
1434
+ % full_name
1435
+ )
1436
+
1437
+ if self.evaluateCondition(
1438
+ full_name=full_name,
1439
+ condition=variable_config.get("when", "True"),
1440
+ ):
1441
+ setup_codes.extend(
1442
+ "%s=%r" % (constant_name, constant_value)
1443
+ for (
1444
+ constant_name,
1445
+ constant_value,
1446
+ ) in self.getExpressionConstants(full_name=full_name).items()
1447
+ )
1448
+
1449
+ env_variables = {}
1450
+
1451
+ for env_name, env_value in environment.items():
1452
+ env_variables[env_name] = self.evaluateExpressionOrConstant(
1453
+ full_name=full_name,
1454
+ expression=env_value,
1455
+ config_name="variables config #%d" % count,
1456
+ extra_context=None,
1457
+ single_value=True,
1458
+ )
1459
+
1460
+ with withEnvironmentVarsOverridden(env_variables):
1461
+ info = self.queryRuntimeInformationMultiple(
1462
+ "%s_variables_%s" % (full_name.asString(), count),
1463
+ setup_codes=setup_codes,
1464
+ values=tuple(declarations.items()),
1465
+ )
1466
+
1467
+ if Options.isExperimental("display-yaml-variables"):
1468
+ self.info("Evaluated %r" % info)
1469
+
1470
+ if info is None:
1471
+ self.sysexit(
1472
+ "Error, failed to evaluate variables for %s." % full_name
1473
+ )
1474
+
1475
+ variables.update(info.asDict())
1476
+
1477
+ _module_config_variables[full_name] = variables
1478
+
1479
+ return _module_config_variables[full_name]
1480
+
1481
+ def evaluateExpression(
1482
+ self, full_name, expression, config_name, extra_context, single_value
1483
+ ):
1484
+ context = _makeEvaluationContext(
1485
+ logger=self, full_name=full_name, config_name=config_name
1486
+ )
1487
+
1488
+ def get_variable(variable_name):
1489
+ assert type(variable_name) is str, variable_name
1490
+
1491
+ result = self.getExpressionVariables(full_name=full_name)[variable_name]
1492
+
1493
+ addModuleInfluencingVariable(
1494
+ module_name=full_name,
1495
+ plugin_name=self.plugin_name,
1496
+ variable_name=variable_name,
1497
+ control_tags=context.used_tags,
1498
+ result=result,
1499
+ )
1500
+
1501
+ return result
1502
+
1503
+ def get_constant(constant_name):
1504
+ assert type(constant_name) is str, constant_name
1505
+
1506
+ result = self.getExpressionConstants(full_name=full_name)[constant_name]
1507
+
1508
+ # TODO: Record the constant value in report.
1509
+
1510
+ return result
1511
+
1512
+ context["get_variable"] = get_variable
1513
+ context["get_constant"] = get_constant
1514
+
1515
+ def get_parameter(parameter_name, default):
1516
+ result = Options.getModuleParameter(full_name, parameter_name)
1517
+
1518
+ if result is None:
1519
+ result = default
1520
+
1521
+ self.addModuleInfluencingParameter(
1522
+ module_name=full_name,
1523
+ parameter_name=parameter_name,
1524
+ condition_tags_used=context.used_tags,
1525
+ result=result,
1526
+ )
1527
+
1528
+ return result
1529
+
1530
+ context["get_parameter"] = get_parameter
1531
+
1532
+ if extra_context:
1533
+ context.update(extra_context)
1534
+
1535
+ with withNoWarning():
1536
+ # We trust the yaml files, pylint: disable=eval-used
1537
+ try:
1538
+ result = eval(expression, context)
1539
+ except Exception as e: # Catch all the things, pylint: disable=broad-except
1540
+ if Options.is_debug:
1541
+ raise
1542
+
1543
+ self.sysexit(
1544
+ "Error, failed to evaluate expression %r in this context, exception was '%s'."
1545
+ % (expression, e)
1546
+ )
1547
+
1548
+ if type(result) not in (str, unicode):
1549
+ if single_value:
1550
+ self.sysexit(
1551
+ """\
1552
+ Error, expression '%s' for module '%s' did not evaluate to 'str' result."""
1553
+ % (expression, full_name)
1554
+ )
1555
+ else:
1556
+ if type(result) not in (tuple, list):
1557
+ self.sysexit(
1558
+ """\
1559
+ Error, expression '%s' for module '%s' did not evaluate to 'str', 'tuple[str]' or 'list[str]' result."""
1560
+ % (expression, full_name)
1561
+ )
1562
+
1563
+ for v in result:
1564
+ if type(v) not in (str, unicode):
1565
+ self.sysexit(
1566
+ """\
1567
+ Error, expression '%s' for module '%s' did not evaluate to 'str', 'tuple[str]' or 'list[str]' result."""
1568
+ % (expression, full_name)
1569
+ )
1570
+
1571
+ # Make it immutable in case it's a list.
1572
+ result = tuple(result)
1573
+
1574
+ return result
1575
+
1111
1576
  def evaluateCondition(self, full_name, condition):
1112
1577
  # Note: Caching makes no sense yet, this should all be very fast and
1113
1578
  # cache themselves. TODO: Allow plugins to contribute their own control
@@ -1117,64 +1582,40 @@ except ImportError:
1117
1582
  if condition == "False":
1118
1583
  return False
1119
1584
 
1120
- context = TagContext(logger=self, full_name=full_name)
1121
- context.update(control_tags)
1122
-
1123
- context.update(
1124
- {
1125
- "macos": isMacOS(),
1126
- "win32": isWin32Windows(),
1127
- "linux": isLinux(),
1128
- "anaconda": isAnacondaPython(),
1129
- "is_conda_package": isDistributionCondaPackage,
1130
- "debian_python": isDebianPackagePython(),
1131
- "standalone": isStandaloneMode(),
1132
- "module_mode": shallMakeModule(),
1133
- "deployment": isDeploymentMode(),
1134
- # Querying package versions.
1135
- "version": _getPackageVersion,
1136
- "plugin": _isPluginActive,
1137
- "no_asserts": hasPythonFlagNoAsserts(),
1138
- "no_docstrings": hasPythonFlagNoDocStrings(),
1139
- "no_annotations": hasPythonFlagNoAnnotations(),
1140
- # Querying package properties
1141
- "has_builtin_module": isBuiltinModuleName,
1142
- }
1585
+ # TODO: Maybe add module name to config name?
1586
+ context = _makeEvaluationContext(
1587
+ logger=self, full_name=full_name, config_name="'when' configuration"
1143
1588
  )
1144
1589
 
1145
- if isWin32Windows():
1146
- context.update(
1147
- {
1148
- "arch_x86": getArchitecture() == "x86",
1149
- "arch_amd64": getArchitecture() == "x86_64",
1150
- "arch_arm64": getArchitecture() == "arm64",
1151
- }
1152
- )
1590
+ def get_parameter(parameter_name, default):
1591
+ result = Options.getModuleParameter(full_name, parameter_name)
1153
1592
 
1154
- versions = getTestExecutionPythonVersions()
1593
+ if result is None:
1594
+ result = default
1155
1595
 
1156
- for version in versions:
1157
- big, major = version.split(".")
1158
- numeric_version = int(big) * 256 + int(major) * 16
1159
- is_same_or_higher_version = python_version >= numeric_version
1596
+ self.addModuleInfluencingParameter(
1597
+ module_name=full_name,
1598
+ parameter_name=parameter_name,
1599
+ condition_tags_used=context.used_tags,
1600
+ result=result,
1601
+ )
1160
1602
 
1161
- context["python" + big + major + "_or_higher"] = is_same_or_higher_version
1162
- context["before_python" + big + major] = not is_same_or_higher_version
1603
+ return result
1163
1604
 
1164
- context["before_python3"] = python_version < 0x300
1165
- context["python3_or_higher"] = python_version >= 0x300
1605
+ context["get_parameter"] = get_parameter
1166
1606
 
1167
- # We trust the yaml files, pylint: disable=eval-used
1168
- try:
1169
- result = eval(condition, context)
1170
- except Exception as e: # Catch all the things, pylint: disable=broad-except
1171
- if Options.is_debug:
1172
- raise
1173
-
1174
- self.sysexit(
1175
- "Error, failed to evaluate condition '%s' in this context, exception was '%s'."
1176
- % (condition, e)
1177
- )
1607
+ with withNoWarning():
1608
+ # We trust the yaml files, pylint: disable=eval-used
1609
+ try:
1610
+ result = eval(condition, context)
1611
+ except Exception as e: # Catch all the things, pylint: disable=broad-except
1612
+ if Options.is_debug:
1613
+ raise
1614
+
1615
+ self.sysexit(
1616
+ "Error, failed to evaluate condition '%s' in this context, exception was '%s'."
1617
+ % (condition, e)
1618
+ )
1178
1619
 
1179
1620
  if type(result) is not bool:
1180
1621
  self.sysexit(
@@ -1192,6 +1633,27 @@ except ImportError:
1192
1633
 
1193
1634
  return result
1194
1635
 
1636
+ def addModuleInfluencingParameter(
1637
+ self, module_name, parameter_name, condition_tags_used, result
1638
+ ):
1639
+ addModuleInfluencingParameter(
1640
+ module_name=module_name,
1641
+ plugin_name=self.plugin_name,
1642
+ parameter_name=parameter_name,
1643
+ condition_tags_used=condition_tags_used,
1644
+ result=result,
1645
+ )
1646
+
1647
+ def addModuleInfluencingDetection(
1648
+ self, module_name, detection_name, detection_value
1649
+ ):
1650
+ addModuleInfluencingDetection(
1651
+ module_name=module_name,
1652
+ plugin_name=self.plugin_name,
1653
+ detection_name=detection_name,
1654
+ detection_value=detection_value,
1655
+ )
1656
+
1195
1657
  @classmethod
1196
1658
  def warning(cls, message, **kwargs):
1197
1659
  # Doing keyword only arguments manually, to keep older Python compatibility, and avoid
@@ -1203,40 +1665,31 @@ except ImportError:
1203
1665
  plugins_logger.warning(cls.plugin_name + ": " + message, mnemonic=mnemonic)
1204
1666
 
1205
1667
  @classmethod
1206
- def info(cls, message):
1207
- plugins_logger.info(cls.plugin_name + ": " + message)
1668
+ def info(cls, message, keep_format=False):
1669
+ plugins_logger.info(message, prefix=cls.plugin_name, keep_format=keep_format)
1670
+
1671
+ @classmethod
1672
+ def debug(cls, message, keep_format=False):
1673
+ if Options.is_debug:
1674
+ cls.info(message, keep_format=keep_format)
1208
1675
 
1209
1676
  @classmethod
1210
- def sysexit(cls, message, mnemonic=None):
1677
+ def sysexit(cls, message, mnemonic=None, reporting=True):
1211
1678
  plugins_logger.sysexit(
1212
- cls.plugin_name + ": " + message, mnemonic=mnemonic, reporting=True
1679
+ cls.plugin_name + ": " + message, mnemonic=mnemonic, reporting=reporting
1213
1680
  )
1214
1681
 
1215
1682
 
1216
- def standalone_only(func):
1217
- """For plugins that have functionality that should be done in standalone mode only."""
1218
-
1219
- @functools.wraps(func)
1220
- def wrapped(*args, **kwargs):
1221
- if isStandaloneMode():
1222
- return func(*args, **kwargs)
1223
- else:
1224
- if inspect.isgeneratorfunction(func):
1225
- return ()
1226
- else:
1227
- return None
1228
-
1229
- return wrapped
1230
-
1231
-
1232
1683
  class TagContext(dict):
1233
- def __init__(self, logger, full_name, *args, **kwargs):
1234
- dict.__init__(self, *args, **kwargs)
1684
+ def __init__(self, logger, full_name, config_name):
1685
+ dict.__init__(self)
1235
1686
 
1236
1687
  self.logger = logger
1237
1688
  self.full_name = full_name
1689
+ self.config_name = config_name
1238
1690
 
1239
1691
  self.used_tags = OrderedSet()
1692
+ self.used_variables = OrderedSet()
1240
1693
 
1241
1694
  def __getitem__(self, key):
1242
1695
  try:
@@ -1247,7 +1700,55 @@ class TagContext(dict):
1247
1700
  if key.startswith("use_"):
1248
1701
  return False
1249
1702
 
1703
+ if key == "no_asserts":
1704
+ # TODO: This should be better decoupled.
1705
+ from .Plugins import Plugins
1706
+
1707
+ return Plugins.decideAssertions(self.full_name) is False
1708
+
1709
+ if key == "no_docstrings":
1710
+ from .Plugins import Plugins
1711
+
1712
+ return Plugins.decideDocStrings(self.full_name) is False
1713
+
1714
+ if key == "no_annotations":
1715
+ from .Plugins import Plugins
1716
+
1717
+ return Plugins.decideAnnotations(self.full_name) is False
1718
+
1250
1719
  self.logger.sysexit(
1251
- "Identifier '%s' in 'when' configuration of module '%s' is unknown."
1252
- % (key, self.full_name)
1720
+ "Identifier '%s' in %s of module '%s' is unknown."
1721
+ % (key, self.config_name, self.full_name)
1253
1722
  )
1723
+
1724
+
1725
+ def standalone_only(func):
1726
+ """For plugins that have functionality that should be done in standalone mode only."""
1727
+
1728
+ @functools.wraps(func)
1729
+ def wrapped(*args, **kwargs):
1730
+ if isStandaloneMode():
1731
+ return func(*args, **kwargs)
1732
+ else:
1733
+ if inspect.isgeneratorfunction(func):
1734
+ return ()
1735
+ else:
1736
+ return None
1737
+
1738
+ return wrapped
1739
+
1740
+
1741
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
1742
+ # integrates with CPython, but also works on its own.
1743
+ #
1744
+ # Licensed under the Apache License, Version 2.0 (the "License");
1745
+ # you may not use this file except in compliance with the License.
1746
+ # You may obtain a copy of the License at
1747
+ #
1748
+ # http://www.apache.org/licenses/LICENSE-2.0
1749
+ #
1750
+ # Unless required by applicable law or agreed to in writing, software
1751
+ # distributed under the License is distributed on an "AS IS" BASIS,
1752
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1753
+ # See the License for the specific language governing permissions and
1754
+ # limitations under the License.