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.
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/MANIFEST.in +6 -0
- {passagemath_repl-10.4.29/passagemath_repl.egg-info → passagemath_repl-10.4.31}/PKG-INFO +3 -3
- passagemath_repl-10.4.31/VERSION.txt +1 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-version.sh +3 -3
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31/passagemath_repl.egg-info}/PKG-INFO +3 -3
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/passagemath_repl.egg-info/SOURCES.txt +3 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/passagemath_repl.egg-info/requires.txt +2 -2
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/pyproject.toml +3 -2
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/pyproject.toml.m4 +1 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/all__sagemath_repl.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/__main__.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/control.py +34 -27
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/external.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/fixtures.py +2 -2
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/forker.py +57 -48
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/parsing.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/reporting.py +7 -7
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/sources.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/test.py +9 -9
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/util.py +220 -5
- passagemath_repl-10.4.31/sage/interfaces/cleaner.py +48 -0
- passagemath_repl-10.4.31/sage/interfaces/quit.py +163 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/sagedoc.py +10 -7
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/configuration.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/fancy_repr.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/util.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/interface_magic.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/interpreter.py +4 -3
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_extension.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/install.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/widgets.py +2 -2
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/display_manager.py +1 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_basic.py +3 -3
- passagemath_repl-10.4.31/sage/tests/books/__init__.py +2 -0
- passagemath_repl-10.4.31/sage/tests/meson.build +54 -0
- passagemath_repl-10.4.29/VERSION.txt +0 -1
- passagemath_repl-10.4.29/sage/tests/memcheck/__init__.py +0 -1
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/README.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/math-readline +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-cachegrind +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-callgrind +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-cleaner +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-coverage +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-cython +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-env +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-env-config.in +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-eval +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-fixdoctests +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-grep +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-grepdoc +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-inline-fortran +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-ipynb2rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-ipython +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-list-packages +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-massif +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-notebook +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-num-threads.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-omega +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-preparse +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-python +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-run +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-run-cython +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-runtests +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-src-env-config.in +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-startuptime.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-update-version +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-valgrind +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/bin/sage-venv-config +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/known-test-failures.json +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/passagemath_repl.egg-info/dependency_links.txt +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/passagemath_repl.egg-info/top_level.txt +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/requirements-editable.txt.m4 +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/requirements.txt.m4 +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/__init__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/all.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/check_tolerance.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/marked_output.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/parsing_test.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/rif_tol.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/1second.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/99seconds.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/abort.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/atexit.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/fail_and_die.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/initial.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/interrupt.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/interrupt_diehard.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/keyboardinterrupt.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/longtime.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/nodoctest +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/random_seed.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/show_skipped.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/sig_on.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/simple_failure.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/sleep_and_raise.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/doctest/tests/tolerance.rst +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/all__sagemath_repl.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/banner.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/benchmark.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/classgraph.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/copying.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/cython.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/dev_tools.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/edit_module.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/explain_pickle.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/gperftools.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/inline_fortran.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/messaging.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/pager.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/profiler.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/python.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/remote_file.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/sage_eval.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/sage_input.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/sh.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/misc/trace.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/__init__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/all.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/attach.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/__init__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/formatter.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/jsmol_iframe.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/display/pretty_print.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/image.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/inputhook.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/__init__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/__main__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/all_jupyter.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/interact.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/kernel.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_kernel/widgets_sagenb.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/ipython_tests.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/load.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/preparse.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/prompts.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/__init__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/backend_base.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/backend_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/backend_emacs.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/backend_ipython.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/buffer.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.avi +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.canvas3d +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.dvi +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.flv +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.gif +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.jpg +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.mkv +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.mov +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.mp4 +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.ogv +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.pdf +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.png +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.svg +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.webm +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example.wmv +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example_jmol.spt.zip +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example_wavefront_scene.mtl +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/example_wavefront_scene.obj +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_browser.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_catalog.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_graphics.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_graphics3d.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/output_video.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/preferences.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/pretty_print.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/rich_output/test_backend.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/repl/user_globals.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/__init__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/all.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/article_heuberger_krenn_kropf_fsm-in-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/arxiv_0812_2725.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/benchmark.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/book_schilling_zabrocki_kschur_primer.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/book_stein_ent.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/book_stein_modform.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/README +0 -0
- {passagemath_repl-10.4.29/sage/tests/books → passagemath_repl-10.4.31/sage/tests/books/computational-mathematics-with-sagemath}/__init__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/combinat_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/domaines_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/float_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/graphique_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/graphtheory_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/integration_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/linalg_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/linsolve_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/lp_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/mpoly_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/nonlinear_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/numbertheory_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/polynomes_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/premierspas_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/programmation_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/recequadiff_doctest.py +0 -0
- {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
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/calculus_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/combinat_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/domaines_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/float_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/graphique_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/graphtheory_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/integration_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/linalg_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/linsolve_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/lp_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/mpoly_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/nonlinear_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/numbertheory_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/polynomes_doctest.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/computational-mathematics-with-sagemath/sol/recequadiff_doctest.py +0 -0
- {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
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/actions-sage-exercises.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/actions-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/algcodes-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/boolean-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/cosets-sage-exercises.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/cosets-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/crypt-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/cyclic-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/domains-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/fields-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/finite-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/galois-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/groups-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/homomorph-sage-exercises.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/homomorph-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/integers-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/isomorph-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/normal-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/permute-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/poly-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/rings-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/sets-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/struct-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/sylow-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/vect-sage-exercises.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/books/judson-abstract-algebra/vect-sage.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/cmdline.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/combinatorial_hopf_algebras.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/cython.pyx +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/finite_poset.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/functools_partial_src.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/gosper-sum.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/lazy_imports.py +0 -0
- {passagemath_repl-10.4.29/sage/tests/books/judson-abstract-algebra → passagemath_repl-10.4.31/sage/tests/memcheck}/__init__.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/memcheck/run_tests.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/memcheck/run_tests_in_valgrind.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/memcheck/symbolic_expression.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/memcheck/verify_no_leak.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/modular_group_cohomology.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/numpy.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/parigp.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/startup.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/stl_vector.pyx +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/symbolic-series.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/sympy.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/sage/tests/test_deprecation.py +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/setup.cfg +0 -0
- {passagemath_repl-10.4.29 → passagemath_repl-10.4.31}/setup.py +0 -0
- {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.
|
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
|
-
Requires-Dist: passagemath-environment~=10.4.
|
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] --
|
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.
|
8
|
-
SAGE_RELEASE_DATE='2024-10-
|
9
|
-
SAGE_VERSION_BANNER='passagemath version 10.4.
|
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.
|
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
|
-
Requires-Dist: passagemath-environment~=10.4.
|
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
|
@@ -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.
|
14
|
-
'passagemath-environment ~= 10.4.
|
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",
|
@@ -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
|
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
|
-
|
289
|
-
|
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
|
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
|
599
|
-
|
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
|
-
|
603
|
-
the machine running the tests.
|
605
|
+
TESTS:
|
604
606
|
|
605
|
-
|
607
|
+
Ensure that the user's command-line options are not changed::
|
606
608
|
|
607
|
-
sage: from sage.doctest.control import DocTestDefaults,
|
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
|
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
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
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
|
-
|
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, ...
|
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, ...
|
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, ...
|
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, ...
|
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, ...
|
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, ...
|
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, ...
|
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, ...
|
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
|
-
|
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
|
-
|
807
|
-
self.total_walltime += example.walltime +
|
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.
|
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
|
-
|
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
|
-
|
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, *,
|
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
|
-
- ``
|
1344
|
-
the
|
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.
|
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.
|
1363
|
-
sage:
|
1364
|
-
|
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
|
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 [%.
|
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, *,
|
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
|
-
- ``
|
1515
|
-
the
|
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.
|
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.
|
1533
|
-
sage:
|
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
|
1541
|
+
Warning: slow doctest:
|
1537
1542
|
doctest_var = 42; doctest_var^2
|
1538
|
-
Test ran for 1.
|
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
|
1541
|
-
('Test ran for %.
|
1542
|
-
% (example.
|
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, ...
|
1755
|
+
[... tests, ...s wall]
|
1747
1756
|
sage -t .../rings/ideal.py
|
1748
|
-
[... tests, ...
|
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, ...
|
1801
|
+
[... tests, ...s wall]
|
1793
1802
|
sage -t .../rings/big_oh.py
|
1794
|
-
[... tests, ...
|
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, ...
|
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, ...
|
2133
|
+
[... tests, ...s wall]
|
2125
2134
|
sage -t .../sage/rings/big_oh.py
|
2126
|
-
[... tests, ...
|
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, ...
|
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, ...
|
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, ...
|
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
|
|