pynguin 0.34.0__tar.gz → 0.35.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 (363) hide show
  1. {pynguin-0.34.0 → pynguin-0.35.0}/PKG-INFO +15 -12
  2. {pynguin-0.34.0 → pynguin-0.35.0}/README.md +3 -0
  3. {pynguin-0.34.0 → pynguin-0.35.0}/pyproject.toml +117 -95
  4. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/__version__.py +1 -1
  5. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/constants.py +11 -11
  6. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/controlflow.py +12 -11
  7. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/module.py +76 -17
  8. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/modulecomplexity.py +14 -12
  9. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/seeding.py +14 -10
  10. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/syntaxtree.py +13 -11
  11. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/typesystem.py +60 -29
  12. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/assertion/assertion.py +7 -7
  13. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/assertion/assertion_to_ast.py +4 -1
  14. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/assertion/assertion_trace.py +9 -9
  15. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/assertion/assertiongenerator.py +1 -1
  16. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/assertion/assertiontraceobserver.py +3 -2
  17. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/cli.py +1 -4
  18. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/abstractmosaalgorithm.py +2 -2
  19. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/dynamosaalgorithm.py +10 -10
  20. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/generationalgorithm.py +7 -7
  21. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/mosaalgorithm.py +3 -3
  22. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/randomalgorithm.py +3 -3
  23. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/wholesuitealgorithm.py +2 -3
  24. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/chromosome.py +18 -54
  25. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/computations.py +12 -13
  26. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/coveragegoals.py +13 -9
  27. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/generationalgorithmfactory.py +6 -6
  28. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/operators/ranking.py +2 -2
  29. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/searchobserver.py +2 -2
  30. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/stoppingcondition.py +3 -3
  31. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/testcasechromosome.py +4 -4
  32. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/testcasefactory.py +3 -3
  33. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/testsuitechromosome.py +25 -34
  34. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/generator.py +18 -17
  35. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/instrumentation/instrumentation.py +28 -28
  36. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/instrumentation/machinery.py +4 -3
  37. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/slicer/dynamicslicer.py +26 -26
  38. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/slicer/executionflowbuilder.py +11 -10
  39. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/slicer/stack/stackeffect.py +5 -5
  40. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/slicer/stack/stacksimulation.py +8 -8
  41. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/slicer/statementslicingobserver.py +9 -9
  42. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/defaulttestcase.py +2 -3
  43. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/execution.py +57 -31
  44. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/export.py +12 -11
  45. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/statement.py +27 -21
  46. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/statement_to_ast.py +30 -20
  47. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/testcase.py +2 -2
  48. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/testfactory.py +23 -13
  49. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/variablereference.py +13 -9
  50. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/ast_util.py +7 -6
  51. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/controlflowdistance.py +8 -3
  52. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/generic/genericaccessibleobject.py +4 -6
  53. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/orderedset.py +14 -24
  54. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/randomness.py +1 -1
  55. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/report.py +2 -2
  56. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/statistics/outputvariablefactory.py +5 -7
  57. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/statistics/statistics.py +37 -19
  58. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/statistics/statisticsbackend.py +2 -2
  59. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/type_utils.py +2 -2
  60. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/typetracing.py +9 -8
  61. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_module.py +15 -3
  62. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/test_assertion_trace.py +6 -6
  63. pynguin-0.35.0/tests/fixtures/cluster/alias_module.py +14 -0
  64. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/test_dynamosaalgorithm.py +14 -6
  65. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_computations.py +6 -6
  66. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_coveragegoals.py +3 -3
  67. {pynguin-0.34.0 → pynguin-0.35.0}/tests/instrumentation/test_instrumentation.py +22 -1
  68. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/util.py +12 -12
  69. {pynguin-0.34.0 → pynguin-0.35.0}/tests/test_generator.py +7 -2
  70. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/test_testfactory.py +43 -27
  71. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/stats/test_searchstatistics.py +2 -2
  72. {pynguin-0.34.0 → pynguin-0.35.0}/LICENSE.rst +0 -0
  73. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/__init__.py +4 -4
  74. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/__main__.py +0 -0
  75. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/__init__.py +0 -0
  76. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/analyses/type4py_api.py +0 -0
  77. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/assertion/__init__.py +0 -0
  78. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/assertion/mutation_analysis/__init__.py +0 -0
  79. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/assertion/mutation_analysis/mutationadapter.py +0 -0
  80. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/configuration.py +0 -0
  81. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/__init__.py +0 -0
  82. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/__init__.py +0 -0
  83. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/archive.py +0 -0
  84. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/mioalgorithm.py +0 -0
  85. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/algorithms/randomsearchalgorithm.py +0 -0
  86. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/chromosomefactory.py +0 -0
  87. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/chromosomevisitor.py +0 -0
  88. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/operators/__init__.py +0 -0
  89. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/operators/comparator.py +0 -0
  90. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/operators/crossover.py +0 -0
  91. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/operators/selection.py +0 -0
  92. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/postprocess.py +0 -0
  93. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/testcasechromosomefactory.py +0 -0
  94. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/ga/testsuitechromosomefactory.py +0 -0
  95. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/instrumentation/__init__.py +0 -0
  96. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/resources/__init__.py +0 -0
  97. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/resources/coverage-template.html +0 -0
  98. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/slicer/__init__.py +0 -0
  99. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/slicer/executedinstruction.py +0 -0
  100. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/slicer/stack/__init__.py +0 -0
  101. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/__init__.py +0 -0
  102. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/testcase_to_ast.py +0 -0
  103. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/testcase/testcasevisitor.py +0 -0
  104. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/__init__.py +0 -0
  105. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/atomicinteger.py +0 -0
  106. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/collection_utils.py +0 -0
  107. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/exceptions.py +0 -0
  108. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/generic/__init__.py +0 -0
  109. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/mirror.py +0 -0
  110. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/mutation_utils.py +0 -0
  111. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/namingscope.py +0 -0
  112. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/opcodes.py +0 -0
  113. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/statistics/__init__.py +0 -0
  114. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/statistics/runtimevariable.py +0 -0
  115. {pynguin-0.34.0 → pynguin-0.35.0}/src/pynguin/utils/statistics/statisticsobserver.py +0 -0
  116. {pynguin-0.34.0 → pynguin-0.35.0}/tests/__init__.py +0 -0
  117. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/__init__.py +0 -0
  118. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_cfg.py +0 -0
  119. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_constants.py +0 -0
  120. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_controldependencegraph.py +0 -0
  121. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_dominatortree.py +0 -0
  122. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_initialpopulationseeding.py +0 -0
  123. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_modulecomplexity.py +0 -0
  124. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_programgraph.py +0 -0
  125. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_seeding.py +0 -0
  126. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_staticconstantseeding.py +0 -0
  127. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_syntaxtree.py +0 -0
  128. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_type4py_api.py +0 -0
  129. {pynguin-0.34.0 → pynguin-0.35.0}/tests/analyses/test_typesystem.py +0 -0
  130. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/__init__.py +0 -0
  131. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/mutation_analysis/__init__.py +0 -0
  132. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/mutation_analysis/test_mutationadapter.py +0 -0
  133. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/test_assertion.py +0 -0
  134. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/test_assertion_generation_integration.py +0 -0
  135. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/test_assertion_to_ast.py +0 -0
  136. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/test_assertiongenerator.py +0 -0
  137. {pynguin-0.34.0 → pynguin-0.35.0}/tests/assertion/test_assertiontraceobserver.py +0 -0
  138. {pynguin-0.34.0 → pynguin-0.35.0}/tests/conftest.py +0 -0
  139. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/__init__.py +0 -0
  140. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/accessibles/__init__.py +0 -0
  141. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/accessibles/accessible.py +0 -0
  142. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/branchcoverage/__init__.py +0 -0
  143. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/branchcoverage/nestedbranches.py +0 -0
  144. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/branchcoverage/nobranches.py +0 -0
  145. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/branchcoverage/singlebranches.py +0 -0
  146. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/branchcoverage/twomethodsinglebranches.py +0 -0
  147. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/__init__.py +0 -0
  148. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/abstract.py +0 -0
  149. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/async_class_gen.py +0 -0
  150. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/async_class_method.py +0 -0
  151. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/async_func.py +0 -0
  152. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/async_gen.py +0 -0
  153. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/attributes.py +0 -0
  154. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/blacklist.py +0 -0
  155. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/blacklist_transitive.py +0 -0
  156. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/comments.py +0 -0
  157. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/complex_dependencies.py +0 -0
  158. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/complex_dependency.py +0 -0
  159. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/conditional_import.py +0 -0
  160. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/dependency.py +0 -0
  161. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/diamond_bottom.py +0 -0
  162. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/diamond_left.py +0 -0
  163. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/diamond_right.py +0 -0
  164. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/diamond_top.py +0 -0
  165. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/enums.py +0 -0
  166. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/import_dependency.py +0 -0
  167. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/inheritance.py +0 -0
  168. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/nested_functions.py +0 -0
  169. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/no_any_annotations.py +0 -0
  170. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/no_dependencies.py +0 -0
  171. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/overridden_inherited_methods.py +0 -0
  172. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/simple_dependencies.py +0 -0
  173. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/typing_parameters.py +0 -0
  174. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/cluster/uses_async_dependency.py +0 -0
  175. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/duckmock/__init__.py +0 -0
  176. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/duckmock/complex.py +0 -0
  177. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/__init__.py +0 -0
  178. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/assertions.py +0 -0
  179. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/basket.py +0 -0
  180. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/calculator.py +0 -0
  181. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/calculator_simple.py +0 -0
  182. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/collections.py +0 -0
  183. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/difficult.py +0 -0
  184. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/dummies.py +0 -0
  185. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/dynamosa_example.py +0 -0
  186. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/enums.py +0 -0
  187. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/exceptions.py +0 -0
  188. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/flaky.py +0 -0
  189. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/impossible.py +0 -0
  190. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/inheritance.py +0 -0
  191. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/loop.py +0 -0
  192. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/monkey.py +0 -0
  193. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/nested.py +0 -0
  194. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/objects.py +0 -0
  195. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/private_methods.py +0 -0
  196. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/queue.py +0 -0
  197. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/simple.py +0 -0
  198. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/triangle.py +0 -0
  199. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/type_inference.py +0 -0
  200. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/type_tracing/__init__.py +0 -0
  201. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/type_tracing/geometry.py +0 -0
  202. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/type_tracing/invoice.py +0 -0
  203. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/type_tracing/large_test_cluster.py +0 -0
  204. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/examples/type_tracing/mixed.py +0 -0
  205. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/grammar/__init__.py +0 -0
  206. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/grammar/parameters.py +0 -0
  207. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/instrumentation/__init__.py +0 -0
  208. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/instrumentation/comparison.py +0 -0
  209. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/instrumentation/inherited.py +0 -0
  210. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/instrumentation/mixed.py +0 -0
  211. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/instrumentation/simple.py +0 -0
  212. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/linecoverage/__init__.py +0 -0
  213. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/linecoverage/artificial_none.py +0 -0
  214. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/linecoverage/emptyfile.py +0 -0
  215. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/linecoverage/exception.py +0 -0
  216. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/linecoverage/list.py +0 -0
  217. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/linecoverage/plus.py +0 -0
  218. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/linecoverage/setter_getter.py +0 -0
  219. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/mutation/__init__.py +0 -0
  220. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/mutation/exception.py +0 -0
  221. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/mutation/expected.py +0 -0
  222. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/mutation/mutation.py +0 -0
  223. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/mutation/timeout.py +0 -0
  224. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/programgraph/__init__.py +0 -0
  225. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/programgraph/samples.py +0 -0
  226. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/programgraph/whileloop.py +0 -0
  227. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/__init__.py +0 -0
  228. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/dynamicseeding/__init__.py +0 -0
  229. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/dynamicseeding/dynamicseedingdummies.py +0 -0
  230. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/__init__.py +0 -0
  231. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/dummycontainer.py +0 -0
  232. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/__init__.py +0 -0
  233. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/assertseed_test_.py +0 -0
  234. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/classseed_test_.py +0 -0
  235. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collfuncseed_test_.py +0 -0
  236. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/collseed_test_.py +0 -0
  237. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/nestedseed_test_.py +0 -0
  238. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notknowncall_test_.py +0 -0
  239. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/notprimseed_test_.py +0 -0
  240. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/primitiveseed_test_.py +0 -0
  241. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/triangleseed_test_.py +0 -0
  242. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongassignseed_test_.py +0 -0
  243. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/initialpopulationseeding/seedmodules/wrongfunctionnameseed_test_.py +0 -0
  244. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/staticconstantseeding/__init__.py +0 -0
  245. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/staticconstantseeding/dummy/__init__.py +0 -0
  246. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/staticconstantseeding/dummy/dummy.py +0 -0
  247. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/seeding/staticconstantseeding/dummy/empty.so +0 -0
  248. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/__init__.py +0 -0
  249. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/attribute_dependencies.py +0 -0
  250. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/closure.py +0 -0
  251. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/generator.py +0 -0
  252. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/immutable_attribute_dependency.py +0 -0
  253. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/import_star_def.py +0 -0
  254. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/import_star_main.py +0 -0
  255. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/partial_cover_dependency.py +0 -0
  256. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/simple_call.py +0 -0
  257. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/slicer/simple_call_arg.py +0 -0
  258. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/test.conf +0 -0
  259. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/test.conf.license +0 -0
  260. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/tests/typeinference/test_stubstrategy.pyi +0 -0
  261. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/type_tracing/__init__.py +0 -0
  262. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/type_tracing/guess_params.py +0 -0
  263. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/type_tracing/return_types.py +0 -0
  264. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/types/__init__.py +0 -0
  265. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/types/outside.py +0 -0
  266. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/types/subtyping.py +0 -0
  267. {pynguin-0.34.0 → pynguin-0.35.0}/tests/fixtures/types/symbols.py +0 -0
  268. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/__init__.py +0 -0
  269. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/__init__.py +0 -0
  270. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/test_archive.py +0 -0
  271. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/test_generationalgorithm.py +0 -0
  272. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/test_integration_mosaalgorithm.py +0 -0
  273. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/test_integration_varioussearchalgorithms.py +0 -0
  274. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/test_mioalgorithm.py +0 -0
  275. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/test_mosaalgorithm.py +0 -0
  276. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/algorithms/test_randomalgorithm.py +0 -0
  277. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/__init__.py +0 -0
  278. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/crossover/__init__.py +0 -0
  279. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/crossover/test_singlepointrelativecrossover.py +0 -0
  280. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/ranking/__init__.py +0 -0
  281. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/ranking/test_rankingfunction.py +0 -0
  282. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/selection/__init__.py +0 -0
  283. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/selection/test_rankselection.py +0 -0
  284. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/selection/test_selection.py +0 -0
  285. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/selection/test_tournamentselection.py +0 -0
  286. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/test_dominancecomparator.py +0 -0
  287. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/operators/test_preferencesortingcomparator.py +0 -0
  288. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/__init__.py +0 -0
  289. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/test_coverageplateaustoppingcondition.py +0 -0
  290. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/test_maxcoveragestoppingcondition.py +0 -0
  291. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/test_maxiterationsstoppingcondition.py +0 -0
  292. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/test_maxstatementstoppingcondition.py +0 -0
  293. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/test_maxtestsstoppingcondition.py +0 -0
  294. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/test_maxtimestoppingcondition.py +0 -0
  295. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/test_minimumcoverageplateaustoppingcondition.py +0 -0
  296. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/stoppingconditions/test_stoppingcondition.py +0 -0
  297. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_chromosome.py +0 -0
  298. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_chromosomefactory.py +0 -0
  299. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_computations_cache.py +0 -0
  300. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_computations_fitness_utilities.py +0 -0
  301. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_generationalgorithmfactory.py +0 -0
  302. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_postprocess.py +0 -0
  303. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_testcasechromosome.py +0 -0
  304. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_testcasefactory.py +0 -0
  305. {pynguin-0.34.0 → pynguin-0.35.0}/tests/ga/test_testsuitechromosome.py +0 -0
  306. {pynguin-0.34.0 → pynguin-0.35.0}/tests/instrumentation/__init__.py +0 -0
  307. {pynguin-0.34.0 → pynguin-0.35.0}/tests/instrumentation/test_machinery.py +0 -0
  308. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/__init__.py +0 -0
  309. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/stack/__init__.py +0 -0
  310. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/stack/test_stack_effect.py +0 -0
  311. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/test_assertionslicer.py +0 -0
  312. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/test_dependencies.py +0 -0
  313. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/test_expected_failures.py +0 -0
  314. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/test_language_features.py +0 -0
  315. {pynguin-0.34.0 → pynguin-0.35.0}/tests/slicer/test_statementslicer.py +0 -0
  316. {pynguin-0.34.0 → pynguin-0.35.0}/tests/test___main__.py +0 -0
  317. {pynguin-0.34.0 → pynguin-0.35.0}/tests/test_cli.py +0 -0
  318. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/__init__.py +0 -0
  319. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/__init__.py +0 -0
  320. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/test_executedinstruction.py +0 -0
  321. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/test_executioncontext.py +0 -0
  322. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/test_executionresult.py +0 -0
  323. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/test_executiontrace.py +0 -0
  324. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/test_executiontracer.py +0 -0
  325. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/test_moduleprovider.py +0 -0
  326. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/test_testcaseexecutor_integration.py +0 -0
  327. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/execution/test_typetracing.py +0 -0
  328. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/export/__init__.py +0 -0
  329. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/export/conftest.py +0 -0
  330. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/export/test_export.py +0 -0
  331. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/statements/__init__.py +0 -0
  332. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/statements/test_assignmentstatement.py +0 -0
  333. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/statements/test_collectionstatements.py +0 -0
  334. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/statements/test_fieldstatement.py +0 -0
  335. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/statements/test_parameterizedstatements.py +0 -0
  336. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/statements/test_primitivestatements.py +0 -0
  337. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/test_benchmark.py +0 -0
  338. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/test_defaulttestcase.py +0 -0
  339. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/test_statement_to_ast.py +0 -0
  340. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/test_testcase_integration.py +0 -0
  341. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/test_testcase_to_ast_integration.py +0 -0
  342. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/variable/__init__.py +0 -0
  343. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testcase/variable/test_variablereference.py +0 -0
  344. {pynguin-0.34.0 → pynguin-0.35.0}/tests/testutils.py +0 -0
  345. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/__init__.py +0 -0
  346. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/generic/__init__.py +0 -0
  347. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/generic/test_genericaccessibleobject.py +0 -0
  348. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/stats/__init__.py +0 -0
  349. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/stats/test_outputvariablefactory.py +0 -0
  350. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/stats/test_statistics.py +0 -0
  351. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/stats/test_statisticsbackend.py +0 -0
  352. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_atomicinteger.py +0 -0
  353. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_collection_utils.py +0 -0
  354. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_controlflowdistance.py +0 -0
  355. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_exceptions.py +0 -0
  356. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_mirror.py +0 -0
  357. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_mutation_utils.py +0 -0
  358. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_namingscope.py +0 -0
  359. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_orderedset.py +0 -0
  360. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_randomness.py +0 -0
  361. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_report.py +0 -0
  362. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_type_utils.py +0 -0
  363. {pynguin-0.34.0 → pynguin-0.35.0}/tests/utils/test_typetracing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pynguin
