ipython 9.11.0__tar.gz → 9.13.0__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.
- {ipython-9.11.0 → ipython-9.13.0}/IPython/__init__.py +2 -3
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/alias.py +1 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/application.py +3 -2
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/compilerop.py +2 -2
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/completer.py +5 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/debugger.py +4 -4
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/guarded_eval.py +4 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/history.py +3 -5
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/historyapp.py +39 -41
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/inputtransformer2.py +25 -2
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/interactiveshell.py +2 -1
- ipython-9.13.0/IPython/core/kitty.py +73 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/basic.py +13 -3
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/release.py +1 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/tbtools.py +1 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/tips.py +6 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/ultratb.py +66 -27
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/interactiveshell.py +10 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/prompts.py +8 -4
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/shortcuts/filters.py +6 -6
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/decorators.py +6 -4
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/ipunittest.py +1 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/pytest_ipdoctest.py +3 -3
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/skipdoctest.py +2 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/tools.py +12 -10
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/PyColorize.py +5 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/capture.py +13 -6
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/io.py +4 -2
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/ipstruct.py +4 -3
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/path.py +5 -5
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/py3compat.py +3 -2
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/strdispatch.py +2 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/tempdir.py +8 -5
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/terminal.py +1 -1
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/tokenutil.py +2 -2
- {ipython-9.11.0/ipython.egg-info → ipython-9.13.0}/PKG-INFO +4 -2
- {ipython-9.11.0 → ipython-9.13.0}/README.rst +4 -1
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/details.rst +2 -1
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version9.rst +164 -48
- {ipython-9.11.0 → ipython-9.13.0/ipython.egg-info}/PKG-INFO +4 -2
- {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/SOURCES.txt +1 -0
- {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/requires.txt +4 -0
- {ipython-9.11.0 → ipython-9.13.0}/pyproject.toml +11 -2
- {ipython-9.11.0 → ipython-9.13.0}/setup.py +34 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_capture.py +11 -1
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_completer.py +1 -1
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_guarded_eval.py +4 -1
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_iplib.py +11 -15
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_magic.py +15 -2
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_zzz_autoreload.py +2 -0
- {ipython-9.11.0 → ipython-9.13.0}/.flake8 +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/.mailmap +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/.pre-commit-config.yaml +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/COPYING.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/__main__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/async_helpers.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/autocall.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/completerlib.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/crashhandler.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/debugger_backport.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/display.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/display_functions.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/display_trap.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/displayhook.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/displaypub.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/doctb.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/error.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/events.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/extensions.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/formatters.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/getipython.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/hooks.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/logger.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/macro.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magic.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/auto.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/code.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/config.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/display.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/execution.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/extension.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/history.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/logging.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/osm.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/script.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/oinspect.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/page.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/payload.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/payloadpage.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/prefilter.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/profileapp.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/profiledir.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/pylabtools.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/shellapp.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/splitinput.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/core/usage.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/display.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/deduperreload/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/deduperreload/deduperreload.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/external/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/external/pickleshare.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/clipboard.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/deepreload.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/demo.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/display.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/guisupport.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/latextools.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/lexers.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/pretty.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/paths.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/py.typed +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/debugger.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/embed.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/magics.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_common.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/coloransi.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/contexts.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/data.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/decorators.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/dir2.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/docs.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/encoding.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/eventful.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/frame.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/generics.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/importstring.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/log.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/module_paths.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/openpy.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/process.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/sentinel.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/text.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/timing.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/wildcard.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/LICENSE +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/MANIFEST.in +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/_build_meta.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/Makefile +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/README.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/autogen_api.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/autogen_config.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/autogen_magics.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/make.cmd +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/man/ipython.1 +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/requirements.txt +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_static/logo.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/about/history.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/about/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/api/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/conf.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/integrating.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/intro.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/options/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/coredev/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/config.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/execution.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/kernels.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/messaging.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/install/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/install/install.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/links.txt +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/overview.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/parallel/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/sphinx.toml +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/sphinxext.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version8.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/docs/sphinxext/magics.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/auto_suggest_llm.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/long_description.rst +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/scripts/ipython.ico +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/scripts/ipython_nb.ico +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/setup.cfg +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/setupbase.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/2x2.jpg +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/2x2.png +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/bad_all.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/conftest.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/fake_ext_dir/daft_extension.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/fake_llm.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/nonascii.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/nonascii2.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/print_argv.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/refbug.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/simpleerr.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/tclass.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test.wav +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_alias.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_application.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_async_helpers.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_autocall.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_backgroundjobs.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_clipboard.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_compilerop.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_completerlib.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_cve.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_debug_magic.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_debugger.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_decorators.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_decorators_2.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_deepreload.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_dir2.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_display.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_display_2.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_displayhook.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_editorhooks.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_embed.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_events.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_extension.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_formatters.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_handlers.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_help.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_history.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_hooks.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_imports.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_importstring.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_inputtransformer2.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_inputtransformer2_line.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_interactiveshell.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_interactivshell.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_io.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_ipunittest.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_latextools.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_logger.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_magic_arguments.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_magic_terminal.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_module_paths.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_oinspect.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_openpy.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_page.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_path.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_paths.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_prefilter.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_pretty.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_process.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_profile.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_pt_inputhooks.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_pycolorize.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_pylabtools.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_qt_loaders.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_run.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_shellapp.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_shortcuts.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_splitinput.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_storemagic.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_sysinfo.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_tempdir.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_text.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_tips.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_tokenutil.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_tools.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_ultratb.py +0 -0
- {ipython-9.11.0 → ipython-9.13.0}/tests/test_wildcard.py +0 -0
|
@@ -27,11 +27,10 @@ import warnings
|
|
|
27
27
|
#-----------------------------------------------------------------------------
|
|
28
28
|
|
|
29
29
|
# Don't forget to also update setup.py when this changes!
|
|
30
|
-
if sys.version_info < (3,
|
|
30
|
+
if sys.version_info < (3, 11):
|
|
31
31
|
raise ImportError(
|
|
32
32
|
"""
|
|
33
|
-
IPython 9.x supports Python 3.
|
|
34
|
-
IPython 8.31+ supports Python 3.11 and above, following SPEC0
|
|
33
|
+
IPython 9.x supports Python 3.11 and above, following SPEC0
|
|
35
34
|
IPython 8.19+ supports Python 3.10 and above, following SPEC0.
|
|
36
35
|
IPython 8.13+ supports Python 3.9 and above, following NEP 29.
|
|
37
36
|
When using Python 2.7, please install IPython 5.x LTS Long Term Support version.
|
|
@@ -33,10 +33,11 @@ from traitlets import (
|
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
if os.name == "nt":
|
|
36
|
+
# %PROGRAMDATA% is not safe by default, require opt-in to trust it
|
|
36
37
|
programdata = os.environ.get("PROGRAMDATA", None)
|
|
37
|
-
if programdata is not None:
|
|
38
|
+
if os.environ.get("IPYTHON_USE_PROGRAMDATA") == "1" and programdata is not None:
|
|
38
39
|
SYSTEM_CONFIG_DIRS = [str(Path(programdata) / "ipython")]
|
|
39
|
-
else:
|
|
40
|
+
else:
|
|
40
41
|
SYSTEM_CONFIG_DIRS = []
|
|
41
42
|
else:
|
|
42
43
|
SYSTEM_CONFIG_DIRS = [
|
|
@@ -51,7 +51,7 @@ PyCF_MASK = functools.reduce(operator.or_,
|
|
|
51
51
|
# Local utilities
|
|
52
52
|
#-----------------------------------------------------------------------------
|
|
53
53
|
|
|
54
|
-
def code_name(code, number=0):
|
|
54
|
+
def code_name(code, number=0) -> str:
|
|
55
55
|
""" Compute a (probably) unique name for code for caching.
|
|
56
56
|
|
|
57
57
|
This now expects code to be unicode.
|
|
@@ -116,7 +116,7 @@ class CachingCompiler(codeop.Compile):
|
|
|
116
116
|
"""
|
|
117
117
|
return code_name(transformed_code, number)
|
|
118
118
|
|
|
119
|
-
def format_code_name(self, name):
|
|
119
|
+
def format_code_name(self, name) -> str:
|
|
120
120
|
"""Return a user-friendly label and name for a code block.
|
|
121
121
|
|
|
122
122
|
Parameters
|
|
@@ -243,7 +243,11 @@ import __main__
|
|
|
243
243
|
|
|
244
244
|
from typing import cast
|
|
245
245
|
|
|
246
|
-
|
|
246
|
+
if sys.version_info < (3, 12):
|
|
247
|
+
from typing_extensions import TypedDict, Protocol
|
|
248
|
+
from typing import NotRequired, TypeAlias, TypeGuard
|
|
249
|
+
else:
|
|
250
|
+
from typing import TypedDict, NotRequired, Protocol, TypeAlias, TypeGuard
|
|
247
251
|
|
|
248
252
|
|
|
249
253
|
# skip module docstests
|
|
@@ -444,7 +444,7 @@ class Pdb(OldPdb):
|
|
|
444
444
|
self.message(
|
|
445
445
|
f"More than {self.MAX_CHAINED_EXCEPTION_DEPTH}"
|
|
446
446
|
" chained exceptions found, not all exceptions"
|
|
447
|
-
"will be browsable with `exceptions`."
|
|
447
|
+
" will be browsable with `exceptions`."
|
|
448
448
|
)
|
|
449
449
|
break
|
|
450
450
|
else:
|
|
@@ -874,9 +874,9 @@ class Pdb(OldPdb):
|
|
|
874
874
|
try:
|
|
875
875
|
x = eval(arg, {}, {})
|
|
876
876
|
if type(x) == type(()):
|
|
877
|
-
first, last = x
|
|
878
|
-
first = int(first)
|
|
879
|
-
last = int(last)
|
|
877
|
+
first, last = x # type: ignore[misc]
|
|
878
|
+
first = int(first) # type: ignore[call-overload]
|
|
879
|
+
last = int(last) # type: ignore[call-overload]
|
|
880
880
|
if last < first:
|
|
881
881
|
# Assume it's a count
|
|
882
882
|
last = first + last
|
|
@@ -32,7 +32,10 @@ from IPython.utils.decorators import undoc
|
|
|
32
32
|
import types
|
|
33
33
|
from typing import Self, LiteralString, get_type_hints
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
if sys.version_info < (3, 12):
|
|
36
|
+
from typing_extensions import TypeAliasType
|
|
37
|
+
else:
|
|
38
|
+
from typing import TypeAliasType
|
|
36
39
|
|
|
37
40
|
|
|
38
41
|
@undoc
|
|
@@ -10,6 +10,7 @@ import atexit
|
|
|
10
10
|
import datetime
|
|
11
11
|
import os
|
|
12
12
|
import re
|
|
13
|
+
import weakref
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
import threading
|
|
@@ -322,12 +323,14 @@ class HistoryAccessor(HistoryAccessorBase):
|
|
|
322
323
|
"""Connect to the database, and create tables if necessary."""
|
|
323
324
|
if not self.enabled:
|
|
324
325
|
self.db = DummyDB()
|
|
326
|
+
self._finalizer = weakref.finalize(self, lambda db: db.close(), self.db)
|
|
325
327
|
return
|
|
326
328
|
|
|
327
329
|
# use detect_types so that timestamps return datetime objects
|
|
328
330
|
kwargs = dict(detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
|
|
329
331
|
kwargs.update(self.connection_options)
|
|
330
332
|
self.db = sqlite3.connect(str(self.hist_file), **kwargs) # type: ignore [call-overload]
|
|
333
|
+
self._finalizer = weakref.finalize(self, lambda db: db.close(), self.db)
|
|
331
334
|
with self.db:
|
|
332
335
|
self.db.execute(
|
|
333
336
|
"""CREATE TABLE IF NOT EXISTS sessions (session integer
|
|
@@ -349,10 +352,6 @@ class HistoryAccessor(HistoryAccessorBase):
|
|
|
349
352
|
# success! reset corrupt db count
|
|
350
353
|
self._corrupt_db_counter = 0
|
|
351
354
|
|
|
352
|
-
def __del__(self) -> None:
|
|
353
|
-
if hasattr(self, "db"):
|
|
354
|
-
self.db.close()
|
|
355
|
-
|
|
356
355
|
def writeout_cache(self) -> None:
|
|
357
356
|
"""Overridden by HistoryManager to dump the cache before certain
|
|
358
357
|
database lookups."""
|
|
@@ -721,7 +720,6 @@ class HistoryManager(HistoryAccessor):
|
|
|
721
720
|
def __del__(self) -> None:
|
|
722
721
|
if self.save_thread is not None:
|
|
723
722
|
self.save_thread.stop()
|
|
724
|
-
HistoryAccessor.__del__(self)
|
|
725
723
|
|
|
726
724
|
@classmethod
|
|
727
725
|
def _stop_thread(cls) -> None:
|
|
@@ -50,27 +50,26 @@ class HistoryTrim(BaseIPythonApplication):
|
|
|
50
50
|
def start(self):
|
|
51
51
|
profile_dir = Path(self.profile_dir.location)
|
|
52
52
|
hist_file = profile_dir / "history.sqlite"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
con.close()
|
|
53
|
+
with sqlite3.connect(hist_file) as con:
|
|
54
|
+
|
|
55
|
+
# Grab the recent history from the current database.
|
|
56
|
+
inputs = list(con.execute('SELECT session, line, source, source_raw FROM '
|
|
57
|
+
'history ORDER BY session DESC, line DESC LIMIT ?', (self.keep+1,)))
|
|
58
|
+
if len(inputs) <= self.keep:
|
|
59
|
+
print("There are already at most %d entries in the history database." % self.keep)
|
|
60
|
+
print("Not doing anything. Use --keep= argument to keep fewer entries")
|
|
61
|
+
return
|
|
62
|
+
|
|
63
|
+
print("Trimming history to the most recent %d entries." % self.keep)
|
|
64
|
+
|
|
65
|
+
inputs.pop() # Remove the extra element we got to check the length.
|
|
66
|
+
inputs.reverse()
|
|
67
|
+
if inputs:
|
|
68
|
+
first_session = inputs[0][0]
|
|
69
|
+
outputs = list(con.execute('SELECT session, line, output FROM '
|
|
70
|
+
'output_history WHERE session >= ?', (first_session,)))
|
|
71
|
+
sessions = list(con.execute('SELECT session, start, end, num_cmds, remark FROM '
|
|
72
|
+
'sessions WHERE session >= ?', (first_session,)))
|
|
74
73
|
|
|
75
74
|
# Create the new history database.
|
|
76
75
|
new_hist_file = profile_dir / "history.sqlite.new"
|
|
@@ -79,26 +78,25 @@ class HistoryTrim(BaseIPythonApplication):
|
|
|
79
78
|
# Make sure we don't interfere with an existing file.
|
|
80
79
|
i += 1
|
|
81
80
|
new_hist_file = profile_dir / ("history.sqlite.new" + str(i))
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
new_db.close()
|
|
81
|
+
with sqlite3.connect(new_hist_file) as new_db:
|
|
82
|
+
new_db.execute("""CREATE TABLE IF NOT EXISTS sessions (session integer
|
|
83
|
+
primary key autoincrement, start timestamp,
|
|
84
|
+
end timestamp, num_cmds integer, remark text)""")
|
|
85
|
+
new_db.execute("""CREATE TABLE IF NOT EXISTS history
|
|
86
|
+
(session integer, line integer, source text, source_raw text,
|
|
87
|
+
PRIMARY KEY (session, line))""")
|
|
88
|
+
new_db.execute("""CREATE TABLE IF NOT EXISTS output_history
|
|
89
|
+
(session integer, line integer, output text,
|
|
90
|
+
PRIMARY KEY (session, line))""")
|
|
91
|
+
new_db.commit()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
if inputs:
|
|
95
|
+
with new_db:
|
|
96
|
+
# Add the recent history into the new database.
|
|
97
|
+
new_db.executemany('insert into sessions values (?,?,?,?,?)', sessions)
|
|
98
|
+
new_db.executemany('insert into history values (?,?,?,?)', inputs)
|
|
99
|
+
new_db.executemany('insert into output_history values (?,?,?)', outputs)
|
|
102
100
|
|
|
103
101
|
if self.backup:
|
|
104
102
|
i = 1
|
|
@@ -356,8 +356,24 @@ class MagicAssign(TokenTransformBase):
|
|
|
356
356
|
class SystemAssign(TokenTransformBase):
|
|
357
357
|
"""Transformer for assignments from system commands (a = !foo)"""
|
|
358
358
|
@classmethod
|
|
359
|
-
def
|
|
360
|
-
|
|
359
|
+
def find_pre_312(cls, tokens_by_line):
|
|
360
|
+
for line in tokens_by_line:
|
|
361
|
+
assign_ix = _find_assign_op(line)
|
|
362
|
+
if (assign_ix is not None) \
|
|
363
|
+
and not line[assign_ix].line.strip().startswith('=') \
|
|
364
|
+
and (len(line) >= assign_ix + 2) \
|
|
365
|
+
and (line[assign_ix + 1].type == tokenize.ERRORTOKEN):
|
|
366
|
+
ix = assign_ix + 1
|
|
367
|
+
|
|
368
|
+
while ix < len(line) and line[ix].type == tokenize.ERRORTOKEN:
|
|
369
|
+
if line[ix].string == '!':
|
|
370
|
+
return cls(line[ix].start)
|
|
371
|
+
elif not line[ix].string.isspace():
|
|
372
|
+
break
|
|
373
|
+
ix += 1
|
|
374
|
+
|
|
375
|
+
@classmethod
|
|
376
|
+
def find_post_312(cls, tokens_by_line):
|
|
361
377
|
for line in tokens_by_line:
|
|
362
378
|
assign_ix = _find_assign_op(line)
|
|
363
379
|
if (
|
|
@@ -369,6 +385,13 @@ class SystemAssign(TokenTransformBase):
|
|
|
369
385
|
):
|
|
370
386
|
return cls(line[assign_ix + 1].start)
|
|
371
387
|
|
|
388
|
+
@classmethod
|
|
389
|
+
def find(cls, tokens_by_line):
|
|
390
|
+
"""Find the first system assignment (a = !foo) in the cell."""
|
|
391
|
+
if sys.version_info < (3, 12):
|
|
392
|
+
return cls.find_pre_312(tokens_by_line)
|
|
393
|
+
return cls.find_post_312(tokens_by_line)
|
|
394
|
+
|
|
372
395
|
def transform(self, lines: List[str]):
|
|
373
396
|
"""Transform a system assignment found by the ``find()`` classmethod.
|
|
374
397
|
"""
|
|
@@ -2140,7 +2140,8 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
2140
2140
|
sys.last_type = etype
|
|
2141
2141
|
sys.last_value = value
|
|
2142
2142
|
sys.last_traceback = tb
|
|
2143
|
-
sys.
|
|
2143
|
+
if sys.version_info >= (3, 12):
|
|
2144
|
+
sys.last_exc = value
|
|
2144
2145
|
|
|
2145
2146
|
return etype, value, tb
|
|
2146
2147
|
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Implements https://sw.kovidgoyal.net/kitty/graphics-protocol/
|
|
2
|
+
|
|
3
|
+
from base64 import b64encode, b64decode
|
|
4
|
+
import sys
|
|
5
|
+
from typing import Union
|
|
6
|
+
|
|
7
|
+
def _supports_kitty_graphics() -> bool:
|
|
8
|
+
import platform
|
|
9
|
+
|
|
10
|
+
if platform.system() not in ("Darwin", "Linux"):
|
|
11
|
+
return False
|
|
12
|
+
|
|
13
|
+
if not sys.stdout.isatty():
|
|
14
|
+
return False
|
|
15
|
+
# Hardcoding process names instead of using
|
|
16
|
+
# https://sw.kovidgoyal.net/kitty/graphics-protocol/#querying-support-and-available-transmission-mediums
|
|
17
|
+
# to avoid startup slowdown
|
|
18
|
+
supported_terminals = {
|
|
19
|
+
"ghostty",
|
|
20
|
+
"iTerm2",
|
|
21
|
+
"kitty",
|
|
22
|
+
"konsole",
|
|
23
|
+
"warp",
|
|
24
|
+
"wayst",
|
|
25
|
+
"wezterm-gui",
|
|
26
|
+
}
|
|
27
|
+
import psutil
|
|
28
|
+
|
|
29
|
+
process = psutil.Process()
|
|
30
|
+
while process := process.parent():
|
|
31
|
+
if process.name() in supported_terminals:
|
|
32
|
+
return True
|
|
33
|
+
return False
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
supports_kitty_graphics = _supports_kitty_graphics()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def png_to_kitty_ansi(png: bytes) -> str:
|
|
40
|
+
if not png.startswith(b"\x89PNG\r\n\x1a\n"):
|
|
41
|
+
raise ValueError
|
|
42
|
+
# This simplicity resembles
|
|
43
|
+
# https://sw.kovidgoyal.net/kitty/graphics-protocol/#a-minimal-example
|
|
44
|
+
# but if we need tmux support, we can switch to Unicode like
|
|
45
|
+
# https://github.com/hzeller/timg/blob/main/src/kitty-canvas.cc
|
|
46
|
+
result = ["\033_Ga=T,f=100,", "m=1;"]
|
|
47
|
+
encoded = b64encode(png)
|
|
48
|
+
for i in range(0, len(encoded), 4096):
|
|
49
|
+
result.append(encoded[i : i + 4096].decode("ascii"))
|
|
50
|
+
result.append("\033\\")
|
|
51
|
+
result.append("\033_G")
|
|
52
|
+
result.append("m=1;")
|
|
53
|
+
del result[-2:]
|
|
54
|
+
result[-3] = "m=0;"
|
|
55
|
+
return "".join(result)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def kitty_png_render(png: Union[bytes, str], _md_dict: object) -> None:
|
|
59
|
+
if isinstance(png, str):
|
|
60
|
+
png = png_to_kitty_ansi(b64decode(png))
|
|
61
|
+
else:
|
|
62
|
+
png = png_to_kitty_ansi(png)
|
|
63
|
+
print(png)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
display_formatter_default_active_types = [
|
|
67
|
+
"text/plain",
|
|
68
|
+
*(["image/png"] if supports_kitty_graphics else []),
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
terminal_default_mime_renderers = {
|
|
72
|
+
"image/png": kitty_png_render,
|
|
73
|
+
}
|
|
@@ -346,9 +346,19 @@ Currently the magic system has the following functions:""",
|
|
|
346
346
|
|
|
347
347
|
Valid modes: Plain, Context, Verbose, Minimal, and Docs.
|
|
348
348
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
349
|
+
- ``Plain``: similar to Python's default traceback.
|
|
350
|
+
- ``Context``: shows several lines of surrounding context for each
|
|
351
|
+
frame in the traceback.
|
|
352
|
+
- ``Verbose``: like Context, but also displays local variable values
|
|
353
|
+
in each frame.
|
|
354
|
+
- ``Minimal``: shows only the exception type and message, without
|
|
355
|
+
a traceback.
|
|
356
|
+
- ``Docs``: a stripped-down version of Verbose, designed for use
|
|
357
|
+
when running doctests.
|
|
358
|
+
|
|
359
|
+
If called without arguments, cycles through the available modes.
|
|
360
|
+
|
|
361
|
+
When in verbose mode the value ``--show`` (and ``--hide``)
|
|
352
362
|
will respectively show (or hide) frames with ``__tracebackhide__ =
|
|
353
363
|
True`` value set.
|
|
354
364
|
"""
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
import os
|
|
3
|
+
import sys
|
|
3
4
|
from random import choice
|
|
4
5
|
from typing import Any
|
|
5
6
|
|
|
@@ -107,6 +108,11 @@ else:
|
|
|
107
108
|
]
|
|
108
109
|
)
|
|
109
110
|
|
|
111
|
+
if sys.version_info < (3, 12):
|
|
112
|
+
_tips["random"].append(
|
|
113
|
+
"IPython support for Python versions outside of SPEC-0 is funded by the D.E. Shaw group: https://deshaw.com"
|
|
114
|
+
)
|
|
115
|
+
|
|
110
116
|
# Check if argcomplete is installed and add tip
|
|
111
117
|
try:
|
|
112
118
|
import argcomplete
|
|
@@ -539,8 +539,13 @@ class VerboseTB(TBTools):
|
|
|
539
539
|
|
|
540
540
|
assert isinstance(frame_info.lineno, int)
|
|
541
541
|
args, varargs, varkw, locals_ = inspect.getargvalues(frame_info.frame)
|
|
542
|
+
func: str
|
|
542
543
|
if frame_info.executing is not None:
|
|
543
544
|
func = frame_info.executing.code_qualname()
|
|
545
|
+
elif frame_info.code is not None:
|
|
546
|
+
func = (
|
|
547
|
+
getattr(frame_info.code, "co_qualname", None) or frame_info.code.co_name
|
|
548
|
+
)
|
|
544
549
|
else:
|
|
545
550
|
func = "?"
|
|
546
551
|
if func == "<module>":
|
|
@@ -609,12 +614,14 @@ class VerboseTB(TBTools):
|
|
|
609
614
|
if frame_info._sd is None:
|
|
610
615
|
# fast fallback if file is too long
|
|
611
616
|
assert frame_info.filename is not None
|
|
612
|
-
level_tokens =
|
|
613
|
-
(
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
617
|
+
level_tokens = (
|
|
618
|
+
_tokens_filename(True, frame_info.filename, lineno=frame_info.lineno)
|
|
619
|
+
+ [
|
|
620
|
+
(Token, ", " if call else ""),
|
|
621
|
+
(Token, call),
|
|
622
|
+
(Token, "\n"),
|
|
623
|
+
]
|
|
624
|
+
)
|
|
618
625
|
|
|
619
626
|
_line_format = Parser(theme_name=self._theme_name).format2
|
|
620
627
|
assert isinstance(frame_info.code, types.CodeType)
|
|
@@ -810,8 +817,10 @@ class VerboseTB(TBTools):
|
|
|
810
817
|
after = context // 2
|
|
811
818
|
before = context - after
|
|
812
819
|
if self.has_colors:
|
|
813
|
-
|
|
814
|
-
|
|
820
|
+
theme = theme_table[self._theme_name]
|
|
821
|
+
base_style = theme.as_pygments_style()
|
|
822
|
+
tb_highlight = theme.extra_style.get(Token.TbHighlight, self.tb_highlight)
|
|
823
|
+
style = stack_data.style_with_executing_node(base_style, tb_highlight)
|
|
815
824
|
formatter = Terminal256Formatter(style=style)
|
|
816
825
|
else:
|
|
817
826
|
formatter = None
|
|
@@ -821,10 +830,9 @@ class VerboseTB(TBTools):
|
|
|
821
830
|
pygments_formatter=formatter,
|
|
822
831
|
)
|
|
823
832
|
|
|
824
|
-
#
|
|
833
|
+
# Collect traceback frames and their module sizes.
|
|
825
834
|
cf: Optional[TracebackType] = etb
|
|
826
|
-
|
|
827
|
-
tbs = []
|
|
835
|
+
tbs: list[tuple[TracebackType, int]] = []
|
|
828
836
|
while cf is not None:
|
|
829
837
|
try:
|
|
830
838
|
mod = inspect.getmodule(cf.tb_frame)
|
|
@@ -834,31 +842,58 @@ class VerboseTB(TBTools):
|
|
|
834
842
|
if root_name == "IPython":
|
|
835
843
|
cf = cf.tb_next
|
|
836
844
|
continue
|
|
837
|
-
|
|
838
|
-
|
|
845
|
+
frame_len = get_line_number_of_frame(cf.tb_frame)
|
|
846
|
+
if frame_len == 0:
|
|
847
|
+
# File not found or not a .py file (e.g. <string> from
|
|
848
|
+
# exec()). Check if source is actually available; if not,
|
|
849
|
+
# force the fast path so that FrameInfo's "Could not get
|
|
850
|
+
# source" fallback is rendered.
|
|
851
|
+
try:
|
|
852
|
+
inspect.getsourcelines(cf.tb_frame)
|
|
853
|
+
except OSError:
|
|
854
|
+
frame_len = FAST_THRESHOLD + 1
|
|
839
855
|
except OSError:
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
tbs.append(cf)
|
|
843
|
-
cf =
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
856
|
+
frame_len = FAST_THRESHOLD + 1
|
|
857
|
+
assert cf is not None # narrowing for mypy; guarded by while condition
|
|
858
|
+
tbs.append((cf, frame_len))
|
|
859
|
+
cf = cf.tb_next
|
|
860
|
+
|
|
861
|
+
# Group consecutive frames by fast/slow and process each group.
|
|
862
|
+
# Consecutive slow frames must be processed together so that
|
|
863
|
+
# stack_data can detect RepeatedFrames (recursion collapsing).
|
|
864
|
+
FIs: list[FrameInfo] = []
|
|
865
|
+
i = 0
|
|
866
|
+
while i < len(tbs):
|
|
867
|
+
tb, frame_len = tbs[i]
|
|
868
|
+
if frame_len > FAST_THRESHOLD:
|
|
848
869
|
frame = tb.tb_frame # type: ignore[union-attr]
|
|
849
870
|
lineno = frame.f_lineno
|
|
850
871
|
code = frame.f_code
|
|
851
872
|
filename = code.co_filename
|
|
852
|
-
# TODO: Here we need to use before/after/
|
|
853
873
|
FIs.append(
|
|
854
874
|
FrameInfo(
|
|
855
875
|
"Raw frame", filename, lineno, frame, code, context=context
|
|
856
876
|
)
|
|
857
877
|
)
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
878
|
+
i += 1
|
|
879
|
+
else:
|
|
880
|
+
# Collect the consecutive run of slow frames
|
|
881
|
+
group_start = i
|
|
882
|
+
while i < len(tbs) and tbs[i][1] <= FAST_THRESHOLD:
|
|
883
|
+
i += 1
|
|
884
|
+
# Build set of frame objects in this group for filtering
|
|
885
|
+
group_frames = {tbs[j][0].tb_frame for j in range(group_start, i)}
|
|
886
|
+
# Process via stack_data starting from the first tb in the group
|
|
887
|
+
for sd_fi in stack_data.FrameInfo.stack_data(
|
|
888
|
+
tbs[group_start][0], options=options
|
|
889
|
+
):
|
|
890
|
+
# stack_data follows tb_next through the full chain,
|
|
891
|
+
# including IPython frames we skipped during collection.
|
|
892
|
+
# Filter those out, but always keep RepeatedFrames.
|
|
893
|
+
if isinstance(sd_fi, stack_data.RepeatedFrames) or sd_fi.frame in group_frames:
|
|
894
|
+
FIs.append(FrameInfo._from_stack_data_FrameInfo(sd_fi))
|
|
895
|
+
|
|
896
|
+
return FIs
|
|
862
897
|
|
|
863
898
|
def structured_traceback(
|
|
864
899
|
self,
|
|
@@ -961,7 +996,11 @@ class VerboseTB(TBTools):
|
|
|
961
996
|
self.pdb.botframe = etb.tb_frame
|
|
962
997
|
# last_value should be deprecated, but last-exc sometimme not set
|
|
963
998
|
# please check why later and remove the getattr.
|
|
964
|
-
exc =
|
|
999
|
+
exc = (
|
|
1000
|
+
sys.last_value
|
|
1001
|
+
if sys.version_info < (3, 12)
|
|
1002
|
+
else getattr(sys, "last_exc", sys.last_value)
|
|
1003
|
+
) # type: ignore[attr-defined]
|
|
965
1004
|
if exc:
|
|
966
1005
|
self.pdb.interaction(None, exc)
|
|
967
1006
|
else:
|
|
@@ -8,6 +8,10 @@ from typing import Union as UnionType, Optional
|
|
|
8
8
|
|
|
9
9
|
from IPython.core.async_helpers import get_asyncio_loop
|
|
10
10
|
from IPython.core.interactiveshell import InteractiveShell, InteractiveShellABC
|
|
11
|
+
from IPython.core.kitty import (
|
|
12
|
+
display_formatter_default_active_types,
|
|
13
|
+
terminal_default_mime_renderers,
|
|
14
|
+
)
|
|
11
15
|
from IPython.utils.py3compat import input
|
|
12
16
|
from IPython.utils.PyColorize import theme_table
|
|
13
17
|
from IPython.utils.terminal import toggle_set_term_title, set_term_title, restore_term_title
|
|
@@ -771,7 +775,12 @@ class TerminalInteractiveShell(InteractiveShell):
|
|
|
771
775
|
"DisplayFormatter" in config
|
|
772
776
|
and "active_types" in config["DisplayFormatter"]
|
|
773
777
|
):
|
|
774
|
-
self.display_formatter.active_types =
|
|
778
|
+
self.display_formatter.active_types = display_formatter_default_active_types
|
|
779
|
+
if not (
|
|
780
|
+
"TerminalInteractiveShell" in config
|
|
781
|
+
and "mime_renderers" in config["TerminalInteractiveShell"]
|
|
782
|
+
):
|
|
783
|
+
self.mime_renderers = terminal_default_mime_renderers
|
|
775
784
|
|
|
776
785
|
def init_prompt_toolkit_cli(self):
|
|
777
786
|
if self.simple_prompt:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Terminal input and output prompts."""
|
|
2
2
|
|
|
3
|
-
from pygments.token import Token
|
|
3
|
+
from pygments.token import _TokenType, Token
|
|
4
4
|
import sys
|
|
5
5
|
|
|
6
6
|
from IPython.core.displayhook import DisplayHook
|
|
@@ -8,10 +8,14 @@ from IPython.core.displayhook import DisplayHook
|
|
|
8
8
|
from prompt_toolkit.formatted_text import fragment_list_width, PygmentsTokens
|
|
9
9
|
from prompt_toolkit.shortcuts import print_formatted_text
|
|
10
10
|
from prompt_toolkit.enums import EditingMode
|
|
11
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from IPython.terminal.interactiveshell import TerminalInteractiveShell
|
|
11
15
|
|
|
12
16
|
|
|
13
17
|
class Prompts:
|
|
14
|
-
def __init__(self, shell):
|
|
18
|
+
def __init__(self, shell: "TerminalInteractiveShell"):
|
|
15
19
|
self.shell = shell
|
|
16
20
|
|
|
17
21
|
def vi_mode(self):
|
|
@@ -84,7 +88,7 @@ class Prompts:
|
|
|
84
88
|
(Token.Prompt, ('-' * (width - 2)) + '> '),
|
|
85
89
|
]
|
|
86
90
|
|
|
87
|
-
def out_prompt_tokens(self):
|
|
91
|
+
def out_prompt_tokens(self) -> List[Tuple[_TokenType, str]]:
|
|
88
92
|
return [
|
|
89
93
|
(Token.OutPrompt, 'Out['),
|
|
90
94
|
(Token.OutPromptNum, str(self.shell.execution_count - 1)),
|
|
@@ -128,7 +132,7 @@ class RichPromptDisplayHook(DisplayHook):
|
|
|
128
132
|
else:
|
|
129
133
|
sys.stdout.write(prompt_txt)
|
|
130
134
|
|
|
131
|
-
def write_format_data(self, format_dict, md_dict=None) -> None:
|
|
135
|
+
def write_format_data(self, format_dict: Dict[str, str], md_dict: Optional[Dict[Any, Any]]=None) -> None:
|
|
132
136
|
assert self.shell is not None
|
|
133
137
|
if self.shell.mime_renderers:
|
|
134
138
|
|