pynguin 0.46.0.dev0__tar.gz → 0.47.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (724) hide show
  1. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/PKG-INFO +13 -12
  2. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/README.md +10 -7
  3. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/pyproject.toml +28 -7
  4. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/__version__.py +1 -1
  5. pynguin-0.47.0/src/pynguin/analyses/ast_utils.py +171 -0
  6. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/constants.py +33 -1
  7. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/generator.py +73 -74
  8. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/module.py +410 -91
  9. pynguin-0.47.0/src/pynguin/analyses/seeding.py +224 -0
  10. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/syntaxtree.py +37 -30
  11. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/type_inference.py +221 -38
  12. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/typesystem.py +2 -3
  13. pynguin-0.47.0/src/pynguin/assertion/assertion.py +503 -0
  14. pynguin-0.46.0.dev0/src/pynguin/assertion/assertion_to_cst.py → pynguin-0.47.0/src/pynguin/assertion/assertion_to_ast.py +73 -32
  15. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/assertion_trace.py +56 -13
  16. pynguin-0.47.0/src/pynguin/assertion/assertiongenerator.py +631 -0
  17. pynguin-0.47.0/src/pynguin/assertion/assertiontraceobserver.py +601 -0
  18. pynguin-0.47.0/src/pynguin/assertion/llmassertiongenerator.py +158 -0
  19. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/controller.py +5 -1
  20. pynguin-0.47.0/src/pynguin/assertion/mutation_analysis/mutators.py +290 -0
  21. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/__init__.py +16 -0
  22. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/exception.py +43 -1
  23. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/inheritance.py +8 -4
  24. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/logical.py +33 -0
  25. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/misc.py +200 -3
  26. pynguin-0.47.0/src/pynguin/assertion/mutation_analysis/operators/statement.py +70 -0
  27. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/cli.py +0 -20
  28. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/configuration.py +249 -17
  29. pynguin-0.47.0/src/pynguin/ga/AGENTS.md +464 -0
  30. pynguin-0.47.0/src/pynguin/ga/__init__.py +7 -0
  31. pynguin-0.47.0/src/pynguin/ga/algorithms/AGENTS.md +658 -0
  32. {pynguin-0.46.0.dev0/src/pynguin/output → pynguin-0.47.0/src/pynguin/ga/algorithms}/__init__.py +1 -1
  33. pynguin-0.47.0/src/pynguin/ga/algorithms/abstractmosaalgorithm.py +174 -0
  34. pynguin-0.47.0/src/pynguin/ga/algorithms/archive.py +462 -0
  35. pynguin-0.47.0/src/pynguin/ga/algorithms/dynamosaalgorithm.py +482 -0
  36. pynguin-0.47.0/src/pynguin/ga/algorithms/generationalgorithm.py +326 -0
  37. pynguin-0.47.0/src/pynguin/ga/algorithms/lldynamosaalgorithm.py +231 -0
  38. pynguin-0.47.0/src/pynguin/ga/algorithms/llmosalgorithm.py +341 -0
  39. pynguin-0.47.0/src/pynguin/ga/algorithms/mioalgorithm.py +142 -0
  40. pynguin-0.47.0/src/pynguin/ga/algorithms/mosaalgorithm.py +67 -0
  41. pynguin-0.47.0/src/pynguin/ga/algorithms/randomalgorithm.py +162 -0
  42. pynguin-0.47.0/src/pynguin/ga/algorithms/randomsearchalgorithm.py +55 -0
  43. pynguin-0.47.0/src/pynguin/ga/algorithms/wholesuitealgorithm.py +181 -0
  44. pynguin-0.47.0/src/pynguin/ga/checked_coverage.py +143 -0
  45. pynguin-0.47.0/src/pynguin/ga/chromosome.py +211 -0
  46. pynguin-0.47.0/src/pynguin/ga/chromosomefactory.py +26 -0
  47. pynguin-0.47.0/src/pynguin/ga/chromosomevisitor.py +29 -0
  48. pynguin-0.47.0/src/pynguin/ga/computation_cache.py +261 -0
  49. pynguin-0.47.0/src/pynguin/ga/computations.py +420 -0
  50. pynguin-0.47.0/src/pynguin/ga/coveragegoals.py +581 -0
  51. pynguin-0.47.0/src/pynguin/ga/fitness_metrics.py +259 -0
  52. pynguin-0.47.0/src/pynguin/ga/generationalgorithmfactory.py +448 -0
  53. pynguin-0.47.0/src/pynguin/ga/llmtestsuitechromosomefactory.py +127 -0
  54. pynguin-0.47.0/src/pynguin/ga/operators/AGENTS.md +157 -0
  55. pynguin-0.47.0/src/pynguin/ga/operators/__init__.py +7 -0
  56. pynguin-0.47.0/src/pynguin/ga/operators/comparator.py +153 -0
  57. pynguin-0.47.0/src/pynguin/ga/operators/crossover.py +109 -0
  58. pynguin-0.47.0/src/pynguin/ga/operators/mutation.py +254 -0
  59. pynguin-0.47.0/src/pynguin/ga/operators/ranking.py +224 -0
  60. pynguin-0.47.0/src/pynguin/ga/operators/selection.py +169 -0
  61. pynguin-0.47.0/src/pynguin/ga/postprocess.py +557 -0
  62. pynguin-0.47.0/src/pynguin/ga/searchobserver.py +84 -0
  63. pynguin-0.47.0/src/pynguin/ga/stoppingcondition.py +621 -0
  64. pynguin-0.47.0/src/pynguin/ga/testcasechromosome.py +214 -0
  65. pynguin-0.47.0/src/pynguin/ga/testcasechromosomefactory.py +84 -0
  66. pynguin-0.47.0/src/pynguin/ga/testcasefactory.py +88 -0
  67. pynguin-0.47.0/src/pynguin/ga/testsuitechromosome.py +162 -0
  68. pynguin-0.47.0/src/pynguin/ga/testsuitechromosomefactory.py +61 -0
  69. pynguin-0.47.0/src/pynguin/generator.py +1200 -0
  70. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/controlflow.py +11 -11
  71. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/machinery.py +5 -2
  72. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/tracer.py +631 -34
  73. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/transformer.py +400 -314
  74. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/version/python3_10.py +140 -11
  75. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/version/python3_11.py +69 -15
  76. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/version/python3_13.py +9 -6
  77. pynguin-0.47.0/src/pynguin/large_language_model/AGENTS.md +228 -0
  78. pynguin-0.47.0/src/pynguin/large_language_model/__init__.py +7 -0
  79. pynguin-0.47.0/src/pynguin/large_language_model/cache.py +106 -0
  80. pynguin-0.47.0/src/pynguin/large_language_model/caching.py +73 -0
  81. pynguin-0.47.0/src/pynguin/large_language_model/client.py +395 -0
  82. pynguin-0.47.0/src/pynguin/large_language_model/config_schema.py +42 -0
  83. pynguin-0.47.0/src/pynguin/large_language_model/llmagent.py +455 -0
  84. pynguin-0.47.0/src/pynguin/large_language_model/llmtestcasehandler.py +168 -0
  85. pynguin-0.47.0/src/pynguin/large_language_model/parsing/AGENTS.md +157 -0
  86. pynguin-0.47.0/src/pynguin/large_language_model/parsing/__init__.py +7 -0
  87. pynguin-0.47.0/src/pynguin/large_language_model/parsing/deserializer.py +1241 -0
  88. pynguin-0.47.0/src/pynguin/large_language_model/parsing/helpers.py +25 -0
  89. pynguin-0.47.0/src/pynguin/large_language_model/parsing/rewriter.py +825 -0
  90. pynguin-0.47.0/src/pynguin/large_language_model/parsing/type_str_parser.py +196 -0
  91. pynguin-0.47.0/src/pynguin/large_language_model/prompts/AGENTS.md +100 -0
  92. pynguin-0.47.0/src/pynguin/large_language_model/prompts/__init__.py +37 -0
  93. pynguin-0.47.0/src/pynguin/large_language_model/prompts/assertiongenerationprompt.py +40 -0
  94. pynguin-0.47.0/src/pynguin/large_language_model/prompts/base_inference_prompt.py +128 -0
  95. pynguin-0.47.0/src/pynguin/large_language_model/prompts/localsearchprompt.py +71 -0
  96. pynguin-0.47.0/src/pynguin/large_language_model/prompts/modulereadabilityrefinementprompt.py +47 -0
  97. pynguin-0.47.0/src/pynguin/large_language_model/prompts/modulerefinementprompt.py +47 -0
  98. pynguin-0.47.0/src/pynguin/large_language_model/prompts/modulesemanticassertionsprompt.py +47 -0
  99. pynguin-0.47.0/src/pynguin/large_language_model/prompts/mutationstrengthenprompt.py +59 -0
  100. pynguin-0.47.0/src/pynguin/large_language_model/prompts/prompt.py +169 -0
  101. pynguin-0.47.0/src/pynguin/large_language_model/prompts/readabilityrefinementprompt.py +50 -0
  102. pynguin-0.47.0/src/pynguin/large_language_model/prompts/repairprompt.py +59 -0
  103. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/assertion_generation.yaml +32 -0
  104. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/defaults.yaml +22 -0
  105. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/generator_generate.yaml +16 -0
  106. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/local_search.yaml +37 -0
  107. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/module_readability_refinement.yaml +51 -0
  108. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/module_refinement_combined.yaml +51 -0
  109. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/module_semantic_assertions.yaml +58 -0
  110. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/mutation_strengthen.yaml +44 -0
  111. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/readability_refinement.yaml +79 -0
  112. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/refinement.yaml +13 -0
  113. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/repair.yaml +50 -0
  114. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/semantic_assertions.yaml +165 -0
  115. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/test_case_generation.yaml +39 -0
  116. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/type_inference.yaml +59 -0
  117. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/type_subtype_inference.yaml +85 -0
  118. pynguin-0.47.0/src/pynguin/large_language_model/prompts/resources/uncovered_targets.yaml +35 -0
  119. pynguin-0.47.0/src/pynguin/large_language_model/prompts/semanticassertionsprompt.py +50 -0
  120. pynguin-0.47.0/src/pynguin/large_language_model/prompts/testcasegenerationprompt.py +53 -0
  121. pynguin-0.47.0/src/pynguin/large_language_model/prompts/type_and_subtype_inference_prompt.py +74 -0
  122. pynguin-0.47.0/src/pynguin/large_language_model/prompts/typeinferenceprompt.py +62 -0
  123. pynguin-0.47.0/src/pynguin/large_language_model/prompts/uncoveredtargetsprompt.py +96 -0
  124. pynguin-0.47.0/src/pynguin/large_language_model/request.py +57 -0
  125. pynguin-0.47.0/src/pynguin/refinement/AGENTS.md +86 -0
  126. pynguin-0.47.0/src/pynguin/refinement/__init__.py +11 -0
  127. pynguin-0.47.0/src/pynguin/refinement/aaa_inserter.py +140 -0
  128. pynguin-0.47.0/src/pynguin/refinement/ast_analyzer.py +265 -0
  129. pynguin-0.47.0/src/pynguin/refinement/coverage_checker.py +348 -0
  130. pynguin-0.47.0/src/pynguin/refinement/llm_client.py +213 -0
  131. pynguin-0.47.0/src/pynguin/refinement/llm_judge.py +352 -0
  132. pynguin-0.47.0/src/pynguin/refinement/mutation_analyzer.py +478 -0
  133. pynguin-0.47.0/src/pynguin/refinement/pipeline.py +890 -0
  134. pynguin-0.47.0/src/pynguin/refinement/readability_metrics.py +117 -0
  135. pynguin-0.47.0/src/pynguin/refinement/refiner.py +585 -0
  136. pynguin-0.47.0/src/pynguin/refinement/sut_inspector.py +742 -0
  137. pynguin-0.47.0/src/pynguin/refinement/validator.py +154 -0
  138. pynguin-0.47.0/src/pynguin/slicer/AGENTS.md +159 -0
  139. {pynguin-0.46.0.dev0/src/pynguin/execution → pynguin-0.47.0/src/pynguin/slicer}/__init__.py +1 -1
  140. pynguin-0.47.0/src/pynguin/slicer/dynamicslicer.py +909 -0
  141. pynguin-0.47.0/src/pynguin/slicer/executedinstruction.py +144 -0
  142. pynguin-0.47.0/src/pynguin/slicer/executionflowbuilder.py +605 -0
  143. pynguin-0.47.0/src/pynguin/slicer/stack/__init__.py +9 -0
  144. pynguin-0.47.0/src/pynguin/slicer/stack/stacksimulation.py +228 -0
  145. pynguin-0.47.0/src/pynguin/slicer/statementslicingobserver.py +99 -0
  146. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/testcase/AGENTS.md +4 -4
  147. pynguin-0.47.0/src/pynguin/testcase/collection_tracker.py +478 -0
  148. pynguin-0.47.0/src/pynguin/testcase/crash_minimization.py +118 -0
  149. pynguin-0.47.0/src/pynguin/testcase/execution.py +704 -0
  150. pynguin-0.47.0/src/pynguin/testcase/execution_isolation.py +123 -0
  151. pynguin-0.47.0/src/pynguin/testcase/execution_observers.py +688 -0
  152. pynguin-0.47.0/src/pynguin/testcase/execution_result.py +142 -0
  153. pynguin-0.47.0/src/pynguin/testcase/export.py +576 -0
  154. pynguin-0.47.0/src/pynguin/testcase/literalgen.py +1225 -0
  155. pynguin-0.47.0/src/pynguin/testcase/llmlocalsearch.py +244 -0
  156. pynguin-0.47.0/src/pynguin/testcase/localsearch.py +306 -0
  157. pynguin-0.47.0/src/pynguin/testcase/localsearchobjective.py +143 -0
  158. pynguin-0.47.0/src/pynguin/testcase/localsearchstatement.py +921 -0
  159. pynguin-0.47.0/src/pynguin/testcase/localsearchtimer.py +42 -0
  160. pynguin-0.47.0/src/pynguin/testcase/subprocess_executor.py +816 -0
  161. pynguin-0.47.0/src/pynguin/testcase/testcase.py +711 -0
  162. pynguin-0.47.0/src/pynguin/testcase/testfactory.py +2948 -0
  163. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/AGENTS.md +3 -42
  164. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/configuration_writer.py +1 -1
  165. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/controlflowdistance.py +72 -8
  166. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/execution_recorder.py +6 -5
  167. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/generic/genericaccessibleobject.py +34 -1
  168. pynguin-0.47.0/src/pynguin/utils/llm.py +31 -0
  169. pynguin-0.47.0/src/pynguin/utils/naming.py +126 -0
  170. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/openai_key_resolver.py +13 -7
  171. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/pynguinml/ml_testfactory_utils.py +39 -10
  172. pynguin-0.47.0/src/pynguin/utils/pynguinml/ndarray_cst.py +165 -0
  173. pynguin-0.47.0/src/pynguin/utils/pynguinml/ndarray_mutation.py +176 -0
  174. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/report.py +11 -55
  175. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/statistics/outputvariablefactory.py +4 -2
  176. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/statistics/runtimevariable.py +68 -6
  177. pynguin-0.47.0/src/pynguin/utils/statistics/statisticsobserver.py +88 -0
  178. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/statistics/stats.py +16 -11
  179. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/type_utils.py +102 -9
  180. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/typeevalpy_json_schema.py +23 -14
  181. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/typetracing.py +38 -14
  182. pynguin-0.47.0/tests/analyses/test_ast_utils.py +91 -0
  183. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/analyses/test_constants.py +14 -0
  184. pynguin-0.47.0/tests/analyses/test_initialpopulationseeding.py +307 -0
  185. pynguin-0.47.0/tests/analyses/test_module.py +1050 -0
  186. pynguin-0.47.0/tests/analyses/test_native_libraries.py +325 -0
  187. pynguin-0.47.0/tests/analyses/test_seeding.py +244 -0
  188. pynguin-0.47.0/tests/analyses/test_staticconstantseeding.py +84 -0
  189. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/analyses/test_string_subtype_inference.py +63 -0
  190. pynguin-0.47.0/tests/analyses/test_subtypes.py +155 -0
  191. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/analyses/test_syntaxtree.py +5 -8
  192. pynguin-0.47.0/tests/analyses/test_type_inference.py +348 -0
  193. pynguin-0.47.0/tests/analyses/test_typesystem.py +1070 -0
  194. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/operators/test_exception.py +92 -0
  195. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/operators/test_inheritance.py +30 -0
  196. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/operators/test_logical.py +80 -0
  197. pynguin-0.47.0/tests/assertion/mutation_analysis/operators/test_misc.py +706 -0
  198. pynguin-0.47.0/tests/assertion/mutation_analysis/operators/test_statement.py +160 -0
  199. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/test_controller.py +4 -4
  200. pynguin-0.47.0/tests/assertion/mutation_analysis/test_mutators.py +287 -0
  201. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/test_assertion.py +50 -37
  202. pynguin-0.47.0/tests/assertion/test_assertion_generation_integration.py +840 -0
  203. pynguin-0.47.0/tests/assertion/test_assertion_to_ast.py +275 -0
  204. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/test_assertion_trace.py +2 -0
  205. pynguin-0.47.0/tests/assertion/test_assertiongenerator.py +257 -0
  206. pynguin-0.47.0/tests/assertion/test_assertiontraceobserver.py +871 -0
  207. pynguin-0.47.0/tests/assertion/test_llmassertiongenerator.py +223 -0
  208. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/conftest.py +196 -11
  209. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/accessibles/accessible.py +16 -0
  210. pynguin-0.47.0/tests/fixtures/cluster/async_and_sync.py +12 -0
  211. pynguin-0.47.0/tests/fixtures/cluster/cached_function.py +12 -0
  212. pynguin-0.47.0/tests/fixtures/cluster/fields.py +39 -0
  213. pynguin-0.47.0/tests/fixtures/cluster/lazy_module_getattr.py +33 -0
  214. pynguin-0.47.0/tests/fixtures/cluster/methods.py +54 -0
  215. pynguin-0.47.0/tests/fixtures/cluster/tuple_return.py +41 -0
  216. pynguin-0.47.0/tests/fixtures/cluster/visibility.py +40 -0
  217. pynguin-0.47.0/tests/fixtures/cluster/visibility_dependency.py +11 -0
  218. pynguin-0.47.0/tests/fixtures/examples/abstract_classes.py +141 -0
  219. pynguin-0.47.0/tests/fixtures/examples/no_cover_example.py +17 -0
  220. pynguin-0.47.0/tests/fixtures/examples/pattern_matching.py +41 -0
  221. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/simple.py +24 -0
  222. pynguin-0.47.0/tests/fixtures/instrumentation/unpickling.py +27 -0
  223. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/type_tracing/guess_params.py +4 -0
  224. pynguin-0.47.0/tests/ga/AGENTS.md +170 -0
  225. {pynguin-0.46.0.dev0/src/pynguin/evolution/operators → pynguin-0.47.0/tests/ga/algorithms}/__init__.py +1 -1
  226. pynguin-0.47.0/tests/ga/algorithms/test_archive.py +551 -0
  227. pynguin-0.47.0/tests/ga/algorithms/test_dynamosaalgorithm.py +393 -0
  228. pynguin-0.47.0/tests/ga/algorithms/test_generationalgorithm.py +32 -0
  229. pynguin-0.47.0/tests/ga/algorithms/test_integration_mosaalgorithm.py +68 -0
  230. pynguin-0.47.0/tests/ga/algorithms/test_integration_varioussearchalgorithms.py +125 -0
  231. pynguin-0.47.0/tests/ga/algorithms/test_lldynamosaalgorithm.py +328 -0
  232. pynguin-0.47.0/tests/ga/algorithms/test_llmosalgorithm.py +519 -0
  233. pynguin-0.47.0/tests/ga/algorithms/test_mioalgorithm.py +66 -0
  234. pynguin-0.47.0/tests/ga/algorithms/test_mosaalgorithm.py +52 -0
  235. pynguin-0.47.0/tests/ga/algorithms/test_randomalgorithm.py +193 -0
  236. pynguin-0.47.0/tests/ga/operators/crossover/test_singlepointrelativecrossover.py +39 -0
  237. pynguin-0.47.0/tests/ga/operators/ranking/test_rankingfunction.py +70 -0
  238. pynguin-0.47.0/tests/ga/operators/selection/test_randomselection.py +16 -0
  239. pynguin-0.47.0/tests/ga/operators/selection/test_rankselection.py +16 -0
  240. pynguin-0.47.0/tests/ga/operators/selection/test_selection.py +29 -0
  241. pynguin-0.47.0/tests/ga/operators/selection/test_tournamentselection.py +20 -0
  242. pynguin-0.47.0/tests/ga/operators/test_dominancecomparator.py +48 -0
  243. pynguin-0.47.0/tests/ga/operators/test_preferencesortingcomparator.py +25 -0
  244. pynguin-0.47.0/tests/ga/stoppingconditions/test_coverageplateaustoppingcondition.py +63 -0
  245. pynguin-0.47.0/tests/ga/stoppingconditions/test_maxcoveragestoppingcondition.py +59 -0
  246. pynguin-0.47.0/tests/ga/stoppingconditions/test_maxiterationsstoppingcondition.py +43 -0
  247. pynguin-0.47.0/tests/ga/stoppingconditions/test_maxmemorystoppingcondition.py +43 -0
  248. pynguin-0.47.0/tests/ga/stoppingconditions/test_maxstatementstoppingcondition.py +47 -0
  249. pynguin-0.47.0/tests/ga/stoppingconditions/test_maxtestsstoppingcondition.py +31 -0
  250. pynguin-0.47.0/tests/ga/stoppingconditions/test_maxtimestoppingcondition.py +42 -0
  251. pynguin-0.47.0/tests/ga/stoppingconditions/test_minimumcoverageplateaustoppingcondition.py +85 -0
  252. pynguin-0.47.0/tests/ga/stoppingconditions/test_stoppingcondition.py +39 -0
  253. pynguin-0.47.0/tests/ga/test_chromosome.py +62 -0
  254. pynguin-0.47.0/tests/ga/test_chromosomefactory.py +83 -0
  255. pynguin-0.47.0/tests/ga/test_computations.py +340 -0
  256. pynguin-0.47.0/tests/ga/test_computations_cache.py +227 -0
  257. pynguin-0.47.0/tests/ga/test_computations_fitness_utilities.py +307 -0
  258. pynguin-0.47.0/tests/ga/test_coveragegoals.py +632 -0
  259. pynguin-0.47.0/tests/ga/test_fine_grained_targeting.py +70 -0
  260. pynguin-0.47.0/tests/ga/test_fine_grained_targeting_integration.py +43 -0
  261. pynguin-0.47.0/tests/ga/test_generationalgorithmfactory.py +129 -0
  262. pynguin-0.47.0/tests/ga/test_generator.py +283 -0
  263. pynguin-0.47.0/tests/ga/test_llmtestsuitechromosomefactory.py +207 -0
  264. pynguin-0.47.0/tests/ga/test_postprocess.py +512 -0
  265. pynguin-0.47.0/tests/ga/test_testcasechromosome.py +676 -0
  266. pynguin-0.47.0/tests/ga/test_testcasefactory.py +40 -0
  267. pynguin-0.47.0/tests/ga/test_testsuitechromosome.py +220 -0
  268. pynguin-0.47.0/tests/instrumentation/__init__.py +6 -0
  269. pynguin-0.47.0/tests/instrumentation/test_adapters.py +1043 -0
  270. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/instrumentation/test_ast_info.py +139 -9
  271. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/instrumentation/test_machinery.py +7 -5
  272. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/instrumentation/test_tracer.py +151 -2
  273. pynguin-0.47.0/tests/large_language_model/__init__.py +6 -0
  274. pynguin-0.47.0/tests/large_language_model/parsing/test_helpers.py +18 -0
  275. pynguin-0.47.0/tests/large_language_model/parsing/test_type_str_parser.py +139 -0
  276. pynguin-0.47.0/tests/large_language_model/prompts/test_assertiongenerationprompt.py +106 -0
  277. pynguin-0.47.0/tests/large_language_model/prompts/test_module_prompts.py +62 -0
  278. pynguin-0.47.0/tests/large_language_model/prompts/test_mutationstrengthenprompt.py +42 -0
  279. pynguin-0.47.0/tests/large_language_model/prompts/test_readabilityrefinementprompt.py +33 -0
  280. pynguin-0.47.0/tests/large_language_model/prompts/test_repairprompt.py +34 -0
  281. pynguin-0.47.0/tests/large_language_model/prompts/test_semanticassertionsprompt.py +33 -0
  282. pynguin-0.47.0/tests/large_language_model/prompts/test_testcasegenerationprompt.py +92 -0
  283. pynguin-0.47.0/tests/large_language_model/prompts/test_uncovered_targets_prompt.py +114 -0
  284. pynguin-0.47.0/tests/large_language_model/test_cache.py +113 -0
  285. pynguin-0.47.0/tests/large_language_model/test_caching.py +109 -0
  286. pynguin-0.47.0/tests/large_language_model/test_characterization.py +206 -0
  287. pynguin-0.47.0/tests/large_language_model/test_client_thinking.py +94 -0
  288. pynguin-0.47.0/tests/large_language_model/test_extract_python_code.py +45 -0
  289. pynguin-0.47.0/tests/large_language_model/test_llm_caching.py +54 -0
  290. pynguin-0.47.0/tests/large_language_model/test_llm_deserializer.py +608 -0
  291. pynguin-0.47.0/tests/large_language_model/test_llmagent.py +135 -0
  292. pynguin-0.47.0/tests/large_language_model/test_llmagent_extended.py +523 -0
  293. pynguin-0.47.0/tests/large_language_model/test_llmtestcasehandler.py +130 -0
  294. pynguin-0.47.0/tests/large_language_model/test_llmtestcasehandler_coverage.py +48 -0
  295. pynguin-0.47.0/tests/large_language_model/test_request_budget.py +151 -0
  296. pynguin-0.47.0/tests/large_language_model/test_rewriter.py +489 -0
  297. pynguin-0.47.0/tests/large_language_model/test_temperature_fallback.py +124 -0
  298. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/master_worker/test_client.py +6 -1
  299. pynguin-0.47.0/tests/quick_eval/__init__.py +6 -0
  300. pynguin-0.47.0/tests/quick_eval/test_args.py +100 -0
  301. pynguin-0.47.0/tests/quick_eval/test_suite_scope.py +40 -0
  302. pynguin-0.47.0/tests/refinement/__init__.py +6 -0
  303. pynguin-0.47.0/tests/refinement/test_aaa_inserter.py +107 -0
  304. pynguin-0.47.0/tests/refinement/test_ast_analyzer.py +109 -0
  305. pynguin-0.47.0/tests/refinement/test_coverage_checker.py +243 -0
  306. pynguin-0.47.0/tests/refinement/test_llm_client.py +259 -0
  307. pynguin-0.47.0/tests/refinement/test_llm_judge.py +208 -0
  308. pynguin-0.47.0/tests/refinement/test_module_refinement.py +250 -0
  309. pynguin-0.47.0/tests/refinement/test_mutation_analyzer.py +282 -0
  310. pynguin-0.47.0/tests/refinement/test_pipeline.py +927 -0
  311. pynguin-0.47.0/tests/refinement/test_readability_metrics.py +111 -0
  312. pynguin-0.47.0/tests/refinement/test_refiner.py +342 -0
  313. pynguin-0.47.0/tests/refinement/test_sut_inspector.py +457 -0
  314. pynguin-0.47.0/tests/refinement/test_validator.py +167 -0
  315. pynguin-0.47.0/tests/slicer/__init__.py +6 -0
  316. pynguin-0.47.0/tests/slicer/test_assertionslicer.py +234 -0
  317. pynguin-0.47.0/tests/slicer/test_dependencies.py +466 -0
  318. pynguin-0.47.0/tests/slicer/test_expected_failures.py +703 -0
  319. pynguin-0.47.0/tests/slicer/test_language_features.py +1495 -0
  320. pynguin-0.47.0/tests/slicer/test_statementslicer.py +330 -0
  321. pynguin-0.47.0/tests/slicer/util.py +200 -0
  322. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/test_cli.py +1 -7
  323. pynguin-0.47.0/tests/test_generator.py +504 -0
  324. pynguin-0.47.0/tests/testcase/__init__.py +6 -0
  325. pynguin-0.47.0/tests/testcase/_builders.py +106 -0
  326. pynguin-0.47.0/tests/testcase/execution/__init__.py +6 -0
  327. pynguin-0.47.0/tests/testcase/execution/test_executedinstruction.py +22 -0
  328. pynguin-0.47.0/tests/testcase/execution/test_executionmocking.py +48 -0
  329. pynguin-0.47.0/tests/testcase/execution/test_executionresult.py +64 -0
  330. pynguin-0.47.0/tests/testcase/execution/test_executiontrace.py +83 -0
  331. pynguin-0.47.0/tests/testcase/execution/test_moduleprovider.py +83 -0
  332. pynguin-0.47.0/tests/testcase/execution/test_outputsuppression.py +165 -0
  333. pynguin-0.47.0/tests/testcase/execution/test_returntype.py +139 -0
  334. pynguin-0.47.0/tests/testcase/execution/test_subprocesstestcaseexecutor.py +290 -0
  335. pynguin-0.47.0/tests/testcase/execution/test_subprocesstestcaseexecutor_differential.py +36 -0
  336. pynguin-0.47.0/tests/testcase/execution/test_subprocesstestcaseexecutor_integration.py +280 -0
  337. pynguin-0.47.0/tests/testcase/execution/test_testcaseexecutor_integration.py +234 -0
  338. pynguin-0.47.0/tests/testcase/execution/test_tuple_deconstruction_integration.py +108 -0
  339. pynguin-0.47.0/tests/testcase/execution/test_typetracing.py +269 -0
  340. pynguin-0.47.0/tests/testcase/export/__init__.py +6 -0
  341. pynguin-0.47.0/tests/testcase/export/conftest.py +14 -0
  342. pynguin-0.47.0/tests/testcase/export/test_export.py +731 -0
  343. pynguin-0.47.0/tests/testcase/statements/__init__.py +6 -0
  344. pynguin-0.47.0/tests/testcase/test_collection_tracker.py +435 -0
  345. pynguin-0.47.0/tests/testcase/test_constant_seeding_integration.py +76 -0
  346. pynguin-0.47.0/tests/testcase/test_literalgen.py +783 -0
  347. pynguin-0.47.0/tests/testcase/test_llmlocalsearch.py +214 -0
  348. pynguin-0.47.0/tests/testcase/test_localsearch.py +471 -0
  349. pynguin-0.47.0/tests/testcase/test_localsearchstatement.py +545 -0
  350. pynguin-0.47.0/tests/testcase/test_localsearchtimer.py +28 -0
  351. pynguin-0.47.0/tests/testcase/test_ml_testfactory.py +381 -0
  352. pynguin-0.47.0/tests/testcase/test_testcase.py +249 -0
  353. pynguin-0.47.0/tests/testcase/test_testfactory.py +1624 -0
  354. pynguin-0.47.0/tests/testcase/variable/__init__.py +6 -0
  355. pynguin-0.47.0/tests/utils/__init__.py +6 -0
  356. pynguin-0.47.0/tests/utils/generic/__init__.py +6 -0
  357. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/generic/test_genericaccessibleobject.py +46 -0
  358. pynguin-0.47.0/tests/utils/pynguinml/__init__.py +6 -0
  359. pynguin-0.47.0/tests/utils/pynguinml/test_ml_testfactory_utils.py +380 -0
  360. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/pynguinml/test_ml_testing_resources.py +3 -3
  361. pynguin-0.47.0/tests/utils/pynguinml/test_pynguinml_integration.py +61 -0
  362. pynguin-0.47.0/tests/utils/stats/__init__.py +6 -0
  363. pynguin-0.47.0/tests/utils/stats/test_outputvariablefactory.py +196 -0
  364. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/stats/test_runtimevariable.py +9 -3
  365. pynguin-0.47.0/tests/utils/stats/test_searchstatistics.py +193 -0
  366. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_configuration_writer.py +150 -28
  367. pynguin-0.47.0/tests/utils/test_controlflowdistance.py +215 -0
  368. pynguin-0.47.0/tests/utils/test_execution_recorder.py +80 -0
  369. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_logging_utils.py +2 -4
  370. pynguin-0.47.0/tests/utils/test_naming.py +71 -0
  371. pynguin-0.47.0/tests/utils/test_report.py +546 -0
  372. pynguin-0.47.0/tests/utils/test_string_subtype_integration.py +61 -0
  373. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_type_utils.py +190 -0
  374. pynguin-0.47.0/tests/utils/test_typeevalpy_integration.py +233 -0
  375. pynguin-0.47.0/tests/utils/test_typeevalpy_json_schema.py +439 -0
  376. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_typetracing.py +4 -4
  377. pynguin-0.47.0/tests/utils/utils.py +111 -0
  378. pynguin-0.46.0.dev0/src/pynguin/analysis/__init__.py +0 -26
  379. pynguin-0.46.0.dev0/src/pynguin/analysis/models.py +0 -105
  380. pynguin-0.46.0.dev0/src/pynguin/analysis/module_analyzer.py +0 -525
  381. pynguin-0.46.0.dev0/src/pynguin/analysis/type_utils.py +0 -101
  382. pynguin-0.46.0.dev0/src/pynguin/assertion/assertion.py +0 -304
  383. pynguin-0.46.0.dev0/src/pynguin/assertion/assertiongenerator.py +0 -140
  384. pynguin-0.46.0.dev0/src/pynguin/assertion/assertiontraceobserver.py +0 -164
  385. pynguin-0.46.0.dev0/src/pynguin/assertion/mutation_analysis/mutators.py +0 -121
  386. pynguin-0.46.0.dev0/src/pynguin/evolution/__init__.py +0 -7
  387. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/__init__.py +0 -28
  388. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/archive.py +0 -142
  389. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/base.py +0 -111
  390. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/codamosa.py +0 -58
  391. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/dynamosa.py +0 -459
  392. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/mio.py +0 -172
  393. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/observer.py +0 -83
  394. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/random.py +0 -139
  395. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/stopping_conditions.py +0 -170
  396. pynguin-0.46.0.dev0/src/pynguin/evolution/algorithms/wholesuite.py +0 -194
  397. pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/__init__.py +0 -13
  398. pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/base.py +0 -35
  399. pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/individual.py +0 -50
  400. pynguin-0.46.0.dev0/src/pynguin/evolution/chromosomes/suite.py +0 -138
  401. pynguin-0.46.0.dev0/src/pynguin/evolution/factory.py +0 -78
  402. pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/__init__.py +0 -25
  403. pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/base.py +0 -65
  404. pynguin-0.46.0.dev0/src/pynguin/evolution/fitness/coverage.py +0 -245
  405. pynguin-0.46.0.dev0/src/pynguin/evolution/minimization.py +0 -289
  406. pynguin-0.46.0.dev0/src/pynguin/evolution/operators/crossover.py +0 -201
  407. pynguin-0.46.0.dev0/src/pynguin/evolution/operators/mutation.py +0 -245
  408. pynguin-0.46.0.dev0/src/pynguin/evolution/operators/selection.py +0 -63
  409. pynguin-0.46.0.dev0/src/pynguin/execution/executor.py +0 -270
  410. pynguin-0.46.0.dev0/src/pynguin/execution/isolation.py +0 -313
  411. pynguin-0.46.0.dev0/src/pynguin/execution/observer.py +0 -40
  412. pynguin-0.46.0.dev0/src/pynguin/execution/subprocess_executor.py +0 -235
  413. pynguin-0.46.0.dev0/src/pynguin/generator.py +0 -609
  414. pynguin-0.46.0.dev0/src/pynguin/output/writer.py +0 -329
  415. pynguin-0.46.0.dev0/src/pynguin/testcase/testcase.py +0 -291
  416. pynguin-0.46.0.dev0/src/pynguin/testcase/testfactory.py +0 -740
  417. pynguin-0.46.0.dev0/src/pynguin/utils/ast_util.py +0 -218
  418. pynguin-0.46.0.dev0/src/pynguin/utils/llm.py +0 -165
  419. pynguin-0.46.0.dev0/src/pynguin/utils/naming.py +0 -21
  420. pynguin-0.46.0.dev0/src/pynguin/utils/namingscope.py +0 -191
  421. pynguin-0.46.0.dev0/src/pynguin/utils/statistics/statisticsobserver.py +0 -110
  422. pynguin-0.46.0.dev0/tests/analyses/test_staticconstantseeding.py +0 -46
  423. pynguin-0.46.0.dev0/tests/analyses/test_type_inference.py +0 -134
  424. pynguin-0.46.0.dev0/tests/analysis/test_module_analyzer.py +0 -131
  425. pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/operators/test_misc.py +0 -290
  426. pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/test_mutators.py +0 -152
  427. pynguin-0.46.0.dev0/tests/assertion/test_assertiongenerator.py +0 -38
  428. pynguin-0.46.0.dev0/tests/evolution/test_chromosomes.py +0 -146
  429. pynguin-0.46.0.dev0/tests/execution/test_executor.py +0 -170
  430. pynguin-0.46.0.dev0/tests/resources/__init__.py +0 -0
  431. pynguin-0.46.0.dev0/tests/resources/typeevalpy/__init__.py +0 -0
  432. pynguin-0.46.0.dev0/tests/testcase/test_new_testcase.py +0 -161
  433. pynguin-0.46.0.dev0/tests/testcase/test_testfactory_static.py +0 -144
  434. pynguin-0.46.0.dev0/tests/utils/utils.py +0 -46
  435. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/LICENSE.rst +0 -0
  436. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/LICENSES/Apache-2.0.txt +0 -0
  437. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/LICENSES/BSD-2-Clause.txt +0 -0
  438. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/LICENSES/CC-BY-4.0.txt +0 -0
  439. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/LICENSES/CC0-1.0.txt +0 -0
  440. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/LICENSES/MIT.txt +0 -0
  441. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/__init__.py +0 -0
  442. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/__main__.py +0 -0
  443. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/AGENTS.md +0 -0
  444. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/__init__.py +0 -0
  445. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/modulecomplexity.py +0 -0
  446. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/string_subtype_inference.py +0 -0
  447. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/analyses/string_subtypes.py +0 -0
  448. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/AGENTS.md +0 -0
  449. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/__init__.py +0 -0
  450. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/AGENTS.md +0 -0
  451. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/__init__.py +0 -0
  452. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/AGENTS.md +0 -0
  453. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/arithmetic.py +0 -0
  454. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/base.py +0 -0
  455. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/decorator.py +0 -0
  456. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/operators/loop.py +0 -0
  457. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/strategies.py +0 -0
  458. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/assertion/mutation_analysis/transformer.py +0 -0
  459. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/AGENTS.md +0 -0
  460. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/__init__.py +0 -0
  461. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/version/AGENTS.md +0 -0
  462. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/version/__init__.py +0 -0
  463. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/version/common.py +0 -0
  464. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/version/python3_12.py +0 -0
  465. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/instrumentation/version/python3_14.py +0 -0
  466. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/master_worker/AGENTS.md +0 -0
  467. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/master_worker/__init__.py +0 -0
  468. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/master_worker/client.py +0 -0
  469. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/master_worker/master.py +0 -0
  470. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/master_worker/worker.py +0 -0
  471. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/AGENTS.md +0 -0
  472. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/__init__.py +0 -0
  473. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/coverage-template.html +0 -0
  474. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/__init__.py +0 -0
  475. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/camel_case.fan +0 -0
  476. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/colour.fan +0 -0
  477. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/csv.fan +0 -0
  478. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/delimited.fan +0 -0
  479. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/email.fan +0 -0
  480. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/__init__.py +0 -0
  481. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/camel_case.fan +0 -0
  482. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/colour.fan +0 -0
  483. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/csv.fan +0 -0
  484. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/delimited.fan +0 -0
  485. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/email.fan +0 -0
  486. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/ipv4.fan +0 -0
  487. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/standard_date.fan +0 -0
  488. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/unix_path.fan +0 -0
  489. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/faker/xml.fan +0 -0
  490. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/ipv4.fan +0 -0
  491. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/numeric.fan +0 -0
  492. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/standard_date.fan +0 -0
  493. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/unix_path.fan +0 -0
  494. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/resources/fans/xml.fan +0 -0
  495. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/testcase/__init__.py +0 -0
  496. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/__init__.py +0 -0
  497. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/atomicinteger.py +0 -0
  498. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/collection_utils.py +0 -0
  499. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/exceptions.py +0 -0
  500. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/fandango_faker_utils.py +0 -0
  501. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/fs_isolation.py +0 -0
  502. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/generic/AGENTS.md +0 -0
  503. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/generic/__init__.py +0 -0
  504. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/logging_utils.py +0 -0
  505. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/mirror.py +0 -0
  506. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/mutation_utils.py +0 -0
  507. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/orderedset.py +0 -0
  508. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/pynguinml/AGENTS.md +0 -0
  509. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/pynguinml/__init__.py +0 -0
  510. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/pynguinml/ml_parsing_utils.py +0 -0
  511. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/pynguinml/ml_testing_resources.py +0 -0
  512. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/pynguinml/mlparameter.py +0 -0
  513. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/pynguinml/np_rng.py +0 -0
  514. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/randomness.py +0 -0
  515. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/statistics/AGENTS.md +0 -0
  516. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/statistics/__init__.py +0 -0
  517. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/src/pynguin/utils/statistics/statisticsbackend.py +0 -0
  518. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/AGENTS.md +0 -0
  519. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/__init__.py +0 -0
  520. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/analyses/__init__.py +0 -0
  521. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/analyses/test_modulecomplexity.py +0 -0
  522. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/analyses/test_string_subtypes.py +0 -0
  523. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/analyses/test_typesystem_string_subtypes.py +0 -0
  524. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/AGENTS.md +0 -0
  525. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/__init__.py +0 -0
  526. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/__init__.py +0 -0
  527. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/operators/AGENTS.md +0 -0
  528. {pynguin-0.46.0.dev0/tests/analysis → pynguin-0.47.0/tests/assertion/mutation_analysis/operators}/__init__.py +0 -0
  529. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/operators/test_arithmetic.py +0 -0
  530. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/operators/test_decorator.py +0 -0
  531. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/operators/test_loop.py +0 -0
  532. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/assertion/mutation_analysis/test_strategies.py +0 -0
  533. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/AGENTS.md +0 -0
  534. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/__init__.py +0 -0
  535. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/accessibles/__init__.py +0 -0
  536. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/branchcoverage/__init__.py +0 -0
  537. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/branchcoverage/nestedbranches.py +0 -0
  538. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/branchcoverage/nobranches.py +0 -0
  539. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/branchcoverage/simplenesting.py +0 -0
  540. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/branchcoverage/singlebranches.py +0 -0
  541. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/branchcoverage/twomethodsinglebranches.py +0 -0
  542. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/c/__init__.py +0 -0
  543. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/c/my_ctypes.py +0 -0
  544. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/__init__.py +0 -0
  545. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/abstract.py +0 -0
  546. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/alias_module.py +0 -0
  547. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/async_class_gen.py +0 -0
  548. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/async_class_method.py +0 -0
  549. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/async_func.py +0 -0
  550. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/async_gen.py +0 -0
  551. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/attributes.py +0 -0
  552. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/blacklist.py +0 -0
  553. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/blacklist_transitive.py +0 -0
  554. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/comments.py +0 -0
  555. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/complex_dependencies.py +0 -0
  556. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/complex_dependency.py +0 -0
  557. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/conditional_import.py +0 -0
  558. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/dependency.py +0 -0
  559. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/diamond_bottom.py +0 -0
  560. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/diamond_left.py +0 -0
  561. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/diamond_right.py +0 -0
  562. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/diamond_top.py +0 -0
  563. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/enums.py +0 -0
  564. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/import_dependency.py +0 -0
  565. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/inheritance.py +0 -0
  566. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/lambda.py +0 -0
  567. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/nested_functions.py +0 -0
  568. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/no_any_annotations.py +0 -0
  569. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/no_dependencies.py +0 -0
  570. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/overridden_inherited_methods.py +0 -0
  571. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/simple_dependencies.py +0 -0
  572. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/typing_parameters.py +0 -0
  573. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/cluster/uses_async_dependency.py +0 -0
  574. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/crash/__init__.py +0 -0
  575. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/crash/partly_crashing.py +0 -0
  576. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/crash/seg_fault.py +0 -0
  577. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/duckmock/__init__.py +0 -0
  578. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/duckmock/complex.py +0 -0
  579. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/errors/__init__.py +0 -0
  580. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/errors/import_error.py +0 -0
  581. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/AGENTS.md +0 -0
  582. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/__init__.py +0 -0
  583. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/assertions.py +0 -0
  584. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/basket.py +0 -0
  585. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/calculator.py +0 -0
  586. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/calculator_simple.py +0 -0
  587. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/collections.py +0 -0
  588. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/constructors.py +0 -0
  589. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/difficult.py +0 -0
  590. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/dummies.py +0 -0
  591. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/dynamosa_example.py +0 -0
  592. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/enums.py +0 -0
  593. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/exceptions.py +0 -0
  594. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/flaky.py +0 -0
  595. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/impossible.py +0 -0
  596. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/inheritance.py +0 -0
  597. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/loop.py +0 -0
  598. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/module_alias.py +0 -0
  599. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/monkey.py +0 -0
  600. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/nested.py +0 -0
  601. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/objects.py +0 -0
  602. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/private_methods.py +0 -0
  603. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/queue.py +0 -0
  604. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/simple.py +0 -0
  605. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/triangle.py +0 -0
  606. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/type_inference.py +0 -0
  607. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/type_tracing/__init__.py +0 -0
  608. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/type_tracing/geometry.py +0 -0
  609. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/type_tracing/invoice.py +0 -0
  610. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/type_tracing/large_test_cluster.py +0 -0
  611. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/type_tracing/mixed.py +0 -0
  612. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/type_tracing/string_subtype.py +0 -0
  613. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/examples/unasserted_exceptions.py +0 -0
  614. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/grammar/__init__.py +0 -0
  615. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/grammar/parameters.py +0 -0
  616. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/AGENTS.md +0 -0
  617. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/__init__.py +0 -0
  618. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/comparison.py +0 -0
  619. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/covered_branches.py +0 -0
  620. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/covered_classes.py +0 -0
  621. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/covered_functions.py +0 -0
  622. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/covered_lines.py +0 -0
  623. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/excluded_blocks.py +0 -0
  624. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/inherited.py +0 -0
  625. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/instrumentation/mixed.py +0 -0
  626. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/linecoverage/__init__.py +0 -0
  627. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/linecoverage/artificial_none.py +0 -0
  628. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/linecoverage/emptyfile.py +0 -0
  629. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/linecoverage/exception.py +0 -0
  630. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/linecoverage/list.py +0 -0
  631. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/linecoverage/plus.py +0 -0
  632. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/linecoverage/setter_getter.py +0 -0
  633. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/mutation/__init__.py +0 -0
  634. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/mutation/exception.py +0 -0
  635. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/mutation/expected.py +0 -0
  636. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/mutation/mutation.py +0 -0
  637. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/mutation/timeout.py +0 -0
  638. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/programgraph/__init__.py +0 -0
  639. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/programgraph/samples.py +0 -0
  640. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/programgraph/whileloop.py +0 -0
  641. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/programgraph/yield_fun.py +0 -0
  642. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/regression/__init__.py +0 -0
  643. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/regression/argparse_sys_exit.py +0 -0
  644. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/regression/custom_error.py +0 -0
  645. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/regression/not_main.py +0 -0
  646. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/__init__.py +0 -0
  647. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/dynamicseeding/__init__.py +0 -0
  648. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/dynamicseeding/dynamicseedingdummies.py +0 -0
  649. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/__init__.py +0 -0
  650. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/dummycontainer.py +0 -0
  651. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/__init__.py +0 -0
  652. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/assertseed_test_.py +0 -0
  653. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/classseed_test_.py +0 -0
  654. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collfuncseed_test_.py +0 -0
  655. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collseed_test_.py +0 -0
  656. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/nestedseed_test_.py +0 -0
  657. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notknowncall_test_.py +0 -0
  658. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notprimseed_test_.py +0 -0
  659. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/primitiveseed_test_.py +0 -0
  660. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/triangleseed_test_.py +0 -0
  661. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongassignseed_test_.py +0 -0
  662. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongfunctionnameseed_test_.py +0 -0
  663. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/staticconstantseeding/__init__.py +0 -0
  664. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/staticconstantseeding/dummy/__init__.py +0 -0
  665. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/staticconstantseeding/dummy/dummy.py +0 -0
  666. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/seeding/staticconstantseeding/dummy/empty.so +0 -0
  667. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/__init__.py +0 -0
  668. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/attribute_dependencies.py +0 -0
  669. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/closure.py +0 -0
  670. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/generator.py +0 -0
  671. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/immutable_attribute_dependency.py +0 -0
  672. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/import_star_def.py +0 -0
  673. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/import_star_main.py +0 -0
  674. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/partial_cover_dependency.py +0 -0
  675. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/simple_call.py +0 -0
  676. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/slicer/simple_call_arg.py +0 -0
  677. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/test.conf +0 -0
  678. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/test.conf.license +0 -0
  679. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/tests/typeinference/test_stubstrategy.pyi +0 -0
  680. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/type_tracing/__init__.py +0 -0
  681. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/type_tracing/return_types.py +0 -0
  682. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/type_tracing/union_type.py +0 -0
  683. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/types/__init__.py +0 -0
  684. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/types/outside.py +0 -0
  685. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/types/subtyping.py +0 -0
  686. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/fixtures/types/symbols.py +0 -0
  687. {pynguin-0.46.0.dev0/tests/instrumentation → pynguin-0.47.0/tests/ga}/__init__.py +0 -0
  688. {pynguin-0.46.0.dev0/tests/testcase → pynguin-0.47.0/tests/ga/operators}/__init__.py +0 -0
  689. {pynguin-0.46.0.dev0/tests/utils → pynguin-0.47.0/tests/ga/operators/crossover}/__init__.py +0 -0
  690. {pynguin-0.46.0.dev0/tests/utils/generic → pynguin-0.47.0/tests/ga/operators/ranking}/__init__.py +0 -0
  691. {pynguin-0.46.0.dev0/tests/utils/pynguinml → pynguin-0.47.0/tests/ga/operators/selection}/__init__.py +0 -0
  692. {pynguin-0.46.0.dev0/tests/utils/stats → pynguin-0.47.0/tests/ga/stoppingconditions}/__init__.py +0 -0
  693. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/instrumentation/AGENTS.md +0 -0
  694. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/instrumentation/test_cfg.py +0 -0
  695. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/instrumentation/test_controldependencegraph.py +0 -0
  696. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/instrumentation/test_programgraph.py +0 -0
  697. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/instrumentation/test_version.py +0 -0
  698. {pynguin-0.46.0.dev0/tests/assertion/mutation_analysis/operators → pynguin-0.47.0/tests/large_language_model/prompts}/__init__.py +0 -0
  699. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/master_worker/__init__.py +0 -0
  700. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/master_worker/test_master.py +0 -0
  701. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/master_worker/test_worker.py +0 -0
  702. {pynguin-0.46.0.dev0/tests/evolution → pynguin-0.47.0/tests/resources}/__init__.py +0 -0
  703. {pynguin-0.46.0.dev0/tests/execution → pynguin-0.47.0/tests/resources/typeevalpy}/__init__.py +0 -0
  704. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/resources/typeevalpy/dummy.py +0 -0
  705. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/resources/typeevalpy/dummy_gt.json +0 -0
  706. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/resources/typeevalpy/dummy_gt.json.license +0 -0
  707. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/test___main__.py +0 -0
  708. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/testcase/AGENTS.md +0 -0
  709. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/testutils.py +0 -0
  710. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/pynguinml/test_ml_parsing_utils.py +0 -0
  711. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/pynguinml/test_mlparameter.py +0 -0
  712. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/pynguinml/test_np_rng.py +0 -0
  713. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/stats/test_statistics.py +0 -0
  714. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/stats/test_statisticsbackend.py +0 -0
  715. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_atomicinteger.py +0 -0
  716. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_collection_utils.py +0 -0
  717. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_exceptions.py +0 -0
  718. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_fandango_faker_utils.py +0 -0
  719. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_fs_isolation.py +0 -0
  720. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_llm.py +0 -0
  721. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_mirror.py +0 -0
  722. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_mutation_utils.py +0 -0
  723. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_orderedset.py +0 -0
  724. {pynguin-0.46.0.dev0 → pynguin-0.47.0}/tests/utils/test_randomness.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pynguin