3
- Version: 0.34.0
3
+ Version: 0.35.0
4
4
  Summary: Pynguin is a tool for automated unit test generation for Python
5
5
  Home-page: https://www.pynguin.eu
6
6
  License: MIT
@@ -24,20 +24,20 @@ Classifier: Topic :: Education :: Testing
24
24
  Classifier: Topic :: Software Development :: Testing
25
25
  Classifier: Topic :: Software Development :: Testing :: Unit
26
26
  Classifier: Typing :: Typed
27
- Requires-Dist: Jinja2 (>=3.1.2,<4.0.0)
27
+ Requires-Dist: Jinja2 (>=3.1.3,<4.0.0)
28
28
  Requires-Dist: MutPy-Pynguin (>=0.7.1,<0.8.0)
29
- Requires-Dist: Pygments (>=2.16.1,<3.0.0)
29
+ Requires-Dist: Pygments (>=2.17.2,<3.0.0)
30
30
  Requires-Dist: asciitree (>=0.3.3,<0.4.0)
31
- Requires-Dist: astroid (>=2.15.6,<3.0.0)
32
- Requires-Dist: black (>=23.7.0,<24.0.0)
33
- Requires-Dist: bytecode (>=0.14.2,<0.15.0)
34
- Requires-Dist: jellyfish (>=1.0.0,<2.0.0)
35
- Requires-Dist: libcst (>=1.0.1,<2.0.0)
36
- Requires-Dist: networkx (>=3.1,<4.0)
37
- Requires-Dist: pytest (>=7.4.0,<8.0.0)
31
+ Requires-Dist: astroid (>=3.0.3,<4.0.0)
32
+ Requires-Dist: black (>=24.2.0,<25.0.0)
33
+ Requires-Dist: bytecode (>=0.15.1,<0.16.0)
34
+ Requires-Dist: jellyfish (>=1.0.3,<2.0.0)
35
+ Requires-Dist: libcst (>=1.2.0,<2.0.0)
36
+ Requires-Dist: networkx (>=3.2,<4.0)
37
+ Requires-Dist: pytest (>=8.0.1,<9.0.0)
38
38
  Requires-Dist: requests (>=2.31.0,<3.0.0)
