ipython 8.35.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.35.0 → ipython-8.37.0}/IPython/core/completer.py +46 -1
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/execution.py +27 -21
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/release.py +1 -1
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_completer.py +37 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_magic.py +20 -2
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/interactiveshell.py +7 -4
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/shortcuts/auto_suggest.py +33 -17
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/tests/fake_llm.py +16 -2
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/tests/test_shortcuts.py +20 -3
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-8.35.0/ipython.egg-info → ipython-8.37.0}/PKG-INFO +1 -1
- {ipython-8.35.0/docs/source/savefig → ipython-8.37.0/docs}/hist_simple.png +0 -0
- {ipython-8.35.0/docs/source/savefig → ipython-8.37.0/docs}/hist_with_text.png +0 -0
- {ipython-8.35.0/docs/source/savefig → ipython-8.37.0/docs}/plot_simple.png +0 -0
- {ipython-8.35.0/docs/source/savefig → ipython-8.37.0/docs}/plot_simple_python.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.compilerop.rst +5 -2
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.completer.rst +7 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.debugger.rst +4 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.history.rst +2 -17
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.hooks.rst +4 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.inputtransformer.rst +2 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.inputtransformer2.rst +4 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.interactiveshell.rst +8 -5
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.payloadpage.rst +5 -2
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.pylabtools.rst +5 -2
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.ultratb.rst +31 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.display.rst +7 -1
- ipython-8.37.0/docs/source/api/generated/IPython.lib.lexers.rst +38 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.rst +4 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.shortcuts.rst +29 -2
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.decorators.rst +4 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.tools.rst +7 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.PyColorize.rst +2 -12
- ipython-8.37.0/docs/source/api/generated/IPython.utils.coloransi.rst +40 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.path.rst +7 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.sysinfo.rst +4 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.syspathcontext.rst +8 -2
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.terminal.rst +4 -1
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.text.rst +17 -2
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.tokenutil.rst +0 -7
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/gen.txt +1 -4
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/options/terminal.rst +44 -35
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/magics-generated.txt +65 -64
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version8.rst +21 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/auto_suggest_llm.py +2 -2
- {ipython-8.35.0 → ipython-8.37.0/ipython.egg-info}/PKG-INFO +1 -1
- {ipython-8.35.0 → ipython-8.37.0}/ipython.egg-info/SOURCES.txt +5 -7
- ipython-8.35.0/docs/source/api/generated/IPython.core.doctb.rst +0 -16
- ipython-8.35.0/docs/source/api/generated/IPython.core.tbtools.rst +0 -40
- ipython-8.35.0/docs/source/api/generated/IPython.core.tips.rst +0 -13
- ipython-8.35.0/docs/source/api/generated/IPython.utils.coloransi.rst +0 -14
- {ipython-8.35.0 → ipython-8.37.0}/.flake8 +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/.mailmap +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/.pre-commit-config.yaml +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/COPYING.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/__main__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/conftest.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/consoleapp.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/alias.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/application.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/async_helpers.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/autocall.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/compilerop.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/completerlib.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/crashhandler.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/debugger.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/display.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/display_functions.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/display_trap.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/displayhook.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/displaypub.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/error.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/events.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/excolors.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/extensions.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/formatters.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/getipython.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/guarded_eval.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/history.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/historyapp.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/hooks.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/inputsplitter.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/inputtransformer.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/interactiveshell.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/logger.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/macro.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magic.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/auto.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/basic.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/code.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/config.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/display.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/extension.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/history.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/logging.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/osm.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/magics/script.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/oinspect.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/page.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/payload.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/payloadpage.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/prefilter.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/profileapp.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/profiledir.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/prompts.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/pylabtools.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/shellapp.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/splitinput.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/2x2.jpg +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/2x2.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/bad_all.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/nonascii.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/nonascii2.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/print_argv.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/refbug.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/simpleerr.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/tclass.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_alias.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_application.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_async_helpers.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_autocall.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_compilerop.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_completerlib.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_debugger.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_display.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_displayhook.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_events.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_extension.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_formatters.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_guarded_eval.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_handlers.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_history.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_hooks.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_imports.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_inputsplitter.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_inputtransformer.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_interactiveshell.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_iplib.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_logger.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_magic_arguments.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_magic_terminal.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_oinspect.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_page.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_paths.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_prefilter.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_profile.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_prompts.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_pylabtools.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_run.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_shellapp.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_splitinput.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/tests/test_ultratb.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/ultratb.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/core/usage.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/display.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/extensions/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/extensions/tests/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/extensions/tests/test_autoreload.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/extensions/tests/test_storemagic.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/external/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/external/tests/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/external/tests/test_qt_loaders.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/clipboard.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/deepreload.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/demo.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/display.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/guisupport.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/latextools.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/lexers.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/pretty.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test.wav +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_clipboard.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_deepreload.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_display.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_editorhooks.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_imports.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_latextools.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_lexers.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_pretty.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/lib/tests/test_pygments.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/paths.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/py.typed +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/console.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/debugger.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/embed.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/magics.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/prompts.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/tests/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/tests/test_embed.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/tests/test_help.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/decorators.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/README.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/tests/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/tests/test_decorators.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/tests/test_ipunittest.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/tests/test_tools.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/testing/tools.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/tests/cve.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/_process_common.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/capture.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/colorable.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/coloransi.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/contexts.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/daemonize.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/data.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/decorators.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/dir2.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/docs.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/encoding.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/eventful.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/frame.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/generics.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/importstring.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/io.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/localinterfaces.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/log.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/module_paths.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/openpy.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/path.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/process.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/py3compat.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/sentinel.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/shimmodule.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/signatures.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tempdir.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/terminal.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_capture.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_decorators.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_deprecated.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_dir2.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_imports.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_importstring.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_io.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_module_paths.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_openpy.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_path.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_process.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_pycolorize.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_shimmodule.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_sysinfo.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_tempdir.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_text.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_tokenutil.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tests/test_wildcard.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/text.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/timing.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/traitlets.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/tz.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/ulinecache.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/version.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/IPython/utils/wildcard.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/LICENSE +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/MANIFEST.in +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/README.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/_build_meta.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/Makefile +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/README.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/autogen_api.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/autogen_config.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/autogen_magics.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/make.cmd +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/man/ipython.1 +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/requirements.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_static/logo.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/about/history.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/about/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.conftest.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.alias.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.application.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.async_helpers.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.autocall.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.builtin_trap.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.completerlib.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.crashhandler.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.error.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.events.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.excolors.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.extensions.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.formatters.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.getipython.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.guarded_eval.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.historyapp.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.inputsplitter.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.logger.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.macro.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magic.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magic_arguments.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.ast_mod.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.auto.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.basic.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.code.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.display.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.execution.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.extension.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.history.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.logging.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.namespace.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.osm.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.packaging.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.pylab.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.magics.script.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.oinspect.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.page.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.payload.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.prefilter.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.profileapp.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.profiledir.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.prompts.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.shellapp.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.core.splitinput.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.backgroundjobs.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.clipboard.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.deepreload.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.demo.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.editorhooks.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.guisupport.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.latextools.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.lib.pretty.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.paths.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.debugger.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.embed.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.interactiveshell.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.ipapp.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.magics.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.prompts.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.terminal.shortcuts.filters.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.globalipapp.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.ipunittest.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.testing.skipdoctest.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.capture.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.colorable.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.contexts.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.data.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.decorators.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.dir2.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.encoding.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.frame.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.generics.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.importstring.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.io.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.ipstruct.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.module_paths.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.openpy.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.process.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.sentinel.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.shimmodule.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.strdispatch.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.tempdir.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.timing.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.tz.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.ulinecache.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/generated/IPython.utils.wildcard.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/api/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/conf.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/details.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/integrating.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/intro.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/options/config-generated.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/options/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/config/shortcuts/table.tsv +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/coredev/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/config.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/execution.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/kernels.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/lexer.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/messaging.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/pycompat.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/install/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/install/install.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/figs/besselj.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/figs/colors_dark.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/figs/jn.html +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/figs/jn.xhtml +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/links.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/overview.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/parallel/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/sphinx.toml +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/sphinxext.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/sphinxext/github.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/docs/sphinxext/magics.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/Embedding/Index.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Index.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/data/flare.json +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/Index.ipynb +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/images/FrontendKernel.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/images/animation.m4v +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/images/ipython_logo.png +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/images/python_logo.svg +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/ipython.egg-info/requires.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/long_description.rst +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/pyproject.toml +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/scripts/ipython.ico +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/scripts/ipython_nb.ico +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/setup.cfg +0 -0
- {ipython-8.35.0 → ipython-8.37.0}/setup.py +0 -0
- {ipython-8.35.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
|
|
|
@@ -151,10 +151,11 @@ class TimeitTemplateFiller(ast.NodeTransformer):
|
|
|
151
151
|
|
|
152
152
|
class Timer(timeit.Timer):
|
|
153
153
|
"""Timer class that explicitly uses self.inner
|
|
154
|
-
|
|
154
|
+
|
|
155
155
|
which is an undocumented implementation detail of CPython,
|
|
156
156
|
not shared by PyPy.
|
|
157
157
|
"""
|
|
158
|
+
|
|
158
159
|
# Timer.timeit copied from CPython 3.4.2
|
|
159
160
|
def timeit(self, number=timeit.default_number):
|
|
160
161
|
"""Time 'number' executions of the main statement.
|
|
@@ -192,7 +193,6 @@ class ExecutionMagics(Magics):
|
|
|
192
193
|
@no_var_expand
|
|
193
194
|
@line_cell_magic
|
|
194
195
|
def prun(self, parameter_s='', cell=None):
|
|
195
|
-
|
|
196
196
|
"""Run a statement through the python code profiler.
|
|
197
197
|
|
|
198
198
|
**Usage, in line mode:**
|
|
@@ -993,7 +993,7 @@ class ExecutionMagics(Magics):
|
|
|
993
993
|
# Stop iteration is raised on quit command
|
|
994
994
|
pass
|
|
995
995
|
|
|
996
|
-
except:
|
|
996
|
+
except Exception:
|
|
997
997
|
etype, value, tb = sys.exc_info()
|
|
998
998
|
# Skip three frames in the traceback: the %run one,
|
|
999
999
|
# one inside bdb.py, and the command-line typed by the
|
|
@@ -1127,7 +1127,7 @@ class ExecutionMagics(Magics):
|
|
|
1127
1127
|
)
|
|
1128
1128
|
if stmt == "" and cell is None:
|
|
1129
1129
|
return
|
|
1130
|
-
|
|
1130
|
+
|
|
1131
1131
|
timefunc = timeit.default_timer
|
|
1132
1132
|
number = int(getattr(opts, "n", 0))
|
|
1133
1133
|
default_repeat = 7 if timeit.default_repeat < 7 else timeit.default_repeat
|
|
@@ -1242,7 +1242,7 @@ class ExecutionMagics(Magics):
|
|
|
1242
1242
|
@needs_local_scope
|
|
1243
1243
|
@line_cell_magic
|
|
1244
1244
|
@output_can_be_silenced
|
|
1245
|
-
def time(self,line=
|
|
1245
|
+
def time(self, line="", cell=None, local_ns=None):
|
|
1246
1246
|
"""Time execution of a Python statement or expression.
|
|
1247
1247
|
|
|
1248
1248
|
The CPU and wall clock times are printed, and the value of the
|
|
@@ -1257,13 +1257,19 @@ class ExecutionMagics(Magics):
|
|
|
1257
1257
|
- In cell mode, you can time the cell body (a directly
|
|
1258
1258
|
following statement raises an error).
|
|
1259
1259
|
|
|
1260
|
-
This function provides very basic timing functionality.
|
|
1260
|
+
This function provides very basic timing functionality. Use the timeit
|
|
1261
1261
|
magic for more control over the measurement.
|
|
1262
1262
|
|
|
1263
1263
|
.. versionchanged:: 7.3
|
|
1264
1264
|
User variables are no longer expanded,
|
|
1265
1265
|
the magic line is always left unmodified.
|
|
1266
1266
|
|
|
1267
|
+
.. versionchanged:: 8.3
|
|
1268
|
+
The time magic now correctly propagates system-exiting exceptions
|
|
1269
|
+
(such as ``KeyboardInterrupt`` invoked when interrupting execution)
|
|
1270
|
+
rather than just printing out the exception traceback.
|
|
1271
|
+
The non-system-exception will still be caught as before.
|
|
1272
|
+
|
|
1267
1273
|
Examples
|
|
1268
1274
|
--------
|
|
1269
1275
|
::
|
|
@@ -1304,10 +1310,10 @@ class ExecutionMagics(Magics):
|
|
|
1304
1310
|
Compiler : 0.78 s
|
|
1305
1311
|
"""
|
|
1306
1312
|
# fail immediately if the given expression can't be compiled
|
|
1307
|
-
|
|
1313
|
+
|
|
1308
1314
|
if line and cell:
|
|
1309
1315
|
raise UsageError("Can't use statement directly after '%%time'!")
|
|
1310
|
-
|
|
1316
|
+
|
|
1311
1317
|
if cell:
|
|
1312
1318
|
expr = self.shell.transform_cell(cell)
|
|
1313
1319
|
else:
|
|
@@ -1318,7 +1324,7 @@ class ExecutionMagics(Magics):
|
|
|
1318
1324
|
|
|
1319
1325
|
t0 = clock()
|
|
1320
1326
|
expr_ast = self.shell.compile.ast_parse(expr)
|
|
1321
|
-
tp = clock()-t0
|
|
1327
|
+
tp = clock() - t0
|
|
1322
1328
|
|
|
1323
1329
|
# Apply AST transformations
|
|
1324
1330
|
expr_ast = self.shell.transform_ast(expr_ast)
|
|
@@ -1326,8 +1332,8 @@ class ExecutionMagics(Magics):
|
|
|
1326
1332
|
# Minimum time above which compilation time will be reported
|
|
1327
1333
|
tc_min = 0.1
|
|
1328
1334
|
|
|
1329
|
-
expr_val=None
|
|
1330
|
-
if len(expr_ast.body)==1 and isinstance(expr_ast.body[0], ast.Expr):
|
|
1335
|
+
expr_val = None
|
|
1336
|
+
if len(expr_ast.body) == 1 and isinstance(expr_ast.body[0], ast.Expr):
|
|
1331
1337
|
mode = 'eval'
|
|
1332
1338
|
source = '<timed eval>'
|
|
1333
1339
|
expr_ast = ast.Expression(expr_ast.body[0].value)
|
|
@@ -1336,25 +1342,25 @@ class ExecutionMagics(Magics):
|
|
|
1336
1342
|
source = '<timed exec>'
|
|
1337
1343
|
# multi-line %%time case
|
|
1338
1344
|
if len(expr_ast.body) > 1 and isinstance(expr_ast.body[-1], ast.Expr):
|
|
1339
|
-
expr_val= expr_ast.body[-1]
|
|
1345
|
+
expr_val = expr_ast.body[-1]
|
|
1340
1346
|
expr_ast = expr_ast.body[:-1]
|
|
1341
1347
|
expr_ast = Module(expr_ast, [])
|
|
1342
1348
|
expr_val = ast.Expression(expr_val.value)
|
|
1343
1349
|
|
|
1344
1350
|
t0 = clock()
|
|
1345
1351
|
code = self.shell.compile(expr_ast, source, mode)
|
|
1346
|
-
tc = clock()-t0
|
|
1352
|
+
tc = clock() - t0
|
|
1347
1353
|
|
|
1348
1354
|
# skew measurement as little as possible
|
|
1349
1355
|
glob = self.shell.user_ns
|
|
1350
1356
|
wtime = time.time
|
|
1351
1357
|
# time execution
|
|
1352
1358
|
wall_st = wtime()
|
|
1353
|
-
if mode==
|
|
1359
|
+
if mode == "eval":
|
|
1354
1360
|
st = clock2()
|
|
1355
1361
|
try:
|
|
1356
1362
|
out = eval(code, glob, local_ns)
|
|
1357
|
-
except:
|
|
1363
|
+
except Exception:
|
|
1358
1364
|
self.shell.showtraceback()
|
|
1359
1365
|
return
|
|
1360
1366
|
end = clock2()
|
|
@@ -1362,12 +1368,12 @@ class ExecutionMagics(Magics):
|
|
|
1362
1368
|
st = clock2()
|
|
1363
1369
|
try:
|
|
1364
1370
|
exec(code, glob, local_ns)
|
|
1365
|
-
out=None
|
|
1371
|
+
out = None
|
|
1366
1372
|
# multi-line %%time case
|
|
1367
1373
|
if expr_val is not None:
|
|
1368
1374
|
code_2 = self.shell.compile(expr_val, source, 'eval')
|
|
1369
1375
|
out = eval(code_2, glob, local_ns)
|
|
1370
|
-
except:
|
|
1376
|
+
except Exception:
|
|
1371
1377
|
self.shell.showtraceback()
|
|
1372
1378
|
return
|
|
1373
1379
|
end = clock2()
|
|
@@ -1597,14 +1603,15 @@ def parse_breakpoint(text, current_file):
|
|
|
1597
1603
|
return current_file, int(text)
|
|
1598
1604
|
else:
|
|
1599
1605
|
return text[:colon], int(text[colon+1:])
|
|
1600
|
-
|
|
1606
|
+
|
|
1607
|
+
|
|
1601
1608
|
def _format_time(timespan, precision=3):
|
|
1602
1609
|
"""Formats the timespan in a human readable form"""
|
|
1603
1610
|
|
|
1604
1611
|
if timespan >= 60.0:
|
|
1605
1612
|
# we have more than a minute, format that in a human readable form
|
|
1606
1613
|
# Idea from http://snipplr.com/view/5713/
|
|
1607
|
-
parts = [("d", 60*60*24),("h", 60*60),("min", 60), ("s", 1)]
|
|
1614
|
+
parts = [("d", 60 * 60 * 24), ("h", 60 * 60), ("min", 60), ("s", 1)]
|
|
1608
1615
|
time = []
|
|
1609
1616
|
leftover = timespan
|
|
1610
1617
|
for suffix, length in parts:
|
|
@@ -1616,7 +1623,6 @@ def _format_time(timespan, precision=3):
|
|
|
1616
1623
|
break
|
|
1617
1624
|
return " ".join(time)
|
|
1618
1625
|
|
|
1619
|
-
|
|
1620
1626
|
# Unfortunately characters outside of range(128) can cause problems in
|
|
1621
1627
|
# certain terminals.
|
|
1622
1628
|
# See bug: https://bugs.launchpad.net/ipython/+bug/348466
|
|
@@ -1630,7 +1636,7 @@ def _format_time(timespan, precision=3):
|
|
|
1630
1636
|
except:
|
|
1631
1637
|
pass
|
|
1632
1638
|
scaling = [1, 1e3, 1e6, 1e9]
|
|
1633
|
-
|
|
1639
|
+
|
|
1634
1640
|
if timespan > 0.0:
|
|
1635
1641
|
order = min(-int(math.floor(math.log10(timespan)) // 3), 3)
|
|
1636
1642
|
else:
|
|
@@ -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
|
|
@@ -16,8 +16,6 @@ from time import sleep
|
|
|
16
16
|
from threading import Thread
|
|
17
17
|
from subprocess import CalledProcessError
|
|
18
18
|
from textwrap import dedent
|
|
19
|
-
from time import sleep
|
|
20
|
-
from threading import Thread
|
|
21
19
|
from unittest import TestCase, mock
|
|
22
20
|
|
|
23
21
|
import pytest
|
|
@@ -814,6 +812,16 @@ def test_timeit_invalid_return():
|
|
|
814
812
|
with pytest.raises(SyntaxError):
|
|
815
813
|
_ip.run_line_magic('timeit', 'return')
|
|
816
814
|
|
|
815
|
+
def test_timeit_raise_on_interrupt():
|
|
816
|
+
ip = get_ipython()
|
|
817
|
+
|
|
818
|
+
with pytest.raises(KeyboardInterrupt):
|
|
819
|
+
thread = Thread(target=_interrupt_after_1s)
|
|
820
|
+
thread.start()
|
|
821
|
+
ip.run_cell_magic("timeit", "", "from time import sleep; sleep(2)")
|
|
822
|
+
thread.join()
|
|
823
|
+
|
|
824
|
+
|
|
817
825
|
@dec.skipif(execution.profile is None)
|
|
818
826
|
def test_prun_special_syntax():
|
|
819
827
|
"Test %%prun with IPython special syntax"
|
|
@@ -1542,6 +1550,16 @@ def test_timeit_arguments():
|
|
|
1542
1550
|
_ip.run_line_magic("timeit", "-n1 -r1 a=('#')")
|
|
1543
1551
|
|
|
1544
1552
|
|
|
1553
|
+
def test_time_raise_on_interrupt():
|
|
1554
|
+
ip = get_ipython()
|
|
1555
|
+
|
|
1556
|
+
with pytest.raises(KeyboardInterrupt):
|
|
1557
|
+
thread = Thread(target=_interrupt_after_1s)
|
|
1558
|
+
thread.start()
|
|
1559
|
+
ip.run_cell_magic("time", "", "from time import sleep; sleep(2)")
|
|
1560
|
+
thread.join()
|
|
1561
|
+
|
|
1562
|
+
|
|
1545
1563
|
MINIMAL_LAZY_MAGIC = """
|
|
1546
1564
|
from IPython.core.magic import (
|
|
1547
1565
|
Magics,
|
|
@@ -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
|
-
|
|
177
|
-
|
|
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
|
|
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.
|
|
@@ -326,16 +339,13 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
326
339
|
# we likely want to store the current cursor position, and cancel if the cursor has moved.
|
|
327
340
|
try:
|
|
328
341
|
import jupyter_ai_magics
|
|
329
|
-
import jupyter_ai.completions.models as jai_models
|
|
330
342
|
except ModuleNotFoundError:
|
|
331
|
-
|
|
343
|
+
jupyter_ai_magics = None
|
|
332
344
|
if not self._llm_provider:
|
|
333
345
|
warnings.warn("No LLM provider found, cannot trigger LLM completions")
|
|
334
346
|
return
|
|
335
|
-
if
|
|
336
|
-
warnings.warn(
|
|
337
|
-
"LLM Completion requires `jupyter_ai_magics` and `jupyter_ai` to be installed"
|
|
338
|
-
)
|
|
347
|
+
if jupyter_ai_magics is None:
|
|
348
|
+
warnings.warn("LLM Completion requires `jupyter_ai_magics` to be installed")
|
|
339
349
|
|
|
340
350
|
self._cancel_running_llm_task()
|
|
341
351
|
|
|
@@ -362,10 +372,10 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
362
372
|
provider to stream it's response back to us iteratively setting it as
|
|
363
373
|
the suggestion on the current buffer.
|
|
364
374
|
|
|
365
|
-
Unlike with JupyterAi, as we do not have multiple
|
|
375
|
+
Unlike with JupyterAi, as we do not have multiple cells, the cell id
|
|
366
376
|
is always set to `None`.
|
|
367
377
|
|
|
368
|
-
We set the prefix to the current cell content, but could also
|
|
378
|
+
We set the prefix to the current cell content, but could also insert the
|
|
369
379
|
rest of the history or even just the non-fail history.
|
|
370
380
|
|
|
371
381
|
In the same way, we do not have cell id.
|
|
@@ -378,21 +388,27 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
|
|
|
378
388
|
providers.
|
|
379
389
|
"""
|
|
380
390
|
try:
|
|
381
|
-
import jupyter_ai_magics
|
|
382
391
|
import jupyter_ai.completions.models as jai_models
|
|
383
392
|
except ModuleNotFoundError:
|
|
384
393
|
jai_models = None
|
|
385
394
|
|
|
395
|
+
if not jai_models:
|
|
396
|
+
raise ValueError("jupyter-ai is not installed")
|
|
397
|
+
|
|
398
|
+
if not self._llm_provider:
|
|
399
|
+
raise ValueError("No LLM provider found, cannot trigger LLM completions")
|
|
400
|
+
|
|
386
401
|
hm = buffer.history.shell.history_manager
|
|
387
402
|
prefix = self._llm_prefixer(hm)
|
|
388
403
|
get_ipython().log.debug("prefix: %s", prefix)
|
|
389
404
|
|
|
390
405
|
self._request_number += 1
|
|
391
406
|
request_number = self._request_number
|
|
407
|
+
|
|
392
408
|
request = jai_models.InlineCompletionRequest(
|
|
393
409
|
number=request_number,
|
|
394
|
-
prefix=prefix + buffer.document.
|
|
395
|
-
suffix=
|
|
410
|
+
prefix=prefix + buffer.document.text_before_cursor,
|
|
411
|
+
suffix=buffer.document.text_after_cursor,
|
|
396
412
|
mime="text/x-python",
|
|
397
413
|
stream=True,
|
|
398
414
|
path=None,
|
|
@@ -438,7 +454,7 @@ async def llm_autosuggestion(event: KeyPressEvent):
|
|
|
438
454
|
doc = event.current_buffer.document
|
|
439
455
|
lines_to_insert = max(0, _MIN_LINES - doc.line_count + doc.cursor_position_row)
|
|
440
456
|
for _ in range(lines_to_insert):
|
|
441
|
-
event.current_buffer.insert_text("\n", move_cursor=False)
|
|
457
|
+
event.current_buffer.insert_text("\n", move_cursor=False, fire_event=False)
|
|
442
458
|
|
|
443
459
|
await provider._trigger_llm(event.current_buffer)
|
|
444
460
|
|
|
@@ -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
|
|
|
@@ -42,7 +43,7 @@ class FibonacciCompletionProvider(BaseProvider, FakeListLLM): # type: ignore[mi
|
|
|
42
43
|
|
|
43
44
|
assert request.number > 0
|
|
44
45
|
token = f"t{request.number}s0"
|
|
45
|
-
last_line = request.prefix.
|
|
46
|
+
last_line = request.prefix.splitlines()[-1]
|
|
46
47
|
|
|
47
48
|
if not FIBONACCI.startswith(last_line):
|
|
48
49
|
return
|
|
@@ -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,6 @@
|
|
|
1
1
|
import pytest
|
|
2
|
+
import time
|
|
3
|
+
from IPython.terminal.interactiveshell import PtkHistoryAdapter
|
|
2
4
|
from IPython.terminal.shortcuts.auto_suggest import (
|
|
3
5
|
accept,
|
|
4
6
|
accept_or_jump_to_end,
|
|
@@ -46,7 +48,7 @@ def make_event(text, cursor, suggestion):
|
|
|
46
48
|
try:
|
|
47
49
|
from .fake_llm import FIBONACCI
|
|
48
50
|
except ImportError:
|
|
49
|
-
FIBONACCI =
|
|
51
|
+
FIBONACCI = ""
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
@dec.skip_without("jupyter_ai")
|
|
@@ -56,13 +58,28 @@ async def test_llm_autosuggestion():
|
|
|
56
58
|
ip = get_ipython()
|
|
57
59
|
ip.auto_suggest = provider
|
|
58
60
|
ip.llm_provider_class = "IPython.terminal.tests.fake_llm.FibonacciCompletionProvider"
|
|
61
|
+
ip.history_manager.get_range = Mock(return_value=[])
|
|
59
62
|
text = "def fib"
|
|
60
|
-
event =
|
|
61
|
-
event.current_buffer
|
|
63
|
+
event = Mock()
|
|
64
|
+
event.current_buffer = Buffer(
|
|
65
|
+
history=PtkHistoryAdapter(ip),
|
|
66
|
+
)
|
|
67
|
+
event.current_buffer.insert_text(text, move_cursor=True)
|
|
62
68
|
await llm_autosuggestion(event)
|
|
63
69
|
assert event.current_buffer.suggestion.text == FIBONACCI[len(text) :]
|
|
64
70
|
|
|
65
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
|
+
|
|
66
83
|
@pytest.mark.parametrize(
|
|
67
84
|
"text, suggestion, expected",
|
|
68
85
|
[
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# GENERATED BY setup.py
|
|
2
|
-
commit = "
|
|
2
|
+
commit = "86a50d33a"
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -15,8 +15,11 @@ Module: :mod:`core.compilerop`
|
|
|
15
15
|
|
|
16
16
|
.. automethod:: __init__
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
2 Functions
|
|
19
|
+
-----------
|
|
20
20
|
|
|
21
21
|
.. autofunction:: IPython.core.compilerop.code_name
|
|
22
22
|
|
|
23
|
+
|
|
24
|
+
.. autofunction:: IPython.core.compilerop.check_linecache_ipython
|
|
25
|
+
|
|
@@ -55,9 +55,12 @@ Module: :mod:`core.completer`
|
|
|
55
55
|
|
|
56
56
|
.. automethod:: __init__
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
18 Functions
|
|
59
59
|
------------
|
|
60
60
|
|
|
61
|
+
.. autofunction:: IPython.core.completer.cast
|
|
62
|
+
|
|
63
|
+
|
|
61
64
|
.. autofunction:: IPython.core.completer.provisionalcompleter
|
|
62
65
|
|
|
63
66
|
|
|
@@ -105,3 +108,6 @@ Module: :mod:`core.completer`
|
|
|
105
108
|
|
|
106
109
|
.. autofunction:: IPython.core.completer.back_latex_name_matcher
|
|
107
110
|
|
|
111
|
+
|
|
112
|
+
.. autofunction:: IPython.core.completer.back_latex_name_matches
|
|
113
|
+
|