passagemath-repl 10.5.16__tar.gz → 10.5.18__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 (259) hide show
  1. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/PKG-INFO +3 -3
  2. passagemath_repl-10.5.18/VERSION.txt +1 -0
  3. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-version.sh +3 -3
  4. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/passagemath_repl.egg-info/PKG-INFO +3 -3
  5. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/passagemath_repl.egg-info/requires.txt +2 -2
  6. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/pyproject.toml +2 -2
  7. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/control.py +2 -2
  8. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/forker.py +31 -21
  9. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/cython.py +52 -2
  10. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/inline_fortran.py +1 -1
  11. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/sagedoc.py +7 -7
  12. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/attach.py +2 -2
  13. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/display/fancy_repr.py +12 -2
  14. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/image.py +1 -1
  15. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_extension.py +81 -5
  16. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/preparse.py +1 -1
  17. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/display_manager.py +14 -6
  18. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/pretty_print.py +1 -1
  19. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/user_globals.py +1 -1
  20. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/arxiv_0812_2725.py +3 -3
  21. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/book_stein_modform.py +35 -54
  22. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py +1 -5
  23. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/linalg_doctest.py +16 -23
  24. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/galois-sage.py +70 -74
  25. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/vect-sage.py +1 -4
  26. passagemath_repl-10.5.16/VERSION.txt +0 -1
  27. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/MANIFEST.in +0 -0
  28. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/README.rst +0 -0
  29. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/math-readline +0 -0
  30. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage +0 -0
  31. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-cachegrind +0 -0
  32. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-callgrind +0 -0
  33. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-cleaner +0 -0
  34. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-coverage +0 -0
  35. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-cython +0 -0
  36. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-env +0 -0
  37. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-env-config.in +0 -0
  38. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-eval +0 -0
  39. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-fixdoctests +0 -0
  40. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-grep +0 -0
  41. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-grepdoc +0 -0
  42. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-inline-fortran +0 -0
  43. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-ipynb2rst +0 -0
  44. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-ipython +0 -0
  45. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-list-packages +0 -0
  46. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-massif +0 -0
  47. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-notebook +0 -0
  48. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-num-threads.py +0 -0
  49. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-omega +0 -0
  50. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-preparse +0 -0
  51. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-python +0 -0
  52. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-run +0 -0
  53. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-run-cython +0 -0
  54. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-runtests +0 -0
  55. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-src-env-config.in +0 -0
  56. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-startuptime.py +0 -0
  57. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-update-version +0 -0
  58. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-valgrind +0 -0
  59. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/bin/sage-venv-config +0 -0
  60. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/known-test-failures.json +0 -0
  61. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/passagemath_repl.egg-info/SOURCES.txt +0 -0
  62. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/passagemath_repl.egg-info/dependency_links.txt +0 -0
  63. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/passagemath_repl.egg-info/top_level.txt +0 -0
  64. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/pyproject.toml.m4 +0 -0
  65. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/requirements-editable.txt.m4 +0 -0
  66. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/requirements.txt.m4 +0 -0
  67. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/all__sagemath_repl.py +0 -0
  68. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/__init__.py +0 -0
  69. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/__main__.py +0 -0
  70. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/all.py +0 -0
  71. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/check_tolerance.py +0 -0
  72. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/external.py +0 -0
  73. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/fixtures.py +0 -0
  74. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/marked_output.py +0 -0
  75. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/parsing.py +0 -0
  76. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/parsing_test.py +0 -0
  77. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/reporting.py +0 -0
  78. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/rif_tol.py +0 -0
  79. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/sources.py +0 -0
  80. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/test.py +0 -0
  81. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/1second.rst +0 -0
  82. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/99seconds.rst +0 -0
  83. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/abort.rst +0 -0
  84. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/atexit.rst +0 -0
  85. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/fail_and_die.rst +0 -0
  86. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/initial.rst +0 -0
  87. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/interrupt.rst +0 -0
  88. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/interrupt_diehard.rst +0 -0
  89. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/keyboardinterrupt.rst +0 -0
  90. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/longtime.rst +0 -0
  91. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/nodoctest +0 -0
  92. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/random_seed.rst +0 -0
  93. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/show_skipped.rst +0 -0
  94. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/sig_on.rst +0 -0
  95. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/simple_failure.rst +0 -0
  96. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/sleep_and_raise.rst +0 -0
  97. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/tests/tolerance.rst +0 -0
  98. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/doctest/util.py +0 -0
  99. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/interfaces/cleaner.py +0 -0
  100. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/interfaces/quit.py +0 -0
  101. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/all__sagemath_repl.py +0 -0
  102. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/banner.py +0 -0
  103. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/benchmark.py +0 -0
  104. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/classgraph.py +0 -0
  105. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/copying.py +0 -0
  106. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/dev_tools.py +0 -0
  107. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/edit_module.py +0 -0
  108. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/explain_pickle.py +0 -0
  109. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/gperftools.py +0 -0
  110. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/messaging.py +0 -0
  111. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/pager.py +0 -0
  112. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/profiler.py +0 -0
  113. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/python.py +0 -0
  114. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/remote_file.py +0 -0
  115. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/sage_eval.py +0 -0
  116. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/sage_input.py +0 -0
  117. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/sh.py +0 -0
  118. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/misc/trace.py +0 -0
  119. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/__init__.py +0 -0
  120. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/all.py +0 -0
  121. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/configuration.py +0 -0
  122. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/display/__init__.py +0 -0
  123. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/display/formatter.py +0 -0
  124. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/display/jsmol_iframe.py +0 -0
  125. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/display/pretty_print.py +0 -0
  126. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/display/util.py +0 -0
  127. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/inputhook.py +0 -0
  128. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/interface_magic.py +0 -0
  129. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/interpreter.py +0 -0
  130. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_kernel/__init__.py +0 -0
  131. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_kernel/__main__.py +0 -0
  132. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_kernel/all_jupyter.py +0 -0
  133. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_kernel/install.py +0 -0
  134. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_kernel/interact.py +0 -0
  135. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_kernel/kernel.py +0 -0
  136. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_kernel/widgets.py +0 -0
  137. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_kernel/widgets_sagenb.py +0 -0
  138. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/ipython_tests.py +0 -0
  139. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/load.py +0 -0
  140. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/prompts.py +0 -0
  141. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/__init__.py +0 -0
  142. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/backend_base.py +0 -0
  143. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/backend_doctest.py +0 -0
  144. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/backend_emacs.py +0 -0
  145. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/backend_ipython.py +0 -0
  146. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/buffer.py +0 -0
  147. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.avi +0 -0
  148. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.canvas3d +0 -0
  149. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.dvi +0 -0
  150. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.flv +0 -0
  151. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.gif +0 -0
  152. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.jpg +0 -0
  153. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.mkv +0 -0
  154. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.mov +0 -0
  155. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.mp4 +0 -0
  156. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.ogv +0 -0
  157. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.pdf +0 -0
  158. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.png +0 -0
  159. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.svg +0 -0
  160. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.webm +0 -0
  161. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example.wmv +0 -0
  162. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example_jmol.spt.zip +0 -0
  163. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example_wavefront_scene.mtl +0 -0
  164. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/example_wavefront_scene.obj +0 -0
  165. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/output_basic.py +0 -0
  166. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/output_browser.py +0 -0
  167. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/output_catalog.py +0 -0
  168. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/output_graphics.py +0 -0
  169. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/output_graphics3d.py +0 -0
  170. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/output_video.py +0 -0
  171. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/preferences.py +0 -0
  172. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/repl/rich_output/test_backend.py +0 -0
  173. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/all.py +0 -0
  174. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/all__sagemath_repl.py +0 -0
  175. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/article_heuberger_krenn_kropf_fsm-in-sage.py +0 -0
  176. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/benchmark.py +0 -0
  177. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/book_schilling_zabrocki_kschur_primer.py +0 -0
  178. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/book_stein_ent.py +0 -0
  179. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/__init__.py +0 -0
  180. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/README +0 -0
  181. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/__init__.py +0 -0
  182. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/combinat_doctest.py +0 -0
  183. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/domaines_doctest.py +0 -0
  184. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/float_doctest.py +0 -0
  185. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/graphique_doctest.py +0 -0
  186. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/graphtheory_doctest.py +0 -0
  187. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/integration_doctest.py +0 -0
  188. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/linsolve_doctest.py +0 -0
  189. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/lp_doctest.py +0 -0
  190. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/mpoly_doctest.py +0 -0
  191. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/nonlinear_doctest.py +0 -0
  192. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/numbertheory_doctest.py +0 -0
  193. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/polynomes_doctest.py +0 -0
  194. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/premierspas_doctest.py +0 -0
  195. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/programmation_doctest.py +0 -0
  196. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/recequadiff_doctest.py +0 -0
  197. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/__init__.py +0 -0
  198. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/calculus_doctest.py +0 -0
  199. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/combinat_doctest.py +0 -0
  200. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/domaines_doctest.py +0 -0
  201. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/float_doctest.py +0 -0
  202. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/graphique_doctest.py +0 -0
  203. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/graphtheory_doctest.py +0 -0
  204. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/integration_doctest.py +0 -0
  205. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/linalg_doctest.py +0 -0
  206. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/linsolve_doctest.py +0 -0
  207. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/lp_doctest.py +0 -0
  208. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/mpoly_doctest.py +0 -0
  209. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/nonlinear_doctest.py +0 -0
  210. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/numbertheory_doctest.py +0 -0
  211. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/polynomes_doctest.py +0 -0
  212. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/computational-mathematics-with-sagemath/sol/recequadiff_doctest.py +0 -0
  213. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/__init__.py +0 -0
  214. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/actions-sage-exercises.py +0 -0
  215. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/actions-sage.py +0 -0
  216. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/algcodes-sage.py +0 -0
  217. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/boolean-sage.py +0 -0
  218. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/cosets-sage-exercises.py +0 -0
  219. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/cosets-sage.py +0 -0
  220. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/crypt-sage.py +0 -0
  221. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/cyclic-sage.py +0 -0
  222. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/domains-sage.py +0 -0
  223. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/fields-sage.py +0 -0
  224. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/finite-sage.py +0 -0
  225. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/groups-sage.py +0 -0
  226. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/homomorph-sage-exercises.py +0 -0
  227. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/homomorph-sage.py +0 -0
  228. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/integers-sage.py +0 -0
  229. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/isomorph-sage.py +0 -0
  230. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/normal-sage.py +0 -0
  231. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/permute-sage.py +0 -0
  232. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/poly-sage.py +0 -0
  233. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/rings-sage.py +0 -0
  234. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/sets-sage.py +0 -0
  235. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/struct-sage.py +0 -0
  236. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/sylow-sage.py +0 -0
  237. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/books/judson-abstract-algebra/vect-sage-exercises.py +0 -0
  238. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/cmdline.py +0 -0
  239. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/combinatorial_hopf_algebras.py +0 -0
  240. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/finite_poset.py +0 -0
  241. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/functools_partial_src.py +0 -0
  242. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/gosper-sum.py +0 -0
  243. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/lazy_imports.py +0 -0
  244. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/memcheck/__init__.py +0 -0
  245. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/memcheck/run_tests.py +0 -0
  246. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/memcheck/run_tests_in_valgrind.py +0 -0
  247. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/memcheck/symbolic_expression.py +0 -0
  248. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/memcheck/verify_no_leak.py +0 -0
  249. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/meson.build +0 -0
  250. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/modular_group_cohomology.py +0 -0
  251. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/numpy.py +0 -0
  252. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/parigp.py +0 -0
  253. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/startup.py +0 -0
  254. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/symbolic-series.py +0 -0
  255. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/sympy.py +0 -0
  256. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/sage/tests/test_deprecation.py +0 -0
  257. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/setup.cfg +0 -0
  258. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/setup.py +0 -0
  259. {passagemath_repl-10.5.16 → passagemath_repl-10.5.18}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: passagemath-repl
