ipython 9.14.1__tar.gz → 9.15.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.14.1 → ipython-9.15.0}/IPython/core/debugger.py +26 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/display.py +0 -1
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/historyapp.py +6 -3
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/interactiveshell.py +3 -3
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/kitty.py +12 -4
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/basic.py +3 -1
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/execution.py +22 -7
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/oinspect.py +4 -3
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/release.py +2 -2
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/ultratb.py +44 -2
- {ipython-9.14.1 → ipython-9.15.0}/IPython/extensions/deduperreload/deduperreload.py +5 -2
- {ipython-9.14.1 → ipython-9.15.0}/IPython/extensions/tests/test_deduperreload.py +30 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/sphinxext/ipython_directive.py +23 -1
- ipython-9.15.0/IPython/sphinxext/tests/test_ansi_stripping.py +28 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/interactiveshell.py +12 -6
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/_process_common.py +47 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/_sysinfo.py +1 -1
- ipython-9.15.0/IPython/utils/generics.py +52 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/process.py +6 -1
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/py3compat.py +1 -0
- {ipython-9.14.1/ipython.egg-info → ipython-9.15.0}/PKG-INFO +2 -2
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/coredev/index.rst +20 -62
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/install/install.rst +1 -1
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/install/kernel_install.rst +13 -25
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/plotting.rst +0 -4
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/reference.rst +1 -1
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/tutorial.rst +0 -2
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/links.txt +0 -29
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/overview.rst +4 -9
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version9.rst +148 -0
- {ipython-9.14.1 → ipython-9.15.0/ipython.egg-info}/PKG-INFO +2 -2
- {ipython-9.14.1 → ipython-9.15.0}/ipython.egg-info/SOURCES.txt +4 -0
- {ipython-9.14.1 → ipython-9.15.0}/ipython.egg-info/requires.txt +1 -1
- {ipython-9.14.1 → ipython-9.15.0}/pyproject.toml +8 -1
- ipython-9.15.0/tests/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_debugger.py +29 -0
- ipython-9.15.0/tests/test_generics.py +22 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_history.py +74 -1
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_interactiveshell.py +17 -1
- ipython-9.15.0/tests/test_ipython_directive.py +138 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_kitty.py +34 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_magic.py +1 -1
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_oinspect.py +24 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_process.py +42 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_run.py +42 -3
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_ultratb.py +33 -0
- ipython-9.14.1/IPython/utils/generics.py +0 -32
- {ipython-9.14.1 → ipython-9.15.0}/.flake8 +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/.mailmap +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/.pre-commit-config.yaml +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/COPYING.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/__main__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/alias.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/application.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/async_helpers.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/autocall.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/compilerop.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/completer.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/completerlib.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/crashhandler.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/debugger_backport.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/display_functions.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/display_trap.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/displayhook.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/displaypub.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/doctb.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/error.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/events.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/extensions.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/formatters.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/getipython.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/guarded_eval.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/history.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/hooks.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/logger.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/macro.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magic.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/auto.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/code.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/config.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/display.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/extension.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/history.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/logging.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/osm.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/magics/script.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/page.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/payload.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/payloadpage.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/prefilter.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/profileapp.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/profiledir.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/pylabtools.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/shellapp.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/splitinput.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/tbtools.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/tips.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/core/usage.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/display.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/extensions/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/extensions/deduperreload/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/external/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/external/pickleshare.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/clipboard.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/deepreload.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/demo.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/display.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/guisupport.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/latextools.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/lexers.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/lib/pretty.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/paths.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/py.typed +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-9.14.1/IPython/terminal → ipython-9.15.0/IPython/sphinxext/tests}/__init__.py +0 -0
- {ipython-9.14.1/IPython/testing/plugin → ipython-9.15.0/IPython/terminal}/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/debugger.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/embed.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/magics.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/prompts.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/decorators.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-9.14.1/IPython/utils → ipython-9.15.0/IPython/testing/plugin}/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/testing/tools.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-9.14.1/tests → ipython-9.15.0/IPython/utils}/__init__.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/capture.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/coloransi.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/contexts.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/data.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/decorators.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/dir2.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/docs.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/encoding.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/eventful.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/frame.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/importstring.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/io.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/log.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/module_paths.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/openpy.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/path.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/sentinel.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/tempdir.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/terminal.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/text.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/timing.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/IPython/utils/wildcard.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/LICENSE +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/MANIFEST.in +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/README.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/_build_meta.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/Makefile +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/README.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/autogen_api.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/autogen_config.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/autogen_magics.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/make.cmd +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/man/ipython.1 +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/requirements.txt +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_static/logo.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/about/history.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/about/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/api/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/conf.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/details.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/integrating.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/intro.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/options/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/config.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/execution.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/kernels.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/messaging.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/install/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/parallel/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/sphinx.toml +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/sphinxext.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/source/whatsnew/version8.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/docs/sphinxext/magics.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/auto_suggest_llm.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/long_description.rst +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/scripts/ipython.ico +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/scripts/ipython_nb.ico +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/setup.cfg +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/setup.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/setupbase.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/2x2.jpg +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/2x2.png +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/bad_all.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/conftest.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/fake_ext_dir/daft_extension.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/fake_llm.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/nonascii.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/nonascii2.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/print_argv.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/refbug.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/simpleerr.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/tclass.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test.wav +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_alias.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_application.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_async_helpers.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_autocall.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_backgroundjobs.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_capture.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_clipboard.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_compilerop.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_completer.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_completerlib.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_cve.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_debug_magic.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_decorators.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_decorators_2.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_deepreload.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_dir2.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_display.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_display_2.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_displayhook.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_editorhooks.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_embed.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_events.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_extension.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_formatters.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_guarded_eval.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_handlers.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_help.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_hooks.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_imports.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_importstring.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_inputtransformer2.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_inputtransformer2_line.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_interactivshell.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_io.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_iplib.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_ipunittest.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_latextools.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_logger.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_magic_arguments.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_magic_terminal.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_module_paths.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_openpy.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_page.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_path.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_paths.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_prefilter.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_pretty.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_profile.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_pt_inputhooks.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_pycolorize.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_pylabtools.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_qt_loaders.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_shellapp.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_shortcuts.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_splitinput.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_storemagic.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_sysinfo.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_tempdir.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_text.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_tips.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_tokenutil.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_tools.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_wildcard.py +0 -0
- {ipython-9.14.1 → ipython-9.15.0}/tests/test_zzz_autoreload.py +0 -0
|
@@ -494,6 +494,7 @@ class Pdb(OldPdb):
|
|
|
494
494
|
chain. Exceptions will be numbered, with the current exception indicated
|
|
495
495
|
with an arrow.
|
|
496
496
|
If given an integer as argument, switch to the exception at that index.
|
|
497
|
+
``exception`` can be used as an alias for this command.
|
|
497
498
|
"""
|
|
498
499
|
if not self._chained_exceptions:
|
|
499
500
|
self.message(
|
|
@@ -539,6 +540,18 @@ class Pdb(OldPdb):
|
|
|
539
540
|
"""
|
|
540
541
|
return self.do_exceptions(arg)
|
|
541
542
|
|
|
543
|
+
def _cmdloop(self):
|
|
544
|
+
# Override to bypass Python 3.15's _maybe_use_pyrepl_as_stdin(), which
|
|
545
|
+
# sets use_rawinput=False and conflicts with IPython's own input handling.
|
|
546
|
+
while True:
|
|
547
|
+
try:
|
|
548
|
+
self.allow_kbdint = True
|
|
549
|
+
self.cmdloop()
|
|
550
|
+
self.allow_kbdint = False
|
|
551
|
+
break
|
|
552
|
+
except KeyboardInterrupt:
|
|
553
|
+
self.message("--KeyboardInterrupt--")
|
|
554
|
+
|
|
542
555
|
def interaction(self, frame, tb_or_exc):
|
|
543
556
|
try:
|
|
544
557
|
if CHAIN_EXCEPTIONS:
|
|
@@ -620,6 +633,19 @@ class Pdb(OldPdb):
|
|
|
620
633
|
filename = frame.f_code.co_filename
|
|
621
634
|
self.shell.hooks.synchronize_with_editor(filename, lineno, 0)
|
|
622
635
|
|
|
636
|
+
def _pdbcmd_print_frame_status(self, arg):
|
|
637
|
+
"""Use print_stack_entry to print frames in Python 3.14+."""
|
|
638
|
+
if sys.version_info[:2] >= (3, 14):
|
|
639
|
+
# This is the only line changed from the base class.
|
|
640
|
+
self.print_stack_entry(self.stack[self.curindex])
|
|
641
|
+
|
|
642
|
+
# Same as in 3.14
|
|
643
|
+
self._validate_file_mtime()
|
|
644
|
+
self._show_display()
|
|
645
|
+
else:
|
|
646
|
+
# 3.13 and 3.12 don't need any changes.
|
|
647
|
+
super()._pdbcmd_print_frame_status(arg) # type: ignore[misc]
|
|
648
|
+
|
|
623
649
|
def _get_frame_locals(self, frame):
|
|
624
650
|
""" "
|
|
625
651
|
Accessing f_local of current frame reset the namespace, so we want to avoid
|
|
@@ -6,6 +6,7 @@ To be invoked as the `ipython history` subcommand.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import sqlite3
|
|
9
|
+
from contextlib import closing
|
|
9
10
|
from pathlib import Path
|
|
10
11
|
|
|
11
12
|
from traitlets.config.application import Application
|
|
@@ -50,8 +51,10 @@ class HistoryTrim(BaseIPythonApplication):
|
|
|
50
51
|
def start(self):
|
|
51
52
|
profile_dir = Path(self.profile_dir.location)
|
|
52
53
|
hist_file = profile_dir / "history.sqlite"
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
# Connections must be closed, not merely committed, before the file
|
|
55
|
+
# shuffling below: Windows refuses to unlink or rename a database
|
|
56
|
+
# that still has open handles.
|
|
57
|
+
with closing(sqlite3.connect(hist_file)) as con:
|
|
55
58
|
# Grab the recent history from the current database.
|
|
56
59
|
inputs = list(con.execute('SELECT session, line, source, source_raw FROM '
|
|
57
60
|
'history ORDER BY session DESC, line DESC LIMIT ?', (self.keep+1,)))
|
|
@@ -78,7 +81,7 @@ class HistoryTrim(BaseIPythonApplication):
|
|
|
78
81
|
# Make sure we don't interfere with an existing file.
|
|
79
82
|
i += 1
|
|
80
83
|
new_hist_file = profile_dir / ("history.sqlite.new" + str(i))
|
|
81
|
-
with sqlite3.connect(new_hist_file) as new_db:
|
|
84
|
+
with closing(sqlite3.connect(new_hist_file)) as new_db:
|
|
82
85
|
new_db.execute("""CREATE TABLE IF NOT EXISTS sessions (session integer
|
|
83
86
|
primary key autoincrement, start timestamp,
|
|
84
87
|
end timestamp, num_cmds integer, remark text)""")
|
|
@@ -579,7 +579,7 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
579
579
|
separate_out2 = SeparateUnicode('').tag(config=True)
|
|
580
580
|
wildcards_case_sensitive = Bool(True).tag(config=True)
|
|
581
581
|
xmode = CaselessStrEnum(
|
|
582
|
-
("Context", "Plain", "Verbose", "Minimal", "Docs"),
|
|
582
|
+
("Context", "Plain", "Verbose", "Minimal", "Docs", "Doctest"),
|
|
583
583
|
default_value="Context",
|
|
584
584
|
help="Switch modes for the IPython exception handlers.",
|
|
585
585
|
).tag(config=True)
|
|
@@ -2961,7 +2961,7 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
2961
2961
|
try:
|
|
2962
2962
|
with fname.open("rb"):
|
|
2963
2963
|
pass
|
|
2964
|
-
except:
|
|
2964
|
+
except OSError:
|
|
2965
2965
|
warn('Could not open file <%s> for safe execution.' % fname)
|
|
2966
2966
|
return
|
|
2967
2967
|
|
|
@@ -3019,7 +3019,7 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
3019
3019
|
try:
|
|
3020
3020
|
with fname.open("rb"):
|
|
3021
3021
|
pass
|
|
3022
|
-
except:
|
|
3022
|
+
except OSError:
|
|
3023
3023
|
warn('Could not open file <%s> for safe execution.' % fname)
|
|
3024
3024
|
return
|
|
3025
3025
|
|
|
@@ -27,10 +27,18 @@ def _supports_kitty_graphics() -> bool:
|
|
|
27
27
|
}
|
|
28
28
|
import psutil
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
try:
|
|
31
|
+
process = psutil.Process()
|
|
32
|
+
while process := process.parent():
|
|
33
|
+
if process.name() in supported_terminals:
|
|
34
|
+
return True
|
|
35
|
+
except (psutil.Error, OSError):
|
|
36
|
+
# Walking the process tree can fail when /proc is mounted with
|
|
37
|
+
# ``hidepid`` on shared multi-user systems (common on HPC clusters):
|
|
38
|
+
# ancestor processes owned by other users are inaccessible and psutil
|
|
39
|
+
# raises AccessDenied. Treat as "unsupported" rather than letting it
|
|
40
|
+
# abort the import of IPython.
|
|
41
|
+
return False
|
|
34
42
|
return False
|
|
35
43
|
|
|
36
44
|
|
|
@@ -344,7 +344,7 @@ Currently the magic system has the following functions:""",
|
|
|
344
344
|
def xmode(self, parameter_s=''):
|
|
345
345
|
"""Switch modes for the exception handlers.
|
|
346
346
|
|
|
347
|
-
Valid modes: Plain, Context, Verbose, Minimal, and
|
|
347
|
+
Valid modes: Plain, Context, Verbose, Minimal, Docs, and Doctest.
|
|
348
348
|
|
|
349
349
|
- ``Plain``: similar to Python's default traceback.
|
|
350
350
|
- ``Context``: shows several lines of surrounding context for each
|
|
@@ -355,6 +355,8 @@ Currently the magic system has the following functions:""",
|
|
|
355
355
|
a traceback.
|
|
356
356
|
- ``Docs``: a stripped-down version of Verbose, designed for use
|
|
357
357
|
when running doctests.
|
|
358
|
+
- ``Doctest``: shows only the traceback header, an ellipsis, and the
|
|
359
|
+
exception line, for easy copy-paste into Python doctests.
|
|
358
360
|
|
|
359
361
|
If called without arguments, cycles through the available modes.
|
|
360
362
|
|
|
@@ -61,6 +61,7 @@ from IPython.utils.contexts import preserve_keys
|
|
|
61
61
|
from IPython.utils.ipstruct import Struct
|
|
62
62
|
from IPython.utils.module_paths import find_mod
|
|
63
63
|
from IPython.utils.path import get_py_filename, shellglob
|
|
64
|
+
from IPython.utils.process import arg_split_with_quotes
|
|
64
65
|
from IPython.utils.timing import clock, clock2
|
|
65
66
|
from IPython.core.magics.ast_mod import ReplaceCodeTransformer
|
|
66
67
|
|
|
@@ -579,11 +580,12 @@ class ExecutionMagics(Magics):
|
|
|
579
580
|
interactive work, while giving each program a 'clean sheet' to run in.
|
|
580
581
|
|
|
581
582
|
Arguments are expanded using shell-like glob match. Patterns
|
|
582
|
-
'*', '?', '[seq]' and '[!seq]' can be used
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
583
|
+
'*', '?', '[seq]' and '[!seq]' can be used, and tilde '~' is
|
|
584
|
+
expanded to the user's home directory. As in real shells,
|
|
585
|
+
wrapping an argument in single or double quotes suppresses glob
|
|
586
|
+
expansion for that argument (see #12726). You can also use
|
|
587
|
+
*two* back slashes (e.g. ``\\\\*``) outside of quotes, or pass
|
|
588
|
+
the ``-G`` flag to disable expansion entirely.
|
|
587
589
|
|
|
588
590
|
On Windows systems, the use of single quotes `'` when specifying
|
|
589
591
|
a file is not supported. Use double quotes `"`.
|
|
@@ -760,8 +762,21 @@ class ExecutionMagics(Magics):
|
|
|
760
762
|
if 'G' in opts:
|
|
761
763
|
args = arg_lst[1:]
|
|
762
764
|
else:
|
|
763
|
-
# tilde and glob expansion
|
|
764
|
-
|
|
765
|
+
# tilde and glob expansion. Tokens that were quoted in
|
|
766
|
+
# parameter_s skip globbing so quotes suppress expansion the
|
|
767
|
+
# way they do in real shells (#12726).
|
|
768
|
+
quoted_remaining = {}
|
|
769
|
+
for tok, was_quoted in arg_split_with_quotes(parameter_s, strict=False):
|
|
770
|
+
if was_quoted:
|
|
771
|
+
quoted_remaining[tok] = quoted_remaining.get(tok, 0) + 1
|
|
772
|
+
args = []
|
|
773
|
+
for a in arg_lst[1:]:
|
|
774
|
+
a_expanded = os.path.expanduser(a)
|
|
775
|
+
if quoted_remaining.get(a, 0) > 0:
|
|
776
|
+
quoted_remaining[a] -= 1
|
|
777
|
+
args.append(a_expanded)
|
|
778
|
+
else:
|
|
779
|
+
args.extend(shellglob([a_expanded]))
|
|
765
780
|
|
|
766
781
|
sys.argv = [filename] + args # put in the proper filename
|
|
767
782
|
|
|
@@ -425,7 +425,7 @@ class Inspector(Configurable):
|
|
|
425
425
|
return None
|
|
426
426
|
try:
|
|
427
427
|
return _render_signature(signature(obj), oname)
|
|
428
|
-
except:
|
|
428
|
+
except Exception:
|
|
429
429
|
return None
|
|
430
430
|
|
|
431
431
|
def __head(self, h: str) -> str:
|
|
@@ -793,7 +793,7 @@ class Inspector(Configurable):
|
|
|
793
793
|
required_parameters = [
|
|
794
794
|
parameter
|
|
795
795
|
for parameter in inspect.signature(hook).parameters.values()
|
|
796
|
-
if parameter.default
|
|
796
|
+
if parameter.default is inspect.Parameter.empty
|
|
797
797
|
]
|
|
798
798
|
if len(required_parameters) == 1:
|
|
799
799
|
res = hook(hook_data)
|
|
@@ -886,7 +886,8 @@ class Inspector(Configurable):
|
|
|
886
886
|
prelude = ""
|
|
887
887
|
if info and info.parent is not None and hasattr(info.parent, HOOK_NAME):
|
|
888
888
|
parents_docs_dict = getattr(info.parent, HOOK_NAME)
|
|
889
|
-
|
|
889
|
+
if isinstance(parents_docs_dict, dict):
|
|
890
|
+
parents_docs = parents_docs_dict.get(att_name, None)
|
|
890
891
|
out: InfoDict = cast(
|
|
891
892
|
InfoDict,
|
|
892
893
|
{
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
# release. 'dev' as a _version_extra string means this is a development
|
|
17
17
|
# version
|
|
18
18
|
_version_major = 9
|
|
19
|
-
_version_minor =
|
|
20
|
-
_version_patch =
|
|
19
|
+
_version_minor = 15
|
|
20
|
+
_version_patch = 0
|
|
21
21
|
_version_extra = ".dev"
|
|
22
22
|
# _version_extra = "b2"
|
|
23
23
|
_version_extra = "" # Uncomment this for full releases
|
|
@@ -412,6 +412,46 @@ class ListTB(TBTools):
|
|
|
412
412
|
"""
|
|
413
413
|
return ListTB.structured_traceback(self, etype, value)
|
|
414
414
|
|
|
415
|
+
def structured_traceback_doctest(
|
|
416
|
+
self,
|
|
417
|
+
etype,
|
|
418
|
+
evalue,
|
|
419
|
+
etb=None,
|
|
420
|
+
tb_offset=None,
|
|
421
|
+
context=5,
|
|
422
|
+
):
|
|
423
|
+
"""Return a doctest-freindly traceback.
|
|
424
|
+
|
|
425
|
+
Shows only the header, an ellipsis, and the excepttion line.
|
|
426
|
+
"""
|
|
427
|
+
# Handle chained exception rule
|
|
428
|
+
if isinstance(etb, tuple):
|
|
429
|
+
etb, chained_exc_ids = etb
|
|
430
|
+
else:
|
|
431
|
+
chained_exc_ids = set()
|
|
432
|
+
|
|
433
|
+
have_traceback = etb is not None
|
|
434
|
+
|
|
435
|
+
out_list = []
|
|
436
|
+
if have_traceback:
|
|
437
|
+
out_list.append("Traceback (most recent call last):\n")
|
|
438
|
+
out_list.append(" ...\n")
|
|
439
|
+
|
|
440
|
+
lines = "".join(self._format_exception_only(etype, evalue))
|
|
441
|
+
out_list.append(lines)
|
|
442
|
+
|
|
443
|
+
# Handle chained exceptions
|
|
444
|
+
if etb is not None:
|
|
445
|
+
exception = self.get_parts_of_chained_exception(evalue)
|
|
446
|
+
if exception and (id(exception[1]) not in chained_exc_ids):
|
|
447
|
+
chained_exception_message = (self.prepare_chained_exception_message(evalue.__cause__)[0] if evalue is not None else [""])
|
|
448
|
+
etype, evalue, etb = exception
|
|
449
|
+
chained_exc_ids.add(id(exception[1]))
|
|
450
|
+
chained_tb = self.structured_traceback_doctest(etype, evalue, (etb, chained_exc_ids), 0, context)
|
|
451
|
+
out_list = chained_tb + chained_exception_message + out_list
|
|
452
|
+
|
|
453
|
+
return out_list
|
|
454
|
+
|
|
415
455
|
def show_exception_only(
|
|
416
456
|
self, etype: BaseException | None, evalue: TracebackType | None
|
|
417
457
|
) -> None:
|
|
@@ -1061,7 +1101,7 @@ class FormattedTB(VerboseTB, ListTB):
|
|
|
1061
1101
|
debugger_cls=None,
|
|
1062
1102
|
):
|
|
1063
1103
|
# NEVER change the order of this list. Put new modes at the end:
|
|
1064
|
-
self.valid_modes = ["Plain", "Context", "Verbose", "Minimal", "Docs"]
|
|
1104
|
+
self.valid_modes = ["Plain", "Context", "Verbose", "Minimal", "Docs", "Doctest"]
|
|
1065
1105
|
self.verbose_modes = self.valid_modes[1:3]
|
|
1066
1106
|
|
|
1067
1107
|
VerboseTB.__init__(
|
|
@@ -1079,7 +1119,7 @@ class FormattedTB(VerboseTB, ListTB):
|
|
|
1079
1119
|
# Different types of tracebacks are joined with different separators to
|
|
1080
1120
|
# form a single string. They are taken from this dict
|
|
1081
1121
|
self._join_chars = dict(
|
|
1082
|
-
Plain="", Context="\n", Verbose="\n", Minimal="", Docs=""
|
|
1122
|
+
Plain="", Context="\n", Verbose="\n", Minimal="", Docs="", Doctest=""
|
|
1083
1123
|
)
|
|
1084
1124
|
# set_mode also sets the tb_join_char attribute
|
|
1085
1125
|
self.set_mode(mode)
|
|
@@ -1116,6 +1156,8 @@ class FormattedTB(VerboseTB, ListTB):
|
|
|
1116
1156
|
|
|
1117
1157
|
elif mode == "Minimal":
|
|
1118
1158
|
return ListTB.get_exception_only(self, etype, evalue)
|
|
1159
|
+
elif mode == "Doctest":
|
|
1160
|
+
return ListTB.structured_traceback_doctest(self, etype, evalue, etb, tb_offset, context)
|
|
1119
1161
|
else:
|
|
1120
1162
|
# We must check the source cache because otherwise we can print
|
|
1121
1163
|
# out-of-date source code.
|
|
@@ -9,6 +9,7 @@ import pickle
|
|
|
9
9
|
import platform
|
|
10
10
|
import sys
|
|
11
11
|
import textwrap
|
|
12
|
+
import tokenize
|
|
12
13
|
from types import ModuleType
|
|
13
14
|
from typing import TYPE_CHECKING, Any, NamedTuple, cast
|
|
14
15
|
from collections.abc import Generator, Iterable
|
|
@@ -215,7 +216,9 @@ class DeduperReloader(DeduperReloaderPatchingMixin):
|
|
|
215
216
|
self.source_by_modname[new_modname] = ""
|
|
216
217
|
continue
|
|
217
218
|
try:
|
|
218
|
-
|
|
219
|
+
# tokenize.open honors PEP 263 coding cookies and defaults
|
|
220
|
+
# to utf-8, like the import system does.
|
|
221
|
+
with tokenize.open(fname) as f:
|
|
219
222
|
self.source_by_modname[new_modname] = f.read()
|
|
220
223
|
except Exception as e:
|
|
221
224
|
logger = logging.getLogger("autoreload")
|
|
@@ -552,7 +555,7 @@ class DeduperReloader(DeduperReloaderPatchingMixin):
|
|
|
552
555
|
if (fname := get_module_file_name(module)) is None:
|
|
553
556
|
return False
|
|
554
557
|
try:
|
|
555
|
-
with open(fname
|
|
558
|
+
with tokenize.open(fname) as f:
|
|
556
559
|
new_source_code = f.read()
|
|
557
560
|
except Exception as e:
|
|
558
561
|
logger = logging.getLogger("autoreload")
|
|
@@ -935,6 +935,36 @@ class AutoreloadHookSuite(ShellFixture):
|
|
|
935
935
|
mod = sys.modules[mod_name]
|
|
936
936
|
assert mod.foo(0) == 5
|
|
937
937
|
|
|
938
|
+
def test_deduperreloader_pep263_encoding(self):
|
|
939
|
+
"""Source with a non-utf-8 PEP 263 coding cookie can be read (gh-15193)."""
|
|
940
|
+
self.shell.magic_autoreload("2")
|
|
941
|
+
mod_name, mod_fn = self.get_module()
|
|
942
|
+
code_v1 = squish_text(
|
|
943
|
+
'''
|
|
944
|
+
# -*- coding: latin-1 -*-
|
|
945
|
+
CAFE = "café"
|
|
946
|
+
def foo(y):
|
|
947
|
+
return y + 3
|
|
948
|
+
'''
|
|
949
|
+
)
|
|
950
|
+
with open(mod_fn, "wb") as f:
|
|
951
|
+
f.write(code_v1.encode("latin-1"))
|
|
952
|
+
self.created_temp_modules.add(mod_name)
|
|
953
|
+
self.shell.run_code("import %s" % mod_name)
|
|
954
|
+
self.shell.run_code("pass")
|
|
955
|
+
# The latin-1 encoded source is not valid utf-8, but must still be
|
|
956
|
+
# readable for the deduper to consider the module patchable.
|
|
957
|
+
deduper = self.shell.auto_magics._reloader.deduper_reloader
|
|
958
|
+
assert deduper.source_by_modname[mod_name] != ""
|
|
959
|
+
if platform.system().lower() != "darwin":
|
|
960
|
+
time.sleep(1.05)
|
|
961
|
+
with open(mod_fn, "wb") as f:
|
|
962
|
+
f.write(code_v1.replace("y + 3", "y + 5").encode("latin-1"))
|
|
963
|
+
self.shell.run_code("pass")
|
|
964
|
+
mod = sys.modules[mod_name]
|
|
965
|
+
assert mod.foo(0) == 5
|
|
966
|
+
assert mod.CAFE == "café"
|
|
967
|
+
|
|
938
968
|
def test_super(self):
|
|
939
969
|
self.shell.magic_autoreload("2")
|
|
940
970
|
mod_name, mod_fn = self.new_module(
|
|
@@ -220,6 +220,7 @@ except Exception:
|
|
|
220
220
|
#-----------------------------------------------------------------------------
|
|
221
221
|
# for tokenizing blocks
|
|
222
222
|
COMMENT, INPUT, OUTPUT = range(3)
|
|
223
|
+
_ANSI_RE = re.compile(r"\x1b\[[0-9;]*m")
|
|
223
224
|
|
|
224
225
|
PSEUDO_DECORATORS = ["suppress", "verbatim", "savefig", "doctest"]
|
|
225
226
|
|
|
@@ -513,7 +514,7 @@ class EmbeddedSphinxShell:
|
|
|
513
514
|
|
|
514
515
|
# Fetch the processed output. (This is not the submitted output.)
|
|
515
516
|
self.cout.seek(0)
|
|
516
|
-
processed_output = self.cout.read()
|
|
517
|
+
processed_output = _ANSI_RE.sub("", self.cout.read())
|
|
517
518
|
if not is_suppress and not is_semicolon:
|
|
518
519
|
#
|
|
519
520
|
# In IPythonDirective.run, the elements of `ret` are eventually
|
|
@@ -1000,9 +1001,30 @@ class IPythonDirective(Directive):
|
|
|
1000
1001
|
store_history=False)
|
|
1001
1002
|
self.shell.clear_cout()
|
|
1002
1003
|
|
|
1004
|
+
def _is_inside_excluded_only(self):
|
|
1005
|
+
"""Return True if inside an ``only`` node whose condition is false."""
|
|
1006
|
+
try:
|
|
1007
|
+
env = self.state.document.settings.env
|
|
1008
|
+
tags = env.app.tags
|
|
1009
|
+
except AttributeError:
|
|
1010
|
+
return False
|
|
1011
|
+
|
|
1012
|
+
node = self.state.parent
|
|
1013
|
+
while node is not None:
|
|
1014
|
+
if getattr(node, 'tagname', '') == 'only':
|
|
1015
|
+
expr = node.get('expr', '')
|
|
1016
|
+
if expr and not tags.eval_condition(expr):
|
|
1017
|
+
return True
|
|
1018
|
+
node = getattr(node, 'parent', None)
|
|
1019
|
+
return False
|
|
1020
|
+
|
|
1003
1021
|
def run(self):
|
|
1004
1022
|
debug = False
|
|
1005
1023
|
|
|
1024
|
+
# gh-9339: skip execution when inside an excluded only block.
|
|
1025
|
+
if self._is_inside_excluded_only():
|
|
1026
|
+
return []
|
|
1027
|
+
|
|
1006
1028
|
#TODO, any reason block_parser can't be a method of embeddable shell
|
|
1007
1029
|
# then we wouldn't have to carry these around
|
|
1008
1030
|
rgxin, rgxout, promptin, promptout = self.setup()
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Test that ANSI escape sequences are stripped from directive output."""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
|
|
5
|
+
_ANSI_RE = re.compile(r"\x1b\[[0-9;]*m")
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_strip_ansi_basic():
|
|
9
|
+
"""ANSI color codes should be removed from output."""
|
|
10
|
+
raw = "\x1b[31mred text\x1b[0m"
|
|
11
|
+
assert _ANSI_RE.sub("", raw) == "red text"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_strip_ansi_multiple_codes():
|
|
15
|
+
"""Multiple ANSI codes in a single string should all be removed."""
|
|
16
|
+
raw = "\x1b[1m\x1b[32mbold green\x1b[0m normal \x1b[4munderline\x1b[0m"
|
|
17
|
+
assert _ANSI_RE.sub("", raw) == "bold green normal underline"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_strip_ansi_no_codes():
|
|
21
|
+
"""Strings without ANSI codes should pass through unchanged."""
|
|
22
|
+
raw = "plain output"
|
|
23
|
+
assert _ANSI_RE.sub("", raw) == "plain output"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_strip_ansi_empty():
|
|
27
|
+
"""Empty strings should remain empty."""
|
|
28
|
+
assert _ANSI_RE.sub("", "") == ""
|
|
@@ -1064,12 +1064,18 @@ class TerminalInteractiveShell(InteractiveShell):
|
|
|
1064
1064
|
gui = _convert_gui_from_matplotlib(gui)
|
|
1065
1065
|
|
|
1066
1066
|
if self.simple_prompt is True and gui is not None:
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1067
|
+
if gui == "tk":
|
|
1068
|
+
print(
|
|
1069
|
+
"Tk is supported natively when running with `--simple-prompt`; "
|
|
1070
|
+
"no event loop hook will be installed."
|
|
1071
|
+
)
|
|
1072
|
+
else:
|
|
1073
|
+
print(
|
|
1074
|
+
f'Cannot install event loop hook for "{gui}" when running with `--simple-prompt`.'
|
|
1075
|
+
)
|
|
1076
|
+
print(
|
|
1077
|
+
"NOTE: Tk is supported natively; use Tk apps and Tk backends with `--simple-prompt`."
|
|
1078
|
+
)
|
|
1073
1079
|
return
|
|
1074
1080
|
|
|
1075
1081
|
if self._inputhook is None and gui is None:
|
|
@@ -221,3 +221,50 @@ def arg_split(commandline: str, posix: bool = False, strict: bool = True) -> lis
|
|
|
221
221
|
break
|
|
222
222
|
|
|
223
223
|
return tokens
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def arg_split_with_quotes(
|
|
227
|
+
commandline: str, strict: bool = True
|
|
228
|
+
) -> list[tuple[str, bool]]:
|
|
229
|
+
"""Split a command line and report which tokens were originally quoted.
|
|
230
|
+
|
|
231
|
+
Returns a list of ``(token, was_quoted)`` pairs. ``token`` is the unquoted
|
|
232
|
+
form, as ``shlex.split(posix=True)`` returns, and ``was_quoted`` is True
|
|
233
|
+
if that token had any single- or double-quote characters in ``commandline``.
|
|
234
|
+
|
|
235
|
+
Useful for callers like ``%run`` that want to honor shell quoting when
|
|
236
|
+
deciding wether to apply further expansion (glob, tilde) to a token.
|
|
237
|
+
|
|
238
|
+
Detection is shlex-based on both passes so the quote semantics are the
|
|
239
|
+
same on Posix and Windows. If ``strict`` is False, malformed input (e.g.
|
|
240
|
+
an unbalanced quote) returns whatever was parsed so far instead of raising.
|
|
241
|
+
"""
|
|
242
|
+
def _tokenize(s: str, posix: bool) -> list[str]:
|
|
243
|
+
lex = shlex.shlex(s, posix=posix)
|
|
244
|
+
lex.whitespace_split = True
|
|
245
|
+
lex.commenters = ''
|
|
246
|
+
out = []
|
|
247
|
+
while True:
|
|
248
|
+
try:
|
|
249
|
+
out.append(next(lex))
|
|
250
|
+
except StopIteration:
|
|
251
|
+
break
|
|
252
|
+
except ValueError:
|
|
253
|
+
if strict:
|
|
254
|
+
raise
|
|
255
|
+
out.append(lex.token)
|
|
256
|
+
break
|
|
257
|
+
return out
|
|
258
|
+
|
|
259
|
+
raw_tokens = _tokenize(commandline, posix=False)
|
|
260
|
+
clean_tokens = _tokenize(commandline, posix=True)
|
|
261
|
+
|
|
262
|
+
if len(raw_tokens) != len(clean_tokens):
|
|
263
|
+
# If the two passes disagree (exotic input) report nothing as quoted
|
|
264
|
+
# so callers get the legacy, non-quote-aware behavior.
|
|
265
|
+
return [(t, False) for t in clean_tokens]
|
|
266
|
+
|
|
267
|
+
return [
|
|
268
|
+
(clean, ("'" in raw) or ('"' in raw))
|
|
269
|
+
for clean, raw in zip(clean_tokens, raw_tokens)
|
|
270
|
+
]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# GENERATED BY setup.py
|
|
2
|
-
commit = "
|
|
2
|
+
commit = "2273f39"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
"""Generic functions for extending IPython."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import warnings
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from IPython.core.error import TryNext
|
|
10
|
+
from functools import singledispatch
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@singledispatch
|
|
14
|
+
def _inspect_object(obj: Any) -> None:
|
|
15
|
+
"""Called when you do obj?
|
|
16
|
+
|
|
17
|
+
.. deprecated:: 9.15
|
|
18
|
+
`inspect_object` is deprecated and will be removed in a future
|
|
19
|
+
version. It is no longer used within IPython, so registering
|
|
20
|
+
handlers on it has no effect.
|
|
21
|
+
"""
|
|
22
|
+
raise TryNext
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def __getattr__(name: str) -> Any:
|
|
26
|
+
if name == "inspect_object":
|
|
27
|
+
warnings.warn(
|
|
28
|
+
"inspect_object is deprecated since IPython 9.15 and will be "
|
|
29
|
+
"removed in a future version. It is no longer used within "
|
|
30
|
+
"IPython, so registering handlers on it has no effect.",
|
|
31
|
+
DeprecationWarning,
|
|
32
|
+
stacklevel=2,
|
|
33
|
+
)
|
|
34
|
+
return _inspect_object
|
|
35
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@singledispatch
|
|
39
|
+
def complete_object(obj: Any, prev_completions: list[str]) -> list[str]:
|
|
40
|
+
"""Custom completer dispatching for python objects.
|
|
41
|
+
|
|
42
|
+
Parameters
|
|
43
|
+
----------
|
|
44
|
+
obj : object
|
|
45
|
+
The object to complete.
|
|
46
|
+
prev_completions : list
|
|
47
|
+
List of attributes discovered so far.
|
|
48
|
+
This should return the list of attributes in obj. If you only wish to
|
|
49
|
+
add to the attributes already discovered normally, return
|
|
50
|
+
own_attrs + prev_completions.
|
|
51
|
+
"""
|
|
52
|
+
raise TryNext
|
|
@@ -20,7 +20,12 @@ elif sys.platform == "emscripten":
|
|
|
20
20
|
else:
|
|
21
21
|
from ._process_posix import system, getoutput, arg_split, check_pid
|
|
22
22
|
|
|
23
|
-
from ._process_common import
|
|
23
|
+
from ._process_common import (
|
|
24
|
+
arg_split_with_quotes,
|
|
25
|
+
getoutputerror,
|
|
26
|
+
get_output_error_code,
|
|
27
|
+
process_handler,
|
|
28
|
+
)
|
|
24
29
|
|
|
25
30
|
|
|
26
31
|
class FindCmdError(Exception):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ipython
|
|
3
|
-
Version: 9.
|
|
3
|
+
Version: 9.15.0
|
|
4
4
|
Summary: IPython: Productive Interactive Computing
|
|
5
5
|
Author: The IPython Development Team
|
|
6
6
|
Author-email: ipython-dev@python.org
|
|
@@ -33,7 +33,7 @@ Requires-Dist: jedi>=0.18.2
|
|
|
33
33
|
Requires-Dist: matplotlib-inline>=0.1.6
|
|
34
34
|
Requires-Dist: pexpect>4.6; sys_platform != "win32" and sys_platform != "emscripten"
|
|
35
35
|
Requires-Dist: prompt_toolkit<3.1.0,>=3.0.41
|
|
36
|
-
Requires-Dist: psutil>=7; sys_platform != "emscripten"
|
|
36
|
+
Requires-Dist: psutil>=7; sys_platform != "emscripten" and sys_platform != "cygwin"
|
|
37
37
|
Requires-Dist: pygments>=2.14.0
|
|
38
38
|
Requires-Dist: stack_data>=0.6.0
|
|
39
39
|
Requires-Dist: traitlets>=5.13.0
|