ipython 8.25.0__tar.gz → 8.27.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-8.25.0 → ipython-8.27.0}/IPython/core/async_helpers.py +0 -1
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/completer.py +69 -26
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/interactiveshell.py +1 -1
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/pylab.py +1 -1
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/prefilter.py +4 -2
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/profiledir.py +32 -13
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/release.py +1 -1
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/splitinput.py +9 -2
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_autocall.py +1 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_completer.py +32 -12
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_debugger.py +63 -45
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_formatters.py +37 -22
- ipython-8.27.0/IPython/core/tests/test_handlers.py +75 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_interactiveshell.py +67 -47
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_oinspect.py +21 -11
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_prefilter.py +23 -11
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_pylabtools.py +23 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_splitinput.py +7 -5
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_ultratb.py +12 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/ultratb.py +23 -20
- {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/tests/test_autoreload.py +1 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/pretty.py +10 -2
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/interactiveshell.py +5 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/asyncio.py +1 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/decorators.py +7 -4
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_emscripten.py +0 -1
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/io.py +2 -0
- {ipython-8.25.0/ipython.egg-info → ipython-8.27.0}/PKG-INFO +2 -1
- {ipython-8.25.0 → ipython-8.27.0}/README.rst +0 -52
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/custommagics.rst +2 -2
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version8.rst +53 -0
- {ipython-8.25.0 → ipython-8.27.0/ipython.egg-info}/PKG-INFO +2 -1
- {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/requires.txt +1 -0
- {ipython-8.25.0 → ipython-8.27.0}/pyproject.toml +7 -0
- ipython-8.25.0/IPython/core/tests/test_handlers.py +0 -97
- {ipython-8.25.0 → ipython-8.27.0}/.flake8 +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/.mailmap +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/.pre-commit-config.yaml +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/COPYING.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/__main__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/conftest.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/consoleapp.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/alias.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/application.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/autocall.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/compilerop.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/completerlib.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/crashhandler.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/debugger.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/display.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/display_functions.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/display_trap.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/displayhook.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/displaypub.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/error.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/events.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/excolors.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/extensions.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/formatters.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/getipython.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/guarded_eval.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/history.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/historyapp.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/hooks.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/inputsplitter.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/inputtransformer.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/logger.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/macro.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magic.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/auto.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/basic.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/code.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/config.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/display.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/execution.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/extension.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/history.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/logging.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/osm.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/script.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/oinspect.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/page.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/payload.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/payloadpage.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/profileapp.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/prompts.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/pylabtools.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/shellapp.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/2x2.jpg +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/2x2.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/bad_all.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/nonascii.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/nonascii2.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/print_argv.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/refbug.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/simpleerr.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/tclass.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_alias.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_application.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_async_helpers.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_compilerop.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_completerlib.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_display.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_displayhook.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_events.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_extension.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_guarded_eval.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_history.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_hooks.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_imports.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_inputsplitter.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_inputtransformer.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_iplib.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_logger.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_magic.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_magic_arguments.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_magic_terminal.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_page.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_paths.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_profile.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_prompts.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_run.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_shellapp.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/core/usage.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/display.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/tests/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/tests/test_storemagic.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/external/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/external/tests/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/external/tests/test_qt_loaders.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/clipboard.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/deepreload.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/demo.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/display.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/guisupport.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/latextools.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/lexers.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test.wav +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_clipboard.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_deepreload.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_display.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_editorhooks.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_imports.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_latextools.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_lexers.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_pretty.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_pygments.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/paths.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/py.typed +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/console.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/debugger.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/embed.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/magics.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/prompts.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_embed.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_help.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/README.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tests/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tests/test_decorators.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tests/test_ipunittest.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tests/test_tools.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tools.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/tests/cve.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_common.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/capture.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/colorable.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/coloransi.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/contexts.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/daemonize.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/data.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/decorators.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/dir2.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/docs.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/encoding.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/eventful.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/frame.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/generics.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/importstring.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/localinterfaces.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/log.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/module_paths.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/openpy.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/path.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/process.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/py3compat.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/sentinel.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/shimmodule.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/signatures.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tempdir.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/terminal.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_capture.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_decorators.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_deprecated.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_dir2.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_imports.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_importstring.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_io.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_module_paths.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_openpy.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_path.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_process.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_pycolorize.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_shimmodule.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_sysinfo.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_tempdir.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_text.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_tokenutil.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_wildcard.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/text.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/timing.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/traitlets.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tz.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/ulinecache.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/version.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/wildcard.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/LICENSE +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/MANIFEST.in +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/_build_meta.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/Makefile +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/README.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/autogen_api.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/autogen_config.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/autogen_magics.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/make.cmd +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/man/ipython.1 +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/requirements.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_static/logo.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/about/history.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/about/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/api/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/conf.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/details.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/integrating.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/intro.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/options/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/coredev/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/config.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/execution.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/kernels.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/lexer.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/messaging.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/pycompat.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/install/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/install/install.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/figs/besselj.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/figs/colors_dark.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/figs/jn.html +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/figs/jn.xhtml +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/links.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/overview.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/parallel/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/sphinx.toml +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/sphinxext.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/sphinxext/github.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/docs/sphinxext/magics.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/Index.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Index.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/data/flare.json +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/Index.ipynb +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/images/FrontendKernel.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/images/animation.m4v +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/images/ipython_logo.png +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/images/python_logo.svg +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/SOURCES.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/long_description.rst +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/scripts/ipython.ico +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/scripts/ipython_nb.ico +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/setup.cfg +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/setup.py +0 -0
- {ipython-8.25.0 → ipython-8.27.0}/setupbase.py +0 -0
|
@@ -898,7 +898,7 @@ def rectify_completions(text: str, completions: _IC, *, _debug: bool = False) ->
|
|
|
898
898
|
new_text = text[new_start:c.start] + c.text + text[c.end:new_end]
|
|
899
899
|
if c._origin == 'jedi':
|
|
900
900
|
seen_jedi.add(new_text)
|
|
901
|
-
elif c._origin ==
|
|
901
|
+
elif c._origin == "IPCompleter.python_matcher":
|
|
902
902
|
seen_python_matches.add(new_text)
|
|
903
903
|
yield Completion(new_start, new_end, new_text, type=c.type, _origin=c._origin, signature=c.signature)
|
|
904
904
|
diff = seen_python_matches.difference(seen_jedi)
|
|
@@ -1139,15 +1139,18 @@ class Completer(Configurable):
|
|
|
1139
1139
|
with a __getattr__ hook is evaluated.
|
|
1140
1140
|
|
|
1141
1141
|
"""
|
|
1142
|
+
return self._attr_matches(text)[0]
|
|
1143
|
+
|
|
1144
|
+
def _attr_matches(self, text, include_prefix=True) -> Tuple[Sequence[str], str]:
|
|
1142
1145
|
m2 = re.match(r"(.+)\.(\w*)$", self.line_buffer)
|
|
1143
1146
|
if not m2:
|
|
1144
|
-
return []
|
|
1147
|
+
return [], ""
|
|
1145
1148
|
expr, attr = m2.group(1, 2)
|
|
1146
1149
|
|
|
1147
1150
|
obj = self._evaluate_expr(expr)
|
|
1148
1151
|
|
|
1149
1152
|
if obj is not_found:
|
|
1150
|
-
return []
|
|
1153
|
+
return [], ""
|
|
1151
1154
|
|
|
1152
1155
|
if self.limit_to__all__ and hasattr(obj, '__all__'):
|
|
1153
1156
|
words = get__all__entries(obj)
|
|
@@ -1170,28 +1173,36 @@ class Completer(Configurable):
|
|
|
1170
1173
|
# reconciliator would know that we intend to append to rather than
|
|
1171
1174
|
# replace the input text; this requires refactoring to return range
|
|
1172
1175
|
# which ought to be replaced (as does jedi).
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1176
|
+
if include_prefix:
|
|
1177
|
+
tokens = _parse_tokens(expr)
|
|
1178
|
+
rev_tokens = reversed(tokens)
|
|
1179
|
+
skip_over = {tokenize.ENDMARKER, tokenize.NEWLINE}
|
|
1180
|
+
name_turn = True
|
|
1181
|
+
|
|
1182
|
+
parts = []
|
|
1183
|
+
for token in rev_tokens:
|
|
1184
|
+
if token.type in skip_over:
|
|
1185
|
+
continue
|
|
1186
|
+
if token.type == tokenize.NAME and name_turn:
|
|
1187
|
+
parts.append(token.string)
|
|
1188
|
+
name_turn = False
|
|
1189
|
+
elif (
|
|
1190
|
+
token.type == tokenize.OP and token.string == "." and not name_turn
|
|
1191
|
+
):
|
|
1192
|
+
parts.append(token.string)
|
|
1193
|
+
name_turn = True
|
|
1194
|
+
else:
|
|
1195
|
+
# short-circuit if not empty nor name token
|
|
1196
|
+
break
|
|
1191
1197
|
|
|
1192
|
-
|
|
1198
|
+
prefix_after_space = "".join(reversed(parts))
|
|
1199
|
+
else:
|
|
1200
|
+
prefix_after_space = ""
|
|
1193
1201
|
|
|
1194
|
-
return
|
|
1202
|
+
return (
|
|
1203
|
+
["%s.%s" % (prefix_after_space, w) for w in words if w[:n] == attr],
|
|
1204
|
+
"." + attr,
|
|
1205
|
+
)
|
|
1195
1206
|
|
|
1196
1207
|
def _evaluate_expr(self, expr):
|
|
1197
1208
|
obj = not_found
|
|
@@ -1973,9 +1984,8 @@ class IPCompleter(Completer):
|
|
|
1973
1984
|
*self.magic_arg_matchers,
|
|
1974
1985
|
self.custom_completer_matcher,
|
|
1975
1986
|
self.dict_key_matcher,
|
|
1976
|
-
# TODO: convert python_matches to v2 API
|
|
1977
1987
|
self.magic_matcher,
|
|
1978
|
-
self.
|
|
1988
|
+
self.python_matcher,
|
|
1979
1989
|
self.file_matcher,
|
|
1980
1990
|
self.python_func_kw_matcher,
|
|
1981
1991
|
]
|
|
@@ -2316,9 +2326,42 @@ class IPCompleter(Completer):
|
|
|
2316
2326
|
else:
|
|
2317
2327
|
return iter([])
|
|
2318
2328
|
|
|
2329
|
+
@context_matcher()
|
|
2330
|
+
def python_matcher(self, context: CompletionContext) -> SimpleMatcherResult:
|
|
2331
|
+
"""Match attributes or global python names"""
|
|
2332
|
+
text = context.line_with_cursor
|
|
2333
|
+
if "." in text:
|
|
2334
|
+
try:
|
|
2335
|
+
matches, fragment = self._attr_matches(text, include_prefix=False)
|
|
2336
|
+
if text.endswith(".") and self.omit__names:
|
|
2337
|
+
if self.omit__names == 1:
|
|
2338
|
+
# true if txt is _not_ a __ name, false otherwise:
|
|
2339
|
+
no__name = lambda txt: re.match(r".*\.__.*?__", txt) is None
|
|
2340
|
+
else:
|
|
2341
|
+
# true if txt is _not_ a _ name, false otherwise:
|
|
2342
|
+
no__name = (
|
|
2343
|
+
lambda txt: re.match(r"\._.*?", txt[txt.rindex(".") :])
|
|
2344
|
+
is None
|
|
2345
|
+
)
|
|
2346
|
+
matches = filter(no__name, matches)
|
|
2347
|
+
return _convert_matcher_v1_result_to_v2(
|
|
2348
|
+
matches, type="attribute", fragment=fragment
|
|
2349
|
+
)
|
|
2350
|
+
except NameError:
|
|
2351
|
+
# catches <undefined attributes>.<tab>
|
|
2352
|
+
matches = []
|
|
2353
|
+
return _convert_matcher_v1_result_to_v2(matches, type="attribute")
|
|
2354
|
+
else:
|
|
2355
|
+
matches = self.global_matches(context.token)
|
|
2356
|
+
# TODO: maybe distinguish between functions, modules and just "variables"
|
|
2357
|
+
return _convert_matcher_v1_result_to_v2(matches, type="variable")
|
|
2358
|
+
|
|
2319
2359
|
@completion_matcher(api_version=1)
|
|
2320
2360
|
def python_matches(self, text: str) -> Iterable[str]:
|
|
2321
|
-
"""Match attributes or global python names
|
|
2361
|
+
"""Match attributes or global python names.
|
|
2362
|
+
|
|
2363
|
+
.. deprecated:: 8.27
|
|
2364
|
+
You can use :meth:`python_matcher` instead."""
|
|
2322
2365
|
if "." in text:
|
|
2323
2366
|
try:
|
|
2324
2367
|
matches = self.attr_matches(text)
|
|
@@ -2033,7 +2033,7 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
2033
2033
|
print(self.InteractiveTB.stb2text(stb))
|
|
2034
2034
|
print("The original exception:")
|
|
2035
2035
|
stb = self.InteractiveTB.structured_traceback(
|
|
2036
|
-
|
|
2036
|
+
etype, value, tb, tb_offset=tb_offset
|
|
2037
2037
|
)
|
|
2038
2038
|
return stb
|
|
2039
2039
|
|
|
@@ -100,7 +100,7 @@ class PylabMagics(Magics):
|
|
|
100
100
|
% _list_matplotlib_backends_and_gui_loops()
|
|
101
101
|
)
|
|
102
102
|
else:
|
|
103
|
-
gui, backend = self.shell.enable_matplotlib(args.gui
|
|
103
|
+
gui, backend = self.shell.enable_matplotlib(args.gui)
|
|
104
104
|
self._show_matplotlib_backend(args.gui, backend)
|
|
105
105
|
|
|
106
106
|
@skip_doctest
|
|
@@ -476,8 +476,8 @@ class PythonOpsChecker(PrefilterChecker):
|
|
|
476
476
|
any python operator, we should simply execute the line (regardless of
|
|
477
477
|
whether or not there's a possible autocall expansion). This avoids
|
|
478
478
|
spurious (and very confusing) geattr() accesses."""
|
|
479
|
-
if line_info.the_rest and line_info.the_rest[0] in
|
|
480
|
-
return self.prefilter_manager.get_handler_by_name(
|
|
479
|
+
if line_info.the_rest and line_info.the_rest[0] in "!=()<>,+*/%^&|":
|
|
480
|
+
return self.prefilter_manager.get_handler_by_name("normal")
|
|
481
481
|
else:
|
|
482
482
|
return None
|
|
483
483
|
|
|
@@ -512,6 +512,8 @@ class AutocallChecker(PrefilterChecker):
|
|
|
512
512
|
callable(oinfo.obj)
|
|
513
513
|
and (not self.exclude_regexp.match(line_info.the_rest))
|
|
514
514
|
and self.function_name_regexp.match(line_info.ifun)
|
|
515
|
+
and line_info.raw_the_rest.startswith(" ")
|
|
516
|
+
or not line_info.raw_the_rest.strip()
|
|
515
517
|
):
|
|
516
518
|
return self.prefilter_manager.get_handler_by_name("auto")
|
|
517
519
|
else:
|
|
@@ -14,6 +14,8 @@ from ..paths import get_ipython_package_dir
|
|
|
14
14
|
from ..utils.path import expand_path, ensure_dir_exists
|
|
15
15
|
from traitlets import Unicode, Bool, observe
|
|
16
16
|
|
|
17
|
+
from typing import Optional
|
|
18
|
+
|
|
17
19
|
#-----------------------------------------------------------------------------
|
|
18
20
|
# Module errors
|
|
19
21
|
#-----------------------------------------------------------------------------
|
|
@@ -68,18 +70,31 @@ class ProfileDir(LoggingConfigurable):
|
|
|
68
70
|
self.pid_dir = os.path.join(new, self.pid_dir_name)
|
|
69
71
|
self.static_dir = os.path.join(new, self.static_dir_name)
|
|
70
72
|
self.check_dirs()
|
|
71
|
-
|
|
72
|
-
def _mkdir(self, path, mode=None):
|
|
73
|
+
|
|
74
|
+
def _mkdir(self, path: str, mode: Optional[int] = None) -> bool:
|
|
73
75
|
"""ensure a directory exists at a given path
|
|
74
76
|
|
|
75
77
|
This is a version of os.mkdir, with the following differences:
|
|
76
78
|
|
|
77
|
-
- returns
|
|
79
|
+
- returns whether the directory has been created or not.
|
|
78
80
|
- ignores EEXIST, protecting against race conditions where
|
|
79
81
|
the dir may have been created in between the check and
|
|
80
82
|
the creation
|
|
81
83
|
- sets permissions if requested and the dir already exists
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
path: str
|
|
88
|
+
path of the dir to create
|
|
89
|
+
mode: int
|
|
90
|
+
see `mode` of `os.mkdir`
|
|
91
|
+
|
|
92
|
+
Returns
|
|
93
|
+
-------
|
|
94
|
+
bool:
|
|
95
|
+
returns True if it created the directory, False otherwise
|
|
82
96
|
"""
|
|
97
|
+
|
|
83
98
|
if os.path.exists(path):
|
|
84
99
|
if mode and os.stat(path).st_mode != mode:
|
|
85
100
|
try:
|
|
@@ -109,16 +124,20 @@ class ProfileDir(LoggingConfigurable):
|
|
|
109
124
|
|
|
110
125
|
@observe('startup_dir')
|
|
111
126
|
def check_startup_dir(self, change=None):
|
|
112
|
-
self._mkdir(self.startup_dir)
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
127
|
+
if self._mkdir(self.startup_dir):
|
|
128
|
+
readme = os.path.join(self.startup_dir, "README")
|
|
129
|
+
src = os.path.join(
|
|
130
|
+
get_ipython_package_dir(), "core", "profile", "README_STARTUP"
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
if os.path.exists(src):
|
|
134
|
+
if not os.path.exists(readme):
|
|
135
|
+
shutil.copy(src, readme)
|
|
136
|
+
else:
|
|
137
|
+
self.log.warning(
|
|
138
|
+
"Could not copy README_STARTUP to startup dir. Source file %s does not exist.",
|
|
139
|
+
src,
|
|
140
|
+
)
|
|
122
141
|
|
|
123
142
|
@observe('security_dir')
|
|
124
143
|
def check_security_dir(self, change=None):
|
|
@@ -76,7 +76,7 @@ def split_user_input(line, pattern=None):
|
|
|
76
76
|
|
|
77
77
|
# print('line:<%s>' % line) # dbg
|
|
78
78
|
# print('pre <%s> ifun <%s> rest <%s>' % (pre,ifun.strip(),the_rest)) # dbg
|
|
79
|
-
return pre, esc or
|
|
79
|
+
return pre, esc or "", ifun.strip(), the_rest
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
class LineInfo(object):
|
|
@@ -107,11 +107,15 @@ class LineInfo(object):
|
|
|
107
107
|
|
|
108
108
|
the_rest
|
|
109
109
|
Everything else on the line.
|
|
110
|
+
|
|
111
|
+
raw_the_rest
|
|
112
|
+
the_rest without whitespace stripped.
|
|
110
113
|
"""
|
|
111
114
|
def __init__(self, line, continue_prompt=False):
|
|
112
115
|
self.line = line
|
|
113
116
|
self.continue_prompt = continue_prompt
|
|
114
|
-
self.pre, self.esc, self.ifun, self.
|
|
117
|
+
self.pre, self.esc, self.ifun, self.raw_the_rest = split_user_input(line)
|
|
118
|
+
self.the_rest = self.raw_the_rest.lstrip()
|
|
115
119
|
|
|
116
120
|
self.pre_char = self.pre.strip()
|
|
117
121
|
if self.pre_char:
|
|
@@ -136,3 +140,6 @@ class LineInfo(object):
|
|
|
136
140
|
|
|
137
141
|
def __str__(self):
|
|
138
142
|
return "LineInfo [%s|%s|%s|%s]" %(self.pre, self.esc, self.ifun, self.the_rest)
|
|
143
|
+
|
|
144
|
+
def __repr__(self):
|
|
145
|
+
return "<" + str(self) + ">"
|
|
@@ -5,6 +5,7 @@ directory, which we are removing. For now putting this here ensures at least
|
|
|
5
5
|
we do run the test, though ultimately this functionality should all be tested
|
|
6
6
|
with better-isolated tests that don't rely on the global instance in iptest.
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from IPython.core.splitinput import LineInfo
|
|
9
10
|
from IPython.core.prefilter import AutocallChecker
|
|
10
11
|
|
|
@@ -10,6 +10,9 @@ import sys
|
|
|
10
10
|
import textwrap
|
|
11
11
|
import unittest
|
|
12
12
|
|
|
13
|
+
from importlib.metadata import version
|
|
14
|
+
|
|
15
|
+
|
|
13
16
|
from contextlib import contextmanager
|
|
14
17
|
|
|
15
18
|
from traitlets.config.loader import Config
|
|
@@ -30,6 +33,9 @@ from IPython.core.completer import (
|
|
|
30
33
|
CompletionContext,
|
|
31
34
|
)
|
|
32
35
|
|
|
36
|
+
from packaging.version import parse
|
|
37
|
+
|
|
38
|
+
|
|
33
39
|
# -----------------------------------------------------------------------------
|
|
34
40
|
# Test functions
|
|
35
41
|
# -----------------------------------------------------------------------------
|
|
@@ -456,7 +462,10 @@ class TestCompleter(unittest.TestCase):
|
|
|
456
462
|
matches = c.all_completions("TestClass.")
|
|
457
463
|
assert len(matches) > 2, (jedi_status, matches)
|
|
458
464
|
matches = c.all_completions("TestClass.a")
|
|
459
|
-
|
|
465
|
+
if jedi_status:
|
|
466
|
+
assert matches == ["TestClass.a", "TestClass.a1"], jedi_status
|
|
467
|
+
else:
|
|
468
|
+
assert matches == [".a", ".a1"], jedi_status
|
|
460
469
|
|
|
461
470
|
@pytest.mark.xfail(
|
|
462
471
|
sys.version_info.releaselevel in ("alpha",),
|
|
@@ -531,7 +540,11 @@ class TestCompleter(unittest.TestCase):
|
|
|
531
540
|
c = next(completions) # should be `%time` or similar
|
|
532
541
|
assert c.type == "magic", "Type of magic was not assigned by completer"
|
|
533
542
|
|
|
534
|
-
@pytest.mark.xfail(
|
|
543
|
+
@pytest.mark.xfail(
|
|
544
|
+
parse(version("jedi")) <= parse("0.18.0"),
|
|
545
|
+
reason="Known failure on jedi<=0.18.0",
|
|
546
|
+
strict=True,
|
|
547
|
+
)
|
|
535
548
|
def test_deduplicate_completions(self):
|
|
536
549
|
"""
|
|
537
550
|
Test that completions are correctly deduplicated (even if ranges are not the same)
|
|
@@ -584,7 +597,7 @@ class TestCompleter(unittest.TestCase):
|
|
|
584
597
|
ip.Completer.use_jedi = True
|
|
585
598
|
with provisionalcompleter():
|
|
586
599
|
completions = ip.Completer.completions(line, cursor_pos)
|
|
587
|
-
self.assertIn(completion, completions)
|
|
600
|
+
self.assertIn(completion, list(completions))
|
|
588
601
|
|
|
589
602
|
with provisionalcompleter():
|
|
590
603
|
_(
|
|
@@ -612,7 +625,7 @@ class TestCompleter(unittest.TestCase):
|
|
|
612
625
|
_(
|
|
613
626
|
"assert str.star",
|
|
614
627
|
14,
|
|
615
|
-
"
|
|
628
|
+
".startswith",
|
|
616
629
|
"Should have completed on `assert str.star`: %s",
|
|
617
630
|
Completion(11, 14, "startswith"),
|
|
618
631
|
)
|
|
@@ -623,6 +636,13 @@ class TestCompleter(unittest.TestCase):
|
|
|
623
636
|
"Should have completed on `d['a b'].str`: %s",
|
|
624
637
|
Completion(9, 12, "strip"),
|
|
625
638
|
)
|
|
639
|
+
_(
|
|
640
|
+
"a.app",
|
|
641
|
+
4,
|
|
642
|
+
".append",
|
|
643
|
+
"Should have completed on `a.app`: %s",
|
|
644
|
+
Completion(2, 4, "append"),
|
|
645
|
+
)
|
|
626
646
|
|
|
627
647
|
def test_omit__names(self):
|
|
628
648
|
# also happens to test IPCompleter as a configurable
|
|
@@ -637,8 +657,8 @@ class TestCompleter(unittest.TestCase):
|
|
|
637
657
|
with provisionalcompleter():
|
|
638
658
|
c.use_jedi = False
|
|
639
659
|
s, matches = c.complete("ip.")
|
|
640
|
-
self.assertIn("
|
|
641
|
-
self.assertIn("
|
|
660
|
+
self.assertIn(".__str__", matches)
|
|
661
|
+
self.assertIn("._hidden_attr", matches)
|
|
642
662
|
|
|
643
663
|
# c.use_jedi = True
|
|
644
664
|
# completions = set(c.completions('ip.', 3))
|
|
@@ -651,7 +671,7 @@ class TestCompleter(unittest.TestCase):
|
|
|
651
671
|
with provisionalcompleter():
|
|
652
672
|
c.use_jedi = False
|
|
653
673
|
s, matches = c.complete("ip.")
|
|
654
|
-
self.assertNotIn("
|
|
674
|
+
self.assertNotIn(".__str__", matches)
|
|
655
675
|
# self.assertIn('ip._hidden_attr', matches)
|
|
656
676
|
|
|
657
677
|
# c.use_jedi = True
|
|
@@ -665,8 +685,8 @@ class TestCompleter(unittest.TestCase):
|
|
|
665
685
|
with provisionalcompleter():
|
|
666
686
|
c.use_jedi = False
|
|
667
687
|
s, matches = c.complete("ip.")
|
|
668
|
-
self.assertNotIn("
|
|
669
|
-
self.assertNotIn("
|
|
688
|
+
self.assertNotIn(".__str__", matches)
|
|
689
|
+
self.assertNotIn("._hidden_attr", matches)
|
|
670
690
|
|
|
671
691
|
# c.use_jedi = True
|
|
672
692
|
# completions = set(c.completions('ip.', 3))
|
|
@@ -676,7 +696,7 @@ class TestCompleter(unittest.TestCase):
|
|
|
676
696
|
with provisionalcompleter():
|
|
677
697
|
c.use_jedi = False
|
|
678
698
|
s, matches = c.complete("ip._x.")
|
|
679
|
-
self.assertIn("
|
|
699
|
+
self.assertIn(".keys", matches)
|
|
680
700
|
|
|
681
701
|
# c.use_jedi = True
|
|
682
702
|
# completions = set(c.completions('ip._x.', 6))
|
|
@@ -687,7 +707,7 @@ class TestCompleter(unittest.TestCase):
|
|
|
687
707
|
|
|
688
708
|
def test_limit_to__all__False_ok(self):
|
|
689
709
|
"""
|
|
690
|
-
Limit to all is deprecated, once we remove it this test can go away.
|
|
710
|
+
Limit to all is deprecated, once we remove it this test can go away.
|
|
691
711
|
"""
|
|
692
712
|
ip = get_ipython()
|
|
693
713
|
c = ip.Completer
|
|
@@ -698,7 +718,7 @@ class TestCompleter(unittest.TestCase):
|
|
|
698
718
|
cfg.IPCompleter.limit_to__all__ = False
|
|
699
719
|
c.update_config(cfg)
|
|
700
720
|
s, matches = c.complete("d.")
|
|
701
|
-
self.assertIn("
|
|
721
|
+
self.assertIn(".x", matches)
|
|
702
722
|
|
|
703
723
|
def test_get__all__entries_ok(self):
|
|
704
724
|
class A:
|
|
@@ -59,40 +59,43 @@ def test_ipdb_magics():
|
|
|
59
59
|
|
|
60
60
|
First, set up some test functions and classes which we can inspect.
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
>>> def example_function(x, y, z="hello"):
|
|
71
|
-
... """Docstring for example_function."""
|
|
72
|
-
... pass
|
|
62
|
+
In [1]: class ExampleClass(object):
|
|
63
|
+
...: """Docstring for ExampleClass."""
|
|
64
|
+
...: def __init__(self):
|
|
65
|
+
...: """Docstring for ExampleClass.__init__"""
|
|
66
|
+
...: pass
|
|
67
|
+
...: def __str__(self):
|
|
68
|
+
...: return "ExampleClass()"
|
|
73
69
|
|
|
74
|
-
|
|
70
|
+
In [2]: def example_function(x, y, z="hello"):
|
|
71
|
+
...: """Docstring for example_function."""
|
|
72
|
+
...: pass
|
|
75
73
|
|
|
76
|
-
|
|
74
|
+
In [3]: old_trace = sys.gettrace()
|
|
77
75
|
|
|
78
|
-
|
|
79
|
-
... a = ExampleClass()
|
|
80
|
-
... debugger.Pdb().set_trace()
|
|
76
|
+
Create a function which triggers ipdb.
|
|
81
77
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
...
|
|
89
|
-
...
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
78
|
+
In [4]: def trigger_ipdb():
|
|
79
|
+
...: a = ExampleClass()
|
|
80
|
+
...: debugger.Pdb().set_trace()
|
|
81
|
+
|
|
82
|
+
Run ipdb with faked input & check output. Because of a difference between
|
|
83
|
+
Python 3.13 & older versions, the first bit of the output is inconsistent.
|
|
84
|
+
We need to use ... to accommodate that, so the examples have to use IPython
|
|
85
|
+
prompts so that ... is distinct from the Python PS2 prompt.
|
|
86
|
+
|
|
87
|
+
In [5]: with PdbTestInput([
|
|
88
|
+
...: 'pdef example_function',
|
|
89
|
+
...: 'pdoc ExampleClass',
|
|
90
|
+
...: 'up',
|
|
91
|
+
...: 'down',
|
|
92
|
+
...: 'list',
|
|
93
|
+
...: 'pinfo a',
|
|
94
|
+
...: 'll',
|
|
95
|
+
...: 'continue',
|
|
96
|
+
...: ]):
|
|
97
|
+
...: trigger_ipdb()
|
|
98
|
+
...> <doctest ...>(3)trigger_ipdb()
|
|
96
99
|
1 def trigger_ipdb():
|
|
97
100
|
2 a = ExampleClass()
|
|
98
101
|
----> 3 debugger.Pdb().set_trace()
|
|
@@ -112,8 +115,7 @@ def test_ipdb_magics():
|
|
|
112
115
|
10 ]):
|
|
113
116
|
---> 11 trigger_ipdb()
|
|
114
117
|
<BLANKLINE>
|
|
115
|
-
ipdb> down
|
|
116
|
-
None
|
|
118
|
+
ipdb> down...
|
|
117
119
|
> <doctest ...>(3)trigger_ipdb()
|
|
118
120
|
1 def trigger_ipdb():
|
|
119
121
|
2 a = ExampleClass()
|
|
@@ -136,10 +138,10 @@ def test_ipdb_magics():
|
|
|
136
138
|
----> 3 debugger.Pdb().set_trace()
|
|
137
139
|
<BLANKLINE>
|
|
138
140
|
ipdb> continue
|
|
139
|
-
|
|
140
|
-
Restore previous trace function, e.g. for coverage.py
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
|
|
142
|
+
Restore previous trace function, e.g. for coverage.py
|
|
143
|
+
|
|
144
|
+
In [6]: sys.settrace(old_trace)
|
|
143
145
|
'''
|
|
144
146
|
|
|
145
147
|
def test_ipdb_magics2():
|
|
@@ -447,6 +449,11 @@ def test_decorator_skip_disabled():
|
|
|
447
449
|
child.close()
|
|
448
450
|
|
|
449
451
|
|
|
452
|
+
@pytest.mark.xfail(
|
|
453
|
+
sys.version_info.releaselevel not in ("final", "candidate"),
|
|
454
|
+
reason="fails on 3.13.dev",
|
|
455
|
+
strict=True,
|
|
456
|
+
)
|
|
450
457
|
@pytest.mark.skipif(platform.python_implementation() == "PyPy", reason="issues on PyPy")
|
|
451
458
|
@skip_win32
|
|
452
459
|
def test_decorator_skip_with_breakpoint():
|
|
@@ -490,15 +497,26 @@ def test_decorator_skip_with_breakpoint():
|
|
|
490
497
|
child.expect_exact(line)
|
|
491
498
|
child.sendline("")
|
|
492
499
|
|
|
493
|
-
#
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
(
|
|
498
|
-
|
|
499
|
-
("
|
|
500
|
-
|
|
501
|
-
|
|
500
|
+
# From 3.13, set_trace()/breakpoint() stop on the line where they're
|
|
501
|
+
# called, instead of the next line.
|
|
502
|
+
if sys.version_info >= (3, 13):
|
|
503
|
+
child.expect_exact("--> 46 ipdb.set_trace()")
|
|
504
|
+
extra_step = [("step", "--> 47 bar(3, 4)")]
|
|
505
|
+
else:
|
|
506
|
+
child.expect_exact("--> 47 bar(3, 4)")
|
|
507
|
+
extra_step = []
|
|
508
|
+
|
|
509
|
+
for input_, expected in (
|
|
510
|
+
[
|
|
511
|
+
(f"b {name}.py:3", ""),
|
|
512
|
+
]
|
|
513
|
+
+ extra_step
|
|
514
|
+
+ [
|
|
515
|
+
("step", "1---> 3 pass # should not stop here except"),
|
|
516
|
+
("step", "---> 38 @pdb_skipped_decorator"),
|
|
517
|
+
("continue", ""),
|
|
518
|
+
]
|
|
519
|
+
):
|
|
502
520
|
child.expect("ipdb>")
|
|
503
521
|
child.sendline(input_)
|
|
504
522
|
child.expect_exact(input_)
|