ipython 9.9.0__tar.gz → 9.10.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 (441) hide show
  1. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/history.py +30 -4
  2. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/inputtransformer2.py +92 -2
  3. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/release.py +1 -1
  4. {ipython-9.9.0 → ipython-9.10.0}/IPython/extensions/autoreload.py +4 -0
  5. {ipython-9.9.0 → ipython-9.10.0}/IPython/extensions/deduperreload/deduperreload.py +22 -6
  6. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/_sysinfo.py +1 -1
  7. {ipython-9.9.0/ipython.egg-info → ipython-9.10.0}/PKG-INFO +1 -1
  8. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version9.rst +44 -5
  9. {ipython-9.9.0 → ipython-9.10.0/ipython.egg-info}/PKG-INFO +1 -1
  10. {ipython-9.9.0 → ipython-9.10.0}/tests/test_inputtransformer2_line.py +57 -2
  11. {ipython-9.9.0 → ipython-9.10.0}/.flake8 +0 -0
  12. {ipython-9.9.0 → ipython-9.10.0}/.mailmap +0 -0
  13. {ipython-9.9.0 → ipython-9.10.0}/.pre-commit-config.yaml +0 -0
  14. {ipython-9.9.0 → ipython-9.10.0}/COPYING.rst +0 -0
  15. {ipython-9.9.0 → ipython-9.10.0}/IPython/__init__.py +0 -0
  16. {ipython-9.9.0 → ipython-9.10.0}/IPython/__main__.py +0 -0
  17. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/__init__.py +0 -0
  18. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/alias.py +0 -0
  19. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/application.py +0 -0
  20. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/async_helpers.py +0 -0
  21. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/autocall.py +0 -0
  22. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/builtin_trap.py +0 -0
  23. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/compilerop.py +0 -0
  24. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/completer.py +0 -0
  25. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/completerlib.py +0 -0
  26. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/crashhandler.py +0 -0
  27. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/debugger.py +0 -0
  28. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/debugger_backport.py +0 -0
  29. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/display.py +0 -0
  30. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/display_functions.py +0 -0
  31. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/display_trap.py +0 -0
  32. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/displayhook.py +0 -0
  33. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/displaypub.py +0 -0
  34. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/doctb.py +0 -0
  35. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/error.py +0 -0
  36. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/events.py +0 -0
  37. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/extensions.py +0 -0
  38. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/formatters.py +0 -0
  39. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/getipython.py +0 -0
  40. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/guarded_eval.py +0 -0
  41. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/historyapp.py +0 -0
  42. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/hooks.py +0 -0
  43. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/interactiveshell.py +0 -0
  44. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/latex_symbols.py +0 -0
  45. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/logger.py +0 -0
  46. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/macro.py +0 -0
  47. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magic.py +0 -0
  48. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magic_arguments.py +0 -0
  49. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/__init__.py +0 -0
  50. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/ast_mod.py +0 -0
  51. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/auto.py +0 -0
  52. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/basic.py +0 -0
  53. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/code.py +0 -0
  54. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/config.py +0 -0
  55. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/display.py +0 -0
  56. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/execution.py +0 -0
  57. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/extension.py +0 -0
  58. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/history.py +0 -0
  59. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/logging.py +0 -0
  60. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/namespace.py +0 -0
  61. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/osm.py +0 -0
  62. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/packaging.py +0 -0
  63. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/pylab.py +0 -0
  64. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/magics/script.py +0 -0
  65. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/oinspect.py +0 -0
  66. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/page.py +0 -0
  67. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/payload.py +0 -0
  68. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/payloadpage.py +0 -0
  69. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/prefilter.py +0 -0
  70. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/profile/README_STARTUP +0 -0
  71. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/profileapp.py +0 -0
  72. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/profiledir.py +0 -0
  73. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/pylabtools.py +0 -0
  74. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/shellapp.py +0 -0
  75. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/splitinput.py +0 -0
  76. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/tbtools.py +0 -0
  77. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/tips.py +0 -0
  78. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/ultratb.py +0 -0
  79. {ipython-9.9.0 → ipython-9.10.0}/IPython/core/usage.py +0 -0
  80. {ipython-9.9.0 → ipython-9.10.0}/IPython/display.py +0 -0
  81. {ipython-9.9.0 → ipython-9.10.0}/IPython/extensions/__init__.py +0 -0
  82. {ipython-9.9.0 → ipython-9.10.0}/IPython/extensions/deduperreload/__init__.py +0 -0
  83. {ipython-9.9.0 → ipython-9.10.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
  84. {ipython-9.9.0 → ipython-9.10.0}/IPython/extensions/storemagic.py +0 -0
  85. {ipython-9.9.0 → ipython-9.10.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
  86. {ipython-9.9.0 → ipython-9.10.0}/IPython/external/__init__.py +0 -0
  87. {ipython-9.9.0 → ipython-9.10.0}/IPython/external/pickleshare.py +0 -0
  88. {ipython-9.9.0 → ipython-9.10.0}/IPython/external/qt_for_kernel.py +0 -0
  89. {ipython-9.9.0 → ipython-9.10.0}/IPython/external/qt_loaders.py +0 -0
  90. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/__init__.py +0 -0
  91. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/backgroundjobs.py +0 -0
  92. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/clipboard.py +0 -0
  93. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/deepreload.py +0 -0
  94. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/demo.py +0 -0
  95. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/display.py +0 -0
  96. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/editorhooks.py +0 -0
  97. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/guisupport.py +0 -0
  98. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/latextools.py +0 -0
  99. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/lexers.py +0 -0
  100. {ipython-9.9.0 → ipython-9.10.0}/IPython/lib/pretty.py +0 -0
  101. {ipython-9.9.0 → ipython-9.10.0}/IPython/paths.py +0 -0
  102. {ipython-9.9.0 → ipython-9.10.0}/IPython/py.typed +0 -0
  103. {ipython-9.9.0 → ipython-9.10.0}/IPython/sphinxext/__init__.py +0 -0
  104. {ipython-9.9.0 → ipython-9.10.0}/IPython/sphinxext/custom_doctests.py +0 -0
  105. {ipython-9.9.0 → ipython-9.10.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  106. {ipython-9.9.0 → ipython-9.10.0}/IPython/sphinxext/ipython_directive.py +0 -0
  107. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/__init__.py +0 -0
  108. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/debugger.py +0 -0
  109. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/embed.py +0 -0
  110. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/interactiveshell.py +0 -0
  111. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/ipapp.py +0 -0
  112. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/magics.py +0 -0
  113. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/prompts.py +0 -0
  114. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  115. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  116. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  117. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  118. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  119. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  120. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  121. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  122. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  123. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  124. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  125. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/ptutils.py +0 -0
  126. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  127. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  128. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
  129. {ipython-9.9.0 → ipython-9.10.0}/IPython/terminal/shortcuts/filters.py +0 -0
  130. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/__init__.py +0 -0
  131. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/decorators.py +0 -0
  132. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/globalipapp.py +0 -0
  133. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/ipunittest.py +0 -0
  134. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/Makefile +0 -0
  135. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/__init__.py +0 -0
  136. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/dtexample.py +0 -0
  137. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  138. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  139. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/setup.py +0 -0
  140. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/simple.py +0 -0
  141. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/simplevars.py +0 -0
  142. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/test_combo.txt +0 -0
  143. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/test_example.txt +0 -0
  144. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  145. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  146. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/plugin/test_refs.py +0 -0
  147. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/skipdoctest.py +0 -0
  148. {ipython-9.9.0 → ipython-9.10.0}/IPython/testing/tools.py +0 -0
  149. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/PyColorize.py +0 -0
  150. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/__init__.py +0 -0
  151. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/_process_cli.py +0 -0
  152. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/_process_common.py +0 -0
  153. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/_process_emscripten.py +0 -0
  154. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/_process_posix.py +0 -0
  155. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/_process_win32.py +0 -0
  156. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/_process_win32_controller.py +0 -0
  157. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/capture.py +0 -0
  158. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/coloransi.py +0 -0
  159. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/contexts.py +0 -0
  160. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/data.py +0 -0
  161. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/decorators.py +0 -0
  162. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/dir2.py +0 -0
  163. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/docs.py +0 -0
  164. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/encoding.py +0 -0
  165. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/eventful.py +0 -0
  166. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/frame.py +0 -0
  167. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/generics.py +0 -0
  168. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/importstring.py +0 -0
  169. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/io.py +0 -0
  170. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/ipstruct.py +0 -0
  171. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/jsonutil.py +0 -0
  172. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/log.py +0 -0
  173. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/module_paths.py +0 -0
  174. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/openpy.py +0 -0
  175. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/path.py +0 -0
  176. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/process.py +0 -0
  177. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/py3compat.py +0 -0
  178. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/sentinel.py +0 -0
  179. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/strdispatch.py +0 -0
  180. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/sysinfo.py +0 -0
  181. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/syspathcontext.py +0 -0
  182. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/tempdir.py +0 -0
  183. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/terminal.py +0 -0
  184. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/text.py +0 -0
  185. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/timing.py +0 -0
  186. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/tokenutil.py +0 -0
  187. {ipython-9.9.0 → ipython-9.10.0}/IPython/utils/wildcard.py +0 -0
  188. {ipython-9.9.0 → ipython-9.10.0}/LICENSE +0 -0
  189. {ipython-9.9.0 → ipython-9.10.0}/MANIFEST.in +0 -0
  190. {ipython-9.9.0 → ipython-9.10.0}/README.rst +0 -0
  191. {ipython-9.9.0 → ipython-9.10.0}/_build_meta.py +0 -0
  192. {ipython-9.9.0 → ipython-9.10.0}/docs/Makefile +0 -0
  193. {ipython-9.9.0 → ipython-9.10.0}/docs/README.rst +0 -0
  194. {ipython-9.9.0 → ipython-9.10.0}/docs/autogen_api.py +0 -0
  195. {ipython-9.9.0 → ipython-9.10.0}/docs/autogen_config.py +0 -0
  196. {ipython-9.9.0 → ipython-9.10.0}/docs/autogen_magics.py +0 -0
  197. {ipython-9.9.0 → ipython-9.10.0}/docs/autogen_shortcuts.py +0 -0
  198. {ipython-9.9.0 → ipython-9.10.0}/docs/make.cmd +0 -0
  199. {ipython-9.9.0 → ipython-9.10.0}/docs/man/ipython.1 +0 -0
  200. {ipython-9.9.0 → ipython-9.10.0}/docs/requirements.txt +0 -0
  201. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/2.0/running-crop.png +0 -0
  202. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/2.0/running.png +0 -0
  203. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/2.0/treeview.png +0 -0
  204. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/2.0/user-interface.png +0 -0
  205. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/2.0/widgets.png +0 -0
  206. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  207. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  208. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  209. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  210. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  211. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  212. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  213. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  214. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  215. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  216. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  217. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/autosuggest.gif +0 -0
  218. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  219. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  220. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  221. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  222. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  223. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  224. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  225. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  226. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  227. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  228. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  229. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  230. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  231. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  232. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  233. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ms_visual_studio.png +0 -0
  234. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/notebook_specgram.png +0 -0
  235. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/ptshell_features.png +0 -0
  236. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/qtconsole.png +0 -0
  237. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  238. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_images/unicode_completion.png +0 -0
  239. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_static/favicon.ico +0 -0
  240. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_static/logo.png +0 -0
  241. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_static/theme_overrides.css +0 -0
  242. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_templates/breadcrumbs.html +0 -0
  243. {ipython-9.9.0 → ipython-9.10.0}/docs/source/_templates/notebook_redirect.html +0 -0
  244. {ipython-9.9.0 → ipython-9.10.0}/docs/source/about/history.rst +0 -0
  245. {ipython-9.9.0 → ipython-9.10.0}/docs/source/about/index.rst +0 -0
  246. {ipython-9.9.0 → ipython-9.10.0}/docs/source/about/license_and_copyright.rst +0 -0
  247. {ipython-9.9.0 → ipython-9.10.0}/docs/source/api/index.rst +0 -0
  248. {ipython-9.9.0 → ipython-9.10.0}/docs/source/conf.py +0 -0
  249. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/callbacks.rst +0 -0
  250. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/custommagics.rst +0 -0
  251. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/details.rst +0 -0
  252. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/eventloops.rst +0 -0
  253. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/extensions/autoreload.rst +0 -0
  254. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/extensions/index.rst +0 -0
  255. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/extensions/storemagic.rst +0 -0
  256. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/index.rst +0 -0
  257. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/inputtransforms.rst +0 -0
  258. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/integrating.rst +0 -0
  259. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/intro.rst +0 -0
  260. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/options/index.rst +0 -0
  261. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  262. {ipython-9.9.0 → ipython-9.10.0}/docs/source/config/shortcuts/index.rst +0 -0
  263. {ipython-9.9.0 → ipython-9.10.0}/docs/source/coredev/index.rst +0 -0
  264. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/config.rst +0 -0
  265. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/execution.rst +0 -0
  266. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  267. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  268. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/figs/other_kernels.png +0 -0
  269. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/figs/other_kernels.svg +0 -0
  270. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/how_ipython_works.rst +0 -0
  271. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/index.rst +0 -0
  272. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/inputhook_app.rst +0 -0
  273. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/kernels.rst +0 -0
  274. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/messaging.rst +0 -0
  275. {ipython-9.9.0 → ipython-9.10.0}/docs/source/development/wrapperkernels.rst +0 -0
  276. {ipython-9.9.0 → ipython-9.10.0}/docs/source/index.rst +0 -0
  277. {ipython-9.9.0 → ipython-9.10.0}/docs/source/install/index.rst +0 -0
  278. {ipython-9.9.0 → ipython-9.10.0}/docs/source/install/install.rst +0 -0
  279. {ipython-9.9.0 → ipython-9.10.0}/docs/source/install/kernel_install.rst +0 -0
  280. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/autoawait.rst +0 -0
  281. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/index.rst +0 -0
  282. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/magics.rst +0 -0
  283. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/plotting.rst +0 -0
  284. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  285. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/reference.rst +0 -0
  286. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/shell.rst +0 -0
  287. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/tips.rst +0 -0
  288. {ipython-9.9.0 → ipython-9.10.0}/docs/source/interactive/tutorial.rst +0 -0
  289. {ipython-9.9.0 → ipython-9.10.0}/docs/source/links.txt +0 -0
  290. {ipython-9.9.0 → ipython-9.10.0}/docs/source/overview.rst +0 -0
  291. {ipython-9.9.0 → ipython-9.10.0}/docs/source/parallel/index.rst +0 -0
  292. {ipython-9.9.0 → ipython-9.10.0}/docs/source/sphinx.toml +0 -0
  293. {ipython-9.9.0 → ipython-9.10.0}/docs/source/sphinxext.rst +0 -0
  294. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/development.rst +0 -0
  295. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  296. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  297. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  298. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  299. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  300. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  301. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  302. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  303. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  304. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  305. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  306. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/index.rst +0 -0
  307. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/pr/README.md +0 -0
  308. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  309. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  310. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version0.10.rst +0 -0
  311. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version0.11.rst +0 -0
  312. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version0.12.rst +0 -0
  313. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version0.13.rst +0 -0
  314. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version0.8.rst +0 -0
  315. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version0.9.rst +0 -0
  316. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version1.0.rst +0 -0
  317. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version2.0.rst +0 -0
  318. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version3.rst +0 -0
  319. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  320. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version4.rst +0 -0
  321. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version5.rst +0 -0
  322. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version6.rst +0 -0
  323. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version7.rst +0 -0
  324. {ipython-9.9.0 → ipython-9.10.0}/docs/source/whatsnew/version8.rst +0 -0
  325. {ipython-9.9.0 → ipython-9.10.0}/docs/sphinxext/apigen.py +0 -0
  326. {ipython-9.9.0 → ipython-9.10.0}/docs/sphinxext/configtraits.py +0 -0
  327. {ipython-9.9.0 → ipython-9.10.0}/docs/sphinxext/magics.py +0 -0
  328. {ipython-9.9.0 → ipython-9.10.0}/examples/Embedding/embed_class_long.py +0 -0
  329. {ipython-9.9.0 → ipython-9.10.0}/examples/Embedding/embed_class_short.py +0 -0
  330. {ipython-9.9.0 → ipython-9.10.0}/examples/Embedding/embed_function.py +0 -0
  331. {ipython-9.9.0 → ipython-9.10.0}/examples/Embedding/start_ipython_config.py +0 -0
  332. {ipython-9.9.0 → ipython-9.10.0}/examples/IPython Kernel/example-demo.py +0 -0
  333. {ipython-9.9.0 → ipython-9.10.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  334. {ipython-9.9.0 → ipython-9.10.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  335. {ipython-9.9.0 → ipython-9.10.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  336. {ipython-9.9.0 → ipython-9.10.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  337. {ipython-9.9.0 → ipython-9.10.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  338. {ipython-9.9.0 → ipython-9.10.0}/examples/IPython Kernel/ipython.desktop +0 -0
  339. {ipython-9.9.0 → ipython-9.10.0}/examples/auto_suggest_llm.py +0 -0
  340. {ipython-9.9.0 → ipython-9.10.0}/examples/utils/cwd_prompt.py +0 -0
  341. {ipython-9.9.0 → ipython-9.10.0}/examples/utils/list_pyfiles.ipy +0 -0
  342. {ipython-9.9.0 → ipython-9.10.0}/examples/utils/list_subdirs.ipy +0 -0
  343. {ipython-9.9.0 → ipython-9.10.0}/ipython.egg-info/SOURCES.txt +0 -0
  344. {ipython-9.9.0 → ipython-9.10.0}/ipython.egg-info/dependency_links.txt +0 -0
  345. {ipython-9.9.0 → ipython-9.10.0}/ipython.egg-info/entry_points.txt +0 -0
  346. {ipython-9.9.0 → ipython-9.10.0}/ipython.egg-info/not-zip-safe +0 -0
  347. {ipython-9.9.0 → ipython-9.10.0}/ipython.egg-info/requires.txt +0 -0
  348. {ipython-9.9.0 → ipython-9.10.0}/ipython.egg-info/top_level.txt +0 -0
  349. {ipython-9.9.0 → ipython-9.10.0}/long_description.rst +0 -0
  350. {ipython-9.9.0 → ipython-9.10.0}/pyproject.toml +0 -0
  351. {ipython-9.9.0 → ipython-9.10.0}/scripts/ipython.ico +0 -0
  352. {ipython-9.9.0 → ipython-9.10.0}/scripts/ipython_nb.ico +0 -0
  353. {ipython-9.9.0 → ipython-9.10.0}/setup.cfg +0 -0
  354. {ipython-9.9.0 → ipython-9.10.0}/setup.py +0 -0
  355. {ipython-9.9.0 → ipython-9.10.0}/setupbase.py +0 -0
  356. {ipython-9.9.0 → ipython-9.10.0}/tests/2x2.jpg +0 -0
  357. {ipython-9.9.0 → ipython-9.10.0}/tests/2x2.png +0 -0
  358. {ipython-9.9.0 → ipython-9.10.0}/tests/__init__.py +0 -0
  359. {ipython-9.9.0 → ipython-9.10.0}/tests/bad_all.py +0 -0
  360. {ipython-9.9.0 → ipython-9.10.0}/tests/conftest.py +0 -0
  361. {ipython-9.9.0 → ipython-9.10.0}/tests/fake_ext_dir/daft_extension.py +0 -0
  362. {ipython-9.9.0 → ipython-9.10.0}/tests/fake_llm.py +0 -0
  363. {ipython-9.9.0 → ipython-9.10.0}/tests/nonascii.py +0 -0
  364. {ipython-9.9.0 → ipython-9.10.0}/tests/nonascii2.py +0 -0
  365. {ipython-9.9.0 → ipython-9.10.0}/tests/print_argv.py +0 -0
  366. {ipython-9.9.0 → ipython-9.10.0}/tests/refbug.py +0 -0
  367. {ipython-9.9.0 → ipython-9.10.0}/tests/simpleerr.py +0 -0
  368. {ipython-9.9.0 → ipython-9.10.0}/tests/tclass.py +0 -0
  369. {ipython-9.9.0 → ipython-9.10.0}/tests/test.wav +0 -0
  370. {ipython-9.9.0 → ipython-9.10.0}/tests/test_alias.py +0 -0
  371. {ipython-9.9.0 → ipython-9.10.0}/tests/test_application.py +0 -0
  372. {ipython-9.9.0 → ipython-9.10.0}/tests/test_async_helpers.py +0 -0
  373. {ipython-9.9.0 → ipython-9.10.0}/tests/test_autocall.py +0 -0
  374. {ipython-9.9.0 → ipython-9.10.0}/tests/test_backgroundjobs.py +0 -0
  375. {ipython-9.9.0 → ipython-9.10.0}/tests/test_capture.py +0 -0
  376. {ipython-9.9.0 → ipython-9.10.0}/tests/test_clipboard.py +0 -0
  377. {ipython-9.9.0 → ipython-9.10.0}/tests/test_compilerop.py +0 -0
  378. {ipython-9.9.0 → ipython-9.10.0}/tests/test_completer.py +0 -0
  379. {ipython-9.9.0 → ipython-9.10.0}/tests/test_completerlib.py +0 -0
  380. {ipython-9.9.0 → ipython-9.10.0}/tests/test_cve.py +0 -0
  381. {ipython-9.9.0 → ipython-9.10.0}/tests/test_debug_magic.py +0 -0
  382. {ipython-9.9.0 → ipython-9.10.0}/tests/test_debugger.py +0 -0
  383. {ipython-9.9.0 → ipython-9.10.0}/tests/test_decorators.py +0 -0
  384. {ipython-9.9.0 → ipython-9.10.0}/tests/test_decorators_2.py +0 -0
  385. {ipython-9.9.0 → ipython-9.10.0}/tests/test_deepreload.py +0 -0
  386. {ipython-9.9.0 → ipython-9.10.0}/tests/test_dir2.py +0 -0
  387. {ipython-9.9.0 → ipython-9.10.0}/tests/test_display.py +0 -0
  388. {ipython-9.9.0 → ipython-9.10.0}/tests/test_display_2.py +0 -0
  389. {ipython-9.9.0 → ipython-9.10.0}/tests/test_displayhook.py +0 -0
  390. {ipython-9.9.0 → ipython-9.10.0}/tests/test_editorhooks.py +0 -0
  391. {ipython-9.9.0 → ipython-9.10.0}/tests/test_embed.py +0 -0
  392. {ipython-9.9.0 → ipython-9.10.0}/tests/test_events.py +0 -0
  393. {ipython-9.9.0 → ipython-9.10.0}/tests/test_exceptiongroup_tb.py +0 -0
  394. {ipython-9.9.0 → ipython-9.10.0}/tests/test_extension.py +0 -0
  395. {ipython-9.9.0 → ipython-9.10.0}/tests/test_formatters.py +0 -0
  396. {ipython-9.9.0 → ipython-9.10.0}/tests/test_guarded_eval.py +0 -0
  397. {ipython-9.9.0 → ipython-9.10.0}/tests/test_handlers.py +0 -0
  398. {ipython-9.9.0 → ipython-9.10.0}/tests/test_help.py +0 -0
  399. {ipython-9.9.0 → ipython-9.10.0}/tests/test_history.py +0 -0
  400. {ipython-9.9.0 → ipython-9.10.0}/tests/test_hooks.py +0 -0
  401. {ipython-9.9.0 → ipython-9.10.0}/tests/test_imports.py +0 -0
  402. {ipython-9.9.0 → ipython-9.10.0}/tests/test_importstring.py +0 -0
  403. {ipython-9.9.0 → ipython-9.10.0}/tests/test_inputtransformer2.py +0 -0
  404. {ipython-9.9.0 → ipython-9.10.0}/tests/test_interactiveshell.py +0 -0
  405. {ipython-9.9.0 → ipython-9.10.0}/tests/test_interactivshell.py +0 -0
  406. {ipython-9.9.0 → ipython-9.10.0}/tests/test_io.py +0 -0
  407. {ipython-9.9.0 → ipython-9.10.0}/tests/test_iplib.py +0 -0
  408. {ipython-9.9.0 → ipython-9.10.0}/tests/test_ipunittest.py +0 -0
  409. {ipython-9.9.0 → ipython-9.10.0}/tests/test_latextools.py +0 -0
  410. {ipython-9.9.0 → ipython-9.10.0}/tests/test_logger.py +0 -0
  411. {ipython-9.9.0 → ipython-9.10.0}/tests/test_magic.py +0 -0
  412. {ipython-9.9.0 → ipython-9.10.0}/tests/test_magic_arguments.py +0 -0
  413. {ipython-9.9.0 → ipython-9.10.0}/tests/test_magic_terminal.py +0 -0
  414. {ipython-9.9.0 → ipython-9.10.0}/tests/test_module_paths.py +0 -0
  415. {ipython-9.9.0 → ipython-9.10.0}/tests/test_oinspect.py +0 -0
  416. {ipython-9.9.0 → ipython-9.10.0}/tests/test_openpy.py +0 -0
  417. {ipython-9.9.0 → ipython-9.10.0}/tests/test_page.py +0 -0
  418. {ipython-9.9.0 → ipython-9.10.0}/tests/test_path.py +0 -0
  419. {ipython-9.9.0 → ipython-9.10.0}/tests/test_paths.py +0 -0
  420. {ipython-9.9.0 → ipython-9.10.0}/tests/test_prefilter.py +0 -0
  421. {ipython-9.9.0 → ipython-9.10.0}/tests/test_pretty.py +0 -0
  422. {ipython-9.9.0 → ipython-9.10.0}/tests/test_process.py +0 -0
  423. {ipython-9.9.0 → ipython-9.10.0}/tests/test_profile.py +0 -0
  424. {ipython-9.9.0 → ipython-9.10.0}/tests/test_pt_inputhooks.py +0 -0
  425. {ipython-9.9.0 → ipython-9.10.0}/tests/test_pycolorize.py +0 -0
  426. {ipython-9.9.0 → ipython-9.10.0}/tests/test_pylabtools.py +0 -0
  427. {ipython-9.9.0 → ipython-9.10.0}/tests/test_qt_loaders.py +0 -0
  428. {ipython-9.9.0 → ipython-9.10.0}/tests/test_run.py +0 -0
  429. {ipython-9.9.0 → ipython-9.10.0}/tests/test_shellapp.py +0 -0
  430. {ipython-9.9.0 → ipython-9.10.0}/tests/test_shortcuts.py +0 -0
  431. {ipython-9.9.0 → ipython-9.10.0}/tests/test_splitinput.py +0 -0
  432. {ipython-9.9.0 → ipython-9.10.0}/tests/test_storemagic.py +0 -0
  433. {ipython-9.9.0 → ipython-9.10.0}/tests/test_sysinfo.py +0 -0
  434. {ipython-9.9.0 → ipython-9.10.0}/tests/test_tempdir.py +0 -0
  435. {ipython-9.9.0 → ipython-9.10.0}/tests/test_text.py +0 -0
  436. {ipython-9.9.0 → ipython-9.10.0}/tests/test_tips.py +0 -0
  437. {ipython-9.9.0 → ipython-9.10.0}/tests/test_tokenutil.py +0 -0
  438. {ipython-9.9.0 → ipython-9.10.0}/tests/test_tools.py +0 -0
  439. {ipython-9.9.0 → ipython-9.10.0}/tests/test_ultratb.py +0 -0
  440. {ipython-9.9.0 → ipython-9.10.0}/tests/test_wildcard.py +0 -0
  441. {ipython-9.9.0 → ipython-9.10.0}/tests/test_zzz_autoreload.py +0 -0
@@ -8,6 +8,7 @@ from __future__ import annotations
8
8
 
9
9
  import atexit
10
10
  import datetime
11
+ import os
11
12
  import re
12
13
 
13
14
 
@@ -689,6 +690,7 @@ class HistoryManager(HistoryAccessor):
689
690
  )
690
691
  self.hist_file = ":memory:"
691
692
 
693
+ self.using_thread = False
692
694
  if self.enabled and self.hist_file != ":memory:":
693
695
  self.save_thread = HistorySavingThread(self)
694
696
  try:
@@ -699,6 +701,8 @@ class HistoryManager(HistoryAccessor):
699
701
  exc_info=True,
700
702
  )
701
703
  self.hist_file = ":memory:"
704
+ else:
705
+ self.using_thread = True
702
706
  self._instances.add(self)
703
707
  assert len(HistoryManager._instances) <= HistoryManager._max_inst, (
704
708
  len(HistoryManager._instances),
@@ -709,6 +713,20 @@ class HistoryManager(HistoryAccessor):
709
713
  if self.save_thread is not None:
710
714
  self.save_thread.stop()
711
715
 
716
+ @classmethod
717
+ def _stop_thread(cls) -> None:
718
+ # Used before forking so the thread isn't running at fork
719
+ for inst in cls._instances:
720
+ if inst.save_thread is not None:
721
+ inst.save_thread.stop()
722
+ inst.save_thread = None
723
+
724
+ def _restart_thread_if_stopped(self) -> None:
725
+ # Start the thread again after it was stopped for forking
726
+ if self.save_thread is None and self.using_thread:
727
+ self.save_thread = HistorySavingThread(self)
728
+ self.save_thread.start()
729
+
712
730
  def _get_hist_file_name(self, profile: Optional[str] = None) -> Path:
713
731
  """Get default history file name based on the Shell's profile.
714
732
 
@@ -970,8 +988,10 @@ class HistoryManager(HistoryAccessor):
970
988
  self.db_input_cache.append((line_num, source, source_raw))
971
989
  # Trigger to flush cache and write to DB.
972
990
  if len(self.db_input_cache) >= self.db_cache_size:
973
- if self.save_flag:
974
- self.save_flag.set()
991
+ if self.using_thread:
992
+ self._restart_thread_if_stopped()
993
+ if self.save_flag is not None:
994
+ self.save_flag.set()
975
995
 
976
996
  # update the auto _i variables
977
997
  self._iii = self._ii
@@ -1003,8 +1023,10 @@ class HistoryManager(HistoryAccessor):
1003
1023
 
1004
1024
  with self.db_output_cache_lock:
1005
1025
  self.db_output_cache.append((line_num, output))
1006
- if self.db_cache_size <= 1 and self.save_flag is not None:
1007
- self.save_flag.set()
1026
+ if self.db_cache_size <= 1 and self.using_thread:
1027
+ self._restart_thread_if_stopped()
1028
+ if self.save_flag is not None:
1029
+ self.save_flag.set()
1008
1030
 
1009
1031
  def _writeout_input_cache(self, conn: sqlite3.Connection) -> None:
1010
1032
  with conn:
@@ -1059,6 +1081,10 @@ class HistoryManager(HistoryAccessor):
1059
1081
  self.db_output_cache = []
1060
1082
 
1061
1083
 
1084
+ if hasattr(os, "register_at_fork"):
1085
+ os.register_at_fork(before=HistoryManager._stop_thread)
1086
+
1087
+
1062
1088
  from collections.abc import Callable, Iterator
1063
1089
  from weakref import ReferenceType
1064
1090
 
@@ -67,9 +67,47 @@ class PromptStripper:
67
67
  If any prompt is found on the first two lines,
68
68
  prompts will be stripped from the rest of the block.
69
69
  """
70
- def __init__(self, prompt_re, initial_re=None):
70
+ def __init__(self, prompt_re, initial_re=None, *, doctest=False):
71
71
  self.prompt_re = prompt_re
72
72
  self.initial_re = initial_re or prompt_re
73
+ self.doctest = doctest
74
+ if doctest:
75
+ # Doctest/xdoctest prompts may be indented (e.g. " >>>").
76
+ # We only treat "..." as a continuation prompt when the same pasted
77
+ # block contains at least one ">>>" line, to avoid ambiguity with the
78
+ # Python Ellipsis literal.
79
+ self._doctest_initial_re = re.compile(r'^\s*>>>')
80
+ self._doctest_ps1_re = re.compile(r'^\s*>>>\s?')
81
+ self._doctest_ps2_re = re.compile(r'^\s*\.\.\.\s?')
82
+
83
+ # Very small state machine to detect triple-quoted strings in the
84
+ # *same* input block (e.g. user typed """ then pasted doctest).
85
+ # We preserve literal >>> / ... inside triple-quoted strings.
86
+ self._triple_quote_re = re.compile(r"(?<!\\)(\"\"\"|''')")
87
+
88
+
89
+ def _triple_quote_mask(self, lines: List[str]) -> List[bool]:
90
+ """
91
+ Return a boolean mask: True if the corresponding line is considered
92
+ inside a triple-quoted string literal.
93
+
94
+ This is intentionally heuristic (fast + good enough for paste handling).
95
+ """
96
+ mask: List[bool] = []
97
+ in_triple: str | None = None # either ''' or """
98
+ for line in lines:
99
+ mask.append(in_triple is not None)
100
+ # Toggle state for each occurrence of """ or ''' in the line.
101
+ for m in self._triple_quote_re.finditer(line):
102
+ q = m.group(1)
103
+ if in_triple is None:
104
+ in_triple = q
105
+ mask[-1] = True # current line is inside triple quotes
106
+ elif in_triple == q:
107
+ in_triple = None
108
+ # else: ignore mismatched triple quote while inside
109
+ return mask
110
+
73
111
 
74
112
  def _strip(self, lines):
75
113
  return [self.prompt_re.sub('', l, count=1) for l in lines]
@@ -77,6 +115,57 @@ class PromptStripper:
77
115
  def __call__(self, lines):
78
116
  if not lines:
79
117
  return lines
118
+
119
+ if self.doctest:
120
+ triple_mask = self._triple_quote_mask(lines)
121
+
122
+ # Detect doctest prompts only outside triple-quoted strings.
123
+ has_doctest_outside = any(
124
+ (not in_triple) and self._doctest_initial_re.match(l)
125
+ for l, in_triple in zip(lines, triple_mask)
126
+ )
127
+ if not has_doctest_outside:
128
+ return lines
129
+
130
+ out_lines: List[str] = []
131
+ stripped_mask: List[bool] = []
132
+
133
+ for l, in_triple in zip(lines, triple_mask):
134
+ if in_triple:
135
+ out_lines.append(l)
136
+ stripped_mask.append(False)
137
+ continue
138
+
139
+ if self._doctest_ps1_re.match(l):
140
+ new_l = self._doctest_ps1_re.sub('', l, count=1)
141
+ elif self._doctest_ps2_re.match(l):
142
+ new_l = self._doctest_ps2_re.sub('', l, count=1)
143
+ else:
144
+ new_l = l
145
+ out_lines.append(new_l)
146
+ stripped_mask.append(new_l != l)
147
+
148
+ # Dedent only the non-triple-quoted segments where stripping occurred.
149
+ dedented: List[str] = []
150
+ i = 0
151
+ while i < len(out_lines):
152
+ j = i
153
+ in_triple = triple_mask[i]
154
+ while j < len(out_lines) and triple_mask[j] == in_triple:
155
+ j += 1
156
+
157
+ segment = out_lines[i:j]
158
+ seg_stripped = any(stripped_mask[i:j])
159
+
160
+ if (not in_triple) and seg_stripped:
161
+ dedented.extend(dedent(''.join(segment)).splitlines(keepends=True))
162
+ else:
163
+ dedented.extend(segment)
164
+
165
+ i = j
166
+
167
+ return dedented
168
+
80
169
  if self.initial_re.match(lines[0]) or \
81
170
  (len(lines) > 1 and self.prompt_re.match(lines[1])):
82
171
  return self._strip(lines)
@@ -84,7 +173,8 @@ class PromptStripper:
84
173
 
85
174
  classic_prompt = PromptStripper(
86
175
  prompt_re=re.compile(r'^(>>>|\.\.\.)( |$)'),
87
- initial_re=re.compile(r'^>>>( |$)')
176
+ initial_re=re.compile(r'^>>>( |$)'),
177
+ doctest=True,
88
178
  )
89
179
 
90
180
  ipython_prompt = PromptStripper(
@@ -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 = 9
19
+ _version_minor = 10
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "b2"
@@ -327,6 +327,10 @@ class ModuleReloader:
327
327
  del self.failed[py_filename]
328
328
  except:
329
329
  if not self.hide_errors:
330
+ logger = logging.getLogger("autoreload")
331
+ logger.exception(
332
+ f"Failed to reload module '{modname}' from file '{py_filename}'"
333
+ )
330
334
  print(
331
335
  "[autoreload of {} failed: {}]".format(
332
336
  modname, traceback.format_exc(10)
@@ -3,6 +3,7 @@ import ast
3
3
  import builtins
4
4
  import contextlib
5
5
  import itertools
6
+ import logging
6
7
  import os
7
8
  import pickle
8
9
  import platform
@@ -209,11 +210,19 @@ class DeduperReloader(DeduperReloaderPatchingMixin):
209
210
  ):
210
211
  self.source_by_modname[new_modname] = ""
211
212
  continue
212
- with open(fname, "r") as f:
213
- try:
213
+ # Skip binary files (e.g., .so, .pyd, .pyo)
214
+ if not fname.endswith(".py"):
215
+ self.source_by_modname[new_modname] = ""
216
+ continue
217
+ try:
218
+ with open(fname, "r") as f:
214
219
  self.source_by_modname[new_modname] = f.read()
215
- except Exception:
216
- self.source_by_modname[new_modname] = ""
220
+ except Exception as e:
221
+ logger = logging.getLogger("autoreload")
222
+ logger.exception(
223
+ f"Failed to read module file '{fname}' for module '{new_modname}': {type(e).__name__}"
224
+ )
225
+ self.source_by_modname[new_modname] = ""
217
226
 
218
227
  constexpr_detector = ConstexprDetector()
219
228
 
@@ -542,8 +551,15 @@ class DeduperReloader(DeduperReloaderPatchingMixin):
542
551
  return False
543
552
  if (fname := get_module_file_name(module)) is None:
544
553
  return False
545
- with open(fname, "r") as f:
546
- new_source_code = f.read()
554
+ try:
555
+ with open(fname, "r") as f:
556
+ new_source_code = f.read()
557
+ except Exception as e:
558
+ logger = logging.getLogger("autoreload")
559
+ logger.exception(
560
+ f"Failed to read module file '{fname}' for module '{modname}': {type(e).__name__}"
561
+ )
562
+ return False
547
563
  patched_flag = False
548
564
  if old_source_code := self.source_by_modname.get(modname):
549
565
  # get old/new module ast
@@ -1,2 +1,2 @@
1
1
  # GENERATED BY setup.py
2
- commit = "0c28fe5"
2
+ commit = "178fef7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipython
3
- Version: 9.9.0
3
+ Version: 9.10.0
4
4
  Summary: IPython: Productive Interactive Computing
5
5
  Author: The IPython Development Team
6
6
  Author-email: ipython-dev@python.org
@@ -3,12 +3,44 @@
3
3
  ============
4
4
 
5
5
 
6
+ .. _version 9.10:
7
+
8
+ IPython 9.10
9
+ ============
10
+
11
+ This release includes improvements to history management during forking and formatting fixes.
12
+
13
+ - :ghpull:`15110` Fix Removing leading indentation when stripping prompt
14
+ - :ghpull:`15115` Stop HistorySavingThread before fork
15
+ - :ghpull:`15118` Add debug info for autoreload
16
+
17
+
18
+ History Thread Management Improvements
19
+ ---------------------------------------
20
+
21
+ The `HistorySavingThread` is now properly stopped before process forking,
22
+ preventing threading issues in child processes. This ensures that history
23
+ operations work correctly when IPython is used in applications that perform
24
+ process forking.
25
+
26
+
27
+ Thanks
28
+ ------
29
+
30
+ Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`_ for sponsoring
31
+ work on IPython.
32
+
33
+ As usual, you can find the full list of PRs on GitHub under `the 9.10
34
+ <https://github.com/ipython/ipython/milestone/159?closed=1>`__ milestone.
35
+
36
+
6
37
  .. _version 9.9:
7
38
 
8
39
  IPython 9.9
9
40
  ===========
10
41
 
11
- This release includes several bug fixes and improvements across completions, type annotations, and developer experience.
42
+ This release includes several bug fixes and improvements across completions,
43
+ type annotations, and developer experience.
12
44
 
13
45
  - :ghpull:`15092` Fix formatting for completion suggestions section
14
46
  - :ghpull:`15057` Reduce types in splitinput.py
@@ -27,19 +59,25 @@ This release includes several bug fixes and improvements across completions, typ
27
59
  Improvements to PEP-649 Support
28
60
  -------------------------------
29
61
 
30
- IPython now properly pretty-prints functions with PEP-649 style annotations. This improves the display of functions in interactive sessions when using Python 3.14+ annotation semantics.
62
+ IPython now properly pretty-prints functions with PEP-649 style annotations.
63
+ This improves the display of functions in interactive sessions when using Python
64
+ 3.14+ annotation semantics.
31
65
 
32
66
 
33
67
  Shell Shortcuts Enhancement
34
68
  -----------------------------
35
69
 
36
- The ``unix_word_rubout`` command from prompt_toolkit is now available as an assignable command for terminal shortcuts, giving users more flexibility in customizing their keybindings.
70
+ The ``unix_word_rubout`` command from prompt_toolkit is now available as an
71
+ assignable command for terminal shortcuts, giving users more flexibility in
72
+ customizing their keybindings.
37
73
 
38
74
 
39
75
  Type Annotation Improvements
40
76
  ----------------------------
41
77
 
42
- Various type annotation improvements have been made throughout the codebase for better static analysis support, including fixes for tracebacks and improved type inference in the completion engine.
78
+ Various type annotation improvements have been made throughout the codebase for
79
+ better static analysis support, including fixes for tracebacks and improved type
80
+ inference in the completion engine.
43
81
 
44
82
 
45
83
  Thanks
@@ -57,7 +95,8 @@ As usual, you can find the full list of PRs on GitHub under `the 9.9
57
95
  IPython 9.8
58
96
  ===========
59
97
 
60
- This release brings improvements to concurrent execution, history commands, tab completion, and debugger performance.
98
+ This release brings improvements to concurrent execution, history commands, tab
99
+ completion, and debugger performance.
61
100
 
62
101
 
63
102
  - :ghpull:`15037` Fix some ruff issues with import
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipython
3
- Version: 9.9.0
3
+ Version: 9.10.0
4
4
  Summary: IPython: Productive Interactive Computing
5
5
  Author: The IPython Development Team
6
6
  Author-email: ipython-dev@python.org
@@ -45,15 +45,70 @@ for a in range(5):
45
45
  ... print(a ** 2)
46
46
  """,
47
47
  """\
48
+ for a in range(5):
49
+ ... print(a)
50
+ ... print(a ** 2)
51
+ """,
52
+ )
53
+
54
+ CLASSIC_PROMPT_L3 = (
55
+ """\
56
+ >>> \"\"\"
57
+ ... This code is inside a triple-quoted string.
58
+ ... >>> for a in range(5):
59
+ ... ... print(a)
60
+ ... \"\"\"
61
+ >>> for a in range(5):
62
+ ... print(a)
63
+ """,
64
+ """\
65
+ >>> \"\"\"
66
+ ... This code is inside a triple-quoted string.
67
+ ... >>> for a in range(5):
68
+ ... ... print(a)
69
+ ... \"\"\"
48
70
  for a in range(5):
49
71
  print(a)
50
- print(a ** 2)
51
72
  """,
52
73
  )
53
74
 
75
+ CLASSIC_PROMPT_DEDENT_SINGLE_LINE = (
76
+ ">>> print(1)\n",
77
+ "print(1)\n",
78
+ )
79
+
80
+ CLASSIC_PROMPT_DEDENT_LEADING_WS = (
81
+ " >>> print(1)\n",
82
+ "print(1)\n",
83
+ )
84
+
85
+ CLASSIC_PROMPT_MULTILINE_DOCTEST = (
86
+ """\
87
+ >>> for i in range(2):
88
+ ... print(i)
89
+ """,
90
+ """\
91
+ for i in range(2):
92
+ print(i)
93
+ """,
94
+ )
95
+
96
+ CLASSIC_PROMPT_STANDALONE_CONTINUATION = (
97
+ "... print(1)\n",
98
+ "... print(1)\n",
99
+ )
100
+
54
101
 
55
102
  def test_classic_prompt():
56
- for sample, expected in [CLASSIC_PROMPT, CLASSIC_PROMPT_L2]:
103
+ for sample, expected in [
104
+ CLASSIC_PROMPT,
105
+ CLASSIC_PROMPT_L2,
106
+ CLASSIC_PROMPT_L3,
107
+ CLASSIC_PROMPT_DEDENT_SINGLE_LINE,
108
+ CLASSIC_PROMPT_DEDENT_LEADING_WS,
109
+ CLASSIC_PROMPT_MULTILINE_DOCTEST,
110
+ CLASSIC_PROMPT_STANDALONE_CONTINUATION,
111
+ ]:
57
112
  assert ipt2.classic_prompt(
58
113
  sample.splitlines(keepends=True)
59
114
  ) == expected.splitlines(keepends=True)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes