ipython 9.10.0__tar.gz → 9.12.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.10.0 → ipython-9.12.0}/IPython/__init__.py +2 -2
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/alias.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/application.py +3 -2
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/compilerop.py +2 -2
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/completer.py +2 -6
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/debugger.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/events.py +12 -5
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/guarded_eval.py +1 -4
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/history.py +9 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/historyapp.py +39 -41
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/inputtransformer2.py +2 -25
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/interactiveshell.py +53 -7
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magic.py +104 -63
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/basic.py +13 -3
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/execution.py +4 -3
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/release.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/tbtools.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/ultratb.py +58 -29
- {ipython-9.10.0 → ipython-9.12.0}/IPython/extensions/deduperreload/deduperreload.py +2 -2
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/prompts.py +8 -4
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/shortcuts/filters.py +6 -6
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/decorators.py +10 -5
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/ipunittest.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/pytest_ipdoctest.py +3 -3
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/skipdoctest.py +2 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/tools.py +12 -10
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/_process_common.py +18 -15
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/_process_win32.py +5 -6
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/capture.py +8 -6
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/contexts.py +14 -5
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/decorators.py +16 -12
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/dir2.py +6 -3
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/frame.py +7 -4
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/io.py +4 -2
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/ipstruct.py +4 -3
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/openpy.py +6 -4
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/path.py +5 -5
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/py3compat.py +4 -3
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/strdispatch.py +2 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/tempdir.py +8 -5
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/terminal.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/text.py +1 -4
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/timing.py +18 -5
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/tokenutil.py +2 -2
- {ipython-9.10.0/ipython.egg-info → ipython-9.12.0}/PKG-INFO +13 -13
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version9.rst +126 -0
- {ipython-9.10.0 → ipython-9.12.0/ipython.egg-info}/PKG-INFO +13 -13
- {ipython-9.10.0 → ipython-9.12.0}/ipython.egg-info/requires.txt +11 -13
- {ipython-9.10.0 → ipython-9.12.0}/pyproject.toml +41 -18
- {ipython-9.10.0 → ipython-9.12.0}/setup.py +0 -51
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_completer.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_guarded_eval.py +1 -4
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_iplib.py +11 -15
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_magic.py +15 -2
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_oinspect.py +1 -1
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_pretty.py +6 -1
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_shortcuts.py +1 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_zzz_autoreload.py +0 -2
- {ipython-9.10.0 → ipython-9.12.0}/.flake8 +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/.mailmap +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/.pre-commit-config.yaml +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/COPYING.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/__main__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/async_helpers.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/autocall.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/completerlib.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/crashhandler.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/debugger_backport.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/display.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/display_functions.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/display_trap.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/displayhook.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/displaypub.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/doctb.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/error.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/extensions.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/formatters.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/getipython.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/hooks.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/logger.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/macro.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/auto.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/code.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/config.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/display.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/extension.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/history.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/logging.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/namespace.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/osm.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/magics/script.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/oinspect.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/page.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/payload.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/payloadpage.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/prefilter.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/profileapp.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/profiledir.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/pylabtools.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/shellapp.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/splitinput.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/tips.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/core/usage.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/display.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/extensions/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/extensions/autoreload.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/extensions/deduperreload/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/external/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/external/pickleshare.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/clipboard.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/deepreload.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/demo.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/display.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/guisupport.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/latextools.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/lexers.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/lib/pretty.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/paths.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/py.typed +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/debugger.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/embed.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/interactiveshell.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/magics.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/coloransi.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/data.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/docs.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/encoding.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/eventful.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/generics.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/importstring.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/log.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/module_paths.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/process.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/sentinel.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/IPython/utils/wildcard.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/LICENSE +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/MANIFEST.in +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/README.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/_build_meta.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/Makefile +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/README.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/autogen_api.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/autogen_config.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/autogen_magics.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/make.cmd +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/man/ipython.1 +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/requirements.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_static/logo.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/about/history.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/about/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/api/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/conf.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/details.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/integrating.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/intro.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/options/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/coredev/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/config.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/execution.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/kernels.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/messaging.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/install/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/install/install.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/links.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/overview.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/parallel/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/sphinx.toml +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/sphinxext.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/source/whatsnew/version8.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/docs/sphinxext/magics.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/auto_suggest_llm.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/ipython.egg-info/SOURCES.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/long_description.rst +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/scripts/ipython.ico +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/scripts/ipython_nb.ico +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/setup.cfg +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/setupbase.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/2x2.jpg +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/2x2.png +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/__init__.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/bad_all.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/conftest.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/fake_ext_dir/daft_extension.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/fake_llm.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/nonascii.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/nonascii2.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/print_argv.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/refbug.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/simpleerr.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/tclass.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test.wav +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_alias.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_application.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_async_helpers.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_autocall.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_backgroundjobs.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_capture.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_clipboard.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_compilerop.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_completerlib.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_cve.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_debug_magic.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_debugger.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_decorators.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_decorators_2.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_deepreload.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_dir2.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_display.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_display_2.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_displayhook.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_editorhooks.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_embed.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_events.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_extension.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_formatters.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_handlers.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_help.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_history.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_hooks.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_imports.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_importstring.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_inputtransformer2.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_inputtransformer2_line.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_interactiveshell.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_interactivshell.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_io.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_ipunittest.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_latextools.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_logger.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_magic_arguments.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_magic_terminal.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_module_paths.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_openpy.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_page.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_path.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_paths.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_prefilter.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_process.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_profile.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_pt_inputhooks.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_pycolorize.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_pylabtools.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_qt_loaders.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_run.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_shellapp.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_splitinput.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_storemagic.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_sysinfo.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_tempdir.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_text.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_tips.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_tokenutil.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_tools.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_ultratb.py +0 -0
- {ipython-9.10.0 → ipython-9.12.0}/tests/test_wildcard.py +0 -0
|
@@ -27,13 +27,13 @@ import warnings
|
|
|
27
27
|
#-----------------------------------------------------------------------------
|
|
28
28
|
|
|
29
29
|
# Don't forget to also update setup.py when this changes!
|
|
30
|
-
if sys.version_info < (3,
|
|
30
|
+
if sys.version_info < (3, 12):
|
|
31
31
|
raise ImportError(
|
|
32
32
|
"""
|
|
33
|
+
IPython 9.x supports Python 3.12 and above, following SPEC0
|
|
33
34
|
IPython 8.31+ supports Python 3.11 and above, following SPEC0
|
|
34
35
|
IPython 8.19+ supports Python 3.10 and above, following SPEC0.
|
|
35
36
|
IPython 8.13+ supports Python 3.9 and above, following NEP 29.
|
|
36
|
-
IPython 8.0-8.12 supports Python 3.8 and above, following NEP 29.
|
|
37
37
|
When using Python 2.7, please install IPython 5.x LTS Long Term Support version.
|
|
38
38
|
Python 3.3 and 3.4 were supported up to IPython 6.x.
|
|
39
39
|
Python 3.5 was supported with IPython 7.0 to 7.9.
|
|
@@ -33,10 +33,11 @@ from traitlets import (
|
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
if os.name == "nt":
|
|
36
|
+
# %PROGRAMDATA% is not safe by default, require opt-in to trust it
|
|
36
37
|
programdata = os.environ.get("PROGRAMDATA", None)
|
|
37
|
-
if programdata is not None:
|
|
38
|
+
if os.environ.get("IPYTHON_USE_PROGRAMDATA") == "1" and programdata is not None:
|
|
38
39
|
SYSTEM_CONFIG_DIRS = [str(Path(programdata) / "ipython")]
|
|
39
|
-
else:
|
|
40
|
+
else:
|
|
40
41
|
SYSTEM_CONFIG_DIRS = []
|
|
41
42
|
else:
|
|
42
43
|
SYSTEM_CONFIG_DIRS = [
|
|
@@ -51,7 +51,7 @@ PyCF_MASK = functools.reduce(operator.or_,
|
|
|
51
51
|
# Local utilities
|
|
52
52
|
#-----------------------------------------------------------------------------
|
|
53
53
|
|
|
54
|
-
def code_name(code, number=0):
|
|
54
|
+
def code_name(code, number=0) -> str:
|
|
55
55
|
""" Compute a (probably) unique name for code for caching.
|
|
56
56
|
|
|
57
57
|
This now expects code to be unicode.
|
|
@@ -116,7 +116,7 @@ class CachingCompiler(codeop.Compile):
|
|
|
116
116
|
"""
|
|
117
117
|
return code_name(transformed_code, number)
|
|
118
118
|
|
|
119
|
-
def format_code_name(self, name):
|
|
119
|
+
def format_code_name(self, name) -> str:
|
|
120
120
|
"""Return a user-friendly label and name for a code block.
|
|
121
121
|
|
|
122
122
|
Parameters
|
|
@@ -243,11 +243,7 @@ import __main__
|
|
|
243
243
|
|
|
244
244
|
from typing import cast
|
|
245
245
|
|
|
246
|
-
|
|
247
|
-
from typing_extensions import TypedDict, Protocol
|
|
248
|
-
from typing import NotRequired, TypeAlias, TypeGuard
|
|
249
|
-
else:
|
|
250
|
-
from typing import TypedDict, NotRequired, Protocol, TypeAlias, TypeGuard
|
|
246
|
+
from typing import TypedDict, NotRequired, Protocol, TypeAlias, TypeGuard
|
|
251
247
|
|
|
252
248
|
|
|
253
249
|
# skip module docstests
|
|
@@ -274,7 +270,7 @@ except ImportError:
|
|
|
274
270
|
# write this). With below range we cover them all, with a density of ~67%
|
|
275
271
|
# biggest next gap we consider only adds up about 1% density and there are 600
|
|
276
272
|
# gaps that would need hard coding.
|
|
277
|
-
_UNICODE_RANGES = [(32,
|
|
273
|
+
_UNICODE_RANGES = [(32, 0x3347A), (0xE0001, 0xE01F0)]
|
|
278
274
|
|
|
279
275
|
# Public API
|
|
280
276
|
__all__ = ["Completer", "IPCompleter"]
|
|
@@ -444,7 +444,7 @@ class Pdb(OldPdb):
|
|
|
444
444
|
self.message(
|
|
445
445
|
f"More than {self.MAX_CHAINED_EXCEPTION_DEPTH}"
|
|
446
446
|
" chained exceptions found, not all exceptions"
|
|
447
|
-
"will be browsable with `exceptions`."
|
|
447
|
+
" will be browsable with `exceptions`."
|
|
448
448
|
)
|
|
449
449
|
break
|
|
450
450
|
else:
|
|
@@ -15,10 +15,14 @@ events and the arguments which will be passed to them.
|
|
|
15
15
|
|
|
16
16
|
from __future__ import annotations
|
|
17
17
|
|
|
18
|
-
from typing import TYPE_CHECKING, Any, Callable, Iterable
|
|
18
|
+
from typing import TYPE_CHECKING, Any, Callable, Iterable, TypeVar
|
|
19
19
|
|
|
20
20
|
if TYPE_CHECKING:
|
|
21
|
-
from IPython.core.interactiveshell import
|
|
21
|
+
from IPython.core.interactiveshell import (
|
|
22
|
+
ExecutionInfo,
|
|
23
|
+
ExecutionResult,
|
|
24
|
+
InteractiveShell,
|
|
25
|
+
)
|
|
22
26
|
|
|
23
27
|
|
|
24
28
|
class EventManager:
|
|
@@ -106,7 +110,10 @@ class EventManager:
|
|
|
106
110
|
# event_name -> prototype mapping
|
|
107
111
|
available_events: dict[str, Callable[..., Any]] = {}
|
|
108
112
|
|
|
109
|
-
|
|
113
|
+
_CallbackT = TypeVar("_CallbackT", bound=Callable[..., Any])
|
|
114
|
+
|
|
115
|
+
def _define_event(callback_function: _CallbackT) -> _CallbackT:
|
|
116
|
+
"""Decorator to register a function as an available event prototype."""
|
|
110
117
|
available_events[callback_function.__name__] = callback_function
|
|
111
118
|
return callback_function
|
|
112
119
|
|
|
@@ -127,7 +134,7 @@ def pre_execute() -> None:
|
|
|
127
134
|
pass
|
|
128
135
|
|
|
129
136
|
@_define_event
|
|
130
|
-
def pre_run_cell(info:
|
|
137
|
+
def pre_run_cell(info: ExecutionInfo) -> None:
|
|
131
138
|
"""Fires before user-entered code runs.
|
|
132
139
|
|
|
133
140
|
Parameters
|
|
@@ -147,7 +154,7 @@ def post_execute() -> None:
|
|
|
147
154
|
pass
|
|
148
155
|
|
|
149
156
|
@_define_event
|
|
150
|
-
def post_run_cell(result:
|
|
157
|
+
def post_run_cell(result: ExecutionResult) -> None:
|
|
151
158
|
"""Fires after user-entered code runs.
|
|
152
159
|
|
|
153
160
|
Parameters
|
|
@@ -32,10 +32,7 @@ from IPython.utils.decorators import undoc
|
|
|
32
32
|
import types
|
|
33
33
|
from typing import Self, LiteralString, get_type_hints
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
from typing_extensions import TypeAliasType
|
|
37
|
-
else:
|
|
38
|
-
from typing import TypeAliasType
|
|
35
|
+
from typing import TypeAliasType
|
|
39
36
|
|
|
40
37
|
|
|
41
38
|
@undoc
|
|
@@ -10,6 +10,7 @@ import atexit
|
|
|
10
10
|
import datetime
|
|
11
11
|
import os
|
|
12
12
|
import re
|
|
13
|
+
import weakref
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
import threading
|
|
@@ -39,6 +40,8 @@ from IPython.utils.decorators import undoc
|
|
|
39
40
|
from typing import Tuple, Optional, TYPE_CHECKING
|
|
40
41
|
from collections.abc import Iterable
|
|
41
42
|
import typing
|
|
43
|
+
import typing as t
|
|
44
|
+
from typing import cast
|
|
42
45
|
from warnings import warn
|
|
43
46
|
from weakref import ref, WeakSet
|
|
44
47
|
|
|
@@ -90,6 +93,9 @@ class DummyDB:
|
|
|
90
93
|
def __exit__(self, *args, **kwargs): # type: ignore [no-untyped-def]
|
|
91
94
|
pass
|
|
92
95
|
|
|
96
|
+
def close(self, *args, **kwargs): # type: ignore [no-untyped-def]
|
|
97
|
+
pass
|
|
98
|
+
|
|
93
99
|
|
|
94
100
|
@decorator
|
|
95
101
|
def only_when_enabled(f, self, *a, **kw): # type: ignore [no-untyped-def]
|
|
@@ -317,12 +323,14 @@ class HistoryAccessor(HistoryAccessorBase):
|
|
|
317
323
|
"""Connect to the database, and create tables if necessary."""
|
|
318
324
|
if not self.enabled:
|
|
319
325
|
self.db = DummyDB()
|
|
326
|
+
self._finalizer = weakref.finalize(self, lambda db: db.close(), self.db)
|
|
320
327
|
return
|
|
321
328
|
|
|
322
329
|
# use detect_types so that timestamps return datetime objects
|
|
323
330
|
kwargs = dict(detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
|
|
324
331
|
kwargs.update(self.connection_options)
|
|
325
332
|
self.db = sqlite3.connect(str(self.hist_file), **kwargs) # type: ignore [call-overload]
|
|
333
|
+
self._finalizer = weakref.finalize(self, lambda db: db.close(), self.db)
|
|
326
334
|
with self.db:
|
|
327
335
|
self.db.execute(
|
|
328
336
|
"""CREATE TABLE IF NOT EXISTS sessions (session integer
|
|
@@ -1131,7 +1139,7 @@ class HistorySavingThread(threading.Thread):
|
|
|
1131
1139
|
if hm() is not None:
|
|
1132
1140
|
self.db = sqlite3.connect(
|
|
1133
1141
|
str(hm().hist_file), # type: ignore [union-attr]
|
|
1134
|
-
**hm().connection_options, # type: ignore [union-attr]
|
|
1142
|
+
**cast(dict[str, t.Any], hm().connection_options), # type: ignore [union-attr]
|
|
1135
1143
|
)
|
|
1136
1144
|
while True:
|
|
1137
1145
|
self.save_flag.wait()
|
|
@@ -50,27 +50,26 @@ class HistoryTrim(BaseIPythonApplication):
|
|
|
50
50
|
def start(self):
|
|
51
51
|
profile_dir = Path(self.profile_dir.location)
|
|
52
52
|
hist_file = profile_dir / "history.sqlite"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
con.close()
|
|
53
|
+
with sqlite3.connect(hist_file) as con:
|
|
54
|
+
|
|
55
|
+
# Grab the recent history from the current database.
|
|
56
|
+
inputs = list(con.execute('SELECT session, line, source, source_raw FROM '
|
|
57
|
+
'history ORDER BY session DESC, line DESC LIMIT ?', (self.keep+1,)))
|
|
58
|
+
if len(inputs) <= self.keep:
|
|
59
|
+
print("There are already at most %d entries in the history database." % self.keep)
|
|
60
|
+
print("Not doing anything. Use --keep= argument to keep fewer entries")
|
|
61
|
+
return
|
|
62
|
+
|
|
63
|
+
print("Trimming history to the most recent %d entries." % self.keep)
|
|
64
|
+
|
|
65
|
+
inputs.pop() # Remove the extra element we got to check the length.
|
|
66
|
+
inputs.reverse()
|
|
67
|
+
if inputs:
|
|
68
|
+
first_session = inputs[0][0]
|
|
69
|
+
outputs = list(con.execute('SELECT session, line, output FROM '
|
|
70
|
+
'output_history WHERE session >= ?', (first_session,)))
|
|
71
|
+
sessions = list(con.execute('SELECT session, start, end, num_cmds, remark FROM '
|
|
72
|
+
'sessions WHERE session >= ?', (first_session,)))
|
|
74
73
|
|
|
75
74
|
# Create the new history database.
|
|
76
75
|
new_hist_file = profile_dir / "history.sqlite.new"
|
|
@@ -79,26 +78,25 @@ class HistoryTrim(BaseIPythonApplication):
|
|
|
79
78
|
# Make sure we don't interfere with an existing file.
|
|
80
79
|
i += 1
|
|
81
80
|
new_hist_file = profile_dir / ("history.sqlite.new" + str(i))
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
new_db.close()
|
|
81
|
+
with sqlite3.connect(new_hist_file) as new_db:
|
|
82
|
+
new_db.execute("""CREATE TABLE IF NOT EXISTS sessions (session integer
|
|
83
|
+
primary key autoincrement, start timestamp,
|
|
84
|
+
end timestamp, num_cmds integer, remark text)""")
|
|
85
|
+
new_db.execute("""CREATE TABLE IF NOT EXISTS history
|
|
86
|
+
(session integer, line integer, source text, source_raw text,
|
|
87
|
+
PRIMARY KEY (session, line))""")
|
|
88
|
+
new_db.execute("""CREATE TABLE IF NOT EXISTS output_history
|
|
89
|
+
(session integer, line integer, output text,
|
|
90
|
+
PRIMARY KEY (session, line))""")
|
|
91
|
+
new_db.commit()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
if inputs:
|
|
95
|
+
with new_db:
|
|
96
|
+
# Add the recent history into the new database.
|
|
97
|
+
new_db.executemany('insert into sessions values (?,?,?,?,?)', sessions)
|
|
98
|
+
new_db.executemany('insert into history values (?,?,?,?)', inputs)
|
|
99
|
+
new_db.executemany('insert into output_history values (?,?,?)', outputs)
|
|
102
100
|
|
|
103
101
|
if self.backup:
|
|
104
102
|
i = 1
|
|
@@ -356,24 +356,8 @@ class MagicAssign(TokenTransformBase):
|
|
|
356
356
|
class SystemAssign(TokenTransformBase):
|
|
357
357
|
"""Transformer for assignments from system commands (a = !foo)"""
|
|
358
358
|
@classmethod
|
|
359
|
-
def
|
|
360
|
-
|
|
361
|
-
assign_ix = _find_assign_op(line)
|
|
362
|
-
if (assign_ix is not None) \
|
|
363
|
-
and not line[assign_ix].line.strip().startswith('=') \
|
|
364
|
-
and (len(line) >= assign_ix + 2) \
|
|
365
|
-
and (line[assign_ix + 1].type == tokenize.ERRORTOKEN):
|
|
366
|
-
ix = assign_ix + 1
|
|
367
|
-
|
|
368
|
-
while ix < len(line) and line[ix].type == tokenize.ERRORTOKEN:
|
|
369
|
-
if line[ix].string == '!':
|
|
370
|
-
return cls(line[ix].start)
|
|
371
|
-
elif not line[ix].string.isspace():
|
|
372
|
-
break
|
|
373
|
-
ix += 1
|
|
374
|
-
|
|
375
|
-
@classmethod
|
|
376
|
-
def find_post_312(cls, tokens_by_line):
|
|
359
|
+
def find(cls, tokens_by_line):
|
|
360
|
+
"""Find the first system assignment (a = !foo) in the cell."""
|
|
377
361
|
for line in tokens_by_line:
|
|
378
362
|
assign_ix = _find_assign_op(line)
|
|
379
363
|
if (
|
|
@@ -385,13 +369,6 @@ class SystemAssign(TokenTransformBase):
|
|
|
385
369
|
):
|
|
386
370
|
return cls(line[assign_ix + 1].start)
|
|
387
371
|
|
|
388
|
-
@classmethod
|
|
389
|
-
def find(cls, tokens_by_line):
|
|
390
|
-
"""Find the first system assignment (a = !foo) in the cell."""
|
|
391
|
-
if sys.version_info < (3, 12):
|
|
392
|
-
return cls.find_pre_312(tokens_by_line)
|
|
393
|
-
return cls.find_post_312(tokens_by_line)
|
|
394
|
-
|
|
395
372
|
def transform(self, lines: List[str]):
|
|
396
373
|
"""Transform a system assignment found by the ``find()`` classmethod.
|
|
397
374
|
"""
|
|
@@ -22,6 +22,7 @@ import re
|
|
|
22
22
|
import runpy
|
|
23
23
|
import shutil
|
|
24
24
|
import subprocess
|
|
25
|
+
from subprocess import CalledProcessError
|
|
25
26
|
import sys
|
|
26
27
|
import tempfile
|
|
27
28
|
import traceback
|
|
@@ -37,6 +38,7 @@ from typing import List as ListType, Any as AnyType
|
|
|
37
38
|
from typing import Literal, Optional, Tuple
|
|
38
39
|
from collections.abc import Sequence
|
|
39
40
|
from warnings import warn
|
|
41
|
+
import textwrap
|
|
40
42
|
|
|
41
43
|
from IPython.external.pickleshare import PickleShareDB
|
|
42
44
|
|
|
@@ -90,7 +92,7 @@ from IPython.utils.decorators import undoc
|
|
|
90
92
|
from IPython.utils.io import ask_yes_no
|
|
91
93
|
from IPython.utils.ipstruct import Struct
|
|
92
94
|
from IPython.utils.path import ensure_dir_exists, get_home_dir, get_py_filename
|
|
93
|
-
from IPython.utils.process import getoutput, system
|
|
95
|
+
from IPython.utils.process import get_output_error_code, getoutput, system
|
|
94
96
|
from IPython.utils.strdispatch import StrDispatch
|
|
95
97
|
from IPython.utils.syspathcontext import prepended_to_syspath
|
|
96
98
|
from IPython.utils.text import DollarFormatter, LSString, SList, format_screen
|
|
@@ -538,6 +540,14 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
538
540
|
|
|
539
541
|
quiet = Bool(False).tag(config=True)
|
|
540
542
|
|
|
543
|
+
system_raise_on_error = Bool(False, help=
|
|
544
|
+
"""
|
|
545
|
+
Raise an exception on non-zero exit status from shell commands executed
|
|
546
|
+
via the `!` operator. When set to True, shell commands that fail will raise
|
|
547
|
+
CalledProcessError, similar to the behavior of %%script magics.
|
|
548
|
+
"""
|
|
549
|
+
).tag(config=True)
|
|
550
|
+
|
|
541
551
|
history_length = Integer(10000,
|
|
542
552
|
help='Total length of command history'
|
|
543
553
|
).tag(config=True)
|
|
@@ -1014,6 +1024,18 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
1014
1024
|
|
|
1015
1025
|
@property
|
|
1016
1026
|
def banner(self):
|
|
1027
|
+
if (when := os.environ.get("SOURCE_DATE_EPOCH", None)) is not None:
|
|
1028
|
+
from datetime import datetime
|
|
1029
|
+
|
|
1030
|
+
date = datetime.fromtimestamp(int(when))
|
|
1031
|
+
return textwrap.dedent(
|
|
1032
|
+
f"""
|
|
1033
|
+
Python 3.y.z | Packaged with love | (main, {date.strftime("%A, %d %B %Y")}) [Compiler]
|
|
1034
|
+
Type 'copyright', 'credits' or 'license' for more information
|
|
1035
|
+
IPython 9.y.z -- An enhanced Interactive Python. Type '?' for help.
|
|
1036
|
+
Tip: unset SOURCE_DATE_EPOCH to restore dynamic banner.
|
|
1037
|
+
"""
|
|
1038
|
+
).lstrip()
|
|
1017
1039
|
banner = self.banner1
|
|
1018
1040
|
if self.profile and self.profile != 'default':
|
|
1019
1041
|
banner += '\nIPython profile: %s\n' % self.profile
|
|
@@ -2118,8 +2140,7 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
2118
2140
|
sys.last_type = etype
|
|
2119
2141
|
sys.last_value = value
|
|
2120
2142
|
sys.last_traceback = tb
|
|
2121
|
-
|
|
2122
|
-
sys.last_exc = value
|
|
2143
|
+
sys.last_exc = value
|
|
2123
2144
|
|
|
2124
2145
|
return etype, value, tb
|
|
2125
2146
|
|
|
@@ -2647,7 +2668,12 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
2647
2668
|
# we explicitly do NOT return the subprocess status code, because
|
|
2648
2669
|
# a non-None value would trigger :func:`sys.displayhook` calls.
|
|
2649
2670
|
# Instead, we store the exit_code in user_ns.
|
|
2650
|
-
|
|
2671
|
+
exit_code = system(self.var_expand(cmd, depth=1))
|
|
2672
|
+
self.user_ns['_exit_code'] = exit_code
|
|
2673
|
+
|
|
2674
|
+
# Raise an exception if the command failed and system_raise_on_error is True
|
|
2675
|
+
if self.system_raise_on_error and exit_code != 0:
|
|
2676
|
+
raise CalledProcessError(exit_code, cmd)
|
|
2651
2677
|
|
|
2652
2678
|
def system_raw(self, cmd):
|
|
2653
2679
|
"""Call the given cmd in a subprocess using os.system on Windows or
|
|
@@ -2713,6 +2739,10 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
2713
2739
|
# but raising SystemExit(_exit_code) will give status 254!
|
|
2714
2740
|
self.user_ns['_exit_code'] = ec
|
|
2715
2741
|
|
|
2742
|
+
# Raise an exception if the command failed and system_raise_on_error is True
|
|
2743
|
+
if self.system_raise_on_error and ec != 0:
|
|
2744
|
+
raise CalledProcessError(ec, cmd)
|
|
2745
|
+
|
|
2716
2746
|
# use piped system by default, because it is better behaved
|
|
2717
2747
|
system = system_piped
|
|
2718
2748
|
|
|
@@ -2738,11 +2768,27 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
2738
2768
|
if cmd.rstrip().endswith('&'):
|
|
2739
2769
|
# this is *far* from a rigorous test
|
|
2740
2770
|
raise OSError("Background processes not supported.")
|
|
2741
|
-
|
|
2771
|
+
|
|
2772
|
+
# Get output and exit code
|
|
2773
|
+
expanded_cmd = self.var_expand(cmd, depth=depth+1)
|
|
2774
|
+
if self.system_raise_on_error:
|
|
2775
|
+
# Use get_output_error_code to get the exit code
|
|
2776
|
+
out_str, err_str, exit_code = get_output_error_code(expanded_cmd)
|
|
2777
|
+
# Combine stdout and stderr as getoutput does
|
|
2778
|
+
out_combined = out_str if not err_str else out_str + err_str
|
|
2779
|
+
self.user_ns['_exit_code'] = exit_code
|
|
2780
|
+
|
|
2781
|
+
# Raise an exception if the command failed
|
|
2782
|
+
if exit_code != 0:
|
|
2783
|
+
raise CalledProcessError(exit_code, cmd)
|
|
2784
|
+
else:
|
|
2785
|
+
# Use the original getoutput for backward compatibility
|
|
2786
|
+
out_combined = getoutput(expanded_cmd)
|
|
2787
|
+
|
|
2742
2788
|
if split:
|
|
2743
|
-
out = SList(
|
|
2789
|
+
out = SList(out_combined.splitlines())
|
|
2744
2790
|
else:
|
|
2745
|
-
out = LSString(
|
|
2791
|
+
out = LSString(out_combined)
|
|
2746
2792
|
return out
|
|
2747
2793
|
|
|
2748
2794
|
#-------------------------------------------------------------------------
|