pynguin 0.46.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.46.0 → pynguin-0.46.0.dev0}/PKG-INFO +7 -10
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/README.md +6 -9
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/pyproject.toml +1 -1
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/__version__.py +1 -1
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/generator.py +64 -2
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/module.py +45 -140
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/type_inference.py +22 -9
- 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/assertion.py +304 -0
- pynguin-0.46.0.dev0/src/pynguin/assertion/assertion_to_cst.py +243 -0
- {pynguin-0.46.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 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/controller.py +1 -5
- pynguin-0.46.0.dev0/src/pynguin/assertion/mutation_analysis/mutators.py +121 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/__init__.py +0 -16
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/exception.py +1 -43
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/inheritance.py +4 -8
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/logical.py +0 -33
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/misc.py +3 -200
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/cli.py +20 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/configuration.py +0 -74
- {pynguin-0.46.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.46.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 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/tracer.py +31 -290
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/transformer.py +297 -155
- 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/testcase/testcase.py +291 -0
- pynguin-0.46.0.dev0/src/pynguin/testcase/testfactory.py +740 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/configuration_writer.py +1 -1
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/controlflowdistance.py +8 -6
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/execution_recorder.py +5 -12
- pynguin-0.46.0.dev0/src/pynguin/utils/naming.py +21 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/namingscope.py +1 -4
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/openai_key_resolver.py +7 -13
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_testfactory_utils.py +9 -17
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/report.py +51 -7
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/outputvariablefactory.py +1 -1
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/runtimevariable.py +0 -44
- pynguin-0.46.0.dev0/src/pynguin/utils/statistics/statisticsobserver.py +110 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/stats.py +11 -16
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/typetracing.py +7 -3
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_string_subtype_inference.py +0 -59
- {pynguin-0.46.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 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_exception.py +0 -92
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_inheritance.py +0 -30
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_logical.py +0 -80
- pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/operators/test_misc.py +290 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/test_controller.py +4 -4
- pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/test_mutators.py +152 -0
- pynguin-0.46.0.dev0/tests/assertion/test_assertion.py +161 -0
- {pynguin-0.46.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.46.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 → pynguin-0.46.0.dev0}/tests/instrumentation/test_machinery.py +5 -7
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_tracer.py +2 -2
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_client.py +1 -0
- pynguin-0.46.0.dev0/tests/resources/__init__.py +0 -0
- pynguin-0.46.0.dev0/tests/resources/typeevalpy/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/test_cli.py +7 -1
- 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.46.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_ml_testing_resources.py +3 -3
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_configuration_writer.py +8 -49
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_logging_utils.py +4 -2
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_typetracing.py +4 -4
- pynguin-0.46.0/src/pynguin/analyses/seeding.py +0 -917
- pynguin-0.46.0/src/pynguin/assertion/assertion.py +0 -446
- pynguin-0.46.0/src/pynguin/assertion/assertion_to_ast.py +0 -349
- pynguin-0.46.0/src/pynguin/assertion/assertiongenerator.py +0 -632
- pynguin-0.46.0/src/pynguin/assertion/assertiontraceobserver.py +0 -399
- pynguin-0.46.0/src/pynguin/assertion/llmassertiongenerator.py +0 -168
- pynguin-0.46.0/src/pynguin/assertion/mutation_analysis/mutators.py +0 -290
- pynguin-0.46.0/src/pynguin/assertion/mutation_analysis/operators/statement.py +0 -70
- pynguin-0.46.0/src/pynguin/ga/AGENTS.md +0 -464
- pynguin-0.46.0/src/pynguin/ga/__init__.py +0 -7
- pynguin-0.46.0/src/pynguin/ga/algorithms/AGENTS.md +0 -658
- pynguin-0.46.0/src/pynguin/ga/algorithms/abstractmosaalgorithm.py +0 -174
- pynguin-0.46.0/src/pynguin/ga/algorithms/archive.py +0 -460
- pynguin-0.46.0/src/pynguin/ga/algorithms/dynamosaalgorithm.py +0 -321
- pynguin-0.46.0/src/pynguin/ga/algorithms/generationalgorithm.py +0 -326
- pynguin-0.46.0/src/pynguin/ga/algorithms/llmosalgorithm.py +0 -207
- pynguin-0.46.0/src/pynguin/ga/algorithms/mioalgorithm.py +0 -142
- pynguin-0.46.0/src/pynguin/ga/algorithms/mosaalgorithm.py +0 -67
- pynguin-0.46.0/src/pynguin/ga/algorithms/randomalgorithm.py +0 -163
- pynguin-0.46.0/src/pynguin/ga/algorithms/randomsearchalgorithm.py +0 -55
- pynguin-0.46.0/src/pynguin/ga/algorithms/wholesuitealgorithm.py +0 -181
- pynguin-0.46.0/src/pynguin/ga/chromosome.py +0 -207
- pynguin-0.46.0/src/pynguin/ga/chromosomefactory.py +0 -26
- pynguin-0.46.0/src/pynguin/ga/chromosomevisitor.py +0 -29
- pynguin-0.46.0/src/pynguin/ga/computations.py +0 -1013
- pynguin-0.46.0/src/pynguin/ga/coveragegoals.py +0 -508
- pynguin-0.46.0/src/pynguin/ga/generationalgorithmfactory.py +0 -440
- pynguin-0.46.0/src/pynguin/ga/llmtestsuitechromosomefactory.py +0 -127
- pynguin-0.46.0/src/pynguin/ga/operators/AGENTS.md +0 -157
- pynguin-0.46.0/src/pynguin/ga/operators/__init__.py +0 -7
- pynguin-0.46.0/src/pynguin/ga/operators/comparator.py +0 -133
- pynguin-0.46.0/src/pynguin/ga/operators/crossover.py +0 -52
- pynguin-0.46.0/src/pynguin/ga/operators/ranking.py +0 -224
- pynguin-0.46.0/src/pynguin/ga/operators/selection.py +0 -169
- pynguin-0.46.0/src/pynguin/ga/postprocess.py +0 -757
- pynguin-0.46.0/src/pynguin/ga/searchobserver.py +0 -84
- pynguin-0.46.0/src/pynguin/ga/stoppingcondition.py +0 -644
- pynguin-0.46.0/src/pynguin/ga/testcasechromosome.py +0 -304
- pynguin-0.46.0/src/pynguin/ga/testcasechromosomefactory.py +0 -84
- pynguin-0.46.0/src/pynguin/ga/testcasefactory.py +0 -89
- pynguin-0.46.0/src/pynguin/ga/testsuitechromosome.py +0 -193
- pynguin-0.46.0/src/pynguin/ga/testsuitechromosomefactory.py +0 -61
- pynguin-0.46.0/src/pynguin/generator.py +0 -1205
- pynguin-0.46.0/src/pynguin/large_language_model/AGENTS.md +0 -219
- pynguin-0.46.0/src/pynguin/large_language_model/__init__.py +0 -7
- pynguin-0.46.0/src/pynguin/large_language_model/caching.py +0 -73
- pynguin-0.46.0/src/pynguin/large_language_model/helpers/AGENTS.md +0 -38
- pynguin-0.46.0/src/pynguin/large_language_model/helpers/__init__.py +0 -7
- pynguin-0.46.0/src/pynguin/large_language_model/helpers/testcasereferencecopier.py +0 -146
- pynguin-0.46.0/src/pynguin/large_language_model/llmagent.py +0 -439
- pynguin-0.46.0/src/pynguin/large_language_model/llmtestcasehandler.py +0 -165
- pynguin-0.46.0/src/pynguin/large_language_model/parsing/AGENTS.md +0 -81
- pynguin-0.46.0/src/pynguin/large_language_model/parsing/__init__.py +0 -7
- pynguin-0.46.0/src/pynguin/large_language_model/parsing/astscoping.py +0 -564
- pynguin-0.46.0/src/pynguin/large_language_model/parsing/deserializer.py +0 -970
- pynguin-0.46.0/src/pynguin/large_language_model/parsing/helpers.py +0 -199
- pynguin-0.46.0/src/pynguin/large_language_model/parsing/rewriter.py +0 -988
- pynguin-0.46.0/src/pynguin/large_language_model/parsing/type_str_parser.py +0 -196
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/AGENTS.md +0 -77
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/__init__.py +0 -7
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/assertiongenerationprompt.py +0 -33
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/base_inference_prompt.py +0 -126
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/localsearchprompt.py +0 -69
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/prompt.py +0 -38
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/testcasegenerationprompt.py +0 -33
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/type_and_subtype_inference_prompt.py +0 -147
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/typeinferenceprompt.py +0 -110
- pynguin-0.46.0/src/pynguin/large_language_model/prompts/uncoveredtargetsprompt.py +0 -81
- pynguin-0.46.0/src/pynguin/refinement/__init__.py +0 -11
- pynguin-0.46.0/src/pynguin/refinement/aaa_inserter.py +0 -140
- pynguin-0.46.0/src/pynguin/refinement/ast_analyzer.py +0 -265
- pynguin-0.46.0/src/pynguin/refinement/coverage_checker.py +0 -345
- pynguin-0.46.0/src/pynguin/refinement/llm_client.py +0 -215
- pynguin-0.46.0/src/pynguin/refinement/llm_judge.py +0 -352
- pynguin-0.46.0/src/pynguin/refinement/mutation_analyzer.py +0 -440
- pynguin-0.46.0/src/pynguin/refinement/pipeline.py +0 -847
- pynguin-0.46.0/src/pynguin/refinement/readability_metrics.py +0 -117
- pynguin-0.46.0/src/pynguin/refinement/refiner.py +0 -421
- pynguin-0.46.0/src/pynguin/refinement/sut_inspector.py +0 -293
- pynguin-0.46.0/src/pynguin/refinement/validator.py +0 -79
- pynguin-0.46.0/src/pynguin/slicer/AGENTS.md +0 -159
- pynguin-0.46.0/src/pynguin/slicer/dynamicslicer.py +0 -909
- pynguin-0.46.0/src/pynguin/slicer/executedinstruction.py +0 -144
- pynguin-0.46.0/src/pynguin/slicer/executionflowbuilder.py +0 -605
- pynguin-0.46.0/src/pynguin/slicer/stack/__init__.py +0 -9
- pynguin-0.46.0/src/pynguin/slicer/stack/stacksimulation.py +0 -228
- pynguin-0.46.0/src/pynguin/slicer/statementslicingobserver.py +0 -78
- pynguin-0.46.0/src/pynguin/testcase/defaulttestcase.py +0 -215
- pynguin-0.46.0/src/pynguin/testcase/execution.py +0 -2254
- pynguin-0.46.0/src/pynguin/testcase/export.py +0 -587
- pynguin-0.46.0/src/pynguin/testcase/llmlocalsearch.py +0 -230
- pynguin-0.46.0/src/pynguin/testcase/localsearch.py +0 -304
- pynguin-0.46.0/src/pynguin/testcase/localsearchobjective.py +0 -143
- pynguin-0.46.0/src/pynguin/testcase/localsearchstatement.py +0 -1494
- pynguin-0.46.0/src/pynguin/testcase/localsearchtimer.py +0 -42
- pynguin-0.46.0/src/pynguin/testcase/statement.py +0 -2951
- pynguin-0.46.0/src/pynguin/testcase/statement_to_ast.py +0 -480
- pynguin-0.46.0/src/pynguin/testcase/testcase.py +0 -352
- pynguin-0.46.0/src/pynguin/testcase/testcase_to_ast.py +0 -220
- pynguin-0.46.0/src/pynguin/testcase/testcasevisitor.py +0 -21
- pynguin-0.46.0/src/pynguin/testcase/testfactory.py +0 -1915
- pynguin-0.46.0/src/pynguin/testcase/variablereference.py +0 -492
- pynguin-0.46.0/src/pynguin/utils/statistics/statisticsobserver.py +0 -88
- pynguin-0.46.0/tests/analyses/test_initialpopulationseeding.py +0 -261
- pynguin-0.46.0/tests/analyses/test_module.py +0 -892
- pynguin-0.46.0/tests/analyses/test_seeding.py +0 -71
- pynguin-0.46.0/tests/analyses/test_typesystem.py +0 -1070
- pynguin-0.46.0/tests/assertion/mutation_analysis/operators/test_misc.py +0 -706
- pynguin-0.46.0/tests/assertion/mutation_analysis/operators/test_statement.py +0 -160
- pynguin-0.46.0/tests/assertion/mutation_analysis/test_mutators.py +0 -287
- pynguin-0.46.0/tests/assertion/test_assertion.py +0 -160
- pynguin-0.46.0/tests/assertion/test_assertion_generation_integration.py +0 -715
- pynguin-0.46.0/tests/assertion/test_assertion_to_ast.py +0 -120
- pynguin-0.46.0/tests/assertion/test_assertiongenerator.py +0 -257
- pynguin-0.46.0/tests/assertion/test_assertiontraceobserver.py +0 -94
- pynguin-0.46.0/tests/assertion/test_llmassertiongenerator.py +0 -214
- pynguin-0.46.0/tests/fixtures/cluster/async_and_sync.py +0 -12
- pynguin-0.46.0/tests/fixtures/cluster/cached_function.py +0 -12
- pynguin-0.46.0/tests/fixtures/cluster/lazy_module_getattr.py +0 -33
- pynguin-0.46.0/tests/fixtures/cluster/visibility.py +0 -40
- pynguin-0.46.0/tests/fixtures/cluster/visibility_dependency.py +0 -11
- pynguin-0.46.0/tests/ga/AGENTS.md +0 -170
- pynguin-0.46.0/tests/ga/algorithms/__init__.py +0 -7
- pynguin-0.46.0/tests/ga/algorithms/test_archive.py +0 -551
- pynguin-0.46.0/tests/ga/algorithms/test_dynamosaalgorithm.py +0 -90
- pynguin-0.46.0/tests/ga/algorithms/test_generationalgorithm.py +0 -32
- pynguin-0.46.0/tests/ga/algorithms/test_integration_mosaalgorithm.py +0 -68
- pynguin-0.46.0/tests/ga/algorithms/test_integration_varioussearchalgorithms.py +0 -124
- pynguin-0.46.0/tests/ga/algorithms/test_llmosalgorithm.py +0 -436
- pynguin-0.46.0/tests/ga/algorithms/test_mioalgorithm.py +0 -66
- pynguin-0.46.0/tests/ga/algorithms/test_mosaalgorithm.py +0 -52
- pynguin-0.46.0/tests/ga/algorithms/test_randomalgorithm.py +0 -158
- pynguin-0.46.0/tests/ga/operators/crossover/test_singlepointrelativecrossover.py +0 -39
- pynguin-0.46.0/tests/ga/operators/ranking/test_rankingfunction.py +0 -70
- pynguin-0.46.0/tests/ga/operators/selection/test_randomselection.py +0 -16
- pynguin-0.46.0/tests/ga/operators/selection/test_rankselection.py +0 -16
- pynguin-0.46.0/tests/ga/operators/selection/test_selection.py +0 -29
- pynguin-0.46.0/tests/ga/operators/selection/test_tournamentselection.py +0 -20
- pynguin-0.46.0/tests/ga/operators/test_dominancecomparator.py +0 -48
- pynguin-0.46.0/tests/ga/operators/test_preferencesortingcomparator.py +0 -25
- pynguin-0.46.0/tests/ga/stoppingconditions/test_coverageplateaustoppingcondition.py +0 -63
- pynguin-0.46.0/tests/ga/stoppingconditions/test_maxcoveragestoppingcondition.py +0 -59
- pynguin-0.46.0/tests/ga/stoppingconditions/test_maxiterationsstoppingcondition.py +0 -43
- pynguin-0.46.0/tests/ga/stoppingconditions/test_maxmemorystoppingcondition.py +0 -43
- pynguin-0.46.0/tests/ga/stoppingconditions/test_maxstatementstoppingcondition.py +0 -47
- pynguin-0.46.0/tests/ga/stoppingconditions/test_maxtestsstoppingcondition.py +0 -31
- pynguin-0.46.0/tests/ga/stoppingconditions/test_maxtimestoppingcondition.py +0 -42
- pynguin-0.46.0/tests/ga/stoppingconditions/test_minimumcoverageplateaustoppingcondition.py +0 -85
- pynguin-0.46.0/tests/ga/stoppingconditions/test_stoppingcondition.py +0 -39
- pynguin-0.46.0/tests/ga/test_chromosome.py +0 -62
- pynguin-0.46.0/tests/ga/test_chromosomefactory.py +0 -83
- pynguin-0.46.0/tests/ga/test_computations.py +0 -255
- pynguin-0.46.0/tests/ga/test_computations_cache.py +0 -227
- pynguin-0.46.0/tests/ga/test_computations_fitness_utilities.py +0 -291
- pynguin-0.46.0/tests/ga/test_coveragegoals.py +0 -481
- pynguin-0.46.0/tests/ga/test_generationalgorithmfactory.py +0 -99
- pynguin-0.46.0/tests/ga/test_generator.py +0 -176
- pynguin-0.46.0/tests/ga/test_llmtestsuitechromosomefactory.py +0 -207
- pynguin-0.46.0/tests/ga/test_postprocess.py +0 -1224
- pynguin-0.46.0/tests/ga/test_testcasechromosome.py +0 -337
- pynguin-0.46.0/tests/ga/test_testcasefactory.py +0 -35
- pynguin-0.46.0/tests/ga/test_testsuitechromosome.py +0 -220
- pynguin-0.46.0/tests/instrumentation/__init__.py +0 -6
- pynguin-0.46.0/tests/instrumentation/test_adapters.py +0 -1007
- pynguin-0.46.0/tests/large_language_model/__init__.py +0 -6
- pynguin-0.46.0/tests/large_language_model/helpers/test_testcasereferencecopier.py +0 -188
- pynguin-0.46.0/tests/large_language_model/parsing/test_astscoping.py +0 -726
- pynguin-0.46.0/tests/large_language_model/parsing/test_helpers.py +0 -353
- pynguin-0.46.0/tests/large_language_model/parsing/test_type_str_parser.py +0 -139
- pynguin-0.46.0/tests/large_language_model/prompts/test_assertiongenerationprompt.py +0 -106
- pynguin-0.46.0/tests/large_language_model/prompts/test_testcasegenerationprompt.py +0 -114
- pynguin-0.46.0/tests/large_language_model/prompts/test_uncovered_targets_prompt.py +0 -95
- pynguin-0.46.0/tests/large_language_model/test_caching.py +0 -109
- pynguin-0.46.0/tests/large_language_model/test_llm_caching.py +0 -54
- pynguin-0.46.0/tests/large_language_model/test_llm_deserializer.py +0 -645
- pynguin-0.46.0/tests/large_language_model/test_llmagent.py +0 -135
- pynguin-0.46.0/tests/large_language_model/test_llmagent_extended.py +0 -494
- pynguin-0.46.0/tests/large_language_model/test_llmtestcasehandler.py +0 -216
- pynguin-0.46.0/tests/large_language_model/test_llmtestcasehandler_coverage.py +0 -48
- pynguin-0.46.0/tests/large_language_model/test_rewriter.py +0 -519
- pynguin-0.46.0/tests/refinement/__init__.py +0 -6
- pynguin-0.46.0/tests/refinement/test_aaa_inserter.py +0 -107
- pynguin-0.46.0/tests/refinement/test_ast_analyzer.py +0 -109
- pynguin-0.46.0/tests/refinement/test_coverage_checker.py +0 -243
- pynguin-0.46.0/tests/refinement/test_llm_client.py +0 -199
- pynguin-0.46.0/tests/refinement/test_llm_judge.py +0 -206
- pynguin-0.46.0/tests/refinement/test_mutation_analyzer.py +0 -243
- pynguin-0.46.0/tests/refinement/test_pipeline.py +0 -853
- pynguin-0.46.0/tests/refinement/test_readability_metrics.py +0 -111
- pynguin-0.46.0/tests/refinement/test_refiner.py +0 -334
- pynguin-0.46.0/tests/refinement/test_sut_inspector.py +0 -85
- pynguin-0.46.0/tests/refinement/test_validator.py +0 -80
- pynguin-0.46.0/tests/slicer/__init__.py +0 -6
- pynguin-0.46.0/tests/slicer/test_assertionslicer.py +0 -387
- pynguin-0.46.0/tests/slicer/test_dependencies.py +0 -466
- pynguin-0.46.0/tests/slicer/test_expected_failures.py +0 -703
- pynguin-0.46.0/tests/slicer/test_language_features.py +0 -1495
- pynguin-0.46.0/tests/slicer/test_statementslicer.py +0 -319
- pynguin-0.46.0/tests/slicer/util.py +0 -200
- pynguin-0.46.0/tests/test_generator.py +0 -477
- pynguin-0.46.0/tests/testcase/__init__.py +0 -6
- pynguin-0.46.0/tests/testcase/execution/__init__.py +0 -6
- pynguin-0.46.0/tests/testcase/execution/test_executedinstruction.py +0 -22
- pynguin-0.46.0/tests/testcase/execution/test_executioncontext.py +0 -43
- pynguin-0.46.0/tests/testcase/execution/test_executionmocking.py +0 -48
- pynguin-0.46.0/tests/testcase/execution/test_executionresult.py +0 -55
- pynguin-0.46.0/tests/testcase/execution/test_executiontrace.py +0 -83
- pynguin-0.46.0/tests/testcase/execution/test_moduleprovider.py +0 -72
- pynguin-0.46.0/tests/testcase/execution/test_outputsuppression.py +0 -165
- pynguin-0.46.0/tests/testcase/execution/test_subprocesstestcaseexecutor.py +0 -254
- pynguin-0.46.0/tests/testcase/execution/test_subprocesstestcaseexecutor_differential.py +0 -36
- pynguin-0.46.0/tests/testcase/execution/test_subprocesstestcaseexecutor_integration.py +0 -131
- pynguin-0.46.0/tests/testcase/execution/test_testcaseexecutor_integration.py +0 -197
- pynguin-0.46.0/tests/testcase/execution/test_typetracing.py +0 -115
- pynguin-0.46.0/tests/testcase/export/__init__.py +0 -6
- pynguin-0.46.0/tests/testcase/export/conftest.py +0 -95
- pynguin-0.46.0/tests/testcase/export/test_export.py +0 -737
- pynguin-0.46.0/tests/testcase/statements/__init__.py +0 -6
- pynguin-0.46.0/tests/testcase/statements/test_assignmentstatement.py +0 -125
- pynguin-0.46.0/tests/testcase/statements/test_collectionstatements.py +0 -137
- pynguin-0.46.0/tests/testcase/statements/test_fieldstatement.py +0 -170
- pynguin-0.46.0/tests/testcase/statements/test_parameterizedstatements.py +0 -546
- pynguin-0.46.0/tests/testcase/statements/test_primitivestatements.py +0 -815
- pynguin-0.46.0/tests/testcase/test_ast_assign_statement.py +0 -384
- pynguin-0.46.0/tests/testcase/test_benchmark.py +0 -63
- pynguin-0.46.0/tests/testcase/test_defaulttestcase.py +0 -504
- pynguin-0.46.0/tests/testcase/test_llmlocalsearch.py +0 -77
- pynguin-0.46.0/tests/testcase/test_localsearch.py +0 -1366
- pynguin-0.46.0/tests/testcase/test_localsearchtimer.py +0 -28
- pynguin-0.46.0/tests/testcase/test_statement_to_ast.py +0 -666
- pynguin-0.46.0/tests/testcase/test_testcase_integration.py +0 -160
- pynguin-0.46.0/tests/testcase/test_testcase_to_ast_integration.py +0 -161
- pynguin-0.46.0/tests/testcase/test_testfactory.py +0 -1077
- pynguin-0.46.0/tests/testcase/variable/__init__.py +0 -6
- pynguin-0.46.0/tests/testcase/variable/test_variablereference.py +0 -316
- pynguin-0.46.0/tests/utils/__init__.py +0 -6
- pynguin-0.46.0/tests/utils/generic/__init__.py +0 -6
- pynguin-0.46.0/tests/utils/pynguinml/__init__.py +0 -6
- pynguin-0.46.0/tests/utils/pynguinml/test_ml_testfactory_utils.py +0 -377
- pynguin-0.46.0/tests/utils/pynguinml/test_pynguinml_integration.py +0 -61
- pynguin-0.46.0/tests/utils/stats/__init__.py +0 -6
- pynguin-0.46.0/tests/utils/stats/test_outputvariablefactory.py +0 -183
- pynguin-0.46.0/tests/utils/stats/test_searchstatistics.py +0 -193
- pynguin-0.46.0/tests/utils/test_controlflowdistance.py +0 -127
- pynguin-0.46.0/tests/utils/test_execution_recorder.py +0 -78
- pynguin-0.46.0/tests/utils/test_namingscope.py +0 -134
- pynguin-0.46.0/tests/utils/test_report.py +0 -546
- pynguin-0.46.0/tests/utils/test_string_subtype_integration.py +0 -52
- pynguin-0.46.0/tests/utils/test_typeevalpy_integration.py +0 -232
- pynguin-0.46.0/tests/utils/test_typeevalpy_json_schema.py +0 -437
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSE.rst +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/Apache-2.0.txt +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/BSD-2-Clause.txt +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/CC-BY-4.0.txt +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/CC0-1.0.txt +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/MIT.txt +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/__main__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/constants.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/modulecomplexity.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/string_subtype_inference.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/string_subtypes.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/syntaxtree.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/typesystem.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/arithmetic.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/base.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/decorator.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/loop.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/strategies.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/transformer.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/controlflow.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/machinery.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/common.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_10.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_11.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_12.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_13.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_14.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/client.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/master.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/worker.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/coverage-template.html +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/camel_case.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/colour.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/csv.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/delimited.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/email.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/camel_case.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/colour.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/csv.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/delimited.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/email.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/ipv4.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/standard_date.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/unix_path.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/xml.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/ipv4.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/numeric.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/standard_date.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/unix_path.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/xml.fan +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/testcase/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/testcase/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/ast_util.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/atomicinteger.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/collection_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/exceptions.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/fandango_faker_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/fs_isolation.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/generic/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/generic/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/generic/genericaccessibleobject.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/llm.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/logging_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/mirror.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/mutation_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/orderedset.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_parsing_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_testing_resources.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/mlparameter.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/np_rng.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/randomness.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/statisticsbackend.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/type_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/typeevalpy_json_schema.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_constants.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_modulecomplexity.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_staticconstantseeding.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_string_subtypes.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_syntaxtree.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_typesystem_string_subtypes.py +0 -0
- {pynguin-0.46.0/tests/assertion/mutation_analysis/operators → pynguin-0.46.0.dev0/tests/analysis}/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/AGENTS.md +0 -0
- {pynguin-0.46.0/tests/large_language_model/prompts → pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/operators}/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_arithmetic.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_decorator.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_loop.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/test_strategies.py +0 -0
- {pynguin-0.46.0/tests/resources → pynguin-0.46.0.dev0/tests/evolution}/__init__.py +0 -0
- {pynguin-0.46.0/tests/resources/typeevalpy → pynguin-0.46.0.dev0/tests/execution}/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/accessibles/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/accessibles/accessible.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/nestedbranches.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/nobranches.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/simplenesting.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/singlebranches.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/twomethodsinglebranches.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/c/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/c/my_ctypes.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/abstract.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/alias_module.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_class_gen.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_class_method.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_func.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_gen.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/attributes.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/blacklist.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/blacklist_transitive.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/comments.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/complex_dependencies.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/complex_dependency.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/conditional_import.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/dependency.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_bottom.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_left.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_right.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_top.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/enums.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/import_dependency.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/inheritance.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/lambda.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/nested_functions.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/no_any_annotations.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/no_dependencies.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/overridden_inherited_methods.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/simple_dependencies.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/typing_parameters.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/uses_async_dependency.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/partly_crashing.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/seg_fault.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/duckmock/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/duckmock/complex.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/errors/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/errors/import_error.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/assertions.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/basket.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/calculator.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/calculator_simple.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/collections.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/constructors.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/difficult.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/dummies.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/dynamosa_example.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/enums.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/exceptions.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/flaky.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/impossible.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/inheritance.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/loop.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/module_alias.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/monkey.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/nested.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/objects.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/private_methods.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/queue.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/simple.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/triangle.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_inference.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/geometry.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/invoice.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/large_test_cluster.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/mixed.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/string_subtype.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/unasserted_exceptions.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/grammar/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/grammar/parameters.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/AGENTS.md +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/comparison.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_branches.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_classes.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_functions.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_lines.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/excluded_blocks.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/inherited.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/mixed.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/simple.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/artificial_none.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/emptyfile.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/exception.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/list.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/plus.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/setter_getter.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/exception.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/expected.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/mutation.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/timeout.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/samples.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/whileloop.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/yield_fun.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/argparse_sys_exit.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/custom_error.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/not_main.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/dynamicseeding/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/dynamicseeding/dynamicseedingdummies.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/dummycontainer.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/assertseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/classseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collfuncseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/nestedseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notknowncall_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notprimseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/primitiveseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/triangleseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongassignseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongfunctionnameseed_test_.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/dummy.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/empty.so +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/attribute_dependencies.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/closure.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/generator.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/immutable_attribute_dependency.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/import_star_def.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/import_star_main.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/partial_cover_dependency.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/simple_call.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/simple_call_arg.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/test.conf +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/test.conf.license +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/tests/typeinference/test_stubstrategy.pyi +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/guess_params.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/return_types.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/union_type.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/outside.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/subtyping.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/symbols.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/AGENTS.md +0 -0
- {pynguin-0.46.0/tests/ga → pynguin-0.46.0.dev0/tests/instrumentation}/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_ast_info.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_cfg.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_controldependencegraph.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_programgraph.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_version.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/master_worker/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_master.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_worker.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy_gt.json +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy_gt.json.license +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/test___main__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/testcase/AGENTS.md +0 -0
- {pynguin-0.46.0/tests/ga/operators → pynguin-0.46.0.dev0/tests/testcase}/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/testutils.py +0 -0
- {pynguin-0.46.0/tests/ga/operators/crossover → pynguin-0.46.0.dev0/tests/utils}/__init__.py +0 -0
- {pynguin-0.46.0/tests/ga/operators/ranking → pynguin-0.46.0.dev0/tests/utils/generic}/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/generic/test_genericaccessibleobject.py +0 -0
- {pynguin-0.46.0/tests/ga/operators/selection → pynguin-0.46.0.dev0/tests/utils/pynguinml}/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_ml_parsing_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_mlparameter.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_np_rng.py +0 -0
- {pynguin-0.46.0/tests/ga/stoppingconditions → pynguin-0.46.0.dev0/tests/utils/stats}/__init__.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_runtimevariable.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_statistics.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_statisticsbackend.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_atomicinteger.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_collection_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_exceptions.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_fandango_faker_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_fs_isolation.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_llm.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_mirror.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_mutation_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_orderedset.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_randomness.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_type_utils.py +0 -0
- {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pynguin
|
|
3
|
-
Version: 0.46.0
|
|
3
|
+
Version: 0.46.0.dev0
|
|
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
|
|
@@ -82,7 +82,7 @@ is a tool that allows developers to generate unit tests automatically.
|
|
|
82
82
|
Testing software is often considered to be a tedious task.
|
|
83
83
|
Thus, automated generation techniques have been proposed and mature tools exist—for
|
|
84
84
|
statically typed languages, such as Java.
|
|
85
|
-
There is, however, no fully
|
|
85
|
+
There is, however, no fully-automated tool available that produces unit tests for
|
|
86
86
|
general-purpose programs in a dynamically typed language.
|
|
87
87
|
Pynguin is, to the best of our knowledge, the first tool that fills this gap
|
|
88
88
|
and allows the automated generation of unit tests for Python programs.
|
|
@@ -129,7 +129,7 @@ please report your experiences in using Pynguin to us.
|
|
|
129
129
|
## Prerequisites
|
|
130
130
|
|
|
131
131
|
Before you begin, ensure you have met the following requirements:
|
|
132
|
-
- You have installed Python 3.10 (the support for 3.11, 3.12, 3.13
|
|
132
|
+
- You have installed Python 3.10 (the support for 3.11, 3.12, 3.13 and 3.14 is experimental).
|
|
133
133
|
|
|
134
134
|
**Attention:** Pynguin now requires at least Python 3.10! Older versions are no longer
|
|
135
135
|
supported!
|
|
@@ -190,16 +190,13 @@ Pynguin is developed at the
|
|
|
190
190
|
[Chair of Software Engineering II](https://www.fim.uni-passau.de/lehrstuhl-fuer-software-engineering-ii/)
|
|
191
191
|
of the [University of Passau](https://www.uni-passau.de).
|
|
192
192
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
Former Maintainer: [Stephan Lukasczyk](https://codeberg.org/stephanlukasczyk)
|
|
193
|
+
Maintainers: [Stephan Lukasczyk](https://github.com/stephanlukasczyk), [Lukas Krodinger](https://github.com/LuKrO2011)
|
|
196
194
|
|
|
197
195
|
Contributors:
|
|
198
196
|
- [Lukas Vögl](https://github.com/lvoegl)
|
|
199
197
|
- [Louis Leppelmann](https://github.com/Tudeldu)
|
|
200
198
|
- [Alexander Wüst](https://github.com/Ravaqor)
|
|
201
199
|
- [Altin Hajdari](https://github.com/AltinHajdari)
|
|
202
|
-
- [Ahmed Abidi](https://github.com/AhmedHedi0)
|
|
203
200
|
- [Abdelillah Aissani](https://github.com/Abassion)
|
|
204
201
|
- [Juan Altmayer Pizzorno](https://github.com/jaltmayerpizzorno)
|
|
205
202
|
- [Lucas Berg](https://github.com/BergLucas)
|
|
@@ -218,9 +215,9 @@ Contributors:
|
|
|
218
215
|
|
|
219
216
|
### Development using PyCharm.
|
|
220
217
|
|
|
221
|
-
If you want to use the PyCharm IDE
|
|
218
|
+
If you want to use the PyCharm IDE you have to set up a few things:
|
|
222
219
|
1. Import `pynguin` into PyCharm.
|
|
223
|
-
2. Let PyCharm configure a virtual environment using `poetry`.
|
|
220
|
+
2. Let PyCharm configure configure a virtual environment using `poetry`.
|
|
224
221
|
3. Set the default test runner to `pytest`
|
|
225
222
|
4. Set the DocString format to `Google`
|
|
226
223
|
|
|
@@ -229,7 +226,7 @@ If you want to use the PyCharm IDE, you have to set up a few things:
|
|
|
229
226
|
|
|
230
227
|
This project is licensed under the terms of the [MIT License](LICENSE.rst).
|
|
231
228
|
Pynguin was using the GNU Lesser General Public License (LGPL) until version 0.29.0,
|
|
232
|
-
its
|
|
229
|
+
its licence was changed with version 0.30.0.
|
|
233
230
|
|
|
234
231
|
## Star History
|
|
235
232
|
|
|
@@ -18,7 +18,7 @@ is a tool that allows developers to generate unit tests automatically.
|
|
|
18
18
|
Testing software is often considered to be a tedious task.
|
|
19
19
|
Thus, automated generation techniques have been proposed and mature tools exist—for
|
|
20
20
|
statically typed languages, such as Java.
|
|
21
|
-
There is, however, no fully
|
|
21
|
+
There is, however, no fully-automated tool available that produces unit tests for
|
|
22
22
|
general-purpose programs in a dynamically typed language.
|
|
23
23
|
Pynguin is, to the best of our knowledge, the first tool that fills this gap
|
|
24
24
|
and allows the automated generation of unit tests for Python programs.
|
|
@@ -65,7 +65,7 @@ please report your experiences in using Pynguin to us.
|
|
|
65
65
|
## Prerequisites
|
|
66
66
|
|
|
67
67
|
Before you begin, ensure you have met the following requirements:
|
|
68
|
-
- You have installed Python 3.10 (the support for 3.11, 3.12, 3.13
|
|
68
|
+
- You have installed Python 3.10 (the support for 3.11, 3.12, 3.13 and 3.14 is experimental).
|
|
69
69
|
|
|
70
70
|
**Attention:** Pynguin now requires at least Python 3.10! Older versions are no longer
|
|
71
71
|
supported!
|
|
@@ -126,16 +126,13 @@ Pynguin is developed at the
|
|
|
126
126
|
[Chair of Software Engineering II](https://www.fim.uni-passau.de/lehrstuhl-fuer-software-engineering-ii/)
|
|
127
127
|
of the [University of Passau](https://www.uni-passau.de).
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
Former Maintainer: [Stephan Lukasczyk](https://codeberg.org/stephanlukasczyk)
|
|
129
|
+
Maintainers: [Stephan Lukasczyk](https://github.com/stephanlukasczyk), [Lukas Krodinger](https://github.com/LuKrO2011)
|
|
132
130
|
|
|
133
131
|
Contributors:
|
|
134
132
|
- [Lukas Vögl](https://github.com/lvoegl)
|
|
135
133
|
- [Louis Leppelmann](https://github.com/Tudeldu)
|
|
136
134
|
- [Alexander Wüst](https://github.com/Ravaqor)
|
|
137
135
|
- [Altin Hajdari](https://github.com/AltinHajdari)
|
|
138
|
-
- [Ahmed Abidi](https://github.com/AhmedHedi0)
|
|
139
136
|
- [Abdelillah Aissani](https://github.com/Abassion)
|
|
140
137
|
- [Juan Altmayer Pizzorno](https://github.com/jaltmayerpizzorno)
|
|
141
138
|
- [Lucas Berg](https://github.com/BergLucas)
|
|
@@ -154,9 +151,9 @@ Contributors:
|
|
|
154
151
|
|
|
155
152
|
### Development using PyCharm.
|
|
156
153
|
|
|
157
|
-
If you want to use the PyCharm IDE
|
|
154
|
+
If you want to use the PyCharm IDE you have to set up a few things:
|
|
158
155
|
1. Import `pynguin` into PyCharm.
|
|
159
|
-
2. Let PyCharm configure a virtual environment using `poetry`.
|
|
156
|
+
2. Let PyCharm configure configure a virtual environment using `poetry`.
|
|
160
157
|
3. Set the default test runner to `pytest`
|
|
161
158
|
4. Set the DocString format to `Google`
|
|
162
159
|
|
|
@@ -165,7 +162,7 @@ If you want to use the PyCharm IDE, you have to set up a few things:
|
|
|
165
162
|
|
|
166
163
|
This project is licensed under the terms of the [MIT License](LICENSE.rst).
|
|
167
164
|
Pynguin was using the GNU Lesser General Public License (LGPL) until version 0.29.0,
|
|
168
|
-
its
|
|
165
|
+
its licence was changed with version 0.30.0.
|
|
169
166
|
|
|
170
167
|
## Star History
|
|
171
168
|
|
|
@@ -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."""
|
|
@@ -19,7 +19,6 @@ import itertools
|
|
|
19
19
|
import json
|
|
20
20
|
import logging
|
|
21
21
|
import queue
|
|
22
|
-
import re
|
|
23
22
|
import types
|
|
24
23
|
import typing
|
|
25
24
|
from collections import defaultdict
|
|
@@ -54,7 +53,12 @@ from pynguin.utils.llm import LLMProvider
|
|
|
54
53
|
if config.configuration.pynguinml.ml_testing_enabled or typing.TYPE_CHECKING:
|
|
55
54
|
import pynguin.utils.pynguinml.ml_testing_resources as tr
|
|
56
55
|
|
|
57
|
-
from pynguin.analyses.generator import
|
|
56
|
+
from pynguin.analyses.generator import (
|
|
57
|
+
GeneratorProvider,
|
|
58
|
+
RandomGeneratorProvider,
|
|
59
|
+
RandomSelection,
|
|
60
|
+
RankSelection,
|
|
61
|
+
)
|
|
58
62
|
from pynguin.analyses.modulecomplexity import mccabe_complexity
|
|
59
63
|
from pynguin.analyses.syntaxtree import (
|
|
60
64
|
FunctionDescription,
|
|
@@ -76,12 +80,12 @@ from pynguin.analyses.typesystem import (
|
|
|
76
80
|
UnionType,
|
|
77
81
|
Unsupported,
|
|
78
82
|
)
|
|
79
|
-
from pynguin.configuration import
|
|
80
|
-
from pynguin.ga.operators.selection import RandomSelection, RankSelection
|
|
83
|
+
from pynguin.configuration import TypeInferenceStrategy
|
|
81
84
|
from pynguin.utils import randomness
|
|
82
85
|
from pynguin.utils.exceptions import (
|
|
83
86
|
ConstraintValidationError,
|
|
84
87
|
ConstructionFailedException,
|
|
88
|
+
CoroutineFoundException,
|
|
85
89
|
)
|
|
86
90
|
from pynguin.utils.generic.genericaccessibleobject import (
|
|
87
91
|
GenericAccessibleObject,
|
|
@@ -101,9 +105,8 @@ if config.configuration.pynguinml.ml_testing_enabled or typing.TYPE_CHECKING:
|
|
|
101
105
|
|
|
102
106
|
if typing.TYPE_CHECKING:
|
|
103
107
|
from collections.abc import Callable, Sequence
|
|
108
|
+
from typing import Any
|
|
104
109
|
|
|
105
|
-
import pynguin.ga.algorithms.archive as arch
|
|
106
|
-
import pynguin.ga.computations as ff
|
|
107
110
|
from pynguin.instrumentation.tracer import SubjectProperties
|
|
108
111
|
from pynguin.utils.pynguinml.mlparameter import MLParameter
|
|
109
112
|
|
|
@@ -205,27 +208,6 @@ MODULE_BLACKLIST = frozenset((
|
|
|
205
208
|
METHOD_BLACKLIST = frozenset(("time.sleep",))
|
|
206
209
|
|
|
207
210
|
|
|
208
|
-
def _is_function(element: Any) -> bool:
|
|
209
|
-
"""Whether the element is a module-level function we can analyse.
|
|
210
|
-
|
|
211
|
-
Besides plain functions this also accepts callables wrapped by
|
|
212
|
-
``functools.cache`` / ``functools.lru_cache`` (a
|
|
213
|
-
``functools._lru_cache_wrapper``), for which ``inspect.isfunction`` returns
|
|
214
|
-
``False``. Without this a cache-decorated public function would be silently
|
|
215
|
-
dropped from the test cluster.
|
|
216
|
-
|
|
217
|
-
Args:
|
|
218
|
-
element: The element to check
|
|
219
|
-
|
|
220
|
-
Returns:
|
|
221
|
-
Is the element a (possibly cache-wrapped) function?
|
|
222
|
-
"""
|
|
223
|
-
return inspect.isfunction(element) or (
|
|
224
|
-
isinstance(element, functools._lru_cache_wrapper) # noqa: SLF001
|
|
225
|
-
and inspect.isfunction(inspect.unwrap(element))
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
|
|
229
211
|
def _is_blacklisted(element: Any) -> bool:
|
|
230
212
|
"""Checks if the given element belongs to the blacklist.
|
|
231
213
|
|
|
@@ -248,21 +230,19 @@ def _is_blacklisted(element: Any) -> bool:
|
|
|
248
230
|
# Allow some builtin types
|
|
249
231
|
return False
|
|
250
232
|
return element.__module__ in module_blacklist
|
|
251
|
-
if
|
|
233
|
+
if inspect.isfunction(element):
|
|
252
234
|
# Some modules can be run standalone using a main function or provide a small
|
|
253
235
|
# set of tests ('test'). We don't want to include those functions.
|
|
254
236
|
# Importing certain modules such as inspect, that use or import C-functions can
|
|
255
237
|
# lead to __module__ being None. We want to exclude these functions as well.
|
|
256
|
-
# Unwrap so cache-wrapped functions are checked against their real name/module.
|
|
257
|
-
func = inspect.unwrap(element)
|
|
258
238
|
return (
|
|
259
|
-
|
|
260
|
-
or
|
|
261
|
-
or
|
|
239
|
+
element.__module__ is None
|
|
240
|
+
or element.__module__ in module_blacklist
|
|
241
|
+
or element.__qualname__.startswith((
|
|
262
242
|
"main",
|
|
263
243
|
"test",
|
|
264
244
|
))
|
|
265
|
-
or f"{
|
|
245
|
+
or f"{element.__module__}.{element.__qualname__}" in method_blacklist
|
|
266
246
|
)
|
|
267
247
|
except Exception: # noqa: BLE001
|
|
268
248
|
LOGGER.warning(
|
|
@@ -1170,9 +1150,9 @@ class FilteredModuleTestCluster(TestCluster): # noqa: PLR0904
|
|
|
1170
1150
|
def __init__( # noqa: D107
|
|
1171
1151
|
self,
|
|
1172
1152
|
delegate: ModuleTestCluster,
|
|
1173
|
-
archive:
|
|
1153
|
+
archive: Any,
|
|
1174
1154
|
subject_properties: SubjectProperties,
|
|
1175
|
-
targets: OrderedSet
|
|
1155
|
+
targets: OrderedSet,
|
|
1176
1156
|
) -> None:
|
|
1177
1157
|
self.__delegate = delegate
|
|
1178
1158
|
self.__subject_properties = subject_properties
|
|
@@ -1204,7 +1184,7 @@ class FilteredModuleTestCluster(TestCluster): # noqa: PLR0904
|
|
|
1204
1184
|
archive.add_on_target_covered(self.on_target_covered)
|
|
1205
1185
|
|
|
1206
1186
|
def __get_accessible_object_for_target(
|
|
1207
|
-
self, target:
|
|
1187
|
+
self, target: Any
|
|
1208
1188
|
) -> GenericCallableAccessibleObject | None:
|
|
1209
1189
|
code_object_id: int | None = target.code_object_id
|
|
1210
1190
|
while code_object_id is not None:
|
|
@@ -1217,7 +1197,7 @@ class FilteredModuleTestCluster(TestCluster): # noqa: PLR0904
|
|
|
1217
1197
|
].parent_code_object_id
|
|
1218
1198
|
return None
|
|
1219
1199
|
|
|
1220
|
-
def on_target_covered(self, target:
|
|
1200
|
+
def on_target_covered(self, target: Any) -> None:
|
|
1221
1201
|
"""A callback function to get informed by an archive when a target is covered.
|
|
1222
1202
|
|
|
1223
1203
|
Args:
|
|
@@ -1313,51 +1293,6 @@ def __is_private(method_name: str) -> bool:
|
|
|
1313
1293
|
return method_name.startswith("__") and not method_name.endswith("__")
|
|
1314
1294
|
|
|
1315
1295
|
|
|
1316
|
-
__NAME_MANGLED_PATTERN = re.compile(r"^_[A-Za-z][A-Za-z0-9]*__\w+$")
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
def __is_name_mangled(name: str) -> bool:
|
|
1320
|
-
"""Checks whether ``name`` looks like a name-mangled private attribute.
|
|
1321
|
-
|
|
1322
|
-
Python mangles a class-private name ``__attr`` defined in class ``Foo`` to
|
|
1323
|
-
``_Foo__attr``. Since the leading underscores of the class name are
|
|
1324
|
-
stripped during mangling, the mangled name always starts with a single
|
|
1325
|
-
underscore, followed by an identifier not starting with an underscore,
|
|
1326
|
-
followed by a double underscore and the (non-dunder) original name.
|
|
1327
|
-
|
|
1328
|
-
Args:
|
|
1329
|
-
name: The name to check.
|
|
1330
|
-
|
|
1331
|
-
Returns:
|
|
1332
|
-
True, if the name looks like a name-mangled private attribute.
|
|
1333
|
-
"""
|
|
1334
|
-
return bool(__NAME_MANGLED_PATTERN.fullmatch(name)) and not name.endswith("__")
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
def __should_skip_by_visibility(name: str, *, add_to_test: bool) -> bool:
|
|
1338
|
-
"""Determines whether an element should be skipped based on its visibility.
|
|
1339
|
-
|
|
1340
|
-
Args:
|
|
1341
|
-
name: The (unqualified) name of the element.
|
|
1342
|
-
add_to_test: Whether the element belongs to the module under test.
|
|
1343
|
-
|
|
1344
|
-
Returns:
|
|
1345
|
-
True, if the element should be skipped from analysis.
|
|
1346
|
-
"""
|
|
1347
|
-
if not add_to_test:
|
|
1348
|
-
# The relaxed visibility handling only applies to the module under test;
|
|
1349
|
-
# non-public elements of dependency modules are always excluded.
|
|
1350
|
-
return __is_private(name) or __is_protected(name)
|
|
1351
|
-
|
|
1352
|
-
match config.configuration.element_visibility:
|
|
1353
|
-
case ElementVisibility.ALL:
|
|
1354
|
-
return False
|
|
1355
|
-
case ElementVisibility.PROTECTED:
|
|
1356
|
-
return __is_private(name) or __is_name_mangled(name)
|
|
1357
|
-
case _:
|
|
1358
|
-
return __is_private(name) or __is_protected(name)
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
1296
|
def __is_method_defined_in_class(class_: type | types.UnionType, method: object) -> bool:
|
|
1362
1297
|
return class_ == get_class_that_defined_method(method)
|
|
1363
1298
|
|
|
@@ -1425,20 +1360,14 @@ def __analyse_function(
|
|
|
1425
1360
|
test_cluster: ModuleTestCluster,
|
|
1426
1361
|
add_to_test: bool,
|
|
1427
1362
|
) -> None:
|
|
1428
|
-
if
|
|
1363
|
+
if __is_private(func_name) or __is_protected(func_name):
|
|
1429
1364
|
LOGGER.debug("Skipping function %s from analysis", func_name)
|
|
1430
1365
|
return
|
|
1431
1366
|
if inspect.iscoroutinefunction(func) or inspect.isasyncgenfunction(func):
|
|
1432
|
-
# Pynguin cannot execute coroutines (see issue #62 / MR !59), so we skip
|
|
1433
|
-
# them instead of aborting the whole module and still test its
|
|
1434
|
-
# synchronous members.
|
|
1435
1367
|
if add_to_test:
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
)
|
|
1440
|
-
else:
|
|
1441
|
-
LOGGER.debug("Skipping coroutine %s outside of SUT", func_name)
|
|
1368
|
+
raise CoroutineFoundException("Found coroutine in SUT: %s", func_name)
|
|
1369
|
+
# Coroutine outside the SUT are not problematic, just exclude them.
|
|
1370
|
+
LOGGER.debug("Skipping coroutine %s outside of SUT", func_name)
|
|
1442
1371
|
return
|
|
1443
1372
|
|
|
1444
1373
|
LOGGER.debug("Analysing function %s", func_name)
|
|
@@ -1631,23 +1560,18 @@ def __analyse_method(
|
|
|
1631
1560
|
) -> None:
|
|
1632
1561
|
if (
|
|
1633
1562
|
__is_annotate(method_name)
|
|
1634
|
-
or
|
|
1563
|
+
or __is_private(method_name)
|
|
1564
|
+
or __is_protected(method_name)
|
|
1635
1565
|
or __is_constructor(method_name)
|
|
1636
1566
|
or not __is_method_defined_in_class(type_info.raw_type, method)
|
|
1637
1567
|
):
|
|
1638
1568
|
LOGGER.debug("Skipping method %s from analysis", method_name)
|
|
1639
1569
|
return
|
|
1640
1570
|
if inspect.iscoroutinefunction(method) or inspect.isasyncgenfunction(method):
|
|
1641
|
-
# Pynguin cannot execute coroutines (see issue #62 / MR !59), so we skip
|
|
1642
|
-
# them instead of aborting the whole module and still test its
|
|
1643
|
-
# synchronous members.
|
|
1644
1571
|
if add_to_test:
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
)
|
|
1649
|
-
else:
|
|
1650
|
-
LOGGER.debug("Skipping coroutine %s outside of SUT", method_name)
|
|
1572
|
+
raise CoroutineFoundException("Found coroutine in SUT: %s", method_name)
|
|
1573
|
+
# Coroutine outside the SUT are not problematic, just exclude them.
|
|
1574
|
+
LOGGER.debug("Skipping coroutine %s outside of SUT", method_name)
|
|
1651
1575
|
return
|
|
1652
1576
|
|
|
1653
1577
|
LOGGER.debug("Analysing method %s.%s", type_info.full_name, method_name)
|
|
@@ -1861,7 +1785,7 @@ def __analyse_included_functions(
|
|
|
1861
1785
|
seen_functions: set,
|
|
1862
1786
|
) -> None:
|
|
1863
1787
|
for current in filter(
|
|
1864
|
-
lambda x:
|
|
1788
|
+
lambda x: inspect.isfunction(x) and not _is_blacklisted(x),
|
|
1865
1789
|
vars(module).values(),
|
|
1866
1790
|
):
|
|
1867
1791
|
if current in seen_functions:
|
|
@@ -1898,12 +1822,8 @@ def __check_c_modules(
|
|
|
1898
1822
|
non_whitelisted_modules.add(module.__name__)
|
|
1899
1823
|
return non_whitelisted_modules
|
|
1900
1824
|
|
|
1901
|
-
# If the module is Python, inspect its members too
|
|
1902
|
-
|
|
1903
|
-
# globals (e.g. a PEP 562 module-level ``__getattr__`` that lazily caches
|
|
1904
|
-
# results), which would otherwise raise "dictionary changed size during
|
|
1905
|
-
# iteration" while iterating the live ``__dict__``.
|
|
1906
|
-
for element in list(vars(module).values()):
|
|
1825
|
+
# If the module is Python, inspect its members too:
|
|
1826
|
+
for element in vars(module).values():
|
|
1907
1827
|
if inspect.isfunction(element) or inspect.isclass(element):
|
|
1908
1828
|
try:
|
|
1909
1829
|
inspect.getsource(element)
|
|
@@ -2018,48 +1938,33 @@ def _load_typeevalpy_data() -> ParsedTypeEvalPyData | None:
|
|
|
2018
1938
|
return None
|
|
2019
1939
|
|
|
2020
1940
|
|
|
2021
|
-
def
|
|
2022
|
-
|
|
2023
|
-
|
|
1941
|
+
def _collect_public_callables(module: ModuleType) -> Sequence[Callable[..., Any]]:
|
|
1942
|
+
"""Collects a list of all public accessibles in a module."""
|
|
1943
|
+
callables = []
|
|
1944
|
+
seen = set()
|
|
1945
|
+
|
|
1946
|
+
def add(obj):
|
|
1947
|
+
if id(obj) not in seen:
|
|
1948
|
+
callables.append(obj)
|
|
1949
|
+
seen.add(id(obj))
|
|
1950
|
+
|
|
2024
1951
|
for name, obj in vars(module).items():
|
|
2025
|
-
if name
|
|
1952
|
+
if name.startswith("_") and name != "__init__":
|
|
2026
1953
|
continue
|
|
2027
1954
|
if inspect.isfunction(obj) and obj.__module__ == module.__name__:
|
|
2028
1955
|
add(obj)
|
|
2029
1956
|
|
|
2030
|
-
|
|
2031
|
-
def __collect_class_methods(module: ModuleType, add: Callable[[Callable[..., Any]], None]) -> None:
|
|
2032
1957
|
for cls_name, cls in vars(module).items():
|
|
2033
|
-
if not inspect.isclass(cls) or cls.__module__ != module.__name__:
|
|
2034
|
-
continue
|
|
2035
|
-
# The private-class filter is only applied for PUBLIC visibility; other
|
|
2036
|
-
# visibility levels never filter classes by name (matching the main
|
|
2037
|
-
# analysis, which does not filter classes based on their name).
|
|
2038
1958
|
if (
|
|
2039
|
-
|
|
2040
|
-
|
|
1959
|
+
cls_name.startswith("_")
|
|
1960
|
+
or not inspect.isclass(cls)
|
|
1961
|
+
or cls.__module__ != module.__name__
|
|
2041
1962
|
):
|
|
2042
1963
|
continue
|
|
2043
1964
|
for meth_name, member in inspect.getmembers(cls, predicate=inspect.isfunction):
|
|
2044
|
-
if
|
|
2045
|
-
continue
|
|
2046
|
-
if not __should_skip_by_visibility(meth_name, add_to_test=True):
|
|
1965
|
+
if not meth_name.startswith("_"):
|
|
2047
1966
|
add(member)
|
|
2048
1967
|
|
|
2049
|
-
|
|
2050
|
-
def _collect_public_callables(module: ModuleType) -> Sequence[Callable[..., Any]]:
|
|
2051
|
-
"""Collects a list of all public accessibles in a module."""
|
|
2052
|
-
callables: list[Callable[..., Any]] = []
|
|
2053
|
-
seen: set[int] = set()
|
|
2054
|
-
|
|
2055
|
-
def add(obj: Callable[..., Any]) -> None:
|
|
2056
|
-
if id(obj) not in seen:
|
|
2057
|
-
callables.append(obj)
|
|
2058
|
-
seen.add(id(obj))
|
|
2059
|
-
|
|
2060
|
-
__collect_module_level_functions(module, add)
|
|
2061
|
-
__collect_class_methods(module, add)
|
|
2062
|
-
|
|
2063
1968
|
return callables
|
|
2064
1969
|
|
|
2065
1970
|
|
|
@@ -35,16 +35,22 @@ except ImportError:
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
import pynguin.configuration as config
|
|
38
|
-
from pynguin.large_language_model.parsing.type_str_parser import TypeStrParser
|
|
39
|
-
from pynguin.large_language_model.prompts.type_and_subtype_inference_prompt import (
|
|
40
|
-
TypeAndSubtypeInferencePrompt,
|
|
41
|
-
get_type_and_subtype_inference_system_prompt,
|
|
42
|
-
)
|
|
43
|
-
from pynguin.large_language_model.prompts.typeinferenceprompt import (
|
|
44
|
-
TypeInferencePrompt,
|
|
45
|
-
get_inference_system_prompt,
|
|
46
|
-
)
|
|
47
38
|
from pynguin.utils.llm import LLMProvider
|
|
39
|
+
|
|
40
|
+
try:
|
|
41
|
+
from pynguin.large_language_model.parsing.type_str_parser import TypeStrParser
|
|
42
|
+
from pynguin.large_language_model.prompts.type_and_subtype_inference_prompt import (
|
|
43
|
+
TypeAndSubtypeInferencePrompt,
|
|
44
|
+
get_type_and_subtype_inference_system_prompt,
|
|
45
|
+
)
|
|
46
|
+
from pynguin.large_language_model.prompts.typeinferenceprompt import (
|
|
47
|
+
TypeInferencePrompt,
|
|
48
|
+
get_inference_system_prompt,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
_LLM_PROMPTS_AVAILABLE = True
|
|
52
|
+
except ImportError:
|
|
53
|
+
_LLM_PROMPTS_AVAILABLE = False
|
|
48
54
|
from pynguin.utils.orderedset import OrderedSet
|
|
49
55
|
|
|
50
56
|
if typing.TYPE_CHECKING:
|
|
@@ -110,6 +116,8 @@ class LLMInference(InferenceProvider):
|
|
|
110
116
|
])
|
|
111
117
|
match provider:
|
|
112
118
|
case LLMProvider.OPENAI:
|
|
119
|
+
if not _LLM_PROMPTS_AVAILABLE:
|
|
120
|
+
raise RuntimeError("LLM prompts not available. install 'openai' extra.")
|
|
113
121
|
self._model = OpenAI(
|
|
114
122
|
api_key=SecretStr(config.configuration.large_language_model.api_key),
|
|
115
123
|
system_prompt=get_inference_system_prompt(),
|
|
@@ -174,6 +182,9 @@ class LLMInference(InferenceProvider):
|
|
|
174
182
|
def _build_prompt_map(
|
|
175
183
|
self, funcs: Sequence[Callable[..., Any]]
|
|
176
184
|
) -> OrderedDict[Callable[..., Any], str]:
|
|
185
|
+
if not _LLM_PROMPTS_AVAILABLE:
|
|
186
|
+
_LOGGER.error("LLM prompts not available. Skipping prompt building.")
|
|
187
|
+
return OrderedDict()
|
|
177
188
|
prompts: OrderedDict[Callable[..., Any], str] = OrderedDict()
|
|
178
189
|
for func in funcs:
|
|
179
190
|
try:
|
|
@@ -363,6 +374,8 @@ class LLMInferenceWithSubtypes(LLMInference):
|
|
|
363
374
|
])
|
|
364
375
|
match provider:
|
|
365
376
|
case LLMProvider.OPENAI:
|
|
377
|
+
if not _LLM_PROMPTS_AVAILABLE:
|
|
378
|
+
raise RuntimeError("LLM prompts not available. install 'openai' extra.")
|
|
366
379
|
self._model = OpenAI(
|
|
367
380
|
api_key=SecretStr(config.configuration.large_language_model.api_key),
|
|
368
381
|
system_prompt=get_type_and_subtype_inference_system_prompt(),
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# This file is part of Pynguin.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-FileCopyrightText: 2019–2026 Pynguin Contributors
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
"""Public API for the pynguin module analysis subsystem."""
|
|
7
|
+
|
|
8
|
+
from pynguin.analysis.models import (
|
|
9
|
+
AttributeInfo,
|
|
10
|
+
ClassInfo,
|
|
11
|
+
FunctionInfo,
|
|
12
|
+
ImportInfo,
|
|
13
|
+
ModuleInfo,
|
|
14
|
+
ParameterInfo,
|
|
15
|
+
)
|
|
16
|
+
from pynguin.analysis.module_analyzer import ModuleAnalyzer
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"AttributeInfo",
|
|
20
|
+
"ClassInfo",
|
|
21
|
+
"FunctionInfo",
|
|
22
|
+
"ImportInfo",
|
|
23
|
+
"ModuleAnalyzer",
|
|
24
|
+
"ModuleInfo",
|
|
25
|
+
"ParameterInfo",
|
|
26
|
+
]
|