ipython 8.27.0__tar.gz → 8.29.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.27.0 → ipython-8.29.0}/IPython/core/completer.py +2 -2
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/completerlib.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/debugger.py +28 -5
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/display.py +101 -21
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/guarded_eval.py +4 -4
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/inputsplitter.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/interactiveshell.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/ast_mod.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/code.py +3 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/execution.py +15 -5
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/packaging.py +32 -2
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/oinspect.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/page.py +2 -2
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/prefilter.py +4 -2
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/pylabtools.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/release.py +5 -14
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_completer.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_display.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_interactiveshell.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_prefilter.py +10 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_run.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_ultratb.py +3 -3
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/ultratb.py +4 -4
- {ipython-8.27.0 → ipython-8.29.0}/IPython/external/qt_loaders.py +14 -2
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/pretty.py +11 -4
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/shortcuts/auto_suggest.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/shortcuts/filters.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tests/test_tools.py +2 -2
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tools.py +3 -8
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/frame.py +5 -3
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/terminal.py +7 -1
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_path.py +85 -88
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/text.py +95 -37
- {ipython-8.27.0/ipython.egg-info → ipython-8.29.0}/PKG-INFO +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/conf.py +1 -2
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/tutorial.rst +1 -2
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.9.rst +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version7.rst +7 -7
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version8.rst +106 -13
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +1 -1
- {ipython-8.27.0 → ipython-8.29.0/ipython.egg-info}/PKG-INFO +1 -1
- {ipython-8.27.0 → ipython-8.29.0}/pyproject.toml +11 -1
- {ipython-8.27.0 → ipython-8.29.0}/setupbase.py +29 -43
- {ipython-8.27.0 → ipython-8.29.0}/.flake8 +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/.mailmap +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/.pre-commit-config.yaml +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/COPYING.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/__main__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/conftest.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/consoleapp.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/alias.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/application.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/async_helpers.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/autocall.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/compilerop.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/crashhandler.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/display_functions.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/display_trap.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/displayhook.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/displaypub.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/error.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/events.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/excolors.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/extensions.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/formatters.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/getipython.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/history.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/historyapp.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/hooks.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/inputtransformer.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/logger.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/macro.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magic.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/auto.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/basic.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/config.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/display.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/extension.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/history.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/logging.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/osm.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/script.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/payload.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/payloadpage.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/profileapp.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/profiledir.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/prompts.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/shellapp.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/splitinput.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/2x2.jpg +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/2x2.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/bad_all.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/nonascii.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/nonascii2.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/print_argv.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/refbug.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/simpleerr.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/tclass.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_alias.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_application.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_async_helpers.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_autocall.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_compilerop.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_completerlib.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_debugger.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_displayhook.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_events.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_extension.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_formatters.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_guarded_eval.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_handlers.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_history.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_hooks.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_imports.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_inputsplitter.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_inputtransformer.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_iplib.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_logger.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_magic.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_magic_arguments.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_magic_terminal.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_oinspect.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_page.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_paths.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_profile.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_prompts.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_pylabtools.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_shellapp.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_splitinput.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/core/usage.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/display.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/tests/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/tests/test_autoreload.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/tests/test_storemagic.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/external/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/external/tests/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/external/tests/test_qt_loaders.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/clipboard.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/deepreload.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/demo.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/display.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/guisupport.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/latextools.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/lexers.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test.wav +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_clipboard.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_deepreload.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_display.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_editorhooks.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_imports.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_latextools.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_lexers.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_pretty.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_pygments.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/paths.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/py.typed +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/console.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/debugger.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/embed.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/interactiveshell.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/magics.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/prompts.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_embed.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_help.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/decorators.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/README.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tests/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tests/test_decorators.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tests/test_ipunittest.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/tests/cve.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_common.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/capture.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/colorable.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/coloransi.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/contexts.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/daemonize.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/data.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/decorators.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/dir2.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/docs.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/encoding.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/eventful.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/generics.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/importstring.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/io.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/localinterfaces.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/log.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/module_paths.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/openpy.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/path.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/process.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/py3compat.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/sentinel.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/shimmodule.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/signatures.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tempdir.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_capture.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_decorators.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_deprecated.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_dir2.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_imports.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_importstring.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_io.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_module_paths.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_openpy.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_process.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_pycolorize.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_shimmodule.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_sysinfo.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_tempdir.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_text.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_tokenutil.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_wildcard.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/timing.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/traitlets.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tz.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/ulinecache.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/version.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/wildcard.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/LICENSE +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/MANIFEST.in +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/README.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/_build_meta.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/Makefile +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/README.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/autogen_api.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/autogen_config.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/autogen_magics.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/make.cmd +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/man/ipython.1 +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/requirements.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_static/logo.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/about/history.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/about/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/api/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/details.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/integrating.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/intro.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/options/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/coredev/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/config.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/execution.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/kernels.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/lexer.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/messaging.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/pycompat.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/install/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/install/install.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/figs/besselj.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/figs/colors_dark.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/figs/jn.html +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/figs/jn.xhtml +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/links.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/overview.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/parallel/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/sphinx.toml +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/sphinxext.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/sphinxext/github.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/docs/sphinxext/magics.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/Index.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Index.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/data/flare.json +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/Index.ipynb +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/images/FrontendKernel.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/images/animation.m4v +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/images/ipython_logo.png +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/images/python_logo.svg +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/SOURCES.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/requires.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/long_description.rst +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/scripts/ipython.ico +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/scripts/ipython_nb.ico +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/setup.cfg +0 -0
- {ipython-8.27.0 → ipython-8.29.0}/setup.py +0 -0
|
@@ -159,7 +159,7 @@ By default results from all matchers are combined, in the order determined by
|
|
|
159
159
|
their priority. Matchers can request to suppress results from subsequent
|
|
160
160
|
matchers by setting ``suppress`` to ``True`` in the ``MatcherResult``.
|
|
161
161
|
|
|
162
|
-
When multiple matchers simultaneously request
|
|
162
|
+
When multiple matchers simultaneously request suppression, the results from of
|
|
163
163
|
the matcher with higher priority will be returned.
|
|
164
164
|
|
|
165
165
|
Sometimes it is desirable to suppress most but not all other matchers;
|
|
@@ -2651,7 +2651,7 @@ class IPCompleter(Completer):
|
|
|
2651
2651
|
)
|
|
2652
2652
|
can_close_quote = can_close_quote and self.auto_close_dict_keys
|
|
2653
2653
|
|
|
2654
|
-
# fast path if closing
|
|
2654
|
+
# fast path if closing quote should be appended but not suffix is allowed
|
|
2655
2655
|
if not can_close_quote and not can_close_bracket and closing_quote:
|
|
2656
2656
|
return [leading + k for k in matches]
|
|
2657
2657
|
|
|
@@ -167,7 +167,7 @@ def is_possible_submodule(module, attr):
|
|
|
167
167
|
try:
|
|
168
168
|
obj = getattr(module, attr)
|
|
169
169
|
except AttributeError:
|
|
170
|
-
# Is
|
|
170
|
+
# Is possibly an unimported submodule
|
|
171
171
|
return True
|
|
172
172
|
except TypeError:
|
|
173
173
|
# https://github.com/ipython/ipython/issues/9678
|
|
@@ -14,14 +14,35 @@ Among other things, this subclass of PDB:
|
|
|
14
14
|
- hide frames in tracebacks based on `__tracebackhide__`
|
|
15
15
|
- allows to skip frames based on `__debuggerskip__`
|
|
16
16
|
|
|
17
|
+
|
|
18
|
+
Global Configuration
|
|
19
|
+
--------------------
|
|
20
|
+
|
|
21
|
+
The IPython debugger will by read the global ``~/.pdbrc`` file.
|
|
22
|
+
That is to say you can list all commands supported by ipdb in your `~/.pdbrc`
|
|
23
|
+
configuration file, to globally configure pdb.
|
|
24
|
+
|
|
25
|
+
Example::
|
|
26
|
+
|
|
27
|
+
# ~/.pdbrc
|
|
28
|
+
skip_predicates debuggerskip false
|
|
29
|
+
skip_hidden false
|
|
30
|
+
context 25
|
|
31
|
+
|
|
32
|
+
Features
|
|
33
|
+
--------
|
|
34
|
+
|
|
35
|
+
The IPython debugger can hide and skip frames when printing or moving through
|
|
36
|
+
the stack. This can have a performance impact, so can be configures.
|
|
37
|
+
|
|
17
38
|
The skipping and hiding frames are configurable via the `skip_predicates`
|
|
18
39
|
command.
|
|
19
40
|
|
|
20
41
|
By default, frames from readonly files will be hidden, frames containing
|
|
21
|
-
``__tracebackhide__=True`` will be hidden.
|
|
42
|
+
``__tracebackhide__ = True`` will be hidden.
|
|
22
43
|
|
|
23
|
-
Frames containing ``__debuggerskip__`` will be stepped over, frames
|
|
24
|
-
frames value of ``__debuggerskip__`` is ``True`` will be skipped.
|
|
44
|
+
Frames containing ``__debuggerskip__`` will be stepped over, frames whose parent
|
|
45
|
+
frames value of ``__debuggerskip__`` is ``True`` will also be skipped.
|
|
25
46
|
|
|
26
47
|
>>> def helpers_helper():
|
|
27
48
|
... pass
|
|
@@ -156,7 +177,7 @@ def BdbQuit_excepthook(et, ev, tb, excepthook=None):
|
|
|
156
177
|
parameter.
|
|
157
178
|
"""
|
|
158
179
|
raise ValueError(
|
|
159
|
-
"`BdbQuit_excepthook` is deprecated since version 5.1. It is still
|
|
180
|
+
"`BdbQuit_excepthook` is deprecated since version 5.1. It is still around only because it is still imported by ipdb.",
|
|
160
181
|
)
|
|
161
182
|
|
|
162
183
|
|
|
@@ -1070,7 +1091,9 @@ class Pdb(OldPdb):
|
|
|
1070
1091
|
raise ValueError()
|
|
1071
1092
|
self.context = new_context
|
|
1072
1093
|
except ValueError:
|
|
1073
|
-
self.error(
|
|
1094
|
+
self.error(
|
|
1095
|
+
f"The 'context' command requires a positive integer argument (current value {self.context})."
|
|
1096
|
+
)
|
|
1074
1097
|
|
|
1075
1098
|
|
|
1076
1099
|
class InterruptiblePdb(Pdb):
|
|
@@ -21,13 +21,35 @@ from IPython.testing.skipdoctest import skip_doctest
|
|
|
21
21
|
from . import display_functions
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
__all__ = [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
__all__ = [
|
|
25
|
+
"display_pretty",
|
|
26
|
+
"display_html",
|
|
27
|
+
"display_markdown",
|
|
28
|
+
"display_svg",
|
|
29
|
+
"display_png",
|
|
30
|
+
"display_jpeg",
|
|
31
|
+
"display_webp",
|
|
32
|
+
"display_latex",
|
|
33
|
+
"display_json",
|
|
34
|
+
"display_javascript",
|
|
35
|
+
"display_pdf",
|
|
36
|
+
"DisplayObject",
|
|
37
|
+
"TextDisplayObject",
|
|
38
|
+
"Pretty",
|
|
39
|
+
"HTML",
|
|
40
|
+
"Markdown",
|
|
41
|
+
"Math",
|
|
42
|
+
"Latex",
|
|
43
|
+
"SVG",
|
|
44
|
+
"ProgressBar",
|
|
45
|
+
"JSON",
|
|
46
|
+
"GeoJSON",
|
|
47
|
+
"Javascript",
|
|
48
|
+
"Image",
|
|
49
|
+
"set_matplotlib_formats",
|
|
50
|
+
"set_matplotlib_close",
|
|
51
|
+
"Video",
|
|
52
|
+
]
|
|
31
53
|
|
|
32
54
|
_deprecated_names = ["display", "clear_output", "publish_display_data", "update_display", "DisplayHandle"]
|
|
33
55
|
|
|
@@ -41,7 +63,11 @@ from warnings import warn
|
|
|
41
63
|
|
|
42
64
|
def __getattr__(name):
|
|
43
65
|
if name in _deprecated_names:
|
|
44
|
-
warn(
|
|
66
|
+
warn(
|
|
67
|
+
f"Importing {name} from IPython.core.display is deprecated since IPython 7.14, please import from IPython.display",
|
|
68
|
+
DeprecationWarning,
|
|
69
|
+
stacklevel=2,
|
|
70
|
+
)
|
|
45
71
|
return getattr(display_functions, name)
|
|
46
72
|
|
|
47
73
|
if name in globals().keys():
|
|
@@ -196,6 +222,23 @@ def display_jpeg(*objs, **kwargs):
|
|
|
196
222
|
_display_mimetype('image/jpeg', objs, **kwargs)
|
|
197
223
|
|
|
198
224
|
|
|
225
|
+
def display_webp(*objs, **kwargs):
|
|
226
|
+
"""Display the WEBP representation of an object.
|
|
227
|
+
|
|
228
|
+
Parameters
|
|
229
|
+
----------
|
|
230
|
+
*objs : object
|
|
231
|
+
The Python objects to display, or if raw=True raw JPEG data to
|
|
232
|
+
display.
|
|
233
|
+
raw : bool
|
|
234
|
+
Are the data objects raw data or Python objects that need to be
|
|
235
|
+
formatted before display? [default: False]
|
|
236
|
+
metadata : dict (optional)
|
|
237
|
+
Metadata to be associated with the specific mimetype output.
|
|
238
|
+
"""
|
|
239
|
+
_display_mimetype("image/webp", objs, **kwargs)
|
|
240
|
+
|
|
241
|
+
|
|
199
242
|
def display_latex(*objs, **kwargs):
|
|
200
243
|
"""Display the LaTeX representation of an object.
|
|
201
244
|
|
|
@@ -772,9 +815,14 @@ class Javascript(TextDisplayObject):
|
|
|
772
815
|
r += _lib_t2*len(self.lib)
|
|
773
816
|
return r
|
|
774
817
|
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
818
|
+
|
|
819
|
+
# constants for identifying png/jpeg/gif/webp data
|
|
820
|
+
_PNG = b"\x89PNG\r\n\x1a\n"
|
|
821
|
+
_JPEG = b"\xff\xd8"
|
|
822
|
+
_GIF1 = b"GIF87a"
|
|
823
|
+
_GIF2 = b"GIF89a"
|
|
824
|
+
_WEBP = b"WEBP"
|
|
825
|
+
|
|
778
826
|
|
|
779
827
|
def _pngxy(data):
|
|
780
828
|
"""read the (width, height) from a PNG header"""
|
|
@@ -782,6 +830,7 @@ def _pngxy(data):
|
|
|
782
830
|
# next 8 bytes are width/height
|
|
783
831
|
return struct.unpack('>ii', data[ihdr+4:ihdr+12])
|
|
784
832
|
|
|
833
|
+
|
|
785
834
|
def _jpegxy(data):
|
|
786
835
|
"""read the (width, height) from a JPEG header"""
|
|
787
836
|
# adapted from http://www.64lines.com/jpeg-width-height
|
|
@@ -801,22 +850,45 @@ def _jpegxy(data):
|
|
|
801
850
|
h, w = struct.unpack('>HH', data[iSOF+5:iSOF+9])
|
|
802
851
|
return w, h
|
|
803
852
|
|
|
853
|
+
|
|
804
854
|
def _gifxy(data):
|
|
805
855
|
"""read the (width, height) from a GIF header"""
|
|
806
856
|
return struct.unpack('<HH', data[6:10])
|
|
807
857
|
|
|
808
858
|
|
|
859
|
+
def _webpxy(data):
|
|
860
|
+
"""read the (width, height) from a WEBP header"""
|
|
861
|
+
if data[12:16] == b"VP8 ":
|
|
862
|
+
width, height = struct.unpack("<HH", data[24:30])
|
|
863
|
+
width = width & 0x3FFF
|
|
864
|
+
height = height & 0x3FFF
|
|
865
|
+
return (width, height)
|
|
866
|
+
elif data[12:16] == b"VP8L":
|
|
867
|
+
size_info = struct.unpack("<I", data[21:25])[0]
|
|
868
|
+
width = 1 + ((size_info & 0x3F) << 8) | (size_info >> 24)
|
|
869
|
+
height = 1 + (
|
|
870
|
+
(((size_info >> 8) & 0xF) << 10)
|
|
871
|
+
| (((size_info >> 14) & 0x3FC) << 2)
|
|
872
|
+
| ((size_info >> 22) & 0x3)
|
|
873
|
+
)
|
|
874
|
+
return (width, height)
|
|
875
|
+
else:
|
|
876
|
+
raise ValueError("Not a valid WEBP header")
|
|
877
|
+
|
|
878
|
+
|
|
809
879
|
class Image(DisplayObject):
|
|
810
880
|
|
|
811
|
-
_read_flags =
|
|
812
|
-
_FMT_JPEG =
|
|
813
|
-
_FMT_PNG =
|
|
814
|
-
_FMT_GIF =
|
|
815
|
-
|
|
881
|
+
_read_flags = "rb"
|
|
882
|
+
_FMT_JPEG = "jpeg"
|
|
883
|
+
_FMT_PNG = "png"
|
|
884
|
+
_FMT_GIF = "gif"
|
|
885
|
+
_FMT_WEBP = "webp"
|
|
886
|
+
_ACCEPTABLE_EMBEDDINGS = [_FMT_JPEG, _FMT_PNG, _FMT_GIF, _FMT_WEBP]
|
|
816
887
|
_MIMETYPES = {
|
|
817
|
-
_FMT_PNG:
|
|
818
|
-
_FMT_JPEG:
|
|
819
|
-
_FMT_GIF:
|
|
888
|
+
_FMT_PNG: "image/png",
|
|
889
|
+
_FMT_JPEG: "image/jpeg",
|
|
890
|
+
_FMT_GIF: "image/gif",
|
|
891
|
+
_FMT_WEBP: "image/webp",
|
|
820
892
|
}
|
|
821
893
|
|
|
822
894
|
def __init__(
|
|
@@ -833,7 +905,7 @@ class Image(DisplayObject):
|
|
|
833
905
|
metadata=None,
|
|
834
906
|
alt=None,
|
|
835
907
|
):
|
|
836
|
-
"""Create a PNG/JPEG/GIF image object given raw data.
|
|
908
|
+
"""Create a PNG/JPEG/GIF/WEBP image object given raw data.
|
|
837
909
|
|
|
838
910
|
When this object is returned by an input cell or passed to the
|
|
839
911
|
display function, it will result in the image being displayed
|
|
@@ -854,7 +926,7 @@ class Image(DisplayObject):
|
|
|
854
926
|
Images from a file are always embedded.
|
|
855
927
|
|
|
856
928
|
format : unicode
|
|
857
|
-
The format of the image data (png/jpeg/jpg/gif). If a filename or URL is given
|
|
929
|
+
The format of the image data (png/jpeg/jpg/gif/webp). If a filename or URL is given
|
|
858
930
|
for format will be inferred from the filename extension.
|
|
859
931
|
|
|
860
932
|
embed : bool
|
|
@@ -938,6 +1010,8 @@ class Image(DisplayObject):
|
|
|
938
1010
|
format = self._FMT_PNG
|
|
939
1011
|
elif ext == u'gif':
|
|
940
1012
|
format = self._FMT_GIF
|
|
1013
|
+
elif ext == "webp":
|
|
1014
|
+
format = self._FMT_WEBP
|
|
941
1015
|
else:
|
|
942
1016
|
format = ext.lower()
|
|
943
1017
|
elif isinstance(data, bytes):
|
|
@@ -945,6 +1019,12 @@ class Image(DisplayObject):
|
|
|
945
1019
|
# only if format has not been specified.
|
|
946
1020
|
if data[:2] == _JPEG:
|
|
947
1021
|
format = self._FMT_JPEG
|
|
1022
|
+
elif data[:8] == _PNG:
|
|
1023
|
+
format = self._FMT_PNG
|
|
1024
|
+
elif data[8:12] == _WEBP:
|
|
1025
|
+
format = self._FMT_WEBP
|
|
1026
|
+
elif data[:6] == _GIF1 or data[:6] == _GIF2:
|
|
1027
|
+
format = self._FMT_GIF
|
|
948
1028
|
|
|
949
1029
|
# failed to detect format, default png
|
|
950
1030
|
if format is None:
|
|
@@ -132,7 +132,7 @@ def _get_external(module_name: str, access_path: Sequence[str]):
|
|
|
132
132
|
|
|
133
133
|
Raises:
|
|
134
134
|
* `KeyError` if module is removed not found, and
|
|
135
|
-
* `AttributeError` if
|
|
135
|
+
* `AttributeError` if access path does not match an exported object
|
|
136
136
|
"""
|
|
137
137
|
member_type = sys.modules[module_name]
|
|
138
138
|
for attr in access_path:
|
|
@@ -235,7 +235,7 @@ class SelectivePolicy(EvaluationPolicy):
|
|
|
235
235
|
accept = has_original_attr and has_original_attribute
|
|
236
236
|
|
|
237
237
|
if accept:
|
|
238
|
-
# We still need to check for
|
|
238
|
+
# We still need to check for overridden properties.
|
|
239
239
|
|
|
240
240
|
value_class = type(value)
|
|
241
241
|
if not hasattr(value_class, attr):
|
|
@@ -332,7 +332,7 @@ class EvaluationContext(NamedTuple):
|
|
|
332
332
|
evaluation: Literal[
|
|
333
333
|
"forbidden", "minimal", "limited", "unsafe", "dangerous"
|
|
334
334
|
] = "forbidden"
|
|
335
|
-
#: Whether the
|
|
335
|
+
#: Whether the evaluation of code takes place inside of a subscript.
|
|
336
336
|
#: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``.
|
|
337
337
|
in_subscript: bool = False
|
|
338
338
|
|
|
@@ -373,7 +373,7 @@ def guarded_eval(code: str, context: EvaluationContext):
|
|
|
373
373
|
# getitem at all, for example it fails on simple `[0][1]`
|
|
374
374
|
|
|
375
375
|
if context.in_subscript:
|
|
376
|
-
#
|
|
376
|
+
# syntactic sugar for ellipsis (:) is only available in subscripts
|
|
377
377
|
# so we need to trick the ast parser into thinking that we have
|
|
378
378
|
# a subscript, but we need to be able to later recognise that we did
|
|
379
379
|
# it so we can ignore the actual __getitem__ operation
|
|
@@ -97,7 +97,7 @@ def num_ini_spaces(s):
|
|
|
97
97
|
"""
|
|
98
98
|
warnings.warn(
|
|
99
99
|
"`num_ini_spaces` is Pending Deprecation since IPython 8.17."
|
|
100
|
-
"It is considered
|
|
100
|
+
"It is considered for removal in in future version. "
|
|
101
101
|
"Please open an issue if you believe it should be kept.",
|
|
102
102
|
stacklevel=2,
|
|
103
103
|
category=PendingDeprecationWarning,
|
|
@@ -5,7 +5,7 @@ with ast-transformers it is not easy to directly manipulate ast.
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
IPython has pre-code and post-code hooks, but are ran from within the IPython
|
|
8
|
-
machinery so may be inappropriate, for example for performance
|
|
8
|
+
machinery so may be inappropriate, for example for performance measurement.
|
|
9
9
|
|
|
10
10
|
This module give you tools to simplify this, and expose 2 classes:
|
|
11
11
|
|
|
@@ -153,7 +153,9 @@ def strip_initial_indent(lines):
|
|
|
153
153
|
|
|
154
154
|
for line in it:
|
|
155
155
|
if line.startswith(indent):
|
|
156
|
-
yield line[len(indent):]
|
|
156
|
+
yield line[len(indent) :]
|
|
157
|
+
elif line in ("\n", "\r\n") or len(line) == 0:
|
|
158
|
+
yield line
|
|
157
159
|
else:
|
|
158
160
|
# Less indented than the first line - stop dedenting
|
|
159
161
|
yield line
|
|
@@ -195,12 +195,16 @@ class ExecutionMagics(Magics):
|
|
|
195
195
|
|
|
196
196
|
"""Run a statement through the python code profiler.
|
|
197
197
|
|
|
198
|
-
Usage, in line mode
|
|
198
|
+
**Usage, in line mode:**
|
|
199
|
+
|
|
199
200
|
%prun [options] statement
|
|
200
201
|
|
|
201
|
-
Usage, in cell mode
|
|
202
|
+
**Usage, in cell mode:**
|
|
203
|
+
|
|
202
204
|
%%prun [options] [statement]
|
|
205
|
+
|
|
203
206
|
code...
|
|
207
|
+
|
|
204
208
|
code...
|
|
205
209
|
|
|
206
210
|
In cell mode, the additional code lines are appended to the (possibly
|
|
@@ -1028,11 +1032,16 @@ class ExecutionMagics(Magics):
|
|
|
1028
1032
|
def timeit(self, line='', cell=None, local_ns=None):
|
|
1029
1033
|
"""Time execution of a Python statement or expression
|
|
1030
1034
|
|
|
1031
|
-
Usage, in line mode
|
|
1035
|
+
**Usage, in line mode:**
|
|
1036
|
+
|
|
1032
1037
|
%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement
|
|
1033
|
-
|
|
1038
|
+
|
|
1039
|
+
**or in cell mode:**
|
|
1040
|
+
|
|
1034
1041
|
%%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code
|
|
1042
|
+
|
|
1035
1043
|
code
|
|
1044
|
+
|
|
1036
1045
|
code...
|
|
1037
1046
|
|
|
1038
1047
|
Time execution of a Python statement or expression using the timeit
|
|
@@ -1046,6 +1055,7 @@ class ExecutionMagics(Magics):
|
|
|
1046
1055
|
body has access to any variables created in the setup code.
|
|
1047
1056
|
|
|
1048
1057
|
Options:
|
|
1058
|
+
|
|
1049
1059
|
-n<N>: execute the given statement <N> times in a loop. If <N> is not
|
|
1050
1060
|
provided, <N> is determined so as to get sufficient accuracy.
|
|
1051
1061
|
|
|
@@ -1066,7 +1076,7 @@ class ExecutionMagics(Magics):
|
|
|
1066
1076
|
-q: Quiet, do not print result.
|
|
1067
1077
|
|
|
1068
1078
|
-o: return a TimeitResult that can be stored in a variable to inspect
|
|
1069
|
-
|
|
1079
|
+
the result in more details.
|
|
1070
1080
|
|
|
1071
1081
|
.. versionchanged:: 7.3
|
|
1072
1082
|
User variables are no longer expanded,
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#-----------------------------------------------------------------------------
|
|
10
10
|
|
|
11
11
|
import functools
|
|
12
|
+
import os
|
|
12
13
|
import re
|
|
13
14
|
import shlex
|
|
14
15
|
import sys
|
|
@@ -41,6 +42,16 @@ def _get_conda_like_executable(command):
|
|
|
41
42
|
executable: string
|
|
42
43
|
Value should be: conda, mamba or micromamba
|
|
43
44
|
"""
|
|
45
|
+
# Check for a environment variable bound to the base executable, both conda and mamba
|
|
46
|
+
# set these when activating an environment.
|
|
47
|
+
base_executable = "CONDA_EXE"
|
|
48
|
+
if "mamba" in command.lower():
|
|
49
|
+
base_executable = "MAMBA_EXE"
|
|
50
|
+
if base_executable in os.environ:
|
|
51
|
+
executable = Path(os.environ[base_executable])
|
|
52
|
+
if executable.is_file():
|
|
53
|
+
return str(executable.resolve())
|
|
54
|
+
|
|
44
55
|
# Check if there is a conda executable in the same directory as the Python executable.
|
|
45
56
|
# This is the case within conda's root environment.
|
|
46
57
|
executable = Path(sys.executable).parent / command
|
|
@@ -48,10 +59,12 @@ def _get_conda_like_executable(command):
|
|
|
48
59
|
return str(executable)
|
|
49
60
|
|
|
50
61
|
# Otherwise, attempt to extract the executable from conda history.
|
|
51
|
-
# This applies in any conda environment.
|
|
62
|
+
# This applies in any conda environment. Parsing this way is error prone because
|
|
63
|
+
# different versions of conda and mamba include differing cmd values such as
|
|
64
|
+
# `conda`, `conda-script.py`, or `path/to/conda`, here use the raw command provided.
|
|
52
65
|
history = Path(sys.prefix, "conda-meta", "history").read_text(encoding="utf-8")
|
|
53
66
|
match = re.search(
|
|
54
|
-
rf"^#\s*cmd:\s*(?P<command>.*{
|
|
67
|
+
rf"^#\s*cmd:\s*(?P<command>.*{command})\s[create|install]",
|
|
55
68
|
history,
|
|
56
69
|
flags=re.MULTILINE,
|
|
57
70
|
)
|
|
@@ -149,3 +162,20 @@ class PackagingMagics(Magics):
|
|
|
149
162
|
"""
|
|
150
163
|
micromamba = _get_conda_like_executable("micromamba")
|
|
151
164
|
self._run_command(micromamba, line)
|
|
165
|
+
|
|
166
|
+
@line_magic
|
|
167
|
+
def uv(self, line):
|
|
168
|
+
"""Run the uv package manager within the current kernel.
|
|
169
|
+
|
|
170
|
+
Usage:
|
|
171
|
+
%uv pip install [pkgs]
|
|
172
|
+
"""
|
|
173
|
+
python = sys.executable
|
|
174
|
+
if sys.platform == "win32":
|
|
175
|
+
python = '"' + python + '"'
|
|
176
|
+
else:
|
|
177
|
+
python = shlex.quote(python)
|
|
178
|
+
|
|
179
|
+
self.shell.system(" ".join([python, "-m", "uv", line]))
|
|
180
|
+
|
|
181
|
+
print("Note: you may need to restart the kernel to use updated packages.")
|
|
@@ -460,7 +460,7 @@ class Inspector(Colorable):
|
|
|
460
460
|
|
|
461
461
|
mime_hooks = traitlets.Dict(
|
|
462
462
|
config=True,
|
|
463
|
-
help="dictionary of mime to callable to add
|
|
463
|
+
help="dictionary of mime to callable to add information into help mimebundle dict",
|
|
464
464
|
).tag(config=True)
|
|
465
465
|
|
|
466
466
|
def __init__(
|
|
@@ -125,7 +125,7 @@ def _detect_screen_size(screen_lines_def):
|
|
|
125
125
|
# print('***Screen size:',screen_lines_real,'lines x',
|
|
126
126
|
# screen_cols,'columns.') # dbg
|
|
127
127
|
|
|
128
|
-
def pager_page(strng, start=0, screen_lines=0, pager_cmd=None):
|
|
128
|
+
def pager_page(strng, start=0, screen_lines=0, pager_cmd=None) -> None:
|
|
129
129
|
"""Display a string, piping through a pager after a certain length.
|
|
130
130
|
|
|
131
131
|
strng can be a mime-bundle dict, supplying multiple representations,
|
|
@@ -239,7 +239,7 @@ def pager_page(strng, start=0, screen_lines=0, pager_cmd=None):
|
|
|
239
239
|
page_dumb(strng,screen_lines=screen_lines)
|
|
240
240
|
|
|
241
241
|
|
|
242
|
-
def page(data, start=0, screen_lines=0, pager_cmd=None):
|
|
242
|
+
def page(data, start: int = 0, screen_lines: int = 0, pager_cmd=None):
|
|
243
243
|
"""Display content in a pager, piping through a pager after a certain length.
|
|
244
244
|
|
|
245
245
|
data can be a mime-bundle dict, supplying multiple representations,
|
|
@@ -512,8 +512,10 @@ 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
|
|
516
|
-
|
|
515
|
+
and (
|
|
516
|
+
line_info.raw_the_rest.startswith(" ")
|
|
517
|
+
or not line_info.raw_the_rest.strip()
|
|
518
|
+
)
|
|
517
519
|
):
|
|
518
520
|
return self.prefilter_manager.get_handler_by_name("auto")
|
|
519
521
|
else:
|
|
@@ -528,7 +528,7 @@ def _list_matplotlib_backends_and_gui_loops() -> list[str]:
|
|
|
528
528
|
|
|
529
529
|
|
|
530
530
|
# Matplotlib and IPython do not always use the same gui framework name.
|
|
531
|
-
# Always use the
|
|
531
|
+
# Always use the appropriate one of these conversion functions when passing a
|
|
532
532
|
# gui framework name to/from Matplotlib.
|
|
533
533
|
def _convert_gui_to_matplotlib(gui: str | None) -> str | None:
|
|
534
534
|
if gui and gui.lower() == "osx":
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
# release. 'dev' as a _version_extra string means this is a development
|
|
17
17
|
# version
|
|
18
18
|
_version_major = 8
|
|
19
|
-
_version_minor =
|
|
19
|
+
_version_minor = 29
|
|
20
20
|
_version_patch = 0
|
|
21
21
|
_version_extra = ".dev"
|
|
22
22
|
# _version_extra = "rc1"
|
|
@@ -32,22 +32,13 @@ if _version_extra:
|
|
|
32
32
|
version = __version__ # backwards compatibility name
|
|
33
33
|
version_info = (_version_major, _version_minor, _version_patch, _version_extra)
|
|
34
34
|
|
|
35
|
-
# Change this when incrementing the kernel protocol version
|
|
36
|
-
kernel_protocol_version_info = (5, 0)
|
|
37
|
-
kernel_protocol_version = "%i.%i" % kernel_protocol_version_info
|
|
38
35
|
|
|
39
36
|
license = "BSD-3-Clause"
|
|
40
37
|
|
|
41
|
-
authors = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
|
|
46
|
-
'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com'),
|
|
47
|
-
'Thomas' : ('Thomas A. Kluyver', 'takowl@gmail.com'),
|
|
48
|
-
'Jorgen' : ('Jorgen Stenarson', 'jorgen.stenarson@bostream.nu'),
|
|
49
|
-
'Matthias' : ('Matthias Bussonnier', 'bussonniermatthias@gmail.com'),
|
|
50
|
-
}
|
|
38
|
+
authors = {
|
|
39
|
+
"Fernando": ("Fernando Perez", "fperez.net@gmail.com"),
|
|
40
|
+
"M": ("M Bussonnier", "mbussonnier@gmail.com"),
|
|
41
|
+
}
|
|
51
42
|
|
|
52
43
|
author = 'The IPython Development Team'
|
|
53
44
|
|
|
@@ -204,7 +204,7 @@ def test_line_split():
|
|
|
204
204
|
# was at the end of part1. So an empty part2 represents someone hitting
|
|
205
205
|
# tab at the end of the line, the most common case.
|
|
206
206
|
t = [
|
|
207
|
-
("run some/
|
|
207
|
+
("run some/script", "", "some/script"),
|
|
208
208
|
("run scripts/er", "ror.py foo", "scripts/er"),
|
|
209
209
|
("echo $HOM", "", "HOM"),
|
|
210
210
|
("print sys.pa", "", "sys.pa"),
|
|
@@ -140,7 +140,7 @@ def test_image_filename_defaults():
|
|
|
140
140
|
format="badformat",
|
|
141
141
|
embed=True,
|
|
142
142
|
)
|
|
143
|
-
# check
|
|
143
|
+
# check both paths to allow packages to test at build and install time
|
|
144
144
|
imgfile = os.path.join(tpath, 'core/tests/2x2.png')
|
|
145
145
|
img = display.Image(filename=imgfile)
|
|
146
146
|
assert "png" == img.format
|
|
@@ -660,7 +660,7 @@ class TestSystemRaw(ExitCodeChecks):
|
|
|
660
660
|
@mock.patch('os.system', side_effect=KeyboardInterrupt)
|
|
661
661
|
def test_control_c(self, *mocks):
|
|
662
662
|
try:
|
|
663
|
-
self.system("sleep 1 #
|
|
663
|
+
self.system("sleep 1 # won't happen")
|
|
664
664
|
except KeyboardInterrupt: # pragma: no cove
|
|
665
665
|
self.fail(
|
|
666
666
|
"system call should intercept "
|
|
@@ -137,3 +137,13 @@ def test_autocall_should_support_unicode():
|
|
|
137
137
|
finally:
|
|
138
138
|
ip.run_line_magic("autocall", "0")
|
|
139
139
|
del ip.user_ns["π"]
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def test_autocall_regression_gh_14513():
|
|
143
|
+
ip.run_line_magic("autocall", "2")
|
|
144
|
+
ip.user_ns["foo"] = dict()
|
|
145
|
+
try:
|
|
146
|
+
assert ip.prefilter("foo") == "foo"
|
|
147
|
+
finally:
|
|
148
|
+
ip.run_line_magic("autocall", "0")
|
|
149
|
+
del ip.user_ns["foo"]
|
|
@@ -579,7 +579,7 @@ def test_run_tb():
|
|
|
579
579
|
def test_multiprocessing_run():
|
|
580
580
|
"""Set we can run mutiprocesgin without messing up up main namespace
|
|
581
581
|
|
|
582
|
-
Note that import `nose.tools as nt`
|
|
582
|
+
Note that import `nose.tools as nt` modify the values
|
|
583
583
|
sys.module['__mp_main__'] so we need to temporarily set it to None to test
|
|
584
584
|
the issue.
|
|
585
585
|
"""
|
|
@@ -158,14 +158,14 @@ class NestedGenExprTestCase(unittest.TestCase):
|
|
|
158
158
|
|
|
159
159
|
|
|
160
160
|
indentationerror_file = """if True:
|
|
161
|
-
|
|
161
|
+
zoom()
|
|
162
162
|
"""
|
|
163
163
|
|
|
164
164
|
class IndentationErrorTest(unittest.TestCase):
|
|
165
165
|
def test_indentationerror_shows_line(self):
|
|
166
166
|
# See issue gh-2398
|
|
167
167
|
with tt.AssertPrints("IndentationError"):
|
|
168
|
-
with tt.AssertPrints("
|
|
168
|
+
with tt.AssertPrints("zoom()", suppress=False):
|
|
169
169
|
ip.run_cell(indentationerror_file)
|
|
170
170
|
|
|
171
171
|
with TemporaryDirectory() as td:
|
|
@@ -174,7 +174,7 @@ class IndentationErrorTest(unittest.TestCase):
|
|
|
174
174
|
f.write(indentationerror_file)
|
|
175
175
|
|
|
176
176
|
with tt.AssertPrints("IndentationError"):
|
|
177
|
-
with tt.AssertPrints("
|
|
177
|
+
with tt.AssertPrints("zoom()", suppress=False):
|
|
178
178
|
ip.magic('run %s' % fname)
|
|
179
179
|
|
|
180
180
|
@skip_without("pandas")
|