ipython 9.3.0__tar.gz → 9.5.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.3.0 → ipython-9.5.0}/IPython/core/completer.py +26 -6
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/debugger.py +32 -2
- ipython-9.5.0/IPython/core/debugger_backport.py +206 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/guarded_eval.py +76 -22
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/history.py +1 -1
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/interactiveshell.py +34 -7
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/basic.py +40 -3
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/execution.py +64 -11
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/namespace.py +15 -3
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/script.py +14 -2
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/release.py +1 -1
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/ultratb.py +1 -4
- {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/autoreload.py +165 -6
- {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/deduperreload/deduperreload.py +56 -44
- {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/deduperreload/deduperreload_patching.py +15 -8
- {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/tests/test_deduperreload.py +75 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_sysinfo.py +1 -1
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/text.py +5 -1
- {ipython-9.3.0/ipython.egg-info → ipython-9.5.0}/PKG-INFO +2 -2
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version9.rst +63 -3
- {ipython-9.3.0 → ipython-9.5.0/ipython.egg-info}/PKG-INFO +2 -2
- {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/SOURCES.txt +1 -113
- {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/requires.txt +1 -1
- {ipython-9.3.0 → ipython-9.5.0}/pyproject.toml +1 -1
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_completer.py +69 -1
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_debugger.py +33 -6
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_interactiveshell.py +10 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_magic.py +115 -2
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_oinspect.py +2 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_pycolorize.py +1 -1
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_text.py +11 -1
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_ultratb.py +15 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_zzz_autoreload.py +445 -1
- ipython-9.3.0/docs/source/api/generated/IPython.core.alias.rst +0 -36
- ipython-9.3.0/docs/source/api/generated/IPython.core.application.rst +0 -20
- ipython-9.3.0/docs/source/api/generated/IPython.core.async_helpers.rst +0 -13
- ipython-9.3.0/docs/source/api/generated/IPython.core.autocall.rst +0 -24
- ipython-9.3.0/docs/source/api/generated/IPython.core.builtin_trap.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.core.compilerop.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.core.completer.rst +0 -107
- ipython-9.3.0/docs/source/api/generated/IPython.core.completerlib.rst +0 -43
- ipython-9.3.0/docs/source/api/generated/IPython.core.crashhandler.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.core.debugger.rst +0 -35
- ipython-9.3.0/docs/source/api/generated/IPython.core.doctb.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.core.error.rst +0 -30
- ipython-9.3.0/docs/source/api/generated/IPython.core.events.rst +0 -34
- ipython-9.3.0/docs/source/api/generated/IPython.core.extensions.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.core.formatters.rst +0 -83
- ipython-9.3.0/docs/source/api/generated/IPython.core.getipython.rst +0 -13
- ipython-9.3.0/docs/source/api/generated/IPython.core.guarded_eval.rst +0 -34
- ipython-9.3.0/docs/source/api/generated/IPython.core.history.rst +0 -59
- ipython-9.3.0/docs/source/api/generated/IPython.core.historyapp.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.core.hooks.rst +0 -31
- ipython-9.3.0/docs/source/api/generated/IPython.core.inputtransformer2.rst +0 -85
- ipython-9.3.0/docs/source/api/generated/IPython.core.interactiveshell.rst +0 -56
- ipython-9.3.0/docs/source/api/generated/IPython.core.logger.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.core.macro.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.core.magic.rst +0 -59
- ipython-9.3.0/docs/source/api/generated/IPython.core.magic_arguments.rst +0 -62
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.ast_mod.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.auto.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.basic.rst +0 -24
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.code.rst +0 -38
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.config.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.display.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.execution.rst +0 -38
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.extension.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.history.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.logging.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.namespace.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.osm.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.packaging.rst +0 -20
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.pylab.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.core.magics.script.rst +0 -26
- ipython-9.3.0/docs/source/api/generated/IPython.core.oinspect.rst +0 -52
- ipython-9.3.0/docs/source/api/generated/IPython.core.page.rst +0 -37
- ipython-9.3.0/docs/source/api/generated/IPython.core.payload.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.core.payloadpage.rst +0 -13
- ipython-9.3.0/docs/source/api/generated/IPython.core.prefilter.rst +0 -88
- ipython-9.3.0/docs/source/api/generated/IPython.core.profileapp.rst +0 -35
- ipython-9.3.0/docs/source/api/generated/IPython.core.profiledir.rst +0 -18
- ipython-9.3.0/docs/source/api/generated/IPython.core.pylabtools.rst +0 -37
- ipython-9.3.0/docs/source/api/generated/IPython.core.shellapp.rst +0 -20
- ipython-9.3.0/docs/source/api/generated/IPython.core.splitinput.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.core.tbtools.rst +0 -40
- ipython-9.3.0/docs/source/api/generated/IPython.core.tips.rst +0 -13
- ipython-9.3.0/docs/source/api/generated/IPython.core.ultratb.rst +0 -42
- ipython-9.3.0/docs/source/api/generated/IPython.display.rst +0 -181
- ipython-9.3.0/docs/source/api/generated/IPython.lib.backgroundjobs.rst +0 -34
- ipython-9.3.0/docs/source/api/generated/IPython.lib.clipboard.rst +0 -29
- ipython-9.3.0/docs/source/api/generated/IPython.lib.deepreload.rst +0 -37
- ipython-9.3.0/docs/source/api/generated/IPython.lib.demo.rst +0 -53
- ipython-9.3.0/docs/source/api/generated/IPython.lib.editorhooks.rst +0 -43
- ipython-9.3.0/docs/source/api/generated/IPython.lib.guisupport.rst +0 -28
- ipython-9.3.0/docs/source/api/generated/IPython.lib.latextools.rst +0 -35
- ipython-9.3.0/docs/source/api/generated/IPython.lib.pretty.rst +0 -83
- ipython-9.3.0/docs/source/api/generated/IPython.paths.rst +0 -25
- ipython-9.3.0/docs/source/api/generated/IPython.rst +0 -19
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.debugger.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.embed.rst +0 -30
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.interactiveshell.rst +0 -34
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.ipapp.rst +0 -30
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.magics.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.prompts.rst +0 -24
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst +0 -46
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst +0 -67
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.filters.rst +0 -58
- ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.rst +0 -76
- ipython-9.3.0/docs/source/api/generated/IPython.testing.decorators.rst +0 -25
- ipython-9.3.0/docs/source/api/generated/IPython.testing.globalipapp.rst +0 -19
- ipython-9.3.0/docs/source/api/generated/IPython.testing.ipunittest.rst +0 -31
- ipython-9.3.0/docs/source/api/generated/IPython.testing.skipdoctest.rst +0 -13
- ipython-9.3.0/docs/source/api/generated/IPython.testing.tools.rst +0 -60
- ipython-9.3.0/docs/source/api/generated/IPython.utils.PyColorize.rst +0 -26
- ipython-9.3.0/docs/source/api/generated/IPython.utils.capture.rst +0 -28
- ipython-9.3.0/docs/source/api/generated/IPython.utils.coloransi.rst +0 -14
- ipython-9.3.0/docs/source/api/generated/IPython.utils.contexts.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.utils.data.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.utils.decorators.rst +0 -19
- ipython-9.3.0/docs/source/api/generated/IPython.utils.dir2.rst +0 -19
- ipython-9.3.0/docs/source/api/generated/IPython.utils.encoding.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.utils.frame.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.utils.generics.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.utils.importstring.rst +0 -13
- ipython-9.3.0/docs/source/api/generated/IPython.utils.io.rst +0 -25
- ipython-9.3.0/docs/source/api/generated/IPython.utils.ipstruct.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.utils.module_paths.rst +0 -13
- ipython-9.3.0/docs/source/api/generated/IPython.utils.openpy.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.utils.path.rst +0 -56
- ipython-9.3.0/docs/source/api/generated/IPython.utils.process.rst +0 -23
- ipython-9.3.0/docs/source/api/generated/IPython.utils.sentinel.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.utils.strdispatch.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.utils.sysinfo.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.utils.syspathcontext.rst +0 -16
- ipython-9.3.0/docs/source/api/generated/IPython.utils.tempdir.rst +0 -20
- ipython-9.3.0/docs/source/api/generated/IPython.utils.terminal.rst +0 -22
- ipython-9.3.0/docs/source/api/generated/IPython.utils.text.rst +0 -54
- ipython-9.3.0/docs/source/api/generated/IPython.utils.timing.rst +0 -31
- ipython-9.3.0/docs/source/api/generated/IPython.utils.tokenutil.rst +0 -29
- ipython-9.3.0/docs/source/api/generated/IPython.utils.wildcard.rst +0 -28
- ipython-9.3.0/docs/source/api/generated/gen.txt +0 -113
- ipython-9.3.0/docs/source/config/options/config-generated.txt +0 -0
- ipython-9.3.0/docs/source/config/options/terminal.rst +0 -2072
- ipython-9.3.0/docs/source/config/shortcuts/table.tsv +0 -79
- ipython-9.3.0/docs/source/interactive/magics-generated.txt +0 -2489
- {ipython-9.3.0 → ipython-9.5.0}/.flake8 +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/.mailmap +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/.pre-commit-config.yaml +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/COPYING.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/__main__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/alias.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/application.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/async_helpers.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/autocall.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/builtin_trap.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/compilerop.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/completerlib.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/crashhandler.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/display.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/display_functions.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/display_trap.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/displayhook.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/displaypub.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/doctb.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/error.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/events.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/extensions.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/formatters.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/getipython.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/historyapp.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/hooks.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/inputtransformer2.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/latex_symbols.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/logger.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/macro.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magic.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magic_arguments.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/ast_mod.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/auto.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/code.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/config.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/display.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/extension.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/history.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/logging.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/osm.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/packaging.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/pylab.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/oinspect.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/page.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/payload.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/payloadpage.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/prefilter.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/profile/README_STARTUP +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/profileapp.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/profiledir.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/pylabtools.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/shellapp.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/splitinput.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/tbtools.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/tips.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/core/usage.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/display.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/deduperreload/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/storemagic.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/external/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/external/pickleshare.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/external/qt_for_kernel.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/external/qt_loaders.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/backgroundjobs.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/clipboard.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/deepreload.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/demo.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/display.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/editorhooks.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/guisupport.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/latextools.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/lexers.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/pretty.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/paths.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/py.typed +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/sphinxext/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/sphinxext/custom_doctests.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/sphinxext/ipython_directive.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/debugger.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/embed.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/interactiveshell.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/ipapp.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/magics.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/prompts.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/ptutils.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/shortcuts/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/shortcuts/filters.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/decorators.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/globalipapp.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/ipunittest.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/Makefile +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/dtexample.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/ipdoctest.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/setup.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/simple.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/simplevars.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_combo.txt +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_example.txt +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_refs.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/skipdoctest.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/tools.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/PyColorize.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_cli.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_common.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_emscripten.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_posix.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_win32.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_win32_controller.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/capture.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/coloransi.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/contexts.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/data.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/decorators.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/dir2.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/docs.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/encoding.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/eventful.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/frame.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/generics.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/importstring.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/io.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/ipstruct.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/jsonutil.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/log.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/module_paths.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/openpy.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/path.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/process.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/py3compat.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/sentinel.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/strdispatch.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/sysinfo.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/syspathcontext.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/tempdir.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/terminal.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/timing.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/tokenutil.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/wildcard.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/LICENSE +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/MANIFEST.in +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/README.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/_build_meta.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/Makefile +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/README.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/autogen_api.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/autogen_config.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/autogen_magics.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/autogen_shortcuts.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/make.cmd +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/man/ipython.1 +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/requirements.txt +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/running-crop.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/running.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/treeview.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/user-interface.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/widgets.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/autosuggest.gif +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ms_visual_studio.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/notebook_specgram.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ptshell_features.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/qtconsole.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/unicode_completion.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_static/favicon.ico +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_static/logo.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_static/theme_overrides.css +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_templates/breadcrumbs.html +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/_templates/notebook_redirect.html +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/about/history.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/about/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/about/license_and_copyright.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/api/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/conf.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/callbacks.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/custommagics.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/details.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/eventloops.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/extensions/autoreload.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/extensions/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/extensions/storemagic.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/inputtransforms.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/integrating.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/intro.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/options/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/shell_mimerenderer.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/shortcuts/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/coredev/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/config.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/execution.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/figs/other_kernels.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/figs/other_kernels.svg +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/how_ipython_works.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/inputhook_app.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/kernels.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/messaging.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/pycompat.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/wrapperkernels.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/install/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/install/install.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/install/kernel_install.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/autoawait.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/magics.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/plotting.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/reference.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/shell.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/tips.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/tutorial.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/links.txt +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/overview.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/parallel/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/sphinx.toml +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/sphinxext.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/development.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/index.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/pr/README.md +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.10.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.11.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.12.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.13.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.8.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.9.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version1.0.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version2.0.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version3.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version4.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version5.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version6.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version7.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version8.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/sphinxext/apigen.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/sphinxext/configtraits.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/sphinxext/github.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/docs/sphinxext/magics.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/Embedding/embed_class_long.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/Embedding/embed_class_short.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/Embedding/embed_function.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/Embedding/start_ipython_config.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/example-demo.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/ipython.desktop +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/auto_suggest_llm.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/utils/cwd_prompt.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/utils/list_pyfiles.ipy +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/examples/utils/list_subdirs.ipy +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/dependency_links.txt +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/entry_points.txt +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/not-zip-safe +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/top_level.txt +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/long_description.rst +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/scripts/ipython.ico +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/scripts/ipython_nb.ico +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/setup.cfg +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/setup.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/setupbase.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/2x2.jpg +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/2x2.png +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/__init__.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/bad_all.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/conftest.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/cve.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/fake_ext_dir/daft_extension.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/fake_llm.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/nonascii.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/nonascii2.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/print_argv.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/refbug.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/simpleerr.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/tclass.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test.wav +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_alias.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_application.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_async_helpers.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_autocall.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_backgroundjobs.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_capture.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_clipboard.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_compilerop.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_completerlib.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_debug_magic.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_decorators.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_decorators_2.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_deepreload.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_dir2.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_display.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_display_2.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_displayhook.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_editorhooks.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_embed.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_events.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_exceptiongroup_tb.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_extension.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_formatters.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_guarded_eval.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_handlers.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_help.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_history.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_hooks.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_imports.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_importstring.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_inputtransformer2.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_inputtransformer2_line.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_interactivshell.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_io.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_iplib.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_ipunittest.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_latextools.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_logger.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_magic_arguments.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_magic_terminal.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_module_paths.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_openpy.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_page.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_path.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_paths.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_prefilter.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_pretty.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_process.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_profile.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_pt_inputhooks.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_pylabtools.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_qt_loaders.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_run.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_shellapp.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_shortcuts.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_splitinput.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_storemagic.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_sysinfo.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_tempdir.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_tips.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_tokenutil.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_tools.py +0 -0
- {ipython-9.3.0 → ipython-9.5.0}/tests/test_wildcard.py +0 -0
|
@@ -213,7 +213,11 @@ from typing import (
|
|
|
213
213
|
Literal,
|
|
214
214
|
)
|
|
215
215
|
|
|
216
|
-
from IPython.core.guarded_eval import
|
|
216
|
+
from IPython.core.guarded_eval import (
|
|
217
|
+
guarded_eval,
|
|
218
|
+
EvaluationContext,
|
|
219
|
+
_validate_policy_overrides,
|
|
220
|
+
)
|
|
217
221
|
from IPython.core.error import TryNext
|
|
218
222
|
from IPython.core.inputtransformer2 import ESC_MAGIC
|
|
219
223
|
from IPython.core.latex_symbols import latex_symbols, reverse_latex_symbol
|
|
@@ -222,7 +226,6 @@ from IPython.utils import generics
|
|
|
222
226
|
from IPython.utils.PyColorize import theme_table
|
|
223
227
|
from IPython.utils.decorators import sphinx_options
|
|
224
228
|
from IPython.utils.dir2 import dir2, get_real_method
|
|
225
|
-
from IPython.utils.docs import GENERATING_DOCUMENTATION
|
|
226
229
|
from IPython.utils.path import ensure_dir_exists
|
|
227
230
|
from IPython.utils.process import arg_split
|
|
228
231
|
from traitlets import (
|
|
@@ -953,7 +956,6 @@ class CompletionSplitter:
|
|
|
953
956
|
return self._delim_re.split(cut_line)[-1]
|
|
954
957
|
|
|
955
958
|
|
|
956
|
-
|
|
957
959
|
class Completer(Configurable):
|
|
958
960
|
|
|
959
961
|
greedy = Bool(
|
|
@@ -1045,6 +1047,18 @@ class Completer(Configurable):
|
|
|
1045
1047
|
""",
|
|
1046
1048
|
).tag(config=True)
|
|
1047
1049
|
|
|
1050
|
+
@observe("evaluation")
|
|
1051
|
+
def _evaluation_changed(self, _change):
|
|
1052
|
+
_validate_policy_overrides(
|
|
1053
|
+
policy_name=self.evaluation, policy_overrides=self.policy_overrides
|
|
1054
|
+
)
|
|
1055
|
+
|
|
1056
|
+
@observe("policy_overrides")
|
|
1057
|
+
def _policy_overrides_changed(self, _change):
|
|
1058
|
+
_validate_policy_overrides(
|
|
1059
|
+
policy_name=self.evaluation, policy_overrides=self.policy_overrides
|
|
1060
|
+
)
|
|
1061
|
+
|
|
1048
1062
|
auto_import_method = DottedObjectName(
|
|
1049
1063
|
default_value="importlib.import_module",
|
|
1050
1064
|
allow_none=True,
|
|
@@ -1313,14 +1327,19 @@ class Completer(Configurable):
|
|
|
1313
1327
|
),
|
|
1314
1328
|
)
|
|
1315
1329
|
done = True
|
|
1316
|
-
except
|
|
1317
|
-
|
|
1318
|
-
|
|
1330
|
+
except (SyntaxError, TypeError):
|
|
1331
|
+
# TypeError can show up with something like `+ d`
|
|
1332
|
+
# where `d` is a dictionary.
|
|
1333
|
+
|
|
1319
1334
|
# trim the expression to remove any invalid prefix
|
|
1320
1335
|
# e.g. user starts `(d[`, so we get `expr = '(d'`,
|
|
1321
1336
|
# where parenthesis is not closed.
|
|
1322
1337
|
# TODO: make this faster by reusing parts of the computation?
|
|
1323
1338
|
expr = self._trim_expr(expr)
|
|
1339
|
+
except Exception as e:
|
|
1340
|
+
if self.debug:
|
|
1341
|
+
print("Evaluation exception", e)
|
|
1342
|
+
done = True
|
|
1324
1343
|
return obj
|
|
1325
1344
|
|
|
1326
1345
|
@property
|
|
@@ -1331,6 +1350,7 @@ class Completer(Configurable):
|
|
|
1331
1350
|
self._auto_import_func = import_item(self.auto_import_method)
|
|
1332
1351
|
return self._auto_import_func
|
|
1333
1352
|
|
|
1353
|
+
|
|
1334
1354
|
def get__all__entries(obj):
|
|
1335
1355
|
"""returns the strings in the __all__ attribute"""
|
|
1336
1356
|
try:
|
|
@@ -133,6 +133,7 @@ from contextlib import contextmanager
|
|
|
133
133
|
from functools import lru_cache
|
|
134
134
|
|
|
135
135
|
from IPython import get_ipython
|
|
136
|
+
from IPython.core.debugger_backport import PdbClosureBackport
|
|
136
137
|
from IPython.utils import PyColorize
|
|
137
138
|
from IPython.utils.PyColorize import TokenStream
|
|
138
139
|
|
|
@@ -140,9 +141,18 @@ from typing import TYPE_CHECKING
|
|
|
140
141
|
from types import FrameType
|
|
141
142
|
|
|
142
143
|
# We have to check this directly from sys.argv, config struct not yet available
|
|
143
|
-
from pdb import Pdb as
|
|
144
|
+
from pdb import Pdb as _OldPdb
|
|
144
145
|
from pygments.token import Token
|
|
145
146
|
|
|
147
|
+
|
|
148
|
+
if sys.version_info < (3, 13):
|
|
149
|
+
|
|
150
|
+
class OldPdb(PdbClosureBackport, _OldPdb):
|
|
151
|
+
pass
|
|
152
|
+
|
|
153
|
+
else:
|
|
154
|
+
OldPdb = _OldPdb
|
|
155
|
+
|
|
146
156
|
if TYPE_CHECKING:
|
|
147
157
|
# otherwise circular import
|
|
148
158
|
from IPython.core.interactiveshell import InteractiveShell
|
|
@@ -343,6 +353,26 @@ class Pdb(OldPdb):
|
|
|
343
353
|
self.initial_frame = frame
|
|
344
354
|
return super().set_trace(frame)
|
|
345
355
|
|
|
356
|
+
def get_stack(self, *args, **kwargs):
|
|
357
|
+
stack, pos = super().get_stack(*args, **kwargs)
|
|
358
|
+
if len(stack) >= 0 and self._is_internal_frame(stack[0][0]):
|
|
359
|
+
stack.pop(0)
|
|
360
|
+
pos -= 1
|
|
361
|
+
return stack, pos
|
|
362
|
+
|
|
363
|
+
def _is_internal_frame(self, frame):
|
|
364
|
+
"""Determine if this frame should be skipped as internal"""
|
|
365
|
+
filename = frame.f_code.co_filename
|
|
366
|
+
|
|
367
|
+
# Skip bdb.py runcall and internal operations
|
|
368
|
+
if filename.endswith("bdb.py"):
|
|
369
|
+
func_name = frame.f_code.co_name
|
|
370
|
+
# Skip internal bdb operations but allow breakpoint hits
|
|
371
|
+
if func_name in ("runcall", "run", "runeval"):
|
|
372
|
+
return True
|
|
373
|
+
|
|
374
|
+
return False
|
|
375
|
+
|
|
346
376
|
def _hidden_predicate(self, frame):
|
|
347
377
|
"""
|
|
348
378
|
Given a frame return whether it it should be hidden or not by IPython.
|
|
@@ -744,7 +774,7 @@ class Pdb(OldPdb):
|
|
|
744
774
|
bp,
|
|
745
775
|
(Token.LinenoEm, num),
|
|
746
776
|
(Token, " "),
|
|
747
|
-
# TODO:
|
|
777
|
+
# TODO: investigate Token.Line here
|
|
748
778
|
(Token, colored_line),
|
|
749
779
|
]
|
|
750
780
|
)
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"""
|
|
2
|
+
The code in this module is a backport of cPython changes in Pdb
|
|
3
|
+
that were introduced in Python 3.13 by gh-83151: Make closure work on pdb
|
|
4
|
+
https://github.com/python/cpython/pull/111094.
|
|
5
|
+
This file should be removed once IPython drops supports for Python 3.12.
|
|
6
|
+
|
|
7
|
+
The only changes are:
|
|
8
|
+
- reformatting by darker (black) formatter
|
|
9
|
+
- addition of type-ignore comments to satisfy mypy
|
|
10
|
+
|
|
11
|
+
Copyright (c) 2001 Python Software Foundation; All Rights Reserved
|
|
12
|
+
|
|
13
|
+
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
|
14
|
+
--------------------------------------------
|
|
15
|
+
|
|
16
|
+
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
|
17
|
+
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
|
18
|
+
otherwise using this software ("Python") in source or binary form and
|
|
19
|
+
its associated documentation.
|
|
20
|
+
|
|
21
|
+
2. Subject to the terms and conditions of this License Agreement, PSF hereby
|
|
22
|
+
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
|
|
23
|
+
analyze, test, perform and/or display publicly, prepare derivative works,
|
|
24
|
+
distribute, and otherwise use Python alone or in any derivative version,
|
|
25
|
+
provided, however, that PSF's License Agreement and PSF's notice of copyright,
|
|
26
|
+
i.e., "Copyright (c) 2001 Python Software Foundation; All Rights Reserved"
|
|
27
|
+
are retained in Python alone or in any derivative version prepared by Licensee.
|
|
28
|
+
|
|
29
|
+
3. In the event Licensee prepares a derivative work that is based on
|
|
30
|
+
or incorporates Python or any part thereof, and wants to make
|
|
31
|
+
the derivative work available to others as provided herein, then
|
|
32
|
+
Licensee hereby agrees to include in any such work a brief summary of
|
|
33
|
+
the changes made to Python.
|
|
34
|
+
|
|
35
|
+
4. PSF is making Python available to Licensee on an "AS IS"
|
|
36
|
+
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
|
37
|
+
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
|
38
|
+
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
|
39
|
+
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
|
40
|
+
INFRINGE ANY THIRD PARTY RIGHTS.
|
|
41
|
+
|
|
42
|
+
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
|
43
|
+
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
|
44
|
+
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
|
45
|
+
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
|
46
|
+
|
|
47
|
+
6. This License Agreement will automatically terminate upon a material
|
|
48
|
+
breach of its terms and conditions.
|
|
49
|
+
|
|
50
|
+
7. Nothing in this License Agreement shall be deemed to create any
|
|
51
|
+
relationship of agency, partnership, or joint venture between PSF and
|
|
52
|
+
Licensee. This License Agreement does not grant permission to use PSF
|
|
53
|
+
trademarks or trade name in a trademark sense to endorse or promote
|
|
54
|
+
products or services of Licensee, or any third party.
|
|
55
|
+
|
|
56
|
+
8. By copying, installing or otherwise using Python, Licensee
|
|
57
|
+
agrees to be bound by the terms and conditions of this License
|
|
58
|
+
Agreement.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
import sys
|
|
62
|
+
import types
|
|
63
|
+
import codeop
|
|
64
|
+
import textwrap
|
|
65
|
+
from types import CodeType
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class PdbClosureBackport:
|
|
69
|
+
def _exec_in_closure(self, source, globals, locals): # type: ignore[no-untyped-def]
|
|
70
|
+
"""Run source code in closure so code object created within source
|
|
71
|
+
can find variables in locals correctly
|
|
72
|
+
returns True if the source is executed, False otherwise
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
# Determine if the source should be executed in closure. Only when the
|
|
76
|
+
# source compiled to multiple code objects, we should use this feature.
|
|
77
|
+
# Otherwise, we can just raise an exception and normal exec will be used.
|
|
78
|
+
|
|
79
|
+
code = compile(source, "<string>", "exec")
|
|
80
|
+
if not any(isinstance(const, CodeType) for const in code.co_consts):
|
|
81
|
+
return False
|
|
82
|
+
|
|
83
|
+
# locals could be a proxy which does not support pop
|
|
84
|
+
# copy it first to avoid modifying the original locals
|
|
85
|
+
locals_copy = dict(locals)
|
|
86
|
+
|
|
87
|
+
locals_copy["__pdb_eval__"] = {"result": None, "write_back": {}}
|
|
88
|
+
|
|
89
|
+
# If the source is an expression, we need to print its value
|
|
90
|
+
try:
|
|
91
|
+
compile(source, "<string>", "eval")
|
|
92
|
+
except SyntaxError:
|
|
93
|
+
pass
|
|
94
|
+
else:
|
|
95
|
+
source = "__pdb_eval__['result'] = " + source
|
|
96
|
+
|
|
97
|
+
# Add write-back to update the locals
|
|
98
|
+
source = (
|
|
99
|
+
"try:\n"
|
|
100
|
+
+ textwrap.indent(source, " ")
|
|
101
|
+
+ "\n"
|
|
102
|
+
+ "finally:\n"
|
|
103
|
+
+ " __pdb_eval__['write_back'] = locals()"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Build a closure source code with freevars from locals like:
|
|
107
|
+
# def __pdb_outer():
|
|
108
|
+
# var = None
|
|
109
|
+
# def __pdb_scope(): # This is the code object we want to execute
|
|
110
|
+
# nonlocal var
|
|
111
|
+
# <source>
|
|
112
|
+
# return __pdb_scope.__code__
|
|
113
|
+
source_with_closure = (
|
|
114
|
+
"def __pdb_outer():\n"
|
|
115
|
+
+ "\n".join(f" {var} = None" for var in locals_copy)
|
|
116
|
+
+ "\n"
|
|
117
|
+
+ " def __pdb_scope():\n"
|
|
118
|
+
+ "\n".join(f" nonlocal {var}" for var in locals_copy)
|
|
119
|
+
+ "\n"
|
|
120
|
+
+ textwrap.indent(source, " ")
|
|
121
|
+
+ "\n"
|
|
122
|
+
+ " return __pdb_scope.__code__"
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# Get the code object of __pdb_scope()
|
|
126
|
+
# The exec fills locals_copy with the __pdb_outer() function and we can call
|
|
127
|
+
# that to get the code object of __pdb_scope()
|
|
128
|
+
ns = {}
|
|
129
|
+
try:
|
|
130
|
+
exec(source_with_closure, {}, ns)
|
|
131
|
+
except Exception:
|
|
132
|
+
return False
|
|
133
|
+
code = ns["__pdb_outer"]()
|
|
134
|
+
|
|
135
|
+
cells = tuple(types.CellType(locals_copy.get(var)) for var in code.co_freevars)
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
exec(code, globals, locals_copy, closure=cells)
|
|
139
|
+
except Exception:
|
|
140
|
+
return False
|
|
141
|
+
|
|
142
|
+
# get the data we need from the statement
|
|
143
|
+
pdb_eval = locals_copy["__pdb_eval__"]
|
|
144
|
+
|
|
145
|
+
# __pdb_eval__ should not be updated back to locals
|
|
146
|
+
pdb_eval["write_back"].pop("__pdb_eval__")
|
|
147
|
+
|
|
148
|
+
# Write all local variables back to locals
|
|
149
|
+
locals.update(pdb_eval["write_back"])
|
|
150
|
+
eval_result = pdb_eval["result"]
|
|
151
|
+
if eval_result is not None:
|
|
152
|
+
print(repr(eval_result))
|
|
153
|
+
|
|
154
|
+
return True
|
|
155
|
+
|
|
156
|
+
def default(self, line): # type: ignore[no-untyped-def]
|
|
157
|
+
if line[:1] == "!":
|
|
158
|
+
line = line[1:].strip()
|
|
159
|
+
locals = self.curframe_locals
|
|
160
|
+
globals = self.curframe.f_globals
|
|
161
|
+
try:
|
|
162
|
+
buffer = line
|
|
163
|
+
if (
|
|
164
|
+
code := codeop.compile_command(line + "\n", "<stdin>", "single")
|
|
165
|
+
) is None:
|
|
166
|
+
# Multi-line mode
|
|
167
|
+
with self._disable_command_completion():
|
|
168
|
+
buffer = line
|
|
169
|
+
continue_prompt = "... "
|
|
170
|
+
while (
|
|
171
|
+
code := codeop.compile_command(buffer, "<stdin>", "single")
|
|
172
|
+
) is None:
|
|
173
|
+
if self.use_rawinput:
|
|
174
|
+
try:
|
|
175
|
+
line = input(continue_prompt)
|
|
176
|
+
except (EOFError, KeyboardInterrupt):
|
|
177
|
+
self.lastcmd = ""
|
|
178
|
+
print("\n")
|
|
179
|
+
return
|
|
180
|
+
else:
|
|
181
|
+
self.stdout.write(continue_prompt)
|
|
182
|
+
self.stdout.flush()
|
|
183
|
+
line = self.stdin.readline()
|
|
184
|
+
if not len(line):
|
|
185
|
+
self.lastcmd = ""
|
|
186
|
+
self.stdout.write("\n")
|
|
187
|
+
self.stdout.flush()
|
|
188
|
+
return
|
|
189
|
+
else:
|
|
190
|
+
line = line.rstrip("\r\n")
|
|
191
|
+
buffer += "\n" + line
|
|
192
|
+
save_stdout = sys.stdout
|
|
193
|
+
save_stdin = sys.stdin
|
|
194
|
+
save_displayhook = sys.displayhook
|
|
195
|
+
try:
|
|
196
|
+
sys.stdin = self.stdin
|
|
197
|
+
sys.stdout = self.stdout
|
|
198
|
+
sys.displayhook = self.displayhook
|
|
199
|
+
if not self._exec_in_closure(buffer, globals, locals):
|
|
200
|
+
exec(code, globals, locals)
|
|
201
|
+
finally:
|
|
202
|
+
sys.stdout = save_stdout
|
|
203
|
+
sys.stdin = save_stdin
|
|
204
|
+
sys.displayhook = save_displayhook
|
|
205
|
+
except:
|
|
206
|
+
self._error_exc()
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from copy import copy
|
|
2
|
-
from inspect import isclass, signature, Signature
|
|
2
|
+
from inspect import isclass, signature, Signature, getmodule
|
|
3
3
|
from typing import (
|
|
4
4
|
Annotated,
|
|
5
5
|
AnyStr,
|
|
@@ -21,6 +21,7 @@ import builtins
|
|
|
21
21
|
import collections
|
|
22
22
|
import operator
|
|
23
23
|
import sys
|
|
24
|
+
import warnings
|
|
24
25
|
from functools import cached_property
|
|
25
26
|
from dataclasses import dataclass, field
|
|
26
27
|
from types import MethodDescriptorType, ModuleType
|
|
@@ -122,14 +123,24 @@ class EvaluationPolicy:
|
|
|
122
123
|
def _get_external(module_name: str, access_path: Sequence[str]):
|
|
123
124
|
"""Get value from external module given a dotted access path.
|
|
124
125
|
|
|
126
|
+
Only gets value if the module is already imported.
|
|
127
|
+
|
|
125
128
|
Raises:
|
|
126
129
|
* `KeyError` if module is removed not found, and
|
|
127
130
|
* `AttributeError` if access path does not match an exported object
|
|
128
131
|
"""
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
try:
|
|
133
|
+
member_type = sys.modules[module_name]
|
|
134
|
+
# standard module
|
|
135
|
+
for attr in access_path:
|
|
136
|
+
member_type = getattr(member_type, attr)
|
|
137
|
+
return member_type
|
|
138
|
+
except (KeyError, AttributeError):
|
|
139
|
+
# handle modules in namespace packages
|
|
140
|
+
module_path = ".".join([module_name, *access_path])
|
|
141
|
+
if module_path in sys.modules:
|
|
142
|
+
return sys.modules[module_path]
|
|
143
|
+
raise
|
|
133
144
|
|
|
134
145
|
|
|
135
146
|
def _has_original_dunder_external(
|
|
@@ -139,18 +150,26 @@ def _has_original_dunder_external(
|
|
|
139
150
|
method_name: str,
|
|
140
151
|
):
|
|
141
152
|
if module_name not in sys.modules:
|
|
142
|
-
|
|
143
|
-
|
|
153
|
+
full_module_path = ".".join([module_name, *access_path])
|
|
154
|
+
if full_module_path not in sys.modules:
|
|
155
|
+
# LBYLB as it is faster
|
|
156
|
+
return False
|
|
144
157
|
try:
|
|
145
158
|
member_type = _get_external(module_name, access_path)
|
|
146
159
|
value_type = type(value)
|
|
147
160
|
if type(value) == member_type:
|
|
148
161
|
return True
|
|
162
|
+
if isinstance(member_type, ModuleType):
|
|
163
|
+
value_module = getmodule(value_type)
|
|
164
|
+
if not value_module or not value_module.__name__:
|
|
165
|
+
return False
|
|
166
|
+
if value_module.__name__.startswith(member_type.__name__):
|
|
167
|
+
return True
|
|
149
168
|
if method_name == "__getattribute__":
|
|
150
169
|
# we have to short-circuit here due to an unresolved issue in
|
|
151
170
|
# `isinstance` implementation: https://bugs.python.org/issue32683
|
|
152
171
|
return False
|
|
153
|
-
if isinstance(value, member_type):
|
|
172
|
+
if not isinstance(member_type, ModuleType) and isinstance(value, member_type):
|
|
154
173
|
method = getattr(value_type, method_name, None)
|
|
155
174
|
member_method = getattr(member_type, method_name, None)
|
|
156
175
|
if member_method == method:
|
|
@@ -185,35 +204,47 @@ def _has_original_dunder(
|
|
|
185
204
|
return False
|
|
186
205
|
|
|
187
206
|
|
|
207
|
+
def _coerce_path_to_tuples(
|
|
208
|
+
allow_list: set[tuple[str, ...] | str],
|
|
209
|
+
) -> set[tuple[str, ...]]:
|
|
210
|
+
"""Replace dotted paths on the provided allow-list with tuples."""
|
|
211
|
+
return {
|
|
212
|
+
path if isinstance(path, tuple) else tuple(path.split("."))
|
|
213
|
+
for path in allow_list
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
|
|
188
217
|
@undoc
|
|
189
218
|
@dataclass
|
|
190
219
|
class SelectivePolicy(EvaluationPolicy):
|
|
191
220
|
allowed_getitem: set[InstancesHaveGetItem] = field(default_factory=set)
|
|
192
|
-
allowed_getitem_external: set[tuple[str, ...]] = field(default_factory=set)
|
|
221
|
+
allowed_getitem_external: set[tuple[str, ...] | str] = field(default_factory=set)
|
|
193
222
|
|
|
194
223
|
allowed_getattr: set[MayHaveGetattr] = field(default_factory=set)
|
|
195
|
-
allowed_getattr_external: set[tuple[str, ...]] = field(default_factory=set)
|
|
224
|
+
allowed_getattr_external: set[tuple[str, ...] | str] = field(default_factory=set)
|
|
196
225
|
|
|
197
226
|
allowed_operations: set = field(default_factory=set)
|
|
198
|
-
allowed_operations_external: set[tuple[str, ...]] = field(default_factory=set)
|
|
227
|
+
allowed_operations_external: set[tuple[str, ...] | str] = field(default_factory=set)
|
|
199
228
|
|
|
200
229
|
_operation_methods_cache: dict[str, set[Callable]] = field(
|
|
201
230
|
default_factory=dict, init=False
|
|
202
231
|
)
|
|
203
232
|
|
|
204
233
|
def can_get_attr(self, value, attr):
|
|
234
|
+
allowed_getattr_external = _coerce_path_to_tuples(self.allowed_getattr_external)
|
|
235
|
+
|
|
205
236
|
has_original_attribute = _has_original_dunder(
|
|
206
237
|
value,
|
|
207
238
|
allowed_types=self.allowed_getattr,
|
|
208
239
|
allowed_methods=self._getattribute_methods,
|
|
209
|
-
allowed_external=
|
|
240
|
+
allowed_external=allowed_getattr_external,
|
|
210
241
|
method_name="__getattribute__",
|
|
211
242
|
)
|
|
212
243
|
has_original_attr = _has_original_dunder(
|
|
213
244
|
value,
|
|
214
245
|
allowed_types=self.allowed_getattr,
|
|
215
246
|
allowed_methods=self._getattr_methods,
|
|
216
|
-
allowed_external=
|
|
247
|
+
allowed_external=allowed_getattr_external,
|
|
217
248
|
method_name="__getattr__",
|
|
218
249
|
)
|
|
219
250
|
|
|
@@ -245,7 +276,7 @@ class SelectivePolicy(EvaluationPolicy):
|
|
|
245
276
|
return True # pragma: no cover
|
|
246
277
|
|
|
247
278
|
# Properties in subclasses of allowed types may be ok if not changed
|
|
248
|
-
for module_name, *access_path in
|
|
279
|
+
for module_name, *access_path in allowed_getattr_external:
|
|
249
280
|
try:
|
|
250
281
|
external_class = _get_external(module_name, access_path)
|
|
251
282
|
external_class_attr_val = getattr(external_class, attr)
|
|
@@ -257,15 +288,19 @@ class SelectivePolicy(EvaluationPolicy):
|
|
|
257
288
|
|
|
258
289
|
def can_get_item(self, value, item):
|
|
259
290
|
"""Allow accessing `__getiitem__` of allow-listed instances unless it was not modified."""
|
|
291
|
+
allowed_getitem_external = _coerce_path_to_tuples(self.allowed_getitem_external)
|
|
260
292
|
return _has_original_dunder(
|
|
261
293
|
value,
|
|
262
294
|
allowed_types=self.allowed_getitem,
|
|
263
295
|
allowed_methods=self._getitem_methods,
|
|
264
|
-
allowed_external=
|
|
296
|
+
allowed_external=allowed_getitem_external,
|
|
265
297
|
method_name="__getitem__",
|
|
266
298
|
)
|
|
267
299
|
|
|
268
300
|
def can_operate(self, dunders: tuple[str, ...], a, b=None):
|
|
301
|
+
allowed_operations_external = _coerce_path_to_tuples(
|
|
302
|
+
self.allowed_operations_external
|
|
303
|
+
)
|
|
269
304
|
objects = [a]
|
|
270
305
|
if b is not None:
|
|
271
306
|
objects.append(b)
|
|
@@ -275,7 +310,7 @@ class SelectivePolicy(EvaluationPolicy):
|
|
|
275
310
|
obj,
|
|
276
311
|
allowed_types=self.allowed_operations,
|
|
277
312
|
allowed_methods=self._operator_dunder_methods(dunder),
|
|
278
|
-
allowed_external=
|
|
313
|
+
allowed_external=allowed_operations_external,
|
|
279
314
|
method_name=dunder,
|
|
280
315
|
)
|
|
281
316
|
for dunder in dunders
|
|
@@ -315,15 +350,16 @@ class _DummyNamedTuple(NamedTuple):
|
|
|
315
350
|
"""Used internally to retrieve methods of named tuple instance."""
|
|
316
351
|
|
|
317
352
|
|
|
353
|
+
EvaluationPolicyName = Literal["forbidden", "minimal", "limited", "unsafe", "dangerous"]
|
|
354
|
+
|
|
355
|
+
|
|
318
356
|
class EvaluationContext(NamedTuple):
|
|
319
357
|
#: Local namespace
|
|
320
358
|
locals: dict
|
|
321
359
|
#: Global namespace
|
|
322
360
|
globals: dict
|
|
323
361
|
#: Evaluation policy identifier
|
|
324
|
-
evaluation:
|
|
325
|
-
"forbidden"
|
|
326
|
-
)
|
|
362
|
+
evaluation: EvaluationPolicyName = "forbidden"
|
|
327
363
|
#: Whether the evaluation of code takes place inside of a subscript.
|
|
328
364
|
#: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``.
|
|
329
365
|
in_subscript: bool = False
|
|
@@ -470,11 +506,24 @@ def get_policy(context: EvaluationContext) -> EvaluationPolicy:
|
|
|
470
506
|
for key, value in context.policy_overrides.items():
|
|
471
507
|
if hasattr(policy, key):
|
|
472
508
|
setattr(policy, key, value)
|
|
473
|
-
else:
|
|
474
|
-
print(f"Incorrect policy override key: {key}")
|
|
475
509
|
return policy
|
|
476
510
|
|
|
477
511
|
|
|
512
|
+
def _validate_policy_overrides(
|
|
513
|
+
policy_name: EvaluationPolicyName, policy_overrides: dict
|
|
514
|
+
) -> bool:
|
|
515
|
+
policy = EVALUATION_POLICIES[policy_name]
|
|
516
|
+
|
|
517
|
+
all_good = True
|
|
518
|
+
for key, value in policy_overrides.items():
|
|
519
|
+
if not hasattr(policy, key):
|
|
520
|
+
warnings.warn(
|
|
521
|
+
f"Override {key!r} is not valid with {policy_name!r} evaluation policy"
|
|
522
|
+
)
|
|
523
|
+
all_good = False
|
|
524
|
+
return all_good
|
|
525
|
+
|
|
526
|
+
|
|
478
527
|
def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
|
|
479
528
|
"""Evaluate AST node in provided context.
|
|
480
529
|
|
|
@@ -586,7 +635,12 @@ def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
|
|
|
586
635
|
dunders = _find_dunder(node.op, UNARY_OP_DUNDERS)
|
|
587
636
|
if dunders:
|
|
588
637
|
if policy.can_operate(dunders, value):
|
|
589
|
-
|
|
638
|
+
try:
|
|
639
|
+
return getattr(value, dunders[0])()
|
|
640
|
+
except AttributeError:
|
|
641
|
+
raise TypeError(
|
|
642
|
+
f"bad operand type for unary {node.op}: {type(value)}"
|
|
643
|
+
)
|
|
590
644
|
else:
|
|
591
645
|
raise GuardRejection(
|
|
592
646
|
f"Operation (`{dunders}`) for",
|
|
@@ -590,7 +590,7 @@ class HistoryOutput:
|
|
|
590
590
|
output_type: typing.Literal[
|
|
591
591
|
"out_stream", "err_stream", "display_data", "execute_result"
|
|
592
592
|
]
|
|
593
|
-
bundle: typing.Dict[str, str]
|
|
593
|
+
bundle: typing.Dict[str, str | list[str]]
|
|
594
594
|
|
|
595
595
|
|
|
596
596
|
class HistoryManager(HistoryAccessor):
|
|
@@ -252,13 +252,23 @@ class ExecutionInfo:
|
|
|
252
252
|
Stores information about what is going to happen.
|
|
253
253
|
"""
|
|
254
254
|
raw_cell = None
|
|
255
|
+
transformed_cell = None
|
|
255
256
|
store_history = False
|
|
256
257
|
silent = False
|
|
257
258
|
shell_futures = True
|
|
258
259
|
cell_id = None
|
|
259
260
|
|
|
260
|
-
def __init__(
|
|
261
|
+
def __init__(
|
|
262
|
+
self,
|
|
263
|
+
raw_cell,
|
|
264
|
+
store_history,
|
|
265
|
+
silent,
|
|
266
|
+
shell_futures,
|
|
267
|
+
cell_id,
|
|
268
|
+
transformed_cell=None,
|
|
269
|
+
):
|
|
261
270
|
self.raw_cell = raw_cell
|
|
271
|
+
self.transformed_cell = transformed_cell
|
|
262
272
|
self.store_history = store_history
|
|
263
273
|
self.silent = silent
|
|
264
274
|
self.shell_futures = shell_futures
|
|
@@ -269,12 +279,18 @@ class ExecutionInfo:
|
|
|
269
279
|
raw_cell = (
|
|
270
280
|
(self.raw_cell[:50] + "..") if len(self.raw_cell) > 50 else self.raw_cell
|
|
271
281
|
)
|
|
282
|
+
transformed_cell = (
|
|
283
|
+
(self.transformed_cell[:50] + "..")
|
|
284
|
+
if self.transformed_cell and len(self.transformed_cell) > 50
|
|
285
|
+
else self.transformed_cell
|
|
286
|
+
)
|
|
272
287
|
return (
|
|
273
|
-
'<%s object at %x, raw_cell="%s" store_history=%s silent=%s shell_futures=%s cell_id=%s>'
|
|
288
|
+
'<%s object at %x, raw_cell="%s" transformed_cell="%s" store_history=%s silent=%s shell_futures=%s cell_id=%s>'
|
|
274
289
|
% (
|
|
275
290
|
name,
|
|
276
291
|
id(self),
|
|
277
292
|
raw_cell,
|
|
293
|
+
transformed_cell,
|
|
278
294
|
self.store_history,
|
|
279
295
|
self.silent,
|
|
280
296
|
self.shell_futures,
|
|
@@ -3047,11 +3063,11 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
3047
3063
|
output_stream = outputs[-1]
|
|
3048
3064
|
if output_stream is None:
|
|
3049
3065
|
output_stream = HistoryOutput(
|
|
3050
|
-
output_type=output_type, bundle={"stream":
|
|
3066
|
+
output_type=output_type, bundle={"stream": []}
|
|
3051
3067
|
)
|
|
3052
3068
|
outputs_by_counter[execution_count].append(output_stream)
|
|
3053
3069
|
|
|
3054
|
-
output_stream.bundle["stream"]
|
|
3070
|
+
output_stream.bundle["stream"].append(data) # Append to existing stream
|
|
3055
3071
|
return result
|
|
3056
3072
|
|
|
3057
3073
|
stream.write = write
|
|
@@ -3156,14 +3172,18 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
3156
3172
|
except BaseException as e:
|
|
3157
3173
|
try:
|
|
3158
3174
|
info = ExecutionInfo(
|
|
3159
|
-
raw_cell,
|
|
3175
|
+
raw_cell,
|
|
3176
|
+
store_history,
|
|
3177
|
+
silent,
|
|
3178
|
+
shell_futures,
|
|
3179
|
+
cell_id,
|
|
3180
|
+
transformed_cell=transformed_cell,
|
|
3160
3181
|
)
|
|
3161
3182
|
result = ExecutionResult(info)
|
|
3162
3183
|
result.error_in_exec = e
|
|
3163
3184
|
self.showtraceback(running_compiled_code=True)
|
|
3164
3185
|
except:
|
|
3165
3186
|
pass
|
|
3166
|
-
|
|
3167
3187
|
return result
|
|
3168
3188
|
|
|
3169
3189
|
def should_run_async(
|
|
@@ -3248,7 +3268,14 @@ class InteractiveShell(SingletonConfigurable):
|
|
|
3248
3268
|
|
|
3249
3269
|
.. versionadded:: 7.0
|
|
3250
3270
|
"""
|
|
3251
|
-
info = ExecutionInfo(
|
|
3271
|
+
info = ExecutionInfo(
|
|
3272
|
+
raw_cell,
|
|
3273
|
+
store_history,
|
|
3274
|
+
silent,
|
|
3275
|
+
shell_futures,
|
|
3276
|
+
cell_id,
|
|
3277
|
+
transformed_cell=transformed_cell,
|
|
3278
|
+
)
|
|
3252
3279
|
result = ExecutionResult(info)
|
|
3253
3280
|
|
|
3254
3281
|
if (not raw_cell) or raw_cell.isspace():
|