3
- Version: 0.46.0.dev0
3
+ Version: 0.47.0
4
4
  Summary: Pynguin is a tool for automated unit test generation for Python
5
5
  License: MIT
6
6
  Keywords: unit test,random testing,search based,test generation
@@ -33,8 +33,6 @@ Provides-Extra: openai
33
33
  Provides-Extra: typing
34
34
  Requires-Dist: Jinja2 (>=3.1.6,<4.0.0)
35
35
  Requires-Dist: Pygments (>=2.19.2,<3.0.0)
36
- Requires-Dist: asciitree (>=0.3.3,<0.4.0)
37
- Requires-Dist: astroid (>=4.0.1,<5.0.0)
38
36
  Requires-Dist: black (>=25.1.0,<26.0.0)
39
37
  Requires-Dist: bytecode (==0.17.0)
40
38
  Requires-Dist: dill (>=0.4.0,<0.5.0)
@@ -49,14 +47,14 @@ Requires-Dist: openai (>=1.72.0,<2.0.0) ; extra == "openai"
49
47
  Requires-Dist: psutil (>=7.1.1,<8.0.0)
50
48
  Requires-Dist: pytest (>=8.3.5,<9.0.0)
51
49
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0) ; extra == "openai"
50
+ Requires-Dist: pyyaml (>=6.0.2,<7.0.0) ; extra == "openai"
52
51
  Requires-Dist: rich (>=14.0.0,<15.0.0)
