ipython 9.11.0__tar.gz → 9.13.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.
Files changed (442) hide show
  1. {ipython-9.11.0 → ipython-9.13.0}/IPython/__init__.py +2 -3
  2. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/alias.py +1 -1
  3. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/application.py +3 -2
  4. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/compilerop.py +2 -2
  5. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/completer.py +5 -1
  6. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/debugger.py +4 -4
  7. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/guarded_eval.py +4 -1
  8. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/history.py +3 -5
  9. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/historyapp.py +39 -41
  10. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/inputtransformer2.py +25 -2
  11. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/interactiveshell.py +2 -1
  12. ipython-9.13.0/IPython/core/kitty.py +73 -0
  13. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/basic.py +13 -3
  14. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/release.py +1 -1
  15. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/tbtools.py +1 -1
  16. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/tips.py +6 -0
  17. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/ultratb.py +66 -27
  18. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/interactiveshell.py +10 -1
  19. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/prompts.py +8 -4
  20. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/shortcuts/filters.py +6 -6
  21. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/decorators.py +6 -4
  22. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/ipunittest.py +1 -1
  23. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/pytest_ipdoctest.py +3 -3
  24. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/skipdoctest.py +2 -1
  25. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/tools.py +12 -10
  26. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/PyColorize.py +5 -0
  27. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_sysinfo.py +1 -1
  28. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/capture.py +13 -6
  29. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/io.py +4 -2
  30. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/ipstruct.py +4 -3
  31. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/path.py +5 -5
  32. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/py3compat.py +3 -2
  33. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/strdispatch.py +2 -1
  34. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/tempdir.py +8 -5
  35. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/terminal.py +1 -1
  36. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/tokenutil.py +2 -2
  37. {ipython-9.11.0/ipython.egg-info → ipython-9.13.0}/PKG-INFO +4 -2
  38. {ipython-9.11.0 → ipython-9.13.0}/README.rst +4 -1
  39. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/details.rst +2 -1
  40. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version9.rst +164 -48
  41. {ipython-9.11.0 → ipython-9.13.0/ipython.egg-info}/PKG-INFO +4 -2
  42. {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/SOURCES.txt +1 -0
  43. {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/requires.txt +4 -0
  44. {ipython-9.11.0 → ipython-9.13.0}/pyproject.toml +11 -2
  45. {ipython-9.11.0 → ipython-9.13.0}/setup.py +34 -0
  46. {ipython-9.11.0 → ipython-9.13.0}/tests/test_capture.py +11 -1
  47. {ipython-9.11.0 → ipython-9.13.0}/tests/test_completer.py +1 -1
  48. {ipython-9.11.0 → ipython-9.13.0}/tests/test_guarded_eval.py +4 -1
  49. {ipython-9.11.0 → ipython-9.13.0}/tests/test_iplib.py +11 -15
  50. {ipython-9.11.0 → ipython-9.13.0}/tests/test_magic.py +15 -2
  51. {ipython-9.11.0 → ipython-9.13.0}/tests/test_zzz_autoreload.py +2 -0
  52. {ipython-9.11.0 → ipython-9.13.0}/.flake8 +0 -0
  53. {ipython-9.11.0 → ipython-9.13.0}/.mailmap +0 -0
  54. {ipython-9.11.0 → ipython-9.13.0}/.pre-commit-config.yaml +0 -0
  55. {ipython-9.11.0 → ipython-9.13.0}/COPYING.rst +0 -0
  56. {ipython-9.11.0 → ipython-9.13.0}/IPython/__main__.py +0 -0
  57. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/__init__.py +0 -0
  58. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/async_helpers.py +0 -0
  59. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/autocall.py +0 -0
  60. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/builtin_trap.py +0 -0
  61. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/completerlib.py +0 -0
  62. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/crashhandler.py +0 -0
  63. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/debugger_backport.py +0 -0
  64. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/display.py +0 -0
  65. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/display_functions.py +0 -0
  66. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/display_trap.py +0 -0
  67. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/displayhook.py +0 -0
  68. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/displaypub.py +0 -0
  69. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/doctb.py +0 -0
  70. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/error.py +0 -0
  71. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/events.py +0 -0
  72. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/extensions.py +0 -0
  73. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/formatters.py +0 -0
  74. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/getipython.py +0 -0
  75. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/hooks.py +0 -0
  76. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/latex_symbols.py +0 -0
  77. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/logger.py +0 -0
  78. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/macro.py +0 -0
  79. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magic.py +0 -0
  80. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magic_arguments.py +0 -0
  81. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/__init__.py +0 -0
  82. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/ast_mod.py +0 -0
  83. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/auto.py +0 -0
  84. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/code.py +0 -0
  85. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/config.py +0 -0
  86. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/display.py +0 -0
  87. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/execution.py +0 -0
  88. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/extension.py +0 -0
  89. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/history.py +0 -0
  90. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/logging.py +0 -0
  91. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/namespace.py +0 -0
  92. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/osm.py +0 -0
  93. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/packaging.py +0 -0
  94. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/pylab.py +0 -0
  95. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/magics/script.py +0 -0
  96. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/oinspect.py +0 -0
  97. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/page.py +0 -0
  98. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/payload.py +0 -0
  99. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/payloadpage.py +0 -0
  100. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/prefilter.py +0 -0
  101. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/profile/README_STARTUP +0 -0
  102. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/profileapp.py +0 -0
  103. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/profiledir.py +0 -0
  104. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/pylabtools.py +0 -0
  105. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/shellapp.py +0 -0
  106. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/splitinput.py +0 -0
  107. {ipython-9.11.0 → ipython-9.13.0}/IPython/core/usage.py +0 -0
  108. {ipython-9.11.0 → ipython-9.13.0}/IPython/display.py +0 -0
  109. {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/__init__.py +0 -0
  110. {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/autoreload.py +0 -0
  111. {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/deduperreload/__init__.py +0 -0
  112. {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/deduperreload/deduperreload.py +0 -0
  113. {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
  114. {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/storemagic.py +0 -0
  115. {ipython-9.11.0 → ipython-9.13.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
  116. {ipython-9.11.0 → ipython-9.13.0}/IPython/external/__init__.py +0 -0
  117. {ipython-9.11.0 → ipython-9.13.0}/IPython/external/pickleshare.py +0 -0
  118. {ipython-9.11.0 → ipython-9.13.0}/IPython/external/qt_for_kernel.py +0 -0
  119. {ipython-9.11.0 → ipython-9.13.0}/IPython/external/qt_loaders.py +0 -0
  120. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/__init__.py +0 -0
  121. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/backgroundjobs.py +0 -0
  122. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/clipboard.py +0 -0
  123. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/deepreload.py +0 -0
  124. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/demo.py +0 -0
  125. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/display.py +0 -0
  126. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/editorhooks.py +0 -0
  127. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/guisupport.py +0 -0
  128. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/latextools.py +0 -0
  129. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/lexers.py +0 -0
  130. {ipython-9.11.0 → ipython-9.13.0}/IPython/lib/pretty.py +0 -0
  131. {ipython-9.11.0 → ipython-9.13.0}/IPython/paths.py +0 -0
  132. {ipython-9.11.0 → ipython-9.13.0}/IPython/py.typed +0 -0
  133. {ipython-9.11.0 → ipython-9.13.0}/IPython/sphinxext/__init__.py +0 -0
  134. {ipython-9.11.0 → ipython-9.13.0}/IPython/sphinxext/custom_doctests.py +0 -0
  135. {ipython-9.11.0 → ipython-9.13.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  136. {ipython-9.11.0 → ipython-9.13.0}/IPython/sphinxext/ipython_directive.py +0 -0
  137. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/__init__.py +0 -0
  138. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/debugger.py +0 -0
  139. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/embed.py +0 -0
  140. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/ipapp.py +0 -0
  141. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/magics.py +0 -0
  142. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  143. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  144. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  145. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  146. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  147. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  148. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  149. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  150. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  151. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  152. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  153. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/ptutils.py +0 -0
  154. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  155. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  156. {ipython-9.11.0 → ipython-9.13.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
  157. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/__init__.py +0 -0
  158. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/globalipapp.py +0 -0
  159. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/Makefile +0 -0
  160. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/__init__.py +0 -0
  161. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/dtexample.py +0 -0
  162. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  163. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/setup.py +0 -0
  164. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/simple.py +0 -0
  165. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/simplevars.py +0 -0
  166. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_combo.txt +0 -0
  167. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_example.txt +0 -0
  168. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  169. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  170. {ipython-9.11.0 → ipython-9.13.0}/IPython/testing/plugin/test_refs.py +0 -0
  171. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/__init__.py +0 -0
  172. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_cli.py +0 -0
  173. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_common.py +0 -0
  174. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_emscripten.py +0 -0
  175. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_posix.py +0 -0
  176. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_win32.py +0 -0
  177. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/_process_win32_controller.py +0 -0
  178. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/coloransi.py +0 -0
  179. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/contexts.py +0 -0
  180. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/data.py +0 -0
  181. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/decorators.py +0 -0
  182. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/dir2.py +0 -0
  183. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/docs.py +0 -0
  184. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/encoding.py +0 -0
  185. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/eventful.py +0 -0
  186. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/frame.py +0 -0
  187. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/generics.py +0 -0
  188. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/importstring.py +0 -0
  189. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/jsonutil.py +0 -0
  190. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/log.py +0 -0
  191. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/module_paths.py +0 -0
  192. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/openpy.py +0 -0
  193. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/process.py +0 -0
  194. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/sentinel.py +0 -0
  195. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/sysinfo.py +0 -0
  196. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/syspathcontext.py +0 -0
  197. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/text.py +0 -0
  198. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/timing.py +0 -0
  199. {ipython-9.11.0 → ipython-9.13.0}/IPython/utils/wildcard.py +0 -0
  200. {ipython-9.11.0 → ipython-9.13.0}/LICENSE +0 -0
  201. {ipython-9.11.0 → ipython-9.13.0}/MANIFEST.in +0 -0
  202. {ipython-9.11.0 → ipython-9.13.0}/_build_meta.py +0 -0
  203. {ipython-9.11.0 → ipython-9.13.0}/docs/Makefile +0 -0
  204. {ipython-9.11.0 → ipython-9.13.0}/docs/README.rst +0 -0
  205. {ipython-9.11.0 → ipython-9.13.0}/docs/autogen_api.py +0 -0
  206. {ipython-9.11.0 → ipython-9.13.0}/docs/autogen_config.py +0 -0
  207. {ipython-9.11.0 → ipython-9.13.0}/docs/autogen_magics.py +0 -0
  208. {ipython-9.11.0 → ipython-9.13.0}/docs/autogen_shortcuts.py +0 -0
  209. {ipython-9.11.0 → ipython-9.13.0}/docs/make.cmd +0 -0
  210. {ipython-9.11.0 → ipython-9.13.0}/docs/man/ipython.1 +0 -0
  211. {ipython-9.11.0 → ipython-9.13.0}/docs/requirements.txt +0 -0
  212. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/running-crop.png +0 -0
  213. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/running.png +0 -0
  214. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/treeview.png +0 -0
  215. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/user-interface.png +0 -0
  216. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/2.0/widgets.png +0 -0
  217. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  218. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  219. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  220. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  221. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  222. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  223. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  224. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  225. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  226. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  227. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  228. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/autosuggest.gif +0 -0
  229. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  230. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  231. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  232. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  233. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  234. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  235. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  236. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  237. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  238. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  239. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  240. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  241. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  242. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  243. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  244. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ms_visual_studio.png +0 -0
  245. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/notebook_specgram.png +0 -0
  246. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/ptshell_features.png +0 -0
  247. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/qtconsole.png +0 -0
  248. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  249. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_images/unicode_completion.png +0 -0
  250. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_static/favicon.ico +0 -0
  251. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_static/logo.png +0 -0
  252. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_static/theme_overrides.css +0 -0
  253. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_templates/breadcrumbs.html +0 -0
  254. {ipython-9.11.0 → ipython-9.13.0}/docs/source/_templates/notebook_redirect.html +0 -0
  255. {ipython-9.11.0 → ipython-9.13.0}/docs/source/about/history.rst +0 -0
  256. {ipython-9.11.0 → ipython-9.13.0}/docs/source/about/index.rst +0 -0
  257. {ipython-9.11.0 → ipython-9.13.0}/docs/source/about/license_and_copyright.rst +0 -0
  258. {ipython-9.11.0 → ipython-9.13.0}/docs/source/api/index.rst +0 -0
  259. {ipython-9.11.0 → ipython-9.13.0}/docs/source/conf.py +0 -0
  260. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/callbacks.rst +0 -0
  261. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/custommagics.rst +0 -0
  262. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/eventloops.rst +0 -0
  263. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/extensions/autoreload.rst +0 -0
  264. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/extensions/index.rst +0 -0
  265. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/extensions/storemagic.rst +0 -0
  266. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/index.rst +0 -0
  267. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/inputtransforms.rst +0 -0
  268. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/integrating.rst +0 -0
  269. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/intro.rst +0 -0
  270. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/options/index.rst +0 -0
  271. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  272. {ipython-9.11.0 → ipython-9.13.0}/docs/source/config/shortcuts/index.rst +0 -0
  273. {ipython-9.11.0 → ipython-9.13.0}/docs/source/coredev/index.rst +0 -0
  274. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/config.rst +0 -0
  275. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/execution.rst +0 -0
  276. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  277. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  278. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/figs/other_kernels.png +0 -0
  279. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/figs/other_kernels.svg +0 -0
  280. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/how_ipython_works.rst +0 -0
  281. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/index.rst +0 -0
  282. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/inputhook_app.rst +0 -0
  283. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/kernels.rst +0 -0
  284. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/messaging.rst +0 -0
  285. {ipython-9.11.0 → ipython-9.13.0}/docs/source/development/wrapperkernels.rst +0 -0
  286. {ipython-9.11.0 → ipython-9.13.0}/docs/source/index.rst +0 -0
  287. {ipython-9.11.0 → ipython-9.13.0}/docs/source/install/index.rst +0 -0
  288. {ipython-9.11.0 → ipython-9.13.0}/docs/source/install/install.rst +0 -0
  289. {ipython-9.11.0 → ipython-9.13.0}/docs/source/install/kernel_install.rst +0 -0
  290. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/autoawait.rst +0 -0
  291. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/index.rst +0 -0
  292. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/magics.rst +0 -0
  293. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/plotting.rst +0 -0
  294. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  295. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/reference.rst +0 -0
  296. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/shell.rst +0 -0
  297. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/tips.rst +0 -0
  298. {ipython-9.11.0 → ipython-9.13.0}/docs/source/interactive/tutorial.rst +0 -0
  299. {ipython-9.11.0 → ipython-9.13.0}/docs/source/links.txt +0 -0
  300. {ipython-9.11.0 → ipython-9.13.0}/docs/source/overview.rst +0 -0
  301. {ipython-9.11.0 → ipython-9.13.0}/docs/source/parallel/index.rst +0 -0
  302. {ipython-9.11.0 → ipython-9.13.0}/docs/source/sphinx.toml +0 -0
  303. {ipython-9.11.0 → ipython-9.13.0}/docs/source/sphinxext.rst +0 -0
  304. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/development.rst +0 -0
  305. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  306. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  307. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  308. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  309. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  310. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  311. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  312. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  313. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  314. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  315. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  316. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/index.rst +0 -0
  317. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/pr/README.md +0 -0
  318. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  319. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  320. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.10.rst +0 -0
  321. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.11.rst +0 -0
  322. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.12.rst +0 -0
  323. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.13.rst +0 -0
  324. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.8.rst +0 -0
  325. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version0.9.rst +0 -0
  326. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version1.0.rst +0 -0
  327. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version2.0.rst +0 -0
  328. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version3.rst +0 -0
  329. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  330. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version4.rst +0 -0
  331. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version5.rst +0 -0
  332. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version6.rst +0 -0
  333. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version7.rst +0 -0
  334. {ipython-9.11.0 → ipython-9.13.0}/docs/source/whatsnew/version8.rst +0 -0
  335. {ipython-9.11.0 → ipython-9.13.0}/docs/sphinxext/apigen.py +0 -0
  336. {ipython-9.11.0 → ipython-9.13.0}/docs/sphinxext/configtraits.py +0 -0
  337. {ipython-9.11.0 → ipython-9.13.0}/docs/sphinxext/magics.py +0 -0
  338. {ipython-9.11.0 → ipython-9.13.0}/examples/Embedding/embed_class_long.py +0 -0
  339. {ipython-9.11.0 → ipython-9.13.0}/examples/Embedding/embed_class_short.py +0 -0
  340. {ipython-9.11.0 → ipython-9.13.0}/examples/Embedding/embed_function.py +0 -0
  341. {ipython-9.11.0 → ipython-9.13.0}/examples/Embedding/start_ipython_config.py +0 -0
  342. {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/example-demo.py +0 -0
  343. {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  344. {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  345. {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  346. {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  347. {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  348. {ipython-9.11.0 → ipython-9.13.0}/examples/IPython Kernel/ipython.desktop +0 -0
  349. {ipython-9.11.0 → ipython-9.13.0}/examples/auto_suggest_llm.py +0 -0
  350. {ipython-9.11.0 → ipython-9.13.0}/examples/utils/cwd_prompt.py +0 -0
  351. {ipython-9.11.0 → ipython-9.13.0}/examples/utils/list_pyfiles.ipy +0 -0
  352. {ipython-9.11.0 → ipython-9.13.0}/examples/utils/list_subdirs.ipy +0 -0
  353. {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/dependency_links.txt +0 -0
  354. {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/entry_points.txt +0 -0
  355. {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/not-zip-safe +0 -0
  356. {ipython-9.11.0 → ipython-9.13.0}/ipython.egg-info/top_level.txt +0 -0
  357. {ipython-9.11.0 → ipython-9.13.0}/long_description.rst +0 -0
  358. {ipython-9.11.0 → ipython-9.13.0}/scripts/ipython.ico +0 -0
  359. {ipython-9.11.0 → ipython-9.13.0}/scripts/ipython_nb.ico +0 -0
  360. {ipython-9.11.0 → ipython-9.13.0}/setup.cfg +0 -0
  361. {ipython-9.11.0 → ipython-9.13.0}/setupbase.py +0 -0
  362. {ipython-9.11.0 → ipython-9.13.0}/tests/2x2.jpg +0 -0
  363. {ipython-9.11.0 → ipython-9.13.0}/tests/2x2.png +0 -0
  364. {ipython-9.11.0 → ipython-9.13.0}/tests/__init__.py +0 -0
  365. {ipython-9.11.0 → ipython-9.13.0}/tests/bad_all.py +0 -0
  366. {ipython-9.11.0 → ipython-9.13.0}/tests/conftest.py +0 -0
  367. {ipython-9.11.0 → ipython-9.13.0}/tests/fake_ext_dir/daft_extension.py +0 -0
  368. {ipython-9.11.0 → ipython-9.13.0}/tests/fake_llm.py +0 -0
  369. {ipython-9.11.0 → ipython-9.13.0}/tests/nonascii.py +0 -0
  370. {ipython-9.11.0 → ipython-9.13.0}/tests/nonascii2.py +0 -0
  371. {ipython-9.11.0 → ipython-9.13.0}/tests/print_argv.py +0 -0
  372. {ipython-9.11.0 → ipython-9.13.0}/tests/refbug.py +0 -0
  373. {ipython-9.11.0 → ipython-9.13.0}/tests/simpleerr.py +0 -0
  374. {ipython-9.11.0 → ipython-9.13.0}/tests/tclass.py +0 -0
  375. {ipython-9.11.0 → ipython-9.13.0}/tests/test.wav +0 -0
  376. {ipython-9.11.0 → ipython-9.13.0}/tests/test_alias.py +0 -0
  377. {ipython-9.11.0 → ipython-9.13.0}/tests/test_application.py +0 -0
  378. {ipython-9.11.0 → ipython-9.13.0}/tests/test_async_helpers.py +0 -0
  379. {ipython-9.11.0 → ipython-9.13.0}/tests/test_autocall.py +0 -0
  380. {ipython-9.11.0 → ipython-9.13.0}/tests/test_backgroundjobs.py +0 -0
  381. {ipython-9.11.0 → ipython-9.13.0}/tests/test_clipboard.py +0 -0
  382. {ipython-9.11.0 → ipython-9.13.0}/tests/test_compilerop.py +0 -0
  383. {ipython-9.11.0 → ipython-9.13.0}/tests/test_completerlib.py +0 -0
  384. {ipython-9.11.0 → ipython-9.13.0}/tests/test_cve.py +0 -0
  385. {ipython-9.11.0 → ipython-9.13.0}/tests/test_debug_magic.py +0 -0
  386. {ipython-9.11.0 → ipython-9.13.0}/tests/test_debugger.py +0 -0
  387. {ipython-9.11.0 → ipython-9.13.0}/tests/test_decorators.py +0 -0
  388. {ipython-9.11.0 → ipython-9.13.0}/tests/test_decorators_2.py +0 -0
  389. {ipython-9.11.0 → ipython-9.13.0}/tests/test_deepreload.py +0 -0
  390. {ipython-9.11.0 → ipython-9.13.0}/tests/test_dir2.py +0 -0
  391. {ipython-9.11.0 → ipython-9.13.0}/tests/test_display.py +0 -0
  392. {ipython-9.11.0 → ipython-9.13.0}/tests/test_display_2.py +0 -0
  393. {ipython-9.11.0 → ipython-9.13.0}/tests/test_displayhook.py +0 -0
  394. {ipython-9.11.0 → ipython-9.13.0}/tests/test_editorhooks.py +0 -0
  395. {ipython-9.11.0 → ipython-9.13.0}/tests/test_embed.py +0 -0
  396. {ipython-9.11.0 → ipython-9.13.0}/tests/test_events.py +0 -0
  397. {ipython-9.11.0 → ipython-9.13.0}/tests/test_exceptiongroup_tb.py +0 -0
  398. {ipython-9.11.0 → ipython-9.13.0}/tests/test_extension.py +0 -0
  399. {ipython-9.11.0 → ipython-9.13.0}/tests/test_formatters.py +0 -0
  400. {ipython-9.11.0 → ipython-9.13.0}/tests/test_handlers.py +0 -0
  401. {ipython-9.11.0 → ipython-9.13.0}/tests/test_help.py +0 -0
  402. {ipython-9.11.0 → ipython-9.13.0}/tests/test_history.py +0 -0
  403. {ipython-9.11.0 → ipython-9.13.0}/tests/test_hooks.py +0 -0
  404. {ipython-9.11.0 → ipython-9.13.0}/tests/test_imports.py +0 -0
  405. {ipython-9.11.0 → ipython-9.13.0}/tests/test_importstring.py +0 -0
  406. {ipython-9.11.0 → ipython-9.13.0}/tests/test_inputtransformer2.py +0 -0
  407. {ipython-9.11.0 → ipython-9.13.0}/tests/test_inputtransformer2_line.py +0 -0
  408. {ipython-9.11.0 → ipython-9.13.0}/tests/test_interactiveshell.py +0 -0
  409. {ipython-9.11.0 → ipython-9.13.0}/tests/test_interactivshell.py +0 -0
  410. {ipython-9.11.0 → ipython-9.13.0}/tests/test_io.py +0 -0
  411. {ipython-9.11.0 → ipython-9.13.0}/tests/test_ipunittest.py +0 -0
  412. {ipython-9.11.0 → ipython-9.13.0}/tests/test_latextools.py +0 -0
  413. {ipython-9.11.0 → ipython-9.13.0}/tests/test_logger.py +0 -0
  414. {ipython-9.11.0 → ipython-9.13.0}/tests/test_magic_arguments.py +0 -0
  415. {ipython-9.11.0 → ipython-9.13.0}/tests/test_magic_terminal.py +0 -0
  416. {ipython-9.11.0 → ipython-9.13.0}/tests/test_module_paths.py +0 -0
  417. {ipython-9.11.0 → ipython-9.13.0}/tests/test_oinspect.py +0 -0
  418. {ipython-9.11.0 → ipython-9.13.0}/tests/test_openpy.py +0 -0
  419. {ipython-9.11.0 → ipython-9.13.0}/tests/test_page.py +0 -0
  420. {ipython-9.11.0 → ipython-9.13.0}/tests/test_path.py +0 -0
  421. {ipython-9.11.0 → ipython-9.13.0}/tests/test_paths.py +0 -0
  422. {ipython-9.11.0 → ipython-9.13.0}/tests/test_prefilter.py +0 -0
  423. {ipython-9.11.0 → ipython-9.13.0}/tests/test_pretty.py +0 -0
  424. {ipython-9.11.0 → ipython-9.13.0}/tests/test_process.py +0 -0
  425. {ipython-9.11.0 → ipython-9.13.0}/tests/test_profile.py +0 -0
  426. {ipython-9.11.0 → ipython-9.13.0}/tests/test_pt_inputhooks.py +0 -0
  427. {ipython-9.11.0 → ipython-9.13.0}/tests/test_pycolorize.py +0 -0
  428. {ipython-9.11.0 → ipython-9.13.0}/tests/test_pylabtools.py +0 -0
  429. {ipython-9.11.0 → ipython-9.13.0}/tests/test_qt_loaders.py +0 -0
  430. {ipython-9.11.0 → ipython-9.13.0}/tests/test_run.py +0 -0
  431. {ipython-9.11.0 → ipython-9.13.0}/tests/test_shellapp.py +0 -0
  432. {ipython-9.11.0 → ipython-9.13.0}/tests/test_shortcuts.py +0 -0
  433. {ipython-9.11.0 → ipython-9.13.0}/tests/test_splitinput.py +0 -0
  434. {ipython-9.11.0 → ipython-9.13.0}/tests/test_storemagic.py +0 -0
  435. {ipython-9.11.0 → ipython-9.13.0}/tests/test_sysinfo.py +0 -0
  436. {ipython-9.11.0 → ipython-9.13.0}/tests/test_tempdir.py +0 -0
  437. {ipython-9.11.0 → ipython-9.13.0}/tests/test_text.py +0 -0
  438. {ipython-9.11.0 → ipython-9.13.0}/tests/test_tips.py +0 -0
  439. {ipython-9.11.0 → ipython-9.13.0}/tests/test_tokenutil.py +0 -0
  440. {ipython-9.11.0 → ipython-9.13.0}/tests/test_tools.py +0 -0
  441. {ipython-9.11.0 → ipython-9.13.0}/tests/test_ultratb.py +0 -0
  442. {ipython-9.11.0 → ipython-9.13.0}/tests/test_wildcard.py +0 -0
@@ -27,11 +27,10 @@ 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, 12):
30
+ if sys.version_info < (3, 11):
31
31
  raise ImportError(
32
32
  """
33
- IPython 9.x supports Python 3.12 and above, following SPEC0
34
- IPython 8.31+ supports Python 3.11 and above, following SPEC0
33
+ IPython 9.x supports Python 3.11 and above, following SPEC0
35
34
  IPython 8.19+ supports Python 3.10 and above, following SPEC0.
36
35
  IPython 8.13+ supports Python 3.9 and above, following NEP 29.
37
36
  When using Python 2.7, please install IPython 5.x LTS Long Term Support version.
@@ -219,7 +219,7 @@ class AliasManager(Configurable):
219
219
  self.soft_define_alias(name, cmd)
220
220
 
221
221
  @property
222
- def aliases(self):
222
+ def aliases(self) -> list:
223
223
  return [(n, func.cmd) for (n, func) in self.linemagics.items()
224
224
  if isinstance(func, Alias)]
225
225
 
@@ -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: # PROGRAMDATA is not defined by default on XP.
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,7 +243,11 @@ import __main__
243
243
 
244
244
  from typing import cast
245
245
 
246
- from typing import TypedDict, NotRequired, Protocol, TypeAlias, TypeGuard
246
+ if sys.version_info < (3, 12):
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
247
251
 
248
252
 
249
253
  # skip module docstests
@@ -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:
@@ -874,9 +874,9 @@ class Pdb(OldPdb):
874
874
  try:
875
875
  x = eval(arg, {}, {})
876
876
  if type(x) == type(()):
877
- first, last = x
878
- first = int(first)
879
- last = int(last)
877
+ first, last = x # type: ignore[misc]
878
+ first = int(first) # type: ignore[call-overload]
879
+ last = int(last) # type: ignore[call-overload]
880
880
  if last < first:
881
881
  # Assume it's a count
882
882
  last = first + last
@@ -32,7 +32,10 @@ from IPython.utils.decorators import undoc
32
32
  import types
33
33
  from typing import Self, LiteralString, get_type_hints
34
34
 
35
- from typing import TypeAliasType
35
+ if sys.version_info < (3, 12):
36
+ from typing_extensions import TypeAliasType
37
+ else:
38
+ from typing import TypeAliasType
36
39
 
37
40
 
38
41
  @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
@@ -322,12 +323,14 @@ class HistoryAccessor(HistoryAccessorBase):
322
323
  """Connect to the database, and create tables if necessary."""
323
324
  if not self.enabled:
324
325
  self.db = DummyDB()
326
+ self._finalizer = weakref.finalize(self, lambda db: db.close(), self.db)
325
327
  return
326
328
 
327
329
  # use detect_types so that timestamps return datetime objects
328
330
  kwargs = dict(detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
329
331
  kwargs.update(self.connection_options)
330
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)
331
334
  with self.db:
332
335
  self.db.execute(
333
336
  """CREATE TABLE IF NOT EXISTS sessions (session integer
@@ -349,10 +352,6 @@ class HistoryAccessor(HistoryAccessorBase):
349
352
  # success! reset corrupt db count
350
353
  self._corrupt_db_counter = 0
351
354
 
352
- def __del__(self) -> None:
353
- if hasattr(self, "db"):
354
- self.db.close()
355
-
356
355
  def writeout_cache(self) -> None:
357
356
  """Overridden by HistoryManager to dump the cache before certain
358
357
  database lookups."""
@@ -721,7 +720,6 @@ class HistoryManager(HistoryAccessor):
721
720
  def __del__(self) -> None:
722
721
  if self.save_thread is not None:
723
722
  self.save_thread.stop()
724
- HistoryAccessor.__del__(self)
725
723
 
726
724
  @classmethod
727
725
  def _stop_thread(cls) -> None:
@@ -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
- con = sqlite3.connect(hist_file)
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,)))
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
- new_db = sqlite3.connect(new_hist_file)
83
- new_db.execute("""CREATE TABLE IF NOT EXISTS sessions (session integer
84
- primary key autoincrement, start timestamp,
85
- end timestamp, num_cmds integer, remark text)""")
86
- new_db.execute("""CREATE TABLE IF NOT EXISTS history
87
- (session integer, line integer, source text, source_raw text,
88
- PRIMARY KEY (session, line))""")
89
- new_db.execute("""CREATE TABLE IF NOT EXISTS output_history
90
- (session integer, line integer, output text,
91
- PRIMARY KEY (session, line))""")
92
- new_db.commit()
93
-
94
-
95
- if inputs:
96
- with new_db:
97
- # Add the recent history into the new database.
98
- new_db.executemany('insert into sessions values (?,?,?,?,?)', sessions)
99
- new_db.executemany('insert into history values (?,?,?,?)', inputs)
100
- new_db.executemany('insert into output_history values (?,?,?)', outputs)
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,8 +356,24 @@ class MagicAssign(TokenTransformBase):
356
356
  class SystemAssign(TokenTransformBase):
357
357
  """Transformer for assignments from system commands (a = !foo)"""
358
358
  @classmethod
359
- def find(cls, tokens_by_line):
360
- """Find the first system assignment (a = !foo) in the cell."""
359
+ def find_pre_312(cls, tokens_by_line):
360
+ for line in tokens_by_line:
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):
361
377
  for line in tokens_by_line:
362
378
  assign_ix = _find_assign_op(line)
363
379
  if (
@@ -369,6 +385,13 @@ class SystemAssign(TokenTransformBase):
369
385
  ):
370
386
  return cls(line[assign_ix + 1].start)
371
387
 
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
+
372
395
  def transform(self, lines: List[str]):
373
396
  """Transform a system assignment found by the ``find()`` classmethod.
374
397
  """
@@ -2140,7 +2140,8 @@ class InteractiveShell(SingletonConfigurable):
2140
2140
  sys.last_type = etype
2141
2141
  sys.last_value = value
2142
2142
  sys.last_traceback = tb
2143
- sys.last_exc = value
2143
+ if sys.version_info >= (3, 12):
2144
+ sys.last_exc = value
2144
2145
 
2145
2146
  return etype, value, tb
2146
2147
 
@@ -0,0 +1,73 @@
1
+ # Implements https://sw.kovidgoyal.net/kitty/graphics-protocol/
2
+
3
+ from base64 import b64encode, b64decode
4
+ import sys
5
+ from typing import Union
6
+
7
+ def _supports_kitty_graphics() -> bool:
8
+ import platform
9
+
10
+ if platform.system() not in ("Darwin", "Linux"):
11
+ return False
12
+
13
+ if not sys.stdout.isatty():
14
+ return False
15
+ # Hardcoding process names instead of using
16
+ # https://sw.kovidgoyal.net/kitty/graphics-protocol/#querying-support-and-available-transmission-mediums
17
+ # to avoid startup slowdown
18
+ supported_terminals = {
19
+ "ghostty",
20
+ "iTerm2",
21
+ "kitty",
22
+ "konsole",
23
+ "warp",
24
+ "wayst",
25
+ "wezterm-gui",
26
+ }
27
+ import psutil
28
+
29
+ process = psutil.Process()
30
+ while process := process.parent():
31
+ if process.name() in supported_terminals:
32
+ return True
33
+ return False
34
+
35
+
36
+ supports_kitty_graphics = _supports_kitty_graphics()
37
+
38
+
39
+ def png_to_kitty_ansi(png: bytes) -> str:
40
+ if not png.startswith(b"\x89PNG\r\n\x1a\n"):
41
+ raise ValueError
42
+ # This simplicity resembles
43
+ # https://sw.kovidgoyal.net/kitty/graphics-protocol/#a-minimal-example
44
+ # but if we need tmux support, we can switch to Unicode like
45
+ # https://github.com/hzeller/timg/blob/main/src/kitty-canvas.cc
46
+ result = ["\033_Ga=T,f=100,", "m=1;"]
47
+ encoded = b64encode(png)
48
+ for i in range(0, len(encoded), 4096):
49
+ result.append(encoded[i : i + 4096].decode("ascii"))
50
+ result.append("\033\\")
51
+ result.append("\033_G")
52
+ result.append("m=1;")
53
+ del result[-2:]
54
+ result[-3] = "m=0;"
55
+ return "".join(result)
56
+
57
+
58
+ def kitty_png_render(png: Union[bytes, str], _md_dict: object) -> None:
59
+ if isinstance(png, str):
60
+ png = png_to_kitty_ansi(b64decode(png))
61
+ else:
62
+ png = png_to_kitty_ansi(png)
63
+ print(png)
64
+
65
+
66
+ display_formatter_default_active_types = [
67
+ "text/plain",
68
+ *(["image/png"] if supports_kitty_graphics else []),
69
+ ]
70
+
71
+ terminal_default_mime_renderers = {
72
+ "image/png": kitty_png_render,
73
+ }
@@ -346,9 +346,19 @@ Currently the magic system has the following functions:""",
346
346
 
347
347
  Valid modes: Plain, Context, Verbose, Minimal, and Docs.
348
348
 
349
- If called without arguments, acts as a toggle.
350
-
351
- When in verbose mode the value `--show` (and `--hide`)
349
+ - ``Plain``: similar to Python's default traceback.
350
+ - ``Context``: shows several lines of surrounding context for each
351
+ frame in the traceback.
352
+ - ``Verbose``: like Context, but also displays local variable values
353
+ in each frame.
354
+ - ``Minimal``: shows only the exception type and message, without
355
+ a traceback.
356
+ - ``Docs``: a stripped-down version of Verbose, designed for use
357
+ when running doctests.
358
+
359
+ If called without arguments, cycles through the available modes.
360
+
361
+ When in verbose mode the value ``--show`` (and ``--hide``)
352
362
  will respectively show (or hide) frames with ``__tracebackhide__ =
353
363
  True`` value set.
354
364
  """
@@ -16,7 +16,7 @@
16
16
  # release. 'dev' as a _version_extra string means this is a development
17
17
  # version
18
18
  _version_major = 9
19
- _version_minor = 11
19
+ _version_minor = 13
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "b2"
@@ -203,7 +203,7 @@ def _tokens_filename(
203
203
  ]
204
204
  else:
205
205
  name = util_path.compress_user(
206
- py3compat.cast_unicode(file, util_path.fs_encoding)
206
+ py3compat.cast_unicode(file or "", util_path.fs_encoding)
207
207
  )
208
208
  if lineno is None:
209
209
  return [
@@ -1,5 +1,6 @@
1
1
  from datetime import datetime
2
2
  import os
3
+ import sys
3
4
  from random import choice
4
5
  from typing import Any
5
6
 
@@ -107,6 +108,11 @@ else:
107
108
  ]
108
109
  )
109
110
 
111
+ if sys.version_info < (3, 12):
112
+ _tips["random"].append(
113
+ "IPython support for Python versions outside of SPEC-0 is funded by the D.E. Shaw group: https://deshaw.com"
114
+ )
115
+
110
116
  # Check if argcomplete is installed and add tip
111
117
  try:
112
118
  import argcomplete
@@ -539,8 +539,13 @@ class VerboseTB(TBTools):
539
539
 
540
540
  assert isinstance(frame_info.lineno, int)
541
541
  args, varargs, varkw, locals_ = inspect.getargvalues(frame_info.frame)
542
+ func: str
542
543
  if frame_info.executing is not None:
543
544
  func = frame_info.executing.code_qualname()
545
+ elif frame_info.code is not None:
546
+ func = (
547
+ getattr(frame_info.code, "co_qualname", None) or frame_info.code.co_name
548
+ )
544
549
  else:
545
550
  func = "?"
546
551
  if func == "<module>":
@@ -609,12 +614,14 @@ class VerboseTB(TBTools):
609
614
  if frame_info._sd is None:
610
615
  # fast fallback if file is too long
611
616
  assert frame_info.filename is not None
612
- level_tokens = [
613
- (Token.FilenameEm, util_path.compress_user(frame_info.filename)),
614
- (Token, " "),
615
- (Token, call),
616
- (Token, "\n"),
617
- ]
617
+ level_tokens = (
618
+ _tokens_filename(True, frame_info.filename, lineno=frame_info.lineno)
619
+ + [
620
+ (Token, ", " if call else ""),
621
+ (Token, call),
622
+ (Token, "\n"),
623
+ ]
624
+ )
618
625
 
619
626
  _line_format = Parser(theme_name=self._theme_name).format2
620
627
  assert isinstance(frame_info.code, types.CodeType)
@@ -810,8 +817,10 @@ class VerboseTB(TBTools):
810
817
  after = context // 2
811
818
  before = context - after
812
819
  if self.has_colors:
813
- base_style = theme_table[self._theme_name].as_pygments_style()
814
- style = stack_data.style_with_executing_node(base_style, self.tb_highlight)
820
+ theme = theme_table[self._theme_name]
821
+ base_style = theme.as_pygments_style()
822
+ tb_highlight = theme.extra_style.get(Token.TbHighlight, self.tb_highlight)
823
+ style = stack_data.style_with_executing_node(base_style, tb_highlight)
815
824
  formatter = Terminal256Formatter(style=style)
816
825
  else:
817
826
  formatter = None
@@ -821,10 +830,9 @@ class VerboseTB(TBTools):
821
830
  pygments_formatter=formatter,
822
831
  )
823
832
 
824
- # Let's estimate the amount of code we will have to parse/highlight.
833
+ # Collect traceback frames and their module sizes.
825
834
  cf: Optional[TracebackType] = etb
826
- max_len = 0
827
- tbs = []
835
+ tbs: list[tuple[TracebackType, int]] = []
828
836
  while cf is not None:
829
837
  try:
830
838
  mod = inspect.getmodule(cf.tb_frame)
@@ -834,31 +842,58 @@ class VerboseTB(TBTools):
834
842
  if root_name == "IPython":
835
843
  cf = cf.tb_next
836
844
  continue
837
- max_len = get_line_number_of_frame(cf.tb_frame)
838
-
845
+ frame_len = get_line_number_of_frame(cf.tb_frame)
846
+ if frame_len == 0:
847
+ # File not found or not a .py file (e.g. <string> from
848
+ # exec()). Check if source is actually available; if not,
849
+ # force the fast path so that FrameInfo's "Could not get
850
+ # source" fallback is rendered.
851
+ try:
852
+ inspect.getsourcelines(cf.tb_frame)
853
+ except OSError:
854
+ frame_len = FAST_THRESHOLD + 1
839
855
  except OSError:
840
- max_len = 0
841
- max_len = max(max_len, max_len)
842
- tbs.append(cf)
843
- cf = getattr(cf, "tb_next", None)
844
-
845
- if max_len > FAST_THRESHOLD:
846
- FIs: list[FrameInfo] = []
847
- for tb in tbs:
856
+ frame_len = FAST_THRESHOLD + 1
857
+ assert cf is not None # narrowing for mypy; guarded by while condition
858
+ tbs.append((cf, frame_len))
859
+ cf = cf.tb_next
860
+
861
+ # Group consecutive frames by fast/slow and process each group.
862
+ # Consecutive slow frames must be processed together so that
863
+ # stack_data can detect RepeatedFrames (recursion collapsing).
864
+ FIs: list[FrameInfo] = []
865
+ i = 0
866
+ while i < len(tbs):
867
+ tb, frame_len = tbs[i]
868
+ if frame_len > FAST_THRESHOLD:
848
869
  frame = tb.tb_frame # type: ignore[union-attr]
849
870
  lineno = frame.f_lineno
850
871
  code = frame.f_code
851
872
  filename = code.co_filename
852
- # TODO: Here we need to use before/after/
853
873
  FIs.append(
854
874
  FrameInfo(
855
875
  "Raw frame", filename, lineno, frame, code, context=context
856
876
  )
857
877
  )
858
- return FIs
859
- res = list(stack_data.FrameInfo.stack_data(etb, options=options))[tb_offset:]
860
- res2 = [FrameInfo._from_stack_data_FrameInfo(r) for r in res]
861
- return res2
878
+ i += 1
879
+ else:
880
+ # Collect the consecutive run of slow frames
881
+ group_start = i
882
+ while i < len(tbs) and tbs[i][1] <= FAST_THRESHOLD:
883
+ i += 1
884
+ # Build set of frame objects in this group for filtering
885
+ group_frames = {tbs[j][0].tb_frame for j in range(group_start, i)}
886
+ # Process via stack_data starting from the first tb in the group
887
+ for sd_fi in stack_data.FrameInfo.stack_data(
888
+ tbs[group_start][0], options=options
889
+ ):
890
+ # stack_data follows tb_next through the full chain,
891
+ # including IPython frames we skipped during collection.
892
+ # Filter those out, but always keep RepeatedFrames.
893
+ if isinstance(sd_fi, stack_data.RepeatedFrames) or sd_fi.frame in group_frames:
894
+ FIs.append(FrameInfo._from_stack_data_FrameInfo(sd_fi))
895
+
896
+ return FIs
862
897
 
863
898
  def structured_traceback(
864
899
  self,
@@ -961,7 +996,11 @@ class VerboseTB(TBTools):
961
996
  self.pdb.botframe = etb.tb_frame
962
997
  # last_value should be deprecated, but last-exc sometimme not set
963
998
  # please check why later and remove the getattr.
964
- exc = getattr(sys, "last_exc", sys.last_value)
999
+ exc = (
1000
+ sys.last_value
1001
+ if sys.version_info < (3, 12)
1002
+ else getattr(sys, "last_exc", sys.last_value)
1003
+ ) # type: ignore[attr-defined]
965
1004
  if exc:
966
1005
  self.pdb.interaction(None, exc)
967
1006
  else:
@@ -8,6 +8,10 @@ from typing import Union as UnionType, Optional
8
8
 
9
9
  from IPython.core.async_helpers import get_asyncio_loop
10
10
  from IPython.core.interactiveshell import InteractiveShell, InteractiveShellABC
11
+ from IPython.core.kitty import (
12
+ display_formatter_default_active_types,
13
+ terminal_default_mime_renderers,
14
+ )
11
15
  from IPython.utils.py3compat import input
12
16
  from IPython.utils.PyColorize import theme_table
13
17
  from IPython.utils.terminal import toggle_set_term_title, set_term_title, restore_term_title
@@ -771,7 +775,12 @@ class TerminalInteractiveShell(InteractiveShell):
771
775
  "DisplayFormatter" in config
772
776
  and "active_types" in config["DisplayFormatter"]
773
777
  ):
774
- self.display_formatter.active_types = ["text/plain"]
778
+ self.display_formatter.active_types = display_formatter_default_active_types
779
+ if not (
780
+ "TerminalInteractiveShell" in config
781
+ and "mime_renderers" in config["TerminalInteractiveShell"]
782
+ ):
783
+ self.mime_renderers = terminal_default_mime_renderers
775
784
 
776
785
  def init_prompt_toolkit_cli(self):
777
786
  if self.simple_prompt:
@@ -1,6 +1,6 @@
1
1
  """Terminal input and output prompts."""
2
2
 
3
- from pygments.token import Token
3
+ from pygments.token import _TokenType, Token
4
4
  import sys
5
5
 
6
6
  from IPython.core.displayhook import DisplayHook
@@ -8,10 +8,14 @@ from IPython.core.displayhook import DisplayHook
8
8
  from prompt_toolkit.formatted_text import fragment_list_width, PygmentsTokens
9
9
  from prompt_toolkit.shortcuts import print_formatted_text
10
10
  from prompt_toolkit.enums import EditingMode
11
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
12
+
13
+ if TYPE_CHECKING:
14
+ from IPython.terminal.interactiveshell import TerminalInteractiveShell
11
15
 
12
16
 
13
17
  class Prompts:
14
- def __init__(self, shell):
18
+ def __init__(self, shell: "TerminalInteractiveShell"):
15
19
  self.shell = shell
16
20
 
17
21
  def vi_mode(self):
@@ -84,7 +88,7 @@ class Prompts:
84
88
  (Token.Prompt, ('-' * (width - 2)) + '> '),
85
89
  ]
86
90
 
87
- def out_prompt_tokens(self):
91
+ def out_prompt_tokens(self) -> List[Tuple[_TokenType, str]]:
88
92
  return [
89
93
  (Token.OutPrompt, 'Out['),
90
94
  (Token.OutPromptNum, str(self.shell.execution_count - 1)),
@@ -128,7 +132,7 @@ class RichPromptDisplayHook(DisplayHook):
128
132
  else:
129
133
  sys.stdout.write(prompt_txt)
130
134
 
131
- def write_format_data(self, format_dict, md_dict=None) -> None:
135
+ def write_format_data(self, format_dict: Dict[str, str], md_dict: Optional[Dict[Any, Any]]=None) -> None:
132
136
  assert self.shell is not None
133
137
  if self.shell.mime_renderers:
134
138