3
- Version: 10.5.16
3
+ Version: 10.5.18
4
4
  Summary: passagemath: IPython kernel, Sage preparser, doctester
5
5
  Author-email: The Sage Developers <sage-support@googlegroups.com>
6
6
  Maintainer: Matthias Köppe, passagemath contributors
@@ -28,8 +28,8 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
28
28
  Classifier: Topic :: Scientific/Engineering :: Mathematics
29
29
  Requires-Python: <3.13,>=3.9
30
30
  Description-Content-Type: text/x-rst
31
- Requires-Dist: passagemath-objects~=10.5.16.0
32
- Requires-Dist: passagemath-environment~=10.5.16.0
31
+ Requires-Dist: passagemath-objects~=10.5.18.0
32
+ Requires-Dist: passagemath-environment~=10.5.18.0
33
33
  Requires-Dist: ipykernel>=5.2.1
34
34
  Requires-Dist: ipython>=7.13.0
35
35
  Requires-Dist: ipywidgets>=7.5.1
@@ -0,0 +1 @@
1
+ 10.5.18
@@ -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.5.16'
8
- SAGE_RELEASE_DATE='2024-12-30'
9
- SAGE_VERSION_BANNER='passagemath version 10.5.16, Release Date: 2024-12-30'
7
+ SAGE_VERSION='10.5.18'
8
+ SAGE_RELEASE_DATE='2025-01-04'
9
+ SAGE_VERSION_BANNER='passagemath version 10.5.18, Release Date: 2025-01-04'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: passagemath-repl
3
- Version: 10.5.16
3
+ Version: 10.5.18
4
4
  Summary: passagemath: IPython kernel, Sage preparser, doctester
