pynguin 0.41.0__tar.gz → 0.43.0__tar.gz
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.
- {pynguin-0.41.0 → pynguin-0.43.0}/PKG-INFO +7 -6
- {pynguin-0.41.0 → pynguin-0.43.0}/README.md +1 -3
- {pynguin-0.41.0 → pynguin-0.43.0}/pyproject.toml +23 -3
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/__version__.py +1 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/analyses/constants.py +6 -2
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/analyses/module.py +260 -37
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/analyses/seeding.py +8 -2
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/analyses/typesystem.py +80 -79
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/assertiongenerator.py +32 -25
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/assertiontraceobserver.py +13 -23
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/base.py +37 -18
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/transformer.py +2 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/configuration.py +58 -2
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/dynamosaalgorithm.py +12 -4
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/computations.py +50 -62
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/coveragegoals.py +22 -10
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/generationalgorithmfactory.py +2 -4
- pynguin-0.43.0/src/pynguin/ga/postprocess.py +689 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/stoppingcondition.py +11 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/generator.py +218 -69
- pynguin-0.43.0/src/pynguin/instrumentation/__init__.py +46 -0
- pynguin-0.43.0/src/pynguin/instrumentation/controlflow.py +942 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/instrumentation/machinery.py +29 -30
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/instrumentation/tracer.py +519 -426
- pynguin-0.43.0/src/pynguin/instrumentation/transformer.py +733 -0
- pynguin-0.43.0/src/pynguin/instrumentation/version/__init__.py +239 -0
- pynguin-0.43.0/src/pynguin/instrumentation/version/common.py +367 -0
- pynguin-0.43.0/src/pynguin/instrumentation/version/python3_10.py +1868 -0
- pynguin-0.43.0/src/pynguin/instrumentation/version/python3_11.py +627 -0
- pynguin-0.43.0/src/pynguin/instrumentation/version/python3_12.py +600 -0
- pynguin-0.43.0/src/pynguin/instrumentation/version/python3_13.py +419 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/parsing/astscoping.py +2 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/parsing/deserializer.py +2 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/parsing/helpers.py +33 -13
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/parsing/rewriter.py +14 -1
- pynguin-0.43.0/src/pynguin/slicer/dynamicslicer.py +909 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/slicer/executedinstruction.py +20 -14
- pynguin-0.43.0/src/pynguin/slicer/executionflowbuilder.py +610 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/slicer/stack/stacksimulation.py +95 -60
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/slicer/statementslicingobserver.py +5 -25
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/defaulttestcase.py +44 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/execution.py +364 -181
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/export.py +42 -14
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/statement.py +4 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/statement_to_ast.py +2 -2
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/testcase.py +60 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/testcase_to_ast.py +10 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/testfactory.py +5 -3
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/configuration_writer.py +11 -6
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/controlflowdistance.py +24 -34
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/exceptions.py +21 -4
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/pynguinml/ml_testing_resources.py +1 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/report.py +10 -4
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/statistics/runtimevariable.py +6 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/type_utils.py +8 -9
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/typeevalpy_json_schema.py +2 -2
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/test_module.py +101 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/test_seeding.py +1 -1
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/test_typesystem.py +20 -9
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/test_assertion_generation_integration.py +30 -22
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/conftest.py +173 -104
- pynguin-0.43.0/tests/fixtures/c/my_ctypes.py +7 -0
- pynguin-0.43.0/tests/fixtures/crash/partly_crashing.py +15 -0
- pynguin-0.43.0/tests/fixtures/crash/seg_fault.py +11 -0
- pynguin-0.43.0/tests/fixtures/examples/module_alias.py +10 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/instrumentation/comparison.py +10 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_dynamosaalgorithm.py +27 -29
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_integration_mosaalgorithm.py +7 -9
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_integration_varioussearchalgorithms.py +15 -16
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_computations.py +57 -72
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_computations_fitness_utilities.py +6 -6
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_coveragegoals.py +64 -80
- pynguin-0.43.0/tests/ga/test_postprocess.py +1081 -0
- pynguin-0.43.0/tests/instrumentation/test_adapters.py +1004 -0
- pynguin-0.43.0/tests/instrumentation/test_cfg.py +881 -0
- pynguin-0.43.0/tests/instrumentation/test_controldependencegraph.py +241 -0
- pynguin-0.43.0/tests/instrumentation/test_machinery.py +52 -0
- pynguin-0.43.0/tests/instrumentation/test_programgraph.py +115 -0
- pynguin-0.43.0/tests/instrumentation/test_tracer.py +592 -0
- pynguin-0.43.0/tests/instrumentation/test_version.py +205 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/slicer/test_assertionslicer.py +31 -28
- pynguin-0.43.0/tests/slicer/test_dependencies.py +438 -0
- pynguin-0.43.0/tests/slicer/test_expected_failures.py +626 -0
- pynguin-0.43.0/tests/slicer/test_language_features.py +1397 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/slicer/test_statementslicer.py +35 -42
- pynguin-0.43.0/tests/slicer/util.py +195 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/execution/test_executiontrace.py +3 -3
- pynguin-0.43.0/tests/testcase/execution/test_moduleprovider.py +74 -0
- pynguin-0.43.0/tests/testcase/execution/test_subprocesstestcaseexecutor.py +252 -0
- pynguin-0.43.0/tests/testcase/execution/test_subprocesstestcaseexecutor_differential.py +38 -0
- pynguin-0.43.0/tests/testcase/execution/test_subprocesstestcaseexecutor_integration.py +135 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/execution/test_testcaseexecutor_integration.py +53 -62
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/execution/test_typetracing.py +15 -9
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/export/test_export.py +2 -2
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/test_defaulttestcase.py +191 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/test_testcase_to_ast_integration.py +44 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/test_testfactory.py +3 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/pynguinml/test_ml_parsing_utils.py +4 -3
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/pynguinml/test_pynguinml_integration.py +17 -1
- pynguin-0.43.0/tests/utils/stats/__init__.py +6 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_configuration_writer.py +14 -3
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_controlflowdistance.py +7 -6
- pynguin-0.43.0/tests/utils/test_report.py +553 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_type_utils.py +54 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_typeevalpy_json_schema.py +1 -1
- pynguin-0.41.0/src/pynguin/analyses/controlflow.py +0 -983
- pynguin-0.41.0/src/pynguin/ga/postprocess.py +0 -273
- pynguin-0.41.0/src/pynguin/instrumentation/__init__.py +0 -7
- pynguin-0.41.0/src/pynguin/instrumentation/instrumentation.py +0 -1973
- pynguin-0.41.0/src/pynguin/slicer/dynamicslicer.py +0 -882
- pynguin-0.41.0/src/pynguin/slicer/executionflowbuilder.py +0 -614
- pynguin-0.41.0/src/pynguin/slicer/stack/stackeffect.py +0 -219
- pynguin-0.41.0/src/pynguin/utils/opcodes.py +0 -294
- pynguin-0.41.0/tests/analyses/test_cfg.py +0 -325
- pynguin-0.41.0/tests/analyses/test_controldependencegraph.py +0 -100
- pynguin-0.41.0/tests/analyses/test_dominatortree.py +0 -121
- pynguin-0.41.0/tests/analyses/test_programgraph.py +0 -187
- pynguin-0.41.0/tests/ga/test_postprocess.py +0 -240
- pynguin-0.41.0/tests/instrumentation/test_instrumentation.py +0 -778
- pynguin-0.41.0/tests/instrumentation/test_machinery.py +0 -49
- pynguin-0.41.0/tests/slicer/stack/test_stack_effect.py +0 -62
- pynguin-0.41.0/tests/slicer/test_dependencies.py +0 -374
- pynguin-0.41.0/tests/slicer/test_expected_failures.py +0 -293
- pynguin-0.41.0/tests/slicer/test_language_features.py +0 -692
- pynguin-0.41.0/tests/slicer/util.py +0 -159
- pynguin-0.41.0/tests/testcase/execution/test_executiontracer.py +0 -479
- pynguin-0.41.0/tests/testcase/execution/test_moduleprovider.py +0 -39
- pynguin-0.41.0/tests/testcase/execution/test_subprocesstestcaseexecutor_differential.py +0 -43
- pynguin-0.41.0/tests/utils/test_report.py +0 -509
- {pynguin-0.41.0 → pynguin-0.43.0}/LICENSE.rst +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/LICENSES/Apache-2.0.txt +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/LICENSES/BSD-2-Clause.txt +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/LICENSES/CC-BY-4.0.txt +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/LICENSES/CC0-1.0.txt +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/LICENSES/MIT.txt +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/__main__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/analyses/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/analyses/modulecomplexity.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/analyses/syntaxtree.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/assertion.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/assertion_to_ast.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/assertion_trace.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/llmassertiongenerator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/controller.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/mutators.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/arithmetic.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/decorator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/exception.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/inheritance.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/logical.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/loop.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/operators/misc.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/assertion/mutation_analysis/strategies.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/cli.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/abstractmosaalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/archive.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/generationalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/llmosalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/mioalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/mosaalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/randomalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/randomsearchalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/algorithms/wholesuitealgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/chromosome.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/chromosomefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/chromosomevisitor.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/llmtestsuitechromosomefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/operators/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/operators/comparator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/operators/crossover.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/operators/ranking.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/operators/selection.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/searchobserver.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/testcasechromosome.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/testcasechromosomefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/testcasefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/testsuitechromosome.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/ga/testsuitechromosomefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/caching.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/helpers/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/helpers/testcasereferencecopier.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/llmagent.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/llmtestcasehandler.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/parsing/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/prompts/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/prompts/assertiongenerationprompt.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/prompts/prompt.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/prompts/testcasegenerationprompt.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/large_language_model/prompts/uncoveredtargetsprompt.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/resources/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/resources/coverage-template.html +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/slicer/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/slicer/stack/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/testcasevisitor.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/testcase/variablereference.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/ast_util.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/atomicinteger.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/collection_utils.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/generic/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/generic/genericaccessibleobject.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/llm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/mirror.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/mutation_utils.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/namingscope.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/orderedset.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/pynguinml/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/pynguinml/ml_parsing_utils.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/pynguinml/ml_testfactory_utils.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/pynguinml/mlparameter.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/pynguinml/np_rng.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/randomness.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/statistics/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/statistics/outputvariablefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/statistics/statisticsbackend.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/statistics/statisticsobserver.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/statistics/stats.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/src/pynguin/utils/typetracing.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/test_constants.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/test_initialpopulationseeding.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/test_modulecomplexity.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/test_staticconstantseeding.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/analyses/test_syntaxtree.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/operators/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/operators/test_arithmetic.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/operators/test_decorator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/operators/test_exception.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/operators/test_inheritance.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/operators/test_logical.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/operators/test_loop.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/operators/test_misc.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/test_controller.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/test_mutators.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/mutation_analysis/test_strategies.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/test_assertion.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/test_assertion_to_ast.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/test_assertion_trace.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/test_assertiongenerator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/test_assertiontraceobserver.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/assertion/test_llmassertiongenerator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/accessibles/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/accessibles/accessible.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/branchcoverage/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/branchcoverage/nestedbranches.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/branchcoverage/nobranches.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/branchcoverage/simplenesting.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/branchcoverage/singlebranches.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/branchcoverage/twomethodsinglebranches.py +0 -0
- {pynguin-0.41.0/tests/fixtures/cluster → pynguin-0.43.0/tests/fixtures/c}/__init__.py +0 -0
- {pynguin-0.41.0/tests/fixtures/duckmock → pynguin-0.43.0/tests/fixtures/cluster}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/abstract.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/alias_module.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/async_class_gen.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/async_class_method.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/async_func.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/async_gen.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/attributes.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/blacklist.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/blacklist_transitive.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/comments.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/complex_dependencies.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/complex_dependency.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/conditional_import.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/dependency.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/diamond_bottom.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/diamond_left.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/diamond_right.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/diamond_top.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/enums.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/import_dependency.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/inheritance.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/lambda.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/nested_functions.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/no_any_annotations.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/no_dependencies.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/overridden_inherited_methods.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/simple_dependencies.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/typing_parameters.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/cluster/uses_async_dependency.py +0 -0
- {pynguin-0.41.0/tests/fixtures/errors → pynguin-0.43.0/tests/fixtures/crash}/__init__.py +0 -0
- {pynguin-0.41.0/tests/fixtures/examples → pynguin-0.43.0/tests/fixtures/duckmock}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/duckmock/complex.py +0 -0
- {pynguin-0.41.0/tests/fixtures/examples/type_tracing → pynguin-0.43.0/tests/fixtures/errors}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/errors/import_error.py +0 -0
- {pynguin-0.41.0/tests/fixtures/grammar → pynguin-0.43.0/tests/fixtures/examples}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/assertions.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/basket.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/calculator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/calculator_simple.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/collections.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/difficult.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/dummies.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/dynamosa_example.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/enums.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/exceptions.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/flaky.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/impossible.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/inheritance.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/loop.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/monkey.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/nested.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/objects.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/private_methods.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/queue.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/simple.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/triangle.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/type_inference.py +0 -0
- {pynguin-0.41.0/tests/fixtures/instrumentation → pynguin-0.43.0/tests/fixtures/examples/type_tracing}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/type_tracing/geometry.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/type_tracing/invoice.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/type_tracing/large_test_cluster.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/examples/type_tracing/mixed.py +0 -0
- {pynguin-0.41.0/tests/fixtures/linecoverage → pynguin-0.43.0/tests/fixtures/grammar}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/grammar/parameters.py +0 -0
- {pynguin-0.41.0/tests/fixtures/mutation → pynguin-0.43.0/tests/fixtures/instrumentation}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/instrumentation/inherited.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/instrumentation/mixed.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/instrumentation/simple.py +0 -0
- {pynguin-0.41.0/tests/fixtures/programgraph → pynguin-0.43.0/tests/fixtures/linecoverage}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/linecoverage/artificial_none.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/linecoverage/emptyfile.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/linecoverage/exception.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/linecoverage/list.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/linecoverage/plus.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/linecoverage/setter_getter.py +0 -0
- {pynguin-0.41.0/tests/fixtures/regression → pynguin-0.43.0/tests/fixtures/mutation}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/mutation/exception.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/mutation/expected.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/mutation/mutation.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/mutation/timeout.py +0 -0
- {pynguin-0.41.0/tests/fixtures/seeding → pynguin-0.43.0/tests/fixtures/programgraph}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/programgraph/samples.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/programgraph/whileloop.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/programgraph/yield_fun.py +0 -0
- {pynguin-0.41.0/tests/fixtures/seeding/dynamicseeding → pynguin-0.43.0/tests/fixtures/regression}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/regression/argparse_sys_exit.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/regression/custom_error.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/regression/not_main.py +0 -0
- {pynguin-0.41.0/tests/fixtures/seeding/initialpopulationseeding → pynguin-0.43.0/tests/fixtures/seeding}/__init__.py +0 -0
- {pynguin-0.41.0/tests/fixtures/seeding/initialpopulationseeding/seedmodules → pynguin-0.43.0/tests/fixtures/seeding/dynamicseeding}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/dynamicseeding/dynamicseedingdummies.py +0 -0
- {pynguin-0.41.0/tests/fixtures/seeding/staticconstantseeding → pynguin-0.43.0/tests/fixtures/seeding/initialpopulationseeding}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/dummycontainer.py +0 -0
- {pynguin-0.41.0/tests/fixtures/seeding/staticconstantseeding/dummy → pynguin-0.43.0/tests/fixtures/seeding/initialpopulationseeding/seedmodules}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/assertseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/classseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collfuncseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/nestedseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notknowncall_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notprimseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/primitiveseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/triangleseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongassignseed_test_.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongfunctionnameseed_test_.py +0 -0
- {pynguin-0.41.0/tests/fixtures/slicer → pynguin-0.43.0/tests/fixtures/seeding/staticconstantseeding}/__init__.py +0 -0
- {pynguin-0.41.0/tests/fixtures/type_tracing → pynguin-0.43.0/tests/fixtures/seeding/staticconstantseeding/dummy}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/staticconstantseeding/dummy/dummy.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/seeding/staticconstantseeding/dummy/empty.so +0 -0
- {pynguin-0.41.0/tests/fixtures/types → pynguin-0.43.0/tests/fixtures/slicer}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/attribute_dependencies.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/closure.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/generator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/immutable_attribute_dependency.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/import_star_def.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/import_star_main.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/partial_cover_dependency.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/simple_call.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/slicer/simple_call_arg.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/test.conf +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/test.conf.license +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/tests/typeinference/test_stubstrategy.pyi +0 -0
- {pynguin-0.41.0/tests/ga → pynguin-0.43.0/tests/fixtures/type_tracing}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/type_tracing/guess_params.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/type_tracing/return_types.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/type_tracing/union_type.py +0 -0
- {pynguin-0.41.0/tests/ga/operators → pynguin-0.43.0/tests/fixtures/types}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/types/outside.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/types/subtyping.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/fixtures/types/symbols.py +0 -0
- {pynguin-0.41.0/tests/ga/operators/crossover → pynguin-0.43.0/tests/ga}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_archive.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_generationalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_llmosalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_mioalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_mosaalgorithm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/algorithms/test_randomalgorithm.py +0 -0
- {pynguin-0.41.0/tests/ga/operators/ranking → pynguin-0.43.0/tests/ga/operators}/__init__.py +0 -0
- {pynguin-0.41.0/tests/ga/operators/selection → pynguin-0.43.0/tests/ga/operators/crossover}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/operators/crossover/test_singlepointrelativecrossover.py +0 -0
- {pynguin-0.41.0/tests/ga/stoppingconditions → pynguin-0.43.0/tests/ga/operators/ranking}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/operators/ranking/test_rankingfunction.py +0 -0
- {pynguin-0.41.0/tests/instrumentation → pynguin-0.43.0/tests/ga/operators/selection}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/operators/selection/test_rankselection.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/operators/selection/test_selection.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/operators/selection/test_tournamentselection.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/operators/test_dominancecomparator.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/operators/test_preferencesortingcomparator.py +0 -0
- {pynguin-0.41.0/tests/slicer → pynguin-0.43.0/tests/ga/stoppingconditions}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_coverageplateaustoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_maxcoveragestoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_maxiterationsstoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_maxmemorystoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_maxstatementstoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_maxtestsstoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_maxtimestoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_minimumcoverageplateaustoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/stoppingconditions/test_stoppingcondition.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_chromosome.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_chromosomefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_computations_cache.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_generationalgorithmfactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_llmtestsuitechromosomefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_testcasechromosome.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_testcasefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/ga/test_testsuitechromosome.py +0 -0
- {pynguin-0.41.0/tests/slicer/stack → pynguin-0.43.0/tests/instrumentation}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/helpers/test_testcasereferencecopier.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/parsing/test_astscoping.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/parsing/test_helpers.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/prompts/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/prompts/test_assertiongenerationprompt.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/prompts/test_testcasegenerationprompt.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/prompts/test_uncovered_targets_prompt.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/test_caching.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/test_llm_caching.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/test_llm_deserializer.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/test_llmagent.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/test_llmagent_extended.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/test_llmtestcasehandler.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/test_llmtestcasehandler_coverage.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/large_language_model/test_rewriter.py +0 -0
- {pynguin-0.41.0/tests/testcase → pynguin-0.43.0/tests/slicer}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/test___main__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/test_cli.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/test_generator.py +0 -0
- {pynguin-0.41.0/tests/testcase/execution → pynguin-0.43.0/tests/testcase}/__init__.py +0 -0
- {pynguin-0.41.0/tests/testcase/export → pynguin-0.43.0/tests/testcase/execution}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/execution/test_executedinstruction.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/execution/test_executioncontext.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/execution/test_executionmocking.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/execution/test_executionresult.py +0 -0
- {pynguin-0.41.0/tests/testcase/statements → pynguin-0.43.0/tests/testcase/export}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/export/conftest.py +0 -0
- {pynguin-0.41.0/tests/testcase/variable → pynguin-0.43.0/tests/testcase/statements}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/statements/test_assignmentstatement.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/statements/test_collectionstatements.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/statements/test_fieldstatement.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/statements/test_parameterizedstatements.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/statements/test_primitivestatements.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/test_ast_assign_statement.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/test_benchmark.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/test_statement_to_ast.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/test_testcase_integration.py +0 -0
- {pynguin-0.41.0/tests/utils → pynguin-0.43.0/tests/testcase/variable}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testcase/variable/test_variablereference.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/testutils.py +0 -0
- {pynguin-0.41.0/tests/utils/generic → pynguin-0.43.0/tests/utils}/__init__.py +0 -0
- {pynguin-0.41.0/tests/utils/pynguinml → pynguin-0.43.0/tests/utils/generic}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/generic/test_genericaccessibleobject.py +0 -0
- {pynguin-0.41.0/tests/utils/stats → pynguin-0.43.0/tests/utils/pynguinml}/__init__.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/pynguinml/test_ml_testfactory_utils.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/pynguinml/test_ml_testing_resources.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/pynguinml/test_mlparameter.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/pynguinml/test_np_rng.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/stats/test_outputvariablefactory.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/stats/test_runtimevariable.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/stats/test_searchstatistics.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/stats/test_statistics.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/stats/test_statisticsbackend.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_atomicinteger.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_collection_utils.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_exceptions.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_llm.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_mirror.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_mutation_utils.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_namingscope.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_orderedset.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_randomness.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/test_typetracing.py +0 -0
- {pynguin-0.41.0 → pynguin-0.43.0}/tests/utils/utils.py +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pynguin
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.43.0
|
|
4
4
|
Summary: Pynguin is a tool for automated unit test generation for Python
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: unit test,random testing,search based,test generation
|
|
7
7
|
Author: Stephan Lukasczyk
|
|
8
8
|
Author-email: stephan@pynguin.eu
|
|
9
|
-
Requires-Python: >=3.10,<3.
|
|
9
|
+
Requires-Python: >=3.10,<3.14
|
|
10
10
|
Classifier: Development Status :: 3 - Alpha
|
|
11
11
|
Classifier: Environment :: Console
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
@@ -18,13 +18,16 @@ Classifier: Operating System :: Microsoft :: Windows
|
|
|
18
18
|
Classifier: Operating System :: POSIX :: Linux
|
|
19
19
|
Classifier: Programming Language :: Python :: 3
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
24
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
22
25
|
Classifier: Topic :: Education :: Testing
|
|
23
26
|
Classifier: Topic :: Software Development :: Testing
|
|
24
27
|
Classifier: Topic :: Software Development :: Testing :: Unit
|
|
25
28
|
Classifier: Typing :: Typed
|
|
26
29
|
Requires-Dist: Jinja2 (>=3.1.6,<4.0.0)
|
|
27
|
-
Requires-Dist: Pygments (>=2.19.
|
|
30
|
+
Requires-Dist: Pygments (>=2.19.2,<3.0.0)
|
|
28
31
|
Requires-Dist: asciitree (>=0.3.3,<0.4.0)
|
|
29
32
|
Requires-Dist: astroid (>=3.3.9,<4.0.0)
|
|
30
33
|
Requires-Dist: black (>=25.1.0,<26.0.0)
|
|
@@ -113,9 +116,7 @@ please report your experiences in using Pynguin to us.
|
|
|
113
116
|
## Prerequisites
|
|
114
117
|
|
|
115
118
|
Before you begin, ensure you have met the following requirements:
|
|
116
|
-
- You have installed Python 3.10 (
|
|
117
|
-
3.11, there might be some problems due to changed internals regarding the byte-code
|
|
118
|
-
instrumentation).
|
|
119
|
+
- You have installed Python 3.10 (the support for 3.11, 3.12 and 3.13 is experimental).
|
|
119
120
|
|
|
120
121
|
**Attention:** Pynguin now requires Python 3.10! Older versions are no longer
|
|
121
122
|
supported!
|
|
@@ -66,9 +66,7 @@ please report your experiences in using Pynguin to us.
|
|
|
66
66
|
## Prerequisites
|
|
67
67
|
|
|
68
68
|
Before you begin, ensure you have met the following requirements:
|
|
69
|
-
- You have installed Python 3.10 (
|
|
70
|
-
3.11, there might be some problems due to changed internals regarding the byte-code
|
|
71
|
-
instrumentation).
|
|
69
|
+
- You have installed Python 3.10 (the support for 3.11, 3.12 and 3.13 is experimental).
|
|
72
70
|
|
|
73
71
|
**Attention:** Pynguin now requires Python 3.10! Older versions are no longer
|
|
74
72
|
supported!
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "pynguin"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.43.0"
|
|
8
8
|
description = "Pynguin is a tool for automated unit test generation for Python"
|
|
9
9
|
authors = [
|
|
10
10
|
"Stephan Lukasczyk <stephan@pynguin.eu>",
|
|
@@ -32,6 +32,9 @@ classifiers = [
|
|
|
32
32
|
"Operating System :: Microsoft :: Windows",
|
|
33
33
|
"Operating System :: POSIX :: Linux",
|
|
34
34
|
"Programming Language :: Python :: 3.10",
|
|
35
|
+
"Programming Language :: Python :: 3.11",
|
|
36
|
+
"Programming Language :: Python :: 3.12",
|
|
37
|
+
"Programming Language :: Python :: 3.13",
|
|
35
38
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
36
39
|
"Topic :: Education :: Testing",
|
|
37
40
|
"Topic :: Software Development :: Testing",
|
|
@@ -46,7 +49,7 @@ include = [
|
|
|
46
49
|
]
|
|
47
50
|
|
|
48
51
|
[tool.poetry.dependencies]
|
|
49
|
-
python = ">=3.10, <3.
|
|
52
|
+
python = ">=3.10, <3.14"
|
|
50
53
|
astroid = "^3.3.9"
|
|
51
54
|
black = "^25.1.0"
|
|
52
55
|
bytecode = "^0.16.1"
|
|
@@ -55,7 +58,7 @@ Jinja2 = "^3.1.6"
|
|
|
55
58
|
networkx = "^3.4"
|
|
56
59
|
multiprocess = "^0.70.16"
|
|
57
60
|
rich = "^14.0.0"
|
|
58
|
-
Pygments = "^2.19.
|
|
61
|
+
Pygments = "^2.19.2"
|
|
59
62
|
pytest = "^8.3.5"
|
|
60
63
|
simple-parsing = "^0.1.7"
|
|
61
64
|
typing_inspect = "^0.9.0"
|
|
@@ -72,6 +75,7 @@ pre-commit = "^4.2.0"
|
|
|
72
75
|
ruff = "^0.11"
|
|
73
76
|
types-toml = "^0.10.8.20240310"
|
|
74
77
|
types-pyyaml = "^6.0.12.20250516"
|
|
78
|
+
types-networkx = "^3.4"
|
|
75
79
|
|
|
76
80
|
[tool.poetry.group.docs.dependencies]
|
|
77
81
|
sphinx = "^8.1.3"
|
|
@@ -106,6 +110,7 @@ pynguin = "pynguin.cli:main"
|
|
|
106
110
|
branch = true
|
|
107
111
|
source = ["src/pynguin", "tests"]
|
|
108
112
|
omit = ["tests/fixtures/*"]
|
|
113
|
+
relative_files = true
|
|
109
114
|
|
|
110
115
|
[tool.coverage.report]
|
|
111
116
|
exclude_lines = [
|
|
@@ -276,3 +281,18 @@ convention = "google"
|
|
|
276
281
|
"S101", # Use of `assert` detected
|
|
277
282
|
"SLF001", # Private member accessed
|
|
278
283
|
]
|
|
284
|
+
|
|
285
|
+
[tool.tox]
|
|
286
|
+
requires = ["tox~=4.28"]
|
|
287
|
+
env_list = ["3.10", "3.11", "3.12", "3.13"]
|
|
288
|
+
|
|
289
|
+
[tool.tox.env_run_base]
|
|
290
|
+
skip_install = true
|
|
291
|
+
allowlist_externals = ["make", "poetry"]
|
|
292
|
+
commands_pre = [
|
|
293
|
+
["poetry", "env", "use", "{env_name}"],
|
|
294
|
+
["poetry", "install", "--with", "openai,numpy"],
|
|
295
|
+
]
|
|
296
|
+
commands = [
|
|
297
|
+
["make", "check"],
|
|
298
|
+
]
|
|
@@ -288,8 +288,12 @@ def collect_static_constants(project_path: str | os.PathLike) -> ConstantPool:
|
|
|
288
288
|
try:
|
|
289
289
|
tree = ast.parse(module_file.read())
|
|
290
290
|
collector.visit(tree)
|
|
291
|
-
except BaseException as exception:
|
|
292
|
-
logger.
|
|
291
|
+
except BaseException as exception: # noqa: BLE001
|
|
292
|
+
logger.warning(
|
|
293
|
+
"Could not collect constants from %s. Skipping constant collection (%s).",
|
|
294
|
+
module,
|
|
295
|
+
exception,
|
|
296
|
+
)
|
|
293
297
|
return collector.constants
|
|
294
298
|
|
|
295
299
|
|
|
@@ -35,10 +35,13 @@ from typing import Any
|
|
|
35
35
|
import astroid
|
|
36
36
|
|
|
37
37
|
import pynguin.configuration as config
|
|
38
|
-
import pynguin.utils.pynguinml.ml_testing_resources as tr
|
|
39
38
|
import pynguin.utils.statistics.stats as stat
|
|
40
39
|
import pynguin.utils.typetracing as tt
|
|
41
40
|
|
|
41
|
+
|
|
42
|
+
if config.configuration.pynguinml.ml_testing_enabled or typing.TYPE_CHECKING:
|
|
43
|
+
import pynguin.utils.pynguinml.ml_testing_resources as tr
|
|
44
|
+
|
|
42
45
|
from pynguin.analyses.modulecomplexity import mccabe_complexity
|
|
43
46
|
from pynguin.analyses.syntaxtree import FunctionDescription
|
|
44
47
|
from pynguin.analyses.syntaxtree import astroid_to_ast
|
|
@@ -58,10 +61,10 @@ from pynguin.analyses.typesystem import UnionType
|
|
|
58
61
|
from pynguin.analyses.typesystem import Unsupported
|
|
59
62
|
from pynguin.analyses.typesystem import is_primitive_type
|
|
60
63
|
from pynguin.configuration import TypeInferenceStrategy
|
|
61
|
-
from pynguin.instrumentation.instrumentation import CODE_OBJECT_ID_KEY
|
|
62
64
|
from pynguin.utils import randomness
|
|
63
65
|
from pynguin.utils.exceptions import ConstraintValidationError
|
|
64
66
|
from pynguin.utils.exceptions import ConstructionFailedException
|
|
67
|
+
from pynguin.utils.exceptions import CoroutineFoundException
|
|
65
68
|
from pynguin.utils.generic.genericaccessibleobject import GenericAccessibleObject
|
|
66
69
|
from pynguin.utils.generic.genericaccessibleobject import (
|
|
67
70
|
GenericCallableAccessibleObject,
|
|
@@ -196,31 +199,199 @@ def _is_blacklisted(element: Any) -> bool:
|
|
|
196
199
|
module_blacklist = set(MODULE_BLACKLIST).union(config.configuration.ignore_modules)
|
|
197
200
|
method_blacklist = set(METHOD_BLACKLIST).union(config.configuration.ignore_methods)
|
|
198
201
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
202
|
+
try:
|
|
203
|
+
if inspect.ismodule(element):
|
|
204
|
+
return element.__name__ in module_blacklist
|
|
205
|
+
if inspect.isclass(element):
|
|
206
|
+
if element.__module__ == "builtins" and (
|
|
207
|
+
element in PRIMITIVES or element in COLLECTIONS
|
|
208
|
+
):
|
|
209
|
+
# Allow some builtin types
|
|
210
|
+
return False
|
|
211
|
+
return element.__module__ in module_blacklist
|
|
212
|
+
if inspect.isfunction(element):
|
|
213
|
+
# Some modules can be run standalone using a main function or provide a small
|
|
214
|
+
# set of tests ('test'). We don't want to include those functions.
|
|
215
|
+
# Importing certain modules such as inspect, that use or import C-functions can
|
|
216
|
+
# lead to __module__ being None. We want to exclude these functions as well.
|
|
217
|
+
return (
|
|
218
|
+
element.__module__ is None
|
|
219
|
+
or element.__module__ in module_blacklist
|
|
220
|
+
or element.__qualname__.startswith((
|
|
221
|
+
"main",
|
|
222
|
+
"test",
|
|
223
|
+
))
|
|
224
|
+
or f"{element.__module__}.{element.__qualname__}" in method_blacklist
|
|
225
|
+
)
|
|
226
|
+
except Exception: # noqa: BLE001
|
|
227
|
+
LOGGER.warning(
|
|
228
|
+
"Could not check if %s is blacklisted. Assuming it is not.", element, exc_info=True
|
|
229
|
+
)
|
|
230
|
+
# Something that is not supported yet.
|
|
231
|
+
return False
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
C_MODULE_WHITELIST = frozenset((
|
|
235
|
+
# === Basic C modules (interpreter startup) ===
|
|
236
|
+
"abc",
|
|
237
|
+
"ast",
|
|
238
|
+
"codecs",
|
|
239
|
+
"collections",
|
|
240
|
+
"enum",
|
|
241
|
+
"functools",
|
|
242
|
+
"imp",
|
|
243
|
+
"io",
|
|
244
|
+
"locale",
|
|
245
|
+
"operator",
|
|
246
|
+
"signal",
|
|
247
|
+
"sitebuiltins",
|
|
248
|
+
"stat",
|
|
249
|
+
"thread",
|
|
250
|
+
"tracemalloc",
|
|
251
|
+
"weakref",
|
|
252
|
+
"builtins",
|
|
253
|
+
"errno",
|
|
254
|
+
"marshal",
|
|
255
|
+
"sys",
|
|
256
|
+
"time",
|
|
257
|
+
"sre",
|
|
258
|
+
"symtable",
|
|
259
|
+
"warnings",
|
|
260
|
+
"string",
|
|
261
|
+
"re",
|
|
262
|
+
"inspect",
|
|
263
|
+
"tokenize",
|
|
264
|
+
# === Common Data Structures & Algorithms ===
|
|
265
|
+
"array",
|
|
266
|
+
"bisect",
|
|
267
|
+
"heapq",
|
|
268
|
+
"itertools",
|
|
269
|
+
# === Math & Random ===
|
|
270
|
+
"math",
|
|
271
|
+
"random",
|
|
272
|
+
"statistics",
|
|
273
|
+
# === Data Serialization & Formats ===
|
|
274
|
+
"csv",
|
|
275
|
+
"json",
|
|
276
|
+
"pickle",
|
|
277
|
+
"struct",
|
|
278
|
+
"elementtree",
|
|
279
|
+
"pyexpat",
|
|
280
|
+
"binascii",
|
|
281
|
+
# === Hashing & Cryptography ===
|
|
282
|
+
"hashlib",
|
|
283
|
+
"ssl",
|
|
284
|
+
"blake2",
|
|
285
|
+
"md5",
|
|
286
|
+
"sha3",
|
|
287
|
+
"unicodedata",
|
|
288
|
+
# === Compression ===
|
|
289
|
+
"zlib",
|
|
290
|
+
"bz2",
|
|
291
|
+
"lzma",
|
|
292
|
+
# === Concurrency & Interoperability ===
|
|
293
|
+
# "multiprocessing", # Explicitly not included
|
|
294
|
+
# "ctypes", # Explicitly not included
|
|
295
|
+
# "asyncio", # Explicitly not included
|
|
296
|
+
# === Networking ===
|
|
297
|
+
"socket",
|
|
298
|
+
"select",
|
|
299
|
+
# === Database ===
|
|
300
|
+
"sqlite3",
|
|
301
|
+
# === GUI ===
|
|
302
|
+
"tkinter",
|
|
303
|
+
# === Introspection & Debugging ===
|
|
304
|
+
"gc",
|
|
305
|
+
"faulthandler",
|
|
306
|
+
# === Platform: POSIX/Unix-like ===
|
|
307
|
+
"posix",
|
|
308
|
+
# "posixsubprocess", # Explicitly not included
|
|
309
|
+
"fcntl",
|
|
310
|
+
"grp",
|
|
311
|
+
"pwd",
|
|
312
|
+
"resource",
|
|
313
|
+
"termios",
|
|
314
|
+
# === Platform: Windows ===
|
|
315
|
+
"winapi",
|
|
316
|
+
"msvcrt",
|
|
317
|
+
# === Platform: macOS ===
|
|
318
|
+
"scproxy",
|
|
319
|
+
# === Platform: Cross-platform ===
|
|
320
|
+
"mmap",
|
|
321
|
+
# --- Other ---
|
|
322
|
+
"queue",
|
|
323
|
+
"decimal",
|
|
324
|
+
"uuid",
|
|
325
|
+
"datetime",
|
|
326
|
+
"zoneinfo",
|
|
327
|
+
"shlex",
|
|
328
|
+
"calendar",
|
|
329
|
+
"yaml",
|
|
330
|
+
"email",
|
|
331
|
+
"syslog",
|
|
332
|
+
"dataclasses",
|
|
333
|
+
"pprint",
|
|
334
|
+
"difflib",
|
|
335
|
+
"cmath",
|
|
336
|
+
"hmac",
|
|
337
|
+
))
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
def _c_is_whitelisted(element: ModuleType) -> bool:
|
|
341
|
+
"""Checks if the given element belongs to the C module whitelist.
|
|
342
|
+
|
|
343
|
+
Args:
|
|
344
|
+
element: The element to check
|
|
345
|
+
|
|
346
|
+
Returns:
|
|
347
|
+
Is the element whitelisted?
|
|
348
|
+
"""
|
|
349
|
+
c_module_whitelist = set(C_MODULE_WHITELIST)
|
|
350
|
+
|
|
351
|
+
try:
|
|
352
|
+
module_name = element.__name__
|
|
353
|
+
top_level = module_name.split(".")[0]
|
|
354
|
+
public_top_level = top_level.lstrip("_")
|
|
355
|
+
return public_top_level in c_module_whitelist
|
|
356
|
+
except Exception: # noqa: BLE001
|
|
357
|
+
LOGGER.warning(
|
|
358
|
+
"Could not check if %s is whitelisted. Assuming it is not.", element, exc_info=True
|
|
219
359
|
)
|
|
220
360
|
# Something that is not supported yet.
|
|
221
361
|
return False
|
|
222
362
|
|
|
223
363
|
|
|
364
|
+
def _handle_c_modules(
|
|
365
|
+
c_extensions: set[str],
|
|
366
|
+
) -> None:
|
|
367
|
+
"""Handles the C extensions in the subject module.
|
|
368
|
+
|
|
369
|
+
Args:
|
|
370
|
+
c_extensions: The set of C extensions.
|
|
371
|
+
"""
|
|
372
|
+
subprocess_mode_recommended = len(c_extensions) > 0
|
|
373
|
+
if config.configuration.subprocess_if_recommended:
|
|
374
|
+
config.configuration.subprocess = subprocess_mode_recommended
|
|
375
|
+
LOGGER.info(
|
|
376
|
+
"Subprocess mode is set to %s because the subject module uses "
|
|
377
|
+
"the following C extensions: %s. ",
|
|
378
|
+
config.configuration.subprocess,
|
|
379
|
+
", ".join(sorted(c_extensions)),
|
|
380
|
+
)
|
|
381
|
+
elif not config.configuration.subprocess and subprocess_mode_recommended:
|
|
382
|
+
LOGGER.warning(
|
|
383
|
+
"You are using threaded execution mode, but the subject module "
|
|
384
|
+
"uses the following C extensions: %s. "
|
|
385
|
+
"This may lead to unexpected behavior, consider using "
|
|
386
|
+
"subprocess mode instead.",
|
|
387
|
+
", ".join(sorted(c_extensions)),
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
# Store the discovered C extensions in the statistics
|
|
391
|
+
stat.track_output_variable(RuntimeVariable.CExtensionModules, str(sorted(c_extensions)))
|
|
392
|
+
stat.track_output_variable(RuntimeVariable.SubprocessMode, str(config.configuration.subprocess))
|
|
393
|
+
|
|
394
|
+
|
|
224
395
|
@dataclasses.dataclass
|
|
225
396
|
class _ModuleParseResult:
|
|
226
397
|
"""A data wrapper for an imported and parsed module."""
|
|
@@ -934,8 +1105,14 @@ class FilteredModuleTestCluster(TestCluster): # noqa: PLR0904
|
|
|
934
1105
|
) -> None:
|
|
935
1106
|
self.__delegate = delegate
|
|
936
1107
|
self.__subject_properties = subject_properties
|
|
937
|
-
|
|
938
|
-
|
|
1108
|
+
|
|
1109
|
+
existing_code_objects = {
|
|
1110
|
+
metadata.code_object: code_object_id
|
|
1111
|
+
for code_object_id, metadata in subject_properties.existing_code_objects.items()
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
self.__code_object_id_to_accessible_objects = {
|
|
1115
|
+
existing_code_objects[acc.callable.__code__]: acc
|
|
939
1116
|
for acc in delegate.accessible_objects_under_test
|
|
940
1117
|
if isinstance(acc, GenericCallableAccessibleObject)
|
|
941
1118
|
and hasattr(acc.callable, "__code__")
|
|
@@ -1132,7 +1309,7 @@ def __analyse_function(
|
|
|
1132
1309
|
return
|
|
1133
1310
|
if inspect.iscoroutinefunction(func) or inspect.isasyncgenfunction(func):
|
|
1134
1311
|
if add_to_test:
|
|
1135
|
-
raise
|
|
1312
|
+
raise CoroutineFoundException("Found coroutine in SUT: %s", func_name)
|
|
1136
1313
|
# Coroutine outside the SUT are not problematic, just exclude them.
|
|
1137
1314
|
LOGGER.debug("Skipping coroutine %s outside of SUT", func_name)
|
|
1138
1315
|
return
|
|
@@ -1146,17 +1323,17 @@ def __analyse_function(
|
|
|
1146
1323
|
description = get_function_description(func_ast)
|
|
1147
1324
|
raised_exceptions = description.raises if description is not None else set()
|
|
1148
1325
|
cyclomatic_complexity = __get_mccabe_complexity(func_ast)
|
|
1149
|
-
if (
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1326
|
+
if getattr(func, "__name__", None) == "<lambda>":
|
|
1327
|
+
if lambda_assigned_name := _get_lambda_assigned_name(
|
|
1328
|
+
module_tree, func.__code__.co_firstlineno
|
|
1329
|
+
):
|
|
1330
|
+
func_name = lambda_assigned_name
|
|
1331
|
+
func.__name__ = lambda_assigned_name
|
|
1332
|
+
else:
|
|
1333
|
+
# If the lambda itself has no name, we must not add it to the test cluster
|
|
1334
|
+
# or else it will cause an exception during test export.
|
|
1335
|
+
return
|
|
1336
|
+
|
|
1160
1337
|
generic_function = GenericFunction(func, inferred_signature, raised_exceptions, func_name)
|
|
1161
1338
|
|
|
1162
1339
|
if config.configuration.pynguinml.ml_testing_enabled and module_tree is not None:
|
|
@@ -1334,7 +1511,7 @@ def __analyse_method(
|
|
|
1334
1511
|
return
|
|
1335
1512
|
if inspect.iscoroutinefunction(method) or inspect.isasyncgenfunction(method):
|
|
1336
1513
|
if add_to_test:
|
|
1337
|
-
raise
|
|
1514
|
+
raise CoroutineFoundException("Found coroutine in SUT: %s", method_name)
|
|
1338
1515
|
# Coroutine outside the SUT are not problematic, just exclude them.
|
|
1339
1516
|
LOGGER.debug("Skipping coroutine %s outside of SUT", method_name)
|
|
1340
1517
|
return
|
|
@@ -1402,6 +1579,9 @@ def __resolve_dependencies(
|
|
|
1402
1579
|
seen_classes: set[Any] = set()
|
|
1403
1580
|
seen_functions: set[Any] = set()
|
|
1404
1581
|
|
|
1582
|
+
# Set of C-extension modules that are not whitelisted
|
|
1583
|
+
dangerous_c_modules: set[str] = set()
|
|
1584
|
+
|
|
1405
1585
|
# Always analyse builtins
|
|
1406
1586
|
__analyse_included_classes(
|
|
1407
1587
|
module=builtins,
|
|
@@ -1426,6 +1606,13 @@ def __resolve_dependencies(
|
|
|
1426
1606
|
# Don't include anything from the blacklist
|
|
1427
1607
|
continue
|
|
1428
1608
|
|
|
1609
|
+
# Check if the module contains c extensions that are not whitelisted
|
|
1610
|
+
dangerous_c_modules.update(
|
|
1611
|
+
__check_c_modules(
|
|
1612
|
+
module=current_module,
|
|
1613
|
+
)
|
|
1614
|
+
)
|
|
1615
|
+
|
|
1429
1616
|
# Analyze all classes found in the current module
|
|
1430
1617
|
__analyse_included_classes(
|
|
1431
1618
|
module=current_module,
|
|
@@ -1458,6 +1645,7 @@ def __resolve_dependencies(
|
|
|
1458
1645
|
LOGGER.info("Modules: %5i", len(seen_modules))
|
|
1459
1646
|
LOGGER.info("Functions: %5i", len(seen_functions))
|
|
1460
1647
|
LOGGER.info("Classes: %5i", len(seen_classes))
|
|
1648
|
+
_handle_c_modules(dangerous_c_modules)
|
|
1461
1649
|
|
|
1462
1650
|
test_cluster.type_system.push_attributes_down()
|
|
1463
1651
|
|
|
@@ -1555,6 +1743,41 @@ def __analyse_included_functions(
|
|
|
1555
1743
|
)
|
|
1556
1744
|
|
|
1557
1745
|
|
|
1746
|
+
def __check_c_modules(
|
|
1747
|
+
*,
|
|
1748
|
+
module: ModuleType,
|
|
1749
|
+
) -> set[str]:
|
|
1750
|
+
"""Return the names of modules containing non-whitelisted C extensions.
|
|
1751
|
+
|
|
1752
|
+
Args:
|
|
1753
|
+
module: The module to check
|
|
1754
|
+
|
|
1755
|
+
Returns:
|
|
1756
|
+
A set of module names with non-whitelisted C code.
|
|
1757
|
+
"""
|
|
1758
|
+
non_whitelisted_modules = set()
|
|
1759
|
+
|
|
1760
|
+
# If the whole module file looks like a binary extension:
|
|
1761
|
+
module_file = getattr(module, "__file__", "")
|
|
1762
|
+
if module_file and Path(module_file).suffix in {".so", ".pyd"}:
|
|
1763
|
+
if not _c_is_whitelisted(module):
|
|
1764
|
+
non_whitelisted_modules.add(module.__name__)
|
|
1765
|
+
return non_whitelisted_modules
|
|
1766
|
+
|
|
1767
|
+
# If the module is Python, inspect its members too:
|
|
1768
|
+
for element in vars(module).values():
|
|
1769
|
+
if inspect.isfunction(element) or inspect.isclass(element):
|
|
1770
|
+
try:
|
|
1771
|
+
inspect.getsource(element)
|
|
1772
|
+
# Source is available => likely pure Python.
|
|
1773
|
+
except Exception: # noqa: BLE001
|
|
1774
|
+
# No source => likely compiled or builtin.
|
|
1775
|
+
if not _c_is_whitelisted(module):
|
|
1776
|
+
non_whitelisted_modules.add(module.__name__)
|
|
1777
|
+
|
|
1778
|
+
return non_whitelisted_modules
|
|
1779
|
+
|
|
1780
|
+
|
|
1558
1781
|
def analyse_module(
|
|
1559
1782
|
parsed_module: _ModuleParseResult,
|
|
1560
1783
|
type_inference_strategy: TypeInferenceStrategy = TypeInferenceStrategy.TYPE_HINTS,
|
|
@@ -104,8 +104,14 @@ class InitialPopulationProvider:
|
|
|
104
104
|
logger.debug("No suitable test module found.")
|
|
105
105
|
stat.track_output_variable(RuntimeVariable.SuitableTestModule, value=False)
|
|
106
106
|
return None
|
|
107
|
-
except BaseException as exception:
|
|
108
|
-
|
|
107
|
+
except BaseException as exception: # noqa: BLE001
|
|
108
|
+
try:
|
|
109
|
+
logger.exception("Cannot read module: %s", exception)
|
|
110
|
+
except BaseException: # noqa: BLE001
|
|
111
|
+
# Starting with Python 3.11, the exception method tries to parse the file
|
|
112
|
+
# using the ast.parse function which can fail.
|
|
113
|
+
logger.error("Cannot read module: %s", exception)
|
|
114
|
+
|
|
109
115
|
stat.track_output_variable(RuntimeVariable.SuitableTestModule, value=False)
|
|
110
116
|
return None
|
|
111
117
|
|