53
52
  Requires-Dist: rstr (>=3.2.2,<4.0.0)
54
53
  Requires-Dist: setuptools (>=80.9.0,<81.0.0)
55
54
  Requires-Dist: simple-parsing (>=0.1.7,<0.2.0)
56
55
  Requires-Dist: toml (>=0.10.2,<0.11.0)
56
+ Requires-Dist: typeshed-client (>=2.13.0,<3.0.0)
57
57
  Requires-Dist: typing-extensions (>=4.12.2,<5.0.0) ; extra == "typing"
58
- Requires-Dist: typing_inspect (>=0.9.0,<0.10.0)
59
- Requires-Dist: xmltodict (>=0.14.2,<0.15.0) ; extra == "fandango-faker"
60
58
  Project-URL: Documentation, https://pynguin.readthedocs.io
61
59
  Project-URL: Homepage, https://www.pynguin.eu
62
60
  Project-URL: Repository, https://github.com/se2p/pynguin
@@ -82,7 +80,7 @@ is a tool that allows developers to generate unit tests automatically.
82
80
  Testing software is often considered to be a tedious task.
83
81
  Thus, automated generation techniques have been proposed and mature tools exist—for
84
82
  statically typed languages, such as Java.
85
- There is, however, no fully-automated tool available that produces unit tests for
83
+ There is, however, no fully automated tool available that produces unit tests for
86
84
  general-purpose programs in a dynamically typed language.