5
5
  Author-email: The Sage Developers <sage-support@googlegroups.com>
6
6
  Maintainer: Matthias Köppe, passagemath contributors
@@ -28,8 +28,8 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
28
28
  Classifier: Topic :: Scientific/Engineering :: Mathematics
29
29
  Requires-Python: <3.13,>=3.9
30
30
  Description-Content-Type: text/x-rst
31
- Requires-Dist: passagemath-objects~=10.5.16.0
32
- Requires-Dist: passagemath-environment~=10.5.16.0
31
+ Requires-Dist: passagemath-objects~=10.5.18.0
32
+ Requires-Dist: passagemath-environment~=10.5.18.0
33
33
  Requires-Dist: ipykernel>=5.2.1
34
34
  Requires-Dist: ipython>=7.13.0
35
35
  Requires-Dist: ipywidgets>=7.5.1
@@ -1,5 +1,5 @@
1
- passagemath-objects~=10.5.16.0
2
- passagemath-environment~=10.5.16.0
1
+ passagemath-objects~=10.5.18.0
2
+ passagemath-environment~=10.5.18.0
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.5.16.0',
14
- 'passagemath-environment ~= 10.5.16.0',
13
+ 'passagemath-objects ~= 10.5.18.0',
14
+ 'passagemath-environment ~= 10.5.18.0',
15
15
  'ipykernel >=5.2.1',
