ipython 8.22.2__tar.gz → 8.23.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.23.0}/IPython/core/guarded_eval.py +183 -45
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/basic.py +3 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/execution.py +1 -1
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/release.py +2 -2
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_guarded_eval.py +192 -9
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-8.22.2/ipython.egg-info → ipython-8.23.0}/PKG-INFO +5 -3
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version8.rst +31 -0
- {ipython-8.22.2 → ipython-8.23.0/ipython.egg-info}/PKG-INFO +5 -3
- {ipython-8.22.2 → ipython-8.23.0}/ipython.egg-info/SOURCES.txt +0 -1
- {ipython-8.22.2 → ipython-8.23.0}/ipython.egg-info/requires.txt +7 -4
- {ipython-8.22.2 → ipython-8.23.0}/pyproject.toml +5 -2
- ipython-8.22.2/docs/source/development/parallel_connections.rst +0 -8
- {ipython-8.22.2 → ipython-8.23.0}/.flake8 +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/.mailmap +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/.pre-commit-config.yaml +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/COPYING.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/__main__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/conftest.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/consoleapp.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/alias.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/application.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/async_helpers.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/autocall.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/compilerop.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/completer.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/completerlib.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/crashhandler.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/debugger.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/display.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/display_functions.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/display_trap.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/displayhook.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/displaypub.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/error.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/events.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/excolors.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/extensions.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/formatters.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/getipython.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/history.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/historyapp.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/hooks.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/inputsplitter.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/inputtransformer.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/interactiveshell.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/logger.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/macro.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magic.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/auto.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/code.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/config.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/display.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/extension.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/history.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/logging.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/osm.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/magics/script.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/oinspect.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/page.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/payload.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/payloadpage.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/prefilter.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/profileapp.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/profiledir.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/prompts.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/pylabtools.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/shellapp.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/splitinput.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/2x2.jpg +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/2x2.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/bad_all.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/nonascii.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/nonascii2.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/print_argv.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/refbug.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/simpleerr.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/tclass.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_alias.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_application.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_async_helpers.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_autocall.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_compilerop.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_completer.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_completerlib.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_debugger.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_display.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_displayhook.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_events.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_extension.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_formatters.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_handlers.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_history.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_hooks.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_imports.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_inputsplitter.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_inputtransformer.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_interactiveshell.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_iplib.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_logger.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_magic.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_magic_arguments.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_magic_terminal.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_oinspect.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_page.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_paths.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_prefilter.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_profile.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_prompts.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_pylabtools.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_run.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_shellapp.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_splitinput.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/tests/test_ultratb.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/ultratb.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/core/usage.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/display.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/extensions/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/extensions/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/extensions/tests/test_autoreload.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/extensions/tests/test_storemagic.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/external/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/external/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/external/tests/test_qt_loaders.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/clipboard.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/deepreload.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/demo.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/display.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/guisupport.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/latextools.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/lexers.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/pretty.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test.wav +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_clipboard.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_deepreload.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_display.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_editorhooks.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_imports.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_latextools.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_lexers.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_pretty.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/lib/tests/test_pygments.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/paths.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/py.typed +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/console.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/debugger.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/embed.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/interactiveshell.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/magics.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/prompts.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/tests/test_embed.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/tests/test_help.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/decorators.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/README.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/tests/test_decorators.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/tests/test_ipunittest.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/tests/test_tools.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/testing/tools.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/tests/cve.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/_process_common.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/capture.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/colorable.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/coloransi.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/contexts.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/daemonize.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/data.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/decorators.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/dir2.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/docs.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/encoding.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/eventful.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/frame.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/generics.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/importstring.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/io.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/localinterfaces.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/log.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/module_paths.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/openpy.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/path.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/process.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/py3compat.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/sentinel.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/shimmodule.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/signatures.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tempdir.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/terminal.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_capture.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_decorators.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_deprecated.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_dir2.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_imports.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_importstring.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_io.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_module_paths.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_openpy.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_path.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_process.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_pycolorize.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_shimmodule.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_sysinfo.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_tempdir.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_text.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_tokenutil.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tests/test_wildcard.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/text.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/timing.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/traitlets.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/tz.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/ulinecache.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/version.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/IPython/utils/wildcard.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/LICENSE +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/MANIFEST.in +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/README.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/_build_meta.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/Makefile +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/README.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/autogen_api.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/autogen_config.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/autogen_magics.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/make.cmd +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/man/ipython.1 +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/requirements.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_static/logo.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/about/history.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/about/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/api/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/conf.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/details.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/integrating.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/intro.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/options/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/coredev/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/config.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/execution.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/kernels.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/lexer.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/messaging.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/parallel_messages.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/pycompat.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/install/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/install/install.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/figs/besselj.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/figs/colors_dark.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/figs/jn.html +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/figs/jn.xhtml +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/links.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/overview.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/parallel/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/sphinxext.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/sphinxext/github.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/docs/sphinxext/magics.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/Embedding/Index.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Index.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/data/flare.json +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/Index.ipynb +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/images/FrontendKernel.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/images/animation.m4v +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/images/ipython_logo.png +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/images/python_logo.svg +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/long_description.rst +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/scripts/ipython.ico +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/scripts/ipython_nb.ico +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/setup.cfg +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/setup.py +0 -0
- {ipython-8.22.2 → ipython-8.23.0}/setupbase.py +0 -0
|
@@ -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"),
|
|
@@ -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.
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
# release. 'dev' as a _version_extra string means this is a development
|
|
17
17
|
# version
|
|
18
18
|
_version_major = 8
|
|
19
|
-
_version_minor =
|
|
20
|
-
_version_patch =
|
|
19
|
+
_version_minor = 23
|
|
20
|
+
_version_patch = 0
|
|
21
21
|
_version_extra = ".dev"
|
|
22
22
|
# _version_extra = "rc1"
|
|
23
23
|
_version_extra = "" # Uncomment this for full releases
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
import sys
|
|
1
2
|
from contextlib import contextmanager
|
|
2
|
-
from typing import
|
|
3
|
+
from typing import (
|
|
4
|
+
Annotated,
|
|
5
|
+
AnyStr,
|
|
6
|
+
NamedTuple,
|
|
7
|
+
Literal,
|
|
8
|
+
NewType,
|
|
9
|
+
Optional,
|
|
10
|
+
Protocol,
|
|
11
|
+
TypeGuard,
|
|
12
|
+
Union,
|
|
13
|
+
TypedDict,
|
|
14
|
+
)
|
|
3
15
|
from functools import partial
|
|
4
16
|
from IPython.core.guarded_eval import (
|
|
5
17
|
EvaluationContext,
|
|
@@ -11,6 +23,17 @@ from IPython.testing import decorators as dec
|
|
|
11
23
|
import pytest
|
|
12
24
|
|
|
13
25
|
|
|
26
|
+
if sys.version_info < (3, 11):
|
|
27
|
+
from typing_extensions import Self, LiteralString
|
|
28
|
+
else:
|
|
29
|
+
from typing import Self, LiteralString
|
|
30
|
+
|
|
31
|
+
if sys.version_info < (3, 12):
|
|
32
|
+
from typing_extensions import TypeAliasType
|
|
33
|
+
else:
|
|
34
|
+
from typing import TypeAliasType
|
|
35
|
+
|
|
36
|
+
|
|
14
37
|
def create_context(evaluation: str, **kwargs):
|
|
15
38
|
return EvaluationContext(locals=kwargs, globals={}, evaluation=evaluation)
|
|
16
39
|
|
|
@@ -267,23 +290,183 @@ class CallCreatesBuiltin:
|
|
|
267
290
|
return frozenset()
|
|
268
291
|
|
|
269
292
|
|
|
293
|
+
class HasStaticMethod:
|
|
294
|
+
@staticmethod
|
|
295
|
+
def static_method() -> HeapType:
|
|
296
|
+
return HeapType()
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
class InitReturnsFrozenset:
|
|
300
|
+
def __new__(self) -> frozenset: # type:ignore[misc]
|
|
301
|
+
return frozenset()
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
class StringAnnotation:
|
|
305
|
+
def heap(self) -> "HeapType":
|
|
306
|
+
return HeapType()
|
|
307
|
+
|
|
308
|
+
def copy(self) -> "StringAnnotation":
|
|
309
|
+
return StringAnnotation()
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
CustomIntType = NewType("CustomIntType", int)
|
|
313
|
+
CustomHeapType = NewType("CustomHeapType", HeapType)
|
|
314
|
+
IntTypeAlias = TypeAliasType("IntTypeAlias", int)
|
|
315
|
+
HeapTypeAlias = TypeAliasType("HeapTypeAlias", HeapType)
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
class TestProtocol(Protocol):
|
|
319
|
+
def test_method(self) -> bool:
|
|
320
|
+
pass
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
class TestProtocolImplementer(TestProtocol):
|
|
324
|
+
def test_method(self) -> bool:
|
|
325
|
+
return True
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
class Movie(TypedDict):
|
|
329
|
+
name: str
|
|
330
|
+
year: int
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
class SpecialTyping:
|
|
334
|
+
def custom_int_type(self) -> CustomIntType:
|
|
335
|
+
return CustomIntType(1)
|
|
336
|
+
|
|
337
|
+
def custom_heap_type(self) -> CustomHeapType:
|
|
338
|
+
return CustomHeapType(HeapType())
|
|
339
|
+
|
|
340
|
+
# TODO: remove type:ignore comment once mypy
|
|
341
|
+
# supports explicit calls to `TypeAliasType`, see:
|
|
342
|
+
# https://github.com/python/mypy/issues/16614
|
|
343
|
+
def int_type_alias(self) -> IntTypeAlias: # type:ignore[valid-type]
|
|
344
|
+
return 1
|
|
345
|
+
|
|
346
|
+
def heap_type_alias(self) -> HeapTypeAlias: # type:ignore[valid-type]
|
|
347
|
+
return 1
|
|
348
|
+
|
|
349
|
+
def literal(self) -> Literal[False]:
|
|
350
|
+
return False
|
|
351
|
+
|
|
352
|
+
def literal_string(self) -> LiteralString:
|
|
353
|
+
return "test"
|
|
354
|
+
|
|
355
|
+
def self(self) -> Self:
|
|
356
|
+
return self
|
|
357
|
+
|
|
358
|
+
def any_str(self, x: AnyStr) -> AnyStr:
|
|
359
|
+
return x
|
|
360
|
+
|
|
361
|
+
def annotated(self) -> Annotated[float, "positive number"]:
|
|
362
|
+
return 1
|
|
363
|
+
|
|
364
|
+
def annotated_self(self) -> Annotated[Self, "self with metadata"]:
|
|
365
|
+
self._metadata = "test"
|
|
366
|
+
return self
|
|
367
|
+
|
|
368
|
+
def int_type_guard(self, x) -> TypeGuard[int]:
|
|
369
|
+
return isinstance(x, int)
|
|
370
|
+
|
|
371
|
+
def optional_float(self) -> Optional[float]:
|
|
372
|
+
return 1.0
|
|
373
|
+
|
|
374
|
+
def union_str_and_int(self) -> Union[str, int]:
|
|
375
|
+
return ""
|
|
376
|
+
|
|
377
|
+
def protocol(self) -> TestProtocol:
|
|
378
|
+
return TestProtocolImplementer()
|
|
379
|
+
|
|
380
|
+
def typed_dict(self) -> Movie:
|
|
381
|
+
return {"name": "The Matrix", "year": 1999}
|
|
382
|
+
|
|
383
|
+
|
|
270
384
|
@pytest.mark.parametrize(
|
|
271
|
-
"data,
|
|
385
|
+
"data,code,expected,equality",
|
|
272
386
|
[
|
|
273
|
-
[[1, 2, 3], "data.index(2)",
|
|
274
|
-
[{"a": 1}, "data.keys().isdisjoint({})",
|
|
275
|
-
[
|
|
276
|
-
[
|
|
387
|
+
[[1, 2, 3], "data.index(2)", 1, True],
|
|
388
|
+
[{"a": 1}, "data.keys().isdisjoint({})", True, True],
|
|
389
|
+
[StringAnnotation(), "data.heap()", HeapType, False],
|
|
390
|
+
[StringAnnotation(), "data.copy()", StringAnnotation, False],
|
|
391
|
+
# test cases for `__call__`
|
|
392
|
+
[CallCreatesHeapType(), "data()", HeapType, False],
|
|
393
|
+
[CallCreatesBuiltin(), "data()", frozenset, False],
|
|
394
|
+
# Test cases for `__init__`
|
|
395
|
+
[HeapType, "data()", HeapType, False],
|
|
396
|
+
[InitReturnsFrozenset, "data()", frozenset, False],
|
|
397
|
+
[HeapType(), "data.__class__()", HeapType, False],
|
|
398
|
+
# supported special cases for typing
|
|
399
|
+
[SpecialTyping(), "data.custom_int_type()", int, False],
|
|
400
|
+
[SpecialTyping(), "data.custom_heap_type()", HeapType, False],
|
|
401
|
+
[SpecialTyping(), "data.int_type_alias()", int, False],
|
|
402
|
+
[SpecialTyping(), "data.heap_type_alias()", HeapType, False],
|
|
403
|
+
[SpecialTyping(), "data.self()", SpecialTyping, False],
|
|
404
|
+
[SpecialTyping(), "data.literal()", False, True],
|
|
405
|
+
[SpecialTyping(), "data.literal_string()", str, False],
|
|
406
|
+
[SpecialTyping(), "data.any_str('a')", str, False],
|
|
407
|
+
[SpecialTyping(), "data.any_str(b'a')", bytes, False],
|
|
408
|
+
[SpecialTyping(), "data.annotated()", float, False],
|
|
409
|
+
[SpecialTyping(), "data.annotated_self()", SpecialTyping, False],
|
|
410
|
+
[SpecialTyping(), "data.int_type_guard()", int, False],
|
|
411
|
+
# test cases for static methods
|
|
412
|
+
[HasStaticMethod, "data.static_method()", HeapType, False],
|
|
277
413
|
],
|
|
278
414
|
)
|
|
279
|
-
def test_evaluates_calls(data,
|
|
280
|
-
context = limited(data=data)
|
|
281
|
-
value = guarded_eval(
|
|
415
|
+
def test_evaluates_calls(data, code, expected, equality):
|
|
416
|
+
context = limited(data=data, HeapType=HeapType, StringAnnotation=StringAnnotation)
|
|
417
|
+
value = guarded_eval(code, context)
|
|
282
418
|
if equality:
|
|
283
419
|
assert value == expected
|
|
284
420
|
else:
|
|
285
421
|
assert isinstance(value, expected)
|
|
286
422
|
|
|
423
|
+
|
|
424
|
+
@pytest.mark.parametrize(
|
|
425
|
+
"data,code,expected_attributes",
|
|
426
|
+
[
|
|
427
|
+
[SpecialTyping(), "data.optional_float()", ["is_integer"]],
|
|
428
|
+
[
|
|
429
|
+
SpecialTyping(),
|
|
430
|
+
"data.union_str_and_int()",
|
|
431
|
+
["capitalize", "as_integer_ratio"],
|
|
432
|
+
],
|
|
433
|
+
[SpecialTyping(), "data.protocol()", ["test_method"]],
|
|
434
|
+
[SpecialTyping(), "data.typed_dict()", ["keys", "values", "items"]],
|
|
435
|
+
],
|
|
436
|
+
)
|
|
437
|
+
def test_mocks_attributes_of_call_results(data, code, expected_attributes):
|
|
438
|
+
context = limited(data=data, HeapType=HeapType, StringAnnotation=StringAnnotation)
|
|
439
|
+
result = guarded_eval(code, context)
|
|
440
|
+
for attr in expected_attributes:
|
|
441
|
+
assert hasattr(result, attr)
|
|
442
|
+
assert attr in dir(result)
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
@pytest.mark.parametrize(
|
|
446
|
+
"data,code,expected_items",
|
|
447
|
+
[
|
|
448
|
+
[SpecialTyping(), "data.typed_dict()", {"year": int, "name": str}],
|
|
449
|
+
],
|
|
450
|
+
)
|
|
451
|
+
def test_mocks_items_of_call_results(data, code, expected_items):
|
|
452
|
+
context = limited(data=data, HeapType=HeapType, StringAnnotation=StringAnnotation)
|
|
453
|
+
result = guarded_eval(code, context)
|
|
454
|
+
ipython_keys = result._ipython_key_completions_()
|
|
455
|
+
for key, value in expected_items.items():
|
|
456
|
+
assert isinstance(result[key], value)
|
|
457
|
+
assert key in ipython_keys
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
@pytest.mark.parametrize(
|
|
461
|
+
"data,bad",
|
|
462
|
+
[
|
|
463
|
+
[[1, 2, 3], "data.append(4)"],
|
|
464
|
+
[{"a": 1}, "data.update()"],
|
|
465
|
+
],
|
|
466
|
+
)
|
|
467
|
+
def test_rejects_calls_with_side_effects(data, bad):
|
|
468
|
+
context = limited(data=data)
|
|
469
|
+
|
|
287
470
|
with pytest.raises(GuardRejection):
|
|
288
471
|
guarded_eval(bad, context)
|
|
289
472
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# GENERATED BY setup.py
|
|
2
|
-
commit = "
|
|
2
|
+
commit = "5e7c4a991"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ipython
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.23.0
|
|
4
4
|
Summary: IPython: Productive Interactive Computing
|
|
5
5
|
Author: The IPython Development Team
|
|
6
6
|
Author-email: ipython-dev@python.org
|
|
@@ -36,7 +36,7 @@ Requires-Dist: prompt_toolkit<3.1.0,>=3.0.41
|
|
|
36
36
|
Requires-Dist: pygments>=2.4.0
|
|
37
37
|
Requires-Dist: stack_data
|
|
38
38
|
Requires-Dist: traitlets>=5.13.0
|
|
39
|
-
Requires-Dist: typing_extensions; python_version < "3.
|
|
39
|
+
Requires-Dist: typing_extensions; python_version < "3.12"
|
|
40
40
|
Provides-Extra: black
|
|
41
41
|
Requires-Dist: black; extra == "black"
|
|
42
42
|
Provides-Extra: doc
|
|
@@ -78,8 +78,10 @@ Requires-Dist: nbformat; extra == "test-extra"
|
|
|
78
78
|
Requires-Dist: numpy>=1.23; extra == "test-extra"
|
|
79
79
|
Requires-Dist: pandas; extra == "test-extra"
|
|
80
80
|
Requires-Dist: trio; extra == "test-extra"
|
|
81
|
+
Provides-Extra: matplotlib
|
|
82
|
+
Requires-Dist: matplotlib; extra == "matplotlib"
|
|
81
83
|
Provides-Extra: all
|
|
82
|
-
Requires-Dist: ipython[black,doc,kernel,nbconvert,nbformat,notebook,parallel,qtconsole
|
|
84
|
+
Requires-Dist: ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]; extra == "all"
|
|
83
85
|
Requires-Dist: ipython[test,test_extra]; extra == "all"
|
|
84
86
|
|
|
85
87
|
IPython provides a rich toolkit to help you make the most out of using Python
|
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
8.x Series
|
|
3
3
|
============
|
|
4
4
|
|
|
5
|
+
.. _version 8.23:
|
|
6
|
+
|
|
7
|
+
IPython 8.23
|
|
8
|
+
============
|
|
9
|
+
|
|
10
|
+
Super tiny release of IPython on Sunday – a bit later than usual, which is also
|
|
11
|
+
`🏳️⚧️ International Transgender Day of Visibility🏳️⚧️
|
|
12
|
+
<https://en.wikipedia.org/wiki/International_Transgender_Day_of_Visibility>`_ –
|
|
13
|
+
so a though for you on this day, you matter and you are valid [1]_.
|
|
14
|
+
|
|
15
|
+
This is a minuscule release with only 5 Pull requests.
|
|
16
|
+
|
|
17
|
+
Main change is :ghpull:`14357` which improve inference from return type
|
|
18
|
+
annotations in completer and the introduction of the optional target
|
|
19
|
+
``ipython[matplotlib]`` to explicitly request the matplotlib optional
|
|
20
|
+
dependencies.
|
|
21
|
+
|
|
22
|
+
As usual you can find the full list of PRs on GitHub under `the 8.23
|
|
23
|
+
<https://github.com/ipython/ipython/milestone/130?closed=1>`__ milestone.
|
|
24
|
+
|
|
25
|
+
Thanks
|
|
26
|
+
------
|
|
27
|
+
|
|
28
|
+
Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
|
|
29
|
+
work on IPython and related libraries.
|
|
30
|
+
|
|
31
|
+
|
|
5
32
|
.. _version 8.22:
|
|
6
33
|
|
|
7
34
|
IPython 8.22, 8.22.1 and 8.22.2
|
|
@@ -2204,3 +2231,7 @@ The following attribute/methods have been removed::
|
|
|
2204
2231
|
- IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
|
|
2205
2232
|
- IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
|
|
2206
2233
|
- IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
|
|
2234
|
+
|
|
2235
|
+
------
|
|
2236
|
+
|
|
2237
|
+
.. [1] If this make you incomfortable feel free to not use IPython 8.23.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ipython
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.23.0
|
|
4
4
|
Summary: IPython: Productive Interactive Computing
|
|
5
5
|
Author: The IPython Development Team
|
|
6
6
|
Author-email: ipython-dev@python.org
|
|
@@ -36,7 +36,7 @@ Requires-Dist: prompt_toolkit<3.1.0,>=3.0.41
|
|
|
36
36
|
Requires-Dist: pygments>=2.4.0
|
|
37
37
|
Requires-Dist: stack_data
|
|
38
38
|
Requires-Dist: traitlets>=5.13.0
|
|
39
|
-
Requires-Dist: typing_extensions; python_version < "3.
|
|
39
|
+
Requires-Dist: typing_extensions; python_version < "3.12"
|
|
40
40
|
Provides-Extra: black
|
|
41
41
|
Requires-Dist: black; extra == "black"
|
|
42
42
|
Provides-Extra: doc
|
|
@@ -78,8 +78,10 @@ Requires-Dist: nbformat; extra == "test-extra"
|
|
|
78
78
|
Requires-Dist: numpy>=1.23; extra == "test-extra"
|
|
79
79
|
Requires-Dist: pandas; extra == "test-extra"
|
|
80
80
|
Requires-Dist: trio; extra == "test-extra"
|
|
81
|
+
Provides-Extra: matplotlib
|
|
82
|
+
Requires-Dist: matplotlib; extra == "matplotlib"
|
|
81
83
|
Provides-Extra: all
|
|
82
|
-
Requires-Dist: ipython[black,doc,kernel,nbconvert,nbformat,notebook,parallel,qtconsole
|
|
84
|
+
Requires-Dist: ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]; extra == "all"
|
|
83
85
|
Requires-Dist: ipython[test,test_extra]; extra == "all"
|
|
84
86
|
|
|
85
87
|
IPython provides a rich toolkit to help you make the most out of using Python
|
|
@@ -381,7 +381,6 @@ docs/source/development/inputhook_app.rst
|
|
|
381
381
|
docs/source/development/kernels.rst
|
|
382
382
|
docs/source/development/lexer.rst
|
|
383
383
|
docs/source/development/messaging.rst
|
|
384
|
-
docs/source/development/parallel_connections.rst
|
|
385
384
|
docs/source/development/parallel_messages.rst
|
|
386
385
|
docs/source/development/pycompat.rst
|
|
387
386
|
docs/source/development/wrapperkernels.rst
|