87
85
  Pynguin is, to the best of our knowledge, the first tool that fills this gap
88
86
  and allows the automated generation of unit tests for Python programs.
@@ -129,7 +127,7 @@ please report your experiences in using Pynguin to us.
129
127
  ## Prerequisites
130
128
 
131
129
  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).
130
+ - You have installed Python 3.10 (the support for 3.11, 3.12, 3.13, and 3.14 is experimental).
133
131
 
134
132
  **Attention:** Pynguin now requires at least Python 3.10! Older versions are no longer
135
133
  supported!
@@ -190,13 +188,16 @@ Pynguin is developed at the
190
188
  [Chair of Software Engineering II](https://www.fim.uni-passau.de/lehrstuhl-fuer-software-engineering-ii/)
191
189
  of the [University of Passau](https://www.uni-passau.de).
192
190
 
193
- Maintainers: [Stephan Lukasczyk](https://github.com/stephanlukasczyk), [Lukas Krodinger](https://github.com/LuKrO2011)
191
+ Maintainer: [Lukas Krodinger](https://github.com/LuKrO2011)
192
+
193
+ Former Maintainer: [Stephan Lukasczyk](https://codeberg.org/stephanlukasczyk)
194
194
 
195
195
  Contributors:
196
196
  - [Lukas Vögl](https://github.com/lvoegl)
197
197
  - [Louis Leppelmann](https://github.com/Tudeldu)
198
198
  - [Alexander Wüst](https://github.com/Ravaqor)
199
199
  - [Altin Hajdari](https://github.com/AltinHajdari)
200
+ - [Ahmed Abidi](https://github.com/AhmedHedi0)
200
201
  - [Abdelillah Aissani](https://github.com/Abassion)
201
202
  - [Juan Altmayer Pizzorno](https://github.com/jaltmayerpizzorno)
202
203
  - [Lucas Berg](https://github.com/BergLucas)
@@ -215,9 +216,9 @@ Contributors:
215
216
 
216
217
  ### Development using PyCharm.
217
218
 
218
- If you want to use the PyCharm IDE you have to set up a few things:
219
+ If you want to use the PyCharm IDE, you have to set up a few things:
219
220
  1. Import `pynguin` into PyCharm.
220
- 2. Let PyCharm configure configure a virtual environment using `poetry`.
221
+ 2. Let PyCharm configure a virtual environment using `poetry`.
221
222
  3. Set the default test runner to `pytest`
222
223
  4. Set the DocString format to `Google`
223
224
 
@@ -226,9 +227,9 @@ If you want to use the PyCharm IDE you have to set up a few things:
226
227
 
227
228
  This project is licensed under the terms of the [MIT License](LICENSE.rst).
228
229
  Pynguin was using the GNU Lesser General Public License (LGPL) until version 0.29.0,
229
- its licence was changed with version 0.30.0.
230
+ its license was changed with version 0.30.0.
230
231
 
231
232
  ## Star History
232
233
 
233
- [![Star History Chart](https://api.star-history.com/svg?repos=se2p/pynguin&type=Date)](https://star-history.com/#se2p/pynguin)
234
+ [![Star History Chart](https://star-history.dera.page/svg?repos=se2p/pynguin&type=Date)](https://star-history.dera.page/#se2p/pynguin)
234
235
 
@@ -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,13 +126,16 @@ 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
- Maintainers: [Stephan Lukasczyk](https://github.com/stephanlukasczyk), [Lukas Krodinger](https://github.com/LuKrO2011)
129
+ Maintainer: [Lukas Krodinger](https://github.com/LuKrO2011)
130
+
131
+ Former Maintainer: [Stephan Lukasczyk](https://codeberg.org/stephanlukasczyk)
130
132
 
131
133
  Contributors:
132
134
  - [Lukas Vögl](https://github.com/lvoegl)
133
135
  - [Louis Leppelmann](https://github.com/Tudeldu)
134
136
  - [Alexander Wüst](https://github.com/Ravaqor)
135
137
  - [Altin Hajdari](https://github.com/AltinHajdari)
138
+ - [Ahmed Abidi](https://github.com/AhmedHedi0)
136
139
  - [Abdelillah Aissani](https://github.com/Abassion)
137
140
  - [Juan Altmayer Pizzorno](https://github.com/jaltmayerpizzorno)
138
141
  - [Lucas Berg](https://github.com/BergLucas)
@@ -151,9 +154,9 @@ Contributors:
151
154
 
152
155
  ### Development using PyCharm.
153
156
 
154
- If you want to use the PyCharm IDE you have to set up a few things:
157
+ If you want to use the PyCharm IDE, you have to set up a few things:
155
158
  1. Import `pynguin` into PyCharm.
156
- 2. Let PyCharm configure configure a virtual environment using `poetry`.
159
+ 2. Let PyCharm configure a virtual environment using `poetry`.
157
160
  3. Set the default test runner to `pytest`
158
161
  4. Set the DocString format to `Google`
159
162
 
@@ -162,8 +165,8 @@ If you want to use the PyCharm IDE you have to set up a few things:
162
165
 
163
166
  This project is licensed under the terms of the [MIT License](LICENSE.rst).
164
167
  Pynguin was using the GNU Lesser General Public License (LGPL) until version 0.29.0,
165
- its licence was changed with version 0.30.0.
168
+ its license was changed with version 0.30.0.
166
169
 
167
170
  ## Star History
168
171
 
169
- [![Star History Chart](https://api.star-history.com/svg?repos=se2p/pynguin&type=Date)](https://star-history.com/#se2p/pynguin)
172
+ [![Star History Chart](https://star-history.dera.page/svg?repos=se2p/pynguin&type=Date)](https://star-history.dera.page/#se2p/pynguin)
@@ -4,7 +4,7 @@
4
4
 
5
5
  [tool.poetry]
6
6
  name = "pynguin"
7
- version = "0.46.0.dev"
7
+ version = "0.47.0"
8
8
  description = "Pynguin is a tool for automated unit test generation for Python"
9
9
  authors = [
10
10
  "Stephan Lukasczyk <stephan@pynguin.eu>",
@@ -51,7 +51,6 @@ include = [
51
51
 
52
52
  [tool.poetry.dependencies]
53
53
  python = ">=3.10, <3.15"
54
- astroid = "^4.0.1"
55
54
  black = "^25.1.0"
56
55
  bytecode = "0.17.0"
57
56
  dill = "^0.4.0"
@@ -62,21 +61,20 @@ rich = "^14.0.0"
62
61
  Pygments = "^2.19.2"
63
62
  pytest = "^8.3.5"
64
63
  simple-parsing = "^0.1.7"
65
- typing_inspect = "^0.9.0"
66
- asciitree = "^0.3.3"
67
64
  libcst = "^1.7.0"
68
65
  setuptools = "^80.9.0"
69
66
  toml = "^0.10.2"
70
67
  psutil = "^7.1.1"
71
68
  rstr = "^3.2.2"
72
69
  openai = { version = "^1.72.0", optional = true }
70
+ pyyaml = { version = "^6.0.2", optional = true }
73
71
  python-dotenv = { version = "^1.0.0", optional = true }
74
72
  numpy = { version = "^1.26.4", optional = true }
75
73
  mypy = { version = "^1.15.0", optional = true }
76
74
  typing-extensions = { version = "^4.12.2", optional = true }
77
75
  faker = { version = "^37.3.0", optional = true }
78
76
  fandango-fuzzer = { version = "^0.8.2", optional = true }
79
- xmltodict = { version = "^0.14.2", optional = true }
77
+ typeshed-client = "^2.13.0"
80
78
 
81
79
  [tool.poetry.group.dev.dependencies]
82
80
  mypy = "^1.15.0"
@@ -102,10 +100,10 @@ pytest-sugar = "^1.0.0"
102
100
  pytest-xdist = "^3.6.0"
103
101
 
104
102
  [tool.poetry.extras]
105
- openai = [ "openai", "python-dotenv" ]
103
+ openai = [ "openai", "python-dotenv", "pyyaml" ]
106
104
  numpy = [ "numpy" ]
107
105
  typing = [ "mypy", "typing-extensions" ]
108
- fandango-faker = [ "faker", "fandango-fuzzer", "xmltodict" ]
106
+ fandango-faker = [ "faker", "fandango-fuzzer" ]
109
107
 
110
108
  [tool.poetry.scripts]
111
109
  pynguin = "pynguin.cli:main"
@@ -149,6 +147,24 @@ warn_unused_ignores = true
149
147
  warn_redundant_casts = true
150
148
  warn_unused_configs = true
151
149
 
150
+ # The following modules belong to subsystems that were disabled (kept on disk but
151
+ # inert) during the libcst test-case representation migration. They still use the
152
+ # old per-statement representation API and are excluded from type checking until
153
+ # they are migrated. See TC_REPRESENTATION_PLAN.md.
154
+ [[tool.mypy.overrides]]
155
+ module = [
156
+ "pynguin.testcase.localsearch",
157
+ "pynguin.testcase.localsearchstatement",
158
+ "pynguin.testcase.llmlocalsearch",
159
+ "pynguin.analyses.seeding",
160
+ "pynguin.slicer.statementslicingobserver",
161
+ "pynguin.assertion.llmassertiongenerator",
162
+ "pynguin.large_language_model.parsing.deserializer",
163
+ "pynguin.large_language_model.parsing.helpers",
164
+ "pynguin.large_language_model.helpers.testcasereferencecopier",
165
+ ]
166
+ ignore_errors = true
167
+
152
168
  [tool.pytest.ini_options]
153
169
  testpaths = [
154
170
  "tests",
@@ -267,6 +283,11 @@ max-complexity = 10
267
283
  convention = "google"
268
284
 
269
285
  [tool.ruff.lint.per-file-ignores]
286
+ # The exported test-suite license header embeds the repo's SPDX copyright text,
287
+ # which uses an EN DASH in the year range (2019–2026).
288
+ "src/pynguin/testcase/export.py" = [
289
+ "RUF001", # String contains ambiguous EN DASH (part of the SPDX license header)
290
+ ]
270
291
  "tests/**/*.py" = [
271
292
  "D100", # Missing docstring in public module
272
293
  "D101", # Missing docstring in public class
@@ -6,4 +6,4 @@
6
6
  #
7
7
  """Specifies the version of Pynguin."""
8
8
 
9
- __version__ = "0.46.0.dev"
9
+ __version__ = "0.47.0"
@@ -0,0 +1,171 @@
1
+ # This file is part of Pynguin.
2
+ #
3
+ # SPDX-FileCopyrightText: 2019–2026 Pynguin Contributors
4
+ #
5
+ # SPDX-License-Identifier: MIT
6
+ #
7
+
8
+ """Utility functions for standard library ast nodes."""
9
+
10
+ from __future__ import annotations
11
+
12
+ import ast
13
+ from typing import TYPE_CHECKING, TypeVar, cast
14
+
15
+ _T = TypeVar("_T", bound=ast.AST)
16
+
17
+ if TYPE_CHECKING:
18
+ from collections.abc import Iterator
19
+
20
+
21
+ def _is_dataclass(class_node: ast.ClassDef) -> bool:
22
+ """Whether the class carries a ``@dataclass`` decorator.
23
+
24
+ Recognises ``@dataclass``, ``@dataclasses.dataclass`` and their called
25
+ forms (e.g. ``@dataclass(frozen=True)``).
26
+ """
27
+ for decorator in class_node.decorator_list:
28
+ target = decorator.func if isinstance(decorator, ast.Call) else decorator
29
+ if isinstance(target, ast.Name) and target.id == "dataclass":
30
+ return True
31
+ if isinstance(target, ast.Attribute) and target.attr == "dataclass":
32
+ return True
33
+ return False
34
+
35
+
36
+ def _is_class_var(annotation: ast.expr) -> bool:
37
+ """Whether an annotation is ``ClassVar`` / ``ClassVar[...]`` (any import form)."""
38
+ if isinstance(annotation, ast.Subscript):
39
+ annotation = annotation.value
40
+ if isinstance(annotation, ast.Name):
41
+ return annotation.id == "ClassVar"
42
+ if isinstance(annotation, ast.Attribute):
43
+ return annotation.attr == "ClassVar"
44
+ return False
45
+
46
+
47
+ def _flatten_target(target: ast.expr) -> list[ast.expr]:
48
+ """Flatten tuple/list assignment targets into their leaf expressions."""
49
+ if isinstance(target, (ast.Tuple, ast.List)):
50
+ leaves: list[ast.expr] = []
51
+ for element in target.elts:
52
+ leaves.extend(_flatten_target(element))
53
+ return leaves
54
+ return [target]
55
+
56
+
57
+ def _self_assigned_names(class_node: ast.ClassDef) -> Iterator[str]:
58
+ """Yield names assigned to ``self.<attr>`` in the class's own methods."""
59
+ for item in class_node.body:
60
+ if not isinstance(item, (ast.FunctionDef, ast.AsyncFunctionDef)):
61
+ continue
62
+ for node in ast.walk(item):
63
+ targets: list[ast.expr] = []
64
+ if isinstance(node, ast.Assign):
65
+ targets = list(node.targets)
66
+ elif isinstance(node, (ast.AnnAssign, ast.AugAssign)):
67
+ targets = [node.target]
68
+ for target in (leaf for tgt in targets for leaf in _flatten_target(tgt)):
69
+ if (
70
+ isinstance(target, ast.Attribute)
71
+ and isinstance(target.value, ast.Name)
72
+ and target.value.id == "self"
73
+ ):
74
+ yield target.attr
75
+
76
+
77
+ def _dataclass_field_names(class_node: ast.ClassDef) -> Iterator[str]:
78
+ """Yield annotated ``@dataclass`` field names (excluding ``ClassVar`` fields)."""
79
+ if not _is_dataclass(class_node):
80
+ return
81
+ for item in class_node.body:
82
+ if (
83
+ isinstance(item, ast.AnnAssign)
84
+ and isinstance(item.target, ast.Name)
85
+ and not _is_class_var(item.annotation)
86
+ ):
87
+ yield item.target.id
88
+
89
+
90
+ def instance_attributes(class_node: ast.ClassDef) -> tuple[str, ...]:
91
+ """Names assigned to ``self.<attr>`` in the class's own methods.
92
+
93
+ Mirrors ``astroid.ClassDef.instance_attrs`` (own class only, not inherited),
94
+ preserving first-seen order. For ``@dataclass`` classes the class-level
95
+ annotated fields are included as well (excluding ``ClassVar`` fields), since
96
+ astroid's dataclass support synthesises the corresponding ``__init__``
97
+ assignments.
98
+
99
+ Args:
100
+ class_node: The ClassDef AST node.
101
+
102
+ Returns:
103
+ A tuple of instance attribute names.
104
+ """
105
+ names: dict[str, None] = {}
106
+ for name in (*_dataclass_field_names(class_node), *_self_assigned_names(class_node)):
107
+ names.setdefault(name, None)
108
+ return tuple(names)
109
+
110
+
111
+ def nodes_of_class(tree: ast.AST, types: type[_T] | tuple[type[_T], ...]) -> Iterator[_T]:
112
+ """Yield all nodes (recursively, preorder DFS) that are instances of ``types``.
113
+
114
+ Args:
115
+ tree: The AST tree root.
116
+ types: Type or tuple of types to match.
117
+
118
+ Yields:
119
+ Nodes matching types.
120
+ """
121
+ stack = [tree]
122
+ while stack:
123
+ node = stack.pop()
124
+ if isinstance(node, types):
125
+ yield cast("_T", node)
126
+ # Push children in reverse order to visit them left-to-right
127
+ stack.extend(reversed(list(ast.iter_child_nodes(node))))
128
+
129
+
130
+ def scope_line_range(node: ast.AST) -> tuple[int, int]:
131
+ """Uniformly retrieve (lineno, end_lineno) for a node.
132
+
133
+ Args:
134
+ node: The AST node.
135
+
136
+ Returns:
137
+ A tuple of start and end line numbers.
138
+ """
139
+ if isinstance(node, ast.Module):
140
+ # A module's line number is 0 in the AST (matching astroid's
141
+ # ``Module.fromlineno`` and the ``<module>`` code object convention used
142
+ # by the instrumentation transformer), even though its body starts at 1.
143
+ if node.body:
144
+ return 0, node.body[-1].end_lineno or 0
145
+ return 0, 0
146
+ if isinstance(node, ast.match_case):
147
+ start = node.pattern.lineno
148
+ end = node.body[-1].end_lineno or start
149
+ return start, end
150
+ start = getattr(node, "lineno", 1)
151
+ end = getattr(node, "end_lineno", start) or start
152
+ return start, end
153
+
154
+
155
+ def scope_name(node: ast.AST) -> str:
156
+ """Retrieve name of a ScopeNode, matching astroid behavior.
157
+
158
+ Args:
159
+ node: The AST node representing the scope.
160
+
161
+ Returns:
162
+ The name of the scope.
163
+ """
164
+ if isinstance(node, ast.Module):
165
+ return ""
166
+ if isinstance(node, ast.Lambda):
167
+ return "<lambda>"
168
+ if isinstance(node, (ast.ListComp, ast.SetComp, ast.DictComp, ast.GeneratorExp)):
169
+ lineno = getattr(node, "lineno", 1)
170
+ return f"<generator-{lineno}>"
171
+ return getattr(node, "name", "")
@@ -140,6 +140,22 @@ class ConstantProvider(abc.ABC):
140
140
  A constant or None, if there is no constant # noqa: DAR202
141
141
  """
142
142
 
143
+ def get_all_constants_for(self, tp_: type[T]) -> OrderedSet[T]:
144
+ """Provide every constant value of the given type this provider knows.
145
+
146
+ Unlike :meth:`get_constant_for`, this ignores any per-provider selection
147
+ probability; it reports the full vocabulary reachable through this
148
+ provider. Used by generation strategies that need to inspect the pool
149
+ itself, e.g. to pick a plausible separator between seeded tokens.
150
+
151
+ Args:
152
+ tp_: The type to retrieve
153
+
154
+ Returns:
155
+ All constants of the given type; empty when there are none.
156
+ """
157
+ return OrderedSet()
158
+
143
159
 
144
160
  class EmptyConstantProvider(ConstantProvider):
145
161
  """Empty provider."""
@@ -169,6 +185,14 @@ class DelegatingConstantProvider(ConstantProvider, ABC):
169
185
  return self._pool.get_constant_for(tp_)
170
186
  return self._delegate.get_constant_for(tp_)
171
187
 
188
+ def get_all_constants_for(self, tp_: type[T]) -> OrderedSet[T]: # noqa: D102
189
+ delegated = self._delegate.get_all_constants_for(tp_)
190
+ if not delegated:
191
+ return self._pool.get_all_constants_for(tp_)
192
+ constants: OrderedSet[T] = OrderedSet(self._pool.get_all_constants_for(tp_))
193
+ constants.update(delegated)
194
+ return constants
195
+
172
196
 
173
197
  class DynamicConstantProvider(DelegatingConstantProvider):
174
198
  """Provide values collected during runtime."""
@@ -298,8 +322,16 @@ def collect_static_constants(
298
322
  exception,
299
323
  )
300
324
 
301
- # Check all modules discovered via packages
325
+ # Scope discovery to the top-level package(s) of the module(s) under test, so a
326
+ # project_path broader than the SUT (shared site-packages, monorepo, vendored deps)
327
+ # does not drown the SUT's constants in those of unrelated packages. With no module
328
+ # names known, fall back to all packages.
329
+ top_level_packages = {name.split(".")[0] for name in (module_names or ())}
330
+
331
+ # Check modules discovered via packages, scoped to the project when known
302
332
  for module in _find_modules_with_constants(project_path):
333
+ if top_level_packages and module.split("/")[0] not in top_level_packages:
334
+ continue
303
335
  _parse_file(path / module)
304
336
 
305
337
  # Check all modules explicitly specified