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
  """ Nodes related to importing modules or names.
19
5
 
20
6
  Normally imports are mostly relatively static, but Nuitka also attempts to
@@ -26,43 +12,56 @@ deeper that what it normally could. The import expression node can lead to
26
12
  modules being added. After optimization it will be asked about used modules.
27
13
  """
28
14
 
29
- import os
30
15
  import sys
31
16
 
32
17
  from nuitka.__past__ import long, unicode, xrange
33
18
  from nuitka.code_generation.Reports import onMissingTrust
19
+ from nuitka.HardImportRegistry import (
20
+ addModuleSingleAttributeNodeFactory,
21
+ hard_modules_aliases,
22
+ hard_modules_limited,
23
+ hard_modules_non_stdlib,
24
+ hard_modules_stdlib,
25
+ hard_modules_trust,
26
+ isHardModule,
27
+ isHardModuleWithoutSideEffect,
28
+ trust_constant,
29
+ trust_importable,
30
+ trust_may_exist,
31
+ trust_node,
32
+ trust_node_factory,
33
+ trust_undefined,
34
+ )
34
35
  from nuitka.importing.Importing import (
36
+ isNonRaisingBuiltinModule,
35
37
  isPackageDir,
36
38
  locateModule,
37
39
  makeModuleUsageAttempt,
40
+ makeParentModuleUsagesAttempts,
38
41
  )
39
42
  from nuitka.importing.ImportResolving import resolveModuleName
40
43
  from nuitka.importing.Recursion import decideRecursion
41
44
  from nuitka.importing.StandardLibrary import isStandardLibraryPath
42
45
  from nuitka.Options import (
46
+ isExperimental,
43
47
  isStandaloneMode,
44
48
  shallMakeModule,
45
49
  shallWarnUnusualCode,
46
50
  )
47
- from nuitka.PythonVersions import (
48
- getFutureModuleKeys,
49
- getImportlibSubPackages,
50
- python_version,
51
- )
51
+ from nuitka.plugins.Plugins import Plugins
52
+ from nuitka.PythonVersions import python_version
52
53
  from nuitka.specs.BuiltinParameterSpecs import (
53
54
  BuiltinParameterSpec,
54
55
  extractBuiltinArgs,
55
56
  )
56
57
  from nuitka.Tracing import unusual_logger
57
58
  from nuitka.utils.ModuleNames import ModuleName
58
- from nuitka.utils.Utils import isWin32Windows
59
59
 
60
60
  from .ChildrenHavingMixins import (
61
61
  ChildHavingModuleMixin,
62
62
  ChildrenExpressionBuiltinImportMixin,
63
63
  ChildrenExpressionImportlibImportModuleCallMixin,
64
64
  )
65
- from .ConstantRefNodes import ExpressionConstantSysVersionInfoRef
66
65
  from .ExpressionBases import ExpressionBase