39
- Requires-Dist: rich (>=13.5.2,<14.0.0)
40
- Requires-Dist: simple-parsing (>=0.1.4,<0.2.0)
39
+ Requires-Dist: rich (>=13.7.0,<14.0.0)
40
+ Requires-Dist: simple-parsing (>=0.1.5,<0.2.0)
41
41
  Requires-Dist: typing_inspect (>=0.9.0,<0.10.0)
42
42
  Project-URL: Documentation, https://pynguin.readthedocs.io
43
43
  Project-URL: Repository, https://github.com/se2p/pynguin
@@ -85,6 +85,7 @@ and allows the automated generation of unit tests for Python programs.
85
85
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3989840.svg)](https://doi.org/10.5281/zenodo.3989840)
86
86
  [![REUSE status](https://api.reuse.software/badge/github.com/se2p/pynguin)](https://api.reuse.software/info/github.com/se2p/pynguin)
87
87
  [![Downloads](https://static.pepy.tech/personalized-badge/pynguin?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Downloads)](https://pepy.tech/project/pynguin)
88
+ [![SWH](https://archive.softwareheritage.org/badge/origin/https://github.com/se2p/pynguin/)](https://archive.softwareheritage.org/browse/origin/?origin_url=https://github.com/se2p/pynguin)
88
89
 
89
90
 
90
91
  ![Pynguin Logo](https://raw.githubusercontent.com/se2p/pynguin/master/docs/source/_static/pynguin-logo.png "Pynguin Logo")
@@ -176,6 +177,8 @@ of the [University of Passau](https://www.uni-passau.de).
176
177
  Maintainer: [Stephan Lukasczyk](https://github.com/stephanlukasczyk)
177
178
 
178
179
  Contributors:
180
+ - [Juan Altmayer Pizzorno](https://github.com/jaltmayerpizzorno)
181
+ - [Lucas Berg](https://github.com/BergLucas)
179
182
  - [Tucker Blue](https://github.com/tuckcodes)
180
183
  - [Gordon Fraser](https://github.com/gofraser)
181
184
  - [Abdur-Rahmaan Janhangeer](https://github.com/Abdur-rahmaanJ)
@@ -40,6 +40,7 @@ and allows the automated generation of unit tests for Python programs.
40
40
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3989840.svg)](https://doi.org/10.5281/zenodo.3989840)
41
41
  [![REUSE status](https://api.reuse.software/badge/github.com/se2p/pynguin)](https://api.reuse.software/info/github.com/se2p/pynguin)
42
42
  [![Downloads](https://static.pepy.tech/personalized-badge/pynguin?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Downloads)](https://pepy.tech/project/pynguin)
43
+ [![SWH](https://archive.softwareheritage.org/badge/origin/https://github.com/se2p/pynguin/)](https://archive.softwareheritage.org/browse/origin/?origin_url=https://github.com/se2p/pynguin)
43
44
 
44
45
 
45
46
  ![Pynguin Logo](https://raw.githubusercontent.com/se2p/pynguin/master/docs/source/_static/pynguin-logo.png "Pynguin Logo")
@@ -131,6 +132,8 @@ of the [University of Passau](https://www.uni-passau.de).
131
132
  Maintainer: [Stephan Lukasczyk](https://github.com/stephanlukasczyk)
132
133
 
133
134
  Contributors:
135
+ - [Juan Altmayer Pizzorno](https://github.com/jaltmayerpizzorno)
136
+ - [Lucas Berg](https://github.com/BergLucas)
134
137
  - [Tucker Blue](https://github.com/tuckcodes)
135
138
  - [Gordon Fraser](https://github.com/gofraser)
136
139
  - [Abdur-Rahmaan Janhangeer](https://github.com/Abdur-rahmaanJ)
@@ -4,7 +4,7 @@
4
4
 
5
5
  [tool.poetry]
6
6
  name = "pynguin"
7
- version = "0.34.0"
7
+ version = "0.35.0"
8
8
  description = "Pynguin is a tool for automated unit test generation for Python"
9
9
  authors = ["Stephan Lukasczyk <stephan@pynguin.eu>"]
10
10
  license = "MIT"
@@ -44,46 +44,47 @@ include = [
44
44
 
45
45
  [tool.poetry.dependencies]
46
46
  python = ">=3.10, <3.11"
47
- astroid = "^2.15.6"
48
- black = "^23.7.0"
49
- bytecode = "^0.14.2"
50
- jellyfish = "^1.0.0"
51
- Jinja2 = "^3.1.2"
47
+ astroid = "^3.0.3"
48
+ black = "^24.2.0"
49
+ bytecode = "^0.15.1"
50
+ jellyfish = "^1.0.3"
51
+ Jinja2 = "^3.1.3"
52
52
  MutPy-Pynguin = "^0.7.1"
53
- networkx = "^3.1"
54
- rich = "^13.5.2"
55
- Pygments = "^2.16.1"
56
- pytest = "^7.4.0"
57
- simple-parsing = "^0.1.4"
53
+ networkx = "^3.2"
54
+ rich = "^13.7.0"
55
+ Pygments = "^2.17.2"
56
+ pytest = "^8.0.1"
57
+ simple-parsing = "^0.1.5"
58
58
  typing_inspect = "^0.9.0"
59
59
  asciitree = "^0.3.3"
60
- libcst = "^1.0.1"
60
+ libcst = "^1.2.0"
61
61
  requests = "^2.31.0"
62
62
 
63
63
  [tool.poetry.group.dev.dependencies]
64
- black = "^23.7.0"
65
- isort = {extras = ["pyproject"], version = "^5.12.0"}
66
- mypy = "^1.5.0"
67
- pre-commit = "^3.3.3"
68
- pyupgrade = "^3.10.1"
69
- types-requests = "^2.31.0.2"
64
+ black = "^24.2.0"
65
+ isort = {extras = ["pyproject"], version = "^5.13.2"}
66
+ mypy = "^1.8.0"
67
+ pre-commit = "^3.6.2"
68
+ pyupgrade = "^3.15.1"
69
+ types-requests = "^2.31.0"
70
70
  requests-mock = "^1.11.0"
71
- ruff = "^0.0.284"
71
+ ruff = "^0.2"
72
72
 
73
73
  [tool.poetry.group.docs.dependencies]
74
- sphinx = "^7.1.2"
75
- sphinx-autodoc-typehints = "^1.24"
74
+ sphinx = "^7.2.6"
75
+ sphinx-autodoc-typehints = "^2.0"
76
76
  sphinx-hoverxref = "^1.3.0"
77
+ sphinx-rtd-theme = "^2.0.0"
77
78
  sphinx-selective-exclude = "^1.0.3"
78
79
 
79
80
  [tool.poetry.group.test.dependencies]
80
- coverage = "^7.3.0"
81
- hypothesis = "^6.82.4"
82
- pytest = "^7.4.0"
81
+ coverage = "^7.4.2"
82
+ hypothesis = "^6.98.9"
83
+ pytest = "^8.0.1"
83
84
  pytest-cov = "^4.1.0"
84
- pytest-mock = "^3.11.1"
85
+ pytest-mock = "^3.12.0"
85
86
  pytest-picked = "^0.5.0"
86
- pytest-sugar = "^0.9.7"
87
+ pytest-sugar = "^1.0.0"
87
88
 
88
89
  [tool.poetry.scripts]
89
90
  pynguin = "pynguin.cli:main"
@@ -174,81 +175,102 @@ build-backend = "poetry.core.masonry.api"
174
175
  # Assume Python 3.10.
175
176
  target-version = "py310"
176
177
  line-length = 88
177
- src = ["src"]
178
+ preview = true
179
+ src = ["src", "tests"]
180
+ exclude = [
181
+ ".bzr",
182
+ ".direnv",
183
+ ".eggs",
184
+ ".git",
185
+ ".hg",
186
+ ".mypy_cache",
187
+ ".nox",
188
+ ".pants.d",
189
+ ".ruff_cache",
190
+ ".svn",
191
+ ".tox",
192
+ ".venv",
193
+ "__pypackages__",
194
+ "_build",
195
+ "buck-out",
196
+ "build",
197
+ "dist",
198
+ "node_modules",
199
+ "venv",
200
+ "tests/fixtures/*.py",
201
+ "tests/fixtures/*.pyi",
202
+ ]
203
+
204
+ [tool.ruff.lint]
178
205
  select = [
179
- "A", # flake8-builtins
180
- "B", # bugbear
181
- "BLE", # flake8-blind-except
182
- "CPY", # flake8-ccopyright
183
- "C4", # flake8-comprehensions
184
- "C90", # mccabe
185
- "D", # pydocstyle
186
- "E", # pycodestyle
187
- "ERA", # flake8-eradicate
188
- "F", # pyflakes
189
- "FA", # flake8-future-annotations
190
- "FIX", # flake8-fixme
191
- "FLY", # flynt
192
- "G", # flake8-logging-format
193
- "ICN", # flake8-import-conventions
194
- "INT", # flake8-gettext
195
- "ISC", # flake8-implicit-str-concat
196
- "PERF", # perflint
197
- "PIE", # flake8-pie
198
- "PL", # pylint
199
- "PT", # flake8-pytest-style
200
- "PTH", # flake8-use-pathlib
201
- "Q", # flake8-quotes
202
- "RET", # flake8-return
203
- "RSE", # flake8-raise
204
- "RUF", # ruff
205
- "S", # flake8-bandit
206
- "SIM", # flake8-simplify
207
- "TCH", # flake8-type-checking
208
- "TID", # flake8-tidy-imports
209
- "UP", # pyupgrade
210
- "W", # pycodestyle
211
- "T20",
206
+ "A", # flake8-builtins
207
+ "ARG", # flake8-unused-arguments
208
+ "B", # bugbear
209
+ "BLE", # flake8-blind-except
210
+ "CPY", # flake8-copyright
211
+ "C4", # flake8-comprehensions
212
+ "C90", # mccabe
213
+ "D", # pydocstyle
214
+ "DTZ", # flake8-datetimez
215
+ "E", # pycodestyle
216
+ "ERA", # flake8-eradicate
217
+ "F", # pyflakes
218
+ "FA", # flake8-future-annotations
219
+ "FBT", # flake8-boolean-trap
220
+ "FIX", # flake8-fixme
221
+ "FLY", # flynt
222
+ "FURB", # refurb
223
+ "G", # flake8-logging-format
224
+ "ICN", # flake8-import-conventions
225
+ "INT", # flake8-gettext
226
+ "ISC", # flake8-implicit-str-concat
227
+ "LOG", # flake8-logging
228
+ "N", # flake8-naming
229
+ "NPY", # numpy
230
+ "PERF", # perflint
231
+ "PGH", # pygrep-hooks
232
+ "PIE", # flake8-pie
233
+ "PL", # pylint
234
+ "PT", # flake8-pytest-style
235
+ "PTH", # flake8-use-pathlib
236
+ "PYI", # flake8-pyi
237
+ "Q", # flake8-quotes
238
+ "RET", # flake8-return
239
+ "RSE", # flake8-raise
240
+ "RUF", # ruff
241
+ "S", # flake8-bandig
242
+ "SIM", # flake8-simplify
243
+ "SLF", # flake8-self
244
+ "SLOT", # flake8-slots
245
+ "TCH", # flake8-type-checking
246
+ "TID", # flake8-tidy-imports
247
+ "T20", # flake8-print
248
+ "UP", # pyupgrade
249
+ "W", # pycodestyle
212
250
  ]
213
251
  ignore = [
214
- "B019", # do not complain that functools.lru_cache might cause memory leaks
215
- "D105", # do not complain due to missing docstrings in magic methods
216
- "FIX002", # do not complain about valid TODO comments
217
- "PLR0911", # do not complain about too many return statements
218
- "PLR0912", # do not complain about too many branches
219
- "PLR0913", # do not complain about too many arguments to function call
220
- "PLR2004", # do not complain about magic values in comparisons
221
- "S101", # do not complain about using assert statements
252
+ "ARG002", # unused method argument
253
+ "B019", # functools.lru_cache might cause memory leaks
254
+ "CPY001", # missing copyright notice at top of file
255
+ "D105", # missing docstrings in magic methods
256
+ "FIX002", # valid TODO comments
257
+ "PLR0911", # do not complain about too many return statements
258
+ "PLR0912", # do not complain about too many branches
259
+ "PLR0913", # do not complain about too many arguments to function call
260
+ "PLR2004", # magic values in comparisons
261
+ "PLR6301", # method could be a function, class method, or static method
262
+ "S101", # do not complain about using assert statements
222
263
  ]
223
- # Exclude a variety of commonly ignored directories.
224
- exclude = [
225
- ".bzr",
226
- ".direnv",
227
- ".eggs",
228
- ".git",
229
- ".hg",
230
- ".mypy_cache",
231
- ".nox",
232
- ".pants.d",
233
- ".ruff_cache",
234
- ".svn",
235
- ".tox",
236
- ".venv",
237
- "__pypackages__",
238
- "_build",
239
- "buck-out",
240
- "build",
241
- "dist",
242
- "node_modules",
243
- "venv",
244
- ]
245
- per-file-ignores = {}
246
- # Allow unused variables when underscore-prefixed.
264
+ # Allow unused variables when underscore-prefixed:
247
265
  dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
248
266
 
249
- [tool.ruff.mccabe]
250
- # Unlike Flake8, default to a complexity level of 10.
267
+ [tool.ruff.lint.mccabe]
251
268
  max-complexity = 10
252
269
 
253
- [tool.ruff.pydocstyle]
270
+ [tool.ruff.lint.pydocstyle]
254
271
  convention = "google"
272
+
273
+ [tool.ruff.lint.per-file-ignores]
274
+ "tests/**/*.py" = [
275
+ "S101", # Use of `assert` detected
276
+ ]
@@ -5,4 +5,4 @@
5
5
  # SPDX-License-Identifier: MIT
6
6
  #
7
7
  """Specifies the version of Pynguin."""
8
- __version__ = "0.34.0"
8
+ __version__ = "0.35.0"
@@ -212,13 +212,13 @@ class DynamicConstantProvider(DelegatingConstantProvider):
212
212
  "isdecimal": lambda value: "non_decimal" if value.isdecimal() else "0123456789",
213
213
  "isalpha": lambda value: f"{value}1" if value.isalpha() else "isalpha",
214
214
  "isdigit": lambda value: f"{value}_" if value.isdigit() else "0",
215
- "isidentifier": lambda value: f"{value}!"
216
- if value.isidentifier()
217
- else "is_Identifier",
215
+ "isidentifier": lambda value: (
216
+ f"{value}!" if value.isidentifier() else "is_Identifier"
217
+ ),
218
218
  "isnumeric": lambda value: f"{value}A" if value.isnumeric() else "012345",
219
- "isprintable": lambda value: f"{value}{os.linesep}"
220
- if value.isprintable()
221
- else "is_printable",
219
+ "isprintable": lambda value: (
220
+ f"{value}{os.linesep}" if value.isprintable() else "is_printable"
221
+ ),
222
222
  "isspace": lambda value: f"{value}a" if value.isspace() else " ",
223
223
  "istitle": lambda value: f"{value} AAA" if value.istitle() else "Is Title",
224
224
  }
@@ -311,21 +311,21 @@ class _ConstantCollector(ast.NodeVisitor):
311
311
  self._pool = ConstantPool()
312
312
  self._string_expressions: OrderedSet[str] = OrderedSet()
313
313
 
314
- def visit_Constant(self, node: ast.Constant):
314
+ def visit_Constant(self, node: ast.Constant): # noqa: N802
315
315
  if type(node.value) in typing.get_args(ConstantTypes):
316
316
  self._pool.add_constant(node.value)
317
317
  return self.generic_visit(node)
318
318
 
319
- def visit_Module(self, node: ast.Module):
319
+ def visit_Module(self, node: ast.Module): # noqa: N802
320
320
  return self._visit_doc_string(node)
321
321
 
322
- def visit_FunctionDef(self, node: ast.FunctionDef):
322
+ def visit_FunctionDef(self, node: ast.FunctionDef): # noqa: N802
323
323
  return self._visit_doc_string(node)
324
324
 
325
- def visit_ClassDef(self, node: ast.ClassDef):
325
+ def visit_ClassDef(self, node: ast.ClassDef): # noqa: N802
326
326
  return self._visit_doc_string(node)
327
327
 
328
- def visit_AsyncFunctionDef(self, node: ast.AsyncFunctionDef):
328
+ def visit_AsyncFunctionDef(self, node: ast.AsyncFunctionDef): # noqa: N802
329
329
  return self._visit_doc_string(node)
330
330
 
331
331
  def _visit_doc_string(
@@ -39,6 +39,7 @@ class ProgramGraphNode:
39
39
  def __init__(
40
40
  self,
41
41
  index: int,
42
+ *,
42
43
  offset: int = 0,
43
44
  basic_block: BasicBlock | None = None,
44
45
  is_artificial: bool = False,
@@ -120,7 +121,7 @@ class ProgramGraphNode:
120
121
  """
121
122
  self._predicate_id = predicate_id
122
123
 
123
- def __eq__(self, other: Any) -> bool:
124
+ def __eq__(self, other: object) -> bool:
124
125
  if not isinstance(other, ProgramGraphNode):
125
126
  return False
126
127
  if self is other:
@@ -148,7 +149,7 @@ class ProgramGraphNode:
148
149
  else:
149
150
  arg = repr(arg)
150
151
  formatted = instr.name # type: ignore[union-attr]
151
- if arg != "":
152
+ if arg:
152
153
  formatted += f" {arg}"
153
154
  instructions.append(formatted)
154
155
  result += "\n" + "\n".join(instructions)
@@ -425,10 +426,10 @@ class CFG(ProgramGraph[ProgramGraphNode]):
425
426
  """
426
427
  reversed_cfg = CFG(cfg.bytecode_cfg())
427
428
 
428
- reversed_cfg._graph = cfg._graph.reverse(copy=True)
429
+ reversed_cfg._graph = cfg._graph.reverse(copy=True) # noqa: SLF001
429
430
  return reversed_cfg
430
431
 
431
- def reversed(self) -> CFG: # noqa: A003
432
+ def reversed(self) -> CFG:
432
433
  """Provides the reversed graph of this graph.
433
434
 
434
435
  Returns:
@@ -450,7 +451,7 @@ class CFG(ProgramGraph[ProgramGraphNode]):
450
451
  ControlFlowGraph()
451
452
  ) # TODO(fk) Cloning the bytecode cfg is complicated.
452
453
 
453
- copy._graph = cfg._graph.copy()
454
+ copy._graph = cfg._graph.copy() # noqa: SLF001
454
455
  return copy
455
456
 
456
457
  def copy(self) -> CFG:
@@ -486,16 +487,16 @@ class CFG(ProgramGraph[ProgramGraphNode]):
486
487
  if isinstance(last_instr, Instr) and (
487
488
  last_instr.is_cond_jump() or last_instr.opcode == op.FOR_ITER
488
489
  ):
489
- if last_instr.opcode in (op.POP_JUMP_IF_TRUE, op.JUMP_IF_TRUE_OR_POP):
490
+ if last_instr.opcode in {op.POP_JUMP_IF_TRUE, op.JUMP_IF_TRUE_OR_POP}:
490
491
  # These jump to arg if ToS is True
491
492
  true_branch = target_block
492
493
  false_branch = next_block
493
- elif last_instr.opcode in (
494
+ elif last_instr.opcode in {
494
495
  op.POP_JUMP_IF_FALSE,
495
496
  op.JUMP_IF_FALSE_OR_POP,
496
497
  op.JUMP_IF_NOT_EXC_MATCH,
497
498
  op.FOR_ITER,
498
- ):
499
+ }:
499
500
  # These jump to arg if ToS is False, is Empty or if Exc does
500
501
  # not match.
501
502
  true_branch = next_block
@@ -635,9 +636,9 @@ class DominatorTree(ProgramGraph[ProgramGraphNode]):
635
636
  Returns:
636
637
  The dominance tree for the control-flow graph
637
638
  """
638
- dominance: dict[
639
- ProgramGraphNode, set[ProgramGraphNode]
640
- ] = DominatorTree._calculate_dominance(graph)
639
+ dominance: dict[ProgramGraphNode, set[ProgramGraphNode]] = (
640
+ DominatorTree._calculate_dominance(graph)
641
+ )
641
642
  for dominance_node, nodes in dominance.items():
642
643
  nodes.discard(dominance_node)
643
644
  dominance_tree = DominatorTree()
@@ -21,6 +21,7 @@ import queue
21
21
  import typing
22
22
 
23
23
  from collections import defaultdict
24
+ from pathlib import Path
24
25
  from types import BuiltinFunctionType
25
26
  from types import FunctionType
26
27
  from types import GenericAlias
@@ -227,7 +228,45 @@ class _ModuleParseResult:
227
228
  type4py_data: Type4pyData | None
228
229
 
229
230
 
230
- def parse_module(module_name: str, query_type4py: bool = False) -> _ModuleParseResult:
231
+ def import_module(module_name: str) -> ModuleType:
232
+ """Imports a module by name.
233
+
234
+ Unlike the built-in :py:func:`importlib.import_module`, this function also supports
235
+ importing module aliases.
236
+
237
+ Args:
238
+ module_name: The fully-qualified name of the module
239
+
240
+ Returns:
241
+ The imported module
242
+ """
243
+ try:
244
+ return importlib.import_module(module_name)
245
+ except ModuleNotFoundError as error:
246
+ try:
247
+ package_name, submodule_name = module_name.rsplit(".", 1)
248
+ except ValueError as e:
249
+ raise error from e
250
+
251
+ try:
252
+ package = import_module(package_name)
253
+ except ModuleNotFoundError as e:
254
+ raise error from e
255
+
256
+ try:
257
+ submodule = getattr(package, submodule_name)
258
+ except AttributeError as e:
259
+ raise error from e
260
+
261
+ if not inspect.ismodule(submodule):
262
+ raise error
263
+
264
+ return submodule
265
+
266
+
267
+ def parse_module(
268
+ module_name: str, *, query_type4py: bool = False
269
+ ) -> _ModuleParseResult:
231
270
  """Parses a module and extracts its module-type and AST.
232
271
 
233
272
  If the source code is not available it is not possible to build an AST. In this
@@ -242,7 +281,7 @@ def parse_module(module_name: str, query_type4py: bool = False) -> _ModuleParseR
242
281
  Returns:
243
282
  A tuple of the imported module type and its optional AST
244
283
  """
245
- module = importlib.import_module(module_name)
284
+ module = import_module(module_name)
246
285
  type4py_data: Type4pyData | None = None
247
286
  syntax_tree: astroid.Module | None = None
248
287
  linenos: int = -1
@@ -511,7 +550,7 @@ class TypeGuessingStats:
511
550
  )
512
551
 
513
552
 
514
- class ModuleTestCluster(TestCluster):
553
+ class ModuleTestCluster(TestCluster): # noqa: PLR0904
515
554
  """A test cluster for a module.
516
555
 
517
556
  Contains all methods/constructors/functions and all required transitive
@@ -521,17 +560,17 @@ class ModuleTestCluster(TestCluster):
521
560
  def __init__(self, linenos: int) -> None: # noqa: D107
522
561
  self.__type_system = TypeSystem()
523
562
  self.__linenos = linenos
524
- self.__generators: dict[
525
- ProperType, OrderedSet[GenericAccessibleObject]
526
- ] = defaultdict(OrderedSet)
563
+ self.__generators: dict[ProperType, OrderedSet[GenericAccessibleObject]] = (
564
+ defaultdict(OrderedSet)
565
+ )
527
566
 
528
567
  # Modifier belong to a certain class, not type.
529
- self.__modifiers: dict[
530
- TypeInfo, OrderedSet[GenericAccessibleObject]
531
- ] = defaultdict(OrderedSet)
532
- self.__accessible_objects_under_test: OrderedSet[
533
- GenericAccessibleObject
534
- ] = OrderedSet()
568
+ self.__modifiers: dict[TypeInfo, OrderedSet[GenericAccessibleObject]] = (
569
+ defaultdict(OrderedSet)
570
+ )
571
+ self.__accessible_objects_under_test: OrderedSet[GenericAccessibleObject] = (
572
+ OrderedSet()
573
+ )
535
574
  self.__function_data_for_accessibles: dict[
536
575
  GenericAccessibleObject, _CallableData
537
576
  ] = {}
@@ -592,7 +631,7 @@ class ModuleTestCluster(TestCluster):
592
631
  if len(items) >= max_size or new_type in items:
593
632
  return old_type
594
633
  new_type = UnionType(tuple(sorted((*items, new_type))))
595
- elif old_type in (ANY, new_type):
634
+ elif old_type in {ANY, new_type}:
596
635
  new_type = UnionType((new_type,))
597
636
  else:
598
637
  new_type = UnionType(tuple(sorted((old_type, new_type))))
@@ -818,7 +857,7 @@ class ModuleTestCluster(TestCluster):
818
857
  ]
819
858
 
820
859
 
821
- class FilteredModuleTestCluster(TestCluster):
860
+ class FilteredModuleTestCluster(TestCluster): # noqa: PLR0904
822
861
  """A test cluster wrapping another test cluster.
823
862
 
824
863
  Delegates most methods to the wrapped delegate. This cluster filters out
@@ -1237,7 +1276,7 @@ def __analyse_method(
1237
1276
 
1238
1277
 
1239
1278
  class _ParseResults(dict):
1240
- def __init__(self, query_type4py: bool):
1279
+ def __init__(self, *, query_type4py: bool):
1241
1280
  super().__init__()
1242
1281
  self._query_type4py = query_type4py
1243
1282
 
@@ -1251,6 +1290,7 @@ def __resolve_dependencies(
1251
1290
  root_module: _ModuleParseResult,
1252
1291
  type_inference_strategy: TypeInferenceStrategy,
1253
1292
  test_cluster: ModuleTestCluster,
1293
+ *,
1254
1294
  query_type4py: bool = False,
1255
1295
  ) -> None:
1256
1296
  parse_results: dict[str, _ModuleParseResult] = _ParseResults(
@@ -1348,11 +1388,28 @@ def __analyse_included_classes(
1348
1388
 
1349
1389
  type_info = test_cluster.type_system.to_type_info(current)
1350
1390
 
1391
+ # Skip if the class is _ObjectProxyMethods, as it is broken
1392
+ # since __module__ is not well defined on it.
1393
+ if isinstance(current.__module__, property):
1394
+ LOGGER.info("Skipping class that has a property __module__: %s", current)
1395
+ continue
1396
+
1397
+ # Skip some C-extension modules that are not publicly accessible.
1398
+ try:
1399
+ results = parse_results[current.__module__]
1400
+ except ModuleNotFoundError as error:
1401
+ if getattr(current, "__file__", None) is None or Path(
1402
+ current.__file__
1403
+ ).suffix in {".so", ".pyd"}:
1404
+ LOGGER.info("C-extension module not found: %s", current.__module__)
1405
+ continue
1406
+ raise error
1407
+
1351
1408
  __analyse_class(
1352
1409
  type_info=type_info,
1353
1410
  type_inference_strategy=type_inference_strategy,
1354
- module_tree=parse_results[current.__module__].syntax_tree,
1355
- type4py_data=parse_results[current.__module__].type4py_data,
1411
+ module_tree=results.syntax_tree,
1412
+ type4py_data=results.type4py_data,
1356
1413
  test_cluster=test_cluster,
1357
1414
  add_to_test=current.__module__ == root_module_name,
1358
1415
  )
@@ -1402,6 +1459,7 @@ def __analyse_included_functions(
1402
1459
  def analyse_module(
1403
1460
  parsed_module: _ModuleParseResult,
1404
1461
  type_inference_strategy: TypeInferenceStrategy = TypeInferenceStrategy.TYPE_HINTS,
1462
+ *,
1405
1463
  query_type4py: bool = False,
1406
1464
  ) -> ModuleTestCluster:
1407
1465
  """Analyses a module to build a test cluster.
@@ -1427,6 +1485,7 @@ def analyse_module(
1427
1485
  def generate_test_cluster(
1428
1486
  module_name: str,
1429
1487
  type_inference_strategy: TypeInferenceStrategy = TypeInferenceStrategy.TYPE_HINTS,
1488
+ *,
1430
1489
  query_type4py: bool = False,
1431
1490
  ) -> ModuleTestCluster:
1432
1491
  """Generates a new test cluster from the given module.