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