ipython 8.32.0__tar.gz → 8.33.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.32.0 → ipython-8.33.0}/IPython/__init__.py +3 -3
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/release.py +1 -1
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/interactiveshell.py +36 -9
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/qt.py +15 -17
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/shortcuts/__init__.py +4 -3
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/shortcuts/auto_suggest.py +31 -22
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-8.32.0/ipython.egg-info → ipython-8.33.0}/PKG-INFO +1 -1
- {ipython-8.32.0 → ipython-8.33.0}/docs/autogen_config.py +0 -9
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/details.rst +98 -3
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/options/index.rst +5 -7
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version8.rst +7 -7
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Index.ipynb +10 -10
- {ipython-8.32.0 → ipython-8.33.0}/examples/Index.ipynb +1 -1
- {ipython-8.32.0 → ipython-8.33.0}/examples/auto_suggest_llm.py +21 -5
- {ipython-8.32.0 → ipython-8.33.0/ipython.egg-info}/PKG-INFO +1 -1
- {ipython-8.32.0 → ipython-8.33.0}/.flake8 +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/.mailmap +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/.pre-commit-config.yaml +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/COPYING.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/__main__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/conftest.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/consoleapp.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/alias.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/application.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/async_helpers.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/autocall.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/compilerop.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/completer.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/completerlib.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/crashhandler.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/debugger.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/display.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/display_functions.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/display_trap.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/displayhook.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/displaypub.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/error.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/events.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/excolors.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/extensions.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/formatters.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/getipython.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/guarded_eval.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/history.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/historyapp.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/hooks.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/inputsplitter.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/inputtransformer.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/interactiveshell.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/logger.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/macro.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magic.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/auto.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/basic.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/code.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/config.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/display.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/execution.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/extension.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/history.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/logging.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/osm.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/magics/script.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/oinspect.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/page.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/payload.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/payloadpage.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/prefilter.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/profileapp.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/profiledir.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/prompts.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/pylabtools.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/shellapp.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/splitinput.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/2x2.jpg +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/2x2.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/bad_all.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/nonascii.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/nonascii2.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/print_argv.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/refbug.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/simpleerr.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/tclass.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_alias.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_application.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_async_helpers.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_autocall.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_compilerop.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_completer.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_completerlib.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_debugger.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_display.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_displayhook.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_events.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_extension.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_formatters.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_guarded_eval.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_handlers.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_history.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_hooks.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_imports.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_inputsplitter.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_inputtransformer.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_interactiveshell.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_iplib.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_logger.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_magic.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_magic_arguments.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_magic_terminal.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_oinspect.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_page.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_paths.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_prefilter.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_profile.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_prompts.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_pylabtools.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_run.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_shellapp.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_splitinput.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/tests/test_ultratb.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/ultratb.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/core/usage.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/display.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/extensions/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/extensions/tests/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/extensions/tests/test_autoreload.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/extensions/tests/test_storemagic.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/external/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/external/tests/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/external/tests/test_qt_loaders.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/clipboard.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/deepreload.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/demo.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/display.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/guisupport.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/latextools.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/lexers.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/pretty.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test.wav +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_clipboard.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_deepreload.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_display.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_editorhooks.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_imports.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_latextools.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_lexers.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_pretty.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/lib/tests/test_pygments.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/paths.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/py.typed +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/console.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/debugger.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/embed.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/magics.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/prompts.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/tests/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/tests/test_embed.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/tests/test_help.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/decorators.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/README.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/tests/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/tests/test_decorators.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/tests/test_ipunittest.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/tests/test_tools.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/testing/tools.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/tests/cve.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/_process_common.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/capture.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/colorable.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/coloransi.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/contexts.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/daemonize.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/data.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/decorators.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/dir2.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/docs.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/encoding.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/eventful.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/frame.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/generics.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/importstring.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/io.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/localinterfaces.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/log.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/module_paths.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/openpy.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/path.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/process.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/py3compat.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/sentinel.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/shimmodule.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/signatures.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tempdir.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/terminal.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_capture.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_decorators.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_deprecated.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_dir2.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_imports.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_importstring.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_io.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_module_paths.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_openpy.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_path.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_process.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_pycolorize.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_shimmodule.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_sysinfo.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_tempdir.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_text.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_tokenutil.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tests/test_wildcard.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/text.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/timing.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/traitlets.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/tz.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/ulinecache.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/version.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/IPython/utils/wildcard.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/LICENSE +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/MANIFEST.in +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/README.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/_build_meta.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/Makefile +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/README.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/autogen_api.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/autogen_magics.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/make.cmd +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/man/ipython.1 +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/requirements.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_static/logo.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/about/history.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/about/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/api/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/conf.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/integrating.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/intro.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/coredev/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/config.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/execution.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/kernels.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/lexer.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/messaging.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/pycompat.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/install/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/install/install.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/figs/besselj.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/figs/colors_dark.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/figs/jn.html +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/figs/jn.xhtml +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/links.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/overview.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/parallel/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/sphinx.toml +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/sphinxext.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/sphinxext/github.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/docs/sphinxext/magics.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/Embedding/Index.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/data/flare.json +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/images/FrontendKernel.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/images/animation.m4v +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/images/ipython_logo.png +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/images/python_logo.svg +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/ipython.egg-info/SOURCES.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/ipython.egg-info/requires.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/long_description.rst +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/pyproject.toml +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/scripts/ipython.ico +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/scripts/ipython_nb.ico +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/setup.cfg +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/setup.py +0 -0
- {ipython-8.32.0 → ipython-8.33.0}/setupbase.py +0 -0
|
@@ -87,7 +87,7 @@ def embed_kernel(module=None, local_ns=None, **kwargs):
|
|
|
87
87
|
**kwargs : various, optional
|
|
88
88
|
Further keyword args are relayed to the IPKernelApp constructor,
|
|
89
89
|
such as `config`, a traitlets :class:`Config` object (see :ref:`configure_start_ipython`),
|
|
90
|
-
allowing configuration of the kernel
|
|
90
|
+
allowing configuration of the kernel. Will only have an effect
|
|
91
91
|
on the first embed_kernel call for a given process.
|
|
92
92
|
"""
|
|
93
93
|
|
|
@@ -95,7 +95,7 @@ def embed_kernel(module=None, local_ns=None, **kwargs):
|
|
|
95
95
|
if module is None:
|
|
96
96
|
module = caller_module
|
|
97
97
|
if local_ns is None:
|
|
98
|
-
local_ns = caller_locals
|
|
98
|
+
local_ns = dict(**caller_locals)
|
|
99
99
|
|
|
100
100
|
# Only import .zmq when we really need it
|
|
101
101
|
from ipykernel.embed import embed_kernel as real_embed_kernel
|
|
@@ -150,7 +150,7 @@ def start_kernel(argv=None, **kwargs):
|
|
|
150
150
|
**kwargs : various, optional
|
|
151
151
|
Any other kwargs will be passed to the Application constructor,
|
|
152
152
|
such as `config`, a traitlets :class:`Config` object (see :ref:`configure_start_ipython`),
|
|
153
|
-
allowing configuration of the kernel
|
|
153
|
+
allowing configuration of the kernel.
|
|
154
154
|
"""
|
|
155
155
|
import warnings
|
|
156
156
|
|
|
@@ -426,6 +426,14 @@ class TerminalInteractiveShell(InteractiveShell):
|
|
|
426
426
|
allow_none=True,
|
|
427
427
|
).tag(config=True)
|
|
428
428
|
|
|
429
|
+
llm_constructor_kwargs = Dict(
|
|
430
|
+
{},
|
|
431
|
+
help="""
|
|
432
|
+
Extra arguments to pass to `llm_provider_class` constructor.
|
|
433
|
+
|
|
434
|
+
This is used to – for example – set the `model_id`""",
|
|
435
|
+
).tag(config=True)
|
|
436
|
+
|
|
429
437
|
llm_provider_class = DottedObjectName(
|
|
430
438
|
None,
|
|
431
439
|
allow_none=True,
|
|
@@ -471,7 +479,7 @@ class TerminalInteractiveShell(InteractiveShell):
|
|
|
471
479
|
# LLM stuff are all Provisional in 8.32
|
|
472
480
|
if self.llm_provider_class:
|
|
473
481
|
llm_provider_constructor = import_item(self.llm_provider_class)
|
|
474
|
-
llm_provider = llm_provider_constructor()
|
|
482
|
+
llm_provider = llm_provider_constructor(**self.llm_constructor_kwargs)
|
|
475
483
|
else:
|
|
476
484
|
llm_provider = None
|
|
477
485
|
self.auto_suggest = NavigableAutoSuggestFromHistory()
|
|
@@ -508,23 +516,23 @@ class TerminalInteractiveShell(InteractiveShell):
|
|
|
508
516
|
"create": Bool(False),
|
|
509
517
|
},
|
|
510
518
|
),
|
|
511
|
-
help="""
|
|
519
|
+
help="""
|
|
520
|
+
Add, disable or modifying shortcuts.
|
|
512
521
|
|
|
513
522
|
Each entry on the list should be a dictionary with ``command`` key
|
|
514
523
|
identifying the target function executed by the shortcut and at least
|
|
515
524
|
one of the following:
|
|
516
525
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
526
|
+
- ``match_keys``: list of keys used to match an existing shortcut,
|
|
527
|
+
- ``match_filter``: shortcut filter used to match an existing shortcut,
|
|
528
|
+
- ``new_keys``: list of keys to set,
|
|
529
|
+
- ``new_filter``: a new shortcut filter to set
|
|
521
530
|
|
|
522
531
|
The filters have to be composed of pre-defined verbs and joined by one
|
|
523
532
|
of the following conjunctions: ``&`` (and), ``|`` (or), ``~`` (not).
|
|
524
533
|
The pre-defined verbs are:
|
|
525
534
|
|
|
526
|
-
{}
|
|
527
|
-
|
|
535
|
+
{filters}
|
|
528
536
|
|
|
529
537
|
To disable a shortcut set ``new_keys`` to an empty list.
|
|
530
538
|
To add a shortcut add key ``create`` with value ``True``.
|
|
@@ -539,8 +547,27 @@ class TerminalInteractiveShell(InteractiveShell):
|
|
|
539
547
|
shortcuts) can be modified or disabled. The full list of shortcuts,
|
|
540
548
|
command identifiers and filters is available under
|
|
541
549
|
:ref:`terminal-shortcuts-list`.
|
|
550
|
+
|
|
551
|
+
Here is an example:
|
|
552
|
+
|
|
553
|
+
.. code::
|
|
554
|
+
|
|
555
|
+
c.TerminalInteractiveShell.shortcuts = [
|
|
556
|
+
{{
|
|
557
|
+
"new_keys": ["c-q"],
|
|
558
|
+
"command": "prompt_toolkit:named_commands.capitalize_word",
|
|
559
|
+
"create": True,
|
|
560
|
+
}},
|
|
561
|
+
{{
|
|
562
|
+
"new_keys": ["c-j"],
|
|
563
|
+
"command": "prompt_toolkit:named_commands.beginning_of_line",
|
|
564
|
+
"create": True,
|
|
565
|
+
}},
|
|
566
|
+
]
|
|
567
|
+
|
|
568
|
+
|
|
542
569
|
""".format(
|
|
543
|
-
"\n ".join([f"-
|
|
570
|
+
filters="\n ".join([f" - ``{k}``" for k in KEYBINDING_FILTERS])
|
|
544
571
|
),
|
|
545
572
|
).tag(config=True)
|
|
546
573
|
|
|
@@ -3,9 +3,11 @@ import os
|
|
|
3
3
|
from IPython.external.qt_for_kernel import QtCore, QtGui, enum_helper
|
|
4
4
|
from IPython import get_ipython
|
|
5
5
|
|
|
6
|
-
# If we create a QApplication, keep a reference to
|
|
7
|
-
# garbage collected.
|
|
6
|
+
# If we create a QApplication, QEventLoop, or a QTimer, keep a reference to them
|
|
7
|
+
# so that they don't get garbage collected or leak memory when created multiple times.
|
|
8
8
|
_appref = None
|
|
9
|
+
_eventloop = None
|
|
10
|
+
_timer = None
|
|
9
11
|
_already_warned = False
|
|
10
12
|
|
|
11
13
|
|
|
@@ -21,7 +23,7 @@ def _reclaim_excepthook():
|
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
def inputhook(context):
|
|
24
|
-
global _appref
|
|
26
|
+
global _appref, _eventloop, _timer
|
|
25
27
|
app = QtCore.QCoreApplication.instance()
|
|
26
28
|
if not app:
|
|
27
29
|
if sys.platform == 'linux':
|
|
@@ -48,6 +50,7 @@ def inputhook(context):
|
|
|
48
50
|
except AttributeError: # Only for Qt>=5.14.
|
|
49
51
|
pass
|
|
50
52
|
_appref = app = QtGui.QApplication([" "])
|
|
53
|
+
_eventloop = QtCore.QEventLoop(app)
|
|
51
54
|
|
|
52
55
|
# "reclaim" IPython sys.excepthook after event loop starts
|
|
53
56
|
# without this, it defaults back to BaseIPythonApplication.excepthook
|
|
@@ -55,18 +58,17 @@ def inputhook(context):
|
|
|
55
58
|
# formatting and look like "bug in IPython".
|
|
56
59
|
QtCore.QTimer.singleShot(0, _reclaim_excepthook)
|
|
57
60
|
|
|
58
|
-
event_loop = QtCore.QEventLoop(app)
|
|
59
|
-
|
|
60
61
|
if sys.platform == 'win32':
|
|
61
62
|
# The QSocketNotifier method doesn't appear to work on Windows.
|
|
62
63
|
# Use polling instead.
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
if _timer is None:
|
|
65
|
+
_timer = QtCore.QTimer()
|
|
66
|
+
_timer.timeout.connect(_eventloop.quit)
|
|
65
67
|
while not context.input_is_ready():
|
|
66
|
-
# NOTE: run the event loop, and after
|
|
67
|
-
|
|
68
|
-
_exec(
|
|
69
|
-
|
|
68
|
+
# NOTE: run the event loop, and after 10 ms, call `quit` to exit it.
|
|
69
|
+
_timer.start(10) # 10 ms
|
|
70
|
+
_exec(_eventloop)
|
|
71
|
+
_timer.stop()
|
|
70
72
|
else:
|
|
71
73
|
# On POSIX platforms, we can use a file descriptor to quit the event
|
|
72
74
|
# loop when there is input ready to read.
|
|
@@ -77,14 +79,10 @@ def inputhook(context):
|
|
|
77
79
|
# connect the callback we care about before we turn it on
|
|
78
80
|
# lambda is necessary as PyQT inspect the function signature to know
|
|
79
81
|
# what arguments to pass to. See https://github.com/ipython/ipython/pull/12355
|
|
80
|
-
notifier.activated.connect(lambda:
|
|
82
|
+
notifier.activated.connect(lambda: _eventloop.exit())
|
|
81
83
|
notifier.setEnabled(True)
|
|
82
84
|
# only start the event loop we are not already flipped
|
|
83
85
|
if not context.input_is_ready():
|
|
84
|
-
_exec(
|
|
86
|
+
_exec(_eventloop)
|
|
85
87
|
finally:
|
|
86
88
|
notifier.setEnabled(False)
|
|
87
|
-
|
|
88
|
-
# This makes sure that the event loop is garbage collected.
|
|
89
|
-
# See issue 14240.
|
|
90
|
-
event_loop.setParent(None)
|
|
@@ -24,9 +24,9 @@ from prompt_toolkit.key_binding.vi_state import InputMode, ViState
|
|
|
24
24
|
from prompt_toolkit.filters import Condition
|
|
25
25
|
|
|
26
26
|
from IPython.core.getipython import get_ipython
|
|
27
|
-
from
|
|
28
|
-
from
|
|
29
|
-
from
|
|
27
|
+
from . import auto_match as match
|
|
28
|
+
from . import auto_suggest
|
|
29
|
+
from .filters import filter_from_string
|
|
30
30
|
from IPython.utils.decorators import undoc
|
|
31
31
|
|
|
32
32
|
from prompt_toolkit.enums import DEFAULT_BUFFER
|
|
@@ -630,6 +630,7 @@ KEY_BINDINGS = [
|
|
|
630
630
|
]
|
|
631
631
|
|
|
632
632
|
UNASSIGNED_ALLOWED_COMMANDS = [
|
|
633
|
+
auto_suggest.llm_autosuggestion,
|
|
633
634
|
nc.beginning_of_buffer,
|
|
634
635
|
nc.end_of_buffer,
|
|
635
636
|
nc.end_of_line,
|
|
@@ -24,12 +24,6 @@ from IPython.utils.tokenutil import generate_tokens
|
|
|
24
24
|
|
|
25
25
|
from .filters import pass_through
|
|
26
26
|
|
|
27
|
-
try:
|
|
28
|
-
import jupyter_ai_magics
|
|
29
|
-
import jupyter_ai.completions.models as jai_models
|
|
30
|
-
except ModuleNotFoundError:
|
|
31
|
-
jai_models = None
|
|
32
|
-
|
|
33
27
|
|
|
34
28
|
def _get_query(document: Document):
|
|
35
29
|
return document.lines[document.cursor_position_row]
|
|
@@ -112,20 +106,27 @@ class AppendAutoSuggestionInAnyLine(Processor):
|
|
|
112
106
|
suggestions_longer_than_buffer: bool = (
|
|
113
107
|
len(suggestions) + ti.document.cursor_position_row > ti.document.line_count
|
|
114
108
|
)
|
|
109
|
+
if prompt_toolkit.VERSION < (3, 0, 49):
|
|
110
|
+
if len(suggestions) > 1 and prompt_toolkit.VERSION < (3, 0, 49):
|
|
111
|
+
if ti.lineno == ti.document.cursor_position_row:
|
|
112
|
+
return Transformation(
|
|
113
|
+
fragments=ti.fragments
|
|
114
|
+
+ [
|
|
115
|
+
(
|
|
116
|
+
"red",
|
|
117
|
+
"(Cannot show multiline suggestion; requires prompt_toolkit > 3.0.49)",
|
|
118
|
+
)
|
|
119
|
+
]
|
|
120
|
+
)
|
|
121
|
+
else:
|
|
122
|
+
return Transformation(fragments=ti.fragments)
|
|
123
|
+
elif len(suggestions) == 1:
|
|
124
|
+
if ti.lineno == ti.document.cursor_position_row:
|
|
125
|
+
return Transformation(
|
|
126
|
+
fragments=ti.fragments + [(self.style, suggestions[0])]
|
|
127
|
+
)
|
|
128
|
+
return Transformation(fragments=ti.fragments)
|
|
115
129
|
|
|
116
|
-
if len(suggestions) >= 1 and prompt_toolkit.VERSION < (3, 0, 49):
|
|
117
|
-
if ti.lineno == ti.document.cursor_position_row:
|
|
118
|
-
return Transformation(
|
|
119
|
-
fragments=ti.fragments
|
|
120
|
-
+ [
|
|
121
|
-
(
|
|
122
|
-
"red",
|
|
123
|
-
"(Cannot show multiline suggestion; requires prompt_toolkit > 3.0.49)",
|
|
124
|
-
)
|
|
125
|
-
]
|
|
126
|
-
)
|
|
127
|
-
else:
|
|
128
|
-
return Transformation(fragments=ti.fragments)
|
|
129
130
|
if delta == 0:
|
|
130
131
|
suggestion = suggestions[0]
|
|
131
132
|
return Transformation(fragments=ti.fragments + [(self.style, suggestion)])
|
|
@@ -325,6 +326,11 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
325
326
|
If there is a currently running llm task, it will cancel it.
|
|
326
327
|
"""
|
|
327
328
|
# we likely want to store the current cursor position, and cancel if the cursor has moved.
|
|
329
|
+
try:
|
|
330
|
+
import jupyter_ai_magics
|
|
331
|
+
import jupyter_ai.completions.models as jai_models
|
|
332
|
+
except ModuleNotFoundError:
|
|
333
|
+
jai_models = None
|
|
328
334
|
if not self._llm_provider:
|
|
329
335
|
warnings.warn("No LLM provider found, cannot trigger LLM completions")
|
|
330
336
|
return
|
|
@@ -374,6 +380,11 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
374
380
|
stream_inline_completions, I'm not sure it is the case for all
|
|
375
381
|
providers.
|
|
376
382
|
"""
|
|
383
|
+
try:
|
|
384
|
+
import jupyter_ai_magics
|
|
385
|
+
import jupyter_ai.completions.models as jai_models
|
|
386
|
+
except ModuleNotFoundError:
|
|
387
|
+
jai_models = None
|
|
377
388
|
|
|
378
389
|
request = jai_models.InlineCompletionRequest(
|
|
379
390
|
number=0,
|
|
@@ -404,9 +415,6 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
404
415
|
return
|
|
405
416
|
|
|
406
417
|
|
|
407
|
-
_MIN_LINES = 5
|
|
408
|
-
|
|
409
|
-
|
|
410
418
|
async def llm_autosuggestion(event: KeyPressEvent):
|
|
411
419
|
"""
|
|
412
420
|
Ask the AutoSuggester from history to delegate to ask an LLM for completion
|
|
@@ -417,6 +425,7 @@ async def llm_autosuggestion(event: KeyPressEvent):
|
|
|
417
425
|
Provisional as of 8.32, may change without warnigns
|
|
418
426
|
|
|
419
427
|
"""
|
|
428
|
+
_MIN_LINES = 5
|
|
420
429
|
provider = get_ipython().auto_suggest
|
|
421
430
|
if not isinstance(provider, NavigableAutoSuggestFromHistory):
|
|
422
431
|
return
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# GENERATED BY setup.py
|
|
2
|
-
commit = "
|
|
2
|
+
commit = "5ed988a91"
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import inspect
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from IPython.terminal.ipapp import TerminalIPythonApp
|
|
6
|
-
from ipykernel.kernelapp import IPKernelApp
|
|
7
6
|
from traitlets import Undefined
|
|
8
7
|
from collections import defaultdict
|
|
9
8
|
|
|
@@ -103,13 +102,9 @@ def write_doc(name, title, app, preamble=None):
|
|
|
103
102
|
trait_aliases = reverse_aliases(app)
|
|
104
103
|
filename = options / (name + ".rst")
|
|
105
104
|
with open(filename, "w", encoding="utf-8") as f:
|
|
106
|
-
f.write(".. _" + name + "_options:" + "\n\n")
|
|
107
|
-
f.write(title + "\n")
|
|
108
|
-
f.write(("=" * len(title)) + "\n")
|
|
109
105
|
f.write("\n")
|
|
110
106
|
if preamble is not None:
|
|
111
107
|
f.write(preamble + '\n\n')
|
|
112
|
-
#f.write(app.document_config_options())
|
|
113
108
|
|
|
114
109
|
for c in app._classes_inc_parents():
|
|
115
110
|
f.write(class_config_rst_doc(c, trait_aliases))
|
|
@@ -121,7 +116,3 @@ if __name__ == '__main__':
|
|
|
121
116
|
Path(generated).write_text("", encoding="utf-8")
|
|
122
117
|
|
|
123
118
|
write_doc('terminal', 'Terminal IPython options', TerminalIPythonApp())
|
|
124
|
-
write_doc('kernel', 'IPython kernel options', IPKernelApp(),
|
|
125
|
-
preamble=("These options can be used in :file:`ipython_kernel_config.py`. "
|
|
126
|
-
"The kernel also respects any options in `ipython_config.py`"),
|
|
127
|
-
)
|
|
@@ -1,6 +1,101 @@
|
|
|
1
|
-
|
|
2
|
-
Specific
|
|
3
|
-
|
|
1
|
+
==============================
|
|
2
|
+
Specific configuration details
|
|
3
|
+
==============================
|
|
4
|
+
|
|
5
|
+
.. _llm_suggestions:
|
|
6
|
+
|
|
7
|
+
LLM Suggestions
|
|
8
|
+
===============
|
|
9
|
+
|
|
10
|
+
Starting with 9.0, IPython will be able to use LLM providers to suggest code in
|
|
11
|
+
the terminal. This requires a recent version of prompt_toolkit in order to allow
|
|
12
|
+
multiline suggestions. There are currently a number of limitations, and feedback
|
|
13
|
+
on the API is welcome.
|
|
14
|
+
|
|
15
|
+
Unlike many of IPython features, this is not enabled by default and requires
|
|
16
|
+
multiple configuration options to be set to properly work:
|
|
17
|
+
|
|
18
|
+
- Set a keybinding to trigger LLM suggestions. Due to terminal limitations
|
|
19
|
+
across platforms and emulators, it is difficult to provide a default
|
|
20
|
+
keybinding. Note that not all keybindings are availables, in particular all
|
|
21
|
+
the `Ctrl-Enter`, `Alt-backslash` and `Ctrl-Shift-Enter` are not available
|
|
22
|
+
without integration with your terminal emulator.
|
|
23
|
+
|
|
24
|
+
- Chose a LLM `provider`, usually from Jupyter-AI. This will be the interface
|
|
25
|
+
between IPython itself, and the LLM – that may be local or in on a server.
|
|
26
|
+
|
|
27
|
+
- Configure said provider with models, API keys, etc – this will depend on the
|
|
28
|
+
provider, and you will have to refer to Jupyter-AI documentation, and/or your
|
|
29
|
+
LLM documenatation.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
While setting up IPython to use a real LLM, you can refer to
|
|
33
|
+
``examples/auto_suggest_llm.py`` that both provide an example of how to set up
|
|
34
|
+
IPython to use a Fake LLM provider, this can help ensure that the full setup is
|
|
35
|
+
working before switching to a real LLM provider.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
Setup a keybinding
|
|
39
|
+
------------------
|
|
40
|
+
|
|
41
|
+
You may want to refer on how to setup a keybinding in IPython, but in short you
|
|
42
|
+
want to bind the ``IPython:auto_suggest.llm_autosuggestion`` command to a
|
|
43
|
+
keybinding, and have it active only when the default buffer isi focused, and
|
|
44
|
+
when using the NavigableSuggestions suggestter (this is the default suggestter,
|
|
45
|
+
the one that is history and LLM aware). Thus the ``navigable_suggestions &
|
|
46
|
+
default_buffer_focused`` filter should be used.
|
|
47
|
+
|
|
48
|
+
Usually ``Ctrl-Q`` on macos is an available shortcut, note that is does use
|
|
49
|
+
``Ctrl``, and not ``Command``.
|
|
50
|
+
|
|
51
|
+
The following example will bind ``Ctrl-Q`` to the ``llm_autosuggestion``
|
|
52
|
+
command, with the suggested filter::
|
|
53
|
+
|
|
54
|
+
c.TerminalInteractiveShell.shortcuts = [
|
|
55
|
+
{
|
|
56
|
+
"new_keys": ["c-q"],
|
|
57
|
+
"command": "IPython:auto_suggest.llm_autosuggestion",
|
|
58
|
+
"new_filter": "navigable_suggestions & default_buffer_focused",
|
|
59
|
+
"create": True,
|
|
60
|
+
},
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
Choose a LLM provider
|
|
65
|
+
---------------------
|
|
66
|
+
|
|
67
|
+
Set the ``TerminalInteractiveShell.llm_provider_class`` trait to the fully
|
|
68
|
+
qualified name of the Provider you like, when testing from inside the IPython
|
|
69
|
+
source tree, you can use
|
|
70
|
+
``"examples.auto_suggest_llm.ExampleCompletionProvider"`` This will always
|
|
71
|
+
stream an extract of the Little Prince by Antoine de Saint-Exupéry, and will not
|
|
72
|
+
require any API key or real LLM.
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
In your configuration file adapt the following line to your needs:
|
|
76
|
+
|
|
77
|
+
.. code-block:: python
|
|
78
|
+
|
|
79
|
+
c.TerminalInteractiveShell.llm_provider_class = "examples.auto_suggest_llm.ExampleCompletionProvider"
|
|
80
|
+
|
|
81
|
+
Configure the provider
|
|
82
|
+
----------------------
|
|
83
|
+
|
|
84
|
+
It the provider needs to be passed parameters at initialization, you can do so
|
|
85
|
+
by setting the ``llm_provider_kwargs`` traitlet.
|
|
86
|
+
|
|
87
|
+
.. code-block:: python
|
|
88
|
+
|
|
89
|
+
c.TerminalInteractiveShell.llm_provider_kwargs = {"model": "skynet"}
|
|
90
|
+
|
|
91
|
+
This will depdend on the provider you chose, and you will have to refer to
|
|
92
|
+
the provider documentation.
|
|
93
|
+
|
|
94
|
+
Extra configuration may be needed by setting environment variables, this will
|
|
95
|
+
again depend on the provider you chose, and you will have to refer to the
|
|
96
|
+
provider documentation.
|
|
97
|
+
|
|
98
|
+
|
|
4
99
|
|
|
5
100
|
.. _custom_prompts:
|
|
6
101
|
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
.. _terminal_options:
|
|
2
|
+
|
|
3
|
+
Terminal options
|
|
4
|
+
================
|
|
4
5
|
|
|
5
6
|
Any of the options listed here can be set in config files, at the
|
|
6
7
|
command line, from inside IPython, or using a traitlets :class:`Config` object.
|
|
7
8
|
See :ref:`setting_config` for details.
|
|
8
9
|
|
|
9
|
-
..
|
|
10
|
-
|
|
11
|
-
terminal
|
|
12
|
-
kernel
|
|
10
|
+
.. include:: terminal.rst
|
|
@@ -12,18 +12,18 @@ This is now a different branch than the main branch, and will only accumulate
|
|
|
12
12
|
bugfixes and small improvements and requested backports, while 9.0 forges ahead.
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
We'll
|
|
15
|
+
We'll note 4 bugfixes and an and unstable preview feature.
|
|
16
16
|
|
|
17
17
|
- :ghpull:`14640` Fixes an error were a warning about virtualenvs was incorrectly triggered.
|
|
18
18
|
|
|
19
|
-
- :ghpull:`14684` Fixes an issue on Python
|
|
19
|
+
- :ghpull:`14684` Fixes an issue on Python 3.12+ with post mortem debugging.
|
|
20
20
|
- :ghpull:`14693` Fixes a bug where magics were ignoring SIGINT
|
|
21
|
-
- :ghpull:`14695` Fixes
|
|
21
|
+
- :ghpull:`14695` Fixes an issue where magics would not display all subprocess output.
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
As a preview feature, look into the ``examples`` folder on how to configure
|
|
25
25
|
autosuggestion using a large language model. This is not yet ready for
|
|
26
|
-
production use,
|
|
26
|
+
production use, has only partial documentation and can change without warning,
|
|
27
27
|
but should allow you to hook in a Jupyter-ai LLM provider to suggest code in the
|
|
28
28
|
CLI (currently only via a keyboard shortcut). See :ghpull:`14623` for more details
|
|
29
29
|
until further documentation is available in 9.0.
|
|
@@ -45,7 +45,7 @@ Czechoslovakia where she lived until her death at the age of 74 in April 1966.
|
|
|
45
45
|
Thanks
|
|
46
46
|
------
|
|
47
47
|
|
|
48
|
-
Thanks to everyone who helped
|
|
48
|
+
Thanks to everyone who helped with the 8.32 release and working toward 9.0.
|
|
49
49
|
|
|
50
50
|
Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
|
|
51
51
|
work on IPython and related libraries, in particular the work around LLM
|
|
@@ -74,7 +74,7 @@ Road to 9.0
|
|
|
74
74
|
|
|
75
75
|
The current main branch is now on it's way to be 9.0; do not expect many new
|
|
76
76
|
features but a large codebase refactor, and cleanup with many deprecated code
|
|
77
|
-
removed, and more
|
|
77
|
+
removed, and more aggressive codestyle enforcement.
|
|
78
78
|
|
|
79
79
|
For something completely different
|
|
80
80
|
----------------------------------
|
|
@@ -1069,7 +1069,7 @@ properties:
|
|
|
1069
1069
|
Note that while in the above example we use a static dictionary, libraries may
|
|
1070
1070
|
decide to use a custom object that define ``__getitem__``, we caution against
|
|
1071
1071
|
using objects that would trigger computation to show documentation, but it is
|
|
1072
|
-
sometime preferable for highly dynamic code that for example export
|
|
1072
|
+
sometime preferable for highly dynamic code that for example export an API as
|
|
1073
1073
|
object.
|
|
1074
1074
|
|
|
1075
1075
|
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
"cell_type": "markdown",
|
|
40
40
|
"metadata": {},
|
|
41
41
|
"source": [
|
|
42
|
-
"*
|
|
43
|
-
"*
|
|
44
|
-
"*
|
|
45
|
-
"*
|
|
46
|
-
"*
|
|
47
|
-
"*
|
|
42
|
+
"* <a href='Cell Magics.ipynb' target='_blank'>Cell Magics</a>\n",
|
|
43
|
+
"* <a href='Script Magics.ipynb' target='_blank'>Script Magics</a>\n",
|
|
44
|
+
"* <a href='Rich Output.ipynb' target='_blank'>Rich Output</a>\n",
|
|
45
|
+
"* <a href='Custom Display Logic.ipynb' target='_blank'>Custom Display Logic</a>\n",
|
|
46
|
+
"* <a href='Plotting in the Notebook.ipynb' target='_blank'>Plotting in the Notebook</a>\n",
|
|
47
|
+
"* <a href='Capturing Output.ipynb' target='_blank'>Capturing Output</a>"
|
|
48
48
|
]
|
|
49
49
|
},
|
|
50
50
|
{
|
|
@@ -58,11 +58,11 @@
|
|
|
58
58
|
"cell_type": "markdown",
|
|
59
59
|
"metadata": {},
|
|
60
60
|
"source": [
|
|
61
|
-
"*
|
|
62
|
-
"*
|
|
61
|
+
"* <a href='Background Jobs.ipynb' target='_blank'>Background Jobs</a>\n",
|
|
62
|
+
"* <a href='Trapezoidal Rule.ipynb' target='_blank'>Trapezoidal Rule</a>\n",
|
|
63
63
|
"* [SymPy](SymPy.ipynb)\n",
|
|
64
|
-
"*
|
|
65
|
-
"*
|
|
64
|
+
"* <a href='Raw Input in the Notebook.ipynb' target='_blank'>Raw Input in the Notebook</a>\n",
|
|
65
|
+
"* <a href='Importing Notebooks.ipynb' target='_blank'>Importing Notebooks</a>"
|
|
66
66
|
]
|
|
67
67
|
},
|
|
68
68
|
{
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"cell_type": "markdown",
|
|
33
33
|
"metadata": {},
|
|
34
34
|
"source": [
|
|
35
|
-
"*
|
|
35
|
+
"* <a href='IPython Kernel/Index.ipynb' target='_blank'>IPython Kernel</a>: IPython's core syntax and command line features available in all frontends\n",
|
|
36
36
|
"* [Embedding](Embedding/Index.ipynb): Embedding and reusing IPython's components into other applications\n"
|
|
37
37
|
]
|
|
38
38
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
|
-
This is an example of Fake LLM Completer for IPython
|
|
2
|
+
This is an example of Fake LLM Completer for IPython, as
|
|
3
|
+
well as example on how to configure IPython for LLMs.
|
|
4
|
+
|
|
3
5
|
8.32 – this is provisional and may change.
|
|
4
6
|
|
|
5
7
|
To test this you can run the following command from the root of IPython
|
|
@@ -7,16 +9,30 @@ directory:
|
|
|
7
9
|
|
|
8
10
|
$ ipython --TerminalInteractiveShell.llm_provider_class=examples.auto_suggest_llm.ExampleCompletionProvider
|
|
9
11
|
|
|
10
|
-
Or you can set the value in your config file
|
|
12
|
+
Or you can set the value in your config file, which also allows you to set a
|
|
13
|
+
keyboard shortcut::
|
|
14
|
+
|
|
15
|
+
c.TerminalInteractiveShell.llm_provider_class = "examples.auto_suggest_llm.ExampleCompletionProvider"
|
|
16
|
+
c.TerminalInteractiveShell.shortcuts = [
|
|
17
|
+
{
|
|
18
|
+
"new_keys": ["c-q"],
|
|
19
|
+
"command": "IPython:auto_suggest.llm_autosuggestion",
|
|
20
|
+
"new_filter": "navigable_suggestions & default_buffer_focused",
|
|
21
|
+
"create": True,
|
|
22
|
+
},
|
|
23
|
+
]
|
|
24
|
+
|
|
11
25
|
|
|
12
|
-
|
|
26
|
+
You can use the following configuration option to::
|
|
13
27
|
|
|
14
|
-
|
|
28
|
+
c.TerminalInteractiveShell.llm_constructor_kwargs = {"model_id": "mymodel"}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
For convenience and testing you can bind a shortcut at runtime::
|
|
15
32
|
|
|
16
33
|
In [1]: from examples.auto_suggest_llm import setup_shortcut
|
|
17
34
|
...: setup_shortcut('c-q')
|
|
18
35
|
|
|
19
|
-
|
|
20
36
|
"""
|
|
21
37
|
|
|
22
38
|
import asyncio
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|