passagemath-repl 10.5.17__tar.gz → 10.5.19__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.5.17 → passagemath_repl-10.5.19}/PKG-INFO +3 -3
- passagemath_repl-10.5.19/VERSION.txt +1 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-version.sh +3 -3
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/passagemath_repl.egg-info/PKG-INFO +3 -3
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/passagemath_repl.egg-info/requires.txt +2 -2
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/pyproject.toml +2 -2
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/control.py +2 -2
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/forker.py +31 -21
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/cython.py +52 -2
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/inline_fortran.py +1 -1
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/sagedoc.py +7 -7
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/attach.py +2 -2
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/display/fancy_repr.py +12 -2
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/image.py +1 -1
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_extension.py +81 -2
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/preparse.py +1 -1
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/display_manager.py +14 -6
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/pretty_print.py +1 -1
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/user_globals.py +1 -1
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/arxiv_0812_2725.py +3 -3
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/book_stein_modform.py +35 -54
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py +1 -5
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/linalg_doctest.py +16 -23
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/galois-sage.py +70 -74
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/vect-sage.py +1 -4
- passagemath_repl-10.5.17/VERSION.txt +0 -1
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/MANIFEST.in +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/README.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/math-readline +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-cachegrind +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-callgrind +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-cleaner +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-coverage +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-cython +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-env +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-env-config.in +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-eval +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-fixdoctests +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-grep +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-grepdoc +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-inline-fortran +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-ipynb2rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-ipython +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-list-packages +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-massif +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-notebook +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-num-threads.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-omega +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-preparse +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-python +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-run +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-run-cython +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-runtests +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-src-env-config.in +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-startuptime.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-update-version +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-valgrind +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/bin/sage-venv-config +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/known-test-failures.json +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/passagemath_repl.egg-info/SOURCES.txt +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/passagemath_repl.egg-info/dependency_links.txt +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/passagemath_repl.egg-info/top_level.txt +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/pyproject.toml.m4 +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/requirements-editable.txt.m4 +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/requirements.txt.m4 +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/all__sagemath_repl.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/__main__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/all.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/check_tolerance.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/external.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/fixtures.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/marked_output.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/parsing.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/parsing_test.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/reporting.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/rif_tol.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/sources.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/test.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/1second.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/99seconds.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/abort.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/atexit.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/fail_and_die.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/initial.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/interrupt.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/interrupt_diehard.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/keyboardinterrupt.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/longtime.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/nodoctest +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/random_seed.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/show_skipped.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/sig_on.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/simple_failure.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/sleep_and_raise.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/tests/tolerance.rst +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/doctest/util.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/interfaces/cleaner.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/interfaces/quit.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/all__sagemath_repl.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/banner.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/benchmark.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/classgraph.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/copying.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/dev_tools.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/edit_module.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/explain_pickle.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/gperftools.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/messaging.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/pager.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/profiler.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/python.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/remote_file.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/sage_eval.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/sage_input.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/sh.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/misc/trace.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/all.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/configuration.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/display/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/display/formatter.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/display/jsmol_iframe.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/display/pretty_print.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/display/util.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/inputhook.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/interface_magic.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/interpreter.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_kernel/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_kernel/__main__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_kernel/all_jupyter.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_kernel/install.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_kernel/interact.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_kernel/kernel.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_kernel/widgets.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_kernel/widgets_sagenb.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/ipython_tests.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/load.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/prompts.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/backend_base.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/backend_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/backend_emacs.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/backend_ipython.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/buffer.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.avi +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.canvas3d +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.dvi +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.flv +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.gif +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.jpg +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.mkv +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.mov +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.mp4 +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.ogv +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.pdf +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.png +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.svg +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.webm +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example.wmv +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example_jmol.spt.zip +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example_wavefront_scene.mtl +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/example_wavefront_scene.obj +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/output_basic.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/output_browser.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/output_catalog.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/output_graphics.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/output_graphics3d.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/output_video.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/preferences.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/test_backend.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/all.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/all__sagemath_repl.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/article_heuberger_krenn_kropf_fsm-in-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/benchmark.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/book_schilling_zabrocki_kschur_primer.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/book_stein_ent.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/README +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/combinat_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/domaines_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/float_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/graphique_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/graphtheory_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/integration_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/linsolve_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/lp_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/mpoly_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/nonlinear_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/numbertheory_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/polynomes_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/premierspas_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/programmation_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/recequadiff_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/calculus_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/combinat_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/domaines_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/float_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/graphique_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/graphtheory_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/integration_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/linalg_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/linsolve_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/lp_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/mpoly_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/nonlinear_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/numbertheory_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/polynomes_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/computational-mathematics-with-sagemath/sol/recequadiff_doctest.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/actions-sage-exercises.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/actions-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/algcodes-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/boolean-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/cosets-sage-exercises.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/cosets-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/crypt-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/cyclic-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/domains-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/fields-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/finite-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/groups-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/homomorph-sage-exercises.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/homomorph-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/integers-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/isomorph-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/normal-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/permute-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/poly-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/rings-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/sets-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/struct-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/sylow-sage.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/books/judson-abstract-algebra/vect-sage-exercises.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/cmdline.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/combinatorial_hopf_algebras.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/finite_poset.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/functools_partial_src.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/gosper-sum.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/lazy_imports.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/memcheck/__init__.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/memcheck/run_tests.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/memcheck/run_tests_in_valgrind.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/memcheck/symbolic_expression.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/memcheck/verify_no_leak.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/meson.build +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/modular_group_cohomology.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/numpy.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/parigp.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/startup.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/symbolic-series.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/sympy.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/tests/test_deprecation.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/setup.cfg +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/setup.py +0 -0
- {passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/tox.ini +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: passagemath-repl
|
3
|
-
Version: 10.5.
|
3
|
+
Version: 10.5.19
|
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.
|
32
|
-
Requires-Dist: passagemath-environment~=10.5.
|
31
|
+
Requires-Dist: passagemath-objects~=10.5.19.0
|
32
|
+
Requires-Dist: passagemath-environment~=10.5.19.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.19
|
@@ -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.
|
8
|
-
SAGE_RELEASE_DATE='2025-01-
|
9
|
-
SAGE_VERSION_BANNER='passagemath version 10.5.
|
7
|
+
SAGE_VERSION='10.5.19'
|
8
|
+
SAGE_RELEASE_DATE='2025-01-07'
|
9
|
+
SAGE_VERSION_BANNER='passagemath version 10.5.19, Release Date: 2025-01-07'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: passagemath-repl
|
3
|
-
Version: 10.5.
|
3
|
+
Version: 10.5.19
|
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.
|
32
|
-
Requires-Dist: passagemath-environment~=10.5.
|
31
|
+
Requires-Dist: passagemath-objects~=10.5.19.0
|
32
|
+
Requires-Dist: passagemath-environment~=10.5.19.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
|
@@ -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.
|
14
|
-
'passagemath-environment ~= 10.5.
|
13
|
+
'passagemath-objects ~= 10.5.19.0',
|
14
|
+
'passagemath-environment ~= 10.5.19.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 =
|
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 =
|
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
|
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
|
-
|
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,
|
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:
|
@@ -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
|
-
"
|
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:
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
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
|
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
|
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
|
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
|
-
|
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):
|
@@ -510,7 +589,7 @@ class SageCustomizations:
|
|
510
589
|
self.init_line_transforms()
|
511
590
|
|
512
591
|
try:
|
513
|
-
import sage.all
|
592
|
+
import sage.all # until sage's import hell is fixed
|
514
593
|
except ImportError:
|
515
594
|
import sage.all__sagemath_repl
|
516
595
|
|
@@ -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")
|
{passagemath_repl-10.5.17 → passagemath_repl-10.5.19}/sage/repl/rich_output/display_manager.py
RENAMED
@@ -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
|
-
|
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
|
@@ -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
|
38
|
+
# ****************************************************************************
|
39
|
+
from sage.combinat.set_partition import SetPartitions
|
40
40
|
|
41
41
|
|
42
42
|
def CompleteMatchings(n):
|