ipython 9.11.0__tar.gz → 9.12.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.12.0}/IPython/core/alias.py +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/application.py +3 -2
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/compilerop.py +2 -2
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/debugger.py +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/history.py +3 -5
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/historyapp.py +39 -41
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/basic.py +13 -3
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/release.py +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/tbtools.py +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/ultratb.py +57 -24
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/prompts.py +8 -4
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/shortcuts/filters.py +6 -6
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/decorators.py +6 -4
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/ipunittest.py +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/pytest_ipdoctest.py +3 -3
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/skipdoctest.py +2 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/tools.py +12 -10
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/capture.py +8 -6
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/io.py +4 -2
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/ipstruct.py +4 -3
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/path.py +5 -5
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/py3compat.py +3 -2
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/strdispatch.py +2 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/tempdir.py +8 -5
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/terminal.py +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/tokenutil.py +2 -2
- {ipython-9.11.0/ipython.egg-info → ipython-9.12.0}/PKG-INFO +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version9.rst +57 -0
- {ipython-9.11.0 → ipython-9.12.0/ipython.egg-info}/PKG-INFO +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/pyproject.toml +3 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_completer.py +1 -1
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_iplib.py +11 -15
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_magic.py +15 -2
- {ipython-9.11.0 → ipython-9.12.0}/.flake8 +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/.mailmap +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/.pre-commit-config.yaml +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/COPYING.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/__main__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/async_helpers.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/autocall.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/completer.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/completerlib.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/crashhandler.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/debugger_backport.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/display.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/display_functions.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/display_trap.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/displayhook.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/displaypub.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/doctb.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/error.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/events.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/extensions.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/formatters.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/getipython.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/guarded_eval.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/hooks.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/interactiveshell.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/logger.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/macro.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magic.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/auto.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/code.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/config.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/display.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/execution.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/extension.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/history.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/logging.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/osm.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/script.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/oinspect.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/page.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/payload.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/payloadpage.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/prefilter.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/profileapp.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/profiledir.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/pylabtools.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/shellapp.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/splitinput.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/tips.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/core/usage.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/display.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/deduperreload/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/deduperreload/deduperreload.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/external/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/external/pickleshare.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/clipboard.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/deepreload.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/demo.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/display.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/guisupport.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/latextools.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/lexers.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/pretty.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/paths.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/py.typed +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/debugger.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/embed.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/interactiveshell.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/magics.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_common.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/coloransi.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/contexts.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/data.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/decorators.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/dir2.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/docs.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/encoding.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/eventful.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/frame.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/generics.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/importstring.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/log.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/module_paths.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/openpy.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/process.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/sentinel.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/text.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/timing.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/wildcard.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/LICENSE +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/MANIFEST.in +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/README.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/_build_meta.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/Makefile +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/README.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/autogen_api.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/autogen_config.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/autogen_magics.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/make.cmd +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/man/ipython.1 +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/requirements.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_static/logo.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/about/history.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/about/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/api/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/conf.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/details.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/integrating.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/intro.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/options/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/coredev/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/config.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/execution.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/kernels.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/messaging.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/install/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/install/install.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/links.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/overview.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/parallel/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/sphinx.toml +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/sphinxext.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version8.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/docs/sphinxext/magics.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/auto_suggest_llm.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/SOURCES.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/requires.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/long_description.rst +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/scripts/ipython.ico +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/scripts/ipython_nb.ico +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/setup.cfg +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/setup.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/setupbase.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/2x2.jpg +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/2x2.png +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/__init__.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/bad_all.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/conftest.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/fake_ext_dir/daft_extension.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/fake_llm.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/nonascii.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/nonascii2.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/print_argv.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/refbug.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/simpleerr.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/tclass.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test.wav +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_alias.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_application.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_async_helpers.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_autocall.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_backgroundjobs.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_capture.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_clipboard.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_compilerop.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_completerlib.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_cve.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_debug_magic.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_debugger.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_decorators.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_decorators_2.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_deepreload.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_dir2.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_display.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_display_2.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_displayhook.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_editorhooks.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_embed.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_events.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_extension.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_formatters.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_guarded_eval.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_handlers.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_help.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_history.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_hooks.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_imports.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_importstring.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_inputtransformer2.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_inputtransformer2_line.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_interactiveshell.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_interactivshell.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_io.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_ipunittest.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_latextools.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_logger.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_magic_arguments.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_magic_terminal.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_module_paths.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_oinspect.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_openpy.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_page.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_path.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_paths.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_prefilter.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_pretty.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_process.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_profile.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_pt_inputhooks.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_pycolorize.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_pylabtools.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_qt_loaders.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_run.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_shellapp.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_shortcuts.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_splitinput.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_storemagic.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_sysinfo.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_tempdir.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_text.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_tips.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_tokenutil.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_tools.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_ultratb.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_wildcard.py +0 -0
- {ipython-9.11.0 → ipython-9.12.0}/tests/test_zzz_autoreload.py +0 -0
|
@@ -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
|
|
@@ -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:
|
|
@@ -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
|
|
@@ -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
|
"""
|
|
@@ -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)
|
|
@@ -821,10 +828,9 @@ class VerboseTB(TBTools):
|
|
|
821
828
|
pygments_formatter=formatter,
|
|
822
829
|
)
|
|
823
830
|
|
|
824
|
-
#
|
|
831
|
+
# Collect traceback frames and their module sizes.
|
|
825
832
|
cf: Optional[TracebackType] = etb
|
|
826
|
-
|
|
827
|
-
tbs = []
|
|
833
|
+
tbs: list[tuple[TracebackType, int]] = []
|
|
828
834
|
while cf is not None:
|
|
829
835
|
try:
|
|
830
836
|
mod = inspect.getmodule(cf.tb_frame)
|
|
@@ -834,31 +840,58 @@ class VerboseTB(TBTools):
|
|
|
834
840
|
if root_name == "IPython":
|
|
835
841
|
cf = cf.tb_next
|
|
836
842
|
continue
|
|
837
|
-
|
|
838
|
-
|
|
843
|
+
frame_len = get_line_number_of_frame(cf.tb_frame)
|
|
844
|
+
if frame_len == 0:
|
|
845
|
+
# File not found or not a .py file (e.g. <string> from
|
|
846
|
+
# exec()). Check if source is actually available; if not,
|
|
847
|
+
# force the fast path so that FrameInfo's "Could not get
|
|
848
|
+
# source" fallback is rendered.
|
|
849
|
+
try:
|
|
850
|
+
inspect.getsourcelines(cf.tb_frame)
|
|
851
|
+
except OSError:
|
|
852
|
+
frame_len = FAST_THRESHOLD + 1
|
|
839
853
|
except OSError:
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
tbs.append(cf)
|
|
843
|
-
cf =
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
854
|
+
frame_len = FAST_THRESHOLD + 1
|
|
855
|
+
assert cf is not None # narrowing for mypy; guarded by while condition
|
|
856
|
+
tbs.append((cf, frame_len))
|
|
857
|
+
cf = cf.tb_next
|
|
858
|
+
|
|
859
|
+
# Group consecutive frames by fast/slow and process each group.
|
|
860
|
+
# Consecutive slow frames must be processed together so that
|
|
861
|
+
# stack_data can detect RepeatedFrames (recursion collapsing).
|
|
862
|
+
FIs: list[FrameInfo] = []
|
|
863
|
+
i = 0
|
|
864
|
+
while i < len(tbs):
|
|
865
|
+
tb, frame_len = tbs[i]
|
|
866
|
+
if frame_len > FAST_THRESHOLD:
|
|
848
867
|
frame = tb.tb_frame # type: ignore[union-attr]
|
|
849
868
|
lineno = frame.f_lineno
|
|
850
869
|
code = frame.f_code
|
|
851
870
|
filename = code.co_filename
|
|
852
|
-
# TODO: Here we need to use before/after/
|
|
853
871
|
FIs.append(
|
|
854
872
|
FrameInfo(
|
|
855
873
|
"Raw frame", filename, lineno, frame, code, context=context
|
|
856
874
|
)
|
|
857
875
|
)
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
876
|
+
i += 1
|
|
877
|
+
else:
|
|
878
|
+
# Collect the consecutive run of slow frames
|
|
879
|
+
group_start = i
|
|
880
|
+
while i < len(tbs) and tbs[i][1] <= FAST_THRESHOLD:
|
|
881
|
+
i += 1
|
|
882
|
+
# Build set of frame objects in this group for filtering
|
|
883
|
+
group_frames = {tbs[j][0].tb_frame for j in range(group_start, i)}
|
|
884
|
+
# Process via stack_data starting from the first tb in the group
|
|
885
|
+
for sd_fi in stack_data.FrameInfo.stack_data(
|
|
886
|
+
tbs[group_start][0], options=options
|
|
887
|
+
):
|
|
888
|
+
# stack_data follows tb_next through the full chain,
|
|
889
|
+
# including IPython frames we skipped during collection.
|
|
890
|
+
# Filter those out, but always keep RepeatedFrames.
|
|
891
|
+
if isinstance(sd_fi, stack_data.RepeatedFrames) or sd_fi.frame in group_frames:
|
|
892
|
+
FIs.append(FrameInfo._from_stack_data_FrameInfo(sd_fi))
|
|
893
|
+
|
|
894
|
+
return FIs
|
|
862
895
|
|
|
863
896
|
def structured_traceback(
|
|
864
897
|
self,
|
|
@@ -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
|
|
|
@@ -9,7 +9,7 @@ import ast
|
|
|
9
9
|
import re
|
|
10
10
|
import signal
|
|
11
11
|
import sys
|
|
12
|
-
from typing import Dict, Union
|
|
12
|
+
from typing import Optional, Dict, Union
|
|
13
13
|
from collections.abc import Callable
|
|
14
14
|
|
|
15
15
|
from prompt_toolkit.application.current import get_app
|
|
@@ -40,7 +40,7 @@ def cursor_in_leading_ws():
|
|
|
40
40
|
return (not before) or before.isspace()
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
def has_focus(value: FocusableElement):
|
|
43
|
+
def has_focus(value: FocusableElement) -> Condition:
|
|
44
44
|
"""Wrapper around has_focus adding a nice `__name__` to tester function"""
|
|
45
45
|
tester = has_focus_impl(value).func
|
|
46
46
|
tester.__name__ = f"is_focused({value})"
|
|
@@ -102,7 +102,7 @@ _preceding_text_cache: Dict[Union[str, Callable], Condition] = {}
|
|
|
102
102
|
_following_text_cache: Dict[Union[str, Callable], Condition] = {}
|
|
103
103
|
|
|
104
104
|
|
|
105
|
-
def preceding_text(pattern: Union[str, Callable]):
|
|
105
|
+
def preceding_text(pattern: Union[str, Callable]) -> Condition:
|
|
106
106
|
if pattern in _preceding_text_cache:
|
|
107
107
|
return _preceding_text_cache[pattern]
|
|
108
108
|
|
|
@@ -129,7 +129,7 @@ def preceding_text(pattern: Union[str, Callable]):
|
|
|
129
129
|
return condition
|
|
130
130
|
|
|
131
131
|
|
|
132
|
-
def following_text(pattern):
|
|
132
|
+
def following_text(pattern: str) -> Condition:
|
|
133
133
|
try:
|
|
134
134
|
return _following_text_cache[pattern]
|
|
135
135
|
except KeyError:
|
|
@@ -284,7 +284,7 @@ KEYBINDING_FILTERS = {
|
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
|
|
287
|
-
def eval_node(node: Union[ast.AST, None]):
|
|
287
|
+
def eval_node(node: Union[ast.AST, None]) -> Optional[Filter]:
|
|
288
288
|
if node is None:
|
|
289
289
|
return None
|
|
290
290
|
if isinstance(node, ast.Expression):
|
|
@@ -315,7 +315,7 @@ def eval_node(node: Union[ast.AST, None]):
|
|
|
315
315
|
raise ValueError("Unhandled node", ast.dump(node))
|
|
316
316
|
|
|
317
317
|
|
|
318
|
-
def filter_from_string(code: str):
|
|
318
|
+
def filter_from_string(code: str) -> Union[Condition, Filter]:
|
|
319
319
|
expression = ast.parse(code, mode="eval")
|
|
320
320
|
return eval_node(expression)
|
|
321
321
|
|
|
@@ -8,8 +8,10 @@ import pytest
|
|
|
8
8
|
|
|
9
9
|
# Expose the unittest-driven decorators
|
|
10
10
|
from .ipunittest import ipdoctest, ipdocstring
|
|
11
|
+
from _pytest.mark.structures import MarkDecorator
|
|
12
|
+
from typing import Optional
|
|
11
13
|
|
|
12
|
-
def skipif(skip_condition, msg=None):
|
|
14
|
+
def skipif(skip_condition: bool, msg: Optional[str]=None) -> MarkDecorator:
|
|
13
15
|
"""Make function raise SkipTest exception if skip_condition is true
|
|
14
16
|
|
|
15
17
|
Parameters
|
|
@@ -39,7 +41,7 @@ def skipif(skip_condition, msg=None):
|
|
|
39
41
|
|
|
40
42
|
# A version with the condition set to true, common case just to attach a message
|
|
41
43
|
# to a skip decorator
|
|
42
|
-
def skip(msg=None):
|
|
44
|
+
def skip(msg: Optional[str]=None) -> MarkDecorator:
|
|
43
45
|
"""Decorator factory - mark a test function for skipping from test suite.
|
|
44
46
|
|
|
45
47
|
Parameters
|
|
@@ -61,7 +63,7 @@ def skip(msg=None):
|
|
|
61
63
|
return skipif(True, msg)
|
|
62
64
|
|
|
63
65
|
|
|
64
|
-
def onlyif(condition, msg):
|
|
66
|
+
def onlyif(condition: bool, msg: str) -> MarkDecorator:
|
|
65
67
|
"""The reverse from skipif, see skipif for details."""
|
|
66
68
|
|
|
67
69
|
return skipif(not condition, msg)
|
|
@@ -69,7 +71,7 @@ def onlyif(condition, msg):
|
|
|
69
71
|
|
|
70
72
|
# -----------------------------------------------------------------------------
|
|
71
73
|
# Utility functions for decorators
|
|
72
|
-
def module_not_available(module):
|
|
74
|
+
def module_not_available(module: str) -> bool:
|
|
73
75
|
"""Can module be imported? Returns true if module does NOT import.
|
|
74
76
|
|
|
75
77
|
This is used to make a decorator to skip tests that require module to be
|
|
@@ -300,7 +300,7 @@ class IPDoctestItem(pytest.Item):
|
|
|
300
300
|
name: str,
|
|
301
301
|
runner: "IPDocTestRunner",
|
|
302
302
|
dtest: "doctest.DocTest",
|
|
303
|
-
):
|
|
303
|
+
) -> "IPDoctestItem":
|
|
304
304
|
# incompatible signature due to imposed limits on subclass
|
|
305
305
|
"""The public named constructor."""
|
|
306
306
|
return super().from_parent(name=name, parent=parent, runner=runner, dtest=dtest)
|
|
@@ -475,7 +475,7 @@ def _get_flag_lookup() -> Dict[str, int]:
|
|
|
475
475
|
)
|
|
476
476
|
|
|
477
477
|
|
|
478
|
-
def get_optionflags(parent):
|
|
478
|
+
def get_optionflags(parent: "IPDoctestModule") -> int:
|
|
479
479
|
optionflags_str = parent.config.getini("ipdoctest_optionflags")
|
|
480
480
|
flag_lookup_table = _get_flag_lookup()
|
|
481
481
|
flag_acc = 0
|
|
@@ -484,7 +484,7 @@ def get_optionflags(parent):
|
|
|
484
484
|
return flag_acc
|
|
485
485
|
|
|
486
486
|
|
|
487
|
-
def _get_continue_on_failure(config):
|
|
487
|
+
def _get_continue_on_failure(config: Config) -> bool:
|
|
488
488
|
continue_on_failure = config.getvalue("ipdoctest_continue_on_failure")
|
|
489
489
|
if continue_on_failure:
|
|
490
490
|
# We need to turn off this if we use pdb since we should stop at
|
|
@@ -4,12 +4,13 @@ The IPython.testing.decorators module triggers various extra imports, including
|
|
|
4
4
|
numpy and sympy if they're present. Since this decorator is used in core parts
|
|
5
5
|
of IPython, it's in a separate module so that running IPython doesn't trigger
|
|
6
6
|
those imports."""
|
|
7
|
+
from typing import Any
|
|
7
8
|
|
|
8
9
|
# Copyright (C) IPython Development Team
|
|
9
10
|
# Distributed under the terms of the Modified BSD License.
|
|
10
11
|
|
|
11
12
|
|
|
12
|
-
def skip_doctest(f):
|
|
13
|
+
def skip_doctest(f: Any) -> Any:
|
|
13
14
|
"""Decorator - mark a function or method for skipping its doctest.
|
|
14
15
|
|
|
15
16
|
This decorator allows you to mark a function whose docstring you wish to
|
|
@@ -29,6 +29,8 @@ from IPython.utils import py3compat
|
|
|
29
29
|
|
|
30
30
|
from . import decorators as dec
|
|
31
31
|
from . import skipdoctest
|
|
32
|
+
from types import TracebackType
|
|
33
|
+
from typing import List, Optional, Tuple, Type
|
|
32
34
|
|
|
33
35
|
|
|
34
36
|
# The docstring for full_path doctests differently on win32 (different path
|
|
@@ -67,7 +69,7 @@ def full_path(startPath: str, files: list[str]) -> list[str]:
|
|
|
67
69
|
return [ os.path.join(base,f) for f in files ]
|
|
68
70
|
|
|
69
71
|
|
|
70
|
-
def parse_test_output(txt):
|
|
72
|
+
def parse_test_output(txt: str) -> Tuple[int, int]:
|
|
71
73
|
"""Parse the output of a test run and return errors, failures.
|
|
72
74
|
|
|
73
75
|
Parameters
|
|
@@ -113,7 +115,7 @@ def parse_test_output(txt):
|
|
|
113
115
|
parse_test_output.__test__ = False
|
|
114
116
|
|
|
115
117
|
|
|
116
|
-
def default_argv():
|
|
118
|
+
def default_argv() -> List[str]:
|
|
117
119
|
"""Return a valid default argv for creating testing instances of ipython"""
|
|
118
120
|
|
|
119
121
|
return [
|
|
@@ -126,7 +128,7 @@ def default_argv():
|
|
|
126
128
|
]
|
|
127
129
|
|
|
128
130
|
|
|
129
|
-
def default_config():
|
|
131
|
+
def default_config() -> Config:
|
|
130
132
|
"""Return a config object with good defaults for testing."""
|
|
131
133
|
config = Config()
|
|
132
134
|
config.TerminalInteractiveShell.colors = "nocolor"
|
|
@@ -139,7 +141,7 @@ def default_config():
|
|
|
139
141
|
return config
|
|
140
142
|
|
|
141
143
|
|
|
142
|
-
def get_ipython_cmd(as_string=False):
|
|
144
|
+
def get_ipython_cmd(as_string: bool=False) -> List[str]:
|
|
143
145
|
"""
|
|
144
146
|
Return appropriate IPython command line name. By default, this will return
|
|
145
147
|
a list that can be used with subprocess.Popen, for example, but passing
|
|
@@ -157,7 +159,7 @@ def get_ipython_cmd(as_string=False):
|
|
|
157
159
|
|
|
158
160
|
return ipython_cmd
|
|
159
161
|
|
|
160
|
-
def ipexec(fname, options=None, commands=()):
|
|
162
|
+
def ipexec(fname: str, options: Optional[List[str]]=None, commands: Tuple[str, ...]=()) -> Tuple[str, str]:
|
|
161
163
|
"""Utility to call 'ipython filename'.
|
|
162
164
|
|
|
163
165
|
Starts IPython with a minimal and safe configuration to make startup as fast
|
|
@@ -215,8 +217,8 @@ def ipexec(fname, options=None, commands=()):
|
|
|
215
217
|
return out, err
|
|
216
218
|
|
|
217
219
|
|
|
218
|
-
def ipexec_validate(fname, expected_out, expected_err='',
|
|
219
|
-
options=None, commands=()):
|
|
220
|
+
def ipexec_validate(fname: str, expected_out: str, expected_err: str='',
|
|
221
|
+
options: Optional[List[str]]=None, commands: Tuple[str, ...]=()):
|
|
220
222
|
"""Utility to call 'ipython filename' and validate output/error.
|
|
221
223
|
|
|
222
224
|
This function raises an AssertionError if the validation fails.
|
|
@@ -267,7 +269,7 @@ class TempFileMixin(unittest.TestCase):
|
|
|
267
269
|
|
|
268
270
|
Meant as a mixin class for test cases."""
|
|
269
271
|
|
|
270
|
-
def mktmp(self, src, ext='.py'):
|
|
272
|
+
def mktmp(self, src: str, ext: str='.py'):
|
|
271
273
|
"""Make a valid python temp file."""
|
|
272
274
|
fname = temp_pyfile(src, ext)
|
|
273
275
|
if not hasattr(self, 'tmps'):
|
|
@@ -318,7 +320,7 @@ class AssertPrints:
|
|
|
318
320
|
abcd
|
|
319
321
|
def
|
|
320
322
|
"""
|
|
321
|
-
def __init__(self, s, channel='stdout', suppress=True):
|
|
323
|
+
def __init__(self, s: str, channel: str='stdout', suppress: bool=True):
|
|
322
324
|
self.s = s
|
|
323
325
|
if isinstance(self.s, (str, _re_type)):
|
|
324
326
|
self.s = [self.s]
|
|
@@ -331,7 +333,7 @@ class AssertPrints:
|
|
|
331
333
|
self.tee = Tee(self.buffer, channel=self.channel)
|
|
332
334
|
setattr(sys, self.channel, self.buffer if self.suppress else self.tee)
|
|
333
335
|
|
|
334
|
-
def __exit__(self, etype, value, traceback):
|
|
336
|
+
def __exit__(self, etype: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[TracebackType]):
|
|
335
337
|
__tracebackhide__ = True
|
|
336
338
|
|
|
337
339
|
try:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# GENERATED BY setup.py
|
|
2
|
-
commit = "
|
|
2
|
+
commit = "d9c6e31"
|