coverage 7.15.1__tar.gz → 7.15.2__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 (403) hide show
  1. {coverage-7.15.1 → coverage-7.15.2}/CHANGES.rst +13 -0
  2. {coverage-7.15.1 → coverage-7.15.2}/PKG-INFO +7 -7
  3. {coverage-7.15.1 → coverage-7.15.2}/coverage/control.py +3 -23
  4. {coverage-7.15.1 → coverage-7.15.2}/coverage/parser.py +8 -2
  5. {coverage-7.15.1 → coverage-7.15.2}/coverage/python.py +0 -1
  6. {coverage-7.15.1 → coverage-7.15.2}/coverage/report_core.py +8 -2
  7. {coverage-7.15.1 → coverage-7.15.2}/coverage/version.py +1 -1
  8. {coverage-7.15.1 → coverage-7.15.2}/coverage.egg-info/PKG-INFO +7 -7
  9. {coverage-7.15.1 → coverage-7.15.2}/doc/conf.py +3 -3
  10. {coverage-7.15.1 → coverage-7.15.2}/.editorconfig +0 -0
  11. {coverage-7.15.1 → coverage-7.15.2}/.git-blame-ignore-revs +0 -0
  12. {coverage-7.15.1 → coverage-7.15.2}/.github/CODE_OF_CONDUCT.md +0 -0
  13. {coverage-7.15.1 → coverage-7.15.2}/.github/FUNDING.yml +0 -0
  14. {coverage-7.15.1 → coverage-7.15.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  15. {coverage-7.15.1 → coverage-7.15.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  16. {coverage-7.15.1 → coverage-7.15.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  17. {coverage-7.15.1 → coverage-7.15.2}/.github/ISSUE_TEMPLATE/support.md +0 -0
  18. {coverage-7.15.1 → coverage-7.15.2}/.github/SECURITY.md +0 -0
  19. {coverage-7.15.1 → coverage-7.15.2}/.github/dependabot.yml +0 -0
  20. {coverage-7.15.1 → coverage-7.15.2}/.github/workflows/codeql-analysis.yml +0 -0
  21. {coverage-7.15.1 → coverage-7.15.2}/.github/workflows/coverage.yml +0 -0
  22. {coverage-7.15.1 → coverage-7.15.2}/.github/workflows/dependency-review.yml +0 -0
  23. {coverage-7.15.1 → coverage-7.15.2}/.github/workflows/kit.yml +0 -0
  24. {coverage-7.15.1 → coverage-7.15.2}/.github/workflows/publish.yml +0 -0
  25. {coverage-7.15.1 → coverage-7.15.2}/.github/workflows/python-nightly.yml +0 -0
  26. {coverage-7.15.1 → coverage-7.15.2}/.github/workflows/quality.yml +0 -0
  27. {coverage-7.15.1 → coverage-7.15.2}/.github/workflows/testsuite.yml +0 -0
  28. {coverage-7.15.1 → coverage-7.15.2}/.github/zizmor.yml +0 -0
  29. {coverage-7.15.1 → coverage-7.15.2}/.ignore +0 -0
  30. {coverage-7.15.1 → coverage-7.15.2}/.pre-commit-config.yaml +0 -0
  31. {coverage-7.15.1 → coverage-7.15.2}/.readthedocs.yaml +0 -0
  32. {coverage-7.15.1 → coverage-7.15.2}/CITATION.cff +0 -0
  33. {coverage-7.15.1 → coverage-7.15.2}/CONTRIBUTORS.txt +0 -0
  34. {coverage-7.15.1 → coverage-7.15.2}/LICENSE.txt +0 -0
  35. {coverage-7.15.1 → coverage-7.15.2}/MANIFEST.in +0 -0
  36. {coverage-7.15.1 → coverage-7.15.2}/Makefile +0 -0
  37. {coverage-7.15.1 → coverage-7.15.2}/NOTICE.txt +0 -0
  38. {coverage-7.15.1 → coverage-7.15.2}/README.rst +0 -0
  39. {coverage-7.15.1 → coverage-7.15.2}/__main__.py +0 -0
  40. {coverage-7.15.1 → coverage-7.15.2}/a1_coverage.pth +0 -0
  41. {coverage-7.15.1 → coverage-7.15.2}/ci/README.txt +0 -0
  42. {coverage-7.15.1 → coverage-7.15.2}/ci/comment_on_fixes.py +0 -0
  43. {coverage-7.15.1 → coverage-7.15.2}/ci/session.py +0 -0
  44. {coverage-7.15.1 → coverage-7.15.2}/ci/trigger_action.py +0 -0
  45. {coverage-7.15.1 → coverage-7.15.2}/ci/update_rtfd.py +0 -0
  46. {coverage-7.15.1 → coverage-7.15.2}/coverage/__init__.py +0 -0
  47. {coverage-7.15.1 → coverage-7.15.2}/coverage/__main__.py +0 -0
  48. {coverage-7.15.1 → coverage-7.15.2}/coverage/annotate.py +0 -0
  49. {coverage-7.15.1 → coverage-7.15.2}/coverage/bytecode.py +0 -0
  50. {coverage-7.15.1 → coverage-7.15.2}/coverage/cmdline.py +0 -0
  51. {coverage-7.15.1 → coverage-7.15.2}/coverage/collector.py +0 -0
  52. {coverage-7.15.1 → coverage-7.15.2}/coverage/config.py +0 -0
  53. {coverage-7.15.1 → coverage-7.15.2}/coverage/context.py +0 -0
  54. {coverage-7.15.1 → coverage-7.15.2}/coverage/core.py +0 -0
  55. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/datastack.c +0 -0
  56. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/datastack.h +0 -0
  57. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/filedisp.c +0 -0
  58. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/filedisp.h +0 -0
  59. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/module.c +0 -0
  60. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/stats.h +0 -0
  61. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/tracer.c +0 -0
  62. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/tracer.h +0 -0
  63. {coverage-7.15.1 → coverage-7.15.2}/coverage/ctracer/util.h +0 -0
  64. {coverage-7.15.1 → coverage-7.15.2}/coverage/data.py +0 -0
  65. {coverage-7.15.1 → coverage-7.15.2}/coverage/debug.py +0 -0
  66. {coverage-7.15.1 → coverage-7.15.2}/coverage/disposition.py +0 -0
  67. {coverage-7.15.1 → coverage-7.15.2}/coverage/env.py +0 -0
  68. {coverage-7.15.1 → coverage-7.15.2}/coverage/exceptions.py +0 -0
  69. {coverage-7.15.1 → coverage-7.15.2}/coverage/execfile.py +0 -0
  70. {coverage-7.15.1 → coverage-7.15.2}/coverage/files.py +0 -0
  71. {coverage-7.15.1 → coverage-7.15.2}/coverage/html.py +0 -0
  72. {coverage-7.15.1 → coverage-7.15.2}/coverage/htmlfiles/coverage_html.js +0 -0
  73. {coverage-7.15.1 → coverage-7.15.2}/coverage/htmlfiles/favicon_32.png +0 -0
  74. {coverage-7.15.1 → coverage-7.15.2}/coverage/htmlfiles/index.html +0 -0
  75. {coverage-7.15.1 → coverage-7.15.2}/coverage/htmlfiles/keybd_closed.png +0 -0
  76. {coverage-7.15.1 → coverage-7.15.2}/coverage/htmlfiles/pyfile.html +0 -0
  77. {coverage-7.15.1 → coverage-7.15.2}/coverage/htmlfiles/style.css +0 -0
  78. {coverage-7.15.1 → coverage-7.15.2}/coverage/htmlfiles/style.scss +0 -0
  79. {coverage-7.15.1 → coverage-7.15.2}/coverage/inorout.py +0 -0
  80. {coverage-7.15.1 → coverage-7.15.2}/coverage/jsonreport.py +0 -0
  81. {coverage-7.15.1 → coverage-7.15.2}/coverage/lcovreport.py +0 -0
  82. {coverage-7.15.1 → coverage-7.15.2}/coverage/misc.py +0 -0
  83. {coverage-7.15.1 → coverage-7.15.2}/coverage/multiproc.py +0 -0
  84. {coverage-7.15.1 → coverage-7.15.2}/coverage/numbits.py +0 -0
  85. {coverage-7.15.1 → coverage-7.15.2}/coverage/patch.py +0 -0
  86. {coverage-7.15.1 → coverage-7.15.2}/coverage/phystokens.py +0 -0
  87. {coverage-7.15.1 → coverage-7.15.2}/coverage/plugin.py +0 -0
  88. {coverage-7.15.1 → coverage-7.15.2}/coverage/plugin_support.py +0 -0
  89. {coverage-7.15.1 → coverage-7.15.2}/coverage/pth_file.py +0 -0
  90. {coverage-7.15.1 → coverage-7.15.2}/coverage/py.typed +0 -0
  91. {coverage-7.15.1 → coverage-7.15.2}/coverage/pytracer.py +0 -0
  92. {coverage-7.15.1 → coverage-7.15.2}/coverage/regions.py +0 -0
  93. {coverage-7.15.1 → coverage-7.15.2}/coverage/report.py +0 -0
  94. {coverage-7.15.1 → coverage-7.15.2}/coverage/results.py +0 -0
  95. {coverage-7.15.1 → coverage-7.15.2}/coverage/sqldata.py +0 -0
  96. {coverage-7.15.1 → coverage-7.15.2}/coverage/sqlitedb.py +0 -0
  97. {coverage-7.15.1 → coverage-7.15.2}/coverage/sysmon.py +0 -0
  98. {coverage-7.15.1 → coverage-7.15.2}/coverage/templite.py +0 -0
  99. {coverage-7.15.1 → coverage-7.15.2}/coverage/tomlconfig.py +0 -0
  100. {coverage-7.15.1 → coverage-7.15.2}/coverage/tracer.pyi +0 -0
  101. {coverage-7.15.1 → coverage-7.15.2}/coverage/types.py +0 -0
  102. {coverage-7.15.1 → coverage-7.15.2}/coverage/xmlreport.py +0 -0
  103. {coverage-7.15.1 → coverage-7.15.2}/coverage.egg-info/SOURCES.txt +0 -0
  104. {coverage-7.15.1 → coverage-7.15.2}/coverage.egg-info/dependency_links.txt +0 -0
  105. {coverage-7.15.1 → coverage-7.15.2}/coverage.egg-info/entry_points.txt +0 -0
  106. {coverage-7.15.1 → coverage-7.15.2}/coverage.egg-info/not-zip-safe +0 -0
  107. {coverage-7.15.1 → coverage-7.15.2}/coverage.egg-info/requires.txt +0 -0
  108. {coverage-7.15.1 → coverage-7.15.2}/coverage.egg-info/top_level.txt +0 -0
  109. {coverage-7.15.1 → coverage-7.15.2}/doc/_static/coverage.css +0 -0
  110. {coverage-7.15.1 → coverage-7.15.2}/doc/api.rst +0 -0
  111. {coverage-7.15.1 → coverage-7.15.2}/doc/api_coverage.rst +0 -0
  112. {coverage-7.15.1 → coverage-7.15.2}/doc/api_coveragedata.rst +0 -0
  113. {coverage-7.15.1 → coverage-7.15.2}/doc/api_exceptions.rst +0 -0
  114. {coverage-7.15.1 → coverage-7.15.2}/doc/api_module.rst +0 -0
  115. {coverage-7.15.1 → coverage-7.15.2}/doc/api_plugin.rst +0 -0
  116. {coverage-7.15.1 → coverage-7.15.2}/doc/branch.rst +0 -0
  117. {coverage-7.15.1 → coverage-7.15.2}/doc/changes.rst +0 -0
  118. {coverage-7.15.1 → coverage-7.15.2}/doc/cog_helpers.py +0 -0
  119. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_annotate.rst +0 -0
  120. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_combine.rst +0 -0
  121. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_debug.rst +0 -0
  122. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_erase.rst +0 -0
  123. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_html.rst +0 -0
  124. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_json.rst +0 -0
  125. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_lcov.rst +0 -0
  126. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_report.rst +0 -0
  127. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_reporting.rst +0 -0
  128. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_run.rst +0 -0
  129. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/cmd_xml.rst +0 -0
  130. {coverage-7.15.1 → coverage-7.15.2}/doc/commands/index.rst +0 -0
  131. {coverage-7.15.1 → coverage-7.15.2}/doc/config.rst +0 -0
  132. {coverage-7.15.1 → coverage-7.15.2}/doc/contexts.rst +0 -0
  133. {coverage-7.15.1 → coverage-7.15.2}/doc/contributing.rst +0 -0
  134. {coverage-7.15.1 → coverage-7.15.2}/doc/dbschema.rst +0 -0
  135. {coverage-7.15.1 → coverage-7.15.2}/doc/dict.txt +0 -0
  136. {coverage-7.15.1 → coverage-7.15.2}/doc/excluding.rst +0 -0
  137. {coverage-7.15.1 → coverage-7.15.2}/doc/faq.rst +0 -0
  138. {coverage-7.15.1 → coverage-7.15.2}/doc/howitworks.rst +0 -0
  139. {coverage-7.15.1 → coverage-7.15.2}/doc/index.rst +0 -0
  140. {coverage-7.15.1 → coverage-7.15.2}/doc/install.rst +0 -0
  141. {coverage-7.15.1 → coverage-7.15.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
  142. {coverage-7.15.1 → coverage-7.15.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
  143. {coverage-7.15.1 → coverage-7.15.2}/doc/media/sleepy-snake-600.png +0 -0
  144. {coverage-7.15.1 → coverage-7.15.2}/doc/media/sleepy-snake-circle-150.png +0 -0
  145. {coverage-7.15.1 → coverage-7.15.2}/doc/messages.rst +0 -0
  146. {coverage-7.15.1 → coverage-7.15.2}/doc/migrating.rst +0 -0
  147. {coverage-7.15.1 → coverage-7.15.2}/doc/other.rst +0 -0
  148. {coverage-7.15.1 → coverage-7.15.2}/doc/plugins.rst +0 -0
  149. {coverage-7.15.1 → coverage-7.15.2}/doc/python-coverage.1.txt +0 -0
  150. {coverage-7.15.1 → coverage-7.15.2}/doc/requirements.in +0 -0
  151. {coverage-7.15.1 → coverage-7.15.2}/doc/requirements.pip +0 -0
  152. {coverage-7.15.1 → coverage-7.15.2}/doc/sample_html/favicon_32_cb_c827f16f.png +0 -0
  153. {coverage-7.15.1 → coverage-7.15.2}/doc/sample_html/keybd_closed_cb_900cfef5.png +0 -0
  154. {coverage-7.15.1 → coverage-7.15.2}/doc/sleepy.rst +0 -0
  155. {coverage-7.15.1 → coverage-7.15.2}/doc/source.rst +0 -0
  156. {coverage-7.15.1 → coverage-7.15.2}/doc/subprocess.rst +0 -0
  157. {coverage-7.15.1 → coverage-7.15.2}/doc/trouble.rst +0 -0
  158. {coverage-7.15.1 → coverage-7.15.2}/doc/whatsnew5x.rst +0 -0
  159. {coverage-7.15.1 → coverage-7.15.2}/howto.txt +0 -0
  160. {coverage-7.15.1 → coverage-7.15.2}/igor.py +0 -0
  161. {coverage-7.15.1 → coverage-7.15.2}/lab/README.txt +0 -0
  162. {coverage-7.15.1 → coverage-7.15.2}/lab/branches.py +0 -0
  163. {coverage-7.15.1 → coverage-7.15.2}/lab/compare_times.sh +0 -0
  164. {coverage-7.15.1 → coverage-7.15.2}/lab/coverage-04.dtd +0 -0
  165. {coverage-7.15.1 → coverage-7.15.2}/lab/extract_code.py +0 -0
  166. {coverage-7.15.1 → coverage-7.15.2}/lab/goals.py +0 -0
  167. {coverage-7.15.1 → coverage-7.15.2}/lab/hack_pyc.py +0 -0
  168. {coverage-7.15.1 → coverage-7.15.2}/lab/notes/arcs-to-branches.txt +0 -0
  169. {coverage-7.15.1 → coverage-7.15.2}/lab/notes/bug1303.txt +0 -0
  170. {coverage-7.15.1 → coverage-7.15.2}/lab/notes/pypy-738-decorated-functions.txt +0 -0
  171. {coverage-7.15.1 → coverage-7.15.2}/lab/parse_all.py +0 -0
  172. {coverage-7.15.1 → coverage-7.15.2}/lab/parser.py +0 -0
  173. {coverage-7.15.1 → coverage-7.15.2}/lab/pick.py +0 -0
  174. {coverage-7.15.1 → coverage-7.15.2}/lab/platform_info.py +0 -0
  175. {coverage-7.15.1 → coverage-7.15.2}/lab/run_sysmon.py +0 -0
  176. {coverage-7.15.1 → coverage-7.15.2}/lab/run_trace.py +0 -0
  177. {coverage-7.15.1 → coverage-7.15.2}/lab/select_contexts.py +0 -0
  178. {coverage-7.15.1 → coverage-7.15.2}/lab/show_platform.py +0 -0
  179. {coverage-7.15.1 → coverage-7.15.2}/lab/show_pyc.py +0 -0
  180. {coverage-7.15.1 → coverage-7.15.2}/lab/treetopy.sh +0 -0
  181. {coverage-7.15.1 → coverage-7.15.2}/lab/warn_executed.py +0 -0
  182. {coverage-7.15.1 → coverage-7.15.2}/lab/warn_executed.toml +0 -0
  183. {coverage-7.15.1 → coverage-7.15.2}/metacov.ini +0 -0
  184. {coverage-7.15.1 → coverage-7.15.2}/pyproject.toml +0 -0
  185. {coverage-7.15.1 → coverage-7.15.2}/requirements/dev.in +0 -0
  186. {coverage-7.15.1 → coverage-7.15.2}/requirements/dev.pip +0 -0
  187. {coverage-7.15.1 → coverage-7.15.2}/requirements/kit.in +0 -0
  188. {coverage-7.15.1 → coverage-7.15.2}/requirements/kit.pip +0 -0
  189. {coverage-7.15.1 → coverage-7.15.2}/requirements/light-threads.in +0 -0
  190. {coverage-7.15.1 → coverage-7.15.2}/requirements/light-threads.pip +0 -0
  191. {coverage-7.15.1 → coverage-7.15.2}/requirements/mypy.in +0 -0
  192. {coverage-7.15.1 → coverage-7.15.2}/requirements/mypy.pip +0 -0
  193. {coverage-7.15.1 → coverage-7.15.2}/requirements/pins.pip +0 -0
  194. {coverage-7.15.1 → coverage-7.15.2}/requirements/pip.in +0 -0
  195. {coverage-7.15.1 → coverage-7.15.2}/requirements/pip.pip +0 -0
  196. {coverage-7.15.1 → coverage-7.15.2}/requirements/pytest.in +0 -0
  197. {coverage-7.15.1 → coverage-7.15.2}/requirements/pytest.pip +0 -0
  198. {coverage-7.15.1 → coverage-7.15.2}/requirements/tox.in +0 -0
  199. {coverage-7.15.1 → coverage-7.15.2}/requirements/tox.pip +0 -0
  200. {coverage-7.15.1 → coverage-7.15.2}/setup.cfg +0 -0
  201. {coverage-7.15.1 → coverage-7.15.2}/setup.py +0 -0
  202. {coverage-7.15.1 → coverage-7.15.2}/tests/__init__.py +0 -0
  203. {coverage-7.15.1 → coverage-7.15.2}/tests/conftest.py +0 -0
  204. {coverage-7.15.1 → coverage-7.15.2}/tests/coveragetest.py +0 -0
  205. {coverage-7.15.1 → coverage-7.15.2}/tests/covmodzip1.py +0 -0
  206. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/README.rst +0 -0
  207. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
  208. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
  209. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
  210. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
  211. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
  212. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
  213. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/mae/mae.py,cover +0 -0
  214. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
  215. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/multi/a/a.py,cover +0 -0
  216. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
  217. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/multi/b/b.py,cover +0 -0
  218. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/multi/multi.py,cover +0 -0
  219. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/annotate/white/white.py,cover +0 -0
  220. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/Makefile +0 -0
  221. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/a/a_py.html +0 -0
  222. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/a/class_index.html +0 -0
  223. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/a/function_index.html +0 -0
  224. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/a/index.html +0 -0
  225. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/b_branch/b_py.html +0 -0
  226. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/b_branch/class_index.html +0 -0
  227. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/b_branch/function_index.html +0 -0
  228. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/b_branch/index.html +0 -0
  229. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/bom/bom_py.html +0 -0
  230. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/bom/class_index.html +0 -0
  231. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/bom/function_index.html +0 -0
  232. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/bom/index.html +0 -0
  233. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/contexts/class_index.html +0 -0
  234. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/contexts/function_index.html +0 -0
  235. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/contexts/index.html +0 -0
  236. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/contexts/two_tests_py.html +0 -0
  237. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/isolatin1/class_index.html +0 -0
  238. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/isolatin1/function_index.html +0 -0
  239. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/isolatin1/index.html +0 -0
  240. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/isolatin1/isolatin1_py.html +0 -0
  241. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/multiline/class_index.html +0 -0
  242. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/multiline/function_index.html +0 -0
  243. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/multiline/index.html +0 -0
  244. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/multiline/multiline_py.html +0 -0
  245. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_1/class_index.html +0 -0
  246. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_1/function_index.html +0 -0
  247. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_1/index.html +0 -0
  248. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_1/m1_py.html +0 -0
  249. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_1/m2_py.html +0 -0
  250. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_1/m3_py.html +0 -0
  251. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_1/main_py.html +0 -0
  252. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_2/class_index.html +0 -0
  253. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_2/function_index.html +0 -0
  254. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_2/index.html +0 -0
  255. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_2/m2_py.html +0 -0
  256. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_2/m3_py.html +0 -0
  257. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_2/main_py.html +0 -0
  258. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_3/class_index.html +0 -0
  259. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_3/function_index.html +0 -0
  260. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_3/index.html +0 -0
  261. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_3/m3_py.html +0 -0
  262. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_3/main_py.html +0 -0
  263. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_4/class_index.html +0 -0
  264. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_4/function_index.html +0 -0
  265. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_4/index.html +0 -0
  266. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_4/m1_py.html +0 -0
  267. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_4/m3_py.html +0 -0
  268. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_4/main_py.html +0 -0
  269. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_5/class_index.html +0 -0
  270. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_5/function_index.html +0 -0
  271. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_5/index.html +0 -0
  272. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_5/m1_py.html +0 -0
  273. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/omit_5/main_py.html +0 -0
  274. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/other/blah_blah_other_py.html +0 -0
  275. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/other/class_index.html +0 -0
  276. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/other/function_index.html +0 -0
  277. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/other/here_py.html +0 -0
  278. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/other/index.html +0 -0
  279. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/partial/class_index.html +0 -0
  280. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/partial/function_index.html +0 -0
  281. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/partial/index.html +0 -0
  282. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/partial/partial_py.html +0 -0
  283. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/styled/a_py.html +0 -0
  284. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/styled/class_index.html +0 -0
  285. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/styled/function_index.html +0 -0
  286. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/styled/index.html +0 -0
  287. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/styled/myextra.css +0 -0
  288. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/styled/style.css +0 -0
  289. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
  290. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
  291. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
  292. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
  293. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/unicode/class_index.html +0 -0
  294. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/unicode/function_index.html +0 -0
  295. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/unicode/index.html +0 -0
  296. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/html/unicode/unicode_py.html +0 -0
  297. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/testing/getty/gettysburg.txt +0 -0
  298. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/testing/xml/output.xml +0 -0
  299. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/xml/x_xml/coverage.xml +0 -0
  300. {coverage-7.15.1 → coverage-7.15.2}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
  301. {coverage-7.15.1 → coverage-7.15.2}/tests/goldtest.py +0 -0
  302. {coverage-7.15.1 → coverage-7.15.2}/tests/helpers.py +0 -0
  303. {coverage-7.15.1 → coverage-7.15.2}/tests/js/index.html +0 -0
  304. {coverage-7.15.1 → coverage-7.15.2}/tests/js/tests.js +0 -0
  305. {coverage-7.15.1 → coverage-7.15.2}/tests/mixins.py +0 -0
  306. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/__init__.py +0 -0
  307. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/afile.odd.py +0 -0
  308. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/afile.py +0 -0
  309. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/bb/__init__.py +0 -0
  310. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/bb/bfile.odd.py +0 -0
  311. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/bb/bfile.py +0 -0
  312. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/bb/cc/__init__.py +0 -0
  313. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/bb/cc/cfile.py +0 -0
  314. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/bb.odd/bfile.py +0 -0
  315. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/aa/zfile.py +0 -0
  316. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/ambiguous/__init__.py +0 -0
  317. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
  318. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
  319. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/checkspec.py +0 -0
  320. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/covmod1.py +0 -0
  321. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/namespace_420/sub1/__init__.py +0 -0
  322. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/__init__.py +0 -0
  323. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/__main__.py +0 -0
  324. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/p1a.py +0 -0
  325. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/p1b.py +0 -0
  326. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/p1c.py +0 -0
  327. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/runmod2.py +0 -0
  328. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/sub/__init__.py +0 -0
  329. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/sub/__main__.py +0 -0
  330. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/sub/ps1a.py +0 -0
  331. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg1/sub/runmod3.py +0 -0
  332. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg2/__init__.py +0 -0
  333. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg2/p2a.py +0 -0
  334. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/pkg2/p2b.py +0 -0
  335. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/plugins/__init__.py +0 -0
  336. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/plugins/a_plugin.py +0 -0
  337. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/plugins/another.py +0 -0
  338. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/process_test/__init__.py +0 -0
  339. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/process_test/try_execfile.py +0 -0
  340. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/runmod1.py +0 -0
  341. {coverage-7.15.1 → coverage-7.15.2}/tests/modules/usepkgs.py +0 -0
  342. {coverage-7.15.1 → coverage-7.15.2}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
  343. {coverage-7.15.1 → coverage-7.15.2}/tests/moremodules/othermods/__init__.py +0 -0
  344. {coverage-7.15.1 → coverage-7.15.2}/tests/moremodules/othermods/othera.py +0 -0
  345. {coverage-7.15.1 → coverage-7.15.2}/tests/moremodules/othermods/otherb.py +0 -0
  346. {coverage-7.15.1 → coverage-7.15.2}/tests/moremodules/othermods/sub/__init__.py +0 -0
  347. {coverage-7.15.1 → coverage-7.15.2}/tests/moremodules/othermods/sub/osa.py +0 -0
  348. {coverage-7.15.1 → coverage-7.15.2}/tests/moremodules/othermods/sub/osb.py +0 -0
  349. {coverage-7.15.1 → coverage-7.15.2}/tests/osinfo.py +0 -0
  350. {coverage-7.15.1 → coverage-7.15.2}/tests/plugin1.py +0 -0
  351. {coverage-7.15.1 → coverage-7.15.2}/tests/plugin2.py +0 -0
  352. {coverage-7.15.1 → coverage-7.15.2}/tests/plugin_config.py +0 -0
  353. {coverage-7.15.1 → coverage-7.15.2}/tests/qunit/jquery.tmpl.min.js +0 -0
  354. {coverage-7.15.1 → coverage-7.15.2}/tests/select_plugin.py +0 -0
  355. {coverage-7.15.1 → coverage-7.15.2}/tests/strategies.py +0 -0
  356. {coverage-7.15.1 → coverage-7.15.2}/tests/stress_phystoken.tok +0 -0
  357. {coverage-7.15.1 → coverage-7.15.2}/tests/stress_phystoken_dos.tok +0 -0
  358. {coverage-7.15.1 → coverage-7.15.2}/tests/test_annotate.py +0 -0
  359. {coverage-7.15.1 → coverage-7.15.2}/tests/test_api.py +0 -0
  360. {coverage-7.15.1 → coverage-7.15.2}/tests/test_arcs.py +0 -0
  361. {coverage-7.15.1 → coverage-7.15.2}/tests/test_bytecode.py +0 -0
  362. {coverage-7.15.1 → coverage-7.15.2}/tests/test_cmdline.py +0 -0
  363. {coverage-7.15.1 → coverage-7.15.2}/tests/test_collector.py +0 -0
  364. {coverage-7.15.1 → coverage-7.15.2}/tests/test_concurrency.py +0 -0
  365. {coverage-7.15.1 → coverage-7.15.2}/tests/test_config.py +0 -0
  366. {coverage-7.15.1 → coverage-7.15.2}/tests/test_context.py +0 -0
  367. {coverage-7.15.1 → coverage-7.15.2}/tests/test_core.py +0 -0
  368. {coverage-7.15.1 → coverage-7.15.2}/tests/test_coverage.py +0 -0
  369. {coverage-7.15.1 → coverage-7.15.2}/tests/test_data.py +0 -0
  370. {coverage-7.15.1 → coverage-7.15.2}/tests/test_debug.py +0 -0
  371. {coverage-7.15.1 → coverage-7.15.2}/tests/test_execfile.py +0 -0
  372. {coverage-7.15.1 → coverage-7.15.2}/tests/test_filereporter.py +0 -0
  373. {coverage-7.15.1 → coverage-7.15.2}/tests/test_files.py +0 -0
  374. {coverage-7.15.1 → coverage-7.15.2}/tests/test_goldtest.py +0 -0
  375. {coverage-7.15.1 → coverage-7.15.2}/tests/test_html.py +0 -0
  376. {coverage-7.15.1 → coverage-7.15.2}/tests/test_json.py +0 -0
  377. {coverage-7.15.1 → coverage-7.15.2}/tests/test_lcov.py +0 -0
  378. {coverage-7.15.1 → coverage-7.15.2}/tests/test_misc.py +0 -0
  379. {coverage-7.15.1 → coverage-7.15.2}/tests/test_mixins.py +0 -0
  380. {coverage-7.15.1 → coverage-7.15.2}/tests/test_numbits.py +0 -0
  381. {coverage-7.15.1 → coverage-7.15.2}/tests/test_oddball.py +0 -0
  382. {coverage-7.15.1 → coverage-7.15.2}/tests/test_parser.py +0 -0
  383. {coverage-7.15.1 → coverage-7.15.2}/tests/test_phystokens.py +0 -0
  384. {coverage-7.15.1 → coverage-7.15.2}/tests/test_plugins.py +0 -0
  385. {coverage-7.15.1 → coverage-7.15.2}/tests/test_process.py +0 -0
  386. {coverage-7.15.1 → coverage-7.15.2}/tests/test_python.py +0 -0
  387. {coverage-7.15.1 → coverage-7.15.2}/tests/test_regions.py +0 -0
  388. {coverage-7.15.1 → coverage-7.15.2}/tests/test_report.py +0 -0
  389. {coverage-7.15.1 → coverage-7.15.2}/tests/test_report_common.py +0 -0
  390. {coverage-7.15.1 → coverage-7.15.2}/tests/test_report_core.py +0 -0
  391. {coverage-7.15.1 → coverage-7.15.2}/tests/test_results.py +0 -0
  392. {coverage-7.15.1 → coverage-7.15.2}/tests/test_setup.py +0 -0
  393. {coverage-7.15.1 → coverage-7.15.2}/tests/test_sqlitedb.py +0 -0
  394. {coverage-7.15.1 → coverage-7.15.2}/tests/test_sysmon.py +0 -0
  395. {coverage-7.15.1 → coverage-7.15.2}/tests/test_templite.py +0 -0
  396. {coverage-7.15.1 → coverage-7.15.2}/tests/test_testing.py +0 -0
  397. {coverage-7.15.1 → coverage-7.15.2}/tests/test_venv.py +0 -0
  398. {coverage-7.15.1 → coverage-7.15.2}/tests/test_version.py +0 -0
  399. {coverage-7.15.1 → coverage-7.15.2}/tests/test_xml.py +0 -0
  400. {coverage-7.15.1 → coverage-7.15.2}/tests/testenv.py +0 -0
  401. {coverage-7.15.1 → coverage-7.15.2}/tests/zipsrc/zip1/__init__.py +0 -0
  402. {coverage-7.15.1 → coverage-7.15.2}/tests/zipsrc/zip1/zip1.py +0 -0
  403. {coverage-7.15.1 → coverage-7.15.2}/tox.ini +0 -0
@@ -22,6 +22,19 @@ upgrading your version of coverage.py.
22
22
 
23
23
  .. start-releases
24
24
 
25
+ .. _changes_7-15-2:
26
+
27
+ Version 7.15.2 — 2026-07-15
28
+ ---------------------------
29
+
30
+ - Fix: one of the performance improvements in 7.15.1 (pull 2215) dramatically
31
+ increased memory use during reporting for large projects. Now we use a
32
+ different approach that is both faster and slimmer than 7.15.0. Fixes `issue
33
+ 2229`_.
34
+
35
+ .. _issue 2229: https://github.com/coveragepy/coveragepy/issues/2229
36
+
37
+
25
38
  .. _changes_7-15-1:
26
39
 
27
40
  Version 7.15.1 — 2026-07-12
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coverage
3
- Version: 7.15.1
3
+ Version: 7.15.2
4
4
  Summary: Code coverage measurement for Python
5
5
  Home-page: https://github.com/coveragepy/coveragepy
6
6
  Author: Ned Batchelder and 261 others
7
7
  Author-email: ned@nedbatchelder.com
8
8
  License: Apache-2.0
9
- Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.1
9
+ Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.2
10
10
  Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
11
11
  Project-URL: Issues, https://github.com/coveragepy/coveragepy/issues
12
12
  Project-URL: Mastodon, https://hachyderm.io/@coveragepy
@@ -83,7 +83,7 @@ Coverage.py runs on these versions of Python:
83
83
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
84
84
  `GitHub`_.
85
85
 
86
- .. _Read the Docs: https://coverage.readthedocs.io/en/7.15.1/
86
+ .. _Read the Docs: https://coverage.readthedocs.io/en/7.15.2/
87
87
  .. _GitHub: https://github.com/coveragepy/coveragepy
88
88
 
89
89
 
@@ -112,7 +112,7 @@ Getting Started
112
112
  Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
113
113
  of the docs.
114
114
 
115
- .. _Quick Start section: https://coverage.readthedocs.io/en/7.15.1/#quick-start
115
+ .. _Quick Start section: https://coverage.readthedocs.io/en/7.15.2/#quick-start
116
116
 
117
117
 
118
118
  Change history
@@ -120,7 +120,7 @@ Change history
120
120
 
121
121
  The complete history of changes is on the `change history page`_.
122
122
 
123
- .. _change history page: https://coverage.readthedocs.io/en/7.15.1/changes.html
123
+ .. _change history page: https://coverage.readthedocs.io/en/7.15.2/changes.html
124
124
 
125
125
 
126
126
  Code of Conduct
@@ -139,7 +139,7 @@ Contributing
139
139
  Found a bug? Want to help improve the code or documentation? See the
140
140
  `Contributing section`_ of the docs.
141
141
 
142
- .. _Contributing section: https://coverage.readthedocs.io/en/7.15.1/contributing.html
142
+ .. _Contributing section: https://coverage.readthedocs.io/en/7.15.2/contributing.html
143
143
 
144
144
 
145
145
  Security
@@ -167,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
167
167
  :target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
168
168
  :alt: Quality check status
169
169
  .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
170
- :target: https://coverage.readthedocs.io/en/7.15.1/
170
+ :target: https://coverage.readthedocs.io/en/7.15.2/
171
171
  :alt: Documentation
172
172
  .. |kit| image:: https://img.shields.io/pypi/v/coverage
173
173
  :target: https://pypi.org/project/coverage/
@@ -304,8 +304,6 @@ class Coverage(TConfigurable):
304
304
  self._file_mapper: Callable[[str], str] = abs_file
305
305
  self._data_suffix = self._run_suffix = None
306
306
  self._exclude_re: dict[str, str] = {}
307
- self._analysis_cache: dict[TMorf, Analysis] = {}
308
- self._file_reporter_cache: dict[TMorf, FileReporter] = {}
309
307
  self._old_sigterm: Callable[[int, FrameType | None], Any] | None = None
310
308
 
311
309
  # State machine variables:
@@ -567,7 +565,6 @@ class Coverage(TConfigurable):
567
565
  if not should_skip:
568
566
  assert self._data is not None
569
567
  self._data.read()
570
- self._clear_analysis_caches()
571
568
 
572
569
  def _init_for_start(self) -> None:
573
570
  """Initialization for start()"""
@@ -780,7 +777,6 @@ class Coverage(TConfigurable):
780
777
  self._data.erase(parallel=self.config.parallel)
781
778
  self._data = None
782
779
  self._inited_for_start = False
783
- self._clear_analysis_caches()
784
780
 
785
781
  def switch_context(self, new_context: str) -> None:
786
782
  """Switch to a new dynamic context.
@@ -913,7 +909,6 @@ class Coverage(TConfigurable):
913
909
  keep=keep,
914
910
  message=self._message,
915
911
  )
916
- self._clear_analysis_caches()
917
912
 
918
913
  def get_data(self) -> CoverageData:
919
914
  """Get the collected data.
@@ -935,7 +930,6 @@ class Coverage(TConfigurable):
935
930
  self._collector.plugin_was_disabled(plugin)
936
931
 
937
932
  if self._collector.flush_data():
938
- self._clear_analysis_caches()
939
933
  self._post_save_work()
940
934
 
941
935
  assert self._data is not None
@@ -1004,27 +998,18 @@ class Coverage(TConfigurable):
1004
998
  analysis.missing_formatted(),
1005
999
  )
1006
1000
 
1007
- def _analyze(self, morf: TMorf) -> Analysis:
1001
+ def _analyze(self, morf: TMorf, file_reporter: FileReporter | None = None) -> Analysis:
1008
1002
  """Analyze a module or file. Private for now."""
1009
- analysis = self._analysis_cache.get(morf)
1010
- if analysis is not None:
1011
- return analysis
1012
-
1013
1003
  self._init()
1014
1004
  self._post_init()
1015
1005
 
1016
1006
  data = self.get_data()
1017
- file_reporter = self._get_file_reporter(morf)
1007
+ if file_reporter is None:
1008
+ file_reporter = self._get_file_reporter(morf)
1018
1009
  filename = self._file_mapper(file_reporter.filename)
1019
1010
  analysis = analysis_from_file_reporter(data, self.config.precision, file_reporter, filename)
1020
- self._analysis_cache[morf] = analysis
1021
1011
  return analysis
1022
1012
 
1023
- def _clear_analysis_caches(self) -> None:
1024
- """Forget cached analyses and file reporters, because data changed."""
1025
- self._analysis_cache.clear()
1026
- self._file_reporter_cache.clear()
1027
-
1028
1013
  def branch_stats(self, morf: TMorf) -> dict[TLineNo, tuple[int, int]]:
1029
1014
  """Get branch statistics about a module.
1030
1015
 
@@ -1041,9 +1026,6 @@ class Coverage(TConfigurable):
1041
1026
 
1042
1027
  def _get_file_reporter(self, morf: TMorf) -> FileReporter:
1043
1028
  """Get a FileReporter for a module or file name."""
1044
- cached = self._file_reporter_cache.get(morf)
1045
- if cached is not None:
1046
- return cached
1047
1029
  assert self._data is not None
1048
1030
  plugin = None
1049
1031
  file_reporter: str | FileReporter = "python"
@@ -1068,7 +1050,6 @@ class Coverage(TConfigurable):
1068
1050
  file_reporter = PythonFileReporter(morf, self)
1069
1051
 
1070
1052
  assert isinstance(file_reporter, FileReporter)
1071
- self._file_reporter_cache[morf] = file_reporter
1072
1053
  return file_reporter
1073
1054
 
1074
1055
  def _get_file_reporters(
@@ -1093,7 +1074,6 @@ class Coverage(TConfigurable):
1093
1074
  if not isinstance(morfs, (list, tuple, set)):
1094
1075
  morfs = [morfs] # type: ignore[list-item]
1095
1076
 
1096
- morfs = sorted(morfs, key=lambda m: m if isinstance(m, str) else m.__name__)
1097
1077
  return [(self._get_file_reporter(morf), morf) for morf in morfs]
1098
1078
 
1099
1079
  def _prepare_data_for_reporting(self) -> None:
@@ -336,8 +336,10 @@ class PythonParser:
336
336
  `_all_arcs` is the set of arcs in the code.
337
337
 
338
338
  """
339
- assert self._ast_root is not None
340
- aaa = AstArcAnalyzer(self.filename, self._ast_root, self.raw_statements, self.multiline_map)
339
+ ast_root = self._ast_root
340
+ if ast_root is None:
341
+ ast_root = ast.parse(self.text)
342
+ aaa = AstArcAnalyzer(self.filename, ast_root, self.raw_statements, self.multiline_map)
341
343
  aaa.analyze()
342
344
  arcs = aaa.arcs
343
345
  self._with_jump_fixers = aaa.with_jump_fixers()
@@ -353,6 +355,10 @@ class PythonParser:
353
355
 
354
356
  self._missing_arc_fragments = aaa.missing_arc_fragments
355
357
 
358
+ # The AST is large and no longer needed: everything derived from it is
359
+ # memoized above. Release it so long-lived parsers don't hold it.
360
+ self._ast_root = None
361
+
356
362
  def fix_with_jumps(self, arcs: Iterable[TArc]) -> set[TArc]:
357
363
  """Adjust arcs to fix jumps leaving `with` statements.
358
364
 
@@ -172,7 +172,6 @@ class PythonFileReporter(FileReporter):
172
172
 
173
173
  self._source: str | None = None
174
174
  self._parser: PythonParser | None = None
175
- self._excluded = None
176
175
 
177
176
  def __repr__(self) -> str:
178
177
  return f"<PythonFileReporter {self.filename!r}>"
@@ -93,9 +93,15 @@ def get_analysis_to_report(
93
93
  if not fr_morfs:
94
94
  raise NoDataError("No data to report.")
95
95
 
96
- for fr, morf in sorted(fr_morfs):
96
+ # fr_morfs is a complete list of all files. FileReporters start very small,
97
+ # but when you use one, it becomes large. We don't want to hold onto them
98
+ # longer than we need to, so instead of a for loop, we'll pop and discard
99
+ # the file reporters as we go.
100
+ fr_morfs.sort(reverse=True)
101
+ while fr_morfs:
102
+ fr, morf = fr_morfs.pop()
97
103
  try:
98
- analysis = coverage._analyze(morf)
104
+ analysis = coverage._analyze(morf, file_reporter=fr)
99
105
  except NotPython:
100
106
  # Only report errors for .py files, and only if we didn't
101
107
  # explicitly suppress those errors.
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
 
9
9
  # version_info: same semantics as sys.version_info.
10
10
  # _dev: the .devN suffix if any.
11
- version_info = (7, 15, 1, "final", 0)
11
+ version_info = (7, 15, 2, "final", 0)
12
12
  _dev = 0
13
13
 
14
14
 
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coverage
3
- Version: 7.15.1
3
+ Version: 7.15.2
4
4
  Summary: Code coverage measurement for Python
5
5
  Home-page: https://github.com/coveragepy/coveragepy
6
6
  Author: Ned Batchelder and 261 others
7
7
  Author-email: ned@nedbatchelder.com
8
8
  License: Apache-2.0
9
- Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.1
9
+ Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.2
10
10
  Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
11
11
  Project-URL: Issues, https://github.com/coveragepy/coveragepy/issues
12
12
  Project-URL: Mastodon, https://hachyderm.io/@coveragepy
@@ -83,7 +83,7 @@ Coverage.py runs on these versions of Python:
83
83
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
84
84
  `GitHub`_.
85
85
 
86
- .. _Read the Docs: https://coverage.readthedocs.io/en/7.15.1/
86
+ .. _Read the Docs: https://coverage.readthedocs.io/en/7.15.2/
87
87
  .. _GitHub: https://github.com/coveragepy/coveragepy
88
88
 
89
89
 
@@ -112,7 +112,7 @@ Getting Started
112
112
  Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
113
113
  of the docs.
114
114
 
115
- .. _Quick Start section: https://coverage.readthedocs.io/en/7.15.1/#quick-start
115
+ .. _Quick Start section: https://coverage.readthedocs.io/en/7.15.2/#quick-start
116
116
 
117
117
 
118
118
  Change history
@@ -120,7 +120,7 @@ Change history
120
120
 
121
121
  The complete history of changes is on the `change history page`_.
122
122
 
123
- .. _change history page: https://coverage.readthedocs.io/en/7.15.1/changes.html
123
+ .. _change history page: https://coverage.readthedocs.io/en/7.15.2/changes.html
124
124
 
125
125
 
126
126
  Code of Conduct
@@ -139,7 +139,7 @@ Contributing
139
139
  Found a bug? Want to help improve the code or documentation? See the
140
140
  `Contributing section`_ of the docs.
141
141
 
142
- .. _Contributing section: https://coverage.readthedocs.io/en/7.15.1/contributing.html
142
+ .. _Contributing section: https://coverage.readthedocs.io/en/7.15.2/contributing.html
143
143
 
144
144
 
145
145
  Security
@@ -167,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
167
167
  :target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
168
168
  :alt: Quality check status
169
169
  .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
170
- :target: https://coverage.readthedocs.io/en/7.15.1/
170
+ :target: https://coverage.readthedocs.io/en/7.15.2/
171
171
  :alt: Documentation
172
172
  .. |kit| image:: https://img.shields.io/pypi/v/coverage
173
173
  :target: https://pypi.org/project/coverage/
@@ -69,11 +69,11 @@ project = "Coverage.py"
69
69
  # @@@ editable
70
70
  copyright = "2009–2026, Ned Batchelder" # pylint: disable=redefined-builtin
71
71
  # The short X.Y.Z version.
72
- version = "7.15.1"
72
+ version = "7.15.2"
73
73
  # The full version, including alpha/beta/rc tags.
74
- release = "7.15.1"
74
+ release = "7.15.2"
75
75
  # The date of release, in "monthname day, year" format.
76
- release_date = "July 12, 2026"
76
+ release_date = "July 15, 2026"
77
77
  # @@@ end
78
78
 
79
79
  rst_epilog = f"""
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes