ipython 9.8.0__tar.gz → 9.9.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-9.8.0 → ipython-9.9.0}/IPython/core/async_helpers.py +4 -9
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/completer.py +2 -2
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/interactiveshell.py +1 -1
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/prefilter.py +2 -2
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/release.py +1 -1
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/splitinput.py +45 -35
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/tips.py +10 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/extensions/deduperreload/deduperreload_patching.py +3 -8
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/pretty.py +8 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/shortcuts/__init__.py +1 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-9.8.0/ipython.egg-info → ipython-9.9.0}/PKG-INFO +3 -2
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/conf.py +6 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/install/install.rst +26 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/sphinx.toml +1 -1
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version9.rst +56 -4
- {ipython-9.8.0 → ipython-9.9.0/ipython.egg-info}/PKG-INFO +3 -2
- {ipython-9.8.0 → ipython-9.9.0}/ipython.egg-info/SOURCES.txt +1 -2
- {ipython-9.8.0 → ipython-9.9.0}/ipython.egg-info/requires.txt +2 -1
- {ipython-9.8.0 → ipython-9.9.0}/pyproject.toml +2 -1
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_async_helpers.py +11 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_completer.py +23 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_pretty.py +25 -0
- ipython-9.8.0/docs/sphinxext/github.py +0 -168
- {ipython-9.8.0 → ipython-9.9.0}/.flake8 +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/.mailmap +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/.pre-commit-config.yaml +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/COPYING.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/__main__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/alias.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/application.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/autocall.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/compilerop.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/completerlib.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/crashhandler.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/debugger.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/debugger_backport.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/display.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/display_functions.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/display_trap.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/displayhook.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/displaypub.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/doctb.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/error.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/events.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/extensions.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/formatters.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/getipython.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/guarded_eval.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/history.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/historyapp.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/hooks.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/logger.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/macro.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magic.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/auto.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/basic.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/code.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/config.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/display.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/execution.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/extension.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/history.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/logging.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/osm.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/magics/script.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/oinspect.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/page.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/payload.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/payloadpage.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/profileapp.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/profiledir.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/pylabtools.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/shellapp.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/tbtools.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/ultratb.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/core/usage.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/display.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/extensions/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/extensions/deduperreload/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/extensions/deduperreload/deduperreload.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/external/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/external/pickleshare.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/clipboard.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/deepreload.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/demo.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/display.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/guisupport.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/latextools.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/lib/lexers.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/paths.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/py.typed +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/debugger.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/embed.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/interactiveshell.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/magics.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/prompts.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/decorators.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/testing/tools.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/_process_common.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/capture.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/coloransi.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/contexts.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/data.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/decorators.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/dir2.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/docs.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/encoding.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/eventful.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/frame.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/generics.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/importstring.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/io.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/log.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/module_paths.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/openpy.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/path.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/process.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/py3compat.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/sentinel.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/tempdir.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/terminal.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/text.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/timing.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/IPython/utils/wildcard.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/LICENSE +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/MANIFEST.in +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/README.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/_build_meta.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/Makefile +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/README.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/autogen_api.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/autogen_config.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/autogen_magics.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/make.cmd +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/man/ipython.1 +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/requirements.txt +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_static/logo.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/about/history.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/about/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/api/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/details.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/integrating.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/intro.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/options/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/coredev/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/config.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/execution.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/kernels.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/messaging.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/install/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/links.txt +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/overview.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/parallel/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/sphinxext.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/source/whatsnew/version8.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/docs/sphinxext/magics.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/auto_suggest_llm.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/long_description.rst +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/scripts/ipython.ico +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/scripts/ipython_nb.ico +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/setup.cfg +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/setup.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/setupbase.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/2x2.jpg +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/2x2.png +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/__init__.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/bad_all.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/conftest.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/fake_ext_dir/daft_extension.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/fake_llm.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/nonascii.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/nonascii2.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/print_argv.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/refbug.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/simpleerr.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/tclass.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test.wav +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_alias.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_application.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_autocall.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_backgroundjobs.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_capture.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_clipboard.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_compilerop.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_completerlib.py +0 -0
- /ipython-9.8.0/tests/cve.py → /ipython-9.9.0/tests/test_cve.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_debug_magic.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_debugger.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_decorators.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_decorators_2.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_deepreload.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_dir2.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_display.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_display_2.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_displayhook.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_editorhooks.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_embed.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_events.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_extension.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_formatters.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_guarded_eval.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_handlers.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_help.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_history.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_hooks.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_imports.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_importstring.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_inputtransformer2.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_inputtransformer2_line.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_interactiveshell.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_interactivshell.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_io.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_iplib.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_ipunittest.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_latextools.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_logger.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_magic.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_magic_arguments.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_magic_terminal.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_module_paths.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_oinspect.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_openpy.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_page.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_path.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_paths.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_prefilter.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_process.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_profile.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_pt_inputhooks.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_pycolorize.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_pylabtools.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_qt_loaders.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_run.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_shellapp.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_shortcuts.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_splitinput.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_storemagic.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_sysinfo.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_tempdir.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_text.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_tips.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_tokenutil.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_tools.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_ultratb.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_wildcard.py +0 -0
- {ipython-9.8.0 → ipython-9.9.0}/tests/test_zzz_autoreload.py +0 -0
|
@@ -136,20 +136,15 @@ def _pseudo_sync_runner(coro):
|
|
|
136
136
|
|
|
137
137
|
|
|
138
138
|
def _should_be_async(cell: str) -> bool:
|
|
139
|
-
"""Detect if a block of code
|
|
139
|
+
"""Detect if a block of code needs to be wrapped in an `async def`
|
|
140
140
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
If it works, assume it should be async. Otherwise Return False.
|
|
145
|
-
|
|
146
|
-
Not handled yet: If the block of code has a return statement as the top
|
|
147
|
-
level, it will be seen as async. This is a know limitation.
|
|
141
|
+
If the code block has a top-level return statement or is otherwise
|
|
142
|
+
invalid, `False` will be returned.
|
|
148
143
|
"""
|
|
149
144
|
try:
|
|
150
145
|
code = compile(
|
|
151
146
|
cell, "<>", "exec", flags=getattr(ast, "PyCF_ALLOW_TOP_LEVEL_AWAIT", 0x0)
|
|
152
147
|
)
|
|
153
148
|
return inspect.CO_COROUTINE & code.co_flags == inspect.CO_COROUTINE
|
|
154
|
-
except (SyntaxError, MemoryError):
|
|
149
|
+
except (SyntaxError, ValueError, MemoryError):
|
|
155
150
|
return False
|
|
@@ -2608,8 +2608,8 @@ class IPCompleter(Completer):
|
|
|
2608
2608
|
if re.search(r"(?<!\w)(?<!\d\.)([-+]?\d+\.(\d+)?)(?!\w)$", line):
|
|
2609
2609
|
return self._CompletionContextType.GLOBAL
|
|
2610
2610
|
|
|
2611
|
-
# Handle all other attribute matches np.ran, d[0].k, (a,b).count
|
|
2612
|
-
chain_match = re.search(r".*(.+(?<!\s)\.(?:[a-zA-
|
|
2611
|
+
# Handle all other attribute matches np.ran, d[0].k, (a,b).count, obj._private
|
|
2612
|
+
chain_match = re.search(r".*(.+(?<!\s)\.(?:[a-zA-Z_]\w*)?)$", line)
|
|
2613
2613
|
if chain_match:
|
|
2614
2614
|
return self._CompletionContextType.ATTRIBUTE
|
|
2615
2615
|
|
|
@@ -2141,7 +2141,7 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
2141
2141
|
|
|
2142
2142
|
def showtraceback(
|
|
2143
2143
|
self,
|
|
2144
|
-
exc_tuple: tuple[type[BaseException], BaseException,
|
|
2144
|
+
exc_tuple: tuple[type[BaseException], BaseException, AnyType] | None = None,
|
|
2145
2145
|
filename: str | None = None,
|
|
2146
2146
|
tb_offset: int | None = None,
|
|
2147
2147
|
exception_only: bool = False,
|
|
@@ -498,7 +498,7 @@ class AutocallChecker(PrefilterChecker):
|
|
|
498
498
|
if not self.shell.autocall:
|
|
499
499
|
return None
|
|
500
500
|
|
|
501
|
-
oinfo =
|
|
501
|
+
oinfo = self.shell._ofind(line_info.ifun) # This can mutate state via getattr
|
|
502
502
|
if not oinfo.found:
|
|
503
503
|
return None
|
|
504
504
|
|
|
@@ -610,7 +610,7 @@ class AutoHandler(PrefilterHandler):
|
|
|
610
610
|
the_rest = line_info.the_rest
|
|
611
611
|
esc = line_info.esc
|
|
612
612
|
continue_prompt = line_info.continue_prompt
|
|
613
|
-
obj =
|
|
613
|
+
obj = self.shell._ofind(line_info.ifun).obj
|
|
614
614
|
|
|
615
615
|
# This should only be active for single-line input!
|
|
616
616
|
if continue_prompt:
|
|
@@ -1,35 +1,21 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
1
|
"""
|
|
3
2
|
Simple utility for splitting user input. This is used by both inputsplitter and
|
|
4
3
|
prefilter.
|
|
5
|
-
|
|
6
|
-
Authors:
|
|
7
|
-
|
|
8
|
-
* Brian Granger
|
|
9
|
-
* Fernando Perez
|
|
10
4
|
"""
|
|
11
5
|
|
|
12
|
-
|
|
13
|
-
# Copyright (C) 2008-2011 The IPython Development Team
|
|
14
|
-
#
|
|
15
|
-
# Distributed under the terms of the BSD License. The full license is in
|
|
16
|
-
# the file COPYING, distributed as part of this software.
|
|
17
|
-
#-----------------------------------------------------------------------------
|
|
18
|
-
|
|
19
|
-
#-----------------------------------------------------------------------------
|
|
6
|
+
# -----------------------------------------------------------------------------
|
|
20
7
|
# Imports
|
|
21
|
-
|
|
8
|
+
# -----------------------------------------------------------------------------
|
|
22
9
|
|
|
23
10
|
import re
|
|
24
11
|
import sys
|
|
12
|
+
import warnings
|
|
25
13
|
|
|
26
|
-
from IPython.utils import py3compat
|
|
27
|
-
from IPython.utils.encoding import get_stream_enc
|
|
28
14
|
from IPython.core.oinspect import OInfo
|
|
29
15
|
|
|
30
|
-
|
|
16
|
+
# -----------------------------------------------------------------------------
|
|
31
17
|
# Main function
|
|
32
|
-
|
|
18
|
+
# -----------------------------------------------------------------------------
|
|
33
19
|
|
|
34
20
|
# RegExp for splitting line contents into pre-char//first word-method//rest.
|
|
35
21
|
# For clarity, each group in on one line.
|
|
@@ -42,22 +28,25 @@ from IPython.core.oinspect import OInfo
|
|
|
42
28
|
# ! and !! trigger if they are first char(s) *or* follow an indent
|
|
43
29
|
# ? triggers as first or last char.
|
|
44
30
|
|
|
45
|
-
line_split = re.compile(
|
|
31
|
+
line_split = re.compile(
|
|
32
|
+
r"""
|
|
46
33
|
^(\s*) # any leading space
|
|
47
34
|
([,;/%]|!!?|\?\??)? # escape character or characters
|
|
48
35
|
\s*(%{0,2}[\w\.\*]*) # function/method, possibly with leading %
|
|
49
36
|
# to correctly treat things like '?%magic'
|
|
50
37
|
(.*?$|$) # rest of line
|
|
51
|
-
""",
|
|
38
|
+
""",
|
|
39
|
+
re.VERBOSE,
|
|
40
|
+
)
|
|
52
41
|
|
|
53
42
|
|
|
54
|
-
def split_user_input(
|
|
43
|
+
def split_user_input(
|
|
44
|
+
line: str, pattern: re.Pattern[str] | None = None
|
|
45
|
+
) -> tuple[str, str, str, str]:
|
|
55
46
|
"""Split user input into initial whitespace, escape character, function part
|
|
56
47
|
and the rest.
|
|
57
48
|
"""
|
|
58
|
-
|
|
59
|
-
encoding = get_stream_enc(sys.stdin, 'utf-8')
|
|
60
|
-
line = py3compat.cast_unicode(line, encoding)
|
|
49
|
+
assert isinstance(line, str)
|
|
61
50
|
|
|
62
51
|
if pattern is None:
|
|
63
52
|
pattern = line_split
|
|
@@ -65,11 +54,11 @@ def split_user_input(line, pattern=None):
|
|
|
65
54
|
if not match:
|
|
66
55
|
# print("match failed for line '%s'" % line)
|
|
67
56
|
try:
|
|
68
|
-
ifun, the_rest = line.split(None,1)
|
|
57
|
+
ifun, the_rest = line.split(None, 1)
|
|
69
58
|
except ValueError:
|
|
70
59
|
# print("split failed for line '%s'" % line)
|
|
71
|
-
ifun, the_rest = line,
|
|
72
|
-
pre = re.match(r
|
|
60
|
+
ifun, the_rest = line, ""
|
|
61
|
+
pre = re.match(r"^(\s*)(.*)", line).groups()[0]
|
|
73
62
|
esc = ""
|
|
74
63
|
else:
|
|
75
64
|
pre, esc, ifun, the_rest = match.groups()
|
|
@@ -111,15 +100,27 @@ class LineInfo:
|
|
|
111
100
|
raw_the_rest
|
|
112
101
|
the_rest without whitespace stripped.
|
|
113
102
|
"""
|
|
114
|
-
|
|
115
|
-
|
|
103
|
+
|
|
104
|
+
line: str
|
|
105
|
+
continue_prompt: bool
|
|
106
|
+
pre: str
|
|
107
|
+
esc: str
|
|
108
|
+
ifun: str
|
|
109
|
+
raw_the_rest: str
|
|
110
|
+
the_rest: str
|
|
111
|
+
pre_char: str
|
|
112
|
+
pre_whitespace: str
|
|
113
|
+
|
|
114
|
+
def __init__(self, line: str, continue_prompt: bool = False) -> None:
|
|
115
|
+
assert isinstance(line, str)
|
|
116
|
+
self.line = line
|
|
116
117
|
self.continue_prompt = continue_prompt
|
|
117
118
|
self.pre, self.esc, self.ifun, self.raw_the_rest = split_user_input(line)
|
|
118
119
|
self.the_rest = self.raw_the_rest.lstrip()
|
|
119
120
|
|
|
120
|
-
self.pre_char
|
|
121
|
+
self.pre_char = self.pre.strip()
|
|
121
122
|
if self.pre_char:
|
|
122
|
-
self.pre_whitespace =
|
|
123
|
+
self.pre_whitespace = "" # No whitespace allowed before esc chars
|
|
123
124
|
else:
|
|
124
125
|
self.pre_whitespace = self.pre
|
|
125
126
|
|
|
@@ -135,11 +136,20 @@ class LineInfo:
|
|
|
135
136
|
|
|
136
137
|
Does cache the results of the call, so can be called multiple times
|
|
137
138
|
without worrying about *further* damaging state.
|
|
139
|
+
|
|
140
|
+
.. deprecated:: 9.8
|
|
141
|
+
Use ``shell._ofind(line_info.ifun)`` directly instead.
|
|
138
142
|
"""
|
|
143
|
+
warnings.warn(
|
|
144
|
+
"LineInfo.ofind() is deprecated since IPython 9.9. "
|
|
145
|
+
"Use shell._ofind(line_info.ifun) directly instead.",
|
|
146
|
+
DeprecationWarning,
|
|
147
|
+
stacklevel=2,
|
|
148
|
+
)
|
|
139
149
|
return ip._ofind(self.ifun)
|
|
140
150
|
|
|
141
|
-
def __str__(self):
|
|
142
|
-
return "LineInfo [%s|%s|%s|%s]" %(self.pre, self.esc, self.ifun, self.the_rest)
|
|
151
|
+
def __str__(self) -> str:
|
|
152
|
+
return "LineInfo [%s|%s|%s|%s]" % (self.pre, self.esc, self.ifun, self.the_rest)
|
|
143
153
|
|
|
144
|
-
def __repr__(self):
|
|
154
|
+
def __repr__(self) -> str:
|
|
145
155
|
return "<" + str(self) + ">"
|
|
@@ -107,6 +107,16 @@ else:
|
|
|
107
107
|
]
|
|
108
108
|
)
|
|
109
109
|
|
|
110
|
+
# Check if argcomplete is installed and add tip
|
|
111
|
+
try:
|
|
112
|
+
import argcomplete
|
|
113
|
+
|
|
114
|
+
_tips["random"].append(
|
|
115
|
+
"Run `activate-global-python-argcomplete` from your shell to enable CLI completion for IPython"
|
|
116
|
+
)
|
|
117
|
+
except ModuleNotFoundError:
|
|
118
|
+
pass
|
|
119
|
+
|
|
110
120
|
|
|
111
121
|
def pick_tip() -> str:
|
|
112
122
|
current_date = datetime.now()
|
|
@@ -7,12 +7,7 @@ NOT_FOUND: object = object()
|
|
|
7
7
|
NULL: object = object()
|
|
8
8
|
_MAX_FIELD_SEARCH_OFFSET = 50
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
WORD_TYPE: type[ctypes.c_int32] | type[ctypes.c_int64] = ctypes.c_int64
|
|
12
|
-
WORD_N_BYTES = 8
|
|
13
|
-
else:
|
|
14
|
-
WORD_TYPE = ctypes.c_int32
|
|
15
|
-
WORD_N_BYTES = 4
|
|
10
|
+
POINTER_N_BYTES = ctypes.sizeof(ctypes.c_void_p)
|
|
16
11
|
|
|
17
12
|
|
|
18
13
|
class DeduperReloaderPatchingMixin:
|
|
@@ -32,7 +27,7 @@ class DeduperReloaderPatchingMixin:
|
|
|
32
27
|
for offset in range(1, _MAX_FIELD_SEARCH_OFFSET):
|
|
33
28
|
if (
|
|
34
29
|
ctypes.cast(
|
|
35
|
-
obj_addr +
|
|
30
|
+
obj_addr + POINTER_N_BYTES * offset, ctypes.POINTER(ctypes.c_void_p)
|
|
36
31
|
).contents.value
|
|
37
32
|
== field_addr
|
|
38
33
|
):
|
|
@@ -69,7 +64,7 @@ class DeduperReloaderPatchingMixin:
|
|
|
69
64
|
if new_value not in (None, NULL):
|
|
70
65
|
ctypes.pythonapi.Py_IncRef(ctypes.py_object(new_value))
|
|
71
66
|
ctypes.cast(
|
|
72
|
-
obj_addr +
|
|
67
|
+
obj_addr + POINTER_N_BYTES * offset, ctypes.POINTER(ctypes.c_void_p)
|
|
73
68
|
).contents.value = new_value_addr
|
|
74
69
|
|
|
75
70
|
@classmethod
|
|
@@ -109,6 +109,14 @@ from IPython.utils.py3compat import PYPY
|
|
|
109
109
|
|
|
110
110
|
from typing import Dict
|
|
111
111
|
|
|
112
|
+
# Allow pretty-printing of functions with PEP-649 annotations
|
|
113
|
+
if sys.version_info >= (3, 14):
|
|
114
|
+
from annotationlib import Format
|
|
115
|
+
from functools import partial
|
|
116
|
+
|
|
117
|
+
signature = partial(signature, annotation_format=Format.FORWARDREF)
|
|
118
|
+
|
|
119
|
+
|
|
112
120
|
__all__ = ['pretty', 'pprint', 'PrettyPrinter', 'RepresentationPrinter',
|
|
113
121
|
'for_type', 'for_type_by_name', 'RawText', 'RawStringLiteral', 'CallExpression']
|
|
114
122
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# GENERATED BY setup.py
|
|
2
|
-
commit = "
|
|
2
|
+
commit = "0c28fe5"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ipython
|
|
3
|
-
Version: 9.
|
|
3
|
+
Version: 9.9.0
|
|
4
4
|
Summary: IPython: Productive Interactive Computing
|
|
5
5
|
Author: The IPython Development Team
|
|
6
6
|
Author-email: ipython-dev@python.org
|
|
@@ -70,7 +70,8 @@ Requires-Dist: trio>=0.1.0; extra == "test-extra"
|
|
|
70
70
|
Provides-Extra: matplotlib
|
|
71
71
|
Requires-Dist: matplotlib>3.9; extra == "matplotlib"
|
|
72
72
|
Provides-Extra: all
|
|
73
|
-
Requires-Dist: ipython[doc,matplotlib,test,test_extra]; extra == "all"
|
|
73
|
+
Requires-Dist: ipython[doc,matplotlib,terminal,test,test_extra]; extra == "all"
|
|
74
|
+
Requires-Dist: argcomplete>=3.0; extra == "all"
|
|
74
75
|
Dynamic: author
|
|
75
76
|
Dynamic: author-email
|
|
76
77
|
Dynamic: license-file
|
|
@@ -92,6 +92,12 @@ intersphinx_mapping = get_intersphinx_mapping(
|
|
|
92
92
|
}
|
|
93
93
|
)
|
|
94
94
|
|
|
95
|
+
# External links configuration (replaces custom github extension)
|
|
96
|
+
extlinks = {
|
|
97
|
+
"ghissue": ("https://github.com/ipython/ipython/issues/%s/", "#%s"),
|
|
98
|
+
"ghpull": ("https://github.com/ipython/ipython/pull/%s/", "PR #%s"),
|
|
99
|
+
}
|
|
100
|
+
|
|
95
101
|
|
|
96
102
|
# Options for HTML output
|
|
97
103
|
# -----------------------
|
|
@@ -78,6 +78,32 @@ The quickest way to get up and running with IPython is to install it with pip:
|
|
|
78
78
|
That's it.
|
|
79
79
|
|
|
80
80
|
|
|
81
|
+
Optional: Command-line completion
|
|
82
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
83
|
+
|
|
84
|
+
IPython supports command-line completion via the ``argcomplete`` package.
|
|
85
|
+
To enable tab completion for IPython and other Python programs that support
|
|
86
|
+
argcomplete, install IPython with the ``terminal`` extra:
|
|
87
|
+
|
|
88
|
+
.. code-block:: bash
|
|
89
|
+
|
|
90
|
+
$ pip install ipython[all]
|
|
91
|
+
$ activate-global-python-argcomplete
|
|
92
|
+
|
|
93
|
+
Alternatively, you can install argcomplete separately:
|
|
94
|
+
|
|
95
|
+
.. code-block:: bash
|
|
96
|
+
|
|
97
|
+
$ pip install argcomplete
|
|
98
|
+
$ activate-global-python-argcomplete
|
|
99
|
+
|
|
100
|
+
This will enable shell completion for all Python programs that support argcomplete,
|
|
101
|
+
including IPython. Note that you may need to restart your shell for the changes
|
|
102
|
+
to take effect.
|
|
103
|
+
|
|
104
|
+
For more information, see the `argcomplete documentation <https://github.com/kislyuk/argcomplete>`_.
|
|
105
|
+
|
|
106
|
+
|
|
81
107
|
.. _devinstall:
|
|
82
108
|
|
|
83
109
|
Installing the development version
|
|
@@ -13,11 +13,11 @@ extensions = [
|
|
|
13
13
|
"sphinx.ext.inheritance_diagram",
|
|
14
14
|
"sphinx.ext.intersphinx",
|
|
15
15
|
"sphinx.ext.graphviz",
|
|
16
|
+
"sphinx.ext.extlinks", # for easy GitHub links
|
|
16
17
|
"sphinxcontrib.jquery",
|
|
17
18
|
"IPython.sphinxext.ipython_console_highlighting",
|
|
18
19
|
"IPython.sphinxext.ipython_directive",
|
|
19
20
|
"sphinx.ext.napoleon", # to preprocess docstrings
|
|
20
|
-
"github", # for easy GitHub links
|
|
21
21
|
"magics",
|
|
22
22
|
"configtraits",
|
|
23
23
|
]
|
|
@@ -3,6 +3,55 @@
|
|
|
3
3
|
============
|
|
4
4
|
|
|
5
5
|
|
|
6
|
+
.. _version 9.9:
|
|
7
|
+
|
|
8
|
+
IPython 9.9
|
|
9
|
+
===========
|
|
10
|
+
|
|
11
|
+
This release includes several bug fixes and improvements across completions, type annotations, and developer experience.
|
|
12
|
+
|
|
13
|
+
- :ghpull:`15092` Fix formatting for completion suggestions section
|
|
14
|
+
- :ghpull:`15057` Reduce types in splitinput.py
|
|
15
|
+
- :ghpull:`15096` Use Any type in traceback tuple
|
|
16
|
+
- :ghpull:`15099` Fix filename of CVE test
|
|
17
|
+
- :ghpull:`15091` Skip downstream CI if only docs changes
|
|
18
|
+
- :ghpull:`15093` Replace sphinxext/github with extlink configuration
|
|
19
|
+
- :ghpull:`15103` Tips and docs about argcomplete
|
|
20
|
+
- :ghpull:`15105` Add prompt_toolkit's unix_word_rubout to assignable commands for shortcuts
|
|
21
|
+
- :ghpull:`15095` Enable pretty-printing for PEP-649 annotated functions
|
|
22
|
+
- :ghpull:`15106` Fix completions for methods starting with ``_``
|
|
23
|
+
- :ghpull:`15111` Stop assuming that memory addresses are signed
|
|
24
|
+
- :ghpull:`15102` Bump macOS runner version in GitHub Actions
|
|
25
|
+
- :ghpull:`15101` Fix crash on literal with surrogate
|
|
26
|
+
|
|
27
|
+
Improvements to PEP-649 Support
|
|
28
|
+
-------------------------------
|
|
29
|
+
|
|
30
|
+
IPython now properly pretty-prints functions with PEP-649 style annotations. This improves the display of functions in interactive sessions when using Python 3.14+ annotation semantics.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
Shell Shortcuts Enhancement
|
|
34
|
+
-----------------------------
|
|
35
|
+
|
|
36
|
+
The ``unix_word_rubout`` command from prompt_toolkit is now available as an assignable command for terminal shortcuts, giving users more flexibility in customizing their keybindings.
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
Type Annotation Improvements
|
|
40
|
+
----------------------------
|
|
41
|
+
|
|
42
|
+
Various type annotation improvements have been made throughout the codebase for better static analysis support, including fixes for tracebacks and improved type inference in the completion engine.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
Thanks
|
|
46
|
+
------
|
|
47
|
+
|
|
48
|
+
Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`_ for sponsoring
|
|
49
|
+
work on IPython.
|
|
50
|
+
|
|
51
|
+
As usual, you can find the full list of PRs on GitHub under `the 9.9
|
|
52
|
+
<https://github.com/ipython/ipython/milestone/157?closed=1>`__ milestone.
|
|
53
|
+
|
|
54
|
+
|
|
6
55
|
.. _version 9.8:
|
|
7
56
|
|
|
8
57
|
IPython 9.8
|
|
@@ -59,10 +108,13 @@ disabled:
|
|
|
59
108
|
attribute completions.
|
|
60
109
|
|
|
61
110
|
- File path completions are now strictly suppressed when completing attributes,
|
|
62
|
-
preventing confusion when typing patterns like ``obj.file``.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
111
|
+
preventing confusion when typing patterns like ``obj.file``.
|
|
112
|
+
|
|
113
|
+
- Union types in annotations (e.g., ``x: int | str``) are now properly handled
|
|
114
|
+
for completion suggestions.
|
|
115
|
+
|
|
116
|
+
- The completer now falls back to type annotations when runtime evaluation is
|
|
117
|
+
not available, improving completion accuracy for typed code.
|
|
66
118
|
|
|
67
119
|
|
|
68
120
|
Thanks
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ipython
|
|
3
|
-
Version: 9.
|
|
3
|
+
Version: 9.9.0
|
|
4
4
|
Summary: IPython: Productive Interactive Computing
|
|
5
5
|
Author: The IPython Development Team
|
|
6
6
|
Author-email: ipython-dev@python.org
|
|
@@ -70,7 +70,8 @@ Requires-Dist: trio>=0.1.0; extra == "test-extra"
|
|
|
70
70
|
Provides-Extra: matplotlib
|
|
71
71
|
Requires-Dist: matplotlib>3.9; extra == "matplotlib"
|
|
72
72
|
Provides-Extra: all
|
|
73
|
-
Requires-Dist: ipython[doc,matplotlib,test,test_extra]; extra == "all"
|
|
73
|
+
Requires-Dist: ipython[doc,matplotlib,terminal,test,test_extra]; extra == "all"
|
|
74
|
+
Requires-Dist: argcomplete>=3.0; extra == "all"
|
|
74
75
|
Dynamic: author
|
|
75
76
|
Dynamic: author-email
|
|
76
77
|
Dynamic: license-file
|
|
@@ -326,7 +326,6 @@ docs/source/whatsnew/pr/antigravity-feature.rst
|
|
|
326
326
|
docs/source/whatsnew/pr/incompat-switching-to-perl.rst
|
|
327
327
|
docs/sphinxext/apigen.py
|
|
328
328
|
docs/sphinxext/configtraits.py
|
|
329
|
-
docs/sphinxext/github.py
|
|
330
329
|
docs/sphinxext/magics.py
|
|
331
330
|
examples/auto_suggest_llm.py
|
|
332
331
|
examples/Embedding/embed_class_long.py
|
|
@@ -357,7 +356,6 @@ tests/2x2.png
|
|
|
357
356
|
tests/__init__.py
|
|
358
357
|
tests/bad_all.py
|
|
359
358
|
tests/conftest.py
|
|
360
|
-
tests/cve.py
|
|
361
359
|
tests/fake_llm.py
|
|
362
360
|
tests/nonascii.py
|
|
363
361
|
tests/nonascii2.py
|
|
@@ -376,6 +374,7 @@ tests/test_clipboard.py
|
|
|
376
374
|
tests/test_compilerop.py
|
|
377
375
|
tests/test_completer.py
|
|
378
376
|
tests/test_completerlib.py
|
|
377
|
+
tests/test_cve.py
|
|
379
378
|
tests/test_debug_magic.py
|
|
380
379
|
tests/test_debugger.py
|
|
381
380
|
tests/test_decorators.py
|
|
@@ -4,6 +4,7 @@ Test for async helpers.
|
|
|
4
4
|
Should only trigger on python 3.5+ or will have syntax errors.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
import sys
|
|
7
8
|
from itertools import chain, repeat
|
|
8
9
|
from textwrap import dedent, indent
|
|
9
10
|
from typing import TYPE_CHECKING
|
|
@@ -44,6 +45,16 @@ class AsyncTest(TestCase):
|
|
|
44
45
|
)
|
|
45
46
|
)
|
|
46
47
|
|
|
48
|
+
self.assertFalse(_should_be_async("return await foo()"))
|
|
49
|
+
self.assertFalse(_should_be_async("return bar()"))
|
|
50
|
+
self.assertFalse(_should_be_async("some invalid Python code"))
|
|
51
|
+
|
|
52
|
+
self.assertFalse(_should_be_async("'\\ud800'"))
|
|
53
|
+
|
|
54
|
+
if sys.version_info >= (3, 13):
|
|
55
|
+
# Note: the next assert assumes the tests run without the `-OO` flag
|
|
56
|
+
self.assertFalse(_should_be_async("'\\ud800'\nawait foo"))
|
|
57
|
+
|
|
47
58
|
def _get_top_level_cases(self):
|
|
48
59
|
# These are test cases that should be valid in a function
|
|
49
60
|
# but invalid outside of a function.
|
|
@@ -2068,6 +2068,27 @@ class TestCompleter(unittest.TestCase):
|
|
|
2068
2068
|
a_matcher.matcher_priority = 3
|
|
2069
2069
|
_(["completion_a"])
|
|
2070
2070
|
|
|
2071
|
+
def test_private_attr_completions(self):
|
|
2072
|
+
ip = get_ipython()
|
|
2073
|
+
ip.user_ns["Test"] = type("Test", (), {"_test1": 1, "__test2": 2})
|
|
2074
|
+
ip.user_ns["t"] = ip.user_ns["Test"]()
|
|
2075
|
+
ip.Completer.use_jedi = False
|
|
2076
|
+
|
|
2077
|
+
try:
|
|
2078
|
+
with provisionalcompleter():
|
|
2079
|
+
completions = list(ip.Completer.completions(text="t._", offset=3))
|
|
2080
|
+
completion_texts = [c.text for c in completions]
|
|
2081
|
+
|
|
2082
|
+
assert (
|
|
2083
|
+
"._test1" in completion_texts
|
|
2084
|
+
), f"_test1 not found in {completion_texts}"
|
|
2085
|
+
assert (
|
|
2086
|
+
".__test2" in completion_texts
|
|
2087
|
+
), f"__test2 not found in {completion_texts}"
|
|
2088
|
+
finally:
|
|
2089
|
+
del ip.user_ns["Test"]
|
|
2090
|
+
del ip.user_ns["t"]
|
|
2091
|
+
|
|
2071
2092
|
|
|
2072
2093
|
@pytest.mark.parametrize(
|
|
2073
2094
|
"use_jedi,evaluation",
|
|
@@ -2739,6 +2760,8 @@ def test_no_file_completions_in_attr_access(code):
|
|
|
2739
2760
|
("dict_with_dots = {'key.with.dots': value.attr", "attribute"),
|
|
2740
2761
|
("d[f'{a}']['{a.", "global"),
|
|
2741
2762
|
("ls .", "global"),
|
|
2763
|
+
("t._", "attribute"),
|
|
2764
|
+
("t.__a", "attribute"),
|
|
2742
2765
|
],
|
|
2743
2766
|
)
|
|
2744
2767
|
def test_completion_context(line, expected):
|
|
@@ -543,6 +543,31 @@ def test_function_pretty():
|
|
|
543
543
|
assert "meaning_of_life(question=None)" in pretty.pretty(meaning_of_life)
|
|
544
544
|
|
|
545
545
|
|
|
546
|
+
def test_annotated_function_pretty():
|
|
547
|
+
"Test pretty print of a function with PEP-649 annotations"
|
|
548
|
+
# Confirm that the name is not in scope
|
|
549
|
+
try:
|
|
550
|
+
b
|
|
551
|
+
except NameError:
|
|
552
|
+
pass
|
|
553
|
+
else:
|
|
554
|
+
assert False, "Unexpected 'b' found in scope"
|
|
555
|
+
try:
|
|
556
|
+
def f(a: b): pass
|
|
557
|
+
except NameError as e:
|
|
558
|
+
if e.name == 'b':
|
|
559
|
+
# PEP-649 not available
|
|
560
|
+
return
|
|
561
|
+
raise
|
|
562
|
+
# Check whether __future__.annotations is in effect
|
|
563
|
+
# It probably shouldn't be, but to be sure:
|
|
564
|
+
import __future__
|
|
565
|
+
if f.__code__.co_flags & __future__.annotations.compiler_flag:
|
|
566
|
+
assert "f(a: 'b')" in pretty.pretty(f)
|
|
567
|
+
else:
|
|
568
|
+
assert "f(a: b)" in pretty.pretty(f)
|
|
569
|
+
|
|
570
|
+
|
|
546
571
|
class OrderedCounter(Counter, OrderedDict):
|
|
547
572
|
"Counter that remembers the order elements are first encountered"
|
|
548
573
|
|