ipython 9.0.1__tar.gz → 9.1.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.0.1 → ipython-9.1.0}/IPython/core/completer.py +155 -3
  2. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/display_trap.py +4 -0
  3. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/displayhook.py +17 -7
  4. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/displaypub.py +14 -0
  5. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/history.py +18 -1
  6. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/historyapp.py +3 -3
  7. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/inputtransformer2.py +3 -9
  8. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/interactiveshell.py +141 -20
  9. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/basic.py +42 -9
  10. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/execution.py +18 -10
  11. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/oinspect.py +7 -1
  12. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/release.py +2 -2
  13. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/tbtools.py +7 -1
  14. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/tips.py +14 -14
  15. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/embed.py +2 -1
  16. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/interactiveshell.py +2 -3
  17. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/qt.py +3 -1
  18. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/shortcuts/__init__.py +1 -1
  19. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/shortcuts/auto_suggest.py +16 -15
  20. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/PyColorize.py +10 -4
  21. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/_sysinfo.py +1 -1
  22. {ipython-9.0.1/ipython.egg-info → ipython-9.1.0}/PKG-INFO +7 -3
  23. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/intro.rst +3 -3
  24. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version9.rst +64 -2
  25. {ipython-9.0.1 → ipython-9.1.0}/examples/Embedding/start_ipython_config.py +1 -1
  26. {ipython-9.0.1 → ipython-9.1.0}/examples/auto_suggest_llm.py +2 -4
  27. {ipython-9.0.1 → ipython-9.1.0/ipython.egg-info}/PKG-INFO +7 -3
  28. {ipython-9.0.1 → ipython-9.1.0}/ipython.egg-info/SOURCES.txt +1 -0
  29. {ipython-9.0.1 → ipython-9.1.0}/ipython.egg-info/requires.txt +3 -0
  30. {ipython-9.0.1 → ipython-9.1.0}/pyproject.toml +15 -2
  31. ipython-9.1.0/tests/fake_llm.py +89 -0
  32. {ipython-9.0.1 → ipython-9.1.0}/tests/test_completer.py +119 -1
  33. {ipython-9.0.1 → ipython-9.1.0}/tests/test_inputtransformer2_line.py +25 -6
  34. {ipython-9.0.1 → ipython-9.1.0}/tests/test_magic.py +74 -3
  35. {ipython-9.0.1 → ipython-9.1.0}/tests/test_shortcuts.py +24 -0
  36. {ipython-9.0.1 → ipython-9.1.0}/.flake8 +0 -0
  37. {ipython-9.0.1 → ipython-9.1.0}/.mailmap +0 -0
  38. {ipython-9.0.1 → ipython-9.1.0}/.pre-commit-config.yaml +0 -0
  39. {ipython-9.0.1 → ipython-9.1.0}/COPYING.rst +0 -0
  40. {ipython-9.0.1 → ipython-9.1.0}/IPython/__init__.py +0 -0
  41. {ipython-9.0.1 → ipython-9.1.0}/IPython/__main__.py +0 -0
  42. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/__init__.py +0 -0
  43. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/alias.py +0 -0
  44. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/application.py +0 -0
  45. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/async_helpers.py +0 -0
  46. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/autocall.py +0 -0
  47. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/builtin_trap.py +0 -0
  48. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/compilerop.py +0 -0
  49. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/completerlib.py +0 -0
  50. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/crashhandler.py +0 -0
  51. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/debugger.py +0 -0
  52. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/display.py +0 -0
  53. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/display_functions.py +0 -0
  54. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/doctb.py +0 -0
  55. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/error.py +0 -0
  56. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/events.py +0 -0
  57. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/extensions.py +0 -0
  58. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/formatters.py +0 -0
  59. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/getipython.py +0 -0
  60. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/guarded_eval.py +0 -0
  61. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/hooks.py +0 -0
  62. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/latex_symbols.py +0 -0
  63. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/logger.py +0 -0
  64. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/macro.py +0 -0
  65. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magic.py +0 -0
  66. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magic_arguments.py +0 -0
  67. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/__init__.py +0 -0
  68. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/ast_mod.py +0 -0
  69. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/auto.py +0 -0
  70. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/code.py +0 -0
  71. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/config.py +0 -0
  72. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/display.py +0 -0
  73. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/extension.py +0 -0
  74. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/history.py +0 -0
  75. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/logging.py +0 -0
  76. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/namespace.py +0 -0
  77. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/osm.py +0 -0
  78. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/packaging.py +0 -0
  79. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/pylab.py +0 -0
  80. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/magics/script.py +0 -0
  81. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/page.py +0 -0
  82. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/payload.py +0 -0
  83. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/payloadpage.py +0 -0
  84. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/prefilter.py +0 -0
  85. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/profile/README_STARTUP +0 -0
  86. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/profileapp.py +0 -0
  87. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/profiledir.py +0 -0
  88. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/pylabtools.py +0 -0
  89. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/shellapp.py +0 -0
  90. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/splitinput.py +0 -0
  91. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/ultratb.py +0 -0
  92. {ipython-9.0.1 → ipython-9.1.0}/IPython/core/usage.py +0 -0
  93. {ipython-9.0.1 → ipython-9.1.0}/IPython/display.py +0 -0
  94. {ipython-9.0.1 → ipython-9.1.0}/IPython/extensions/__init__.py +0 -0
  95. {ipython-9.0.1 → ipython-9.1.0}/IPython/extensions/autoreload.py +0 -0
  96. {ipython-9.0.1 → ipython-9.1.0}/IPython/extensions/deduperreload/__init__.py +0 -0
  97. {ipython-9.0.1 → ipython-9.1.0}/IPython/extensions/deduperreload/deduperreload.py +0 -0
  98. {ipython-9.0.1 → ipython-9.1.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
  99. {ipython-9.0.1 → ipython-9.1.0}/IPython/extensions/storemagic.py +0 -0
  100. {ipython-9.0.1 → ipython-9.1.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
  101. {ipython-9.0.1 → ipython-9.1.0}/IPython/external/__init__.py +0 -0
  102. {ipython-9.0.1 → ipython-9.1.0}/IPython/external/pickleshare.py +0 -0
  103. {ipython-9.0.1 → ipython-9.1.0}/IPython/external/qt_for_kernel.py +0 -0
  104. {ipython-9.0.1 → ipython-9.1.0}/IPython/external/qt_loaders.py +0 -0
  105. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/__init__.py +0 -0
  106. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/backgroundjobs.py +0 -0
  107. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/clipboard.py +0 -0
  108. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/deepreload.py +0 -0
  109. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/demo.py +0 -0
  110. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/display.py +0 -0
  111. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/editorhooks.py +0 -0
  112. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/guisupport.py +0 -0
  113. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/latextools.py +0 -0
  114. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/lexers.py +0 -0
  115. {ipython-9.0.1 → ipython-9.1.0}/IPython/lib/pretty.py +0 -0
  116. {ipython-9.0.1 → ipython-9.1.0}/IPython/paths.py +0 -0
  117. {ipython-9.0.1 → ipython-9.1.0}/IPython/py.typed +0 -0
  118. {ipython-9.0.1 → ipython-9.1.0}/IPython/sphinxext/__init__.py +0 -0
  119. {ipython-9.0.1 → ipython-9.1.0}/IPython/sphinxext/custom_doctests.py +0 -0
  120. {ipython-9.0.1 → ipython-9.1.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  121. {ipython-9.0.1 → ipython-9.1.0}/IPython/sphinxext/ipython_directive.py +0 -0
  122. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/__init__.py +0 -0
  123. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/debugger.py +0 -0
  124. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/ipapp.py +0 -0
  125. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/magics.py +0 -0
  126. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/prompts.py +0 -0
  127. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  128. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  129. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  130. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  131. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  132. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  133. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  134. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  135. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  136. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  137. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/ptutils.py +0 -0
  138. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  139. {ipython-9.0.1 → ipython-9.1.0}/IPython/terminal/shortcuts/filters.py +0 -0
  140. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/__init__.py +0 -0
  141. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/decorators.py +0 -0
  142. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/globalipapp.py +0 -0
  143. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/ipunittest.py +0 -0
  144. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/Makefile +0 -0
  145. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/__init__.py +0 -0
  146. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/dtexample.py +0 -0
  147. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  148. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  149. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/setup.py +0 -0
  150. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/simple.py +0 -0
  151. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/simplevars.py +0 -0
  152. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/test_combo.txt +0 -0
  153. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/test_example.txt +0 -0
  154. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  155. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  156. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/plugin/test_refs.py +0 -0
  157. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/skipdoctest.py +0 -0
  158. {ipython-9.0.1 → ipython-9.1.0}/IPython/testing/tools.py +0 -0
  159. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/__init__.py +0 -0
  160. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/_process_cli.py +0 -0
  161. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/_process_common.py +0 -0
  162. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/_process_emscripten.py +0 -0
  163. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/_process_posix.py +0 -0
  164. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/_process_win32.py +0 -0
  165. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/_process_win32_controller.py +0 -0
  166. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/capture.py +0 -0
  167. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/coloransi.py +0 -0
  168. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/contexts.py +0 -0
  169. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/data.py +0 -0
  170. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/decorators.py +0 -0
  171. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/dir2.py +0 -0
  172. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/docs.py +0 -0
  173. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/encoding.py +0 -0
  174. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/eventful.py +0 -0
  175. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/frame.py +0 -0
  176. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/generics.py +0 -0
  177. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/importstring.py +0 -0
  178. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/io.py +0 -0
  179. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/ipstruct.py +0 -0
  180. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/jsonutil.py +0 -0
  181. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/log.py +0 -0
  182. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/module_paths.py +0 -0
  183. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/openpy.py +0 -0
  184. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/path.py +0 -0
  185. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/process.py +0 -0
  186. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/py3compat.py +0 -0
  187. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/sentinel.py +0 -0
  188. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/strdispatch.py +0 -0
  189. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/sysinfo.py +0 -0
  190. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/syspathcontext.py +0 -0
  191. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/tempdir.py +0 -0
  192. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/terminal.py +0 -0
  193. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/text.py +0 -0
  194. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/timing.py +0 -0
  195. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/tokenutil.py +0 -0
  196. {ipython-9.0.1 → ipython-9.1.0}/IPython/utils/wildcard.py +0 -0
  197. {ipython-9.0.1 → ipython-9.1.0}/LICENSE +0 -0
  198. {ipython-9.0.1 → ipython-9.1.0}/MANIFEST.in +0 -0
  199. {ipython-9.0.1 → ipython-9.1.0}/README.rst +0 -0
  200. {ipython-9.0.1 → ipython-9.1.0}/_build_meta.py +0 -0
  201. {ipython-9.0.1 → ipython-9.1.0}/docs/Makefile +0 -0
  202. {ipython-9.0.1 → ipython-9.1.0}/docs/README.rst +0 -0
  203. {ipython-9.0.1 → ipython-9.1.0}/docs/autogen_api.py +0 -0
  204. {ipython-9.0.1 → ipython-9.1.0}/docs/autogen_config.py +0 -0
  205. {ipython-9.0.1 → ipython-9.1.0}/docs/autogen_magics.py +0 -0
  206. {ipython-9.0.1 → ipython-9.1.0}/docs/autogen_shortcuts.py +0 -0
  207. {ipython-9.0.1 → ipython-9.1.0}/docs/make.cmd +0 -0
  208. {ipython-9.0.1 → ipython-9.1.0}/docs/man/ipython.1 +0 -0
  209. {ipython-9.0.1 → ipython-9.1.0}/docs/requirements.txt +0 -0
  210. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/2.0/running-crop.png +0 -0
  211. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/2.0/running.png +0 -0
  212. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/2.0/treeview.png +0 -0
  213. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/2.0/user-interface.png +0 -0
  214. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/2.0/widgets.png +0 -0
  215. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  216. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  217. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  218. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  219. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  220. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  221. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  222. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  223. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  224. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  225. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  226. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/autosuggest.gif +0 -0
  227. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  228. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  229. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  230. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  231. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  232. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  233. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  234. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  235. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  236. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  237. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  238. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  239. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  240. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  241. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  242. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ms_visual_studio.png +0 -0
  243. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/notebook_specgram.png +0 -0
  244. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/ptshell_features.png +0 -0
  245. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/qtconsole.png +0 -0
  246. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  247. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_images/unicode_completion.png +0 -0
  248. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_static/favicon.ico +0 -0
  249. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_static/logo.png +0 -0
  250. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_static/theme_overrides.css +0 -0
  251. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_templates/breadcrumbs.html +0 -0
  252. {ipython-9.0.1 → ipython-9.1.0}/docs/source/_templates/notebook_redirect.html +0 -0
  253. {ipython-9.0.1 → ipython-9.1.0}/docs/source/about/history.rst +0 -0
  254. {ipython-9.0.1 → ipython-9.1.0}/docs/source/about/index.rst +0 -0
  255. {ipython-9.0.1 → ipython-9.1.0}/docs/source/about/license_and_copyright.rst +0 -0
  256. {ipython-9.0.1 → ipython-9.1.0}/docs/source/api/index.rst +0 -0
  257. {ipython-9.0.1 → ipython-9.1.0}/docs/source/conf.py +0 -0
  258. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/callbacks.rst +0 -0
  259. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/custommagics.rst +0 -0
  260. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/details.rst +0 -0
  261. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/eventloops.rst +0 -0
  262. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/extensions/autoreload.rst +0 -0
  263. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/extensions/index.rst +0 -0
  264. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/extensions/storemagic.rst +0 -0
  265. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/index.rst +0 -0
  266. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/inputtransforms.rst +0 -0
  267. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/integrating.rst +0 -0
  268. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/options/index.rst +0 -0
  269. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  270. {ipython-9.0.1 → ipython-9.1.0}/docs/source/config/shortcuts/index.rst +0 -0
  271. {ipython-9.0.1 → ipython-9.1.0}/docs/source/coredev/index.rst +0 -0
  272. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/config.rst +0 -0
  273. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/execution.rst +0 -0
  274. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  275. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  276. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/figs/other_kernels.png +0 -0
  277. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/figs/other_kernels.svg +0 -0
  278. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/how_ipython_works.rst +0 -0
  279. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/index.rst +0 -0
  280. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/inputhook_app.rst +0 -0
  281. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/kernels.rst +0 -0
  282. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/messaging.rst +0 -0
  283. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/pycompat.rst +0 -0
  284. {ipython-9.0.1 → ipython-9.1.0}/docs/source/development/wrapperkernels.rst +0 -0
  285. {ipython-9.0.1 → ipython-9.1.0}/docs/source/index.rst +0 -0
  286. {ipython-9.0.1 → ipython-9.1.0}/docs/source/install/index.rst +0 -0
  287. {ipython-9.0.1 → ipython-9.1.0}/docs/source/install/install.rst +0 -0
  288. {ipython-9.0.1 → ipython-9.1.0}/docs/source/install/kernel_install.rst +0 -0
  289. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/autoawait.rst +0 -0
  290. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/index.rst +0 -0
  291. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/magics.rst +0 -0
  292. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/plotting.rst +0 -0
  293. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  294. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/reference.rst +0 -0
  295. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/shell.rst +0 -0
  296. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/tips.rst +0 -0
  297. {ipython-9.0.1 → ipython-9.1.0}/docs/source/interactive/tutorial.rst +0 -0
  298. {ipython-9.0.1 → ipython-9.1.0}/docs/source/links.txt +0 -0
  299. {ipython-9.0.1 → ipython-9.1.0}/docs/source/overview.rst +0 -0
  300. {ipython-9.0.1 → ipython-9.1.0}/docs/source/parallel/index.rst +0 -0
  301. {ipython-9.0.1 → ipython-9.1.0}/docs/source/sphinx.toml +0 -0
  302. {ipython-9.0.1 → ipython-9.1.0}/docs/source/sphinxext.rst +0 -0
  303. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/development.rst +0 -0
  304. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  305. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  306. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  307. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  308. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  309. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  310. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  311. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  312. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  313. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  314. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  315. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/index.rst +0 -0
  316. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/pr/README.md +0 -0
  317. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  318. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  319. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version0.10.rst +0 -0
  320. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version0.11.rst +0 -0
  321. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version0.12.rst +0 -0
  322. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version0.13.rst +0 -0
  323. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version0.8.rst +0 -0
  324. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version0.9.rst +0 -0
  325. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version1.0.rst +0 -0
  326. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version2.0.rst +0 -0
  327. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version3.rst +0 -0
  328. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  329. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version4.rst +0 -0
  330. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version5.rst +0 -0
  331. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version6.rst +0 -0
  332. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version7.rst +0 -0
  333. {ipython-9.0.1 → ipython-9.1.0}/docs/source/whatsnew/version8.rst +0 -0
  334. {ipython-9.0.1 → ipython-9.1.0}/docs/sphinxext/apigen.py +0 -0
  335. {ipython-9.0.1 → ipython-9.1.0}/docs/sphinxext/configtraits.py +0 -0
  336. {ipython-9.0.1 → ipython-9.1.0}/docs/sphinxext/github.py +0 -0
  337. {ipython-9.0.1 → ipython-9.1.0}/docs/sphinxext/magics.py +0 -0
  338. {ipython-9.0.1 → ipython-9.1.0}/examples/Embedding/embed_class_long.py +0 -0
  339. {ipython-9.0.1 → ipython-9.1.0}/examples/Embedding/embed_class_short.py +0 -0
  340. {ipython-9.0.1 → ipython-9.1.0}/examples/Embedding/embed_function.py +0 -0
  341. {ipython-9.0.1 → ipython-9.1.0}/examples/IPython Kernel/example-demo.py +0 -0
  342. {ipython-9.0.1 → ipython-9.1.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  343. {ipython-9.0.1 → ipython-9.1.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  344. {ipython-9.0.1 → ipython-9.1.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  345. {ipython-9.0.1 → ipython-9.1.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  346. {ipython-9.0.1 → ipython-9.1.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  347. {ipython-9.0.1 → ipython-9.1.0}/examples/IPython Kernel/ipython.desktop +0 -0
  348. {ipython-9.0.1 → ipython-9.1.0}/examples/utils/cwd_prompt.py +0 -0
  349. {ipython-9.0.1 → ipython-9.1.0}/examples/utils/list_pyfiles.ipy +0 -0
  350. {ipython-9.0.1 → ipython-9.1.0}/examples/utils/list_subdirs.ipy +0 -0
  351. {ipython-9.0.1 → ipython-9.1.0}/ipython.egg-info/dependency_links.txt +0 -0
  352. {ipython-9.0.1 → ipython-9.1.0}/ipython.egg-info/entry_points.txt +0 -0
  353. {ipython-9.0.1 → ipython-9.1.0}/ipython.egg-info/not-zip-safe +0 -0
  354. {ipython-9.0.1 → ipython-9.1.0}/ipython.egg-info/top_level.txt +0 -0
  355. {ipython-9.0.1 → ipython-9.1.0}/long_description.rst +0 -0
  356. {ipython-9.0.1 → ipython-9.1.0}/scripts/ipython.ico +0 -0
  357. {ipython-9.0.1 → ipython-9.1.0}/scripts/ipython_nb.ico +0 -0
  358. {ipython-9.0.1 → ipython-9.1.0}/setup.cfg +0 -0
  359. {ipython-9.0.1 → ipython-9.1.0}/setup.py +0 -0
  360. {ipython-9.0.1 → ipython-9.1.0}/setupbase.py +0 -0
  361. {ipython-9.0.1 → ipython-9.1.0}/tests/2x2.jpg +0 -0
  362. {ipython-9.0.1 → ipython-9.1.0}/tests/2x2.png +0 -0
  363. {ipython-9.0.1 → ipython-9.1.0}/tests/__init__.py +0 -0
  364. {ipython-9.0.1 → ipython-9.1.0}/tests/bad_all.py +0 -0
  365. {ipython-9.0.1 → ipython-9.1.0}/tests/conftest.py +0 -0
  366. {ipython-9.0.1 → ipython-9.1.0}/tests/cve.py +0 -0
  367. {ipython-9.0.1 → ipython-9.1.0}/tests/fake_ext_dir/daft_extension.py +0 -0
  368. {ipython-9.0.1 → ipython-9.1.0}/tests/nonascii.py +0 -0
  369. {ipython-9.0.1 → ipython-9.1.0}/tests/nonascii2.py +0 -0
  370. {ipython-9.0.1 → ipython-9.1.0}/tests/print_argv.py +0 -0
  371. {ipython-9.0.1 → ipython-9.1.0}/tests/refbug.py +0 -0
  372. {ipython-9.0.1 → ipython-9.1.0}/tests/simpleerr.py +0 -0
  373. {ipython-9.0.1 → ipython-9.1.0}/tests/tclass.py +0 -0
  374. {ipython-9.0.1 → ipython-9.1.0}/tests/test.wav +0 -0
  375. {ipython-9.0.1 → ipython-9.1.0}/tests/test_alias.py +0 -0
  376. {ipython-9.0.1 → ipython-9.1.0}/tests/test_application.py +0 -0
  377. {ipython-9.0.1 → ipython-9.1.0}/tests/test_async_helpers.py +0 -0
  378. {ipython-9.0.1 → ipython-9.1.0}/tests/test_autocall.py +0 -0
  379. {ipython-9.0.1 → ipython-9.1.0}/tests/test_backgroundjobs.py +0 -0
  380. {ipython-9.0.1 → ipython-9.1.0}/tests/test_capture.py +0 -0
  381. {ipython-9.0.1 → ipython-9.1.0}/tests/test_clipboard.py +0 -0
  382. {ipython-9.0.1 → ipython-9.1.0}/tests/test_compilerop.py +0 -0
  383. {ipython-9.0.1 → ipython-9.1.0}/tests/test_completerlib.py +0 -0
  384. {ipython-9.0.1 → ipython-9.1.0}/tests/test_debug_magic.py +0 -0
  385. {ipython-9.0.1 → ipython-9.1.0}/tests/test_debugger.py +0 -0
  386. {ipython-9.0.1 → ipython-9.1.0}/tests/test_decorators.py +0 -0
  387. {ipython-9.0.1 → ipython-9.1.0}/tests/test_decorators_2.py +0 -0
  388. {ipython-9.0.1 → ipython-9.1.0}/tests/test_deepreload.py +0 -0
  389. {ipython-9.0.1 → ipython-9.1.0}/tests/test_dir2.py +0 -0
  390. {ipython-9.0.1 → ipython-9.1.0}/tests/test_display.py +0 -0
  391. {ipython-9.0.1 → ipython-9.1.0}/tests/test_display_2.py +0 -0
  392. {ipython-9.0.1 → ipython-9.1.0}/tests/test_displayhook.py +0 -0
  393. {ipython-9.0.1 → ipython-9.1.0}/tests/test_editorhooks.py +0 -0
  394. {ipython-9.0.1 → ipython-9.1.0}/tests/test_embed.py +0 -0
  395. {ipython-9.0.1 → ipython-9.1.0}/tests/test_events.py +0 -0
  396. {ipython-9.0.1 → ipython-9.1.0}/tests/test_exceptiongroup_tb.py +0 -0
  397. {ipython-9.0.1 → ipython-9.1.0}/tests/test_extension.py +0 -0
  398. {ipython-9.0.1 → ipython-9.1.0}/tests/test_formatters.py +0 -0
  399. {ipython-9.0.1 → ipython-9.1.0}/tests/test_guarded_eval.py +0 -0
  400. {ipython-9.0.1 → ipython-9.1.0}/tests/test_handlers.py +0 -0
  401. {ipython-9.0.1 → ipython-9.1.0}/tests/test_help.py +0 -0
  402. {ipython-9.0.1 → ipython-9.1.0}/tests/test_history.py +0 -0
  403. {ipython-9.0.1 → ipython-9.1.0}/tests/test_hooks.py +0 -0
  404. {ipython-9.0.1 → ipython-9.1.0}/tests/test_imports.py +0 -0
  405. {ipython-9.0.1 → ipython-9.1.0}/tests/test_importstring.py +0 -0
  406. {ipython-9.0.1 → ipython-9.1.0}/tests/test_inputtransformer2.py +0 -0
  407. {ipython-9.0.1 → ipython-9.1.0}/tests/test_interactiveshell.py +0 -0
  408. {ipython-9.0.1 → ipython-9.1.0}/tests/test_interactivshell.py +0 -0
  409. {ipython-9.0.1 → ipython-9.1.0}/tests/test_io.py +0 -0
  410. {ipython-9.0.1 → ipython-9.1.0}/tests/test_iplib.py +0 -0
  411. {ipython-9.0.1 → ipython-9.1.0}/tests/test_ipunittest.py +0 -0
  412. {ipython-9.0.1 → ipython-9.1.0}/tests/test_latextools.py +0 -0
  413. {ipython-9.0.1 → ipython-9.1.0}/tests/test_logger.py +0 -0
  414. {ipython-9.0.1 → ipython-9.1.0}/tests/test_magic_arguments.py +0 -0
  415. {ipython-9.0.1 → ipython-9.1.0}/tests/test_magic_terminal.py +0 -0
  416. {ipython-9.0.1 → ipython-9.1.0}/tests/test_module_paths.py +0 -0
  417. {ipython-9.0.1 → ipython-9.1.0}/tests/test_oinspect.py +0 -0
  418. {ipython-9.0.1 → ipython-9.1.0}/tests/test_openpy.py +0 -0
  419. {ipython-9.0.1 → ipython-9.1.0}/tests/test_page.py +0 -0
  420. {ipython-9.0.1 → ipython-9.1.0}/tests/test_path.py +0 -0
  421. {ipython-9.0.1 → ipython-9.1.0}/tests/test_paths.py +0 -0
  422. {ipython-9.0.1 → ipython-9.1.0}/tests/test_prefilter.py +0 -0
  423. {ipython-9.0.1 → ipython-9.1.0}/tests/test_pretty.py +0 -0
  424. {ipython-9.0.1 → ipython-9.1.0}/tests/test_process.py +0 -0
  425. {ipython-9.0.1 → ipython-9.1.0}/tests/test_profile.py +0 -0
  426. {ipython-9.0.1 → ipython-9.1.0}/tests/test_pt_inputhooks.py +0 -0
  427. {ipython-9.0.1 → ipython-9.1.0}/tests/test_pycolorize.py +0 -0
  428. {ipython-9.0.1 → ipython-9.1.0}/tests/test_pylabtools.py +0 -0
  429. {ipython-9.0.1 → ipython-9.1.0}/tests/test_qt_loaders.py +0 -0
  430. {ipython-9.0.1 → ipython-9.1.0}/tests/test_run.py +0 -0
  431. {ipython-9.0.1 → ipython-9.1.0}/tests/test_shellapp.py +0 -0
  432. {ipython-9.0.1 → ipython-9.1.0}/tests/test_splitinput.py +0 -0
  433. {ipython-9.0.1 → ipython-9.1.0}/tests/test_storemagic.py +0 -0
  434. {ipython-9.0.1 → ipython-9.1.0}/tests/test_sysinfo.py +0 -0
  435. {ipython-9.0.1 → ipython-9.1.0}/tests/test_tempdir.py +0 -0
  436. {ipython-9.0.1 → ipython-9.1.0}/tests/test_text.py +0 -0
  437. {ipython-9.0.1 → ipython-9.1.0}/tests/test_tips.py +0 -0
  438. {ipython-9.0.1 → ipython-9.1.0}/tests/test_tokenutil.py +0 -0
  439. {ipython-9.0.1 → ipython-9.1.0}/tests/test_tools.py +0 -0
  440. {ipython-9.0.1 → ipython-9.1.0}/tests/test_ultratb.py +0 -0
  441. {ipython-9.0.1 → ipython-9.1.0}/tests/test_wildcard.py +0 -0
  442. {ipython-9.0.1 → ipython-9.1.0}/tests/test_zzz_autoreload.py +0 -0
@@ -1137,7 +1137,7 @@ class Completer(Configurable):
1137
1137
  def _attr_matches(
1138
1138
  self, text: str, include_prefix: bool = True
1139
1139
  ) -> tuple[Sequence[str], str]:
1140
- m2 = self._ATTR_MATCH_RE.match(self.line_buffer)
1140
+ m2 = self._ATTR_MATCH_RE.match(text)
1141
1141
  if not m2:
1142
1142
  return [], ""
1143
1143
  expr, attr = m2.group(1, 2)
@@ -2360,11 +2360,163 @@ class IPCompleter(Completer):
2360
2360
  else:
2361
2361
  return iter([])
2362
2362
 
2363
+ class _CompletionContextType(enum.Enum):
2364
+ ATTRIBUTE = "attribute" # For attribute completion
2365
+ GLOBAL = "global" # For global completion
2366
+
2367
+ def _determine_completion_context(self, line):
2368
+ """
2369
+ Determine whether the cursor is in an attribute or global completion context.
2370
+ """
2371
+ # Cursor in string/comment → GLOBAL.
2372
+ is_string, is_in_expression = self._is_in_string_or_comment(line)
2373
+ if is_string and not is_in_expression:
2374
+ return self._CompletionContextType.GLOBAL
2375
+
2376
+ # If we're in a template string expression, handle specially
2377
+ if is_string and is_in_expression:
2378
+ # Extract the expression part - look for the last { that isn't closed
2379
+ expr_start = line.rfind("{")
2380
+ if expr_start >= 0:
2381
+ # We're looking at the expression inside a template string
2382
+ expr = line[expr_start + 1 :]
2383
+ # Recursively determine the context of the expression
2384
+ return self._determine_completion_context(expr)
2385
+
2386
+ # Handle plain number literals - should be global context
2387
+ # Ex: 3. -42.14 but not 3.1.
2388
+ if re.search(r"(?<!\w)(?<!\d\.)([-+]?\d+\.(\d+)?)(?!\w)$", line):
2389
+ return self._CompletionContextType.GLOBAL
2390
+
2391
+ # Handle all other attribute matches np.ran, d[0].k, (a,b).count
2392
+ chain_match = re.search(r".*(.+\.(?:[a-zA-Z]\w*)?)$", line)
2393
+ if chain_match:
2394
+ return self._CompletionContextType.ATTRIBUTE
2395
+
2396
+ return self._CompletionContextType.GLOBAL
2397
+
2398
+ def _is_in_string_or_comment(self, text):
2399
+ """
2400
+ Determine if the cursor is inside a string or comment.
2401
+ Returns (is_string, is_in_expression) tuple:
2402
+ - is_string: True if in any kind of string
2403
+ - is_in_expression: True if inside an f-string/t-string expression
2404
+ """
2405
+ in_single_quote = False
2406
+ in_double_quote = False
2407
+ in_triple_single = False
2408
+ in_triple_double = False
2409
+ in_template_string = False # Covers both f-strings and t-strings
2410
+ in_expression = False # For expressions in f/t-strings
2411
+ expression_depth = 0 # Track nested braces in expressions
2412
+ i = 0
2413
+
2414
+ while i < len(text):
2415
+ # Check for f-string or t-string start
2416
+ if (
2417
+ i + 1 < len(text)
2418
+ and text[i] in ("f", "t")
2419
+ and (text[i + 1] == '"' or text[i + 1] == "'")
2420
+ and not (
2421
+ in_single_quote
2422
+ or in_double_quote
2423
+ or in_triple_single
2424
+ or in_triple_double
2425
+ )
2426
+ ):
2427
+ in_template_string = True
2428
+ i += 1 # Skip the 'f' or 't'
2429
+
2430
+ # Handle triple quotes
2431
+ if i + 2 < len(text):
2432
+ if (
2433
+ text[i : i + 3] == '"""'
2434
+ and not in_single_quote
2435
+ and not in_triple_single
2436
+ ):
2437
+ in_triple_double = not in_triple_double
2438
+ if not in_triple_double:
2439
+ in_template_string = False
2440
+ i += 3
2441
+ continue
2442
+ if (
2443
+ text[i : i + 3] == "'''"
2444
+ and not in_double_quote
2445
+ and not in_triple_double
2446
+ ):
2447
+ in_triple_single = not in_triple_single
2448
+ if not in_triple_single:
2449
+ in_template_string = False
2450
+ i += 3
2451
+ continue
2452
+
2453
+ # Handle escapes
2454
+ if text[i] == "\\" and i + 1 < len(text):
2455
+ i += 2
2456
+ continue
2457
+
2458
+ # Handle nested braces within f-strings
2459
+ if in_template_string:
2460
+ # Special handling for consecutive opening braces
2461
+ if i + 1 < len(text) and text[i : i + 2] == "{{":
2462
+ i += 2
2463
+ continue
2464
+
2465
+ # Detect start of an expression
2466
+ if text[i] == "{":
2467
+ # Only increment depth and mark as expression if not already in an expression
2468
+ # or if we're at a top-level nested brace
2469
+ if not in_expression or (in_expression and expression_depth == 0):
2470
+ in_expression = True
2471
+ expression_depth += 1
2472
+ i += 1
2473
+ continue
2474
+
2475
+ # Detect end of an expression
2476
+ if text[i] == "}":
2477
+ expression_depth -= 1
2478
+ if expression_depth <= 0:
2479
+ in_expression = False
2480
+ expression_depth = 0
2481
+ i += 1
2482
+ continue
2483
+
2484
+ in_triple_quote = in_triple_single or in_triple_double
2485
+
2486
+ # Handle quotes - also reset template string when closing quotes are encountered
2487
+ if text[i] == '"' and not in_single_quote and not in_triple_quote:
2488
+ in_double_quote = not in_double_quote
2489
+ if not in_double_quote and not in_triple_quote:
2490
+ in_template_string = False
2491
+ elif text[i] == "'" and not in_double_quote and not in_triple_quote:
2492
+ in_single_quote = not in_single_quote
2493
+ if not in_single_quote and not in_triple_quote:
2494
+ in_template_string = False
2495
+
2496
+ # Check for comment
2497
+ if text[i] == "#" and not (
2498
+ in_single_quote or in_double_quote or in_triple_quote
2499
+ ):
2500
+ return True, False
2501
+
2502
+ i += 1
2503
+
2504
+ is_string = (
2505
+ in_single_quote or in_double_quote or in_triple_single or in_triple_double
2506
+ )
2507
+
2508
+ # Return tuple (is_string, is_in_expression)
2509
+ return (
2510
+ is_string or (in_template_string and not in_expression),
2511
+ in_expression and expression_depth > 0,
2512
+ )
2513
+
2363
2514
  @context_matcher()
2364
2515
  def python_matcher(self, context: CompletionContext) -> SimpleMatcherResult:
2365
2516
  """Match attributes or global python names"""
2366
- text = context.line_with_cursor
2367
- if "." in text:
2517
+ text = context.text_until_cursor
2518
+ completion_type = self._determine_completion_context(text)
2519
+ if completion_type == self._CompletionContextType.ATTRIBUTE:
2368
2520
  try:
2369
2521
  matches, fragment = self._attr_matches(text, include_prefix=False)
2370
2522
  if text.endswith(".") and self.omit__names:
@@ -58,6 +58,10 @@ class DisplayTrap(Configurable):
58
58
  # Returning False will cause exceptions to propagate
59
59
  return False
60
60
 
61
+ @property
62
+ def is_active(self) -> bool:
63
+ return self._nested_level != 0
64
+
61
65
  def set(self):
62
66
  """Set the hook."""
63
67
  if sys.displayhook is not self.hook:
@@ -16,6 +16,8 @@ from traitlets.config.configurable import Configurable
16
16
  from traitlets import Instance, Float
17
17
  from warnings import warn
18
18
 
19
+ from .history import HistoryOutput
20
+
19
21
  # TODO: Move the various attributes (cache_size, [others now moved]). Some
20
22
  # of these are also attributes of InteractiveShell. They should be on ONE object
21
23
  # only and the other objects should ask that one object for their values.
@@ -35,6 +37,7 @@ class DisplayHook(Configurable):
35
37
 
36
38
  def __init__(self, shell=None, cache_size=1000, **kwargs):
37
39
  super(DisplayHook, self).__init__(shell=shell, **kwargs)
40
+ self._is_active = False
38
41
  cache_size_min = 3
39
42
  if cache_size <= 0:
40
43
  self.do_full_cache = 0
@@ -51,7 +54,7 @@ class DisplayHook(Configurable):
51
54
 
52
55
  # we need a reference to the user-level namespace
53
56
  self.shell = shell
54
-
57
+
55
58
  self._,self.__,self.___ = '','',''
56
59
 
57
60
  # these are deliberately global:
@@ -84,13 +87,13 @@ class DisplayHook(Configurable):
84
87
  def quiet(self):
85
88
  """Should we silence the display hook because of ';'?"""
86
89
  # do not print output if input ends in ';'
87
-
90
+
88
91
  try:
89
92
  cell = self.shell.history_manager.input_hist_parsed[-1]
90
93
  except IndexError:
91
94
  # some uses of ipshellembed may fail here
92
95
  return False
93
-
96
+
94
97
  return self.semicolon_at_end_of_expression(cell)
95
98
 
96
99
  @staticmethod
@@ -110,7 +113,11 @@ class DisplayHook(Configurable):
110
113
 
111
114
  def start_displayhook(self):
112
115
  """Start the displayhook, initializing resources."""
113
- pass
116
+ self._is_active = True
117
+
118
+ @property
119
+ def is_active(self):
120
+ return self._is_active
114
121
 
115
122
  def write_output_prompt(self):
116
123
  """Write the output prompt.
@@ -242,7 +249,10 @@ class DisplayHook(Configurable):
242
249
 
243
250
  def log_output(self, format_dict):
244
251
  """Log the output."""
245
- if 'text/plain' not in format_dict:
252
+ self.shell.history_manager.outputs[self.prompt_count].append(
253
+ HistoryOutput(output_type="execute_result", bundle=format_dict)
254
+ )
255
+ if "text/plain" not in format_dict:
246
256
  # nothing to do
247
257
  return
248
258
  if self.shell.logger.log_output:
@@ -254,6 +264,7 @@ class DisplayHook(Configurable):
254
264
  """Finish up all displayhook activities."""
255
265
  sys.stdout.write(self.shell.separate_out2)
256
266
  sys.stdout.flush()
267
+ self._is_active = False
257
268
 
258
269
  def __call__(self, result=None):
259
270
  """Printing with history cache management.
@@ -280,13 +291,12 @@ class DisplayHook(Configurable):
280
291
  cull_count = max(int(sz * self.cull_fraction), 2)
281
292
  warn('Output cache limit (currently {sz} entries) hit.\n'
282
293
  'Flushing oldest {cull_count} entries.'.format(sz=sz, cull_count=cull_count))
283
-
294
+
284
295
  for i, n in enumerate(sorted(oh)):
285
296
  if i >= cull_count:
286
297
  break
287
298
  self.shell.user_ns.pop('_%i' % n, None)
288
299
  oh.pop(n, None)
289
-
290
300
 
291
301
  def flush(self):
292
302
  if not self.do_full_cache:
@@ -22,6 +22,7 @@ from traitlets import List
22
22
 
23
23
  # This used to be defined here - it is imported for backwards compatibility
24
24
  from .display_functions import publish_display_data
25
+ from .history import HistoryOutput
25
26
 
26
27
  import typing as t
27
28
 
@@ -41,6 +42,7 @@ class DisplayPublisher(Configurable):
41
42
 
42
43
  def __init__(self, shell=None, *args, **kwargs):
43
44
  self.shell = shell
45
+ self._is_publishing = False
44
46
  super().__init__(*args, **kwargs)
45
47
 
46
48
  def _validate_data(self, data, metadata=None):
@@ -129,13 +131,25 @@ class DisplayPublisher(Configurable):
129
131
  if self.shell is not None:
130
132
  handlers = getattr(self.shell, "mime_renderers", {})
131
133
 
134
+ outputs = self.shell.history_manager.outputs
135
+
136
+ outputs[self.shell.execution_count].append(
137
+ HistoryOutput(output_type="display_data", bundle=data)
138
+ )
139
+
132
140
  for mime, handler in handlers.items():
133
141
  if mime in data:
134
142
  handler(data[mime], metadata.get(mime, None))
135
143
  return
136
144
 
145
+ self._is_publishing = True
137
146
  if "text/plain" in data:
138
147
  print(data["text/plain"])
148
+ self._is_publishing = False
149
+
150
+ @property
151
+ def is_publishing(self):
152
+ return self._is_publishing
139
153
 
140
154
  def clear_output(self, wait=False):
141
155
  """Clear the output of the cell receiving output."""
@@ -14,7 +14,9 @@ import re
14
14
  import threading
15
15
  from pathlib import Path
16
16
 
17
+ from collections import defaultdict
17
18
  from contextlib import contextmanager
19
+ from dataclasses import dataclass
18
20
  from decorator import decorator
19
21
  from traitlets import (
20
22
  Any,
@@ -583,6 +585,14 @@ class HistoryAccessor(HistoryAccessorBase):
583
585
  yield from self.get_range(sess, s, e, raw=raw, output=output)
584
586
 
585
587
 
588
+ @dataclass
589
+ class HistoryOutput:
590
+ output_type: typing.Literal[
591
+ "out_stream", "err_stream", "display_data", "execute_result"
592
+ ]
593
+ bundle: typing.Dict[str, str]
594
+
595
+
586
596
  class HistoryManager(HistoryAccessor):
587
597
  """A class to organize all history-related functionality in one place."""
588
598
 
@@ -610,7 +620,11 @@ class HistoryManager(HistoryAccessor):
610
620
  # execution count.
611
621
  output_hist = Dict()
612
622
  # The text/plain repr of outputs.
613
- output_hist_reprs: dict[int, str] = Dict() # type: ignore [assignment]
623
+ output_hist_reprs: typing.Dict[int, str] = Dict() # type: ignore [assignment]
624
+ # Maps execution_count to MIME bundles
625
+ outputs: typing.Dict[int, typing.List[HistoryOutput]] = defaultdict(list)
626
+ # Maps execution_count to exception tracebacks
627
+ exceptions: typing.Dict[int, typing.Dict[str, Any]] = Dict() # type: ignore [assignment]
614
628
 
615
629
  # The number of the current session in the history database
616
630
  session_number: int = Integer() # type: ignore [assignment]
@@ -749,6 +763,9 @@ class HistoryManager(HistoryAccessor):
749
763
  """Clear the session history, releasing all object references, and
750
764
  optionally open a new session."""
751
765
  self.output_hist.clear()
766
+ self.outputs.clear()
767
+ self.exceptions.clear()
768
+
752
769
  # The directory history can't be completely empty
753
770
  self.dir_hist[:] = [Path.cwd()]
754
771
 
@@ -59,9 +59,9 @@ class HistoryTrim(BaseIPythonApplication):
59
59
  print("There are already at most %d entries in the history database." % self.keep)
60
60
  print("Not doing anything. Use --keep= argument to keep fewer entries")
61
61
  return
62
-
62
+
63
63
  print("Trimming history to the most recent %d entries." % self.keep)
64
-
64
+
65
65
  inputs.pop() # Remove the extra element we got to check the length.
66
66
  inputs.reverse()
67
67
  if inputs:
@@ -71,7 +71,7 @@ class HistoryTrim(BaseIPythonApplication):
71
71
  sessions = list(con.execute('SELECT session, start, end, num_cmds, remark FROM '
72
72
  'sessions WHERE session >= ?', (first_session,)))
73
73
  con.close()
74
-
74
+
75
75
  # Create the new history database.
76
76
  new_hist_file = profile_dir / "history.sqlite.new"
77
77
  i = 0
@@ -17,6 +17,7 @@ import sys
17
17
  import tokenize
18
18
  from typing import List, Tuple, Optional, Any
19
19
  import warnings
20
+ from textwrap import dedent
20
21
 
21
22
  from IPython.utils import tokenutil
22
23
 
@@ -38,18 +39,11 @@ def leading_empty_lines(lines):
38
39
  def leading_indent(lines):
39
40
  """Remove leading indentation.
40
41
 
41
- If the first line starts with a spaces or tabs, the same whitespace will be
42
- removed from each following line in the cell.
42
+ Removes the minimum common leading indentation from all lines.
43
43
  """
44
44
  if not lines:
45
45
  return lines
46
- m = _indent_re.match(lines[0])
47
- if not m or lines[0].strip().startswith("#"):
48
- return lines
49
- space = m.group(0)
50
- n = len(space)
51
- return [l[n:] if l.startswith(space) else l
52
- for l in lines]
46
+ return dedent("".join(lines)).splitlines(keepends=True)
53
47
 
54
48
  class PromptStripper:
55
49
  """Remove matching input prompts from a block of input.