Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__cp311-cp311-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of Nuitka-winsvc might be problematic. Click here for more details.

Files changed (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +93 -54
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,6 @@
1
- # Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- #
3
- # Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- # integrates with CPython, but also works on its own.
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
1
+ # Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+
18
4
  """
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,131 @@ _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
+ # Checking module presence
177
+ "has_module": _hasModule,
178
+ # Getting data files contents
179
+ "get_data": _getPackageData,
180
+ # Querying package properties
181
+ "has_builtin_module": isBuiltinModuleName,
182
+ # Architectures
183
+ "arch_x86": getArchitecture() == "x86",
184
+ "arch_amd64": getArchitecture() == "x86_64",
185
+ "arch_arm64": getArchitecture() == "arm64",
186
+ # Frequent used modules
187
+ "sys": sys,
188
+ "os": os,
189
+ "importlib": _getImportLibModule(),
190
+ "appdirs": getAppdirsModule(),
191
+ "unittest": unittest,
192
+ # Python version string
193
+ "python_version_str": python_version_str,
194
+ "python_version_full_str": python_version_full_str,
195
+ # Technical requirements
196
+ "static_libpython": getSystemStaticLibPythonPath() is not None,
197
+ # Builtins
198
+ "True": True,
199
+ "False": False,
200
+ "None": None,
201
+ "repr": repr,
202
+ "len": len,
203
+ "str": str,
204
+ "bool": bool,
205
+ "int": int,
206
+ "tuple": tuple,
207
+ "list": list,
208
+ "dict": dict,
209
+ "set": set,
210
+ "getattr": getattr,
211
+ "hasattr": hasattr,
212
+ "frozenset": frozenset,
213
+ "__import__": __import__,
214
+ }
215
+
216
+ versions = getTestExecutionPythonVersions()
217
+
218
+ for version in versions:
219
+ big, major = version.split(".")
220
+ numeric_version = int(big) * 256 + int(major) * 16
221
+ is_same_or_higher_version = python_version >= numeric_version
222
+
223
+ _context_dict["python" + big + major + "_or_higher"] = (
224
+ is_same_or_higher_version
225
+ )
226
+ _context_dict["before_python" + big + major] = not is_same_or_higher_version
227
+
228
+ _context_dict["before_python3"] = python_version < 0x300
229
+ _context_dict["python3_or_higher"] = python_version >= 0x300
230
+
231
+ if not isNuitkaPython():
232
+ _context_dict["extension_std_suffix"] = getSharedLibrarySuffix(
233
+ preferred=True
234
+ )
235
+ _context_dict["extension_suffix"] = getSharedLibrarySuffix(preferred=False)
236
+
237
+ return _context_dict
238
+
97
239
 
98
240
  def _convertVersionToTuple(version_str):
99
241
  def numberize(v):
@@ -104,6 +246,8 @@ def _convertVersionToTuple(version_str):
104
246
 
105
247
 
106
248
  def _getPackageNameFromDistributionName(distribution_name):
249
+ # spell-checker: ignore opencv, pyobjc, objc
250
+
107
251
  if distribution_name in ("opencv-python", "opencv-python-headless"):
108
252
  return "cv2"
109
253
  elif distribution_name == "pyobjc":
@@ -112,6 +256,16 @@ def _getPackageNameFromDistributionName(distribution_name):
112
256
  return distribution_name
113
257
 
114
258
 
259
+ def _getDistributionNameFromPackageName(package_name):
260
+ package_name = ModuleName(package_name)
261
+ distribution = getDistributionFromModuleName(package_name)
262
+
263
+ if distribution is None:
264
+ return package_name.asString()
265
+ else:
266
+ return getDistributionName(distribution)
267
+
268
+
115
269
  def _getPackageVersion(distribution_name):
116
270
  if distribution_name not in _package_versions:
117
271
  try:
@@ -157,13 +311,64 @@ def _getPackageVersion(distribution_name):
157
311
  return _package_versions[distribution_name]
158
312
 
159
313
 
314
+ def _getPackageVersionStr(distribution_name):
315
+ version = _getPackageVersion(distribution_name)
316
+
317
+ if version is not None:
318
+ version = ".".join(str(d) for d in version)
319
+
320
+ return version
321
+
322
+
323
+ def _getModuleDirectory(module_name):
324
+ from nuitka.importing.Importing import locateModule
325
+
326
+ _module_name, module_filename, _module_kind, _finding = locateModule(
327
+ module_name=ModuleName(module_name), parent_package=None, level=0
328
+ )
329
+
330
+ return module_filename
331
+
332
+
333
+ def _hasModule(module_name):
334
+ from nuitka.importing.Importing import locateModule
335
+
336
+ _module_name, _module_filename, _module_kind, finding = locateModule(
337
+ module_name=ModuleName(module_name), parent_package=None, level=0
338
+ )
339
+
340
+ return finding != "not-found"
341
+
342
+
343
+ def _getPackageData(package_name, resource):
344
+ from nuitka.utils.PackageResources import getPackageData
345
+
346
+ return getPackageData(package_name=ModuleName(package_name), resource=resource)
347
+
348
+
349
+ def _iterate_module_names(package_name):
350
+ package_name = ModuleName(package_name)
351
+ package_path = _getModuleDirectory(module_name=package_name)
352
+
353
+ result = []
354
+
355
+ for module_info in iter_modules([package_path]):
356
+ module_name = package_name.getChildNamed(module_info.name)
357
+ result.append(module_name.asString())
358
+
359
+ if module_info.ispkg: # spell-checker: ignore ispkg
360
+ result.extend(_iterate_module_names(package_name=module_name))
361
+
362
+ return result
363
+
364
+
160
365
  def _isPluginActive(plugin_name):
161
366
  from .Plugins import getUserActivatedPluginNames
162
367
 
163
368
  return plugin_name in getUserActivatedPluginNames()
164
369
 
165
370
 
166
- class NuitkaPluginBase(getMetaClassBase("Plugin")):
371
+ class NuitkaPluginBase(getMetaClassBase("Plugin", require_slots=False)):
167
372
  """Nuitka base class for all plugins.
168
373
 
169
374
  Derive your plugin from "NuitkaPluginBase" please.
@@ -273,7 +478,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
273
478
  # Virtual method, pylint: disable=no-self-use,unused-argument
274
479
  return ()
275
480
 
276
- def onModuleSourceCode(self, module_name, source_code):
481
+ def onModuleSourceCode(self, module_name, source_filename, source_code):
277
482
  """Inspect or modify source code.
278
483
 
279
484
  Args:
@@ -286,6 +491,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
286
491
  going to allow simply checking the source code without the need to
287
492
  pass it back.
288
493
  """
494
+ # Virtual method, pylint: disable=unused-argument
289
495
  self.checkModuleSourceCode(module_name, source_code)
290
496
 
291
497
  return source_code
@@ -431,6 +637,25 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
431
637
  # Virtual method, pylint: disable=no-self-use,unused-argument
432
638
  return None
433
639
 
640
+ def onModuleUsageLookAhead(
641
+ self, module_name, module_filename, module_kind, get_module_source
642
+ ):
643
+ """React to tentative recursion of a module coming up.
644
+
645
+ For definite usage, use onModuleRecursion where it's a fact and
646
+ happening next. This may be a usage that is later optimized away
647
+ and doesn't impact anything. The main usage is to setup e.g.
648
+ hard imports as a factory, e.g. with detectable lazy loaders.
649
+
650
+ Args:
651
+ module_name: full module name
652
+ module_filename: filename
653
+ module_kind: one of "py", "extension" (shared library)
654
+ get_module_source: callable to get module source code if any
655
+ Returns:
656
+ None
657
+ """
658
+
434
659
  def onModuleRecursion(
435
660
  self,
436
661
  module_name,
@@ -440,7 +665,7 @@ class NuitkaPluginBase(getMetaClassBase("Plugin")):
440
665
  source_ref,
441
666
  reason,
442
667
  ):
443
- """React to recursion to a module coming up.
668
+ """React to recursion of a module coming up.
444
669
 
445
670
  Args:
446
671
  module_name: full module name
@@ -555,22 +780,28 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
555
780
  """
556
781
  return locateDLLsInDirectory(directory)
557
782
 
558
- def makeDllEntryPoint(self, source_path, dest_path, package_name, reason):
783
+ def makeDllEntryPoint(
784
+ self, source_path, dest_path, module_name, package_name, reason
785
+ ):
559
786
  """Create an entry point, as expected to be provided by getExtraDlls."""
560
787
  return makeDllEntryPoint(
561
788
  logger=self,
562
789
  source_path=source_path,
563
790
  dest_path=dest_path,
791
+ module_name=module_name,
564
792
  package_name=package_name,
565
793
  reason=reason,
566
794
  )
567
795
 
568
- def makeExeEntryPoint(self, source_path, dest_path, package_name, reason):
796
+ def makeExeEntryPoint(
797
+ self, source_path, dest_path, module_name, package_name, reason
798
+ ):
569
799
  """Create an entry point, as expected to be provided by getExtraDlls."""
570
800
  return makeExeEntryPoint(
571
801
  logger=self,
572
802
  source_path=source_path,
573
803
  dest_path=dest_path,
804
+ module_name=module_name,
574
805
  package_name=package_name,
575
806
  reason=reason,
576
807
  )
@@ -716,6 +947,7 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
716
947
  ignore_suffixes=(),
717
948
  only_suffixes=(),
718
949
  normalize=True,
950
+ raw=False,
719
951
  ):
720
952
  return makeIncludedDataDirectory(
721
953
  source_path=source_path,
@@ -728,6 +960,7 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
728
960
  ignore_suffixes=ignore_suffixes,
729
961
  only_suffixes=only_suffixes,
730
962
  normalize=normalize,
963
+ raw=raw,
731
964
  )
732
965
 
733
966
  def makeIncludedEmptyDirectory(self, dest_path, reason, tags):
@@ -866,6 +1099,18 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
866
1099
  # Virtual method, pylint: disable=no-self-use,unused-argument
867
1100
  return None
868
1101
 
1102
+ def decideAnnotations(self, module_name):
1103
+ # Virtual method, pylint: disable=no-self-use,unused-argument
1104
+ return None
1105
+
1106
+ def decideDocStrings(self, module_name):
1107
+ # Virtual method, pylint: disable=no-self-use,unused-argument
1108
+ return None
1109
+
1110
+ def decideAssertions(self, module_name):
1111
+ # Virtual method, pylint: disable=no-self-use,unused-argument
1112
+ return None
1113
+
869
1114
  def getPreprocessorSymbols(self):
870
1115
  """Decide which C defines to be used in compilation.
871
1116
 
@@ -904,6 +1149,21 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
904
1149
  # Virtual method, pylint: disable=no-self-use
905
1150
  return None
906
1151
 
1152
+ @classmethod
1153
+ def getPluginDataFilesDir(cls):
1154
+ """Helper function that returns path, where data files for the plugin are stored."""
1155
+ plugin_filename = sys.modules[cls.__module__].__file__
1156
+ return changeFilenameExtension(plugin_filename, "")
1157
+
1158
+ def getPluginDataFileContents(self, filename):
1159
+ """Helper function that returns contents of a plugin data file."""
1160
+ return getFileContents(
1161
+ os.path.join(
1162
+ self.getPluginDataFilesDir(),
1163
+ filename,
1164
+ )
1165
+ )
1166
+
907
1167
  def getExtraCodeFiles(self):
908
1168
  """Add extra code files to the compilation.
909
1169
 
@@ -992,7 +1252,8 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
992
1252
  _runtime_information_cache = {}
993
1253
 
994
1254
  def queryRuntimeInformationMultiple(self, info_name, setup_codes, values):
995
- info_name = self.plugin_name.replace("-", "_") + "_" + info_name
1255
+ info_name = self.plugin_name + "_" + info_name
1256
+ info_name = info_name.replace("-", "_").replace(".", "_")
996
1257
 
997
1258
  if info_name in self._runtime_information_cache:
998
1259
  return self._runtime_information_cache[info_name]
@@ -1010,31 +1271,52 @@ Unwanted import of '%(unwanted)s' that %(problem)s '%(binding_name)s' encountere
1010
1271
  setup_codes = setup_codes.splitlines()
1011
1272
 
1012
1273
  if not setup_codes:
1013
- setup_codes = ["pass"]
1274
+ setup_codes = ("pass",)
1014
1275
 
1015
1276
  cmd = r"""\
1016
1277
  from __future__ import print_function
1017
1278
  from __future__ import absolute_import
1279
+ import sys
1018
1280
 
1019
1281
  try:
1020
1282
  %(setup_codes)s
1021
1283
  except ImportError:
1022
- import sys
1023
1284
  sys.exit(38)
1285
+ try:
1024
1286
  %(query_codes)s
1287
+ except Exception as e:
1288
+ sys.stderr.write("\n%%s" %% repr(e))
1289
+ sys.exit(39)
1025
1290
  """ % {
1026
1291
  "setup_codes": "\n".join(" %s" % line for line in setup_codes),
1027
- "query_codes": "\n".join(query_codes),
1292
+ "query_codes": "\n".join(" %s" % line for line in query_codes),
1028
1293
  }
1029
1294
 
1030
1295
  if shallShowExecutedCommands():
1031
- self.info("Executing query command:\n%s" % cmd)
1296
+ self.info("Executing query command:\n%s" % cmd, keep_format=True)
1297
+
1298
+ env = dict(os.environ)
1299
+ env["PYTHONIOENCODING"] = "utf8"
1032
1300
 
1033
1301
  try:
1034
- feedback = check_output([sys.executable, "-c", cmd])
1302
+ feedback = check_output([sys.executable, "-c", cmd], env=env)
1035
1303
  except NuitkaCalledProcessError as e:
1036
1304
  if e.returncode == 38:
1037
1305
  return None
1306
+
1307
+ if Options.is_debug:
1308
+ self.info(cmd, keep_format=True)
1309
+
1310
+ if e.returncode == 39:
1311
+ # TODO: Recognize the ModuleNotFoundError or ImportError exceptions
1312
+ # and output the missing module.
1313
+ self.warning(
1314
+ "Exception during compile time command execution: %s"
1315
+ % e.stderr.splitlines()[-1]
1316
+ )
1317
+
1318
+ return None
1319
+
1038
1320
  raise
1039
1321
 
1040
1322
  if str is not bytes: # We want to work with strings, that's hopefully OK.
@@ -1079,6 +1361,14 @@ except ImportError:
1079
1361
  # Virtual method, pylint: disable=no-self-use,unused-argument
1080
1362
  return False
1081
1363
 
1364
+ def onClassBodyParsing(self, module_name, class_name, node):
1365
+ # Virtual method, pylint: disable=no-self-use,unused-argument
1366
+ """Provide a different class body for the class of that module.
1367
+
1368
+ Should return a boolean, indicating if any actual change was done.
1369
+ """
1370
+ return False
1371
+
1082
1372
  def getCacheContributionValues(self, module_name):
1083
1373
  """Provide values that represent the include of a plugin on the compilation.
1084
1374
 
@@ -1090,6 +1380,11 @@ except ImportError:
1090
1380
  # Virtual method, pylint: disable=unused-argument
1091
1381
  return self.plugin_name
1092
1382
 
1383
+ def getExtraConstantDefaultPopulation(self):
1384
+ """Provide extra global constant values to code generation."""
1385
+ # Virtual method, pylint: disable=no-self-use
1386
+ return ()
1387
+
1093
1388
  def decideAllowOutsideDependencies(self, module_name):
1094
1389
  """Decide if outside of Python dependencies are allowed.
1095
1390
 
@@ -1100,14 +1395,226 @@ except ImportError:
1100
1395
  return None
1101
1396
 
1102
1397
  @staticmethod
1103
- def getPackageVersion(distribution_name):
1398
+ def getPackageVersion(module_name):
1104
1399
  """Provide package version of a distribution."""
1400
+ distribution_name = _getDistributionNameFromPackageName(module_name)
1401
+
1105
1402
  return _getPackageVersion(distribution_name)
1106
1403
 
1107
1404
  def getEvaluationConditionControlTags(self):
1108
1405
  # Virtual method, pylint: disable=no-self-use
1109
1406
  return {}
1110
1407
 
1408
+ @staticmethod
1409
+ def isValueForEvaluation(expression):
1410
+ return '"' in expression or "'" in expression or "(" in expression
1411
+
1412
+ def evaluateExpressionOrConstant(
1413
+ self, full_name, expression, config_name, extra_context, single_value
1414
+ ):
1415
+ if self.isValueForEvaluation(expression):
1416
+ return self.evaluateExpression(
1417
+ full_name=full_name,
1418
+ expression=expression,
1419
+ config_name=config_name,
1420
+ extra_context=extra_context,
1421
+ single_value=single_value,
1422
+ )
1423
+ else:
1424
+ return expression
1425
+
1426
+ def getExpressionConstants(self, full_name):
1427
+ if full_name not in _module_config_constants:
1428
+ constants = {}
1429
+
1430
+ for count, constant_config in enumerate(
1431
+ self.config.get(full_name, section="constants"), start=1
1432
+ ):
1433
+ declarations = constant_config.get("declarations")
1434
+
1435
+ if declarations and self.evaluateCondition(
1436
+ full_name=full_name,
1437
+ condition=constant_config.get("when", "True"),
1438
+ ):
1439
+ for constant_name, constant_value in declarations.items():
1440
+ constants[constant_name] = self.evaluateExpressionOrConstant(
1441
+ full_name=full_name,
1442
+ expression=constant_value,
1443
+ config_name="constants config #%d" % count,
1444
+ extra_context=None,
1445
+ single_value=False,
1446
+ )
1447
+
1448
+ _module_config_constants[full_name] = constants
1449
+
1450
+ return _module_config_constants[full_name]
1451
+
1452
+ def getExpressionVariables(self, full_name):
1453
+ if full_name not in _module_config_variables:
1454
+ variables = {}
1455
+
1456
+ for count, variable_config in enumerate(
1457
+ self.config.get(full_name, section="variables")
1458
+ ):
1459
+ environment = variable_config.get("environment", {})
1460
+ setup_codes = variable_config.get("setup_code", [])
1461
+ if type(setup_codes) is str:
1462
+ setup_codes = setup_codes.splitlines()
1463
+ declarations = variable_config.get("declarations", {})
1464
+
1465
+ if len(declarations) < 1:
1466
+ self.sysexit(
1467
+ "Error, no variable 'declarations' for %s makes no sense."
1468
+ % full_name
1469
+ )
1470
+
1471
+ if self.evaluateCondition(
1472
+ full_name=full_name,
1473
+ condition=variable_config.get("when", "True"),
1474
+ ):
1475
+ setup_codes.extend(
1476
+ "%s=%r" % (constant_name, constant_value)
1477
+ for (
1478
+ constant_name,
1479
+ constant_value,
1480
+ ) in self.getExpressionConstants(full_name=full_name).items()
1481
+ )
1482
+
1483
+ env_variables = {}
1484
+
1485
+ for env_name, env_value in environment.items():
1486
+ env_variables[env_name] = self.evaluateExpressionOrConstant(
1487
+ full_name=full_name,
1488
+ expression=env_value,
1489
+ config_name="variables config #%d" % count,
1490
+ extra_context=None,
1491
+ single_value=True,
1492
+ )
1493
+
1494
+ with withEnvironmentVarsOverridden(env_variables):
1495
+ info = self.queryRuntimeInformationMultiple(
1496
+ "%s_variables_%s" % (full_name.asString(), count),
1497
+ setup_codes=setup_codes,
1498
+ values=tuple(declarations.items()),
1499
+ )
1500
+
1501
+ if Options.isExperimental("display-yaml-variables"):
1502
+ self.info("Evaluated %r" % info)
1503
+
1504
+ if info is None:
1505
+ self.sysexit(
1506
+ "Error, failed to evaluate variables for '%s'." % full_name
1507
+ )
1508
+
1509
+ variables.update(info.asDict())
1510
+
1511
+ _module_config_variables[full_name] = variables
1512
+
1513
+ return _module_config_variables[full_name]
1514
+
1515
+ def evaluateExpression(
1516
+ self, full_name, expression, config_name, extra_context, single_value
1517
+ ):
1518
+ context = _makeEvaluationContext(
1519
+ logger=self, full_name=full_name, config_name=config_name
1520
+ )
1521
+
1522
+ def get_variable(variable_name):
1523
+ assert type(variable_name) is str, variable_name
1524
+
1525
+ result = self.getExpressionVariables(full_name=full_name)[variable_name]
1526
+
1527
+ addModuleInfluencingVariable(
1528
+ module_name=full_name,
1529
+ plugin_name=self.plugin_name,
1530
+ variable_name=variable_name,
1531
+ control_tags=context.used_tags,
1532
+ result=result,
1533
+ )
1534
+
1535
+ return result
1536
+
1537
+ def get_constant(constant_name):
1538
+ assert type(constant_name) is str, constant_name
1539
+
1540
+ result = self.getExpressionConstants(full_name=full_name)[constant_name]
1541
+
1542
+ # TODO: Record the constant value in report.
1543
+
1544
+ return result
1545
+
1546
+ context["get_variable"] = get_variable
1547
+ context["get_constant"] = get_constant
1548
+
1549
+ def get_parameter(parameter_name, default):
1550
+ result = Options.getModuleParameter(full_name, parameter_name)
1551
+
1552
+ if result is None:
1553
+ result = default
1554
+
1555
+ self.addModuleInfluencingParameter(
1556
+ module_name=full_name,
1557
+ parameter_name=parameter_name,
1558
+ condition_tags_used=context.used_tags,
1559
+ result=result,
1560
+ )
1561
+
1562
+ return result
1563
+
1564
+ context["get_parameter"] = get_parameter
1565
+
1566
+ if extra_context:
1567
+ context.update(extra_context)
1568
+
1569
+ with withNoWarning():
1570
+ # We trust the yaml files, pylint: disable=eval-used
1571
+ try:
1572
+ result = eval(expression, context)
1573
+ except Exception as e: # Catch all the things, pylint: disable=broad-except
1574
+ if Options.is_debug:
1575
+ raise
1576
+
1577
+ self.sysexit(
1578
+ "Error, failed to evaluate expression %r in this context, exception was '%r'."
1579
+ % (expression, e)
1580
+ )
1581
+
1582
+ if type(result) not in (str, unicode):
1583
+ if single_value:
1584
+ self._checkStrResult(
1585
+ value=result, expression=expression, full_name=full_name
1586
+ )
1587
+ else:
1588
+ self._checkSequenceResult(
1589
+ value=result, expression=expression, full_name=full_name
1590
+ )
1591
+
1592
+ for v in result:
1593
+ self._checkStrResult(
1594
+ value=v, expression=expression, full_name=full_name
1595
+ )
1596
+
1597
+ # Make it immutable in case it's a list.
1598
+ result = tuple(result)
1599
+
1600
+ return result
1601
+
1602
+ def _checkStrResult(self, value, expression, full_name):
1603
+ if type(value) not in (str, unicode):
1604
+ self.sysexit(
1605
+ """\
1606
+ Error, expression '%s' for module '%s' did not evaluate to 'str', 'tuple[str]' or 'list[str]' result but '%s'"""
1607
+ % (expression, full_name, type(value))
1608
+ )
1609
+
1610
+ def _checkSequenceResult(self, value, expression, full_name):
1611
+ if type(value) not in (tuple, list):
1612
+ self.sysexit(
1613
+ """\
1614
+ Error, expression '%s' for module '%s' did not evaluate to 'tuple[str]' or 'list[str]' result."""
1615
+ % (expression, full_name)
1616
+ )
1617
+
1111
1618
  def evaluateCondition(self, full_name, condition):
1112
1619
  # Note: Caching makes no sense yet, this should all be very fast and
1113
1620
  # cache themselves. TODO: Allow plugins to contribute their own control
@@ -1117,64 +1624,40 @@ except ImportError:
1117
1624
  if condition == "False":
1118
1625
  return False
1119
1626
 
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
- }
1627
+ # TODO: Maybe add module name to config name?
1628
+ context = _makeEvaluationContext(
1629
+ logger=self, full_name=full_name, config_name="'when' configuration"
1143
1630
  )
1144
1631
 
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
- )
1632
+ def get_parameter(parameter_name, default):
1633
+ result = Options.getModuleParameter(full_name, parameter_name)
1153
1634
 
1154
- versions = getTestExecutionPythonVersions()
1635
+ if result is None:
1636
+ result = default
1155
1637
 
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
1160
-
1161
- context["python" + big + major + "_or_higher"] = is_same_or_higher_version
1162
- context["before_python" + big + major] = not is_same_or_higher_version
1638
+ self.addModuleInfluencingParameter(
1639
+ module_name=full_name,
1640
+ parameter_name=parameter_name,
1641
+ condition_tags_used=context.used_tags,
1642
+ result=result,
1643
+ )
1163
1644
 
1164
- context["before_python3"] = python_version < 0x300
1165
- context["python3_or_higher"] = python_version >= 0x300
1645
+ return result
1166
1646
 
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
1647
+ context["get_parameter"] = get_parameter
1173
1648
 
1174
- self.sysexit(
1175
- "Error, failed to evaluate condition '%s' in this context, exception was '%s'."
1176
- % (condition, e)
1177
- )
1649
+ with withNoWarning():
1650
+ # We trust the yaml files, pylint: disable=eval-used
1651
+ try:
1652
+ result = eval(condition, context)
1653
+ except Exception as e: # Catch all the things, pylint: disable=broad-except
1654
+ if Options.is_debug:
1655
+ raise
1656
+
1657
+ self.sysexit(
1658
+ "Error, failed to evaluate condition '%s' in this context, exception was '%s'."
1659
+ % (condition, e)
1660
+ )
1178
1661
 
1179
1662
  if type(result) is not bool:
1180
1663
  self.sysexit(
@@ -1192,6 +1675,27 @@ except ImportError:
1192
1675
 
1193
1676
  return result
1194
1677
 
1678
+ def addModuleInfluencingParameter(
1679
+ self, module_name, parameter_name, condition_tags_used, result
1680
+ ):
1681
+ addModuleInfluencingParameter(
1682
+ module_name=module_name,
1683
+ plugin_name=self.plugin_name,
1684
+ parameter_name=parameter_name,
1685
+ condition_tags_used=condition_tags_used,
1686
+ result=result,
1687
+ )
1688
+
1689
+ def addModuleInfluencingDetection(
1690
+ self, module_name, detection_name, detection_value
1691
+ ):
1692
+ addModuleInfluencingDetection(
1693
+ module_name=module_name,
1694
+ plugin_name=self.plugin_name,
1695
+ detection_name=detection_name,
1696
+ detection_value=detection_value,
1697
+ )
1698
+
1195
1699
  @classmethod
1196
1700
  def warning(cls, message, **kwargs):
1197
1701
  # Doing keyword only arguments manually, to keep older Python compatibility, and avoid
@@ -1203,40 +1707,31 @@ except ImportError:
1203
1707
  plugins_logger.warning(cls.plugin_name + ": " + message, mnemonic=mnemonic)
1204
1708
 
1205
1709
  @classmethod
1206
- def info(cls, message):
1207
- plugins_logger.info(cls.plugin_name + ": " + message)
1710
+ def info(cls, message, keep_format=False):
1711
+ plugins_logger.info(message, prefix=cls.plugin_name, keep_format=keep_format)
1712
+
1713
+ @classmethod
1714
+ def debug(cls, message, keep_format=False):
1715
+ if Options.is_debug:
1716
+ cls.info(message, keep_format=keep_format)
1208
1717
 
1209
1718
  @classmethod
1210
- def sysexit(cls, message, mnemonic=None):
1719
+ def sysexit(cls, message, mnemonic=None, reporting=True):
1211
1720
  plugins_logger.sysexit(
1212
- cls.plugin_name + ": " + message, mnemonic=mnemonic, reporting=True
1721
+ cls.plugin_name + ": " + message, mnemonic=mnemonic, reporting=reporting
1213
1722
  )
1214
1723
 
1215
1724
 
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
1725
  class TagContext(dict):
1233
- def __init__(self, logger, full_name, *args, **kwargs):
1234
- dict.__init__(self, *args, **kwargs)
1726
+ def __init__(self, logger, full_name, config_name):
1727
+ dict.__init__(self)
1235
1728
 
1236
1729
  self.logger = logger
1237
1730
  self.full_name = full_name
1731
+ self.config_name = config_name
1238
1732
 
1239
1733
  self.used_tags = OrderedSet()
1734
+ self.used_variables = OrderedSet()
1240
1735
 
1241
1736
  def __getitem__(self, key):
1242
1737
  try:
@@ -1247,7 +1742,55 @@ class TagContext(dict):
1247
1742
  if key.startswith("use_"):
1248
1743
  return False
1249
1744
 
1745
+ if key == "no_asserts":
1746
+ # TODO: This should be better decoupled.
1747
+ from .Plugins import Plugins
1748
+
1749
+ return Plugins.decideAssertions(self.full_name) is False
1750
+
1751
+ if key == "no_docstrings":
1752
+ from .Plugins import Plugins
1753
+
1754
+ return Plugins.decideDocStrings(self.full_name) is False
1755
+
1756
+ if key == "no_annotations":
1757
+ from .Plugins import Plugins
1758
+
1759
+ return Plugins.decideAnnotations(self.full_name) is False
1760
+
1250
1761
  self.logger.sysexit(
1251
- "Identifier '%s' in 'when' configuration of module '%s' is unknown."
1252
- % (key, self.full_name)
1762
+ "Identifier '%s' in %s of module '%s' is unknown."
1763
+ % (key, self.config_name, self.full_name)
1253
1764
  )
1765
+
1766
+
1767
+ def standalone_only(func):
1768
+ """For plugins that have functionality that should be done in standalone mode only."""
1769
+
1770
+ @functools.wraps(func)
1771
+ def wrapped(*args, **kwargs):
1772
+ if isStandaloneMode():
1773
+ return func(*args, **kwargs)
1774
+ else:
1775
+ if inspect.isgeneratorfunction(func):
1776
+ return ()
1777
+ else:
1778
+ return None
1779
+
1780
+ return wrapped
1781
+
1782
+
1783
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
1784
+ # integrates with CPython, but also works on its own.
1785
+ #
1786
+ # Licensed under the Apache License, Version 2.0 (the "License");
1787
+ # you may not use this file except in compliance with the License.
1788
+ # You may obtain a copy of the License at
1789
+ #
1790
+ # http://www.apache.org/licenses/LICENSE-2.0
1791
+ #
1792
+ # Unless required by applicable law or agreed to in writing, software
1793
+ # distributed under the License is distributed on an "AS IS" BASIS,
1794
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1795
+ # See the License for the specific language governing permissions and
1796
+ # limitations under the License.