16
16
  'ipython >=7.13.0',
17
17
  'ipywidgets >=7.5.1',
@@ -1352,12 +1352,12 @@ class DocTestController(SageObject):
1352
1352
  opt = self.options
1353
1353
 
1354
1354
  if opt.gdb:
1355
- cmd = f'''exec gdb --eval-command="run" --args '''
1355
+ cmd = '''exec gdb --eval-command="run" --args '''
1356
1356
  flags = ""
1357
1357
  if opt.logfile:
1358
1358
  sage_cmd += f" --logfile {shlex.quote(opt.logfile)}"
1359
1359
  elif opt.lldb:
1360
- cmd = f'''exec lldb --one-line "process launch" --one-line "cont" -- '''
1360
+ cmd = '''exec lldb --one-line "process launch" --one-line "cont" -- '''
1361
1361
  flags = ""
1362
1362
  else:
1363
1363
  if opt.logfile is None:
@@ -45,38 +45,48 @@ AUTHORS:
45
45
  # the License, or (at your option) any later version.
46
46
  # https://www.gnu.org/licenses/
47
47
  # ****************************************************************************
48
+ from __future__ import annotations
48
49
 
49
-
50
+ import doctest
51
+ import errno
52
+ import gc
53
+ import hashlib
54
+ import linecache
55
+ import multiprocessing
50
56
  import os
51
57
  import platform
58
+ import re
59
+ import signal
52
60
  import sys
61
+ import tempfile
53
62
  import time
54
- import signal
55
- import linecache
56
- import hashlib
57
- import multiprocessing
58
- import warnings
59
- import re
60
- import errno
61
- import doctest
62
63
  import traceback
63
- import tempfile
64
+ import typing
65
+ import warnings
64
66
  from collections import defaultdict
65
67
  from dis import findlinestarts
66
68
  from queue import Empty
67
- import gc
69
+
68
70
  import IPython.lib.pretty
69
71
 
70
- import sage.misc.randstate as randstate
71
- from sage.misc.timing import walltime
72
- from .util import Timer, RecordingDict, count_noun
73
- from .sources import DictAsObject
74
- from .parsing import OriginalSource, reduce_hex
75
- from sage.structure.sage_object import SageObject
76
- from .parsing import SageOutputChecker, pre_hash, get_source, unparse_optional_tags
77
- from sage.repl.user_globals import set_globals
78
72
  from sage.cpython.atexit import restore_atexit
79
73
  from sage.cpython.string import bytes_to_str, str_to_bytes
74
+ from sage.doctest.parsing import (
75
+ OriginalSource,
76
+ SageOutputChecker,
77
+ get_source,
78
+ pre_hash,
79
+ reduce_hex,
80
+ unparse_optional_tags,
81
+ )
82
+ from sage.doctest.sources import DictAsObject
83
+ from sage.doctest.util import RecordingDict, Timer, count_noun
84
+ from sage.misc import randstate
85
+ from sage.repl.user_globals import set_globals
86
+ from sage.structure.sage_object import SageObject
87
+
88
+ if typing.TYPE_CHECKING:
89
+ from sage.doctest.control import DocTestController
80
90
 
81
91
  # With OS X, Python 3.8 defaults to use 'spawn' instead of 'fork' in
82
92
  # multiprocessing, and Sage doctesting doesn't work with 'spawn'. See
@@ -113,7 +123,7 @@ def _sorted_dict_pprinter_factory(start, end):
113
123
  return inner
114
124
 
115
125
 
116
- def init_sage(controller=None):
126
+ def init_sage(controller: DocTestController | None = None) -> None:
117
127
  """
118
128
  Import the Sage library.
119
129
 
@@ -1714,7 +1724,7 @@ class DocTestDispatcher(SageObject):
1714
1724
  Create parallel :class:`DocTestWorker` processes and dispatches
1715
1725
  doctesting tasks.
1716
1726
  """
1717
- def __init__(self, controller):
1727
+ def __init__(self, controller: DocTestController):
1718
1728
  """
1719
1729
  INPUT:
1720
1730
 
@@ -25,6 +25,8 @@ import os
25
25
  import re
26
26
  import sys
27
27
  import shutil
28
+ import webbrowser
29
+ from pathlib import Path
28
30
 
29
31
  from sage.env import (SAGE_LOCAL, cython_aliases,
30
32
  sage_include_directories)
@@ -79,9 +81,16 @@ def _standard_libs_libdirs_incdirs_aliases():
79
81
  sequence_number = {}
80
82
 
81
83
 
84
+ def _webbrowser_open_file(path):
85
+ """
86
+ Open a html file in a web browser.
87
+ """
88
+ webbrowser.open(Path(path).as_uri())
89
+
90
+
82
91
  def cython(filename, verbose=0, compile_message=False,
83
- use_cache=False, create_local_c_file=False, annotate=True, sage_namespace=True,
84
- create_local_so_file=False):
92
+ use_cache=False, create_local_c_file=False, annotate=True, view_annotate=False,
93
+ view_annotate_callback=_webbrowser_open_file, sage_namespace=True, create_local_so_file=False):
85
94
  r"""
