ipython 8.22.2__tar.gz → 8.24.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.22.2 → ipython-8.24.0}/IPython/core/debugger.py +38 -48
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/display_functions.py +1 -1
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/excolors.py +20 -3
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/guarded_eval.py +183 -45
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/interactiveshell.py +8 -1
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/basic.py +3 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/execution.py +1 -1
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/pylab.py +10 -6
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/pylabtools.py +106 -21
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/release.py +2 -2
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/shellapp.py +65 -25
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_guarded_eval.py +192 -9
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_pylabtools.py +93 -9
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/embed.py +1 -1
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/interactiveshell.py +11 -5
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/coloransi.py +28 -3
- {ipython-8.22.2/ipython.egg-info → ipython-8.24.0}/PKG-INFO +6 -4
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version0.11.rst +1 -1
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version8.rst +62 -0
- {ipython-8.22.2 → ipython-8.24.0/ipython.egg-info}/PKG-INFO +6 -4
- {ipython-8.22.2 → ipython-8.24.0}/ipython.egg-info/SOURCES.txt +0 -2
- {ipython-8.22.2 → ipython-8.24.0}/ipython.egg-info/requires.txt +8 -5
- {ipython-8.22.2 → ipython-8.24.0}/pyproject.toml +6 -3
- ipython-8.22.2/docs/source/development/parallel_connections.rst +0 -8
- ipython-8.22.2/docs/source/development/parallel_messages.rst +0 -8
- {ipython-8.22.2 → ipython-8.24.0}/.flake8 +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/.mailmap +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/.pre-commit-config.yaml +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/COPYING.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/__main__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/conftest.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/consoleapp.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/alias.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/application.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/async_helpers.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/autocall.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/compilerop.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/completer.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/completerlib.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/crashhandler.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/display.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/display_trap.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/displayhook.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/displaypub.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/error.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/events.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/extensions.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/formatters.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/getipython.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/history.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/historyapp.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/hooks.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/inputsplitter.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/inputtransformer.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/logger.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/macro.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magic.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/auto.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/code.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/config.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/display.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/extension.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/history.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/logging.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/osm.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/magics/script.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/oinspect.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/page.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/payload.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/payloadpage.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/prefilter.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/profileapp.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/profiledir.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/prompts.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/splitinput.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/2x2.jpg +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/2x2.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/bad_all.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/nonascii.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/nonascii2.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/print_argv.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/refbug.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/simpleerr.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/tclass.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_alias.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_application.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_async_helpers.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_autocall.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_compilerop.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_completer.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_completerlib.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_debugger.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_display.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_displayhook.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_events.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_extension.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_formatters.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_handlers.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_history.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_hooks.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_imports.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_inputsplitter.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_inputtransformer.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_interactiveshell.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_iplib.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_logger.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_magic.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_magic_arguments.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_magic_terminal.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_oinspect.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_page.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_paths.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_prefilter.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_profile.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_prompts.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_run.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_shellapp.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_splitinput.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/tests/test_ultratb.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/ultratb.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/core/usage.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/display.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/extensions/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/extensions/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/extensions/tests/test_autoreload.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/extensions/tests/test_storemagic.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/external/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/external/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/external/tests/test_qt_loaders.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/clipboard.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/deepreload.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/demo.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/display.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/guisupport.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/latextools.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/lexers.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/pretty.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test.wav +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_clipboard.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_deepreload.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_display.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_editorhooks.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_imports.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_latextools.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_lexers.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_pretty.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/lib/tests/test_pygments.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/paths.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/py.typed +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/console.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/debugger.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/magics.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/prompts.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/tests/test_embed.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/tests/test_help.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/decorators.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/README.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/tests/test_decorators.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/tests/test_ipunittest.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/tests/test_tools.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/testing/tools.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/tests/cve.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/_process_common.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/capture.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/colorable.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/contexts.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/daemonize.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/data.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/decorators.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/dir2.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/docs.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/encoding.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/eventful.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/frame.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/generics.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/importstring.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/io.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/localinterfaces.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/log.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/module_paths.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/openpy.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/path.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/process.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/py3compat.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/sentinel.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/shimmodule.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/signatures.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tempdir.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/terminal.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_capture.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_decorators.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_deprecated.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_dir2.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_imports.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_importstring.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_io.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_module_paths.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_openpy.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_path.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_process.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_pycolorize.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_shimmodule.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_sysinfo.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_tempdir.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_text.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_tokenutil.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tests/test_wildcard.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/text.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/timing.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/traitlets.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/tz.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/ulinecache.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/version.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/IPython/utils/wildcard.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/LICENSE +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/MANIFEST.in +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/README.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/_build_meta.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/Makefile +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/README.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/autogen_api.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/autogen_config.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/autogen_magics.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/make.cmd +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/man/ipython.1 +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/requirements.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_static/logo.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/about/history.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/about/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/api/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/conf.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/details.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/integrating.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/intro.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/options/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/coredev/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/config.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/execution.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/kernels.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/lexer.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/messaging.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/pycompat.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/install/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/install/install.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/figs/besselj.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/figs/colors_dark.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/figs/jn.html +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/figs/jn.xhtml +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/links.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/overview.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/parallel/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/sphinxext.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/sphinxext/github.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/docs/sphinxext/magics.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/Embedding/Index.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Index.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/data/flare.json +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/Index.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/images/FrontendKernel.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/images/animation.m4v +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/images/ipython_logo.png +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/images/python_logo.svg +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/long_description.rst +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/scripts/ipython.ico +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/scripts/ipython_nb.ico +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/setup.cfg +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/setup.py +0 -0
- {ipython-8.22.2 → ipython-8.24.0}/setupbase.py +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
"""
|
|
3
2
|
Pdb debugger class.
|
|
4
3
|
|
|
@@ -101,17 +100,25 @@ All the changes since then are under the same license as IPython.
|
|
|
101
100
|
#
|
|
102
101
|
#*****************************************************************************
|
|
103
102
|
|
|
103
|
+
from __future__ import annotations
|
|
104
|
+
|
|
104
105
|
import inspect
|
|
105
106
|
import linecache
|
|
106
|
-
import sys
|
|
107
|
-
import re
|
|
108
107
|
import os
|
|
108
|
+
import re
|
|
109
|
+
import sys
|
|
110
|
+
from contextlib import contextmanager
|
|
111
|
+
from functools import lru_cache
|
|
109
112
|
|
|
110
113
|
from IPython import get_ipython
|
|
111
|
-
from contextlib import contextmanager
|
|
112
|
-
from IPython.utils import PyColorize
|
|
113
|
-
from IPython.utils import coloransi, py3compat
|
|
114
114
|
from IPython.core.excolors import exception_colors
|
|
115
|
+
from IPython.utils import PyColorize, coloransi, py3compat
|
|
116
|
+
|
|
117
|
+
from typing import TYPE_CHECKING
|
|
118
|
+
|
|
119
|
+
if TYPE_CHECKING:
|
|
120
|
+
# otherwise circular import
|
|
121
|
+
from IPython.core.interactiveshell import InteractiveShell
|
|
115
122
|
|
|
116
123
|
# skip module docstests
|
|
117
124
|
__skip_doctest__ = True
|
|
@@ -149,16 +156,10 @@ def BdbQuit_excepthook(et, ev, tb, excepthook=None):
|
|
|
149
156
|
parameter.
|
|
150
157
|
"""
|
|
151
158
|
raise ValueError(
|
|
152
|
-
"`BdbQuit_excepthook` is deprecated since version 5.1",
|
|
159
|
+
"`BdbQuit_excepthook` is deprecated since version 5.1. It is still arround only because it is still imported by ipdb.",
|
|
153
160
|
)
|
|
154
161
|
|
|
155
162
|
|
|
156
|
-
def BdbQuit_IPython_excepthook(self, et, ev, tb, tb_offset=None):
|
|
157
|
-
raise ValueError(
|
|
158
|
-
"`BdbQuit_IPython_excepthook` is deprecated since version 5.1",
|
|
159
|
-
DeprecationWarning, stacklevel=2)
|
|
160
|
-
|
|
161
|
-
|
|
162
163
|
RGX_EXTRA_INDENT = re.compile(r'(?<=\n)\s+')
|
|
163
164
|
|
|
164
165
|
|
|
@@ -191,6 +192,8 @@ class Pdb(OldPdb):
|
|
|
191
192
|
|
|
192
193
|
"""
|
|
193
194
|
|
|
195
|
+
shell: InteractiveShell
|
|
196
|
+
|
|
194
197
|
if CHAIN_EXCEPTIONS:
|
|
195
198
|
MAX_CHAINED_EXCEPTION_DEPTH = 999
|
|
196
199
|
|
|
@@ -261,21 +264,6 @@ class Pdb(OldPdb):
|
|
|
261
264
|
C = coloransi.TermColors
|
|
262
265
|
cst = self.color_scheme_table
|
|
263
266
|
|
|
264
|
-
cst['NoColor'].colors.prompt = C.NoColor
|
|
265
|
-
cst['NoColor'].colors.breakpoint_enabled = C.NoColor
|
|
266
|
-
cst['NoColor'].colors.breakpoint_disabled = C.NoColor
|
|
267
|
-
|
|
268
|
-
cst['Linux'].colors.prompt = C.Green
|
|
269
|
-
cst['Linux'].colors.breakpoint_enabled = C.LightRed
|
|
270
|
-
cst['Linux'].colors.breakpoint_disabled = C.Red
|
|
271
|
-
|
|
272
|
-
cst['LightBG'].colors.prompt = C.Blue
|
|
273
|
-
cst['LightBG'].colors.breakpoint_enabled = C.LightRed
|
|
274
|
-
cst['LightBG'].colors.breakpoint_disabled = C.Red
|
|
275
|
-
|
|
276
|
-
cst['Neutral'].colors.prompt = C.Blue
|
|
277
|
-
cst['Neutral'].colors.breakpoint_enabled = C.LightRed
|
|
278
|
-
cst['Neutral'].colors.breakpoint_disabled = C.Red
|
|
279
267
|
|
|
280
268
|
# Add a python parser so we can syntax highlight source while
|
|
281
269
|
# debugging.
|
|
@@ -471,24 +459,11 @@ class Pdb(OldPdb):
|
|
|
471
459
|
|
|
472
460
|
return line
|
|
473
461
|
|
|
474
|
-
def new_do_frame(self, arg):
|
|
475
|
-
OldPdb.do_frame(self, arg)
|
|
476
|
-
|
|
477
462
|
def new_do_quit(self, arg):
|
|
478
|
-
|
|
479
|
-
if hasattr(self, 'old_all_completions'):
|
|
480
|
-
self.shell.Completer.all_completions = self.old_all_completions
|
|
481
|
-
|
|
482
463
|
return OldPdb.do_quit(self, arg)
|
|
483
464
|
|
|
484
465
|
do_q = do_quit = decorate_fn_with_doc(new_do_quit, OldPdb.do_quit)
|
|
485
466
|
|
|
486
|
-
def new_do_restart(self, arg):
|
|
487
|
-
"""Restart command. In the context of ipython this is exactly the same
|
|
488
|
-
thing as 'quit'."""
|
|
489
|
-
self.msg("Restart doesn't make sense here. Using 'quit' instead.")
|
|
490
|
-
return self.do_quit(arg)
|
|
491
|
-
|
|
492
467
|
def print_stack_trace(self, context=None):
|
|
493
468
|
Colors = self.color_scheme_table.active_colors
|
|
494
469
|
ColorsNormal = Colors.Normal
|
|
@@ -941,22 +916,37 @@ class Pdb(OldPdb):
|
|
|
941
916
|
Utility to tell us whether we are in a decorator internal and should stop.
|
|
942
917
|
|
|
943
918
|
"""
|
|
944
|
-
|
|
945
919
|
# if we are disabled don't skip
|
|
946
920
|
if not self._predicates["debuggerskip"]:
|
|
947
921
|
return False
|
|
948
922
|
|
|
923
|
+
return self._cachable_skip(frame)
|
|
924
|
+
|
|
925
|
+
@lru_cache(1024)
|
|
926
|
+
def _cached_one_parent_frame_debuggerskip(self, frame):
|
|
927
|
+
"""
|
|
928
|
+
Cache looking up for DEBUGGERSKIP on parent frame.
|
|
929
|
+
|
|
930
|
+
This should speedup walking through deep frame when one of the highest
|
|
931
|
+
one does have a debugger skip.
|
|
932
|
+
|
|
933
|
+
This is likely to introduce fake positive though.
|
|
934
|
+
"""
|
|
935
|
+
while getattr(frame, "f_back", None):
|
|
936
|
+
frame = frame.f_back
|
|
937
|
+
if self._get_frame_locals(frame).get(DEBUGGERSKIP):
|
|
938
|
+
return True
|
|
939
|
+
return None
|
|
940
|
+
|
|
941
|
+
@lru_cache(1024)
|
|
942
|
+
def _cachable_skip(self, frame):
|
|
949
943
|
# if frame is tagged, skip by default.
|
|
950
944
|
if DEBUGGERSKIP in frame.f_code.co_varnames:
|
|
951
945
|
return True
|
|
952
946
|
|
|
953
947
|
# if one of the parent frame value set to True skip as well.
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
while getattr(cframe, "f_back", None):
|
|
957
|
-
cframe = cframe.f_back
|
|
958
|
-
if self._get_frame_locals(cframe).get(DEBUGGERSKIP):
|
|
959
|
-
return True
|
|
948
|
+
if self._cached_one_parent_frame_debuggerskip(frame):
|
|
949
|
+
return True
|
|
960
950
|
|
|
961
951
|
return False
|
|
962
952
|
|
|
@@ -34,9 +34,10 @@ def exception_colors():
|
|
|
34
34
|
>>> ec.active_scheme_name
|
|
35
35
|
'NoColor'
|
|
36
36
|
>>> sorted(ec.active_colors.keys())
|
|
37
|
-
['Normal', '
|
|
38
|
-
'
|
|
39
|
-
'val', 'valEm']
|
|
37
|
+
['Normal', 'breakpoint_disabled', 'breakpoint_enabled', 'caret', 'em',
|
|
38
|
+
'excName', 'filename', 'filenameEm', 'line', 'lineno', 'linenoEm', 'name',
|
|
39
|
+
'nameEm', 'normalEm', 'prompt', 'topline', 'vName', 'val', 'valEm']
|
|
40
|
+
|
|
40
41
|
"""
|
|
41
42
|
|
|
42
43
|
ex_colors = ColorSchemeTable()
|
|
@@ -70,6 +71,10 @@ def exception_colors():
|
|
|
70
71
|
"line": C.NoColor,
|
|
71
72
|
"caret": C.NoColor,
|
|
72
73
|
"Normal": C.NoColor,
|
|
74
|
+
# debugger
|
|
75
|
+
"prompt": C.NoColor,
|
|
76
|
+
"breakpoint_enabled": C.NoColor,
|
|
77
|
+
"breakpoint_disabled": C.NoColor,
|
|
73
78
|
},
|
|
74
79
|
)
|
|
75
80
|
)
|
|
@@ -99,6 +104,10 @@ def exception_colors():
|
|
|
99
104
|
"line": C.Yellow,
|
|
100
105
|
"caret": C.White,
|
|
101
106
|
"Normal": C.Normal,
|
|
107
|
+
# debugger
|
|
108
|
+
"prompt": C.Green,
|
|
109
|
+
"breakpoint_enabled": C.LightRed,
|
|
110
|
+
"breakpoint_disabled": C.Red,
|
|
102
111
|
},
|
|
103
112
|
)
|
|
104
113
|
)
|
|
@@ -132,6 +141,10 @@ def exception_colors():
|
|
|
132
141
|
"line": C.Red,
|
|
133
142
|
"caret": C.Normal,
|
|
134
143
|
"Normal": C.Normal,
|
|
144
|
+
# debugger
|
|
145
|
+
"prompt": C.Blue,
|
|
146
|
+
"breakpoint_enabled": C.LightRed,
|
|
147
|
+
"breakpoint_disabled": C.Red,
|
|
135
148
|
},
|
|
136
149
|
)
|
|
137
150
|
)
|
|
@@ -161,6 +174,10 @@ def exception_colors():
|
|
|
161
174
|
"line": C.Red,
|
|
162
175
|
"caret": C.Normal,
|
|
163
176
|
"Normal": C.Normal,
|
|
177
|
+
# debugger
|
|
178
|
+
"prompt": C.Blue,
|
|
179
|
+
"breakpoint_enabled": C.LightRed,
|
|
180
|
+
"breakpoint_disabled": C.Red,
|
|
164
181
|
},
|
|
165
182
|
)
|
|
166
183
|
)
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
from inspect import signature, Signature
|
|
1
|
+
from inspect import isclass, signature, Signature
|
|
2
2
|
from typing import (
|
|
3
|
-
|
|
3
|
+
Annotated,
|
|
4
|
+
AnyStr,
|
|
4
5
|
Callable,
|
|
5
6
|
Dict,
|
|
7
|
+
Literal,
|
|
8
|
+
NamedTuple,
|
|
9
|
+
NewType,
|
|
10
|
+
Optional,
|
|
11
|
+
Protocol,
|
|
6
12
|
Set,
|
|
7
13
|
Sequence,
|
|
8
14
|
Tuple,
|
|
9
|
-
NamedTuple,
|
|
10
15
|
Type,
|
|
11
|
-
|
|
16
|
+
TypeGuard,
|
|
12
17
|
Union,
|
|
13
|
-
|
|
18
|
+
get_args,
|
|
19
|
+
get_origin,
|
|
20
|
+
is_typeddict,
|
|
14
21
|
)
|
|
15
22
|
import ast
|
|
16
23
|
import builtins
|
|
@@ -21,15 +28,18 @@ from functools import cached_property
|
|
|
21
28
|
from dataclasses import dataclass, field
|
|
22
29
|
from types import MethodDescriptorType, ModuleType
|
|
23
30
|
|
|
24
|
-
from IPython.utils.docs import GENERATING_DOCUMENTATION
|
|
25
31
|
from IPython.utils.decorators import undoc
|
|
26
32
|
|
|
27
33
|
|
|
28
|
-
if
|
|
29
|
-
from typing_extensions import
|
|
34
|
+
if sys.version_info < (3, 11):
|
|
35
|
+
from typing_extensions import Self, LiteralString
|
|
36
|
+
else:
|
|
37
|
+
from typing import Self, LiteralString
|
|
38
|
+
|
|
39
|
+
if sys.version_info < (3, 12):
|
|
40
|
+
from typing_extensions import TypeAliasType
|
|
30
41
|
else:
|
|
31
|
-
|
|
32
|
-
Protocol = object # requires Python >=3.8
|
|
42
|
+
from typing import TypeAliasType
|
|
33
43
|
|
|
34
44
|
|
|
35
45
|
@undoc
|
|
@@ -337,6 +347,7 @@ class _IdentitySubscript:
|
|
|
337
347
|
IDENTITY_SUBSCRIPT = _IdentitySubscript()
|
|
338
348
|
SUBSCRIPT_MARKER = "__SUBSCRIPT_SENTINEL__"
|
|
339
349
|
UNKNOWN_SIGNATURE = Signature()
|
|
350
|
+
NOT_EVALUATED = object()
|
|
340
351
|
|
|
341
352
|
|
|
342
353
|
class GuardRejection(Exception):
|
|
@@ -417,9 +428,37 @@ UNARY_OP_DUNDERS: Dict[Type[ast.unaryop], Tuple[str, ...]] = {
|
|
|
417
428
|
}
|
|
418
429
|
|
|
419
430
|
|
|
420
|
-
class
|
|
431
|
+
class ImpersonatingDuck:
|
|
421
432
|
"""A dummy class used to create objects of other classes without calling their ``__init__``"""
|
|
422
433
|
|
|
434
|
+
# no-op: override __class__ to impersonate
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
class _Duck:
|
|
438
|
+
"""A dummy class used to create objects pretending to have given attributes"""
|
|
439
|
+
|
|
440
|
+
def __init__(self, attributes: Optional[dict] = None, items: Optional[dict] = None):
|
|
441
|
+
self.attributes = attributes or {}
|
|
442
|
+
self.items = items or {}
|
|
443
|
+
|
|
444
|
+
def __getattr__(self, attr: str):
|
|
445
|
+
return self.attributes[attr]
|
|
446
|
+
|
|
447
|
+
def __hasattr__(self, attr: str):
|
|
448
|
+
return attr in self.attributes
|
|
449
|
+
|
|
450
|
+
def __dir__(self):
|
|
451
|
+
return [*dir(super), *self.attributes]
|
|
452
|
+
|
|
453
|
+
def __getitem__(self, key: str):
|
|
454
|
+
return self.items[key]
|
|
455
|
+
|
|
456
|
+
def __hasitem__(self, key: str):
|
|
457
|
+
return self.items[key]
|
|
458
|
+
|
|
459
|
+
def _ipython_key_completions_(self):
|
|
460
|
+
return self.items.keys()
|
|
461
|
+
|
|
423
462
|
|
|
424
463
|
def _find_dunder(node_op, dunders) -> Union[Tuple[str, ...], None]:
|
|
425
464
|
dunder = None
|
|
@@ -557,19 +596,7 @@ def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
|
|
|
557
596
|
f" not allowed in {context.evaluation} mode",
|
|
558
597
|
)
|
|
559
598
|
if isinstance(node, ast.Name):
|
|
560
|
-
|
|
561
|
-
return context.locals[node.id]
|
|
562
|
-
if policy.allow_globals_access and node.id in context.globals:
|
|
563
|
-
return context.globals[node.id]
|
|
564
|
-
if policy.allow_builtins_access and hasattr(builtins, node.id):
|
|
565
|
-
# note: do not use __builtins__, it is implementation detail of cPython
|
|
566
|
-
return getattr(builtins, node.id)
|
|
567
|
-
if not policy.allow_globals_access and not policy.allow_locals_access:
|
|
568
|
-
raise GuardRejection(
|
|
569
|
-
f"Namespace access not allowed in {context.evaluation} mode"
|
|
570
|
-
)
|
|
571
|
-
else:
|
|
572
|
-
raise NameError(f"{node.id} not found in locals, globals, nor builtins")
|
|
599
|
+
return _eval_node_name(node.id, context)
|
|
573
600
|
if isinstance(node, ast.Attribute):
|
|
574
601
|
value = eval_node(node.value, context)
|
|
575
602
|
if policy.can_get_attr(value, node.attr):
|
|
@@ -590,27 +617,19 @@ def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
|
|
|
590
617
|
if policy.can_call(func) and not node.keywords:
|
|
591
618
|
args = [eval_node(arg, context) for arg in node.args]
|
|
592
619
|
return func(*args)
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
if
|
|
605
|
-
|
|
606
|
-
return sig.return_annotation(*args)
|
|
607
|
-
try:
|
|
608
|
-
# if custom class is in type annotation, mock it;
|
|
609
|
-
# this only works for heap types, not builtins
|
|
610
|
-
duck.__class__ = sig.return_annotation
|
|
611
|
-
return duck
|
|
612
|
-
except TypeError:
|
|
613
|
-
pass
|
|
620
|
+
if isclass(func):
|
|
621
|
+
# this code path gets entered when calling class e.g. `MyClass()`
|
|
622
|
+
# or `my_instance.__class__()` - in both cases `func` is `MyClass`.
|
|
623
|
+
# Should return `MyClass` if `__new__` is not overridden,
|
|
624
|
+
# otherwise whatever `__new__` return type is.
|
|
625
|
+
overridden_return_type = _eval_return_type(func.__new__, node, context)
|
|
626
|
+
if overridden_return_type is not NOT_EVALUATED:
|
|
627
|
+
return overridden_return_type
|
|
628
|
+
return _create_duck_for_heap_type(func)
|
|
629
|
+
else:
|
|
630
|
+
return_type = _eval_return_type(func, node, context)
|
|
631
|
+
if return_type is not NOT_EVALUATED:
|
|
632
|
+
return return_type
|
|
614
633
|
raise GuardRejection(
|
|
615
634
|
"Call for",
|
|
616
635
|
func, # not joined to avoid calling `repr`
|
|
@@ -619,6 +638,125 @@ def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
|
|
|
619
638
|
raise ValueError("Unhandled node", ast.dump(node))
|
|
620
639
|
|
|
621
640
|
|
|
641
|
+
def _eval_return_type(func: Callable, node: ast.Call, context: EvaluationContext):
|
|
642
|
+
"""Evaluate return type of a given callable function.
|
|
643
|
+
|
|
644
|
+
Returns the built-in type, a duck or NOT_EVALUATED sentinel.
|
|
645
|
+
"""
|
|
646
|
+
try:
|
|
647
|
+
sig = signature(func)
|
|
648
|
+
except ValueError:
|
|
649
|
+
sig = UNKNOWN_SIGNATURE
|
|
650
|
+
# if annotation was not stringized, or it was stringized
|
|
651
|
+
# but resolved by signature call we know the return type
|
|
652
|
+
not_empty = sig.return_annotation is not Signature.empty
|
|
653
|
+
if not_empty:
|
|
654
|
+
return _resolve_annotation(sig.return_annotation, sig, func, node, context)
|
|
655
|
+
return NOT_EVALUATED
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
def _resolve_annotation(
|
|
659
|
+
annotation,
|
|
660
|
+
sig: Signature,
|
|
661
|
+
func: Callable,
|
|
662
|
+
node: ast.Call,
|
|
663
|
+
context: EvaluationContext,
|
|
664
|
+
):
|
|
665
|
+
"""Resolve annotation created by user with `typing` module and custom objects."""
|
|
666
|
+
annotation = (
|
|
667
|
+
_eval_node_name(annotation, context)
|
|
668
|
+
if isinstance(annotation, str)
|
|
669
|
+
else annotation
|
|
670
|
+
)
|
|
671
|
+
origin = get_origin(annotation)
|
|
672
|
+
if annotation is Self and hasattr(func, "__self__"):
|
|
673
|
+
return func.__self__
|
|
674
|
+
elif origin is Literal:
|
|
675
|
+
type_args = get_args(annotation)
|
|
676
|
+
if len(type_args) == 1:
|
|
677
|
+
return type_args[0]
|
|
678
|
+
elif annotation is LiteralString:
|
|
679
|
+
return ""
|
|
680
|
+
elif annotation is AnyStr:
|
|
681
|
+
index = None
|
|
682
|
+
for i, (key, value) in enumerate(sig.parameters.items()):
|
|
683
|
+
if value.annotation is AnyStr:
|
|
684
|
+
index = i
|
|
685
|
+
break
|
|
686
|
+
if index is not None and index < len(node.args):
|
|
687
|
+
return eval_node(node.args[index], context)
|
|
688
|
+
elif origin is TypeGuard:
|
|
689
|
+
return bool()
|
|
690
|
+
elif origin is Union:
|
|
691
|
+
attributes = [
|
|
692
|
+
attr
|
|
693
|
+
for type_arg in get_args(annotation)
|
|
694
|
+
for attr in dir(_resolve_annotation(type_arg, sig, func, node, context))
|
|
695
|
+
]
|
|
696
|
+
return _Duck(attributes=dict.fromkeys(attributes))
|
|
697
|
+
elif is_typeddict(annotation):
|
|
698
|
+
return _Duck(
|
|
699
|
+
attributes=dict.fromkeys(dir(dict())),
|
|
700
|
+
items={
|
|
701
|
+
k: _resolve_annotation(v, sig, func, node, context)
|
|
702
|
+
for k, v in annotation.__annotations__.items()
|
|
703
|
+
},
|
|
704
|
+
)
|
|
705
|
+
elif hasattr(annotation, "_is_protocol"):
|
|
706
|
+
return _Duck(attributes=dict.fromkeys(dir(annotation)))
|
|
707
|
+
elif origin is Annotated:
|
|
708
|
+
type_arg = get_args(annotation)[0]
|
|
709
|
+
return _resolve_annotation(type_arg, sig, func, node, context)
|
|
710
|
+
elif isinstance(annotation, NewType):
|
|
711
|
+
return _eval_or_create_duck(annotation.__supertype__, node, context)
|
|
712
|
+
elif isinstance(annotation, TypeAliasType):
|
|
713
|
+
return _eval_or_create_duck(annotation.__value__, node, context)
|
|
714
|
+
else:
|
|
715
|
+
return _eval_or_create_duck(annotation, node, context)
|
|
716
|
+
|
|
717
|
+
|
|
718
|
+
def _eval_node_name(node_id: str, context: EvaluationContext):
|
|
719
|
+
policy = EVALUATION_POLICIES[context.evaluation]
|
|
720
|
+
if policy.allow_locals_access and node_id in context.locals:
|
|
721
|
+
return context.locals[node_id]
|
|
722
|
+
if policy.allow_globals_access and node_id in context.globals:
|
|
723
|
+
return context.globals[node_id]
|
|
724
|
+
if policy.allow_builtins_access and hasattr(builtins, node_id):
|
|
725
|
+
# note: do not use __builtins__, it is implementation detail of cPython
|
|
726
|
+
return getattr(builtins, node_id)
|
|
727
|
+
if not policy.allow_globals_access and not policy.allow_locals_access:
|
|
728
|
+
raise GuardRejection(
|
|
729
|
+
f"Namespace access not allowed in {context.evaluation} mode"
|
|
730
|
+
)
|
|
731
|
+
else:
|
|
732
|
+
raise NameError(f"{node_id} not found in locals, globals, nor builtins")
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
def _eval_or_create_duck(duck_type, node: ast.Call, context: EvaluationContext):
|
|
736
|
+
policy = EVALUATION_POLICIES[context.evaluation]
|
|
737
|
+
# if allow-listed builtin is on type annotation, instantiate it
|
|
738
|
+
if policy.can_call(duck_type) and not node.keywords:
|
|
739
|
+
args = [eval_node(arg, context) for arg in node.args]
|
|
740
|
+
return duck_type(*args)
|
|
741
|
+
# if custom class is in type annotation, mock it
|
|
742
|
+
return _create_duck_for_heap_type(duck_type)
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
def _create_duck_for_heap_type(duck_type):
|
|
746
|
+
"""Create an imitation of an object of a given type (a duck).
|
|
747
|
+
|
|
748
|
+
Returns the duck or NOT_EVALUATED sentinel if duck could not be created.
|
|
749
|
+
"""
|
|
750
|
+
duck = ImpersonatingDuck()
|
|
751
|
+
try:
|
|
752
|
+
# this only works for heap types, not builtins
|
|
753
|
+
duck.__class__ = duck_type
|
|
754
|
+
return duck
|
|
755
|
+
except TypeError:
|
|
756
|
+
pass
|
|
757
|
+
return NOT_EVALUATED
|
|
758
|
+
|
|
759
|
+
|
|
622
760
|
SUPPORTED_EXTERNAL_GETITEM = {
|
|
623
761
|
("pandas", "core", "indexing", "_iLocIndexer"),
|
|
624
762
|
("pandas", "core", "indexing", "_LocIndexer"),
|
|
@@ -3654,10 +3654,17 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
3654
3654
|
make sense in all contexts, for example a terminal ipython can't
|
|
3655
3655
|
display figures inline.
|
|
3656
3656
|
"""
|
|
3657
|
+
from .pylabtools import _matplotlib_manages_backends
|
|
3658
|
+
|
|
3659
|
+
if not _matplotlib_manages_backends() and gui in (None, "auto"):
|
|
3660
|
+
# Early import of backend_inline required for its side effect of
|
|
3661
|
+
# calling _enable_matplotlib_integration()
|
|
3662
|
+
import matplotlib_inline.backend_inline
|
|
3663
|
+
|
|
3657
3664
|
from IPython.core import pylabtools as pt
|
|
3658
3665
|
gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
|
|
3659
3666
|
|
|
3660
|
-
if gui !=
|
|
3667
|
+
if gui != None:
|
|
3661
3668
|
# If we have our first gui selection, store it
|
|
3662
3669
|
if self.pylab_gui_select is None:
|
|
3663
3670
|
self.pylab_gui_select = gui
|
|
@@ -1506,7 +1506,7 @@ class ExecutionMagics(Magics):
|
|
|
1506
1506
|
@line_cell_magic
|
|
1507
1507
|
def code_wrap(self, line, cell=None):
|
|
1508
1508
|
"""
|
|
1509
|
-
Simple magic to quickly define a code transformer for all IPython's future
|
|
1509
|
+
Simple magic to quickly define a code transformer for all IPython's future input.
|
|
1510
1510
|
|
|
1511
1511
|
``__code__`` and ``__ret__`` are special variable that represent the code to run
|
|
1512
1512
|
and the value of the last expression of ``__code__`` respectively.
|
|
@@ -18,19 +18,19 @@ from IPython.core import magic_arguments
|
|
|
18
18
|
from IPython.core.magic import Magics, magics_class, line_magic
|
|
19
19
|
from IPython.testing.skipdoctest import skip_doctest
|
|
20
20
|
from warnings import warn
|
|
21
|
-
from IPython.core.pylabtools import backends
|
|
22
21
|
|
|
23
22
|
#-----------------------------------------------------------------------------
|
|
24
23
|
# Magic implementation classes
|
|
25
24
|
#-----------------------------------------------------------------------------
|
|
26
25
|
|
|
27
26
|
magic_gui_arg = magic_arguments.argument(
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
"gui",
|
|
28
|
+
nargs="?",
|
|
29
|
+
help="""Name of the matplotlib backend to use such as 'qt' or 'widget'.
|
|
30
30
|
If given, the corresponding matplotlib backend is used,
|
|
31
31
|
otherwise it will be matplotlib's default
|
|
32
32
|
(which you can set in your matplotlib config file).
|
|
33
|
-
"""
|
|
33
|
+
""",
|
|
34
34
|
)
|
|
35
35
|
|
|
36
36
|
|
|
@@ -93,8 +93,12 @@ class PylabMagics(Magics):
|
|
|
93
93
|
"""
|
|
94
94
|
args = magic_arguments.parse_argstring(self.matplotlib, line)
|
|
95
95
|
if args.list:
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
from IPython.core.pylabtools import _list_matplotlib_backends_and_gui_loops
|
|
97
|
+
|
|
98
|
+
print(
|
|
99
|
+
"Available matplotlib backends: %s"
|
|
100
|
+
% _list_matplotlib_backends_and_gui_loops()
|
|
101
|
+
)
|
|
98
102
|
else:
|
|
99
103
|
gui, backend = self.shell.enable_matplotlib(args.gui.lower() if isinstance(args.gui, str) else args.gui)
|
|
100
104
|
self._show_matplotlib_backend(args.gui, backend)
|