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.
Files changed (667) hide show
  1. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/PKG-INFO +7 -10
  2. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/README.md +6 -9
  3. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/pyproject.toml +1 -1
  4. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/__version__.py +1 -1
  5. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/generator.py +64 -2
  6. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/module.py +45 -140
  7. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/type_inference.py +22 -9
  8. pynguin-0.46.0.dev0/src/pynguin/analysis/__init__.py +26 -0
  9. pynguin-0.46.0.dev0/src/pynguin/analysis/models.py +105 -0
  10. pynguin-0.46.0.dev0/src/pynguin/analysis/module_analyzer.py +525 -0
  11. pynguin-0.46.0.dev0/src/pynguin/analysis/type_utils.py +101 -0
  12. pynguin-0.46.0.dev0/src/pynguin/assertion/assertion.py +304 -0
  13. pynguin-0.46.0.dev0/src/pynguin/assertion/assertion_to_cst.py +243 -0
  14. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/assertion_trace.py +13 -58
  15. pynguin-0.46.0.dev0/src/pynguin/assertion/assertiongenerator.py +140 -0
  16. pynguin-0.46.0.dev0/src/pynguin/assertion/assertiontraceobserver.py +164 -0
  17. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/controller.py +1 -5
  18. pynguin-0.46.0.dev0/src/pynguin/assertion/mutation_analysis/mutators.py +121 -0
  19. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/__init__.py +0 -16
  20. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/exception.py +1 -43
  21. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/inheritance.py +4 -8
  22. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/logical.py +0 -33
  23. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/misc.py +3 -200
  24. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/cli.py +20 -0
  25. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/configuration.py +0 -74
  26. {pynguin-0.46.0/src/pynguin/ga/algorithms → pynguin-0.46.0.dev0/src/pynguin/evolution}/__init__.py +1 -1
  27. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/__init__.py +28 -0
  28. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/archive.py +142 -0
  29. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/base.py +111 -0
  30. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/codamosa.py +58 -0
  31. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/dynamosa.py +459 -0
  32. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/mio.py +172 -0
  33. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/observer.py +83 -0
  34. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/random.py +139 -0
  35. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/stopping_conditions.py +170 -0
  36. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/wholesuite.py +194 -0
  37. pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/__init__.py +13 -0
  38. pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/base.py +35 -0
  39. pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/individual.py +50 -0
  40. pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/suite.py +138 -0
  41. pynguin-0.46.0.dev0/src/pynguin/evolution/factory.py +78 -0
  42. pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/__init__.py +25 -0
  43. pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/base.py +65 -0
  44. pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/coverage.py +245 -0
  45. pynguin-0.46.0.dev0/src/pynguin/evolution/minimization.py +289 -0
  46. pynguin-0.46.0.dev0/src/pynguin/evolution/operators/__init__.py +7 -0
  47. pynguin-0.46.0.dev0/src/pynguin/evolution/operators/crossover.py +201 -0
  48. pynguin-0.46.0.dev0/src/pynguin/evolution/operators/mutation.py +245 -0
  49. pynguin-0.46.0.dev0/src/pynguin/evolution/operators/selection.py +63 -0
  50. {pynguin-0.46.0/src/pynguin/slicer → pynguin-0.46.0.dev0/src/pynguin/execution}/__init__.py +1 -1
  51. pynguin-0.46.0.dev0/src/pynguin/execution/executor.py +270 -0
  52. pynguin-0.46.0.dev0/src/pynguin/execution/isolation.py +313 -0
  53. pynguin-0.46.0.dev0/src/pynguin/execution/observer.py +40 -0
  54. pynguin-0.46.0.dev0/src/pynguin/execution/subprocess_executor.py +235 -0
  55. pynguin-0.46.0.dev0/src/pynguin/generator.py +609 -0
  56. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/tracer.py +31 -290
  57. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/transformer.py +297 -155
  58. pynguin-0.46.0.dev0/src/pynguin/output/__init__.py +7 -0
  59. pynguin-0.46.0.dev0/src/pynguin/output/writer.py +329 -0
  60. pynguin-0.46.0.dev0/src/pynguin/testcase/testcase.py +291 -0
  61. pynguin-0.46.0.dev0/src/pynguin/testcase/testfactory.py +740 -0
  62. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/configuration_writer.py +1 -1
  63. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/controlflowdistance.py +8 -6
  64. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/execution_recorder.py +5 -12
  65. pynguin-0.46.0.dev0/src/pynguin/utils/naming.py +21 -0
  66. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/namingscope.py +1 -4
  67. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/openai_key_resolver.py +7 -13
  68. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_testfactory_utils.py +9 -17
  69. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/report.py +51 -7
  70. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/outputvariablefactory.py +1 -1
  71. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/runtimevariable.py +0 -44
  72. pynguin-0.46.0.dev0/src/pynguin/utils/statistics/statisticsobserver.py +110 -0
  73. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/stats.py +11 -16
  74. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/typetracing.py +7 -3
  75. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_string_subtype_inference.py +0 -59
  76. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_type_inference.py +12 -2
  77. pynguin-0.46.0.dev0/tests/analysis/test_module_analyzer.py +131 -0
  78. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_exception.py +0 -92
  79. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_inheritance.py +0 -30
  80. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_logical.py +0 -80
  81. pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/operators/test_misc.py +290 -0
  82. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/test_controller.py +4 -4
  83. pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/test_mutators.py +152 -0
  84. pynguin-0.46.0.dev0/tests/assertion/test_assertion.py +161 -0
  85. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/test_assertion_trace.py +2 -8
  86. pynguin-0.46.0.dev0/tests/assertion/test_assertiongenerator.py +38 -0
  87. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/conftest.py +10 -263
  88. pynguin-0.46.0.dev0/tests/evolution/test_chromosomes.py +146 -0
  89. pynguin-0.46.0.dev0/tests/execution/test_executor.py +170 -0
  90. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_machinery.py +5 -7
  91. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_tracer.py +2 -2
  92. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_client.py +1 -0
  93. pynguin-0.46.0.dev0/tests/resources/__init__.py +0 -0
  94. pynguin-0.46.0.dev0/tests/resources/typeevalpy/__init__.py +0 -0
  95. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/test_cli.py +7 -1
  96. pynguin-0.46.0.dev0/tests/testcase/test_new_testcase.py +161 -0
  97. pynguin-0.46.0.dev0/tests/testcase/test_testfactory_static.py +144 -0
  98. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_ml_testing_resources.py +3 -3
  99. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_configuration_writer.py +8 -49
  100. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_logging_utils.py +4 -2
  101. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_typetracing.py +4 -4
  102. pynguin-0.46.0/src/pynguin/analyses/seeding.py +0 -917
  103. pynguin-0.46.0/src/pynguin/assertion/assertion.py +0 -446
  104. pynguin-0.46.0/src/pynguin/assertion/assertion_to_ast.py +0 -349
  105. pynguin-0.46.0/src/pynguin/assertion/assertiongenerator.py +0 -632
  106. pynguin-0.46.0/src/pynguin/assertion/assertiontraceobserver.py +0 -399
  107. pynguin-0.46.0/src/pynguin/assertion/llmassertiongenerator.py +0 -168
  108. pynguin-0.46.0/src/pynguin/assertion/mutation_analysis/mutators.py +0 -290
  109. pynguin-0.46.0/src/pynguin/assertion/mutation_analysis/operators/statement.py +0 -70
  110. pynguin-0.46.0/src/pynguin/ga/AGENTS.md +0 -464
  111. pynguin-0.46.0/src/pynguin/ga/__init__.py +0 -7
  112. pynguin-0.46.0/src/pynguin/ga/algorithms/AGENTS.md +0 -658
  113. pynguin-0.46.0/src/pynguin/ga/algorithms/abstractmosaalgorithm.py +0 -174
  114. pynguin-0.46.0/src/pynguin/ga/algorithms/archive.py +0 -460
  115. pynguin-0.46.0/src/pynguin/ga/algorithms/dynamosaalgorithm.py +0 -321
  116. pynguin-0.46.0/src/pynguin/ga/algorithms/generationalgorithm.py +0 -326
  117. pynguin-0.46.0/src/pynguin/ga/algorithms/llmosalgorithm.py +0 -207
  118. pynguin-0.46.0/src/pynguin/ga/algorithms/mioalgorithm.py +0 -142
  119. pynguin-0.46.0/src/pynguin/ga/algorithms/mosaalgorithm.py +0 -67
  120. pynguin-0.46.0/src/pynguin/ga/algorithms/randomalgorithm.py +0 -163
  121. pynguin-0.46.0/src/pynguin/ga/algorithms/randomsearchalgorithm.py +0 -55
  122. pynguin-0.46.0/src/pynguin/ga/algorithms/wholesuitealgorithm.py +0 -181
  123. pynguin-0.46.0/src/pynguin/ga/chromosome.py +0 -207
  124. pynguin-0.46.0/src/pynguin/ga/chromosomefactory.py +0 -26
  125. pynguin-0.46.0/src/pynguin/ga/chromosomevisitor.py +0 -29
  126. pynguin-0.46.0/src/pynguin/ga/computations.py +0 -1013
  127. pynguin-0.46.0/src/pynguin/ga/coveragegoals.py +0 -508
  128. pynguin-0.46.0/src/pynguin/ga/generationalgorithmfactory.py +0 -440
  129. pynguin-0.46.0/src/pynguin/ga/llmtestsuitechromosomefactory.py +0 -127
  130. pynguin-0.46.0/src/pynguin/ga/operators/AGENTS.md +0 -157
  131. pynguin-0.46.0/src/pynguin/ga/operators/__init__.py +0 -7
  132. pynguin-0.46.0/src/pynguin/ga/operators/comparator.py +0 -133
  133. pynguin-0.46.0/src/pynguin/ga/operators/crossover.py +0 -52
  134. pynguin-0.46.0/src/pynguin/ga/operators/ranking.py +0 -224
  135. pynguin-0.46.0/src/pynguin/ga/operators/selection.py +0 -169
  136. pynguin-0.46.0/src/pynguin/ga/postprocess.py +0 -757
  137. pynguin-0.46.0/src/pynguin/ga/searchobserver.py +0 -84
  138. pynguin-0.46.0/src/pynguin/ga/stoppingcondition.py +0 -644
  139. pynguin-0.46.0/src/pynguin/ga/testcasechromosome.py +0 -304
  140. pynguin-0.46.0/src/pynguin/ga/testcasechromosomefactory.py +0 -84
  141. pynguin-0.46.0/src/pynguin/ga/testcasefactory.py +0 -89
  142. pynguin-0.46.0/src/pynguin/ga/testsuitechromosome.py +0 -193
  143. pynguin-0.46.0/src/pynguin/ga/testsuitechromosomefactory.py +0 -61
  144. pynguin-0.46.0/src/pynguin/generator.py +0 -1205
  145. pynguin-0.46.0/src/pynguin/large_language_model/AGENTS.md +0 -219
  146. pynguin-0.46.0/src/pynguin/large_language_model/__init__.py +0 -7
  147. pynguin-0.46.0/src/pynguin/large_language_model/caching.py +0 -73
  148. pynguin-0.46.0/src/pynguin/large_language_model/helpers/AGENTS.md +0 -38
  149. pynguin-0.46.0/src/pynguin/large_language_model/helpers/__init__.py +0 -7
  150. pynguin-0.46.0/src/pynguin/large_language_model/helpers/testcasereferencecopier.py +0 -146
  151. pynguin-0.46.0/src/pynguin/large_language_model/llmagent.py +0 -439
  152. pynguin-0.46.0/src/pynguin/large_language_model/llmtestcasehandler.py +0 -165
  153. pynguin-0.46.0/src/pynguin/large_language_model/parsing/AGENTS.md +0 -81
  154. pynguin-0.46.0/src/pynguin/large_language_model/parsing/__init__.py +0 -7
  155. pynguin-0.46.0/src/pynguin/large_language_model/parsing/astscoping.py +0 -564
  156. pynguin-0.46.0/src/pynguin/large_language_model/parsing/deserializer.py +0 -970
  157. pynguin-0.46.0/src/pynguin/large_language_model/parsing/helpers.py +0 -199
  158. pynguin-0.46.0/src/pynguin/large_language_model/parsing/rewriter.py +0 -988
  159. pynguin-0.46.0/src/pynguin/large_language_model/parsing/type_str_parser.py +0 -196
  160. pynguin-0.46.0/src/pynguin/large_language_model/prompts/AGENTS.md +0 -77
  161. pynguin-0.46.0/src/pynguin/large_language_model/prompts/__init__.py +0 -7
  162. pynguin-0.46.0/src/pynguin/large_language_model/prompts/assertiongenerationprompt.py +0 -33
  163. pynguin-0.46.0/src/pynguin/large_language_model/prompts/base_inference_prompt.py +0 -126
  164. pynguin-0.46.0/src/pynguin/large_language_model/prompts/localsearchprompt.py +0 -69
  165. pynguin-0.46.0/src/pynguin/large_language_model/prompts/prompt.py +0 -38
  166. pynguin-0.46.0/src/pynguin/large_language_model/prompts/testcasegenerationprompt.py +0 -33
  167. pynguin-0.46.0/src/pynguin/large_language_model/prompts/type_and_subtype_inference_prompt.py +0 -147
  168. pynguin-0.46.0/src/pynguin/large_language_model/prompts/typeinferenceprompt.py +0 -110
  169. pynguin-0.46.0/src/pynguin/large_language_model/prompts/uncoveredtargetsprompt.py +0 -81
  170. pynguin-0.46.0/src/pynguin/refinement/__init__.py +0 -11
  171. pynguin-0.46.0/src/pynguin/refinement/aaa_inserter.py +0 -140
  172. pynguin-0.46.0/src/pynguin/refinement/ast_analyzer.py +0 -265
  173. pynguin-0.46.0/src/pynguin/refinement/coverage_checker.py +0 -345
  174. pynguin-0.46.0/src/pynguin/refinement/llm_client.py +0 -215
  175. pynguin-0.46.0/src/pynguin/refinement/llm_judge.py +0 -352
  176. pynguin-0.46.0/src/pynguin/refinement/mutation_analyzer.py +0 -440
  177. pynguin-0.46.0/src/pynguin/refinement/pipeline.py +0 -847
  178. pynguin-0.46.0/src/pynguin/refinement/readability_metrics.py +0 -117
  179. pynguin-0.46.0/src/pynguin/refinement/refiner.py +0 -421
  180. pynguin-0.46.0/src/pynguin/refinement/sut_inspector.py +0 -293
  181. pynguin-0.46.0/src/pynguin/refinement/validator.py +0 -79
  182. pynguin-0.46.0/src/pynguin/slicer/AGENTS.md +0 -159
  183. pynguin-0.46.0/src/pynguin/slicer/dynamicslicer.py +0 -909
  184. pynguin-0.46.0/src/pynguin/slicer/executedinstruction.py +0 -144
  185. pynguin-0.46.0/src/pynguin/slicer/executionflowbuilder.py +0 -605
  186. pynguin-0.46.0/src/pynguin/slicer/stack/__init__.py +0 -9
  187. pynguin-0.46.0/src/pynguin/slicer/stack/stacksimulation.py +0 -228
  188. pynguin-0.46.0/src/pynguin/slicer/statementslicingobserver.py +0 -78
  189. pynguin-0.46.0/src/pynguin/testcase/defaulttestcase.py +0 -215
  190. pynguin-0.46.0/src/pynguin/testcase/execution.py +0 -2254
  191. pynguin-0.46.0/src/pynguin/testcase/export.py +0 -587
  192. pynguin-0.46.0/src/pynguin/testcase/llmlocalsearch.py +0 -230
  193. pynguin-0.46.0/src/pynguin/testcase/localsearch.py +0 -304
  194. pynguin-0.46.0/src/pynguin/testcase/localsearchobjective.py +0 -143
  195. pynguin-0.46.0/src/pynguin/testcase/localsearchstatement.py +0 -1494
  196. pynguin-0.46.0/src/pynguin/testcase/localsearchtimer.py +0 -42
  197. pynguin-0.46.0/src/pynguin/testcase/statement.py +0 -2951
  198. pynguin-0.46.0/src/pynguin/testcase/statement_to_ast.py +0 -480
  199. pynguin-0.46.0/src/pynguin/testcase/testcase.py +0 -352
  200. pynguin-0.46.0/src/pynguin/testcase/testcase_to_ast.py +0 -220
  201. pynguin-0.46.0/src/pynguin/testcase/testcasevisitor.py +0 -21
  202. pynguin-0.46.0/src/pynguin/testcase/testfactory.py +0 -1915
  203. pynguin-0.46.0/src/pynguin/testcase/variablereference.py +0 -492
  204. pynguin-0.46.0/src/pynguin/utils/statistics/statisticsobserver.py +0 -88
  205. pynguin-0.46.0/tests/analyses/test_initialpopulationseeding.py +0 -261
  206. pynguin-0.46.0/tests/analyses/test_module.py +0 -892
  207. pynguin-0.46.0/tests/analyses/test_seeding.py +0 -71
  208. pynguin-0.46.0/tests/analyses/test_typesystem.py +0 -1070
  209. pynguin-0.46.0/tests/assertion/mutation_analysis/operators/test_misc.py +0 -706
  210. pynguin-0.46.0/tests/assertion/mutation_analysis/operators/test_statement.py +0 -160
  211. pynguin-0.46.0/tests/assertion/mutation_analysis/test_mutators.py +0 -287
  212. pynguin-0.46.0/tests/assertion/test_assertion.py +0 -160
  213. pynguin-0.46.0/tests/assertion/test_assertion_generation_integration.py +0 -715
  214. pynguin-0.46.0/tests/assertion/test_assertion_to_ast.py +0 -120
  215. pynguin-0.46.0/tests/assertion/test_assertiongenerator.py +0 -257
  216. pynguin-0.46.0/tests/assertion/test_assertiontraceobserver.py +0 -94
  217. pynguin-0.46.0/tests/assertion/test_llmassertiongenerator.py +0 -214
  218. pynguin-0.46.0/tests/fixtures/cluster/async_and_sync.py +0 -12
  219. pynguin-0.46.0/tests/fixtures/cluster/cached_function.py +0 -12
  220. pynguin-0.46.0/tests/fixtures/cluster/lazy_module_getattr.py +0 -33
  221. pynguin-0.46.0/tests/fixtures/cluster/visibility.py +0 -40
  222. pynguin-0.46.0/tests/fixtures/cluster/visibility_dependency.py +0 -11
  223. pynguin-0.46.0/tests/ga/AGENTS.md +0 -170
  224. pynguin-0.46.0/tests/ga/algorithms/__init__.py +0 -7
  225. pynguin-0.46.0/tests/ga/algorithms/test_archive.py +0 -551
  226. pynguin-0.46.0/tests/ga/algorithms/test_dynamosaalgorithm.py +0 -90
  227. pynguin-0.46.0/tests/ga/algorithms/test_generationalgorithm.py +0 -32
  228. pynguin-0.46.0/tests/ga/algorithms/test_integration_mosaalgorithm.py +0 -68
  229. pynguin-0.46.0/tests/ga/algorithms/test_integration_varioussearchalgorithms.py +0 -124
  230. pynguin-0.46.0/tests/ga/algorithms/test_llmosalgorithm.py +0 -436
  231. pynguin-0.46.0/tests/ga/algorithms/test_mioalgorithm.py +0 -66
  232. pynguin-0.46.0/tests/ga/algorithms/test_mosaalgorithm.py +0 -52
  233. pynguin-0.46.0/tests/ga/algorithms/test_randomalgorithm.py +0 -158
  234. pynguin-0.46.0/tests/ga/operators/crossover/test_singlepointrelativecrossover.py +0 -39
  235. pynguin-0.46.0/tests/ga/operators/ranking/test_rankingfunction.py +0 -70
  236. pynguin-0.46.0/tests/ga/operators/selection/test_randomselection.py +0 -16
  237. pynguin-0.46.0/tests/ga/operators/selection/test_rankselection.py +0 -16
  238. pynguin-0.46.0/tests/ga/operators/selection/test_selection.py +0 -29
  239. pynguin-0.46.0/tests/ga/operators/selection/test_tournamentselection.py +0 -20
  240. pynguin-0.46.0/tests/ga/operators/test_dominancecomparator.py +0 -48
  241. pynguin-0.46.0/tests/ga/operators/test_preferencesortingcomparator.py +0 -25
  242. pynguin-0.46.0/tests/ga/stoppingconditions/test_coverageplateaustoppingcondition.py +0 -63
  243. pynguin-0.46.0/tests/ga/stoppingconditions/test_maxcoveragestoppingcondition.py +0 -59
  244. pynguin-0.46.0/tests/ga/stoppingconditions/test_maxiterationsstoppingcondition.py +0 -43
  245. pynguin-0.46.0/tests/ga/stoppingconditions/test_maxmemorystoppingcondition.py +0 -43
  246. pynguin-0.46.0/tests/ga/stoppingconditions/test_maxstatementstoppingcondition.py +0 -47
  247. pynguin-0.46.0/tests/ga/stoppingconditions/test_maxtestsstoppingcondition.py +0 -31
  248. pynguin-0.46.0/tests/ga/stoppingconditions/test_maxtimestoppingcondition.py +0 -42
  249. pynguin-0.46.0/tests/ga/stoppingconditions/test_minimumcoverageplateaustoppingcondition.py +0 -85
  250. pynguin-0.46.0/tests/ga/stoppingconditions/test_stoppingcondition.py +0 -39
  251. pynguin-0.46.0/tests/ga/test_chromosome.py +0 -62
  252. pynguin-0.46.0/tests/ga/test_chromosomefactory.py +0 -83
  253. pynguin-0.46.0/tests/ga/test_computations.py +0 -255
  254. pynguin-0.46.0/tests/ga/test_computations_cache.py +0 -227
  255. pynguin-0.46.0/tests/ga/test_computations_fitness_utilities.py +0 -291
  256. pynguin-0.46.0/tests/ga/test_coveragegoals.py +0 -481
  257. pynguin-0.46.0/tests/ga/test_generationalgorithmfactory.py +0 -99
  258. pynguin-0.46.0/tests/ga/test_generator.py +0 -176
  259. pynguin-0.46.0/tests/ga/test_llmtestsuitechromosomefactory.py +0 -207
  260. pynguin-0.46.0/tests/ga/test_postprocess.py +0 -1224
  261. pynguin-0.46.0/tests/ga/test_testcasechromosome.py +0 -337
  262. pynguin-0.46.0/tests/ga/test_testcasefactory.py +0 -35
  263. pynguin-0.46.0/tests/ga/test_testsuitechromosome.py +0 -220
  264. pynguin-0.46.0/tests/instrumentation/__init__.py +0 -6
  265. pynguin-0.46.0/tests/instrumentation/test_adapters.py +0 -1007
  266. pynguin-0.46.0/tests/large_language_model/__init__.py +0 -6
  267. pynguin-0.46.0/tests/large_language_model/helpers/test_testcasereferencecopier.py +0 -188
  268. pynguin-0.46.0/tests/large_language_model/parsing/test_astscoping.py +0 -726
  269. pynguin-0.46.0/tests/large_language_model/parsing/test_helpers.py +0 -353
  270. pynguin-0.46.0/tests/large_language_model/parsing/test_type_str_parser.py +0 -139
  271. pynguin-0.46.0/tests/large_language_model/prompts/test_assertiongenerationprompt.py +0 -106
  272. pynguin-0.46.0/tests/large_language_model/prompts/test_testcasegenerationprompt.py +0 -114
  273. pynguin-0.46.0/tests/large_language_model/prompts/test_uncovered_targets_prompt.py +0 -95
  274. pynguin-0.46.0/tests/large_language_model/test_caching.py +0 -109
  275. pynguin-0.46.0/tests/large_language_model/test_llm_caching.py +0 -54
  276. pynguin-0.46.0/tests/large_language_model/test_llm_deserializer.py +0 -645
  277. pynguin-0.46.0/tests/large_language_model/test_llmagent.py +0 -135
  278. pynguin-0.46.0/tests/large_language_model/test_llmagent_extended.py +0 -494
  279. pynguin-0.46.0/tests/large_language_model/test_llmtestcasehandler.py +0 -216
  280. pynguin-0.46.0/tests/large_language_model/test_llmtestcasehandler_coverage.py +0 -48
  281. pynguin-0.46.0/tests/large_language_model/test_rewriter.py +0 -519
  282. pynguin-0.46.0/tests/refinement/__init__.py +0 -6
  283. pynguin-0.46.0/tests/refinement/test_aaa_inserter.py +0 -107
  284. pynguin-0.46.0/tests/refinement/test_ast_analyzer.py +0 -109
  285. pynguin-0.46.0/tests/refinement/test_coverage_checker.py +0 -243
  286. pynguin-0.46.0/tests/refinement/test_llm_client.py +0 -199
  287. pynguin-0.46.0/tests/refinement/test_llm_judge.py +0 -206
  288. pynguin-0.46.0/tests/refinement/test_mutation_analyzer.py +0 -243
  289. pynguin-0.46.0/tests/refinement/test_pipeline.py +0 -853
  290. pynguin-0.46.0/tests/refinement/test_readability_metrics.py +0 -111
  291. pynguin-0.46.0/tests/refinement/test_refiner.py +0 -334
  292. pynguin-0.46.0/tests/refinement/test_sut_inspector.py +0 -85
  293. pynguin-0.46.0/tests/refinement/test_validator.py +0 -80
  294. pynguin-0.46.0/tests/slicer/__init__.py +0 -6
  295. pynguin-0.46.0/tests/slicer/test_assertionslicer.py +0 -387
  296. pynguin-0.46.0/tests/slicer/test_dependencies.py +0 -466
  297. pynguin-0.46.0/tests/slicer/test_expected_failures.py +0 -703
  298. pynguin-0.46.0/tests/slicer/test_language_features.py +0 -1495
  299. pynguin-0.46.0/tests/slicer/test_statementslicer.py +0 -319
  300. pynguin-0.46.0/tests/slicer/util.py +0 -200
  301. pynguin-0.46.0/tests/test_generator.py +0 -477
  302. pynguin-0.46.0/tests/testcase/__init__.py +0 -6
  303. pynguin-0.46.0/tests/testcase/execution/__init__.py +0 -6
  304. pynguin-0.46.0/tests/testcase/execution/test_executedinstruction.py +0 -22
  305. pynguin-0.46.0/tests/testcase/execution/test_executioncontext.py +0 -43
  306. pynguin-0.46.0/tests/testcase/execution/test_executionmocking.py +0 -48
  307. pynguin-0.46.0/tests/testcase/execution/test_executionresult.py +0 -55
  308. pynguin-0.46.0/tests/testcase/execution/test_executiontrace.py +0 -83
  309. pynguin-0.46.0/tests/testcase/execution/test_moduleprovider.py +0 -72
  310. pynguin-0.46.0/tests/testcase/execution/test_outputsuppression.py +0 -165
  311. pynguin-0.46.0/tests/testcase/execution/test_subprocesstestcaseexecutor.py +0 -254
  312. pynguin-0.46.0/tests/testcase/execution/test_subprocesstestcaseexecutor_differential.py +0 -36
  313. pynguin-0.46.0/tests/testcase/execution/test_subprocesstestcaseexecutor_integration.py +0 -131
  314. pynguin-0.46.0/tests/testcase/execution/test_testcaseexecutor_integration.py +0 -197
  315. pynguin-0.46.0/tests/testcase/execution/test_typetracing.py +0 -115
  316. pynguin-0.46.0/tests/testcase/export/__init__.py +0 -6
  317. pynguin-0.46.0/tests/testcase/export/conftest.py +0 -95
  318. pynguin-0.46.0/tests/testcase/export/test_export.py +0 -737
  319. pynguin-0.46.0/tests/testcase/statements/__init__.py +0 -6
  320. pynguin-0.46.0/tests/testcase/statements/test_assignmentstatement.py +0 -125
  321. pynguin-0.46.0/tests/testcase/statements/test_collectionstatements.py +0 -137
  322. pynguin-0.46.0/tests/testcase/statements/test_fieldstatement.py +0 -170
  323. pynguin-0.46.0/tests/testcase/statements/test_parameterizedstatements.py +0 -546
  324. pynguin-0.46.0/tests/testcase/statements/test_primitivestatements.py +0 -815
  325. pynguin-0.46.0/tests/testcase/test_ast_assign_statement.py +0 -384
  326. pynguin-0.46.0/tests/testcase/test_benchmark.py +0 -63
  327. pynguin-0.46.0/tests/testcase/test_defaulttestcase.py +0 -504
  328. pynguin-0.46.0/tests/testcase/test_llmlocalsearch.py +0 -77
  329. pynguin-0.46.0/tests/testcase/test_localsearch.py +0 -1366
  330. pynguin-0.46.0/tests/testcase/test_localsearchtimer.py +0 -28
  331. pynguin-0.46.0/tests/testcase/test_statement_to_ast.py +0 -666
  332. pynguin-0.46.0/tests/testcase/test_testcase_integration.py +0 -160
  333. pynguin-0.46.0/tests/testcase/test_testcase_to_ast_integration.py +0 -161
  334. pynguin-0.46.0/tests/testcase/test_testfactory.py +0 -1077
  335. pynguin-0.46.0/tests/testcase/variable/__init__.py +0 -6
  336. pynguin-0.46.0/tests/testcase/variable/test_variablereference.py +0 -316
  337. pynguin-0.46.0/tests/utils/__init__.py +0 -6
  338. pynguin-0.46.0/tests/utils/generic/__init__.py +0 -6
  339. pynguin-0.46.0/tests/utils/pynguinml/__init__.py +0 -6
  340. pynguin-0.46.0/tests/utils/pynguinml/test_ml_testfactory_utils.py +0 -377
  341. pynguin-0.46.0/tests/utils/pynguinml/test_pynguinml_integration.py +0 -61
  342. pynguin-0.46.0/tests/utils/stats/__init__.py +0 -6
  343. pynguin-0.46.0/tests/utils/stats/test_outputvariablefactory.py +0 -183
  344. pynguin-0.46.0/tests/utils/stats/test_searchstatistics.py +0 -193
  345. pynguin-0.46.0/tests/utils/test_controlflowdistance.py +0 -127
  346. pynguin-0.46.0/tests/utils/test_execution_recorder.py +0 -78
  347. pynguin-0.46.0/tests/utils/test_namingscope.py +0 -134
  348. pynguin-0.46.0/tests/utils/test_report.py +0 -546
  349. pynguin-0.46.0/tests/utils/test_string_subtype_integration.py +0 -52
  350. pynguin-0.46.0/tests/utils/test_typeevalpy_integration.py +0 -232
  351. pynguin-0.46.0/tests/utils/test_typeevalpy_json_schema.py +0 -437
  352. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSE.rst +0 -0
  353. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/Apache-2.0.txt +0 -0
  354. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/BSD-2-Clause.txt +0 -0
  355. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/CC-BY-4.0.txt +0 -0
  356. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/CC0-1.0.txt +0 -0
  357. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/LICENSES/MIT.txt +0 -0
  358. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/__init__.py +0 -0
  359. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/__main__.py +0 -0
  360. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/AGENTS.md +0 -0
  361. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/__init__.py +0 -0
  362. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/constants.py +0 -0
  363. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/modulecomplexity.py +0 -0
  364. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/string_subtype_inference.py +0 -0
  365. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/string_subtypes.py +0 -0
  366. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/syntaxtree.py +0 -0
  367. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/analyses/typesystem.py +0 -0
  368. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/AGENTS.md +0 -0
  369. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/__init__.py +0 -0
  370. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/AGENTS.md +0 -0
  371. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/__init__.py +0 -0
  372. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/AGENTS.md +0 -0
  373. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/arithmetic.py +0 -0
  374. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/base.py +0 -0
  375. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/decorator.py +0 -0
  376. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/operators/loop.py +0 -0
  377. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/strategies.py +0 -0
  378. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/assertion/mutation_analysis/transformer.py +0 -0
  379. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/AGENTS.md +0 -0
  380. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/__init__.py +0 -0
  381. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/controlflow.py +0 -0
  382. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/machinery.py +0 -0
  383. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/AGENTS.md +0 -0
  384. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/__init__.py +0 -0
  385. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/common.py +0 -0
  386. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_10.py +0 -0
  387. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_11.py +0 -0
  388. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_12.py +0 -0
  389. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_13.py +0 -0
  390. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/instrumentation/version/python3_14.py +0 -0
  391. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/AGENTS.md +0 -0
  392. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/__init__.py +0 -0
  393. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/client.py +0 -0
  394. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/master.py +0 -0
  395. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/master_worker/worker.py +0 -0
  396. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/AGENTS.md +0 -0
  397. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/__init__.py +0 -0
  398. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/coverage-template.html +0 -0
  399. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/__init__.py +0 -0
  400. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/camel_case.fan +0 -0
  401. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/colour.fan +0 -0
  402. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/csv.fan +0 -0
  403. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/delimited.fan +0 -0
  404. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/email.fan +0 -0
  405. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/__init__.py +0 -0
  406. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/camel_case.fan +0 -0
  407. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/colour.fan +0 -0
  408. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/csv.fan +0 -0
  409. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/delimited.fan +0 -0
  410. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/email.fan +0 -0
  411. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/ipv4.fan +0 -0
  412. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/standard_date.fan +0 -0
  413. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/unix_path.fan +0 -0
  414. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/faker/xml.fan +0 -0
  415. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/ipv4.fan +0 -0
  416. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/numeric.fan +0 -0
  417. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/standard_date.fan +0 -0
  418. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/unix_path.fan +0 -0
  419. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/resources/fans/xml.fan +0 -0
  420. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/testcase/AGENTS.md +0 -0
  421. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/testcase/__init__.py +0 -0
  422. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/AGENTS.md +0 -0
  423. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/__init__.py +0 -0
  424. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/ast_util.py +0 -0
  425. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/atomicinteger.py +0 -0
  426. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/collection_utils.py +0 -0
  427. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/exceptions.py +0 -0
  428. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/fandango_faker_utils.py +0 -0
  429. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/fs_isolation.py +0 -0
  430. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/generic/AGENTS.md +0 -0
  431. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/generic/__init__.py +0 -0
  432. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/generic/genericaccessibleobject.py +0 -0
  433. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/llm.py +0 -0
  434. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/logging_utils.py +0 -0
  435. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/mirror.py +0 -0
  436. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/mutation_utils.py +0 -0
  437. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/orderedset.py +0 -0
  438. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/AGENTS.md +0 -0
  439. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/__init__.py +0 -0
  440. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_parsing_utils.py +0 -0
  441. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/ml_testing_resources.py +0 -0
  442. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/mlparameter.py +0 -0
  443. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/pynguinml/np_rng.py +0 -0
  444. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/randomness.py +0 -0
  445. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/AGENTS.md +0 -0
  446. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/__init__.py +0 -0
  447. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/statistics/statisticsbackend.py +0 -0
  448. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/type_utils.py +0 -0
  449. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/src/pynguin/utils/typeevalpy_json_schema.py +0 -0
  450. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/AGENTS.md +0 -0
  451. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/__init__.py +0 -0
  452. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/__init__.py +0 -0
  453. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_constants.py +0 -0
  454. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_modulecomplexity.py +0 -0
  455. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_staticconstantseeding.py +0 -0
  456. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_string_subtypes.py +0 -0
  457. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_syntaxtree.py +0 -0
  458. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/analyses/test_typesystem_string_subtypes.py +0 -0
  459. {pynguin-0.46.0/tests/assertion/mutation_analysis/operators → pynguin-0.46.0.dev0/tests/analysis}/__init__.py +0 -0
  460. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/AGENTS.md +0 -0
  461. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/__init__.py +0 -0
  462. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/__init__.py +0 -0
  463. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/AGENTS.md +0 -0
  464. {pynguin-0.46.0/tests/large_language_model/prompts → pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/operators}/__init__.py +0 -0
  465. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_arithmetic.py +0 -0
  466. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_decorator.py +0 -0
  467. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/operators/test_loop.py +0 -0
  468. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/assertion/mutation_analysis/test_strategies.py +0 -0
  469. {pynguin-0.46.0/tests/resources → pynguin-0.46.0.dev0/tests/evolution}/__init__.py +0 -0
  470. {pynguin-0.46.0/tests/resources/typeevalpy → pynguin-0.46.0.dev0/tests/execution}/__init__.py +0 -0
  471. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/AGENTS.md +0 -0
  472. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/__init__.py +0 -0
  473. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/accessibles/__init__.py +0 -0
  474. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/accessibles/accessible.py +0 -0
  475. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/__init__.py +0 -0
  476. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/nestedbranches.py +0 -0
  477. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/nobranches.py +0 -0
  478. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/simplenesting.py +0 -0
  479. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/singlebranches.py +0 -0
  480. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/branchcoverage/twomethodsinglebranches.py +0 -0
  481. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/c/__init__.py +0 -0
  482. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/c/my_ctypes.py +0 -0
  483. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/__init__.py +0 -0
  484. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/abstract.py +0 -0
  485. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/alias_module.py +0 -0
  486. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_class_gen.py +0 -0
  487. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_class_method.py +0 -0
  488. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_func.py +0 -0
  489. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/async_gen.py +0 -0
  490. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/attributes.py +0 -0
  491. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/blacklist.py +0 -0
  492. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/blacklist_transitive.py +0 -0
  493. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/comments.py +0 -0
  494. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/complex_dependencies.py +0 -0
  495. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/complex_dependency.py +0 -0
  496. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/conditional_import.py +0 -0
  497. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/dependency.py +0 -0
  498. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_bottom.py +0 -0
  499. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_left.py +0 -0
  500. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_right.py +0 -0
  501. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/diamond_top.py +0 -0
  502. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/enums.py +0 -0
  503. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/import_dependency.py +0 -0
  504. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/inheritance.py +0 -0
  505. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/lambda.py +0 -0
  506. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/nested_functions.py +0 -0
  507. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/no_any_annotations.py +0 -0
  508. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/no_dependencies.py +0 -0
  509. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/overridden_inherited_methods.py +0 -0
  510. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/simple_dependencies.py +0 -0
  511. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/typing_parameters.py +0 -0
  512. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/cluster/uses_async_dependency.py +0 -0
  513. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/__init__.py +0 -0
  514. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/partly_crashing.py +0 -0
  515. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/crash/seg_fault.py +0 -0
  516. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/duckmock/__init__.py +0 -0
  517. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/duckmock/complex.py +0 -0
  518. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/errors/__init__.py +0 -0
  519. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/errors/import_error.py +0 -0
  520. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/AGENTS.md +0 -0
  521. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/__init__.py +0 -0
  522. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/assertions.py +0 -0
  523. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/basket.py +0 -0
  524. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/calculator.py +0 -0
  525. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/calculator_simple.py +0 -0
  526. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/collections.py +0 -0
  527. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/constructors.py +0 -0
  528. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/difficult.py +0 -0
  529. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/dummies.py +0 -0
  530. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/dynamosa_example.py +0 -0
  531. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/enums.py +0 -0
  532. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/exceptions.py +0 -0
  533. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/flaky.py +0 -0
  534. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/impossible.py +0 -0
  535. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/inheritance.py +0 -0
  536. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/loop.py +0 -0
  537. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/module_alias.py +0 -0
  538. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/monkey.py +0 -0
  539. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/nested.py +0 -0
  540. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/objects.py +0 -0
  541. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/private_methods.py +0 -0
  542. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/queue.py +0 -0
  543. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/simple.py +0 -0
  544. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/triangle.py +0 -0
  545. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_inference.py +0 -0
  546. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/__init__.py +0 -0
  547. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/geometry.py +0 -0
  548. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/invoice.py +0 -0
  549. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/large_test_cluster.py +0 -0
  550. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/mixed.py +0 -0
  551. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/type_tracing/string_subtype.py +0 -0
  552. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/examples/unasserted_exceptions.py +0 -0
  553. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/grammar/__init__.py +0 -0
  554. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/grammar/parameters.py +0 -0
  555. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/AGENTS.md +0 -0
  556. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/__init__.py +0 -0
  557. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/comparison.py +0 -0
  558. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_branches.py +0 -0
  559. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_classes.py +0 -0
  560. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_functions.py +0 -0
  561. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/covered_lines.py +0 -0
  562. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/excluded_blocks.py +0 -0
  563. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/inherited.py +0 -0
  564. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/mixed.py +0 -0
  565. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/instrumentation/simple.py +0 -0
  566. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/__init__.py +0 -0
  567. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/artificial_none.py +0 -0
  568. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/emptyfile.py +0 -0
  569. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/exception.py +0 -0
  570. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/list.py +0 -0
  571. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/plus.py +0 -0
  572. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/linecoverage/setter_getter.py +0 -0
  573. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/__init__.py +0 -0
  574. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/exception.py +0 -0
  575. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/expected.py +0 -0
  576. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/mutation.py +0 -0
  577. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/mutation/timeout.py +0 -0
  578. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/__init__.py +0 -0
  579. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/samples.py +0 -0
  580. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/whileloop.py +0 -0
  581. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/programgraph/yield_fun.py +0 -0
  582. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/__init__.py +0 -0
  583. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/argparse_sys_exit.py +0 -0
  584. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/custom_error.py +0 -0
  585. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/regression/not_main.py +0 -0
  586. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/__init__.py +0 -0
  587. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/dynamicseeding/__init__.py +0 -0
  588. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/dynamicseeding/dynamicseedingdummies.py +0 -0
  589. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/__init__.py +0 -0
  590. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/dummycontainer.py +0 -0
  591. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/__init__.py +0 -0
  592. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/assertseed_test_.py +0 -0
  593. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/classseed_test_.py +0 -0
  594. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collfuncseed_test_.py +0 -0
  595. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collseed_test_.py +0 -0
  596. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/nestedseed_test_.py +0 -0
  597. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notknowncall_test_.py +0 -0
  598. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notprimseed_test_.py +0 -0
  599. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/primitiveseed_test_.py +0 -0
  600. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/triangleseed_test_.py +0 -0
  601. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongassignseed_test_.py +0 -0
  602. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongfunctionnameseed_test_.py +0 -0
  603. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/__init__.py +0 -0
  604. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/__init__.py +0 -0
  605. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/dummy.py +0 -0
  606. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/seeding/staticconstantseeding/dummy/empty.so +0 -0
  607. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/__init__.py +0 -0
  608. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/attribute_dependencies.py +0 -0
  609. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/closure.py +0 -0
  610. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/generator.py +0 -0
  611. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/immutable_attribute_dependency.py +0 -0
  612. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/import_star_def.py +0 -0
  613. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/import_star_main.py +0 -0
  614. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/partial_cover_dependency.py +0 -0
  615. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/simple_call.py +0 -0
  616. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/slicer/simple_call_arg.py +0 -0
  617. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/test.conf +0 -0
  618. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/test.conf.license +0 -0
  619. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/tests/typeinference/test_stubstrategy.pyi +0 -0
  620. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/__init__.py +0 -0
  621. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/guess_params.py +0 -0
  622. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/return_types.py +0 -0
  623. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/type_tracing/union_type.py +0 -0
  624. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/__init__.py +0 -0
  625. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/outside.py +0 -0
  626. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/subtyping.py +0 -0
  627. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/fixtures/types/symbols.py +0 -0
  628. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/AGENTS.md +0 -0
  629. {pynguin-0.46.0/tests/ga → pynguin-0.46.0.dev0/tests/instrumentation}/__init__.py +0 -0
  630. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_ast_info.py +0 -0
  631. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_cfg.py +0 -0
  632. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_controldependencegraph.py +0 -0
  633. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_programgraph.py +0 -0
  634. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/instrumentation/test_version.py +0 -0
  635. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/master_worker/__init__.py +0 -0
  636. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_master.py +0 -0
  637. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/master_worker/test_worker.py +0 -0
  638. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy.py +0 -0
  639. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy_gt.json +0 -0
  640. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/resources/typeevalpy/dummy_gt.json.license +0 -0
  641. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/test___main__.py +0 -0
  642. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/testcase/AGENTS.md +0 -0
  643. {pynguin-0.46.0/tests/ga/operators → pynguin-0.46.0.dev0/tests/testcase}/__init__.py +0 -0
  644. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/testutils.py +0 -0
  645. {pynguin-0.46.0/tests/ga/operators/crossover → pynguin-0.46.0.dev0/tests/utils}/__init__.py +0 -0
  646. {pynguin-0.46.0/tests/ga/operators/ranking → pynguin-0.46.0.dev0/tests/utils/generic}/__init__.py +0 -0
  647. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/generic/test_genericaccessibleobject.py +0 -0
  648. {pynguin-0.46.0/tests/ga/operators/selection → pynguin-0.46.0.dev0/tests/utils/pynguinml}/__init__.py +0 -0
  649. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_ml_parsing_utils.py +0 -0
  650. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_mlparameter.py +0 -0
  651. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/pynguinml/test_np_rng.py +0 -0
  652. {pynguin-0.46.0/tests/ga/stoppingconditions → pynguin-0.46.0.dev0/tests/utils/stats}/__init__.py +0 -0
  653. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_runtimevariable.py +0 -0
  654. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_statistics.py +0 -0
  655. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/stats/test_statisticsbackend.py +0 -0
  656. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_atomicinteger.py +0 -0
  657. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_collection_utils.py +0 -0
  658. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_exceptions.py +0 -0
  659. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_fandango_faker_utils.py +0 -0
  660. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_fs_isolation.py +0 -0
  661. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_llm.py +0 -0
  662. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_mirror.py +0 -0
  663. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_mutation_utils.py +0 -0
  664. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_orderedset.py +0 -0
  665. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_randomness.py +0 -0
  666. {pynguin-0.46.0 → pynguin-0.46.0.dev0}/tests/utils/test_type_utils.py +0 -0
  667. {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 automated tool available that produces unit tests for
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, and 3.14 is experimental).
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
- Maintainer: [Lukas Krodinger](https://github.com/LuKrO2011)
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, you have to set up a few things:
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 license was changed with version 0.30.0.
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 automated tool available that produces unit tests for
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, and 3.14 is experimental).
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
- Maintainer: [Lukas Krodinger](https://github.com/LuKrO2011)
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, you have to set up a few things:
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 license was changed with version 0.30.0.
165
+ its licence was changed with version 0.30.0.
169
166
 
170
167
  ## Star History
171
168
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  [tool.poetry]
6
6
  name = "pynguin"
7
- version = "0.46.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>",
@@ -6,4 +6,4 @@
6
6
  #
7
7
  """Specifies the version of Pynguin."""
8
8
 
9
- __version__ = "0.46.0"
9
+ __version__ = "0.46.0.dev"
@@ -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.ga.operators.selection import Selectable, SelectionFunction
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 GeneratorProvider, RandomGeneratorProvider
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 ElementVisibility, TypeInferenceStrategy
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 _is_function(element):
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
- func.__module__ is None
260
- or func.__module__ in module_blacklist
261
- or func.__qualname__.startswith((
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"{func.__module__}.{func.__qualname__}" in method_blacklist
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: arch.Archive,
1153
+ archive: Any,
1174
1154
  subject_properties: SubjectProperties,
1175
- targets: OrderedSet[ff.TestCaseFitnessFunction],
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: ff.TestCaseFitnessFunction
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: ff.TestCaseFitnessFunction) -> None:
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 __should_skip_by_visibility(func_name.rpartition(".")[2], add_to_test=add_to_test):
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
- LOGGER.warning(
1437
- "Skipping coroutine %s: Pynguin only tests the non-async parts of this module.",
1438
- func_name,
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 __should_skip_by_visibility(method_name.rpartition(".")[2], add_to_test=add_to_test)
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
- LOGGER.warning(
1646
- "Skipping coroutine %s: Pynguin only tests the non-async parts of this module.",
1647
- method_name,
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: _is_function(x) and not _is_blacklisted(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
- # Snapshot the values first: inspecting a member can mutate the module's
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 __collect_module_level_functions(
2022
- module: ModuleType, add: Callable[[Callable[..., Any]], None]
2023
- ) -> None:
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 != "__init__" and __should_skip_by_visibility(name, add_to_test=True):
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
- config.configuration.element_visibility == ElementVisibility.PUBLIC
2040
- and cls_name.startswith("_")
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 __is_constructor(meth_name):
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
+ ]