86
95
  Compile a Cython file. This converts a Cython file to a C (or C++ file),
87
96
  and then compiles that. The .c file and the .so file are
@@ -111,6 +120,14 @@ def cython(filename, verbose=0, compile_message=False,
111
120
  in the temporary directory, but if ``create_local_c_file`` is also True,
112
121
  then save a copy of the .html file in the current directory.
113
122
 
123
+ - ``view_annotate`` -- boolean (default: ``False``); if ``True``, open the
124
+ annotated html file in a web browser
125
+
126
+ - ``view_annotate_callback`` -- function; a function that takes a string
127
+ being the path to the html file. This can be overridden to change
128
+ what to do with the annotated html file. Have no effect unless
129
+ ``view_annotate`` is ``True``.
130
+
114
131
  - ``sage_namespace`` -- boolean (default: ``True``); if ``True``, import
115
132
  ``sage.all``
116
133
 
@@ -227,6 +244,34 @@ def cython(filename, verbose=0, compile_message=False,
227
244
  ....: from sage.misc.cachefunc cimport cache_key
228
245
  ....: ''')
229
246
 
247
+ Test ``view_annotate``::
248
+
249
+ sage: cython('''
250
+ ....: def f(int n):
251
+ ....: return n*n
252
+ ....: ''', view_annotate=True) # optional -- webbrowser
253
+
254
+ ::
255
+
256
+ sage: cython('''
257
+ ....: def f(int n):
258
+ ....: return n*n
259
+ ....: ''', view_annotate=True, annotate=False)
260
+ Traceback (most recent call last):
261
+ ...
262
+ ValueError: cannot view annotated file without creating it
263
+
264
+ ::
265
+
266
+ sage: collected_paths = []
267
+ sage: cython('''
268
+ ....: def f(int n):
269
+ ....: return n*n
270
+ ....: ''', view_annotate=True, view_annotate_callback=collected_paths.append)
271
+ sage: collected_paths
272
+ ['...']
273
+ sage: len(collected_paths)
274
+ 1
230
275
  """
231
276
  if not filename.endswith('pyx'):
232
277
  print("Warning: file (={}) should have extension .pyx".format(filename), file=sys.stderr)
@@ -382,6 +427,11 @@ def cython(filename, verbose=0, compile_message=False,
382
427
  shutil.copy(os.path.join(target_dir, name + ".html"),
383
428
  os.curdir)
384
429
 
430
+ if view_annotate:
431
+ if not annotate:
432
+ raise ValueError("cannot view annotated file without creating it")
433
+ view_annotate_callback(os.path.join(target_dir, name + ".html"))
434
+
385
435
  # This emulates running "setup.py build" with the correct options
386
436
  #
387
437
  # setuptools plugins considered harmful:
@@ -13,7 +13,7 @@ from sage.misc.temporary_file import tmp_dir
13
13
 
14
14
 
15
15
  def _import_module_from_path(name, path=None):
16
- """
16
+ r"""
17
17
  Import the module named ``name`` by searching the given path entries (or
18
18
  `sys.path` by default).
19
19
 
@@ -694,7 +694,7 @@ def format(s, embedded=False):
694
694
  We check that the todo Sphinx extension is correctly activated::
695
695
 
696
696
  sage: sage.misc.sagedoc.format(sage.combinat.ranker.on_fly.__doc__) # needs sphinx
697
- " Return ... Todo: add tests as in combinat::rankers\n"
697
+ "...Return ...Todo: add tests as in combinat::rankers\n"
698
698
 
699
699
  In the following use case, the ``nodetex`` directive would have been ignored prior
700
700
  to :issue:`11815`::
@@ -1142,10 +1142,11 @@ def search_src(string, extra1='', extra2='', extra3='', extra4='',
1142
1142
  The following produces an error because the string 'fetch(' is a
1143
1143
  malformed regular expression::
1144
1144
 
1145
- sage: print(search_src(" fetch(", "def", interact=False))
1146
- Traceback (most recent call last):
1147
- ...
1148
- error: missing ), unterminated subpattern at position 6
1145
+ sage: try:
1146
+ ....: print(search_src(" fetch(", "def", interact=False))
1147
+ ....: except Exception as e:
1148
+ ....: print(e)
1149
+ missing ), unterminated subpattern at position 6
1149
1150
 
1150
1151
  To fix this, *escape* the parenthesis with a backslash::
1151
1152
 
@@ -1193,7 +1194,6 @@ def search_src(string, extra1='', extra2='', extra3='', extra4='',
1193
1194
  misc/sagedoc.py:... len(search_src("matrix", interact=False).splitlines())...
1194
1195
  misc/sagedoc.py:... len(search_src("matrix", module="sage.calculus", interact=False).splitlines())...
1195
1196
  misc/sagedoc.py:... len(search_src("matrix", path_re="calc"...
1196
- misc/sagedoc.py:... print(search_src(" fetch(", "def", interact=False))...
1197
1197
  misc/sagedoc.py:... print(search_src(r" fetch\(", "def", interact=False))...
1198
1198
  misc/sagedoc.py:... print(search_src(r" fetch\(", "def", "pyx", interact=False))...
1199
1199
  misc/sagedoc.py:... s = search_src('Matrix', path_re='matrix', interact=False); s.find('x') > 0...
@@ -1463,7 +1463,7 @@ class _sage_doc:
1463
1463
  sage: browse_sage_doc._open("reference", testing=True)[0] # needs sagemath_doc_html
1464
1464
  'http://localhost:8000/doc/live/reference/index.html'
1465
1465
  sage: browse_sage_doc(identity_matrix, 'rst')[-107:-47] # needs sage.modules
1466
- 'Full MatrixSpace of 3 by 3 sparse matrices over Integer Ring'
1466
+ '...Full MatrixSpace of 3 by 3 sparse matrices...'
1467
1467
  """
1468
1468
  def __init__(self):
1469
1469
  """
@@ -40,7 +40,7 @@ character-by-character::
40
40
  ....: traceback.print_exc(file=sys.stdout)
41
41
  Traceback (most recent call last):
42
42
  ...
43
- exec(preparse_file(f.read()) + "\n", globals)
43
+ exec(preparse_file(f.read()) + "\n", globals)...
44
44
  File "<string>", line 3, in <module>
45
45
  ValueError: third
46
46
  sage: detach(src)
@@ -52,7 +52,7 @@ character-by-character::
52
52
  ....: traceback.print_exc(file=sys.stdout)
53
53
  Traceback (most recent call last):
54
54
  ...
55
- exec(code, globals)
55
+ exec(code, globals)...
56
56
  File ".../foobar...sage.py", line ..., in <module>
57
57
  raise ValueError("third") # this should appear in the source snippet...
58
58
  ValueError: third
@@ -120,7 +120,7 @@ class SomeIPythonRepr(ObjectReprABC):
120
120
  self._type_repr = type_repr
121
121
 
122
122
  def __call__(self, obj, p, cycle):
123
- """
123
+ r"""
124
124
  Format object.
125
125
 
126
126
  INPUT:
@@ -142,7 +142,17 @@ class SomeIPythonRepr(ObjectReprABC):
142
142
  sage: pp = SomeIPythonRepr()
143
143
  sage: pp.format_string(set([1, 2, 3]))
144
144
  '{1, 2, 3}'
145
+
146
+ TESTS::
147
+
148
+ sage: pp.format_string(Sequence([[1]*20, [2]*20]))
149
+ '[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]]'
145
150
  """
151
+ if hasattr(type(obj), '_repr_pretty_'):
152
+ # standard method for classes to extend pretty library
153
+ # see https://ipython.readthedocs.io/en/stable/api/generated/IPython.lib.pretty.html#extending
154
+ obj._repr_pretty_(p, cycle)
155
+ return True
146
156
  try:
147
157
  pretty_repr = self._type_repr[type(obj)]
148
158
  except KeyError:
@@ -218,7 +228,7 @@ class PlainPythonRepr(ObjectReprABC):
218
228
 
219
229
  def __call__(self, obj, p, cycle):
220
230
  r"""
221
- Format matrix.
231
+ Format object.
222
232
 
223
233
  INPUT:
224
234
 
@@ -113,7 +113,7 @@ class Image(SageObject):
113
113
  sage: from sage.repl.image import Image
114
114
  sage: img = Image('RGB', (16, 16), 'white')
115
115
  sage: img.pil
116
- <PIL.Image.Image image mode=RGB size=16x16 at 0x...>
116
+ <PIL.Image.Image image mode=RGB size=16x16...>
117
117
  """
118
118
  return self._pil
119
119
 
@@ -65,6 +65,8 @@ In contrast, input to the ``%time`` magic command is preparsed::
65
65
  """
66
66
 
67
67
  from IPython.core.magic import Magics, magics_class, line_magic, cell_magic
68
+ from IPython.core.display import HTML
69
+ from IPython.core.getipython import get_ipython
68
70
 
69
71
  from sage.repl.load import load_wrap
70
72
  from sage.env import SAGE_IMPORTALL, SAGE_STARTUP_FILE
@@ -72,6 +74,14 @@ from sage.misc.lazy_import import LazyImport
72
74
  from sage.misc.misc import run_once
73
75
 
74
76
 
77
+ def _running_in_notebook():
78
+ try:
79
+ from ipykernel.zmqshell import ZMQInteractiveShell
80
+ except ImportError:
81
+ return False
82
+ return isinstance(get_ipython(), ZMQInteractiveShell)
83
+
84
+
75
85
  @magics_class
76
86
  class SageMagics(Magics):
77
87
 
@@ -348,6 +358,12 @@ class SageMagics(Magics):
348
358
  This is syntactic sugar on the
349
359
  :func:`~sage.misc.cython.cython_compile` function.
350
360
 
361
+ Note that there is also the ``%%cython`` cell magic provided by Cython,
362
+ which can be loaded with ``%load_ext cython``, see
363
+ `Cython documentation <https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html#compiling-with-a-jupyter-notebook>`_
364
+ for more details.
365
+ The semantic is slightly different from the version provided by Sage.
366
+
351
367
  INPUT:
352
368
 
353
369
  - ``line`` -- parsed as keyword arguments. The allowed arguments are:
@@ -357,12 +373,20 @@ class SageMagics(Magics):
357
373
  - ``--use-cache``
358
374
  - ``--create-local-c-file``
359
375
  - ``--annotate``
376
+ - ``--view-annotate``
360
377
  - ``--sage-namespace``
361
378
  - ``--create-local-so-file``
362
379
  - ``--no-compile-message``, ``--no-use-cache``, etc.
363
380
 
364
381
  See :func:`~sage.misc.cython.cython` for details.
365
382
 
383
+ If ``--view-annotate`` is given, the annotation is either displayed
384
+ inline in the Sage notebook or opened in a new web browser, depending
385
+ on whether the Sage notebook is used.
386
+
387
+ You can override the selection by specifying
388
+ ``--view-annotate=webbrowser`` or ``--view-annotate=displayhtml``.
389
+
366
390
  - ``cell`` -- string; the Cython source code to process
367
391
 
368
392
  OUTPUT: none; the Cython code is compiled and loaded
@@ -403,6 +427,45 @@ class SageMagics(Magics):
403
427
  ....: ''')
404
428
  UsageError: unrecognized arguments: --help
405
429
 
430
+ Test ``--view-annotate`` invalid arguments::
431
+
432
+ sage: # needs sage.misc.cython
433
+ sage: shell.run_cell('''
434
+ ....: %%cython --view-annotate=xx
435
+ ....: print(1)
436
+ ....: ''')
437
+ UsageError: argument --view-annotate: invalid choice: 'xx' (choose from 'none', 'auto', 'webbrowser', 'displayhtml')
438
+
439
+ Test ``--view-annotate=displayhtml`` (note that in a notebook environment
440
+ an inline HTML frame will be displayed)::
441
+
442
+ sage: # needs sage.misc.cython
443
+ sage: shell.run_cell('''
444
+ ....: %%cython --view-annotate=displayhtml
445
+ ....: print(1)
446
+ ....: ''')
447
+ 1
448
+ <IPython.core.display.HTML object>
449
+
450
+ Test ``--view-annotate=webbrowser``::
451
+
452
+ sage: # needs sage.misc.cython webbrowser
453
+ sage: shell.run_cell('''
454
+ ....: %%cython --view-annotate
455
+ ....: print(1)
456
+ ....: ''')
457
+ 1
458
+ sage: shell.run_cell('''
459
+ ....: %%cython --view-annotate=auto
460
+ ....: print(1)
461
+ ....: ''') # --view-annotate=auto is undocumented feature, equivalent to --view-annotate
462
+ 1
463
+ sage: shell.run_cell('''
464
+ ....: %%cython --view-annotate=webbrowser
465
+ ....: print(1)
466
+ ....: ''')
467
+ 1
468
+
406
469
  Test invalid quotes::
407
470
 
408
471
  sage: # needs sage.misc.cython
@@ -434,10 +497,26 @@ class SageMagics(Magics):
434
497
  parser.add_argument("--use-cache", action=argparse.BooleanOptionalAction)
435
498
  parser.add_argument("--create-local-c-file", action=argparse.BooleanOptionalAction)
436
499
  parser.add_argument("--annotate", action=argparse.BooleanOptionalAction)
500
+ parser.add_argument("--view-annotate", choices=["none", "auto", "webbrowser", "displayhtml"],
501
+ nargs="?", const="auto", default="none")
437
502
  parser.add_argument("--sage-namespace", action=argparse.BooleanOptionalAction)
438
503
  parser.add_argument("--create-local-so-file", action=argparse.BooleanOptionalAction)
439
504
  args = parser.parse_args(shlex.split(line))
440
- return cython_compile(cell, **{k: v for k, v in args.__dict__.items() if v is not None})
505
+ view_annotate = args.view_annotate
506
+ del args.view_annotate
507
+ if view_annotate == "auto":
508
+ if _running_in_notebook():
509
+ view_annotate = "displayhtml"
510
+ else:
511
+ view_annotate = "webbrowser"
512
+ args_dict = {k: v for k, v in args.__dict__.items() if v is not None}
513
+ if view_annotate != "none":
514
+ args_dict["view_annotate"] = True
515
+ if view_annotate == "displayhtml":
516
+ path_to_annotate_html_container = []
517
+ cython_compile(cell, **args_dict, view_annotate_callback=path_to_annotate_html_container.append)
518
+ return HTML(filename=path_to_annotate_html_container[0])
519
+ return cython_compile(cell, **args_dict)
441
520
 
442
521
  @cell_magic
443
522
  def fortran(self, line, cell):
@@ -509,10 +588,7 @@ class SageCustomizations:
509
588
  self.init_inspector()
510
589
  self.init_line_transforms()
511
590
 
512
- try:
513
- import sage.all # until sage's import hell is fixed
514
- except ImportError:
515
- import sage.all__sagemath_repl
591
+ import sage.all # noqa: F401
516
592
 
517
593
  self.shell.verbose_quit = True
518
594
 
@@ -1706,7 +1706,7 @@ def preparse(line, reset=True, do_time=False, ignore_prompts=False,
1706
1706
  "ZZ = ZZ['u,v']; (x, y,) = ZZ._first_ngens(2)"
1707
1707
  sage: preparse("ZZ.<x> = QQ[2^(1/3)]")
1708
1708
  'ZZ = QQ[Integer(2)**(Integer(1)/Integer(3))]; (x,) = ZZ._first_ngens(1)'
1709
- sage: QQ[2^(1/3)] # needs sage.rings.number_field sage.symbolic
1709
+ sage: QQ[2^(1/3)] # needs fpylll sage.rings.number_field sage.symbolic
1710
1710
  Number Field in a with defining polynomial x^3 - 2 with a = 1.259921049894873?
1711
1711
 
1712
1712
  sage: preparse("a^b")
@@ -32,18 +32,26 @@ EXAMPLES::
32
32
  # the License, or (at your option) any later version.
33
33
  # https://www.gnu.org/licenses/
34
34
  # ****************************************************************************
35
-
35
+ from __future__ import annotations
36
36
 
37
37
  import warnings
38
+ from typing import Any
39
+
40
+ try:
41
+ from typing import Self # type: ignore (Python >= 3.11)
42
+ except ImportError:
43
+ from typing_extensions import Self # type: ignore (Python 3.9, 3.10)
38
44
 
39
- from sage.structure.sage_object import SageObject
40
45
  from sage.repl.rich_output.output_basic import (
41
- OutputPlainText, OutputAsciiArt, OutputUnicodeArt, OutputLatex,
46
+ OutputAsciiArt,
47
+ OutputPlainText,
48
+ OutputUnicodeArt,
42
49
  )
43
50
  from sage.repl.rich_output.output_browser import (
44
51
  OutputHtml,
45
52
  )
46
53
  from sage.repl.rich_output.preferences import DisplayPreferences
54
+ from sage.structure.sage_object import SageObject
47
55
 
48
56
 
49
57
  class DisplayException(Exception):
@@ -185,7 +193,7 @@ class restricted_output:
185
193
 
186
194
  class DisplayManager(SageObject):
187
195
 
188
- _instance = None
196
+ _instance: Self | None = None
189
197
 
190
198
  def __init__(self):
191
199
  """
@@ -205,7 +213,7 @@ class DisplayManager(SageObject):
205
213
  self.switch_backend(BackendSimple())
206
214
 
207
215
  @classmethod
208
- def get_instance(cls):
216
+ def get_instance(cls) -> Self:
209
217
  """
210
218
  Get the singleton instance.
211
219
 
@@ -771,7 +779,7 @@ class DisplayManager(SageObject):
771
779
  """
772
780
  return self._supported_output
773
781
 
774
- def displayhook(self, obj):
782
+ def displayhook(self, obj: Any) -> None | Any:
775
783
  """
776
784
  Implementation of the displayhook.
777
785
 
@@ -160,7 +160,7 @@ class SequencePrettyPrinter(SageObject):
160
160
  sage: seq._concatenate_graphs().show(edge_labels=True) # needs sage.graphs sage.plot
161
161
  Traceback (most recent call last):
162
162
  ...
163
- TypeError: ...matplotlib() got an unexpected keyword argument 'edge_labels'
163
+ TypeError: ...matplotlib() got an unexpected keyword argument 'edge_labels'...
164
164
  """
165
165
  try:
166
166
  from sage.plot.plot import Graphics
@@ -102,7 +102,7 @@ def get_globals():
102
102
  return user_globals
103
103
 
104
104
 
105
- def set_globals(g):
105
+ def set_globals(g: dict) -> None:
106
106
  """
107
107
  Set the dictionary of all user globals to ``g``.
108
108
 
@@ -26,7 +26,7 @@ points since they cannot create any sort of crossing. ::
26
26
  sage: dcrossing([(1,5), (2,4), (4,9), (6,12), (7,10), (10,11)])
27
27
  3
28
28
  """
29
- #*****************************************************************************
29
+ # ****************************************************************************
30
30
  # Copyright (C) 2008 Dan Drake <ddrake@member.ams.org>
31
31
  #
32
32
  # This program is free software: you can redistribute it and/or modify
@@ -35,8 +35,8 @@ points since they cannot create any sort of crossing. ::
35
35
  # your option) any later version.
36
36
  #
37
37
  # See https://www.gnu.org/licenses/.
38
- #*****************************************************************************
39
- from sage.combinat.set_partition import SetPartitions as SetPartitions
38
+ # ****************************************************************************
39
+ from sage.combinat.set_partition import SetPartitions
40
40
 
41
41
 
42
42
  def CompleteMatchings(n):