passagemath-repl 10.4.29__tar.gz → 10.4.31__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 (262) hide show
  1. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/MANIFEST.in +6 -0
  2. {passagemath_repl-10.4.29/passagemath_repl.egg-info → passagemath_repl-10.4.31}/PKG-INFO +3 -3
  3. passagemath_repl-10.4.31/VERSION.txt +1 -0
  4. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage +1 -1
  5. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-version.sh +3 -3
  6. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31/passagemath_repl.egg-info}/PKG-INFO +3 -3
  7. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/passagemath_repl.egg-info/SOURCES.txt +3 -0
  8. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/passagemath_repl.egg-info/requires.txt +2 -2
  9. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/pyproject.toml +3 -2
  10. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/pyproject.toml.m4 +1 -0
  11. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/all__sagemath_repl.py +1 -1
  12. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/__main__.py +1 -1
  13. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/control.py +34 -27
  14. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/external.py +1 -1
  15. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/fixtures.py +2 -2
  16. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/forker.py +57 -48
  17. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/parsing.py +1 -1
  18. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/reporting.py +7 -7
  19. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/sources.py +1 -1
  20. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/test.py +9 -9
  21. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/util.py +220 -5
  22. passagemath_repl-10.4.31/sage/interfaces/cleaner.py +48 -0
  23. passagemath_repl-10.4.31/sage/interfaces/quit.py +163 -0
  24. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/sagedoc.py +10 -7
  25. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/configuration.py +1 -1
  26. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/fancy_repr.py +1 -1
  27. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/util.py +1 -1
  28. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/interface_magic.py +1 -1
  29. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/interpreter.py +4 -3
  30. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_extension.py +1 -1
  31. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/install.py +1 -1
  32. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/widgets.py +2 -2
  33. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/display_manager.py +1 -1
  34. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_basic.py +3 -3
  35. passagemath_repl-10.4.31/sage/tests/books/__init__.py +2 -0
  36. passagemath_repl-10.4.31/sage/tests/meson.build +54 -0
  37. passagemath_repl-10.4.29/VERSION.txt +0 -1
  38. passagemath_repl-10.4.29/sage/tests/memcheck/__init__.py +0 -1
  39. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/README.rst +0 -0
  40. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/math-readline +0 -0
  41. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-cachegrind +0 -0
  42. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-callgrind +0 -0
  43. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-cleaner +0 -0
  44. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-coverage +0 -0
  45. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-cython +0 -0
  46. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-env +0 -0
  47. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-env-config.in +0 -0
  48. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-eval +0 -0
  49. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-fixdoctests +0 -0
  50. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-grep +0 -0
  51. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-grepdoc +0 -0
  52. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-inline-fortran +0 -0
  53. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-ipynb2rst +0 -0
  54. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-ipython +0 -0
  55. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-list-packages +0 -0
  56. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-massif +0 -0
  57. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-notebook +0 -0
  58. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-num-threads.py +0 -0
  59. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-omega +0 -0
  60. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-preparse +0 -0
  61. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-python +0 -0
  62. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-run +0 -0
  63. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-run-cython +0 -0
  64. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-runtests +0 -0
  65. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-src-env-config.in +0 -0
  66. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-startuptime.py +0 -0
  67. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-update-version +0 -0
  68. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-valgrind +0 -0
  69. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-venv-config +0 -0
  70. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/known-test-failures.json +0 -0
  71. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/passagemath_repl.egg-info/dependency_links.txt +0 -0
  72. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/passagemath_repl.egg-info/top_level.txt +0 -0
  73. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/requirements-editable.txt.m4 +0 -0
  74. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/requirements.txt.m4 +0 -0
  75. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/__init__.py +0 -0
  76. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/all.py +0 -0
  77. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/check_tolerance.py +0 -0
  78. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/marked_output.py +0 -0
  79. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/parsing_test.py +0 -0
  80. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/rif_tol.py +0 -0
  81. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/1second.rst +0 -0
  82. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/99seconds.rst +0 -0
  83. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/abort.rst +0 -0
  84. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/atexit.rst +0 -0
  85. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/fail_and_die.rst +0 -0
  86. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/initial.rst +0 -0
  87. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/interrupt.rst +0 -0
  88. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/interrupt_diehard.rst +0 -0
  89. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/keyboardinterrupt.rst +0 -0
  90. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/longtime.rst +0 -0
  91. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/nodoctest +0 -0
  92. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/random_seed.rst +0 -0
  93. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/show_skipped.rst +0 -0
  94. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/sig_on.rst +0 -0
  95. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/simple_failure.rst +0 -0
  96. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/sleep_and_raise.rst +0 -0
  97. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/tolerance.rst +0 -0
  98. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/all__sagemath_repl.py +0 -0
  99. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/banner.py +0 -0
  100. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/benchmark.py +0 -0
  101. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/classgraph.py +0 -0
  102. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/copying.py +0 -0
  103. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/cython.py +0 -0
  104. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/dev_tools.py +0 -0
  105. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/edit_module.py +0 -0
  106. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/explain_pickle.py +0 -0
  107. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/gperftools.py +0 -0
  108. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/inline_fortran.py +0 -0
  109. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/messaging.py +0 -0
  110. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/pager.py +0 -0
  111. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/profiler.py +0 -0
  112. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/python.py +0 -0
  113. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/remote_file.py +0 -0
  114. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/sage_eval.py +0 -0
  115. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/sage_input.py +0 -0
  116. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/sh.py +0 -0
  117. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/trace.py +0 -0
  118. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/__init__.py +0 -0
  119. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/all.py +0 -0
  120. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/attach.py +0 -0
  121. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/__init__.py +0 -0
  122. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/formatter.py +0 -0
  123. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/jsmol_iframe.py +0 -0
  124. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/pretty_print.py +0 -0
  125. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/image.py +0 -0
  126. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/inputhook.py +0 -0
  127. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/__init__.py +0 -0
  128. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/__main__.py +0 -0
  129. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/all_jupyter.py +0 -0
  130. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/interact.py +0 -0
  131. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/kernel.py +0 -0
  132. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/widgets_sagenb.py +0 -0
  133. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_tests.py +0 -0
  134. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/load.py +0 -0
  135. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/preparse.py +0 -0
  136. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/prompts.py +0 -0
  137. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/__init__.py +0 -0
  138. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/backend_base.py +0 -0
  139. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/backend_doctest.py +0 -0
  140. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/backend_emacs.py +0 -0
  141. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/backend_ipython.py +0 -0
  142. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/buffer.py +0 -0
  143. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.avi +0 -0
  144. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.canvas3d +0 -0
  145. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.dvi +0 -0
  146. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.flv +0 -0
  147. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.gif +0 -0
  148. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.jpg +0 -0
  149. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.mkv +0 -0
  150. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.mov +0 -0
  151. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.mp4 +0 -0
  152. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.ogv +0 -0
  153. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.pdf +0 -0
  154. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.png +0 -0
  155. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.svg +0 -0
  156. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.webm +0 -0
  157. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.wmv +0 -0
  158. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example_jmol.spt.zip +0 -0
  159. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example_wavefront_scene.mtl +0 -0
  160. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example_wavefront_scene.obj +0 -0
  161. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_browser.py +0 -0
  162. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_catalog.py +0 -0
  163. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_graphics.py +0 -0
  164. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_graphics3d.py +0 -0
  165. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_video.py +0 -0
  166. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/preferences.py +0 -0
  167. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/pretty_print.py +0 -0
  168. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/test_backend.py +0 -0
  169. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/user_globals.py +0 -0
  170. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/__init__.py +0 -0
  171. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/all.py +0 -0
  172. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/article_heuberger_krenn_kropf_fsm-in-sage.py +0 -0
  173. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/arxiv_0812_2725.py +0 -0
  174. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/benchmark.py +0 -0
  175. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/book_schilling_zabrocki_kschur_primer.py +0 -0
  176. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/book_stein_ent.py +0 -0
  177. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/book_stein_modform.py +0 -0
  178. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/README +0 -0
  179. {passagemath_repl-10.4.29/sage/tests/books → passagemath_repl-10.4.31/sage/tests/books/computational-mathematics-with-sagemath}/__init__.py +0 -0
  180. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py +0 -0
  181. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/combinat_doctest.py +0 -0
  182. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/domaines_doctest.py +0 -0
  183. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/float_doctest.py +0 -0
  184. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/graphique_doctest.py +0 -0
  185. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/graphtheory_doctest.py +0 -0
  186. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/integration_doctest.py +0 -0
  187. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/linalg_doctest.py +0 -0
  188. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/linsolve_doctest.py +0 -0
  189. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/lp_doctest.py +0 -0
  190. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/mpoly_doctest.py +0 -0
  191. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/nonlinear_doctest.py +0 -0
  192. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/numbertheory_doctest.py +0 -0
  193. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/polynomes_doctest.py +0 -0
  194. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/premierspas_doctest.py +0 -0
  195. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/programmation_doctest.py +0 -0
  196. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/recequadiff_doctest.py +0 -0
  197. {passagemath_repl-10.4.29/sage/tests/books/computational-mathematics-with-sagemath → passagemath_repl-10.4.31/sage/tests/books/computational-mathematics-with-sagemath/sol}/__init__.py +0 -0
  198. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/calculus_doctest.py +0 -0
  199. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/combinat_doctest.py +0 -0
  200. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/domaines_doctest.py +0 -0
  201. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/float_doctest.py +0 -0
  202. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/graphique_doctest.py +0 -0
  203. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/graphtheory_doctest.py +0 -0
  204. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/integration_doctest.py +0 -0
  205. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/linalg_doctest.py +0 -0
  206. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/linsolve_doctest.py +0 -0
  207. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/lp_doctest.py +0 -0
  208. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/mpoly_doctest.py +0 -0
  209. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/nonlinear_doctest.py +0 -0
  210. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/numbertheory_doctest.py +0 -0
  211. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/polynomes_doctest.py +0 -0
  212. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/recequadiff_doctest.py +0 -0
  213. {passagemath_repl-10.4.29/sage/tests/books/computational-mathematics-with-sagemath/sol → passagemath_repl-10.4.31/sage/tests/books/judson-abstract-algebra}/__init__.py +0 -0
  214. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/actions-sage-exercises.py +0 -0
  215. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/actions-sage.py +0 -0
  216. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/algcodes-sage.py +0 -0
  217. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/boolean-sage.py +0 -0
  218. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/cosets-sage-exercises.py +0 -0
  219. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/cosets-sage.py +0 -0
  220. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/crypt-sage.py +0 -0
  221. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/cyclic-sage.py +0 -0
  222. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/domains-sage.py +0 -0
  223. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/fields-sage.py +0 -0
  224. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/finite-sage.py +0 -0
  225. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/galois-sage.py +0 -0
  226. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/groups-sage.py +0 -0
  227. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/homomorph-sage-exercises.py +0 -0
  228. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/homomorph-sage.py +0 -0
  229. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/integers-sage.py +0 -0
  230. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/isomorph-sage.py +0 -0
  231. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/normal-sage.py +0 -0
  232. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/permute-sage.py +0 -0
  233. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/poly-sage.py +0 -0
  234. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/rings-sage.py +0 -0
  235. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/sets-sage.py +0 -0
  236. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/struct-sage.py +0 -0
  237. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/sylow-sage.py +0 -0
  238. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/vect-sage-exercises.py +0 -0
  239. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/vect-sage.py +0 -0
  240. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/cmdline.py +0 -0
  241. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/combinatorial_hopf_algebras.py +0 -0
  242. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/cython.pyx +0 -0
  243. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/finite_poset.py +0 -0
  244. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/functools_partial_src.py +0 -0
  245. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/gosper-sum.py +0 -0
  246. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/lazy_imports.py +0 -0
  247. {passagemath_repl-10.4.29/sage/tests/books/judson-abstract-algebra → passagemath_repl-10.4.31/sage/tests/memcheck}/__init__.py +0 -0
  248. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/memcheck/run_tests.py +0 -0
  249. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/memcheck/run_tests_in_valgrind.py +0 -0
  250. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/memcheck/symbolic_expression.py +0 -0
  251. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/memcheck/verify_no_leak.py +0 -0
  252. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/modular_group_cohomology.py +0 -0
  253. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/numpy.py +0 -0
  254. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/parigp.py +0 -0
  255. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/startup.py +0 -0
  256. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/stl_vector.pyx +0 -0
  257. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/symbolic-series.py +0 -0
  258. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/sympy.py +0 -0
  259. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/test_deprecation.py +0 -0
  260. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/setup.cfg +0 -0
  261. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/setup.py +0 -0
  262. {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/tox.ini +0 -0
@@ -28,6 +28,12 @@ include sage/misc/python.py
28
28
  include sage/misc/remote_file.py
29
29
  include sage/misc/sh.py
30
30
 
31
+ # expect_objects from sage.interfaces.quit is needed to compute the
32
+ # CPU time used by each doctest. We include sage.interfaces.cleaner
33
+ # because it is conditionally imported by sage.interfaces.quit.
34
+ include sage/interfaces/quit.py
35
+ include sage/interfaces/cleaner.py
36
+
31
37
  include VERSION.txt
32
38
 
33
39
  global-exclude all__*.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: passagemath-repl
3
- Version: 10.4.29
3
+ Version: 10.4.31
4
4
  Summary: passagemath: IPython kernel, Sage preparser, doctester
5
5
  Author-email: The Sage Developers <sage-support@googlegroups.com>
6
6
  License: GNU General Public License (GPL) v2 or later
@@ -25,8 +25,8 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
25
25
  Classifier: Topic :: Scientific/Engineering :: Mathematics
26
26
  Requires-Python: <3.13,>=3.9
27
27
  Description-Content-Type: text/x-rst
28
- Requires-Dist: passagemath-objects~=10.4.29
29
- Requires-Dist: passagemath-environment~=10.4.29
28
+ Requires-Dist: passagemath-objects~=10.4.31
29
+ Requires-Dist: passagemath-environment~=10.4.31
30
30
  Requires-Dist: ipykernel>=5.2.1
31
31
  Requires-Dist: ipython>=7.13.0
32
32
  Requires-Dist: ipywidgets>=7.5.1
@@ -0,0 +1 @@
1
+ 10.4.31
@@ -428,7 +428,7 @@ usage_advanced() {
428
428
  echo " --initial -- only show the first failure per block"
429
429
  echo " --debug -- drop into PDB after an unexpected error"
430
430
  echo " --failed -- only test files that failed last test"
431
- echo " --warn-long [timeout] -- warning if doctest is slow"
431
+ echo " --warn-long [timeout] -- warn if tests take too much CPU time"
432
432
  echo " --only-errors -- only output failures, not successes"
433
433
  echo " --gc=GC -- control garbarge collection (ALWAYS:"
434
434
  echo " collect garbage before every test; NEVER:"
@@ -4,6 +4,6 @@
4
4
  # which stops "setup.py develop" from rewriting it as a Python file.
5
5
  :
6
6
  # This file is auto-generated by the sage-update-version script, do not edit!
7
- SAGE_VERSION='10.4.29'
8
- SAGE_RELEASE_DATE='2024-10-25'
9
- SAGE_VERSION_BANNER='passagemath version 10.4.29, Release Date: 2024-10-25'
7
+ SAGE_VERSION='10.4.31'
8
+ SAGE_RELEASE_DATE='2024-10-26'
9
+ SAGE_VERSION_BANNER='passagemath version 10.4.31, Release Date: 2024-10-26'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: passagemath-repl
3
- Version: 10.4.29
3
+ Version: 10.4.31
4
4
  Summary: passagemath: IPython kernel, Sage preparser, doctester
5
5
  Author-email: The Sage Developers <sage-support@googlegroups.com>
6
6
  License: GNU General Public License (GPL) v2 or later
@@ -25,8 +25,8 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
25
25
  Classifier: Topic :: Scientific/Engineering :: Mathematics
26
26
  Requires-Python: <3.13,>=3.9
27
27
  Description-Content-Type: text/x-rst
28
- Requires-Dist: passagemath-objects~=10.4.29
29
- Requires-Dist: passagemath-environment~=10.4.29
28
+ Requires-Dist: passagemath-objects~=10.4.31
29
+ Requires-Dist: passagemath-environment~=10.4.31
30
30
  Requires-Dist: ipykernel>=5.2.1
31
31
  Requires-Dist: ipython>=7.13.0
32
32
  Requires-Dist: ipywidgets>=7.5.1
@@ -79,6 +79,8 @@ sage/doctest/tests/sig_on.rst
79
79
  sage/doctest/tests/simple_failure.rst
80
80
  sage/doctest/tests/sleep_and_raise.rst
81
81
  sage/doctest/tests/tolerance.rst
82
+ sage/interfaces/cleaner.py
83
+ sage/interfaces/quit.py
82
84
  sage/misc/all__sagemath_repl.py
83
85
  sage/misc/banner.py
84
86
  sage/misc/benchmark.py
@@ -177,6 +179,7 @@ sage/tests/finite_poset.py
177
179
  sage/tests/functools_partial_src.py
178
180
  sage/tests/gosper-sum.py
179
181
  sage/tests/lazy_imports.py
182
+ sage/tests/meson.build
180
183
  sage/tests/modular_group_cohomology.py
181
184
  sage/tests/numpy.py
182
185
  sage/tests/parigp.py
@@ -1,5 +1,5 @@
1
- passagemath-objects~=10.4.29
2
- passagemath-environment~=10.4.29
1
+ passagemath-objects~=10.4.31
2
+ passagemath-environment~=10.4.31
3
3
  ipykernel>=5.2.1
4
4
  ipython>=7.13.0
5
5
  ipywidgets>=7.5.1
@@ -10,8 +10,8 @@ build-backend = "setuptools.build_meta"
10
10
  name = "passagemath-repl"
11
11
  description = "passagemath: IPython kernel, Sage preparser, doctester"
12
12
  dependencies = [
13
- 'passagemath-objects ~= 10.4.29',
14
- 'passagemath-environment ~= 10.4.29',
13
+ 'passagemath-objects ~= 10.4.31',
14
+ 'passagemath-environment ~= 10.4.31',
15
15
  'ipykernel >=5.2.1',
16
16
  'ipython >=7.13.0',
17
17
  'ipywidgets >=7.5.1',
@@ -82,6 +82,7 @@ py-modules = [
82
82
  ]
83
83
  packages = [
84
84
  "sage.doctest",
85
+ "sage.interfaces",
85
86
  "sage.repl",
86
87
  "sage.repl.display",
87
88
  "sage.repl.ipython_kernel",
@@ -57,6 +57,7 @@ py-modules = [
57
57
  ]
58
58
  packages = [
59
59
  "sage.doctest",
60
+ "sage.interfaces",
60
61
  "sage.repl",
61
62
  "sage.repl.display",
62
63
  "sage.repl.ipython_kernel",
@@ -22,7 +22,7 @@ else:
22
22
  warnings.filterwarnings('ignore', category=DeprecationWarning,
23
23
  module='(IPython|ipykernel|jupyter_client|jupyter_core|nbformat|notebook|ipywidgets|storemagic|jedi)')
24
24
 
25
- # scipy 1.18 introduced reprecation warnings on a number of things they are moving to
25
+ # scipy 1.18 introduced deprecation warnings on a number of things they are moving to
26
26
  # numpy, e.g. DeprecationWarning: scipy.array is deprecated
27
27
  # and will be removed in SciPy 2.0.0, use numpy.array instead
28
28
  # This affects networkx 2.2 up and including 2.4 (cf. :issue:29766)
@@ -65,7 +65,7 @@ def _make_parser():
65
65
  help="run as many doctests as possible in about 300 seconds (or the number of seconds given as an optional argument)")
66
66
  parser.add_argument("--warn-long", dest="warn_long", nargs='?',
67
67
  type=float, default=-1.0, const=1.0, metavar="SECONDS",
68
- help="warn if tests take more time than SECONDS")
68
+ help="warn if tests take more CPU time than SECONDS")
69
69
  # By default, include all tests marked 'sagemath_doc_html' -- see
70
70
  # https://github.com/sagemath/sage/issues/25345 and
71
71
  # https://github.com/sagemath/sage/issues/26110:
@@ -285,8 +285,11 @@ def skipfile(filename, tested_optional_tags=False, *,
285
285
  """
286
286
  if filename.endswith('.rst.txt'):
287
287
  ext = '.rst.txt'
288
- else:
289
- base, ext = os.path.splitext(filename)
288
+ if filename.endswith('__main__.py'):
289
+ if log:
290
+ log(f"Skipping '{filename}' because it is a __main__.py file")
291
+ return True
292
+ _ , ext = os.path.splitext(filename)
290
293
  # .rst.txt appear in the installed documentation in subdirectories named "_sources"
291
294
  if ext not in ('.py', '.pyx', '.pxd', '.pxi', '.sage', '.spyx', '.rst', '.tex', '.rst.txt'):
292
295
  if log:
@@ -339,7 +342,7 @@ def skipfile(filename, tested_optional_tags=False, *,
339
342
  return False
340
343
 
341
344
 
342
- class Logger():
345
+ class Logger:
343
346
  r"""
344
347
  File-like object which implements writing to multiple files at
345
348
  once.
@@ -589,36 +592,38 @@ class DocTestController(SageObject):
589
592
 
590
593
  def _init_warn_long(self):
591
594
  """
592
- Pick a suitable default for the ``--warn-long`` option if not specified.
595
+ Pick a suitable default for the ``--warn-long`` option if not
596
+ specified.
593
597
 
594
598
  It is desirable to have all tests (even ``# long`` ones)
595
599
  finish in less than about 5 seconds. Longer tests typically
596
600
  don't add coverage, they just make testing slow.
597
601
 
598
- The default used here is 60 seconds on a modern computer. It
599
- should eventually be lowered to 5 seconds, but its best to
600
- boil the frog slowly.
602
+ The default used here is 5 seconds, unless `--long` was used,
603
+ in which case it is 30 seconds.
601
604
 
602
- The stored timings are used to adjust this limit according to
603
- the machine running the tests.
605
+ TESTS:
604
606
 
605
- EXAMPLES::
607
+ Ensure that the user's command-line options are not changed::
606
608
 
607
- sage: from sage.doctest.control import DocTestDefaults, DocTestController
609
+ sage: from sage.doctest.control import (DocTestDefaults,
610
+ ....: DocTestController)
608
611
  sage: DC = DocTestController(DocTestDefaults(), [])
609
612
  sage: DC.options.warn_long = 5.0
610
613
  sage: DC._init_warn_long()
611
- sage: DC.options.warn_long # existing command-line options are not changed
614
+ sage: DC.options.warn_long
612
615
  5.00000000000000
613
616
  """
614
617
  # default is -1.0
615
618
  if self.options.warn_long >= 0: # Specified on the command line
616
619
  return
617
- try:
618
- self.options.warn_long = 60.0 * self.second_on_modern_computer()
619
- except RuntimeError as err:
620
- if not sage.doctest.DOCTEST_MODE:
621
- print(err) # No usable timing information
620
+
621
+ # The developer's guide says that even a "long time" test
622
+ # should ideally complete in under five seconds, so we're
623
+ # being rather generous here.
624
+ self.options.warn_long = 5.0
625
+ if self.options.long:
626
+ self.options.warn_long = 30.0
622
627
 
623
628
  def second_on_modern_computer(self):
624
629
  """
@@ -638,6 +643,9 @@ class DocTestController(SageObject):
638
643
  sage: DC = DocTestController(DocTestDefaults(), [])
639
644
  sage: DC.second_on_modern_computer() # not tested
640
645
  """
646
+ from sage.misc.superseded import deprecation
647
+ deprecation(32981, "this method is no longer used by the sage library and will eventually be removed")
648
+
641
649
  if len(self.stats) == 0:
642
650
  raise RuntimeError('no stored timings available')
643
651
  success = []
@@ -986,7 +994,7 @@ class DocTestController(SageObject):
986
994
  sage: DC = DocTestController(DD, [dirname])
987
995
  sage: DC.expand_files_into_sources()
988
996
  sage: len(DC.sources)
989
- 16
997
+ 15
990
998
  sage: DC.sources[0].options.optional
991
999
  True
992
1000
 
@@ -1098,7 +1106,6 @@ class DocTestController(SageObject):
1098
1106
  sage.doctest.control
1099
1107
  sage.doctest.check_tolerance
1100
1108
  sage.doctest.all
1101
- sage.doctest.__main__
1102
1109
  sage.doctest
1103
1110
  """
1104
1111
  if self.options.nthreads > 1 and len(self.sources) > self.options.nthreads:
@@ -1153,7 +1160,7 @@ class DocTestController(SageObject):
1153
1160
  sage: DC.run_doctests()
1154
1161
  Doctesting 1 file.
1155
1162
  sage -t .../sage/rings/homset.py
1156
- [... tests, ... s]
1163
+ [... tests, ...s wall]
1157
1164
  ----------------------------------------------------------------------
1158
1165
  All tests passed!
1159
1166
  ----------------------------------------------------------------------
@@ -1230,7 +1237,7 @@ class DocTestController(SageObject):
1230
1237
  Running doctests with ID ...
1231
1238
  Doctesting 1 file.
1232
1239
  sage -t .../rings/all.py
1233
- [... tests, ... s]
1240
+ [... tests, ...s wall]
1234
1241
  ----------------------------------------------------------------------
1235
1242
  All tests passed!
1236
1243
  ----------------------------------------------------------------------
@@ -1434,7 +1441,7 @@ class DocTestController(SageObject):
1434
1441
  Running doctests with ID ...
1435
1442
  Doctesting 1 file.
1436
1443
  sage -t .../sage/sets/non_negative_integers.py
1437
- [... tests, ... s]
1444
+ [... tests, ...s wall]
1438
1445
  ----------------------------------------------------------------------
1439
1446
  All tests passed!
1440
1447
  ----------------------------------------------------------------------
@@ -1458,7 +1465,7 @@ class DocTestController(SageObject):
1458
1465
  Features to be detected: ...
1459
1466
  Doctesting 1 file.
1460
1467
  sage -t ....py
1461
- [0 tests, ... s]
1468
+ [0 tests, ...s wall]
1462
1469
  ----------------------------------------------------------------------
1463
1470
  All tests passed!
1464
1471
  ----------------------------------------------------------------------
@@ -1484,7 +1491,7 @@ class DocTestController(SageObject):
1484
1491
  Features to be detected: ...
1485
1492
  Doctesting 1 file.
1486
1493
  sage -t ....py
1487
- [4 tests, ... s]
1494
+ [4 tests, ...s wall]
1488
1495
  ----------------------------------------------------------------------
1489
1496
  All tests passed!
1490
1497
  ----------------------------------------------------------------------
@@ -1502,7 +1509,7 @@ class DocTestController(SageObject):
1502
1509
  Features to be detected: ...
1503
1510
  Doctesting 1 file.
1504
1511
  sage -t ....py
1505
- [4 tests, ... s]
1512
+ [4 tests, ...s wall]
1506
1513
  ----------------------------------------------------------------------
1507
1514
  All tests passed!
1508
1515
  ----------------------------------------------------------------------
@@ -1520,7 +1527,7 @@ class DocTestController(SageObject):
1520
1527
  Features to be detected: ...
1521
1528
  Doctesting 1 file.
1522
1529
  sage -t ....py
1523
- [4 tests, ... s]
1530
+ [4 tests, ...s wall]
1524
1531
  ----------------------------------------------------------------------
1525
1532
  All tests passed!
1526
1533
  ----------------------------------------------------------------------
@@ -1628,7 +1635,7 @@ def run_doctests(module, options=None):
1628
1635
  Running doctests with ID ...
1629
1636
  Doctesting 1 file.
1630
1637
  sage -t .../sage/rings/all.py
1631
- [... tests, ... s]
1638
+ [... tests, ...s wall]
1632
1639
  ----------------------------------------------------------------------
1633
1640
  All tests passed!
1634
1641
  ----------------------------------------------------------------------
@@ -379,7 +379,7 @@ def external_software() -> list[str]:
379
379
  external_software = external_software()
380
380
 
381
381
 
382
- class AvailableSoftware():
382
+ class AvailableSoftware:
383
383
  """
384
384
  This class keeps the set of available software whose availability is detected lazily
385
385
  from the list of external software.
@@ -112,7 +112,7 @@ def reproducible_repr(val):
112
112
  return repr(val)
113
113
 
114
114
 
115
- class AttributeAccessTracerHelper():
115
+ class AttributeAccessTracerHelper:
116
116
 
117
117
  def __init__(self, delegate, prefix=" ", reads=True):
118
118
  r"""
@@ -223,7 +223,7 @@ class AttributeAccessTracerHelper():
223
223
  setattr(self.delegate, name, val)
224
224
 
225
225
 
226
- class AttributeAccessTracerProxy():
226
+ class AttributeAccessTracerProxy:
227
227
 
228
228
  def __init__(self, delegate, **kwds):
229
229
  r"""
@@ -709,27 +709,19 @@ class SageDocTestRunner(doctest.DocTestRunner):
709
709
  elif self.options.gc < 0:
710
710
  gc.disable()
711
711
 
712
+ from cysignals.signals import SignalError
712
713
  try:
713
714
  # Don't blink! This is where the user's code gets run.
714
715
  self.compile_and_execute(example, compiler, test.globs)
715
- except SystemExit:
716
+ except (SignalError, SystemExit):
717
+ # Tests can be killed by signals in unexpected places.
716
718
  raise
717
719
  except BaseException:
718
720
  exception = sys.exc_info()
719
- # On Python 2, the exception lives in sys.exc_info() as
720
- # long we are in the same stack frame. To ensure that
721
- # sig_occurred() works correctly, we need to clear the
722
- # exception. This is not an issue on Python 3, where the
723
- # exception is cleared as soon as we are outside of the
724
- # "except" clause.
725
- try:
726
- sys.exc_clear()
727
- except AttributeError:
728
- pass # Python 3
729
721
  finally:
730
722
  if self.debugger is not None:
731
723
  self.debugger.set_continue() # ==== Example Finished ====
732
- check_starttime = walltime()
724
+ check_timer = Timer().start()
733
725
  got = self._fakeout.getvalue()
734
726
 
735
727
  outcome = FAILURE # guilty until proved innocent or insane
@@ -803,22 +795,22 @@ class SageDocTestRunner(doctest.DocTestRunner):
803
795
  f"and it succeeded (raised an exception as expected).")
804
796
  outcome = SUCCESS
805
797
 
806
- check_duration = walltime(check_starttime)
807
- self.total_walltime += example.walltime + check_duration
798
+ check_timer.stop()
799
+ self.total_walltime += example.walltime + check_timer.walltime
808
800
 
809
801
  # Report the outcome.
810
802
  if example.warnings:
811
803
  for warning in example.warnings:
812
804
  out(self._failure_header(test, example, f'Warning: {warning}'))
813
805
  if outcome is SUCCESS:
814
- if self.options.warn_long > 0 and example.walltime + check_duration > self.options.warn_long:
806
+ if self.options.warn_long > 0 and example.cputime + check_timer.cputime > self.options.warn_long:
815
807
  self.report_overtime(out, test, example, got,
816
- check_duration=check_duration)
808
+ check_timer=check_timer)
817
809
  elif example.warnings:
818
810
  pass
819
811
  elif not quiet:
820
812
  self.report_success(out, test, example, got,
821
- check_duration=check_duration)
813
+ check_timer=check_timer)
822
814
  elif probed_tags:
823
815
  pass
824
816
  elif outcome is FAILURE:
@@ -1326,7 +1318,7 @@ class SageDocTestRunner(doctest.DocTestRunner):
1326
1318
  start_txt += 'Expecting nothing\n'
1327
1319
  out(start_txt)
1328
1320
 
1329
- def report_success(self, out, test, example, got, *, check_duration=0):
1321
+ def report_success(self, out, test, example, got, *, check_timer=None):
1330
1322
  """
1331
1323
  Called when an example succeeds.
1332
1324
 
@@ -1340,8 +1332,9 @@ class SageDocTestRunner(doctest.DocTestRunner):
1340
1332
 
1341
1333
  - ``got`` -- string; the result of running ``example``
1342
1334
 
1343
- - ``check_duration`` -- number (default: ``0``); time spent for checking
1344
- the test output
1335
+ - ``check_timer`` -- a :class:`sage.doctest.util.Timer` (default:
1336
+ ``None``) that measures the time spent checking whether or not
1337
+ the output was correct
1345
1338
 
1346
1339
  OUTPUT: prints a report to ``out``; if in debugging mode, starts an
1347
1340
  IPython prompt at the point of the failure
@@ -1352,20 +1345,27 @@ class SageDocTestRunner(doctest.DocTestRunner):
1352
1345
  sage: from sage.doctest.forker import SageDocTestRunner
1353
1346
  sage: from sage.doctest.sources import FileDocTestSource
1354
1347
  sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
1355
- sage: from sage.misc.timing import walltime
1348
+ sage: from sage.doctest.util import Timer
1356
1349
  sage: import doctest, sys, os
1357
1350
  sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1358
1351
  sage: filename = sage.doctest.forker.__file__
1359
1352
  sage: FDS = FileDocTestSource(filename, DD)
1360
1353
  sage: doctests, extras = FDS.create_doctests(globals())
1361
1354
  sage: ex = doctests[0].examples[0]
1362
- sage: ex.walltime = 0.0r
1363
- sage: DTR.report_success(sys.stdout.write, doctests[0], ex, '1764')
1364
- ok [0.00 s]
1355
+ sage: ex.cputime = 1.01
1356
+ sage: ex.walltime = 1.12
1357
+ sage: check = Timer()
1358
+ sage: check.cputime = 2.14
1359
+ sage: check.walltime = 2.71
1360
+ sage: DTR.report_success(sys.stdout.write, doctests[0], ex, '1764',
1361
+ ....: check_timer=check)
1362
+ ok [3.83s wall]
1365
1363
  """
1366
- # We completely replace doctest.DocTestRunner.report_success so that we can include time taken for the test
1364
+ # We completely replace doctest.DocTestRunner.report_success
1365
+ # so that we can include time taken for the test
1367
1366
  if self._verbose:
1368
- out("ok [%.2f s]\n" % (example.walltime + check_duration))
1367
+ out("ok [%.2fs wall]\n" %
1368
+ (example.walltime + check_timer.walltime))
1369
1369
 
1370
1370
  def report_failure(self, out, test, example, got, globs):
1371
1371
  r"""
@@ -1496,7 +1496,7 @@ class SageDocTestRunner(doctest.DocTestRunner):
1496
1496
  self._fakeout.start_spoofing()
1497
1497
  return returnval
1498
1498
 
1499
- def report_overtime(self, out, test, example, got, *, check_duration=0):
1499
+ def report_overtime(self, out, test, example, got, *, check_timer=None):
1500
1500
  r"""
1501
1501
  Called when the ``warn_long`` option flag is set and a doctest
1502
1502
  runs longer than the specified time.
@@ -1511,8 +1511,9 @@ class SageDocTestRunner(doctest.DocTestRunner):
1511
1511
 
1512
1512
  - ``got`` -- string; the result of running ``example``
1513
1513
 
1514
- - ``check_duration`` -- number (default: ``0``); time spent for checking
1515
- the test output
1514
+ - ``check_timer`` -- a :class:`sage.doctest.util.Timer` (default:
1515
+ ``None``) that measures the time spent checking whether or not
1516
+ the output was correct
1516
1517
 
1517
1518
  OUTPUT: prints a report to ``out``
1518
1519
 
@@ -1522,24 +1523,32 @@ class SageDocTestRunner(doctest.DocTestRunner):
1522
1523
  sage: from sage.doctest.forker import SageDocTestRunner
1523
1524
  sage: from sage.doctest.sources import FileDocTestSource
1524
1525
  sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults()
1525
- sage: from sage.misc.timing import walltime
1526
+ sage: from sage.doctest.util import Timer
1526
1527
  sage: import doctest, sys, os
1527
1528
  sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=True, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
1528
1529
  sage: filename = sage.doctest.forker.__file__
1529
1530
  sage: FDS = FileDocTestSource(filename, DD)
1530
1531
  sage: doctests, extras = FDS.create_doctests(globals())
1531
1532
  sage: ex = doctests[0].examples[0]
1532
- sage: ex.walltime = 1.23r
1533
- sage: DTR.report_overtime(sys.stdout.write, doctests[0], ex, 'BAD ANSWER\n', check_duration=2.34r)
1533
+ sage: ex.cputime = 1.23
1534
+ sage: ex.walltime = 2.50
1535
+ sage: check = Timer()
1536
+ sage: check.cputime = 2.34
1537
+ sage: check.walltime = 3.12
1538
+ sage: DTR.report_overtime(sys.stdout.write, doctests[0], ex, 'BAD ANSWER\n', check_timer=check)
1534
1539
  **********************************************************************
1535
1540
  File ".../sage/doctest/forker.py", line 12, in sage.doctest.forker
1536
- Warning, slow doctest:
1541
+ Warning: slow doctest:
1537
1542
  doctest_var = 42; doctest_var^2
1538
- Test ran for 1.23 s, check ran for 2.34 s
1543
+ Test ran for 1.23s cpu, 2.50s wall
1544
+ Check ran for 2.34s cpu, 3.12s wall
1539
1545
  """
1540
- out(self._failure_header(test, example, 'Warning, slow doctest:') +
1541
- ('Test ran for %.2f s, check ran for %.2f s\n'
1542
- % (example.walltime, check_duration)))
1546
+ out(self._failure_header(test, example, 'Warning: slow doctest:') +
1547
+ ('Test ran for %.2fs cpu, %.2fs wall\nCheck ran for %.2fs cpu, %.2fs wall\n'
1548
+ % (example.cputime,
1549
+ example.walltime,
1550
+ check_timer.cputime,
1551
+ check_timer.walltime)))
1543
1552
 
1544
1553
  def report_unexpected_exception(self, out, test, example, exc_info):
1545
1554
  r"""
@@ -1743,9 +1752,9 @@ class DocTestDispatcher(SageObject):
1743
1752
  sage: DC.timer = Timer().start()
1744
1753
  sage: DD.serial_dispatch()
1745
1754
  sage -t .../rings/homset.py
1746
- [... tests, ... s]
1755
+ [... tests, ...s wall]
1747
1756
  sage -t .../rings/ideal.py
1748
- [... tests, ... s]
1757
+ [... tests, ...s wall]
1749
1758
  """
1750
1759
  for source in self.controller.sources:
1751
1760
  heading = self.controller.reporter.report_head(source)
@@ -1789,9 +1798,9 @@ class DocTestDispatcher(SageObject):
1789
1798
  sage: DC.timer = Timer().start()
1790
1799
  sage: DD.parallel_dispatch()
1791
1800
  sage -t .../databases/cremona.py
1792
- [... tests, ... s]
1801
+ [... tests, ...s wall]
1793
1802
  sage -t .../rings/big_oh.py
1794
- [... tests, ... s]
1803
+ [... tests, ...s wall]
1795
1804
 
1796
1805
  If the ``exitfirst=True`` option is given, the results for a failing
1797
1806
  module will be immediately printed and any other ongoing tests
@@ -1826,7 +1835,7 @@ class DocTestDispatcher(SageObject):
1826
1835
  **********************************************************************
1827
1836
  1 item had failures:
1828
1837
  1 of 1 in ...
1829
- [1 test, 1 failure, ... s]
1838
+ [1 test, 1 failure, ...s wall]
1830
1839
  Killing test ...
1831
1840
  """
1832
1841
  opt = self.controller.options
@@ -2121,9 +2130,9 @@ class DocTestDispatcher(SageObject):
2121
2130
  sage: DC.timer = Timer().start()
2122
2131
  sage: DD.dispatch()
2123
2132
  sage -t .../sage/modules/free_module_homspace.py
2124
- [... tests, ... s]
2133
+ [... tests, ...s wall]
2125
2134
  sage -t .../sage/rings/big_oh.py
2126
- [... tests, ... s]
2135
+ [... tests, ...s wall]
2127
2136
  """
2128
2137
  if self.controller.options.serial:
2129
2138
  self.serial_dispatch()
@@ -2173,7 +2182,7 @@ class DocTestWorker(multiprocessing.Process):
2173
2182
  sage: W.join() # Wait for worker to finish
2174
2183
  sage: result = W.result_queue.get()
2175
2184
  sage: reporter.report(FDS, False, W.exitcode, result, "")
2176
- [... tests, ... s]
2185
+ [... tests, ...s wall]
2177
2186
  """
2178
2187
  def __init__(self, source, options, funclist=[], baseline=None):
2179
2188
  """
@@ -2185,7 +2194,7 @@ class DocTestWorker(multiprocessing.Process):
2185
2194
  Running doctests with ID ...
2186
2195
  Doctesting 1 file.
2187
2196
  sage -t .../sage/rings/big_oh.py
2188
- [... tests, ... s]
2197
+ [... tests, ...s wall]
2189
2198
  ----------------------------------------------------------------------
2190
2199
  All tests passed!
2191
2200
  ----------------------------------------------------------------------
@@ -2232,7 +2241,7 @@ class DocTestWorker(multiprocessing.Process):
2232
2241
  Running doctests with ID ...
2233
2242
  Doctesting 1 file.
2234
2243
  sage -t .../sage/symbolic/units.py
2235
- [... tests, ... s]
2244
+ [... tests, ...s wall]
2236
2245
  ----------------------------------------------------------------------
2237
2246
  All tests passed!
2238
2247
  ----------------------------------------------------------------------
@@ -2470,7 +2479,7 @@ class DocTestWorker(multiprocessing.Process):
2470
2479
  return True
2471
2480
 
2472
2481
 
2473
- class DocTestTask():
2482
+ class DocTestTask:
2474
2483
  """
2475
2484
  This class encapsulates the tests from a single source.
2476
2485
 
@@ -652,7 +652,7 @@ def reduce_hex(fingerprints):
652
652
  return "%032x" % res
653
653
 
654
654
 
655
- class OriginalSource():
655
+ class OriginalSource:
656
656
  r"""
657
657
  Context swapping out the pre-parsed source with the original for
658
658
  better reporting.