pynguin 0.45.0__tar.gz → 0.46.0.dev0__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.45.0 → pynguin-0.46.0.dev0}/PKG-INFO +1 -1
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/pyproject.toml +2 -1
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/__version__.py +1 -1
- pynguin-0.46.0.dev0/src/pynguin/analyses/AGENTS.md +114 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/generator.py +64 -2
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/module.py +18 -8
- pynguin-0.46.0.dev0/src/pynguin/analyses/string_subtype_inference.py +120 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/type_inference.py +208 -23
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/typesystem.py +1 -1
- pynguin-0.46.0.dev0/src/pynguin/analysis/__init__.py +26 -0
- pynguin-0.46.0.dev0/src/pynguin/analysis/models.py +105 -0
- pynguin-0.46.0.dev0/src/pynguin/analysis/module_analyzer.py +525 -0
- pynguin-0.46.0.dev0/src/pynguin/analysis/type_utils.py +101 -0
- pynguin-0.46.0.dev0/src/pynguin/assertion/AGENTS.md +205 -0
- pynguin-0.46.0.dev0/src/pynguin/assertion/assertion.py +304 -0
- pynguin-0.46.0.dev0/src/pynguin/assertion/assertion_to_cst.py +243 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/assertion_trace.py +13 -58
- pynguin-0.46.0.dev0/src/pynguin/assertion/assertiongenerator.py +140 -0
- pynguin-0.46.0.dev0/src/pynguin/assertion/assertiontraceobserver.py +164 -0
- pynguin-0.46.0.dev0/src/pynguin/assertion/mutation_analysis/AGENTS.md +291 -0
- pynguin-0.46.0.dev0/src/pynguin/assertion/mutation_analysis/operators/AGENTS.md +174 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/cli.py +20 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/configuration.py +11 -0
- {pynguin-0.45.0/src/pynguin/ga/algorithms → pynguin-0.46.0.dev0/src/pynguin/evolution}/__init__.py +1 -1
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/__init__.py +28 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/archive.py +142 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/base.py +111 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/codamosa.py +58 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/dynamosa.py +459 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/mio.py +172 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/observer.py +83 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/random.py +139 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/stopping_conditions.py +170 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/wholesuite.py +194 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/__init__.py +13 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/base.py +35 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/individual.py +50 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/suite.py +138 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/factory.py +78 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/__init__.py +25 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/base.py +65 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/coverage.py +245 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/minimization.py +289 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/operators/__init__.py +7 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/operators/crossover.py +201 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/operators/mutation.py +245 -0
- pynguin-0.46.0.dev0/src/pynguin/evolution/operators/selection.py +63 -0
- {pynguin-0.45.0/src/pynguin/slicer → pynguin-0.46.0.dev0/src/pynguin/execution}/__init__.py +1 -1
- pynguin-0.46.0.dev0/src/pynguin/execution/executor.py +270 -0
- pynguin-0.46.0.dev0/src/pynguin/execution/isolation.py +313 -0
- pynguin-0.46.0.dev0/src/pynguin/execution/observer.py +40 -0
- pynguin-0.46.0.dev0/src/pynguin/execution/subprocess_executor.py +235 -0
- pynguin-0.46.0.dev0/src/pynguin/generator.py +609 -0
- pynguin-0.46.0.dev0/src/pynguin/instrumentation/AGENTS.md +377 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/tracer.py +31 -266
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/transformer.py +320 -128
- pynguin-0.46.0.dev0/src/pynguin/instrumentation/version/AGENTS.md +77 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_10.py +6 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_11.py +7 -1
- pynguin-0.46.0.dev0/src/pynguin/master_worker/AGENTS.md +133 -0
- pynguin-0.46.0.dev0/src/pynguin/output/__init__.py +7 -0
- pynguin-0.46.0.dev0/src/pynguin/output/writer.py +329 -0
- pynguin-0.46.0.dev0/src/pynguin/resources/AGENTS.md +86 -0
- pynguin-0.46.0.dev0/src/pynguin/testcase/AGENTS.md +274 -0
- pynguin-0.46.0.dev0/src/pynguin/testcase/testcase.py +291 -0
- pynguin-0.46.0.dev0/src/pynguin/testcase/testfactory.py +740 -0
- pynguin-0.46.0.dev0/src/pynguin/utils/AGENTS.md +354 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/configuration_writer.py +1 -1
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/controlflowdistance.py +10 -8
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/execution_recorder.py +5 -11
- pynguin-0.46.0.dev0/src/pynguin/utils/generic/AGENTS.md +70 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/llm.py +9 -5
- pynguin-0.46.0.dev0/src/pynguin/utils/naming.py +21 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/openai_key_resolver.py +50 -1
- pynguin-0.46.0.dev0/src/pynguin/utils/pynguinml/AGENTS.md +90 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_testfactory_utils.py +9 -17
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/report.py +51 -7
- pynguin-0.46.0.dev0/src/pynguin/utils/statistics/AGENTS.md +129 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/outputvariablefactory.py +1 -1
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/runtimevariable.py +12 -3
- pynguin-0.46.0.dev0/src/pynguin/utils/statistics/statisticsobserver.py +110 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/stats.py +11 -16
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/typetracing.py +7 -3
- pynguin-0.46.0.dev0/tests/AGENTS.md +130 -0
- pynguin-0.46.0.dev0/tests/analyses/test_string_subtype_inference.py +198 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/analyses/test_type_inference.py +12 -2
- pynguin-0.46.0.dev0/tests/analysis/test_module_analyzer.py +131 -0
- pynguin-0.46.0.dev0/tests/assertion/AGENTS.md +225 -0
- pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/operators/AGENTS.md +81 -0
- pynguin-0.46.0.dev0/tests/assertion/test_assertion.py +161 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/test_assertion_trace.py +2 -8
- pynguin-0.46.0.dev0/tests/assertion/test_assertiongenerator.py +38 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/conftest.py +10 -263
- pynguin-0.46.0.dev0/tests/evolution/test_chromosomes.py +146 -0
- pynguin-0.46.0.dev0/tests/execution/test_executor.py +170 -0
- pynguin-0.46.0.dev0/tests/fixtures/AGENTS.md +123 -0
- pynguin-0.46.0.dev0/tests/fixtures/examples/AGENTS.md +27 -0
- pynguin-0.46.0.dev0/tests/fixtures/instrumentation/AGENTS.md +49 -0
- pynguin-0.46.0.dev0/tests/fixtures/instrumentation/excluded_blocks.py +68 -0
- pynguin-0.46.0.dev0/tests/instrumentation/AGENTS.md +186 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_ast_info.py +156 -3
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_machinery.py +5 -7
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_tracer.py +2 -2
- pynguin-0.46.0.dev0/tests/resources/typeevalpy/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/test_cli.py +7 -1
- pynguin-0.46.0.dev0/tests/testcase/AGENTS.md +235 -0
- pynguin-0.46.0.dev0/tests/testcase/test_new_testcase.py +161 -0
- pynguin-0.46.0.dev0/tests/testcase/test_testfactory_static.py +144 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_ml_testing_resources.py +3 -3
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_configuration_writer.py +6 -2
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_fs_isolation.py +1 -1
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_logging_utils.py +4 -2
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_typetracing.py +4 -4
- pynguin-0.45.0/src/pynguin/analyses/seeding.py +0 -917
- pynguin-0.45.0/src/pynguin/assertion/assertion.py +0 -437
- pynguin-0.45.0/src/pynguin/assertion/assertion_to_ast.py +0 -336
- pynguin-0.45.0/src/pynguin/assertion/assertiongenerator.py +0 -394
- pynguin-0.45.0/src/pynguin/assertion/assertiontraceobserver.py +0 -342
- pynguin-0.45.0/src/pynguin/assertion/llmassertiongenerator.py +0 -168
- pynguin-0.45.0/src/pynguin/ga/__init__.py +0 -7
- pynguin-0.45.0/src/pynguin/ga/algorithms/abstractmosaalgorithm.py +0 -174
- pynguin-0.45.0/src/pynguin/ga/algorithms/archive.py +0 -425
- pynguin-0.45.0/src/pynguin/ga/algorithms/dynamosaalgorithm.py +0 -321
- pynguin-0.45.0/src/pynguin/ga/algorithms/generationalgorithm.py +0 -326
- pynguin-0.45.0/src/pynguin/ga/algorithms/llmosalgorithm.py +0 -208
- pynguin-0.45.0/src/pynguin/ga/algorithms/mioalgorithm.py +0 -142
- pynguin-0.45.0/src/pynguin/ga/algorithms/mosaalgorithm.py +0 -67
- pynguin-0.45.0/src/pynguin/ga/algorithms/randomalgorithm.py +0 -163
- pynguin-0.45.0/src/pynguin/ga/algorithms/randomsearchalgorithm.py +0 -55
- pynguin-0.45.0/src/pynguin/ga/algorithms/wholesuitealgorithm.py +0 -181
- pynguin-0.45.0/src/pynguin/ga/chromosome.py +0 -207
- pynguin-0.45.0/src/pynguin/ga/chromosomefactory.py +0 -26
- pynguin-0.45.0/src/pynguin/ga/chromosomevisitor.py +0 -29
- pynguin-0.45.0/src/pynguin/ga/computations.py +0 -1013
- pynguin-0.45.0/src/pynguin/ga/coveragegoals.py +0 -508
- pynguin-0.45.0/src/pynguin/ga/generationalgorithmfactory.py +0 -440
- pynguin-0.45.0/src/pynguin/ga/llmtestsuitechromosomefactory.py +0 -127
- pynguin-0.45.0/src/pynguin/ga/operators/__init__.py +0 -7
- pynguin-0.45.0/src/pynguin/ga/operators/comparator.py +0 -133
- pynguin-0.45.0/src/pynguin/ga/operators/crossover.py +0 -52
- pynguin-0.45.0/src/pynguin/ga/operators/ranking.py +0 -224
- pynguin-0.45.0/src/pynguin/ga/operators/selection.py +0 -169
- pynguin-0.45.0/src/pynguin/ga/postprocess.py +0 -709
- pynguin-0.45.0/src/pynguin/ga/searchobserver.py +0 -84
- pynguin-0.45.0/src/pynguin/ga/stoppingcondition.py +0 -644
- pynguin-0.45.0/src/pynguin/ga/testcasechromosome.py +0 -304
- pynguin-0.45.0/src/pynguin/ga/testcasechromosomefactory.py +0 -84
- pynguin-0.45.0/src/pynguin/ga/testcasefactory.py +0 -89
- pynguin-0.45.0/src/pynguin/ga/testsuitechromosome.py +0 -193
- pynguin-0.45.0/src/pynguin/ga/testsuitechromosomefactory.py +0 -61
- pynguin-0.45.0/src/pynguin/generator.py +0 -1014
- pynguin-0.45.0/src/pynguin/large_language_model/__init__.py +0 -7
- pynguin-0.45.0/src/pynguin/large_language_model/caching.py +0 -73
- pynguin-0.45.0/src/pynguin/large_language_model/helpers/__init__.py +0 -7
- pynguin-0.45.0/src/pynguin/large_language_model/helpers/testcasereferencecopier.py +0 -144
- pynguin-0.45.0/src/pynguin/large_language_model/llmagent.py +0 -435
- pynguin-0.45.0/src/pynguin/large_language_model/llmtestcasehandler.py +0 -165
- pynguin-0.45.0/src/pynguin/large_language_model/parsing/__init__.py +0 -7
- pynguin-0.45.0/src/pynguin/large_language_model/parsing/astscoping.py +0 -560
- pynguin-0.45.0/src/pynguin/large_language_model/parsing/deserializer.py +0 -908
- pynguin-0.45.0/src/pynguin/large_language_model/parsing/helpers.py +0 -199
- pynguin-0.45.0/src/pynguin/large_language_model/parsing/rewriter.py +0 -988
- pynguin-0.45.0/src/pynguin/large_language_model/parsing/type_str_parser.py +0 -182
- pynguin-0.45.0/src/pynguin/large_language_model/prompts/__init__.py +0 -7
- pynguin-0.45.0/src/pynguin/large_language_model/prompts/assertiongenerationprompt.py +0 -33
- pynguin-0.45.0/src/pynguin/large_language_model/prompts/localsearchprompt.py +0 -69
- pynguin-0.45.0/src/pynguin/large_language_model/prompts/prompt.py +0 -38
- pynguin-0.45.0/src/pynguin/large_language_model/prompts/testcasegenerationprompt.py +0 -33
- pynguin-0.45.0/src/pynguin/large_language_model/prompts/typeinferenceprompt.py +0 -201
- pynguin-0.45.0/src/pynguin/large_language_model/prompts/uncoveredtargetsprompt.py +0 -81
- pynguin-0.45.0/src/pynguin/slicer/dynamicslicer.py +0 -909
- pynguin-0.45.0/src/pynguin/slicer/executedinstruction.py +0 -144
- pynguin-0.45.0/src/pynguin/slicer/executionflowbuilder.py +0 -605
- pynguin-0.45.0/src/pynguin/slicer/stack/__init__.py +0 -9
- pynguin-0.45.0/src/pynguin/slicer/stack/stacksimulation.py +0 -228
- pynguin-0.45.0/src/pynguin/slicer/statementslicingobserver.py +0 -78
- pynguin-0.45.0/src/pynguin/testcase/defaulttestcase.py +0 -215
- pynguin-0.45.0/src/pynguin/testcase/execution.py +0 -2183
- pynguin-0.45.0/src/pynguin/testcase/export.py +0 -308
- pynguin-0.45.0/src/pynguin/testcase/llmlocalsearch.py +0 -230
- pynguin-0.45.0/src/pynguin/testcase/localsearch.py +0 -304
- pynguin-0.45.0/src/pynguin/testcase/localsearchobjective.py +0 -143
- pynguin-0.45.0/src/pynguin/testcase/localsearchstatement.py +0 -1494
- pynguin-0.45.0/src/pynguin/testcase/localsearchtimer.py +0 -42
- pynguin-0.45.0/src/pynguin/testcase/statement.py +0 -2951
- pynguin-0.45.0/src/pynguin/testcase/statement_to_ast.py +0 -480
- pynguin-0.45.0/src/pynguin/testcase/testcase.py +0 -352
- pynguin-0.45.0/src/pynguin/testcase/testcase_to_ast.py +0 -191
- pynguin-0.45.0/src/pynguin/testcase/testcasevisitor.py +0 -21
- pynguin-0.45.0/src/pynguin/testcase/testfactory.py +0 -1915
- pynguin-0.45.0/src/pynguin/testcase/variablereference.py +0 -492
- pynguin-0.45.0/src/pynguin/utils/statistics/statisticsobserver.py +0 -88
- pynguin-0.45.0/tests/analyses/test_initialpopulationseeding.py +0 -261
- pynguin-0.45.0/tests/analyses/test_module.py +0 -737
- pynguin-0.45.0/tests/analyses/test_seeding.py +0 -70
- pynguin-0.45.0/tests/analyses/test_typesystem.py +0 -1070
- pynguin-0.45.0/tests/assertion/test_assertion.py +0 -165
- pynguin-0.45.0/tests/assertion/test_assertion_generation_integration.py +0 -461
- pynguin-0.45.0/tests/assertion/test_assertion_to_ast.py +0 -121
- pynguin-0.45.0/tests/assertion/test_assertiongenerator.py +0 -32
- pynguin-0.45.0/tests/assertion/test_assertiontraceobserver.py +0 -49
- pynguin-0.45.0/tests/assertion/test_llmassertiongenerator.py +0 -214
- pynguin-0.45.0/tests/ga/algorithms/__init__.py +0 -7
- pynguin-0.45.0/tests/ga/algorithms/test_archive.py +0 -418
- pynguin-0.45.0/tests/ga/algorithms/test_dynamosaalgorithm.py +0 -90
- pynguin-0.45.0/tests/ga/algorithms/test_generationalgorithm.py +0 -32
- pynguin-0.45.0/tests/ga/algorithms/test_integration_mosaalgorithm.py +0 -68
- pynguin-0.45.0/tests/ga/algorithms/test_integration_varioussearchalgorithms.py +0 -124
- pynguin-0.45.0/tests/ga/algorithms/test_llmosalgorithm.py +0 -436
- pynguin-0.45.0/tests/ga/algorithms/test_mioalgorithm.py +0 -66
- pynguin-0.45.0/tests/ga/algorithms/test_mosaalgorithm.py +0 -52
- pynguin-0.45.0/tests/ga/algorithms/test_randomalgorithm.py +0 -155
- pynguin-0.45.0/tests/ga/operators/crossover/test_singlepointrelativecrossover.py +0 -39
- pynguin-0.45.0/tests/ga/operators/ranking/test_rankingfunction.py +0 -70
- pynguin-0.45.0/tests/ga/operators/selection/test_randomselection.py +0 -16
- pynguin-0.45.0/tests/ga/operators/selection/test_rankselection.py +0 -16
- pynguin-0.45.0/tests/ga/operators/selection/test_selection.py +0 -29
- pynguin-0.45.0/tests/ga/operators/selection/test_tournamentselection.py +0 -20
- pynguin-0.45.0/tests/ga/operators/test_dominancecomparator.py +0 -48
- pynguin-0.45.0/tests/ga/operators/test_preferencesortingcomparator.py +0 -25
- pynguin-0.45.0/tests/ga/stoppingconditions/test_coverageplateaustoppingcondition.py +0 -63
- pynguin-0.45.0/tests/ga/stoppingconditions/test_maxcoveragestoppingcondition.py +0 -59
- pynguin-0.45.0/tests/ga/stoppingconditions/test_maxiterationsstoppingcondition.py +0 -43
- pynguin-0.45.0/tests/ga/stoppingconditions/test_maxmemorystoppingcondition.py +0 -43
- pynguin-0.45.0/tests/ga/stoppingconditions/test_maxstatementstoppingcondition.py +0 -47
- pynguin-0.45.0/tests/ga/stoppingconditions/test_maxtestsstoppingcondition.py +0 -31
- pynguin-0.45.0/tests/ga/stoppingconditions/test_maxtimestoppingcondition.py +0 -42
- pynguin-0.45.0/tests/ga/stoppingconditions/test_minimumcoverageplateaustoppingcondition.py +0 -85
- pynguin-0.45.0/tests/ga/stoppingconditions/test_stoppingcondition.py +0 -39
- pynguin-0.45.0/tests/ga/test_chromosome.py +0 -62
- pynguin-0.45.0/tests/ga/test_chromosomefactory.py +0 -83
- pynguin-0.45.0/tests/ga/test_computations.py +0 -255
- pynguin-0.45.0/tests/ga/test_computations_cache.py +0 -227
- pynguin-0.45.0/tests/ga/test_computations_fitness_utilities.py +0 -291
- pynguin-0.45.0/tests/ga/test_coveragegoals.py +0 -481
- pynguin-0.45.0/tests/ga/test_generationalgorithmfactory.py +0 -99
- pynguin-0.45.0/tests/ga/test_generator.py +0 -176
- pynguin-0.45.0/tests/ga/test_llmtestsuitechromosomefactory.py +0 -189
- pynguin-0.45.0/tests/ga/test_postprocess.py +0 -1165
- pynguin-0.45.0/tests/ga/test_testcasechromosome.py +0 -337
- pynguin-0.45.0/tests/ga/test_testcasefactory.py +0 -35
- pynguin-0.45.0/tests/ga/test_testsuitechromosome.py +0 -220
- pynguin-0.45.0/tests/instrumentation/__init__.py +0 -6
- pynguin-0.45.0/tests/instrumentation/test_adapters.py +0 -1007
- pynguin-0.45.0/tests/large_language_model/__init__.py +0 -6
- pynguin-0.45.0/tests/large_language_model/helpers/test_testcasereferencecopier.py +0 -187
- pynguin-0.45.0/tests/large_language_model/parsing/test_astscoping.py +0 -684
- pynguin-0.45.0/tests/large_language_model/parsing/test_helpers.py +0 -353
- pynguin-0.45.0/tests/large_language_model/parsing/test_type_str_parser.py +0 -111
- pynguin-0.45.0/tests/large_language_model/prompts/test_assertiongenerationprompt.py +0 -106
- pynguin-0.45.0/tests/large_language_model/prompts/test_testcasegenerationprompt.py +0 -114
- pynguin-0.45.0/tests/large_language_model/prompts/test_uncovered_targets_prompt.py +0 -95
- pynguin-0.45.0/tests/large_language_model/test_caching.py +0 -109
- pynguin-0.45.0/tests/large_language_model/test_llm_caching.py +0 -54
- pynguin-0.45.0/tests/large_language_model/test_llm_deserializer.py +0 -645
- pynguin-0.45.0/tests/large_language_model/test_llmagent.py +0 -133
- pynguin-0.45.0/tests/large_language_model/test_llmagent_extended.py +0 -494
- pynguin-0.45.0/tests/large_language_model/test_llmtestcasehandler.py +0 -216
- pynguin-0.45.0/tests/large_language_model/test_llmtestcasehandler_coverage.py +0 -48
- pynguin-0.45.0/tests/large_language_model/test_rewriter.py +0 -519
- pynguin-0.45.0/tests/slicer/__init__.py +0 -6
- pynguin-0.45.0/tests/slicer/test_assertionslicer.py +0 -387
- pynguin-0.45.0/tests/slicer/test_dependencies.py +0 -466
- pynguin-0.45.0/tests/slicer/test_expected_failures.py +0 -703
- pynguin-0.45.0/tests/slicer/test_language_features.py +0 -1495
- pynguin-0.45.0/tests/slicer/test_statementslicer.py +0 -319
- pynguin-0.45.0/tests/slicer/util.py +0 -200
- pynguin-0.45.0/tests/test_generator.py +0 -382
- pynguin-0.45.0/tests/testcase/__init__.py +0 -6
- pynguin-0.45.0/tests/testcase/execution/__init__.py +0 -6
- pynguin-0.45.0/tests/testcase/execution/test_executedinstruction.py +0 -22
- pynguin-0.45.0/tests/testcase/execution/test_executioncontext.py +0 -43
- pynguin-0.45.0/tests/testcase/execution/test_executionresult.py +0 -55
- pynguin-0.45.0/tests/testcase/execution/test_executiontrace.py +0 -83
- pynguin-0.45.0/tests/testcase/execution/test_moduleprovider.py +0 -72
- pynguin-0.45.0/tests/testcase/execution/test_subprocesstestcaseexecutor.py +0 -248
- pynguin-0.45.0/tests/testcase/execution/test_subprocesstestcaseexecutor_differential.py +0 -36
- pynguin-0.45.0/tests/testcase/execution/test_subprocesstestcaseexecutor_integration.py +0 -131
- pynguin-0.45.0/tests/testcase/execution/test_testcaseexecutor_integration.py +0 -197
- pynguin-0.45.0/tests/testcase/execution/test_typetracing.py +0 -115
- pynguin-0.45.0/tests/testcase/export/__init__.py +0 -6
- pynguin-0.45.0/tests/testcase/export/conftest.py +0 -95
- pynguin-0.45.0/tests/testcase/export/test_export.py +0 -465
- pynguin-0.45.0/tests/testcase/statements/__init__.py +0 -6
- pynguin-0.45.0/tests/testcase/statements/test_assignmentstatement.py +0 -125
- pynguin-0.45.0/tests/testcase/statements/test_collectionstatements.py +0 -137
- pynguin-0.45.0/tests/testcase/statements/test_fieldstatement.py +0 -170
- pynguin-0.45.0/tests/testcase/statements/test_parameterizedstatements.py +0 -546
- pynguin-0.45.0/tests/testcase/statements/test_primitivestatements.py +0 -815
- pynguin-0.45.0/tests/testcase/test_ast_assign_statement.py +0 -382
- pynguin-0.45.0/tests/testcase/test_benchmark.py +0 -63
- pynguin-0.45.0/tests/testcase/test_defaulttestcase.py +0 -504
- pynguin-0.45.0/tests/testcase/test_llmlocalsearch.py +0 -77
- pynguin-0.45.0/tests/testcase/test_localsearch.py +0 -1366
- pynguin-0.45.0/tests/testcase/test_localsearchtimer.py +0 -28
- pynguin-0.45.0/tests/testcase/test_statement_to_ast.py +0 -666
- pynguin-0.45.0/tests/testcase/test_testcase_integration.py +0 -160
- pynguin-0.45.0/tests/testcase/test_testcase_to_ast_integration.py +0 -96
- pynguin-0.45.0/tests/testcase/test_testfactory.py +0 -1077
- pynguin-0.45.0/tests/testcase/variable/__init__.py +0 -6
- pynguin-0.45.0/tests/testcase/variable/test_variablereference.py +0 -316
- pynguin-0.45.0/tests/utils/__init__.py +0 -6
- pynguin-0.45.0/tests/utils/generic/__init__.py +0 -6
- pynguin-0.45.0/tests/utils/pynguinml/__init__.py +0 -6
- pynguin-0.45.0/tests/utils/pynguinml/test_ml_testfactory_utils.py +0 -377
- pynguin-0.45.0/tests/utils/pynguinml/test_pynguinml_integration.py +0 -61
- pynguin-0.45.0/tests/utils/stats/__init__.py +0 -6
- pynguin-0.45.0/tests/utils/stats/test_outputvariablefactory.py +0 -183
- pynguin-0.45.0/tests/utils/stats/test_searchstatistics.py +0 -193
- pynguin-0.45.0/tests/utils/test_controlflowdistance.py +0 -127
- pynguin-0.45.0/tests/utils/test_execution_recorder.py +0 -78
- pynguin-0.45.0/tests/utils/test_namingscope.py +0 -130
- pynguin-0.45.0/tests/utils/test_report.py +0 -546
- pynguin-0.45.0/tests/utils/test_string_subtype_integration.py +0 -52
- pynguin-0.45.0/tests/utils/test_typeevalpy_integration.py +0 -232
- pynguin-0.45.0/tests/utils/test_typeevalpy_json_schema.py +0 -437
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/LICENSE.rst +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/LICENSES/Apache-2.0.txt +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/LICENSES/BSD-2-Clause.txt +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/LICENSES/CC-BY-4.0.txt +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/LICENSES/CC0-1.0.txt +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/LICENSES/MIT.txt +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/README.md +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/__main__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/constants.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/modulecomplexity.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/string_subtypes.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/syntaxtree.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/controller.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/mutators.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/arithmetic.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/base.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/decorator.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/exception.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/inheritance.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/logical.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/loop.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/misc.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/strategies.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/transformer.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/controlflow.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/machinery.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/common.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_12.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_13.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_14.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/client.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/master.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/worker.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/coverage-template.html +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/camel_case.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/colour.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/csv.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/delimited.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/email.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/camel_case.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/colour.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/csv.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/delimited.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/email.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/ipv4.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/standard_date.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/unix_path.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/xml.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/ipv4.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/numeric.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/standard_date.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/unix_path.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/xml.fan +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/testcase/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/ast_util.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/atomicinteger.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/collection_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/exceptions.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/fandango_faker_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/fs_isolation.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/generic/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/generic/genericaccessibleobject.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/logging_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/mirror.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/mutation_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/namingscope.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/orderedset.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_parsing_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_testing_resources.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/mlparameter.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/np_rng.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/randomness.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/statisticsbackend.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/type_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/typeevalpy_json_schema.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/analyses/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/analyses/test_constants.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/analyses/test_modulecomplexity.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/analyses/test_staticconstantseeding.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/analyses/test_string_subtypes.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/analyses/test_syntaxtree.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/analyses/test_typesystem_string_subtypes.py +0 -0
- {pynguin-0.45.0/tests/assertion/mutation_analysis/operators → pynguin-0.46.0.dev0/tests/analysis}/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/__init__.py +0 -0
- {pynguin-0.45.0/tests/large_language_model/prompts → pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/operators}/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_arithmetic.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_decorator.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_exception.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_inheritance.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_logical.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_loop.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_misc.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/test_controller.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/test_mutators.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/test_strategies.py +0 -0
- {pynguin-0.45.0/tests/resources → pynguin-0.46.0.dev0/tests/evolution}/__init__.py +0 -0
- {pynguin-0.45.0/tests/resources/typeevalpy → pynguin-0.46.0.dev0/tests/execution}/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/accessibles/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/accessibles/accessible.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/nestedbranches.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/nobranches.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/simplenesting.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/singlebranches.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/twomethodsinglebranches.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/c/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/c/my_ctypes.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/abstract.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/alias_module.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_class_gen.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_class_method.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_func.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_gen.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/attributes.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/blacklist.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/blacklist_transitive.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/comments.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/complex_dependencies.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/complex_dependency.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/conditional_import.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/dependency.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_bottom.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_left.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_right.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_top.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/enums.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/import_dependency.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/inheritance.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/lambda.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/nested_functions.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/no_any_annotations.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/no_dependencies.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/overridden_inherited_methods.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/simple_dependencies.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/typing_parameters.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/uses_async_dependency.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/partly_crashing.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/seg_fault.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/duckmock/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/duckmock/complex.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/errors/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/errors/import_error.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/assertions.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/basket.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/calculator.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/calculator_simple.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/collections.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/constructors.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/difficult.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/dummies.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/dynamosa_example.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/enums.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/exceptions.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/flaky.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/impossible.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/inheritance.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/loop.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/module_alias.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/monkey.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/nested.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/objects.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/private_methods.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/queue.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/simple.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/triangle.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_inference.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/geometry.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/invoice.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/large_test_cluster.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/mixed.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/string_subtype.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/unasserted_exceptions.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/grammar/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/grammar/parameters.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/comparison.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_branches.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_classes.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_functions.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_lines.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/inherited.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/mixed.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/simple.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/artificial_none.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/emptyfile.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/exception.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/list.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/plus.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/setter_getter.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/exception.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/expected.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/mutation.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/timeout.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/samples.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/whileloop.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/yield_fun.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/argparse_sys_exit.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/custom_error.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/not_main.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/dynamicseeding/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/dynamicseeding/dynamicseedingdummies.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/dummycontainer.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/assertseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/classseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collfuncseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/nestedseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notknowncall_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notprimseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/primitiveseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/triangleseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongassignseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongfunctionnameseed_test_.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/dummy.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/empty.so +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/attribute_dependencies.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/closure.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/generator.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/immutable_attribute_dependency.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/import_star_def.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/import_star_main.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/partial_cover_dependency.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/simple_call.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/simple_call_arg.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/test.conf +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/test.conf.license +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/tests/typeinference/test_stubstrategy.pyi +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/guess_params.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/return_types.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/union_type.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/outside.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/subtyping.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/symbols.py +0 -0
- {pynguin-0.45.0/tests/ga → pynguin-0.46.0.dev0/tests/instrumentation}/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_cfg.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_controldependencegraph.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_programgraph.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_version.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/master_worker/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_client.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_master.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_worker.py +0 -0
- /pynguin-0.45.0/tests/testcase/execution/test_executionmocking.py → /pynguin-0.46.0.dev0/tests/resources/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy_gt.json +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy_gt.json.license +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/test___main__.py +0 -0
- {pynguin-0.45.0/tests/ga/operators → pynguin-0.46.0.dev0/tests/testcase}/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/testutils.py +0 -0
- {pynguin-0.45.0/tests/ga/operators/crossover → pynguin-0.46.0.dev0/tests/utils}/__init__.py +0 -0
- {pynguin-0.45.0/tests/ga/operators/ranking → pynguin-0.46.0.dev0/tests/utils/generic}/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/generic/test_genericaccessibleobject.py +0 -0
- {pynguin-0.45.0/tests/ga/operators/selection → pynguin-0.46.0.dev0/tests/utils/pynguinml}/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_ml_parsing_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_mlparameter.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_np_rng.py +0 -0
- {pynguin-0.45.0/tests/ga/stoppingconditions → pynguin-0.46.0.dev0/tests/utils/stats}/__init__.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_runtimevariable.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_statistics.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_statisticsbackend.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_atomicinteger.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_collection_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_exceptions.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_fandango_faker_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_llm.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_mirror.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_mutation_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_orderedset.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_randomness.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/test_type_utils.py +0 -0
- {pynguin-0.45.0 → pynguin-0.46.0.dev0}/tests/utils/utils.py +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "pynguin"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.46.0.dev"
|
|
8
8
|
description = "Pynguin is a tool for automated unit test generation for Python"
|
|
9
9
|
authors = [
|
|
10
10
|
"Stephan Lukasczyk <stephan@pynguin.eu>",
|
|
@@ -99,6 +99,7 @@ pytest-cov = "^6.1.1"
|
|
|
99
99
|
pytest-mock = "^3.14.0"
|
|
100
100
|
pytest-picked = "^0.5.1"
|
|
101
101
|
pytest-sugar = "^1.0.0"
|
|
102
|
+
pytest-xdist = "^3.6.0"
|
|
102
103
|
|
|
103
104
|
[tool.poetry.extras]
|
|
104
105
|
openai = [ "openai", "python-dotenv" ]
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPDX-FileCopyrightText: 2019–2026 Pynguin Contributors
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0
|
|
5
|
+
-->
|
|
6
|
+
|
|
7
|
+
# Analyses Module
|
|
8
|
+
|
|
9
|
+
<!-- Parent: ../AGENTS.md -->
|
|
10
|
+
|
|
11
|
+
The `analyses/` directory contains static analysis components for subject program understanding, including module analysis, type inference, and test cluster generation.
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
This module performs comprehensive program analysis to:
|
|
16
|
+
- Build test clusters from subject program callables
|
|
17
|
+
- Perform type inference on generic types
|
|
18
|
+
- Analyze module structure and complexity
|
|
19
|
+
- Support seeding from existing tests
|
|
20
|
+
|
|
21
|
+
## Directory Structure
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
analyses/
|
|
25
|
+
├── constants.py # Analysis constants and configuration
|
|
26
|
+
├── generator.py # Test cluster generation from modules
|
|
27
|
+
├── module.py # Module representation and access
|
|
28
|
+
├── modulecomplexity.py # Module complexity metrics
|
|
29
|
+
├── seeding.py # Seed test generation from existing tests
|
|
30
|
+
├── string_subtypes.py # String type hierarchy analysis
|
|
31
|
+
├── syntaxtree.py # Abstract syntax tree utilities
|
|
32
|
+
└── type_inference.py # Generic type inference engine
|
|
33
|
+
├── typesystem.py # Type system representation
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Core Components
|
|
37
|
+
|
|
38
|
+
### 1. Module Analysis (module.py)
|
|
39
|
+
- **ModuleAccessor**: Accesses Python modules and their callables
|
|
40
|
+
- Discovers classes, methods, functions within a module
|
|
41
|
+
- Tracks module dependencies and import structure
|
|
42
|
+
- Filters public vs. private members
|
|
43
|
+
|
|
44
|
+
### 2. Type System (typesystem.py)
|
|
45
|
+
- **GenericType**: Represents generic Python types (List[int], Dict[str, Any])
|
|
46
|
+
- **Type inference**: Resolves type parameters from annotations and usage
|
|
47
|
+
- Handles complex type hierarchies and bounds
|
|
48
|
+
- Supports Union, Optional, generic base classes
|
|
49
|
+
|
|
50
|
+
### 3. Type Inference (type_inference.py)
|
|
51
|
+
- Infers generic type parameters from class hierarchies
|
|
52
|
+
- Resolves type variables in method signatures
|
|
53
|
+
- Handles substitution of type bounds
|
|
54
|
+
|
|
55
|
+
### 4. Test Cluster Generation (generator.py)
|
|
56
|
+
- **TestCluster**: Collection of callable descriptions with dependency info
|
|
57
|
+
- Creates from subject module or custom callables
|
|
58
|
+
- Builds dependency graph for method/function calls
|
|
59
|
+
- Tracks class hierarchies for polymorphism
|
|
60
|
+
|
|
61
|
+
### 5. Seeding (seeding.py)
|
|
62
|
+
- Loads existing tests from files or test suites
|
|
63
|
+
- Extracts test cases for use as initial population
|
|
64
|
+
- Supports multiple test formats
|
|
65
|
+
|
|
66
|
+
### 6. Complexity Analysis (modulecomplexity.py)
|
|
67
|
+
- Computes module complexity metrics
|
|
68
|
+
- Analyzes cyclomatic complexity
|
|
69
|
+
- Used for search space characterization
|
|
70
|
+
|
|
71
|
+
## Key Patterns
|
|
72
|
+
|
|
73
|
+
### Module Access
|
|
74
|
+
```python
|
|
75
|
+
from pynguin.analyses.module import ModuleAccessor
|
|
76
|
+
|
|
77
|
+
accessor = ModuleAccessor(module)
|
|
78
|
+
callables = accessor.get_all_callables()
|
|
79
|
+
classes = accessor.get_classes()
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Type System
|
|
83
|
+
```python
|
|
84
|
+
from pynguin.analyses.typesystem import GenericType
|
|
85
|
+
|
|
86
|
+
# Parse complex types
|
|
87
|
+
list_int = GenericType.from_string("List[int]")
|
|
88
|
+
dict_type = GenericType.from_string("Dict[str, Any]")
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Test Cluster
|
|
92
|
+
```python
|
|
93
|
+
from pynguin.analyses.generator import TestClusterGenerator
|
|
94
|
+
|
|
95
|
+
generator = TestClusterGenerator()
|
|
96
|
+
cluster = generator.generate_cluster(module)
|
|
97
|
+
callables = cluster.get_all_callables()
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Related Modules
|
|
101
|
+
|
|
102
|
+
- `ga/` - Uses test clusters for search space definition
|
|
103
|
+
- `testcase/` - Test cases use analyzed type information
|
|
104
|
+
- `instrumentation/` - Complements dynamic analysis
|
|
105
|
+
|
|
106
|
+
## Key Files to Explore
|
|
107
|
+
|
|
108
|
+
- `typesystem.py` - Complete type system representation
|
|
109
|
+
- `generator.py` - Test cluster generation algorithm
|
|
110
|
+
- `module.py` - Module introspection utilities
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
**Timestamp**: 2026-01-30
|
|
@@ -10,18 +10,80 @@ Generators can be either GenericCallableAccessibleObjects or GenericEnum objects
|
|
|
10
10
|
|
|
11
11
|
import functools
|
|
12
12
|
import itertools
|
|
13
|
-
from abc import abstractmethod
|
|
13
|
+
from abc import ABC, abstractmethod
|
|
14
14
|
from collections import defaultdict
|
|
15
|
+
from typing import Generic, TypeVar
|
|
15
16
|
|
|
16
17
|
import pynguin.configuration as config
|
|
17
18
|
from pynguin.analyses.typesystem import AnyType, NoneType, ProperType, TypeSystem, is_primitive_type
|
|
18
|
-
from pynguin.
|
|
19
|
+
from pynguin.utils import randomness
|
|
19
20
|
from pynguin.utils.generic.genericaccessibleobject import (
|
|
20
21
|
GenericAccessibleObject,
|
|
21
22
|
GenericCallableAccessibleObject,
|
|
22
23
|
)
|
|
23
24
|
from pynguin.utils.orderedset import FrozenOrderedSet, OrderedSet
|
|
24
25
|
|
|
26
|
+
S = TypeVar("S")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class Selectable(ABC):
|
|
30
|
+
"""Interface for objects that can be selected based on fitness."""
|
|
31
|
+
|
|
32
|
+
@abstractmethod
|
|
33
|
+
def get_fitness(self) -> float:
|
|
34
|
+
"""Return the fitness value of this selectable object."""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class SelectionFunction(ABC, Generic[S]):
|
|
38
|
+
"""Interface for functions that select from a population."""
|
|
39
|
+
|
|
40
|
+
@abstractmethod
|
|
41
|
+
def select(self, population: list[S], number: int = 1) -> list[S]:
|
|
42
|
+
"""Select `number` items from `population`."""
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class RandomSelection(SelectionFunction[S]):
|
|
46
|
+
"""Selects items uniformly at random."""
|
|
47
|
+
|
|
48
|
+
def select(self, population: list[S], number: int = 1) -> list[S]:
|
|
49
|
+
"""Select `number` items from `population`."""
|
|
50
|
+
return [randomness.RNG.choice(population) for _ in range(number)]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class RankSelection(SelectionFunction[S]):
|
|
54
|
+
"""Selects items using linear rank-based probability (lower fitness index = better)."""
|
|
55
|
+
|
|
56
|
+
def __init__(self, bias: float = 1.7) -> None:
|
|
57
|
+
"""Initializes the rank selection function.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
bias: The selection bias.
|
|
61
|
+
"""
|
|
62
|
+
self._bias = bias
|
|
63
|
+
|
|
64
|
+
def select(self, population: list[S], number: int = 1) -> list[S]:
|
|
65
|
+
"""Select `number` items from `population`."""
|
|
66
|
+
n = len(population)
|
|
67
|
+
if n == 0:
|
|
68
|
+
return []
|
|
69
|
+
weights = [
|
|
70
|
+
max(0.0, (2 - self._bias) + 2 * (self._bias - 1) * (n - 1 - i) / max(n - 1, 1))
|
|
71
|
+
for i in range(n)
|
|
72
|
+
]
|
|
73
|
+
total = sum(weights)
|
|
74
|
+
results = []
|
|
75
|
+
for _ in range(number):
|
|
76
|
+
r = randomness.RNG.uniform(0, total)
|
|
77
|
+
cumulative = 0.0
|
|
78
|
+
selected = population[-1]
|
|
79
|
+
for i, item in enumerate(population):
|
|
80
|
+
cumulative += weights[i]
|
|
81
|
+
if cumulative >= r:
|
|
82
|
+
selected = item
|
|
83
|
+
break
|
|
84
|
+
results.append(selected)
|
|
85
|
+
return results
|
|
86
|
+
|
|
25
87
|
|
|
26
88
|
class GeneratorFitnessFunction:
|
|
27
89
|
"""Interface for a fitness function for type generators."""
|
|
@@ -44,6 +44,7 @@ from pynguin.analyses.type_inference import (
|
|
|
44
44
|
HintInference,
|
|
45
45
|
InferenceProvider,
|
|
46
46
|
LLMInference,
|
|
47
|
+
LLMInferenceWithSubtypes,
|
|
47
48
|
NoInference,
|
|
48
49
|
TypeEvalPyInference,
|
|
49
50
|
)
|
|
@@ -52,7 +53,12 @@ from pynguin.utils.llm import LLMProvider
|
|
|
52
53
|
if config.configuration.pynguinml.ml_testing_enabled or typing.TYPE_CHECKING:
|
|
53
54
|
import pynguin.utils.pynguinml.ml_testing_resources as tr
|
|
54
55
|
|
|
55
|
-
from pynguin.analyses.generator import
|
|
56
|
+
from pynguin.analyses.generator import (
|
|
57
|
+
GeneratorProvider,
|
|
58
|
+
RandomGeneratorProvider,
|
|
59
|
+
RandomSelection,
|
|
60
|
+
RankSelection,
|
|
61
|
+
)
|
|
56
62
|
from pynguin.analyses.modulecomplexity import mccabe_complexity
|
|
57
63
|
from pynguin.analyses.syntaxtree import (
|
|
58
64
|
FunctionDescription,
|
|
@@ -75,7 +81,6 @@ from pynguin.analyses.typesystem import (
|
|
|
75
81
|
Unsupported,
|
|
76
82
|
)
|
|
77
83
|
from pynguin.configuration import TypeInferenceStrategy
|
|
78
|
-
from pynguin.ga.operators.selection import RandomSelection, RankSelection
|
|
79
84
|
from pynguin.utils import randomness
|
|
80
85
|
from pynguin.utils.exceptions import (
|
|
81
86
|
ConstraintValidationError,
|
|
@@ -100,9 +105,8 @@ if config.configuration.pynguinml.ml_testing_enabled or typing.TYPE_CHECKING:
|
|
|
100
105
|
|
|
101
106
|
if typing.TYPE_CHECKING:
|
|
102
107
|
from collections.abc import Callable, Sequence
|
|
108
|
+
from typing import Any
|
|
103
109
|
|
|
104
|
-
import pynguin.ga.algorithms.archive as arch
|
|
105
|
-
import pynguin.ga.computations as ff
|
|
106
110
|
from pynguin.instrumentation.tracer import SubjectProperties
|
|
107
111
|
from pynguin.utils.pynguinml.mlparameter import MLParameter
|
|
108
112
|
|
|
@@ -793,6 +797,9 @@ class ModuleTestCluster(TestCluster): # noqa: PLR0904
|
|
|
793
797
|
# Keep track of all callables, this is only for statistics purposes.
|
|
794
798
|
self.__callables: OrderedSet[GenericCallableAccessibleObject] = OrderedSet()
|
|
795
799
|
|
|
800
|
+
# Whether the SUT or any of its transitive imports uses Python's random module.
|
|
801
|
+
self.sut_uses_random: bool = False
|
|
802
|
+
|
|
796
803
|
def _setup_generator_selection(self) -> GeneratorProvider:
|
|
797
804
|
if (
|
|
798
805
|
config.configuration.generator_selection.generator_selection_algorithm
|
|
@@ -1143,9 +1150,9 @@ class FilteredModuleTestCluster(TestCluster): # noqa: PLR0904
|
|
|
1143
1150
|
def __init__( # noqa: D107
|
|
1144
1151
|
self,
|
|
1145
1152
|
delegate: ModuleTestCluster,
|
|
1146
|
-
archive:
|
|
1153
|
+
archive: Any,
|
|
1147
1154
|
subject_properties: SubjectProperties,
|
|
1148
|
-
targets: OrderedSet
|
|
1155
|
+
targets: OrderedSet,
|
|
1149
1156
|
) -> None:
|
|
1150
1157
|
self.__delegate = delegate
|
|
1151
1158
|
self.__subject_properties = subject_properties
|
|
@@ -1177,7 +1184,7 @@ class FilteredModuleTestCluster(TestCluster): # noqa: PLR0904
|
|
|
1177
1184
|
archive.add_on_target_covered(self.on_target_covered)
|
|
1178
1185
|
|
|
1179
1186
|
def __get_accessible_object_for_target(
|
|
1180
|
-
self, target:
|
|
1187
|
+
self, target: Any
|
|
1181
1188
|
) -> GenericCallableAccessibleObject | None:
|
|
1182
1189
|
code_object_id: int | None = target.code_object_id
|
|
1183
1190
|
while code_object_id is not None:
|
|
@@ -1190,7 +1197,7 @@ class FilteredModuleTestCluster(TestCluster): # noqa: PLR0904
|
|
|
1190
1197
|
].parent_code_object_id
|
|
1191
1198
|
return None
|
|
1192
1199
|
|
|
1193
|
-
def on_target_covered(self, target:
|
|
1200
|
+
def on_target_covered(self, target: Any) -> None:
|
|
1194
1201
|
"""A callback function to get informed by an archive when a target is covered.
|
|
1195
1202
|
|
|
1196
1203
|
Args:
|
|
@@ -1890,6 +1897,9 @@ def get_type_provider(
|
|
|
1890
1897
|
case TypeInferenceStrategy.LLM:
|
|
1891
1898
|
callables = _collect_public_callables(module)
|
|
1892
1899
|
return LLMInference(callables, LLMProvider.OPENAI, type_system)
|
|
1900
|
+
case TypeInferenceStrategy.LLM_WITH_SUBTYPES:
|
|
1901
|
+
callables = _collect_public_callables(module)
|
|
1902
|
+
return LLMInferenceWithSubtypes(callables, LLMProvider.OPENAI, type_system)
|
|
1893
1903
|
case TypeInferenceStrategy.TYPE_HINTS:
|
|
1894
1904
|
return HintInference()
|
|
1895
1905
|
case TypeInferenceStrategy.NONE:
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# This file is part of Pynguin.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-FileCopyrightText: 2019–2026 Pynguin Contributors
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
#
|
|
7
|
+
"""Utility for converting LLM subtype inference to StringSubtype instances."""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
import re
|
|
13
|
+
|
|
14
|
+
from pynguin.analyses.typesystem import (
|
|
15
|
+
CSVString,
|
|
16
|
+
EmailString,
|
|
17
|
+
IPv4String,
|
|
18
|
+
IPv6String,
|
|
19
|
+
ISOColorString,
|
|
20
|
+
ISODateString,
|
|
21
|
+
StringSubtype,
|
|
22
|
+
URLString,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
_LOGGER = logging.getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
# Mapping of Faker method names to corresponding StringSubtype classes
|
|
28
|
+
_GENERATOR_TO_SUBTYPE: dict[str, type[StringSubtype]] = {
|
|
29
|
+
"email": EmailString,
|
|
30
|
+
"ipv4": IPv4String,
|
|
31
|
+
"ipv6": IPv6String,
|
|
32
|
+
"color": ISOColorString,
|
|
33
|
+
"csv": CSVString,
|
|
34
|
+
"date": ISODateString,
|
|
35
|
+
"url": URLString,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# Mapping of StringSubtype classes to Faker method names
|
|
39
|
+
_SUBTYPE_TO_GENERATOR: dict[type[StringSubtype], str] = {
|
|
40
|
+
v: k for k, v in _GENERATOR_TO_SUBTYPE.items()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
AVAILABLE_GENERATORS: list[str] = list(_GENERATOR_TO_SUBTYPE.keys())
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def get_subtype_for_generator(generator_name: str) -> StringSubtype | None:
|
|
47
|
+
"""Get a StringSubtype instance for a given Faker generator name."""
|
|
48
|
+
subtype_class = _GENERATOR_TO_SUBTYPE.get(generator_name)
|
|
49
|
+
# All registered StringSubtype subclasses have no-arg constructors
|
|
50
|
+
return subtype_class() if subtype_class else None # type: ignore[call-arg]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def get_generator_for_subtype(subtype: StringSubtype) -> str | None:
|
|
54
|
+
"""Get the Faker generator name for a given StringSubtype instance."""
|
|
55
|
+
return _SUBTYPE_TO_GENERATOR.get(type(subtype))
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def has_generator(generator_name: str) -> bool:
|
|
59
|
+
"""Check if a generator name is registered."""
|
|
60
|
+
return generator_name in _GENERATOR_TO_SUBTYPE
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def from_string(subtype_str: str) -> StringSubtype | None:
|
|
64
|
+
"""Convert a subtype string into a StringSubtype instance.
|
|
65
|
+
|
|
66
|
+
The subtype string can be either:
|
|
67
|
+
1. A Faker generator name (e.g., "email", "ipv4", "url")
|
|
68
|
+
2. A custom regex pattern (e.g., "^[a-z]+$")
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
subtype_str: The subtype string from LLM inference
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
A StringSubtype instance, or None if conversion fails
|
|
75
|
+
"""
|
|
76
|
+
if not subtype_str or not isinstance(subtype_str, str):
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
# First, try to match against known Faker generators
|
|
80
|
+
if has_generator(subtype_str):
|
|
81
|
+
subtype = get_subtype_for_generator(subtype_str)
|
|
82
|
+
if subtype:
|
|
83
|
+
return subtype
|
|
84
|
+
|
|
85
|
+
# Otherwise, try to parse as a custom regex pattern
|
|
86
|
+
try:
|
|
87
|
+
# Validate that it's a valid regex by attempting to compile it
|
|
88
|
+
compiled_regex = re.compile(subtype_str)
|
|
89
|
+
return StringSubtype(compiled_regex)
|
|
90
|
+
except re.error as e:
|
|
91
|
+
_LOGGER.warning(
|
|
92
|
+
"Failed to parse subtype string '%s' as regex pattern: %s",
|
|
93
|
+
subtype_str,
|
|
94
|
+
e,
|
|
95
|
+
)
|
|
96
|
+
return None
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def from_faker_generator(generator_name: str) -> StringSubtype | None:
|
|
100
|
+
"""Create a StringSubtype from a Faker generator name.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
generator_name: The name of the Faker generator
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
A StringSubtype instance, or None if the generator is not registered
|
|
107
|
+
"""
|
|
108
|
+
return get_subtype_for_generator(generator_name)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def to_faker_generator(subtype: StringSubtype) -> str | None:
|
|
112
|
+
"""Get the Faker generator name for a StringSubtype, if available.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
subtype: The StringSubtype instance
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
The Faker generator name, or None if no mapping exists
|
|
119
|
+
"""
|
|
120
|
+
return get_generator_for_subtype(subtype)
|