ipython 8.36.0__tar.gz → 8.37.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.36.0 → ipython-8.37.0}/IPython/core/completer.py +46 -1
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/release.py +1 -1
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_completer.py +37 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/interactiveshell.py +7 -4
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/shortcuts/auto_suggest.py +22 -9
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/tests/fake_llm.py +15 -1
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/tests/test_shortcuts.py +12 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-8.36.0/ipython.egg-info → ipython-8.37.0}/PKG-INFO +1 -1
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/magics-generated.txt +4 -8
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version8.rst +10 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/auto_suggest_llm.py +2 -2
- {ipython-8.36.0 → ipython-8.37.0/ipython.egg-info}/PKG-INFO +1 -1
- {ipython-8.36.0 → ipython-8.37.0}/.flake8 +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/.mailmap +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/.pre-commit-config.yaml +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/COPYING.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/__main__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/conftest.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/consoleapp.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/alias.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/application.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/async_helpers.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/autocall.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/compilerop.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/completerlib.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/crashhandler.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/debugger.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/display.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/display_functions.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/display_trap.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/displayhook.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/displaypub.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/error.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/events.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/excolors.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/extensions.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/formatters.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/getipython.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/guarded_eval.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/history.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/historyapp.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/hooks.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/inputsplitter.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/inputtransformer.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/interactiveshell.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/logger.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/macro.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magic.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/auto.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/basic.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/code.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/config.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/display.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/execution.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/extension.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/history.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/logging.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/osm.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/magics/script.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/oinspect.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/page.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/payload.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/payloadpage.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/prefilter.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/profileapp.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/profiledir.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/prompts.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/pylabtools.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/shellapp.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/splitinput.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/2x2.jpg +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/2x2.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/bad_all.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/nonascii.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/nonascii2.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/print_argv.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/refbug.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/simpleerr.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/tclass.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_alias.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_application.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_async_helpers.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_autocall.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_compilerop.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_completerlib.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_debugger.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_display.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_displayhook.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_events.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_extension.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_formatters.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_guarded_eval.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_handlers.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_history.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_hooks.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_imports.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_inputsplitter.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_inputtransformer.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_interactiveshell.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_iplib.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_logger.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_magic.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_magic_arguments.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_magic_terminal.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_oinspect.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_page.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_paths.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_prefilter.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_profile.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_prompts.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_pylabtools.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_run.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_shellapp.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_splitinput.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/tests/test_ultratb.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/ultratb.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/core/usage.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/display.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/extensions/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/extensions/tests/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/extensions/tests/test_autoreload.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/extensions/tests/test_storemagic.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/external/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/external/tests/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/external/tests/test_qt_loaders.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/clipboard.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/deepreload.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/demo.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/display.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/guisupport.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/latextools.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/lexers.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/pretty.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test.wav +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_clipboard.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_deepreload.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_display.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_editorhooks.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_imports.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_latextools.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_lexers.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_pretty.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/lib/tests/test_pygments.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/paths.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/py.typed +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/console.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/debugger.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/embed.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/magics.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/prompts.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/tests/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/tests/test_embed.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/tests/test_help.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/decorators.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/README.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/tests/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/tests/test_decorators.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/tests/test_ipunittest.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/tests/test_tools.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/testing/tools.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/tests/cve.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/_process_common.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/capture.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/colorable.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/coloransi.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/contexts.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/daemonize.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/data.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/decorators.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/dir2.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/docs.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/encoding.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/eventful.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/frame.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/generics.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/importstring.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/io.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/localinterfaces.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/log.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/module_paths.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/openpy.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/path.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/process.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/py3compat.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/sentinel.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/shimmodule.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/signatures.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tempdir.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/terminal.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_capture.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_decorators.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_deprecated.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_dir2.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_imports.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_importstring.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_io.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_module_paths.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_openpy.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_path.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_process.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_pycolorize.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_shimmodule.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_sysinfo.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_tempdir.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_text.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_tokenutil.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tests/test_wildcard.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/text.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/timing.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/traitlets.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/tz.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/ulinecache.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/version.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/IPython/utils/wildcard.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/LICENSE +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/MANIFEST.in +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/README.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/_build_meta.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/Makefile +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/README.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/autogen_api.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/autogen_config.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/autogen_magics.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/hist_simple.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/hist_with_text.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/make.cmd +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/man/ipython.1 +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/plot_simple.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/plot_simple_python.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/requirements.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_static/logo.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/about/history.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/about/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.conftest.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.alias.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.application.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.async_helpers.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.autocall.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.builtin_trap.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.compilerop.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.completer.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.completerlib.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.crashhandler.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.debugger.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.error.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.events.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.excolors.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.extensions.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.formatters.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.getipython.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.guarded_eval.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.history.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.historyapp.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.hooks.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.inputsplitter.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.inputtransformer.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.inputtransformer2.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.interactiveshell.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.logger.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.macro.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magic.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magic_arguments.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.ast_mod.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.auto.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.basic.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.code.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.display.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.execution.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.extension.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.history.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.logging.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.namespace.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.osm.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.packaging.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.pylab.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.script.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.oinspect.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.page.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.payload.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.payloadpage.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.prefilter.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.profileapp.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.profiledir.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.prompts.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.pylabtools.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.shellapp.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.splitinput.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.ultratb.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.display.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.backgroundjobs.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.clipboard.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.deepreload.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.demo.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.editorhooks.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.guisupport.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.latextools.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.lexers.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.pretty.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.paths.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.debugger.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.embed.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.interactiveshell.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.ipapp.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.magics.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.prompts.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.shortcuts.filters.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.shortcuts.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.decorators.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.globalipapp.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.ipunittest.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.skipdoctest.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.tools.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.PyColorize.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.capture.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.colorable.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.coloransi.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.contexts.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.data.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.decorators.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.dir2.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.encoding.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.frame.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.generics.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.importstring.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.io.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.ipstruct.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.module_paths.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.openpy.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.path.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.process.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.sentinel.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.shimmodule.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.strdispatch.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.sysinfo.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.syspathcontext.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.tempdir.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.terminal.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.text.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.timing.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.tokenutil.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.tz.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.ulinecache.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.wildcard.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/generated/gen.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/api/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/conf.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/details.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/integrating.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/intro.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/options/config-generated.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/options/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/options/terminal.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/config/shortcuts/table.tsv +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/coredev/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/config.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/execution.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/kernels.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/lexer.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/messaging.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/pycompat.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/install/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/install/install.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/figs/besselj.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/figs/colors_dark.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/figs/jn.html +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/figs/jn.xhtml +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/links.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/overview.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/parallel/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/sphinx.toml +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/sphinxext.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/sphinxext/github.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/docs/sphinxext/magics.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/Embedding/Index.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Index.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/data/flare.json +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/Index.ipynb +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/images/FrontendKernel.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/images/animation.m4v +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/images/ipython_logo.png +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/images/python_logo.svg +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/ipython.egg-info/SOURCES.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/ipython.egg-info/requires.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/long_description.rst +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/pyproject.toml +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/scripts/ipython.ico +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/scripts/ipython_nb.ico +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/setup.cfg +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/setup.py +0 -0
- {ipython-8.36.0 → ipython-8.37.0}/setupbase.py +0 -0
|
@@ -1145,6 +1145,48 @@ class Completer(Configurable):
|
|
|
1145
1145
|
# we simple attribute matching with normal identifiers.
|
|
1146
1146
|
_ATTR_MATCH_RE = re.compile(r"(.+)\.(\w*)$")
|
|
1147
1147
|
|
|
1148
|
+
def _strip_code_before_operator(self, code: str) -> str:
|
|
1149
|
+
o_parens = {"(", "[", "{"}
|
|
1150
|
+
c_parens = {")", "]", "}"}
|
|
1151
|
+
|
|
1152
|
+
# Dry-run tokenize to catch errors
|
|
1153
|
+
try:
|
|
1154
|
+
_ = list(tokenize.generate_tokens(iter(code.splitlines()).__next__))
|
|
1155
|
+
except tokenize.TokenError:
|
|
1156
|
+
# Try trimming the expression and retrying
|
|
1157
|
+
trimmed_code = self._trim_expr(code)
|
|
1158
|
+
try:
|
|
1159
|
+
_ = list(
|
|
1160
|
+
tokenize.generate_tokens(iter(trimmed_code.splitlines()).__next__)
|
|
1161
|
+
)
|
|
1162
|
+
code = trimmed_code
|
|
1163
|
+
except tokenize.TokenError:
|
|
1164
|
+
return code
|
|
1165
|
+
|
|
1166
|
+
tokens = _parse_tokens(code)
|
|
1167
|
+
encountered_operator = False
|
|
1168
|
+
after_operator = []
|
|
1169
|
+
nesting_level = 0
|
|
1170
|
+
|
|
1171
|
+
for t in tokens:
|
|
1172
|
+
if t.type == tokenize.OP:
|
|
1173
|
+
if t.string in o_parens:
|
|
1174
|
+
nesting_level += 1
|
|
1175
|
+
elif t.string in c_parens:
|
|
1176
|
+
nesting_level -= 1
|
|
1177
|
+
elif t.string != "." and nesting_level == 0:
|
|
1178
|
+
encountered_operator = True
|
|
1179
|
+
after_operator = []
|
|
1180
|
+
continue
|
|
1181
|
+
|
|
1182
|
+
if encountered_operator:
|
|
1183
|
+
after_operator.append(t.string)
|
|
1184
|
+
|
|
1185
|
+
if encountered_operator:
|
|
1186
|
+
return "".join(after_operator)
|
|
1187
|
+
else:
|
|
1188
|
+
return code
|
|
1189
|
+
|
|
1148
1190
|
def _attr_matches(
|
|
1149
1191
|
self, text: str, include_prefix: bool = True
|
|
1150
1192
|
) -> Tuple[Sequence[str], str]:
|
|
@@ -1152,9 +1194,12 @@ class Completer(Configurable):
|
|
|
1152
1194
|
if not m2:
|
|
1153
1195
|
return [], ""
|
|
1154
1196
|
expr, attr = m2.group(1, 2)
|
|
1197
|
+
try:
|
|
1198
|
+
expr = self._strip_code_before_operator(expr)
|
|
1199
|
+
except tokenize.TokenError:
|
|
1200
|
+
pass
|
|
1155
1201
|
|
|
1156
1202
|
obj = self._evaluate_expr(expr)
|
|
1157
|
-
|
|
1158
1203
|
if obj is not_found:
|
|
1159
1204
|
return [], ""
|
|
1160
1205
|
|
|
@@ -595,7 +595,9 @@ class TestCompleter(unittest.TestCase):
|
|
|
595
595
|
"""
|
|
596
596
|
ip = get_ipython()
|
|
597
597
|
ip.ex("a=list(range(5))")
|
|
598
|
+
ip.ex("b,c = 1, 1.2")
|
|
598
599
|
ip.ex("d = {'a b': str}")
|
|
600
|
+
ip.ex("x=y='a'")
|
|
599
601
|
_, c = ip.complete(".", line="a[0].")
|
|
600
602
|
self.assertFalse(".real" in c, "Shouldn't have completed on a[0]: %s" % c)
|
|
601
603
|
|
|
@@ -653,6 +655,41 @@ class TestCompleter(unittest.TestCase):
|
|
|
653
655
|
"Should have completed on `a.app`: %s",
|
|
654
656
|
Completion(2, 4, "append"),
|
|
655
657
|
)
|
|
658
|
+
_(
|
|
659
|
+
"x.upper() == y.",
|
|
660
|
+
15,
|
|
661
|
+
".upper",
|
|
662
|
+
"Should have completed on `x.upper() == y.`: %s",
|
|
663
|
+
Completion(15, 15, "upper"),
|
|
664
|
+
)
|
|
665
|
+
_(
|
|
666
|
+
"(x.upper() == y.",
|
|
667
|
+
16,
|
|
668
|
+
".upper",
|
|
669
|
+
"Should have completed on `(x.upper() == y.`: %s",
|
|
670
|
+
Completion(16, 16, "upper"),
|
|
671
|
+
)
|
|
672
|
+
_(
|
|
673
|
+
"(x.upper() == y).",
|
|
674
|
+
17,
|
|
675
|
+
".bit_length",
|
|
676
|
+
"Should have completed on `(x.upper() == y).`: %s",
|
|
677
|
+
Completion(17, 17, "bit_length"),
|
|
678
|
+
)
|
|
679
|
+
_(
|
|
680
|
+
"{'==', 'abc'}.",
|
|
681
|
+
14,
|
|
682
|
+
".add",
|
|
683
|
+
"Should have completed on `{'==', 'abc'}.`: %s",
|
|
684
|
+
Completion(14, 14, "add"),
|
|
685
|
+
)
|
|
686
|
+
_(
|
|
687
|
+
"b + c.",
|
|
688
|
+
6,
|
|
689
|
+
".hex",
|
|
690
|
+
"Should have completed on `b + c.`: %s",
|
|
691
|
+
Completion(6, 6, "hex"),
|
|
692
|
+
)
|
|
656
693
|
|
|
657
694
|
def test_omit__names(self):
|
|
658
695
|
# also happens to test IPCompleter as a configurable
|
|
@@ -502,13 +502,16 @@ class TerminalInteractiveShell(InteractiveShell):
|
|
|
502
502
|
elif provider == "NavigableAutoSuggestFromHistory":
|
|
503
503
|
# LLM stuff are all Provisional in 8.32
|
|
504
504
|
if self._llm_provider_class:
|
|
505
|
-
|
|
506
|
-
|
|
505
|
+
|
|
506
|
+
def init_llm_provider():
|
|
507
|
+
llm_provider_constructor = import_item(self._llm_provider_class)
|
|
508
|
+
return llm_provider_constructor(**self.llm_constructor_kwargs)
|
|
509
|
+
|
|
507
510
|
else:
|
|
508
|
-
|
|
511
|
+
init_llm_provider = None
|
|
509
512
|
self.auto_suggest = NavigableAutoSuggestFromHistory()
|
|
510
513
|
# Provisinal in 8.32
|
|
511
|
-
self.auto_suggest.
|
|
514
|
+
self.auto_suggest._init_llm_provider = init_llm_provider
|
|
512
515
|
|
|
513
516
|
name = self.llm_prefix_from_history
|
|
514
517
|
|
|
@@ -171,16 +171,19 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
171
171
|
# another request.
|
|
172
172
|
_llm_task: asyncio.Task | None = None
|
|
173
173
|
|
|
174
|
-
# This is the
|
|
175
|
-
# to generate inline completions.
|
|
176
|
-
|
|
174
|
+
# This is the constructor of the LLM provider from jupyter-ai
|
|
175
|
+
# to which we forward the request to generate inline completions.
|
|
176
|
+
_init_llm_provider: Callable | None
|
|
177
|
+
|
|
178
|
+
_llm_provider_instance: Any | None
|
|
177
179
|
_llm_prefixer: Callable = lambda self, x: "wrong"
|
|
178
180
|
|
|
179
181
|
def __init__(self):
|
|
180
182
|
super().__init__()
|
|
181
183
|
self.skip_lines = 0
|
|
182
184
|
self._connected_apps = []
|
|
183
|
-
self.
|
|
185
|
+
self._llm_provider_instance = None
|
|
186
|
+
self._init_llm_provider = None
|
|
184
187
|
self._request_number = 0
|
|
185
188
|
|
|
186
189
|
def reset_history_position(self, _: Buffer):
|
|
@@ -317,6 +320,16 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
317
320
|
"LLM task not cancelled, does your provider support cancellation?"
|
|
318
321
|
)
|
|
319
322
|
|
|
323
|
+
@property
|
|
324
|
+
def _llm_provider(self):
|
|
325
|
+
"""Lazy-initialized instance of the LLM provider.
|
|
326
|
+
|
|
327
|
+
Do not use in the constructor, as `_init_llm_provider` can trigger slow side-effects.
|
|
328
|
+
"""
|
|
329
|
+
if self._llm_provider_instance is None and self._init_llm_provider:
|
|
330
|
+
self._llm_provider_instance = self._init_llm_provider()
|
|
331
|
+
return self._llm_provider_instance
|
|
332
|
+
|
|
320
333
|
async def _trigger_llm(self, buffer) -> None:
|
|
321
334
|
"""
|
|
322
335
|
This will ask the current llm provider a suggestion for the current buffer.
|
|
@@ -325,14 +338,14 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
325
338
|
"""
|
|
326
339
|
# we likely want to store the current cursor position, and cancel if the cursor has moved.
|
|
327
340
|
try:
|
|
328
|
-
import
|
|
341
|
+
import jupyter_ai_magics
|
|
329
342
|
except ModuleNotFoundError:
|
|
330
|
-
|
|
343
|
+
jupyter_ai_magics = None
|
|
331
344
|
if not self._llm_provider:
|
|
332
345
|
warnings.warn("No LLM provider found, cannot trigger LLM completions")
|
|
333
346
|
return
|
|
334
|
-
if
|
|
335
|
-
warnings.warn("LLM Completion requires `
|
|
347
|
+
if jupyter_ai_magics is None:
|
|
348
|
+
warnings.warn("LLM Completion requires `jupyter_ai_magics` to be installed")
|
|
336
349
|
|
|
337
350
|
self._cancel_running_llm_task()
|
|
338
351
|
|
|
@@ -359,7 +372,7 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
359
372
|
provider to stream it's response back to us iteratively setting it as
|
|
360
373
|
the suggestion on the current buffer.
|
|
361
374
|
|
|
362
|
-
Unlike with JupyterAi, as we do not have multiple
|
|
375
|
+
Unlike with JupyterAi, as we do not have multiple cells, the cell id
|
|
363
376
|
is always set to `None`.
|
|
364
377
|
|
|
365
378
|
We set the prefix to the current cell content, but could also insert the
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
+
from time import sleep
|
|
2
3
|
|
|
3
4
|
try:
|
|
4
|
-
from jupyter_ai_magics import BaseProvider
|
|
5
|
+
from jupyter_ai_magics.providers import BaseProvider
|
|
5
6
|
from langchain_community.llms import FakeListLLM
|
|
6
7
|
except ImportError:
|
|
7
8
|
|
|
@@ -87,3 +88,16 @@ class FibonacciCompletionProvider(BaseProvider, FakeListLLM): # type: ignore[mi
|
|
|
87
88
|
reply_to=request_number,
|
|
88
89
|
done=True,
|
|
89
90
|
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class SlowStartingCompletionProvider(BaseProvider, FakeListLLM): # type: ignore[misc, valid-type]
|
|
94
|
+
id = "slow_provider"
|
|
95
|
+
name = "Slow Provider"
|
|
96
|
+
model_id_key = "model"
|
|
97
|
+
models = ["model_a"]
|
|
98
|
+
|
|
99
|
+
def __init__(self, **kwargs):
|
|
100
|
+
kwargs["responses"] = ["This fake response will be used for completion"]
|
|
101
|
+
kwargs["model_id"] = "model_a"
|
|
102
|
+
sleep(10)
|
|
103
|
+
super().__init__(**kwargs)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import pytest
|
|
2
|
+
import time
|
|
2
3
|
from IPython.terminal.interactiveshell import PtkHistoryAdapter
|
|
3
4
|
from IPython.terminal.shortcuts.auto_suggest import (
|
|
4
5
|
accept,
|
|
@@ -68,6 +69,17 @@ async def test_llm_autosuggestion():
|
|
|
68
69
|
assert event.current_buffer.suggestion.text == FIBONACCI[len(text) :]
|
|
69
70
|
|
|
70
71
|
|
|
72
|
+
def test_slow_llm_provider_should_not_block_init():
|
|
73
|
+
ip = get_ipython()
|
|
74
|
+
provider = NavigableAutoSuggestFromHistory()
|
|
75
|
+
ip.auto_suggest = provider
|
|
76
|
+
start = time.perf_counter()
|
|
77
|
+
ip.llm_provider_class = "tests.fake_llm.SlowStartingCompletionProvider"
|
|
78
|
+
end = time.perf_counter()
|
|
79
|
+
elapsed = end - start
|
|
80
|
+
assert elapsed < 0.1
|
|
81
|
+
|
|
82
|
+
|
|
71
83
|
@pytest.mark.parametrize(
|
|
72
84
|
"text, suggestion, expected",
|
|
73
85
|
[
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# GENERATED BY setup.py
|
|
2
|
-
commit = "
|
|
2
|
+
commit = "86a50d33a"
|
|
@@ -698,12 +698,9 @@ Line magics
|
|
|
698
698
|
-n print line numbers for each input. This feature is only available if numbered prompts are in use.
|
|
699
699
|
-o also print outputs for each input.
|
|
700
700
|
-p print classic '>>>' python prompts before each input. This is useful for making documentation, and in conjunction with -o, for producing doctest-ready output.
|
|
701
|
-
-t print the 'translated' history, as IPython understands it. IPython filters your input and converts it all into valid Python source before executing it (things like magics or aliases are turned into function calls, for example).
|
|
702
|
-
|
|
703
|
-
-
|
|
704
|
-
FILENAME' from the IPython Notebook interface will replace FILENAME even if it already exists *without* confirmation.
|
|
705
|
-
-g <[PATTERN ...]> treat the arg as a glob pattern to search for in (full) history. This includes the saved history (almost all commands ever written). The pattern may contain '?' to match one unknown character and '*' to match any number of unknown
|
|
706
|
-
characters. Use '%hist -g' to show full saved history (may be very long).
|
|
701
|
+
-t print the 'translated' history, as IPython understands it. IPython filters your input and converts it all into valid Python source before executing it (things like magics or aliases are turned into function calls, for example). With this option, you'll see the native history instead of the user-entered version: '%cd /' will be seen as 'get_ipython().run_line_magic("cd", "/")' instead of '%cd /'.
|
|
702
|
+
-f FILENAME FILENAME: instead of printing the output to the screen, redirect it to the given file. The file is always overwritten, though *when it can*, IPython asks for confirmation first. In particular, running the command 'history -f FILENAME' from the IPython Notebook interface will replace FILENAME even if it already exists *without* confirmation.
|
|
703
|
+
-g <[PATTERN ...]> treat the arg as a glob pattern to search for in (full) history. This includes the saved history (almost all commands ever written). The pattern may contain '?' to match one unknown character and '*' to match any number of unknown characters. Use '%hist -g' to show full saved history (may be very long).
|
|
707
704
|
-l <[LIMIT]> get the last n lines from all sessions. Specify n as a single arg, or the default is the last 10 lines.
|
|
708
705
|
-u when searching history using `-g`, show only unique history.
|
|
709
706
|
|
|
@@ -2323,8 +2320,7 @@ Cell magics
|
|
|
2323
2320
|
run the cell, capturing stdout, stderr, and IPython's rich display() calls.
|
|
2324
2321
|
|
|
2325
2322
|
positional arguments:
|
|
2326
|
-
output The name of the variable in which to store output. This is a utils.io.CapturedIO object with stdout/err attributes for the text of the captured output. CapturedOutput also has a show() method for displaying the output, and __call__ as
|
|
2327
|
-
well, so you can use that to quickly display the output. If unspecified, captured output is discarded.
|
|
2323
|
+
output The name of the variable in which to store output. This is a utils.io.CapturedIO object with stdout/err attributes for the text of the captured output. CapturedOutput also has a show() method for displaying the output, and __call__ as well, so you can use that to quickly display the output. If unspecified, captured output is discarded.
|
|
2328
2324
|
|
|
2329
2325
|
options:
|
|
2330
2326
|
--no-stderr Don't capture stderr.
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
8.x Series
|
|
3
3
|
============
|
|
4
4
|
|
|
5
|
+
.. _version 8.37:
|
|
6
|
+
|
|
7
|
+
IPython 8.37
|
|
8
|
+
============
|
|
9
|
+
|
|
10
|
+
This release includes fixes for the tab completer and LLM completer backported from IPython 9.4:
|
|
11
|
+
|
|
12
|
+
- :ghpull:`14910` Eliminate startup delay when LLM completion provider is configured
|
|
13
|
+
- :ghpull:`14898` Fix attribute completion for expressions with comparison operators
|
|
14
|
+
|
|
5
15
|
.. _version 8.36:
|
|
6
16
|
|
|
7
17
|
IPython 8.36
|
|
@@ -68,13 +68,13 @@ import asyncio
|
|
|
68
68
|
import textwrap
|
|
69
69
|
from typing import Any, AsyncIterable, AsyncIterator
|
|
70
70
|
|
|
71
|
-
from
|
|
71
|
+
from jupyter_ai_magics.models.completion import (
|
|
72
72
|
InlineCompletionList,
|
|
73
73
|
InlineCompletionReply,
|
|
74
74
|
InlineCompletionRequest,
|
|
75
75
|
InlineCompletionStreamChunk,
|
|
76
76
|
)
|
|
77
|
-
from jupyter_ai_magics import BaseProvider
|
|
77
|
+
from jupyter_ai_magics.providers import BaseProvider
|
|
78
78
|
from langchain_community.llms import FakeListLLM
|
|
79
79
|
|
|
80
80
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|