67
66
  from .ImportHardNodes import (
68
67
  ExpressionImportHardBase,
@@ -79,270 +78,6 @@ from .NodeMakingHelpers import (
79
78
  from .shapes.BuiltinTypeShapes import tshape_module, tshape_module_builtin
80
79
  from .StatementBasesGenerated import StatementImportStarBase
81
80
 
82
- # These module are supported in code generation to be imported the hard way.
83
- hard_modules = frozenset(
84
- (
85
- "os",
86
- "ntpath",
87
- "posixpath",
88
- # TODO: Add mac path package too
89
- "sys",
90
- "types",
91
- "typing",
92
- "__future__",
93
- "importlib",
94
- "importlib.resources",
95
- "importlib.metadata",
96
- "_frozen_importlib",
97
- "_frozen_importlib_external",
98
- "pkgutil",
99
- "functools",
100
- "sysconfig",
101
- "unittest",
102
- "unittest.mock",
103
- # "cStringIO",
104
- "io",
105
- "_io",
106
- "ctypes",
107
- "ctypes.wintypes",
108
- "ctypes.macholib",
109
- # TODO: Once generation of nodes for functions exists.
110
- # "platform",
111
- )
112
- )
113
-
114
- hard_modules_aliases = {
115
- "os.path": os.path.__name__,
116
- }
117
-
118
- # Lets put here, hard modules that are kind of backports only.
119
- hard_modules_stdlib = hard_modules
120
- hard_modules_non_stdlib = frozenset(
121
- (
122
- "site",
123
- "pkg_resources",
124
- "importlib_metadata",
125
- "importlib_resources",
126
- )
127
- )
128
-
129
- hard_modules = hard_modules | hard_modules_non_stdlib
130
-
131
- hard_modules_version = {
132
- "cStringIO": (None, 0x300, None),
133
- "typing": (0x350, None, None),
134
- "_frozen_importlib": (0x300, None, None),
135
- "_frozen_importlib_external": (0x350, None, None),
136
- "importlib.resources": (0x370, None, None),
137
- "importlib.metadata": (0x380, None, None),
138
- "ctypes.wintypes": (None, None, "win32"),
139
- }
140
-
141
- hard_modules_limited = ("importlib.metadata", "ctypes.wintypes", "importlib_metadata")
142
-
143
-
144
- def isHardModule(module_name):
145
- if module_name not in hard_modules:
146
- return False
147
-
148
- min_version, max_version, os_limit = hard_modules_version.get(
149
- module_name, (None, None, None)
150
- )
151
-
152
- if min_version is not None and python_version < min_version:
153
- return False
154
-
155
- if max_version is not None and python_version >= max_version:
156
- return False
157
-
158
- if os_limit is not None:
159
- if os_limit == "win32":
160
- return isWin32Windows()
161
-
162
- return True
163
-
164
-
165
- trust_undefined = 0
166
- trust_constant = 1
167
- trust_exist = 2
168
- trust_future = trust_exist
169
- trust_importable = 3
170
- trust_node = 4
171
- trust_may_exist = 5
172
- trust_not_exist = 6
173
- trust_node_factory = {}
174
-
175
- module_importlib_trust = dict(
176
- (key, trust_importable) for key in getImportlibSubPackages()
177
- )
178
-
179
- if "metadata" not in module_importlib_trust:
180
- module_importlib_trust["metadata"] = trust_undefined
181
- if "resources" not in module_importlib_trust:
182
- module_importlib_trust["resources"] = trust_undefined
183
-
184
- module_sys_trust = {
185
- "version": trust_constant,
186
- "hexversion": trust_constant,
187
- "platform": trust_constant,
188
- "maxsize": trust_constant,
189
- "byteorder": trust_constant,
190
- "builtin_module_names": trust_constant,
191
- "stdout": trust_exist,
192
- "stderr": trust_exist,
193
- }
194
-
195
- if python_version < 0x270:
196
- module_sys_trust["version_info"] = trust_constant
197
- else:
198
- module_sys_trust["version_info"] = trust_node
199
- trust_node_factory[("sys", "version_info")] = ExpressionConstantSysVersionInfoRef
200
-
201
- if python_version < 0x300:
202
- module_sys_trust["exc_type"] = trust_may_exist
203
- module_sys_trust["exc_value"] = trust_may_exist
204
- module_sys_trust["exc_traceback"] = trust_may_exist
205
-
206
- module_sys_trust["maxint"] = trust_constant
207
- module_sys_trust["subversion"] = trust_constant
208
- else:
209
- module_sys_trust["exc_type"] = trust_not_exist
210
- module_sys_trust["exc_value"] = trust_not_exist
211
- module_sys_trust["exc_traceback"] = trust_not_exist
212
-
213
- module_typing_trust = {
214
- "TYPE_CHECKING": trust_constant,
215
- }
216
-
217
- module_os_trust = {
218
- "name": trust_constant,
219
- "listdir": trust_node,
220
- "curdir": trust_constant,
221
- "pardir": trust_constant,
222
- "sep": trust_constant,
223
- "extsep": trust_constant,
224
- "altsep": trust_constant,
225
- "pathsep": trust_constant,
226
- "linesep": trust_constant,
227
- }
228
-
229
- module_os_path_trust = {
230
- "exists": trust_node,
231
- "isfile": trust_node,
232
- "isdir": trust_node,
233
- "basename": trust_node,
234
- }
235
-
236
-
237
- module_ctypes_trust = {
238
- "CDLL": trust_node,
239
- }
240
-
241
- # module_platform_trust = {"python_implementation": trust_function}
242
-
243
- hard_modules_trust = {
244
- "os": module_os_trust,
245
- "ntpath": module_os_path_trust if os.path.__name__ == "ntpath" else {},
246
- "posixpath": module_os_path_trust if os.path.__name__ == "posixpath" else {},
247
- "sys": module_sys_trust,
248
- # "platform": module_platform_trust,
249
- "types": {},
250
- "typing": module_typing_trust,
251
- "__future__": dict((key, trust_future) for key in getFutureModuleKeys()),
252
- "importlib": module_importlib_trust,
253
- "importlib.metadata": {
254
- "version": trust_node,
255
- "distribution": trust_node,
256
- "metadata": trust_node,
257
- "entry_points": trust_node,
258
- "PackageNotFoundError": trust_exist,
259
- },
260
- "importlib_metadata": {
261
- "version": trust_node,
262
- "distribution": trust_node,
263
- "metadata": trust_node,
264
- "entry_points": trust_node,
265
- "PackageNotFoundError": trust_exist,
266
- },
267
- "_frozen_importlib": {},
268
- "_frozen_importlib_external": {},
269
- "pkgutil": {"get_data": trust_node},
270
- "functools": {"partial": trust_exist},
271
- "sysconfig": {},
272
- # TODO: We should have trust_module too.
273
- "unittest": {"mock": trust_exist},
274
- "unittest.mock": {},
275
- "io": {"BytesIO": trust_exist, "StringIO": trust_exist},
276
- "_io": {"BytesIO": trust_exist, "StringIO": trust_exist},
277
- # "cStringIO": {"StringIO": trust_exist},
278
- "pkg_resources": {
279
- "require": trust_node,
280
- "get_distribution": trust_node,
281
- "iter_entry_points": trust_node,
282
- "resource_string": trust_node,
283
- "resource_stream": trust_node,
284
- },
285
- "importlib.resources": {
286
- "read_binary": trust_node,
287
- "read_text": trust_node,
288
- "files": trust_node,
289
- },
290
- "importlib_resources": {
291
- "read_binary": trust_node,
292
- "read_text": trust_node,
293
- "files": trust_node,
294
- },
295
- "ctypes": module_ctypes_trust,
296
- "site": {},
297
- "ctypes.wintypes": {},
298
- "ctypes.macholib": {},
299
- }
300
-
301
-
302
- def _addHardImportNodeClasses():
303
- from .HardImportNodesGenerated import hard_import_node_classes
304
-
305
- for hard_import_node_class, spec in hard_import_node_classes.items():
306
- module_name, function_name = spec.name.rsplit(".", 1)
307
-
308
- if module_name in hard_modules_aliases:
309
- module_name = hard_modules_aliases.get(module_name)
310
-
311
- trust_node_factory[(module_name, function_name)] = hard_import_node_class
312
-
313
- # hard_modules_trust[module_name][function_name] = trust_node
314
-
315
-
316
- _addHardImportNodeClasses()
317
-
318
- # Remove this one again, not available on Windows, but the node generation does
319
- # not know that.
320
- if isWin32Windows():
321
- module_os_trust["uname"] = trust_not_exist
322
-
323
-
324
- def _checkHardModules():
325
- for module_name in hard_modules:
326
- assert module_name in hard_modules_trust, module_name
327
-
328
- for module_name, trust in hard_modules_trust.items():
329
- assert module_name in hard_modules, module_name
330
-
331
- for attribute_name, trust_value in trust.items():
332
- if trust_value is trust_node:
333
- assert (
334
- module_name,
335
- attribute_name,
336
- ) in trust_node_factory or os.path.basename(sys.argv[0]).startswith(
337
- "generate-"
338
- ), (
339
- module_name,
340
- attribute_name,
341
- )
342
-
343
-
344
- _checkHardModules()
345
-
346
81
 
347
82
  def makeExpressionImportModuleNameHard(
348
83
  module_name, import_name, module_guaranteed, source_ref
@@ -363,25 +98,13 @@ def makeExpressionImportModuleNameHard(
363
98
  )
364
99
 
365
100
 
366
- # These modules can cause issues if imported during compile time.
367
- hard_modules_trust_with_side_effects = set(["site"])
368
- if not isWin32Windows():
369
- # Crashing on anything but Windows.
370
- hard_modules_trust_with_side_effects.add("ctypes.wintypes")
371
-
372
-
373
- def isHardModuleWithoutSideEffect(module_name):
374
- return (
375
- module_name in hard_modules
376
- and module_name not in hard_modules_trust_with_side_effects
377
- )
378
-
379
-
380
101
  class ExpressionImportAllowanceMixin(object):
381
102
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
382
103
  __slots__ = ()
383
104
 
384
- def __init__(self):
105
+ def __init__(self, using_module_name):
106
+ self.using_module_name = using_module_name
107
+
385
108
  if self.finding == "not-found":
386
109
  self.allowed = False
387
110
  elif self.finding == "built-in":
@@ -390,7 +113,7 @@ class ExpressionImportAllowanceMixin(object):
390
113
  self.allowed = True
391
114
  else:
392
115
  self.allowed, _reason = decideRecursion(
393
- using_module_name=None,
116
+ using_module_name=self.using_module_name,
394
117
  module_filename=self.module_filename,
395
118
  module_name=self.module_name,
396
119
  module_kind=self.module_kind,
@@ -413,17 +136,19 @@ class ExpressionImportModuleFixed(ExpressionBase):
413
136
 
414
137
  __slots__ = (
415
138
  "module_name",
139
+ "value_name",
416
140
  "found_module_name",
417
141
  "found_module_filename",
418
142
  "module_kind",
419
143
  "finding",
420
- "allowance",
144
+ "module_usages",
421
145
  )
422
146
 
423
- def __init__(self, module_name, source_ref):
147
+ def __init__(self, module_name, value_name, source_ref):
424
148
  ExpressionBase.__init__(self, source_ref)
425
149
 
426
150
  self.module_name = ModuleName(module_name)
151
+ self.value_name = ModuleName(value_name)
427
152
 
428
153
  self.finding = None
429
154
 
@@ -435,6 +160,18 @@ class ExpressionImportModuleFixed(ExpressionBase):
435
160
  self.finding,
436
161
  ) = self._attemptFollow()
437
162
 
163
+ self.module_usages = makeParentModuleUsagesAttempts(
164
+ makeModuleUsageAttempt(
165
+ module_name=self.found_module_name,
166
+ filename=self.found_module_filename,
167
+ finding=self.finding,
168
+ module_kind=self.module_kind,
169
+ level=0,
170
+ source_ref=self.source_ref,
171
+ reason="import",
172
+ )
173
+ )
174
+
438
175
  # TODO: This is called in constructor only, is it, then inline it.
439
176
  def _attemptFollow(self):
440
177
  found_module_name, found_module_filename, module_kind, finding = locateModule(
@@ -470,11 +207,14 @@ class ExpressionImportModuleFixed(ExpressionBase):
470
207
  del self.parent
471
208
 
472
209
  def getDetails(self):
473
- return {"module_name": self.module_name}
210
+ return {"module_name": self.module_name, "value_name": self.value_name}
474
211
 
475
212
  def getModuleName(self):
476
213
  return self.module_name
477
214
 
215
+ def getValueName(self):
216
+ return self.value_name
217
+
478
218
  @staticmethod
479
219
  def mayHaveSideEffects():
480
220
  # TODO: For included modules, we might be able to tell, not not done now.
@@ -486,28 +226,119 @@ class ExpressionImportModuleFixed(ExpressionBase):
486
226
  return True
487
227
 
488
228
  def getTypeShape(self):
229
+ # TODO: This ought to be dead code, built-in modules have their own nodes now
230
+ # and may only be hard imports, but not this.
489
231
  if self.module_name in sys.builtin_module_names:
490
232
  return tshape_module_builtin
491
233
  else:
492
234
  return tshape_module
493
235
 
494
- def getModuleUsageAttempt(self):
495
- return makeModuleUsageAttempt(
496
- module_name=self.found_module_name,
497
- filename=self.found_module_filename,
498
- finding=self.finding,
499
- module_kind=self.module_kind,
236
+ def getModuleUsageAttempts(self):
237
+ return self.module_usages
238
+
239
+ def computeExpressionRaw(self, trace_collection):
240
+ if self.mayRaiseException(BaseException):
241
+ trace_collection.onExceptionRaiseExit(BaseException)
242
+
243
+ # Trace the module usage attempt.
244
+ trace_collection.onModuleUsageAttempts(self.getModuleUsageAttempts())
245
+
246
+ # Nothing to do about it.
247
+ return self, None, None
248
+
249
+ def computeExpressionImportName(self, import_node, import_name, trace_collection):
250
+ # TODO: For include modules, something might be possible here, consider self.allowance
251
+ # when that is implemented.
252
+ return self.computeExpressionAttribute(
253
+ lookup_node=import_node,
254
+ attribute_name=import_name,
255
+ trace_collection=trace_collection,
256
+ )
257
+
258
+
259
+ class ExpressionImportModuleBuiltin(ExpressionBase):
260
+ """Hard coded import names, that we know to exist."
261
+
262
+ These created as result of builtin imports and "importlib.import_module" calls
263
+ that were compile time resolved, and for known module names.
264
+ """
265
+
266
+ kind = "EXPRESSION_IMPORT_MODULE_BUILTIN"
267
+
268
+ __slots__ = (
269
+ "module_name",
270
+ "value_name",
271
+ "module_kind",
272
+ "builtin_module",
273
+ "module_usages",
274
+ )
275
+
276
+ def __init__(self, module_name, value_name, source_ref):
277
+ ExpressionBase.__init__(self, source_ref)
278
+
279
+ self.module_name = ModuleName(module_name)
280
+ self.value_name = ModuleName(value_name)
281
+
282
+ self.builtin_module = __import__(module_name.asString())
283
+
284
+ # If not found, we import the package at least
285
+ _module_name, _module_filename, _module_kind, _finding = locateModule(
286
+ module_name=self.module_name,
287
+ parent_package=None,
500
288
  level=0,
501
- source_ref=self.source_ref,
502
- reason="import",
503
289
  )
504
290
 
291
+ assert _module_name == self.module_name, _module_name
292
+ assert _finding == "built-in", _finding
293
+ assert _module_kind is None, _module_kind
294
+
295
+ self.module_usages = makeParentModuleUsagesAttempts(
296
+ makeModuleUsageAttempt(
297
+ module_name=self.module_name,
298
+ filename=None,
299
+ finding="built-in",
300
+ module_kind=None,
301
+ level=0,
302
+ source_ref=self.source_ref,
303
+ reason="import",
304
+ )
305
+ )
306
+
307
+ @staticmethod
308
+ def getTypeShape():
309
+ return tshape_module_builtin
310
+
311
+ def mayRaiseExceptionImportName(self, exception_type, import_name):
312
+ return not hasattr(self.builtin_module, import_name)
313
+
314
+ def finalize(self):
315
+ del self.parent
316
+
317
+ def getDetails(self):
318
+ return {"module_name": self.module_name, "value_name": self.value_name}
319
+
320
+ def getModuleName(self):
321
+ return self.module_name
322
+
323
+ def getValueName(self):
324
+ return self.value_name
325
+
326
+ @staticmethod
327
+ def mayHaveSideEffects():
328
+ return True
329
+
330
+ def mayRaiseException(self, exception_type):
331
+ return isNonRaisingBuiltinModule(self.module_name) is not False
332
+
333
+ def getModuleUsageAttempts(self):
334
+ return self.module_usages
335
+
505
336
  def computeExpressionRaw(self, trace_collection):
506
337
  if self.mayRaiseException(BaseException):
507
338
  trace_collection.onExceptionRaiseExit(BaseException)
508
339
 
509
340
  # Trace the module usage attempt.
510
- trace_collection.onModuleUsageAttempt(self.getModuleUsageAttempt())
341
+ trace_collection.onModuleUsageAttempts(self.getModuleUsageAttempts())
511
342
 
512
343
  # Nothing to do about it.
513
344
  return self, None, None
@@ -533,17 +364,26 @@ class ExpressionImportModuleHard(
533
364
 
534
365
  kind = "EXPRESSION_IMPORT_MODULE_HARD"
535
366
 
536
- __slots__ = ("module", "allowed", "guaranteed", "value_name", "is_package")
367
+ __slots__ = (
368
+ "using_module_name",
369
+ "module",
370
+ "allowed",
371
+ "guaranteed",
372
+ "value_name",
373
+ "is_package",
374
+ )
537
375
 
538
- def __init__(self, module_name, value_name, source_ref):
376
+ def __init__(self, using_module_name, module_name, value_name, source_ref):
539
377
  ExpressionImportHardBase.__init__(
540
378
  self, module_name=module_name, source_ref=source_ref
541
379
  )
542
380
 
543
- ExpressionImportAllowanceMixin.__init__(self)
544
-
545
381
  self.value_name = value_name
546
382
 
383
+ ExpressionImportAllowanceMixin.__init__(
384
+ self, using_module_name=using_module_name
385
+ )
386
+
547
387
  if self.finding != "not-found" and isHardModuleWithoutSideEffect(
548
388
  self.module_name
549
389
  ):
@@ -571,7 +411,11 @@ class ExpressionImportModuleHard(
571
411
  del self.parent
572
412
 
573
413
  def getDetails(self):
574
- return {"module_name": self.module_name, "value_name": self.value_name}
414
+ return {
415
+ "using_module_name": self.using_module_name,
416
+ "module_name": self.module_name,
417
+ "value_name": self.value_name,
418
+ }
575
419
 
576
420
  def getModuleName(self):
577
421
  return self.module_name
@@ -596,7 +440,7 @@ class ExpressionImportModuleHard(
596
440
  trace_collection.onExceptionRaiseExit(BaseException)
597
441
 
598
442
  # Trace the module usage attempt.
599
- trace_collection.onModuleUsageAttempt(self.getModuleUsageAttempt())
443
+ trace_collection.onModuleUsageAttempts(self.getModuleUsageAttempts())
600
444
 
601
445
  return self, None, None
602
446
 
@@ -647,15 +491,18 @@ class ExpressionImportModuleHard(
647
491
  def _computeExpressionAttribute(
648
492
  self, lookup_node, attribute_name, trace_collection, is_import
649
493
  ):
650
- # Return driven handling of many cases, pylint: disable=too-many-return-statements
494
+ # Return driven handling of many cases
495
+ # pylint: disable=too-many-branches,too-many-return-statements
651
496
 
652
- if self.module is not None and self.allowed:
497
+ if self.allowed:
653
498
  full_name = self.value_name.getChildNamed(attribute_name)
654
-
655
499
  full_name = ModuleName(hard_modules_aliases.get(full_name, full_name))
656
500
 
657
501
  if isHardModule(full_name):
502
+ trace_collection.onExceptionRaiseExit(BaseException)
503
+
658
504
  new_node = ExpressionImportModuleHard(
505
+ using_module_name=self.using_module_name,
659
506
  module_name=full_name,
660
507
  value_name=full_name,
661
508
  source_ref=lookup_node.source_ref,
@@ -668,9 +515,12 @@ class ExpressionImportModuleHard(
668
515
  % (self.value_name, attribute_name),
669
516
  )
670
517
 
671
- trust = hard_modules_trust[self.value_name].get(
672
- attribute_name, trust_undefined
673
- )
518
+ if self.value_name in hard_modules_trust:
519
+ trust = hard_modules_trust[self.value_name].get(
520
+ attribute_name, trust_undefined
521
+ )
522
+ else:
523
+ trust = trust_undefined
674
524
 
675
525
  if trust is trust_importable:
676
526
  # TODO: Change this is a hard module import itself, currently these are not all trusted
@@ -679,8 +529,10 @@ class ExpressionImportModuleHard(
679
529
  trace_collection.onExceptionRaiseExit(BaseException)
680
530
  elif trust is trust_may_exist:
681
531
  trace_collection.onExceptionRaiseExit(BaseException)
682
- elif trust is not trust_undefined and not hasattr(
683
- self.module, attribute_name
532
+ elif (
533
+ trust is not trust_undefined
534
+ and self.module is not None
535
+ and not hasattr(self.module, attribute_name)
684
536
  ):
685
537
  # TODO: Unify with below branches.
686
538
  trace_collection.onExceptionRaiseExit(ImportError)
@@ -699,28 +551,36 @@ class ExpressionImportModuleHard(
699
551
  )
700
552
  else:
701
553
  if trust is trust_undefined:
702
- # TODO: Should add this, such that these imports are
703
- # properly resolved: pylint: disable=condition-evals-to-constant
704
-
705
- if self.is_package and False:
554
+ # Need to attempt module imports if this is for an import
555
+ # lookup of code like "from value_name import attribute_name".
556
+ if self.is_package:
706
557
  full_name = self.value_name.getChildNamed(attribute_name)
707
558
 
708
- _sub_module_name, _sub_module_filename, finding = locateModule(
559
+ (
560
+ _sub_module_name,
561
+ _sub_module_filename,
562
+ _sub_module_kind,
563
+ finding,
564
+ ) = locateModule(
709
565
  module_name=full_name,
710
566
  parent_package=None,
711
567
  level=0,
712
568
  )
713
569
 
714
570
  if finding != "not-found":
571
+ trace_collection.onExceptionRaiseExit(ImportError)
572
+
715
573
  result = makeExpressionImportModuleFixed(
574
+ using_module_name=self.getParentModule().getFullName(),
716
575
  module_name=full_name,
576
+ value_name=full_name,
717
577
  source_ref=lookup_node.getSourceReference(),
718
578
  )
719
579
 
720
580
  return (
721
581
  result,
722
582
  "new_expression",
723
- "Attribute lookup '%s* of hard module *%s* becomes hard module name import."
583
+ "Attribute lookup '%s' of hard module '%s' becomes hard module name import."
724
584
  % (self.value_name, attribute_name),
725
585
  )
726
586
 
@@ -732,7 +592,7 @@ class ExpressionImportModuleHard(
732
592
  self.value_name,
733
593
  attribute_name,
734
594
  )
735
- elif trust is trust_constant:
595
+ elif trust is trust_constant and self.module is not None:
736
596
  # Make sure it's actually there, and not becoming the getattr default by accident.
737
597
  assert hasattr(self.module, attribute_name), self
738
598
 
@@ -747,6 +607,9 @@ class ExpressionImportModuleHard(
747
607
  % (self.value_name, attribute_name),
748
608
  )
749
609
  elif trust is trust_node:
610
+ # TODO: Unify with other branches.
611
+ trace_collection.onExceptionRaiseExit(ImportError)
612
+
750
613
  result = trust_node_factory[self.value_name, attribute_name](
751
614
  source_ref=lookup_node.source_ref
752
615
  )
@@ -919,7 +782,10 @@ class ExpressionImportlibImportModuleCall(
919
782
  trace_collection.onExceptionRaiseExit(BaseException)
920
783
 
921
784
  result = makeExpressionImportModuleFixed(
922
- module_name=resolved_module_name, source_ref=self.source_ref
785
+ using_module_name=self.getParentModule().getFullName(),
786
+ module_name=resolved_module_name,
787
+ value_name=resolved_module_name,
788
+ source_ref=self.source_ref,
923
789
  )
924
790
 
925
791
  return (
@@ -943,8 +809,33 @@ class ExpressionImportlibImportModuleCall(
943
809
  return self, None, None
944
810
 
945
811
 
946
- module_importlib_trust["import_module"] = trust_node
947
- trust_node_factory[("importlib", "import_module")] = ExpressionImportlibImportModuleRef
812
+ addModuleSingleAttributeNodeFactory(
813
+ "importlib", "import_module", ExpressionImportlibImportModuleRef
814
+ )
815
+
816
+
817
+ def _makeParentImportModuleUsages(module_name, source_ref):
818
+ for parent_package_name in module_name.getParentPackageNames():
819
+ (
820
+ _parent_package_name,
821
+ parent_module_filename,
822
+ parent_module_kind,
823
+ parent_module_finding,
824
+ ) = locateModule(
825
+ module_name=parent_package_name,
826
+ parent_package=None,
827
+ level=0,
828
+ )
829
+
830
+ yield makeModuleUsageAttempt(
831
+ module_name=parent_package_name,
832
+ filename=parent_module_filename,
833
+ finding=parent_module_finding,
834
+ module_kind=parent_module_kind,
835
+ level=0,
836
+ source_ref=source_ref,
837
+ reason="import path parent",
838
+ )
948
839
 
949
840
 
950
841
  class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBase):
@@ -952,8 +843,6 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
952
843
  "follow_attempted",
953
844
  "finding",
954
845
  "used_modules",
955
- "type_shape",
956
- "builtin_module",
957
846
  )
958
847
 
959
848
  kind = "EXPRESSION_BUILTIN_IMPORT"
@@ -984,33 +873,41 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
984
873
  # imports are considered too.
985
874
  self.used_modules = []
986
875
 
987
- self.type_shape = tshape_module
988
-
989
- self.builtin_module = None
990
-
991
876
  self.finding = None
992
877
 
993
- def _attemptFollow(self, module_name):
994
- # Complex stuff, pylint: disable=too-many-branches,too-many-locals
995
-
878
+ def _getLevelValue(self):
996
879
  parent_module = self.getParentModule()
997
-
998
- parent_package = parent_module.getFullName()
999
- if not parent_module.isCompiledPythonPackage():
1000
- parent_package = parent_package.getPackageName()
1001
-
1002
880
  level = self.subnode_level
1003
881
 
1004
882
  if level is None:
1005
- level = 0 if parent_module.getFutureSpec().isAbsoluteImport() else -1
883
+ return 0 if parent_module.getFutureSpec().isAbsoluteImport() else -1
1006
884
  elif not level.isCompileTimeConstant():
1007
- return
885
+ return None
1008
886
  else:
1009
- level = level.getCompileTimeConstant()
887
+ level_value = level.getCompileTimeConstant()
1010
888
 
1011
- # TODO: Catch this as a static error maybe.
1012
- if type(level) not in (int, long):
1013
- return None
889
+ # TODO: Catch this as a static error maybe.
890
+ if type(level_value) not in (int, long):
891
+ return None
892
+
893
+ return level_value
894
+
895
+ def _attemptFollow(self, module_name):
896
+ # Complex stuff, pylint: disable=too-many-branches
897
+
898
+ # Without the level value, we don't know what it is.
899
+ level_value = self._getLevelValue()
900
+ if level_value is None:
901
+ return
902
+
903
+ parent_module = self.getParentModule()
904
+
905
+ if level_value != 0:
906
+ parent_package = parent_module.getFullName()
907
+ if not parent_module.isCompiledPythonPackage():
908
+ parent_package = parent_package.getPackageName()
909
+ else:
910
+ parent_package = None
1014
911
 
1015
912
  module_name_resolved = resolveModuleName(module_name)
1016
913
  if module_name_resolved != module_name:
@@ -1024,25 +921,36 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
1024
921
  )
1025
922
  )
1026
923
 
1027
- module_name, module_filename, module_kind, self.finding = locateModule(
1028
- module_name=resolveModuleName(module_name),
924
+ module_name = ModuleName(module_name)
925
+ module_name_found, module_filename, module_kind, self.finding = locateModule(
926
+ module_name=ModuleName(module_name),
1029
927
  parent_package=parent_package,
1030
- level=level,
928
+ level=level_value,
1031
929
  )
1032
930
 
1033
- self.used_modules = [
931
+ # Allow for the import look ahead, to change what modules are
932
+ # considered hard imports.
933
+ Plugins.onModuleUsageLookAhead(
934
+ module_name=module_name_found,
935
+ module_filename=module_filename,
936
+ module_kind=module_kind,
937
+ )
938
+
939
+ self.used_modules = makeParentModuleUsagesAttempts(
1034
940
  makeModuleUsageAttempt(
1035
- module_name=module_name,
941
+ module_name=module_name_found,
1036
942
  filename=module_filename,
1037
943
  module_kind=module_kind,
1038
944
  finding=self.finding,
1039
- level=level,
945
+ level=level_value,
1040
946
  source_ref=self.source_ref,
1041
947
  reason="import",
1042
948
  )
1043
- ]
949
+ )
1044
950
 
1045
951
  if self.finding != "not-found":
952
+ module_name = module_name_found
953
+
1046
954
  import_list = self.subnode_fromlist
1047
955
 
1048
956
  if import_list is not None:
@@ -1072,6 +980,8 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
1072
980
  level=1, # Relative import
1073
981
  )
1074
982
 
983
+ self.used_modules = list(self.used_modules)
984
+
1075
985
  self.used_modules.append(
1076
986
  makeModuleUsageAttempt(
1077
987
  module_name=name_import_module_name,
@@ -1080,51 +990,29 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
1080
990
  finding=name_import_finding,
1081
991
  level=1,
1082
992
  source_ref=self.source_ref,
1083
- reason="import",
993
+ reason="import fromlist",
1084
994
  )
1085
995
  )
1086
996
 
997
+ self.used_modules = tuple(self.used_modules)
998
+
1087
999
  return module_filename
1088
1000
  else:
1089
- module_name = resolveModuleName(module_name)
1090
-
1091
- while True:
1092
- module_name = module_name.getPackageName()
1093
-
1094
- if not module_name:
1095
- break
1096
-
1097
- (
1098
- found_module_name,
1099
- module_filename,
1100
- module_kind,
1101
- finding,
1102
- ) = locateModule(
1103
- module_name=module_name,
1104
- parent_package=parent_package,
1105
- level=level,
1106
- )
1107
-
1108
- self.used_modules.append(
1109
- makeModuleUsageAttempt(
1110
- module_name=found_module_name,
1111
- filename=module_filename,
1112
- module_kind=module_kind,
1113
- finding=finding,
1114
- level=level,
1115
- source_ref=self.source_ref,
1116
- reason="import",
1117
- )
1118
- )
1001
+ return None
1119
1002
 
1120
- if finding != "not-found":
1121
- break
1003
+ def _getImportedValueName(self, imported_module_name):
1004
+ from_list_truth = (
1005
+ self.subnode_fromlist is not None and self.subnode_fromlist.getTruthValue()
1006
+ )
1122
1007
 
1123
- return None
1008
+ if from_list_truth is True:
1009
+ return imported_module_name
1010
+ else:
1011
+ return imported_module_name.getTopLevelPackageName()
1124
1012
 
1125
1013
  def computeExpression(self, trace_collection):
1126
- # Attempt to recurse if not already done, many cases to consider
1127
- # pylint: disable=too-many-branches
1014
+ # Attempt to recurse if not already done, many cases to consider and its
1015
+ # return driven, pylint: disable=too-many-branches,too-many-return-statements
1128
1016
  if self.follow_attempted:
1129
1017
  if self.finding == "not-found":
1130
1018
  # Importing and not finding, may raise an exception obviously.
@@ -1134,8 +1022,7 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
1134
1022
  trace_collection.onExceptionRaiseExit(RuntimeError)
1135
1023
 
1136
1024
  # Trace the module usage attempts.
1137
- for module_usage_attempt in self.used_modules:
1138
- trace_collection.onModuleUsageAttempt(module_usage_attempt)
1025
+ trace_collection.onModuleUsageAttempts(self.used_modules)
1139
1026
 
1140
1027
  # We stay here.
1141
1028
  return self, None, None
@@ -1158,34 +1045,82 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
1158
1045
  trace_collection.onModuleUsageAttempt(module_usage_attempt)
1159
1046
 
1160
1047
  if type(imported_module_name) in (str, unicode):
1161
- imported_module_name = resolveModuleName(imported_module_name)
1048
+ if self.finding == "relative":
1049
+ parent_module = self.getParentModule()
1050
+
1051
+ parent_package = parent_module.getFullName()
1052
+ if not parent_module.isCompiledPythonPackage():
1053
+ parent_package = parent_package.getPackageName()
1054
+
1055
+ level_value = abs(self._getLevelValue())
1056
+ level_value -= 1
1057
+
1058
+ while level_value > 0:
1059
+ parent_package = parent_package.getPackageName()
1060
+ level_value -= 1
1061
+
1062
+ if imported_module_name != "":
1063
+ candidate_module_name = parent_package.getChildNamed(
1064
+ imported_module_name
1065
+ )
1066
+ else:
1067
+ candidate_module_name = parent_package
1162
1068
 
1163
- if self.finding == "absolute" and isHardModule(imported_module_name):
1164
1069
  if (
1165
- imported_module_name in hard_modules_non_stdlib
1070
+ candidate_module_name in hard_modules_non_stdlib
1071
+ or module_filename is None
1166
1072
  or isStandardLibraryPath(module_filename)
1167
1073
  ):
1168
- from_list_truth = (
1169
- self.subnode_fromlist is not None
1170
- and self.subnode_fromlist.getTruthValue()
1074
+ result = ExpressionImportModuleHard(
1075
+ using_module_name=self.getParentModule().getFullName(),
1076
+ module_name=candidate_module_name,
1077
+ value_name=self._getImportedValueName(
1078
+ candidate_module_name
1079
+ ),
1080
+ source_ref=self.source_ref,
1081
+ )
1082
+
1083
+ return (
1084
+ result,
1085
+ "new_expression",
1086
+ "Lowered import %s module '%s' to hard import."
1087
+ % (
1088
+ (
1089
+ "hard import"
1090
+ if candidate_module_name in hard_modules_non_stdlib
1091
+ else "standard library"
1092
+ ),
1093
+ candidate_module_name.asString(),
1094
+ ),
1171
1095
  )
1172
1096
 
1173
- if from_list_truth is True:
1174
- value_name = imported_module_name
1175
- else:
1176
- value_name = imported_module_name.getTopLevelPackageName()
1097
+ imported_module_name = resolveModuleName(imported_module_name)
1177
1098
 
1099
+ if self.finding == "absolute" and isHardModule(imported_module_name):
1100
+ if (
1101
+ imported_module_name in hard_modules_non_stdlib
1102
+ or module_filename is None
1103
+ or isStandardLibraryPath(module_filename)
1104
+ ):
1178
1105
  result = ExpressionImportModuleHard(
1106
+ using_module_name=self.getParentModule().getFullName(),
1179
1107
  module_name=imported_module_name,
1180
- value_name=value_name,
1108
+ value_name=self._getImportedValueName(imported_module_name),
1181
1109
  source_ref=self.source_ref,
1182
1110
  )
1183
1111
 
1184
1112
  return (
1185
1113
  result,
1186
1114
  "new_expression",
1187
- "Lowered import of standard library module '%s' to hard import."
1188
- % imported_module_name.asString(),
1115
+ "Lowered import %s module '%s' to hard import."
1116
+ % (
1117
+ (
1118
+ "hard import"
1119
+ if imported_module_name in hard_modules_non_stdlib
1120
+ else "standard library"
1121
+ ),
1122
+ imported_module_name.asString(),
1123
+ ),
1189
1124
  )
1190
1125
  elif shallWarnUnusualCode():
1191
1126
  unusual_logger.warning(
@@ -1197,23 +1132,24 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
1197
1132
  )
1198
1133
  )
1199
1134
 
1200
- if self.finding == "built-in":
1201
- if isHardModule(imported_module_name):
1202
- result = ExpressionImportModuleHard(
1203
- module_name=imported_module_name,
1204
- value_name=imported_module_name.getTopLevelPackageName(),
1205
- source_ref=self.source_ref,
1206
- )
1135
+ # Built-in module imports can be specialized right away.
1207
1136
 
1208
- return (
1209
- result,
1210
- "new_expression",
1211
- "Lowered import of built-in module '%s' to hard import."
1212
- % imported_module_name.asString(),
1213
- )
1137
+ if self.finding == "built-in":
1138
+ result = makeExpressionImportModuleBuiltin(
1139
+ using_module_name=self.getParentModule().getFullName(),
1140
+ module_name=imported_module_name,
1141
+ value_name=self._getImportedValueName(imported_module_name),
1142
+ source_ref=self.source_ref,
1143
+ )
1214
1144
 
1215
- self.type_shape = tshape_module_builtin
1216
- self.builtin_module = __import__(imported_module_name.asString())
1145
+ # TODO: This ought to preserve side effects from arguments
1146
+ # for full compatibility with strange uses of __import__
1147
+ return (
1148
+ result,
1149
+ "new_expression",
1150
+ "Lowered import of built-in module '%s' to hard import."
1151
+ % imported_module_name.asString(),
1152
+ )
1217
1153
 
1218
1154
  if self.finding == "not-found":
1219
1155
  if imported_module_name in hard_modules_limited:
@@ -1228,6 +1164,26 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
1228
1164
  % imported_module_name.asString(),
1229
1165
  )
1230
1166
 
1167
+ elif (
1168
+ isStandaloneMode()
1169
+ and self.used_modules
1170
+ and isExperimental("standalone-imports")
1171
+ ):
1172
+ result = makeExpressionImportModuleFixed(
1173
+ using_module_name=self.getParentModule().getFullName(),
1174
+ module_name=self.used_modules[0].module_name,
1175
+ value_name=self._getImportedValueName(
1176
+ self.used_modules[0].module_name
1177
+ ),
1178
+ source_ref=self.source_ref,
1179
+ )
1180
+
1181
+ return (
1182
+ result,
1183
+ "new_expression",
1184
+ "Lowered import of module '%s' to fixed import."
1185
+ % imported_module_name.asString(),
1186
+ )
1231
1187
  else:
1232
1188
  # TODO: This doesn't preserve side effects.
1233
1189
 
@@ -1263,15 +1219,6 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
1263
1219
  def mayRaiseException(self, exception_type):
1264
1220
  return self.finding != "built-in"
1265
1221
 
1266
- def mayRaiseExceptionImportName(self, exception_type, import_name):
1267
- if self.finding == "built-in":
1268
- return not hasattr(self.builtin_module, import_name)
1269
- else:
1270
- return True
1271
-
1272
- def getTypeShape(self):
1273
- return self.type_shape
1274
-
1275
1222
 
1276
1223
  class StatementImportStar(StatementImportStarBase):
1277
1224
  kind = "STATEMENT_IMPORT_STAR"
@@ -1354,16 +1301,59 @@ class ExpressionImportName(ChildHavingModuleMixin, ExpressionBase):
1354
1301
  )
1355
1302
 
1356
1303
 
1357
- def makeExpressionImportModuleFixed(module_name, source_ref):
1304
+ def makeExpressionImportModuleFixed(
1305
+ using_module_name, module_name, value_name, source_ref
1306
+ ):
1358
1307
  module_name = resolveModuleName(module_name)
1308
+ value_name = resolveModuleName(value_name)
1359
1309
 
1360
1310
  if isHardModule(module_name):
1361
1311
  return ExpressionImportModuleHard(
1312
+ using_module_name=using_module_name,
1362
1313
  module_name=module_name,
1363
- value_name=module_name.getTopLevelPackageName(),
1314
+ value_name=value_name,
1364
1315
  source_ref=source_ref,
1365
1316
  )
1366
1317
  else:
1367
1318
  return ExpressionImportModuleFixed(
1368
- module_name=module_name, source_ref=source_ref
1319
+ module_name=module_name,
1320
+ value_name=value_name,
1321
+ source_ref=source_ref,
1322
+ )
1323
+
1324
+
1325
+ def makeExpressionImportModuleBuiltin(
1326
+ using_module_name, module_name, value_name, source_ref
1327
+ ):
1328
+ module_name = resolveModuleName(module_name)
1329
+ value_name = resolveModuleName(value_name)
1330
+
1331
+ if isHardModule(module_name):
1332
+ return ExpressionImportModuleHard(
1333
+ using_module_name=using_module_name,
1334
+ module_name=module_name,
1335
+ value_name=value_name,
1336
+ source_ref=source_ref,
1337
+ )
1338
+ else:
1339
+ return ExpressionImportModuleBuiltin(
1340
+ module_name=module_name,
1341
+ value_name=value_name,
1342
+ source_ref=source_ref,
1369
1343
  )
1344
+
1345
+
1346
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
1347
+ # integrates with CPython, but also works on its own.
1348
+ #
1349
+ # Licensed under the Apache License, Version 2.0 (the "License");
1350
+ # you may not use this file except in compliance with the License.
1351
+ # You may obtain a copy of the License at
1352
+ #
1353
+ # http://www.apache.org/licenses/LICENSE-2.0
1354
+ #
1355
+ # Unless required by applicable law or agreed to in writing, software
1356
+ # distributed under the License is distributed on an "AS IS" BASIS,
1357
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1358
+ # See the License for the specific language governing permissions and
1359
+ # limitations under the License.