ipython 9.11.0__tar.gz → 9.12.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/alias.py +1 -1
  2. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/application.py +3 -2
  3. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/compilerop.py +2 -2
  4. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/debugger.py +1 -1
  5. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/history.py +3 -5
  6. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/historyapp.py +39 -41
  7. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/basic.py +13 -3
  8. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/release.py +1 -1
  9. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/tbtools.py +1 -1
  10. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/ultratb.py +57 -24
  11. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/prompts.py +8 -4
  12. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/shortcuts/filters.py +6 -6
  13. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/decorators.py +6 -4
  14. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/ipunittest.py +1 -1
  15. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/pytest_ipdoctest.py +3 -3
  16. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/skipdoctest.py +2 -1
  17. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/tools.py +12 -10
  18. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_sysinfo.py +1 -1
  19. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/capture.py +8 -6
  20. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/io.py +4 -2
  21. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/ipstruct.py +4 -3
  22. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/path.py +5 -5
  23. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/py3compat.py +3 -2
  24. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/strdispatch.py +2 -1
  25. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/tempdir.py +8 -5
  26. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/terminal.py +1 -1
  27. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/tokenutil.py +2 -2
  28. {ipython-9.11.0/ipython.egg-info → ipython-9.12.0}/PKG-INFO +1 -1
  29. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version9.rst +57 -0
  30. {ipython-9.11.0 → ipython-9.12.0/ipython.egg-info}/PKG-INFO +1 -1
  31. {ipython-9.11.0 → ipython-9.12.0}/pyproject.toml +3 -0
  32. {ipython-9.11.0 → ipython-9.12.0}/tests/test_completer.py +1 -1
  33. {ipython-9.11.0 → ipython-9.12.0}/tests/test_iplib.py +11 -15
  34. {ipython-9.11.0 → ipython-9.12.0}/tests/test_magic.py +15 -2
  35. {ipython-9.11.0 → ipython-9.12.0}/.flake8 +0 -0
  36. {ipython-9.11.0 → ipython-9.12.0}/.mailmap +0 -0
  37. {ipython-9.11.0 → ipython-9.12.0}/.pre-commit-config.yaml +0 -0
  38. {ipython-9.11.0 → ipython-9.12.0}/COPYING.rst +0 -0
  39. {ipython-9.11.0 → ipython-9.12.0}/IPython/__init__.py +0 -0
  40. {ipython-9.11.0 → ipython-9.12.0}/IPython/__main__.py +0 -0
  41. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/__init__.py +0 -0
  42. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/async_helpers.py +0 -0
  43. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/autocall.py +0 -0
  44. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/builtin_trap.py +0 -0
  45. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/completer.py +0 -0
  46. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/completerlib.py +0 -0
  47. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/crashhandler.py +0 -0
  48. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/debugger_backport.py +0 -0
  49. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/display.py +0 -0
  50. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/display_functions.py +0 -0
  51. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/display_trap.py +0 -0
  52. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/displayhook.py +0 -0
  53. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/displaypub.py +0 -0
  54. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/doctb.py +0 -0
  55. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/error.py +0 -0
  56. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/events.py +0 -0
  57. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/extensions.py +0 -0
  58. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/formatters.py +0 -0
  59. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/getipython.py +0 -0
  60. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/guarded_eval.py +0 -0
  61. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/hooks.py +0 -0
  62. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/inputtransformer2.py +0 -0
  63. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/interactiveshell.py +0 -0
  64. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/latex_symbols.py +0 -0
  65. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/logger.py +0 -0
  66. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/macro.py +0 -0
  67. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magic.py +0 -0
  68. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magic_arguments.py +0 -0
  69. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/__init__.py +0 -0
  70. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/ast_mod.py +0 -0
  71. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/auto.py +0 -0
  72. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/code.py +0 -0
  73. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/config.py +0 -0
  74. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/display.py +0 -0
  75. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/execution.py +0 -0
  76. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/extension.py +0 -0
  77. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/history.py +0 -0
  78. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/logging.py +0 -0
  79. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/namespace.py +0 -0
  80. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/osm.py +0 -0
  81. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/packaging.py +0 -0
  82. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/pylab.py +0 -0
  83. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/magics/script.py +0 -0
  84. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/oinspect.py +0 -0
  85. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/page.py +0 -0
  86. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/payload.py +0 -0
  87. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/payloadpage.py +0 -0
  88. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/prefilter.py +0 -0
  89. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/profile/README_STARTUP +0 -0
  90. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/profileapp.py +0 -0
  91. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/profiledir.py +0 -0
  92. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/pylabtools.py +0 -0
  93. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/shellapp.py +0 -0
  94. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/splitinput.py +0 -0
  95. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/tips.py +0 -0
  96. {ipython-9.11.0 → ipython-9.12.0}/IPython/core/usage.py +0 -0
  97. {ipython-9.11.0 → ipython-9.12.0}/IPython/display.py +0 -0
  98. {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/__init__.py +0 -0
  99. {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/autoreload.py +0 -0
  100. {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/deduperreload/__init__.py +0 -0
  101. {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/deduperreload/deduperreload.py +0 -0
  102. {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
  103. {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/storemagic.py +0 -0
  104. {ipython-9.11.0 → ipython-9.12.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
  105. {ipython-9.11.0 → ipython-9.12.0}/IPython/external/__init__.py +0 -0
  106. {ipython-9.11.0 → ipython-9.12.0}/IPython/external/pickleshare.py +0 -0
  107. {ipython-9.11.0 → ipython-9.12.0}/IPython/external/qt_for_kernel.py +0 -0
  108. {ipython-9.11.0 → ipython-9.12.0}/IPython/external/qt_loaders.py +0 -0
  109. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/__init__.py +0 -0
  110. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/backgroundjobs.py +0 -0
  111. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/clipboard.py +0 -0
  112. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/deepreload.py +0 -0
  113. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/demo.py +0 -0
  114. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/display.py +0 -0
  115. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/editorhooks.py +0 -0
  116. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/guisupport.py +0 -0
  117. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/latextools.py +0 -0
  118. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/lexers.py +0 -0
  119. {ipython-9.11.0 → ipython-9.12.0}/IPython/lib/pretty.py +0 -0
  120. {ipython-9.11.0 → ipython-9.12.0}/IPython/paths.py +0 -0
  121. {ipython-9.11.0 → ipython-9.12.0}/IPython/py.typed +0 -0
  122. {ipython-9.11.0 → ipython-9.12.0}/IPython/sphinxext/__init__.py +0 -0
  123. {ipython-9.11.0 → ipython-9.12.0}/IPython/sphinxext/custom_doctests.py +0 -0
  124. {ipython-9.11.0 → ipython-9.12.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  125. {ipython-9.11.0 → ipython-9.12.0}/IPython/sphinxext/ipython_directive.py +0 -0
  126. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/__init__.py +0 -0
  127. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/debugger.py +0 -0
  128. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/embed.py +0 -0
  129. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/interactiveshell.py +0 -0
  130. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/ipapp.py +0 -0
  131. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/magics.py +0 -0
  132. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  133. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  134. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  135. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  136. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  137. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  138. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  139. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  140. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  141. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  142. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  143. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/ptutils.py +0 -0
  144. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  145. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  146. {ipython-9.11.0 → ipython-9.12.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
  147. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/__init__.py +0 -0
  148. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/globalipapp.py +0 -0
  149. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/Makefile +0 -0
  150. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/__init__.py +0 -0
  151. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/dtexample.py +0 -0
  152. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  153. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/setup.py +0 -0
  154. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/simple.py +0 -0
  155. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/simplevars.py +0 -0
  156. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_combo.txt +0 -0
  157. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_example.txt +0 -0
  158. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  159. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  160. {ipython-9.11.0 → ipython-9.12.0}/IPython/testing/plugin/test_refs.py +0 -0
  161. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/PyColorize.py +0 -0
  162. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/__init__.py +0 -0
  163. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_cli.py +0 -0
  164. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_common.py +0 -0
  165. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_emscripten.py +0 -0
  166. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_posix.py +0 -0
  167. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_win32.py +0 -0
  168. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/_process_win32_controller.py +0 -0
  169. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/coloransi.py +0 -0
  170. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/contexts.py +0 -0
  171. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/data.py +0 -0
  172. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/decorators.py +0 -0
  173. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/dir2.py +0 -0
  174. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/docs.py +0 -0
  175. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/encoding.py +0 -0
  176. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/eventful.py +0 -0
  177. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/frame.py +0 -0
  178. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/generics.py +0 -0
  179. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/importstring.py +0 -0
  180. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/jsonutil.py +0 -0
  181. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/log.py +0 -0
  182. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/module_paths.py +0 -0
  183. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/openpy.py +0 -0
  184. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/process.py +0 -0
  185. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/sentinel.py +0 -0
  186. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/sysinfo.py +0 -0
  187. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/syspathcontext.py +0 -0
  188. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/text.py +0 -0
  189. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/timing.py +0 -0
  190. {ipython-9.11.0 → ipython-9.12.0}/IPython/utils/wildcard.py +0 -0
  191. {ipython-9.11.0 → ipython-9.12.0}/LICENSE +0 -0
  192. {ipython-9.11.0 → ipython-9.12.0}/MANIFEST.in +0 -0
  193. {ipython-9.11.0 → ipython-9.12.0}/README.rst +0 -0
  194. {ipython-9.11.0 → ipython-9.12.0}/_build_meta.py +0 -0
  195. {ipython-9.11.0 → ipython-9.12.0}/docs/Makefile +0 -0
  196. {ipython-9.11.0 → ipython-9.12.0}/docs/README.rst +0 -0
  197. {ipython-9.11.0 → ipython-9.12.0}/docs/autogen_api.py +0 -0
  198. {ipython-9.11.0 → ipython-9.12.0}/docs/autogen_config.py +0 -0
  199. {ipython-9.11.0 → ipython-9.12.0}/docs/autogen_magics.py +0 -0
  200. {ipython-9.11.0 → ipython-9.12.0}/docs/autogen_shortcuts.py +0 -0
  201. {ipython-9.11.0 → ipython-9.12.0}/docs/make.cmd +0 -0
  202. {ipython-9.11.0 → ipython-9.12.0}/docs/man/ipython.1 +0 -0
  203. {ipython-9.11.0 → ipython-9.12.0}/docs/requirements.txt +0 -0
  204. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/running-crop.png +0 -0
  205. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/running.png +0 -0
  206. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/treeview.png +0 -0
  207. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/user-interface.png +0 -0
  208. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/2.0/widgets.png +0 -0
  209. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  210. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  211. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  212. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  213. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  214. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  215. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  216. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  217. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  218. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  219. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  220. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/autosuggest.gif +0 -0
  221. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  222. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  223. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  224. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  225. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  226. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  227. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  228. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  229. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  230. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  231. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  232. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  233. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  234. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  235. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  236. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ms_visual_studio.png +0 -0
  237. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/notebook_specgram.png +0 -0
  238. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/ptshell_features.png +0 -0
  239. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/qtconsole.png +0 -0
  240. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  241. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_images/unicode_completion.png +0 -0
  242. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_static/favicon.ico +0 -0
  243. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_static/logo.png +0 -0
  244. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_static/theme_overrides.css +0 -0
  245. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_templates/breadcrumbs.html +0 -0
  246. {ipython-9.11.0 → ipython-9.12.0}/docs/source/_templates/notebook_redirect.html +0 -0
  247. {ipython-9.11.0 → ipython-9.12.0}/docs/source/about/history.rst +0 -0
  248. {ipython-9.11.0 → ipython-9.12.0}/docs/source/about/index.rst +0 -0
  249. {ipython-9.11.0 → ipython-9.12.0}/docs/source/about/license_and_copyright.rst +0 -0
  250. {ipython-9.11.0 → ipython-9.12.0}/docs/source/api/index.rst +0 -0
  251. {ipython-9.11.0 → ipython-9.12.0}/docs/source/conf.py +0 -0
  252. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/callbacks.rst +0 -0
  253. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/custommagics.rst +0 -0
  254. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/details.rst +0 -0
  255. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/eventloops.rst +0 -0
  256. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/extensions/autoreload.rst +0 -0
  257. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/extensions/index.rst +0 -0
  258. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/extensions/storemagic.rst +0 -0
  259. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/index.rst +0 -0
  260. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/inputtransforms.rst +0 -0
  261. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/integrating.rst +0 -0
  262. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/intro.rst +0 -0
  263. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/options/index.rst +0 -0
  264. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  265. {ipython-9.11.0 → ipython-9.12.0}/docs/source/config/shortcuts/index.rst +0 -0
  266. {ipython-9.11.0 → ipython-9.12.0}/docs/source/coredev/index.rst +0 -0
  267. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/config.rst +0 -0
  268. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/execution.rst +0 -0
  269. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  270. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  271. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/figs/other_kernels.png +0 -0
  272. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/figs/other_kernels.svg +0 -0
  273. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/how_ipython_works.rst +0 -0
  274. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/index.rst +0 -0
  275. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/inputhook_app.rst +0 -0
  276. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/kernels.rst +0 -0
  277. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/messaging.rst +0 -0
  278. {ipython-9.11.0 → ipython-9.12.0}/docs/source/development/wrapperkernels.rst +0 -0
  279. {ipython-9.11.0 → ipython-9.12.0}/docs/source/index.rst +0 -0
  280. {ipython-9.11.0 → ipython-9.12.0}/docs/source/install/index.rst +0 -0
  281. {ipython-9.11.0 → ipython-9.12.0}/docs/source/install/install.rst +0 -0
  282. {ipython-9.11.0 → ipython-9.12.0}/docs/source/install/kernel_install.rst +0 -0
  283. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/autoawait.rst +0 -0
  284. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/index.rst +0 -0
  285. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/magics.rst +0 -0
  286. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/plotting.rst +0 -0
  287. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  288. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/reference.rst +0 -0
  289. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/shell.rst +0 -0
  290. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/tips.rst +0 -0
  291. {ipython-9.11.0 → ipython-9.12.0}/docs/source/interactive/tutorial.rst +0 -0
  292. {ipython-9.11.0 → ipython-9.12.0}/docs/source/links.txt +0 -0
  293. {ipython-9.11.0 → ipython-9.12.0}/docs/source/overview.rst +0 -0
  294. {ipython-9.11.0 → ipython-9.12.0}/docs/source/parallel/index.rst +0 -0
  295. {ipython-9.11.0 → ipython-9.12.0}/docs/source/sphinx.toml +0 -0
  296. {ipython-9.11.0 → ipython-9.12.0}/docs/source/sphinxext.rst +0 -0
  297. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/development.rst +0 -0
  298. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  299. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  300. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  301. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  302. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  303. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  304. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  305. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  306. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  307. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  308. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  309. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/index.rst +0 -0
  310. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/pr/README.md +0 -0
  311. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  312. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  313. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.10.rst +0 -0
  314. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.11.rst +0 -0
  315. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.12.rst +0 -0
  316. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.13.rst +0 -0
  317. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.8.rst +0 -0
  318. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version0.9.rst +0 -0
  319. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version1.0.rst +0 -0
  320. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version2.0.rst +0 -0
  321. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version3.rst +0 -0
  322. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  323. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version4.rst +0 -0
  324. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version5.rst +0 -0
  325. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version6.rst +0 -0
  326. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version7.rst +0 -0
  327. {ipython-9.11.0 → ipython-9.12.0}/docs/source/whatsnew/version8.rst +0 -0
  328. {ipython-9.11.0 → ipython-9.12.0}/docs/sphinxext/apigen.py +0 -0
  329. {ipython-9.11.0 → ipython-9.12.0}/docs/sphinxext/configtraits.py +0 -0
  330. {ipython-9.11.0 → ipython-9.12.0}/docs/sphinxext/magics.py +0 -0
  331. {ipython-9.11.0 → ipython-9.12.0}/examples/Embedding/embed_class_long.py +0 -0
  332. {ipython-9.11.0 → ipython-9.12.0}/examples/Embedding/embed_class_short.py +0 -0
  333. {ipython-9.11.0 → ipython-9.12.0}/examples/Embedding/embed_function.py +0 -0
  334. {ipython-9.11.0 → ipython-9.12.0}/examples/Embedding/start_ipython_config.py +0 -0
  335. {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/example-demo.py +0 -0
  336. {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  337. {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  338. {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  339. {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  340. {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  341. {ipython-9.11.0 → ipython-9.12.0}/examples/IPython Kernel/ipython.desktop +0 -0
  342. {ipython-9.11.0 → ipython-9.12.0}/examples/auto_suggest_llm.py +0 -0
  343. {ipython-9.11.0 → ipython-9.12.0}/examples/utils/cwd_prompt.py +0 -0
  344. {ipython-9.11.0 → ipython-9.12.0}/examples/utils/list_pyfiles.ipy +0 -0
  345. {ipython-9.11.0 → ipython-9.12.0}/examples/utils/list_subdirs.ipy +0 -0
  346. {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/SOURCES.txt +0 -0
  347. {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/dependency_links.txt +0 -0
  348. {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/entry_points.txt +0 -0
  349. {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/not-zip-safe +0 -0
  350. {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/requires.txt +0 -0
  351. {ipython-9.11.0 → ipython-9.12.0}/ipython.egg-info/top_level.txt +0 -0
  352. {ipython-9.11.0 → ipython-9.12.0}/long_description.rst +0 -0
  353. {ipython-9.11.0 → ipython-9.12.0}/scripts/ipython.ico +0 -0
  354. {ipython-9.11.0 → ipython-9.12.0}/scripts/ipython_nb.ico +0 -0
  355. {ipython-9.11.0 → ipython-9.12.0}/setup.cfg +0 -0
  356. {ipython-9.11.0 → ipython-9.12.0}/setup.py +0 -0
  357. {ipython-9.11.0 → ipython-9.12.0}/setupbase.py +0 -0
  358. {ipython-9.11.0 → ipython-9.12.0}/tests/2x2.jpg +0 -0
  359. {ipython-9.11.0 → ipython-9.12.0}/tests/2x2.png +0 -0
  360. {ipython-9.11.0 → ipython-9.12.0}/tests/__init__.py +0 -0
  361. {ipython-9.11.0 → ipython-9.12.0}/tests/bad_all.py +0 -0
  362. {ipython-9.11.0 → ipython-9.12.0}/tests/conftest.py +0 -0
  363. {ipython-9.11.0 → ipython-9.12.0}/tests/fake_ext_dir/daft_extension.py +0 -0
  364. {ipython-9.11.0 → ipython-9.12.0}/tests/fake_llm.py +0 -0
  365. {ipython-9.11.0 → ipython-9.12.0}/tests/nonascii.py +0 -0
  366. {ipython-9.11.0 → ipython-9.12.0}/tests/nonascii2.py +0 -0
  367. {ipython-9.11.0 → ipython-9.12.0}/tests/print_argv.py +0 -0
  368. {ipython-9.11.0 → ipython-9.12.0}/tests/refbug.py +0 -0
  369. {ipython-9.11.0 → ipython-9.12.0}/tests/simpleerr.py +0 -0
  370. {ipython-9.11.0 → ipython-9.12.0}/tests/tclass.py +0 -0
  371. {ipython-9.11.0 → ipython-9.12.0}/tests/test.wav +0 -0
  372. {ipython-9.11.0 → ipython-9.12.0}/tests/test_alias.py +0 -0
  373. {ipython-9.11.0 → ipython-9.12.0}/tests/test_application.py +0 -0
  374. {ipython-9.11.0 → ipython-9.12.0}/tests/test_async_helpers.py +0 -0
  375. {ipython-9.11.0 → ipython-9.12.0}/tests/test_autocall.py +0 -0
  376. {ipython-9.11.0 → ipython-9.12.0}/tests/test_backgroundjobs.py +0 -0
  377. {ipython-9.11.0 → ipython-9.12.0}/tests/test_capture.py +0 -0
  378. {ipython-9.11.0 → ipython-9.12.0}/tests/test_clipboard.py +0 -0
  379. {ipython-9.11.0 → ipython-9.12.0}/tests/test_compilerop.py +0 -0
  380. {ipython-9.11.0 → ipython-9.12.0}/tests/test_completerlib.py +0 -0
  381. {ipython-9.11.0 → ipython-9.12.0}/tests/test_cve.py +0 -0
  382. {ipython-9.11.0 → ipython-9.12.0}/tests/test_debug_magic.py +0 -0
  383. {ipython-9.11.0 → ipython-9.12.0}/tests/test_debugger.py +0 -0
  384. {ipython-9.11.0 → ipython-9.12.0}/tests/test_decorators.py +0 -0
  385. {ipython-9.11.0 → ipython-9.12.0}/tests/test_decorators_2.py +0 -0
  386. {ipython-9.11.0 → ipython-9.12.0}/tests/test_deepreload.py +0 -0
  387. {ipython-9.11.0 → ipython-9.12.0}/tests/test_dir2.py +0 -0
  388. {ipython-9.11.0 → ipython-9.12.0}/tests/test_display.py +0 -0
  389. {ipython-9.11.0 → ipython-9.12.0}/tests/test_display_2.py +0 -0
  390. {ipython-9.11.0 → ipython-9.12.0}/tests/test_displayhook.py +0 -0
  391. {ipython-9.11.0 → ipython-9.12.0}/tests/test_editorhooks.py +0 -0
  392. {ipython-9.11.0 → ipython-9.12.0}/tests/test_embed.py +0 -0
  393. {ipython-9.11.0 → ipython-9.12.0}/tests/test_events.py +0 -0
  394. {ipython-9.11.0 → ipython-9.12.0}/tests/test_exceptiongroup_tb.py +0 -0
  395. {ipython-9.11.0 → ipython-9.12.0}/tests/test_extension.py +0 -0
  396. {ipython-9.11.0 → ipython-9.12.0}/tests/test_formatters.py +0 -0
  397. {ipython-9.11.0 → ipython-9.12.0}/tests/test_guarded_eval.py +0 -0
  398. {ipython-9.11.0 → ipython-9.12.0}/tests/test_handlers.py +0 -0
  399. {ipython-9.11.0 → ipython-9.12.0}/tests/test_help.py +0 -0
  400. {ipython-9.11.0 → ipython-9.12.0}/tests/test_history.py +0 -0
  401. {ipython-9.11.0 → ipython-9.12.0}/tests/test_hooks.py +0 -0
  402. {ipython-9.11.0 → ipython-9.12.0}/tests/test_imports.py +0 -0
  403. {ipython-9.11.0 → ipython-9.12.0}/tests/test_importstring.py +0 -0
  404. {ipython-9.11.0 → ipython-9.12.0}/tests/test_inputtransformer2.py +0 -0
  405. {ipython-9.11.0 → ipython-9.12.0}/tests/test_inputtransformer2_line.py +0 -0
  406. {ipython-9.11.0 → ipython-9.12.0}/tests/test_interactiveshell.py +0 -0
  407. {ipython-9.11.0 → ipython-9.12.0}/tests/test_interactivshell.py +0 -0
  408. {ipython-9.11.0 → ipython-9.12.0}/tests/test_io.py +0 -0
  409. {ipython-9.11.0 → ipython-9.12.0}/tests/test_ipunittest.py +0 -0
  410. {ipython-9.11.0 → ipython-9.12.0}/tests/test_latextools.py +0 -0
  411. {ipython-9.11.0 → ipython-9.12.0}/tests/test_logger.py +0 -0
  412. {ipython-9.11.0 → ipython-9.12.0}/tests/test_magic_arguments.py +0 -0
  413. {ipython-9.11.0 → ipython-9.12.0}/tests/test_magic_terminal.py +0 -0
  414. {ipython-9.11.0 → ipython-9.12.0}/tests/test_module_paths.py +0 -0
  415. {ipython-9.11.0 → ipython-9.12.0}/tests/test_oinspect.py +0 -0
  416. {ipython-9.11.0 → ipython-9.12.0}/tests/test_openpy.py +0 -0
  417. {ipython-9.11.0 → ipython-9.12.0}/tests/test_page.py +0 -0
  418. {ipython-9.11.0 → ipython-9.12.0}/tests/test_path.py +0 -0
  419. {ipython-9.11.0 → ipython-9.12.0}/tests/test_paths.py +0 -0
  420. {ipython-9.11.0 → ipython-9.12.0}/tests/test_prefilter.py +0 -0
  421. {ipython-9.11.0 → ipython-9.12.0}/tests/test_pretty.py +0 -0
  422. {ipython-9.11.0 → ipython-9.12.0}/tests/test_process.py +0 -0
  423. {ipython-9.11.0 → ipython-9.12.0}/tests/test_profile.py +0 -0
  424. {ipython-9.11.0 → ipython-9.12.0}/tests/test_pt_inputhooks.py +0 -0
  425. {ipython-9.11.0 → ipython-9.12.0}/tests/test_pycolorize.py +0 -0
  426. {ipython-9.11.0 → ipython-9.12.0}/tests/test_pylabtools.py +0 -0
  427. {ipython-9.11.0 → ipython-9.12.0}/tests/test_qt_loaders.py +0 -0
  428. {ipython-9.11.0 → ipython-9.12.0}/tests/test_run.py +0 -0
  429. {ipython-9.11.0 → ipython-9.12.0}/tests/test_shellapp.py +0 -0
  430. {ipython-9.11.0 → ipython-9.12.0}/tests/test_shortcuts.py +0 -0
  431. {ipython-9.11.0 → ipython-9.12.0}/tests/test_splitinput.py +0 -0
  432. {ipython-9.11.0 → ipython-9.12.0}/tests/test_storemagic.py +0 -0
  433. {ipython-9.11.0 → ipython-9.12.0}/tests/test_sysinfo.py +0 -0
  434. {ipython-9.11.0 → ipython-9.12.0}/tests/test_tempdir.py +0 -0
  435. {ipython-9.11.0 → ipython-9.12.0}/tests/test_text.py +0 -0
  436. {ipython-9.11.0 → ipython-9.12.0}/tests/test_tips.py +0 -0
  437. {ipython-9.11.0 → ipython-9.12.0}/tests/test_tokenutil.py +0 -0
  438. {ipython-9.11.0 → ipython-9.12.0}/tests/test_tools.py +0 -0
  439. {ipython-9.11.0 → ipython-9.12.0}/tests/test_ultratb.py +0 -0
  440. {ipython-9.11.0 → ipython-9.12.0}/tests/test_wildcard.py +0 -0
  441. {ipython-9.11.0 → ipython-9.12.0}/tests/test_zzz_autoreload.py +0 -0
@@ -219,7 +219,7 @@ class AliasManager(Configurable):
219
219
  self.soft_define_alias(name, cmd)
220
220
 
221
221
  @property
222
- def aliases(self):
222
+ def aliases(self) -> list:
223
223
  return [(n, func.cmd) for (n, func) in self.linemagics.items()
224
224
  if isinstance(func, Alias)]
225
225
 
@@ -33,10 +33,11 @@ from traitlets import (
33
33
  )
34
34
 
35
35
  if os.name == "nt":
36
+ # %PROGRAMDATA% is not safe by default, require opt-in to trust it
36
37
  programdata = os.environ.get("PROGRAMDATA", None)
37
- if programdata is not None:
38
+ if os.environ.get("IPYTHON_USE_PROGRAMDATA") == "1" and programdata is not None:
38
39
  SYSTEM_CONFIG_DIRS = [str(Path(programdata) / "ipython")]
39
- else: # PROGRAMDATA is not defined by default on XP.
40
+ else:
40
41
  SYSTEM_CONFIG_DIRS = []
41
42
  else:
42
43
  SYSTEM_CONFIG_DIRS = [
@@ -51,7 +51,7 @@ PyCF_MASK = functools.reduce(operator.or_,
51
51
  # Local utilities
52
52
  #-----------------------------------------------------------------------------
53
53
 
54
- def code_name(code, number=0):
54
+ def code_name(code, number=0) -> str:
55
55
  """ Compute a (probably) unique name for code for caching.
56
56
 
57
57
  This now expects code to be unicode.
@@ -116,7 +116,7 @@ class CachingCompiler(codeop.Compile):
116
116
  """
117
117
  return code_name(transformed_code, number)
118
118
 
119
- def format_code_name(self, name):
119
+ def format_code_name(self, name) -> str:
120
120
  """Return a user-friendly label and name for a code block.
121
121
 
122
122
  Parameters
@@ -444,7 +444,7 @@ class Pdb(OldPdb):
444
444
  self.message(
445
445
  f"More than {self.MAX_CHAINED_EXCEPTION_DEPTH}"
446
446
  " chained exceptions found, not all exceptions"
447
- "will be browsable with `exceptions`."
447
+ " will be browsable with `exceptions`."
448
448
  )
449
449
  break
450
450
  else:
@@ -10,6 +10,7 @@ import atexit
10
10
  import datetime
11
11
  import os
12
12
  import re
13
+ import weakref
13
14
 
14
15
 
15
16
  import threading
@@ -322,12 +323,14 @@ class HistoryAccessor(HistoryAccessorBase):
322
323
  """Connect to the database, and create tables if necessary."""
323
324
  if not self.enabled:
324
325
  self.db = DummyDB()
326
+ self._finalizer = weakref.finalize(self, lambda db: db.close(), self.db)
325
327
  return
326
328
 
327
329
  # use detect_types so that timestamps return datetime objects
328
330
  kwargs = dict(detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
329
331
  kwargs.update(self.connection_options)
330
332
  self.db = sqlite3.connect(str(self.hist_file), **kwargs) # type: ignore [call-overload]
333
+ self._finalizer = weakref.finalize(self, lambda db: db.close(), self.db)
331
334
  with self.db:
332
335
  self.db.execute(
333
336
  """CREATE TABLE IF NOT EXISTS sessions (session integer
@@ -349,10 +352,6 @@ class HistoryAccessor(HistoryAccessorBase):
349
352
  # success! reset corrupt db count
350
353
  self._corrupt_db_counter = 0
351
354
 
352
- def __del__(self) -> None:
353
- if hasattr(self, "db"):
354
- self.db.close()
355
-
356
355
  def writeout_cache(self) -> None:
357
356
  """Overridden by HistoryManager to dump the cache before certain
358
357
  database lookups."""
@@ -721,7 +720,6 @@ class HistoryManager(HistoryAccessor):
721
720
  def __del__(self) -> None:
722
721
  if self.save_thread is not None:
723
722
  self.save_thread.stop()
724
- HistoryAccessor.__del__(self)
725
723
 
726
724
  @classmethod
727
725
  def _stop_thread(cls) -> None:
@@ -50,27 +50,26 @@ class HistoryTrim(BaseIPythonApplication):
50
50
  def start(self):
51
51
  profile_dir = Path(self.profile_dir.location)
52
52
  hist_file = profile_dir / "history.sqlite"
53
- con = sqlite3.connect(hist_file)
54
-
55
- # Grab the recent history from the current database.
56
- inputs = list(con.execute('SELECT session, line, source, source_raw FROM '
57
- 'history ORDER BY session DESC, line DESC LIMIT ?', (self.keep+1,)))
58
- if len(inputs) <= self.keep:
59
- print("There are already at most %d entries in the history database." % self.keep)
60
- print("Not doing anything. Use --keep= argument to keep fewer entries")
61
- return
62
-
63
- print("Trimming history to the most recent %d entries." % self.keep)
64
-
65
- inputs.pop() # Remove the extra element we got to check the length.
66
- inputs.reverse()
67
- if inputs:
68
- first_session = inputs[0][0]
69
- outputs = list(con.execute('SELECT session, line, output FROM '
70
- 'output_history WHERE session >= ?', (first_session,)))
71
- sessions = list(con.execute('SELECT session, start, end, num_cmds, remark FROM '
72
- 'sessions WHERE session >= ?', (first_session,)))
73
- con.close()
53
+ with sqlite3.connect(hist_file) as con:
54
+
55
+ # Grab the recent history from the current database.
56
+ inputs = list(con.execute('SELECT session, line, source, source_raw FROM '
57
+ 'history ORDER BY session DESC, line DESC LIMIT ?', (self.keep+1,)))
58
+ if len(inputs) <= self.keep:
59
+ print("There are already at most %d entries in the history database." % self.keep)
60
+ print("Not doing anything. Use --keep= argument to keep fewer entries")
61
+ return
62
+
63
+ print("Trimming history to the most recent %d entries." % self.keep)
64
+
65
+ inputs.pop() # Remove the extra element we got to check the length.
66
+ inputs.reverse()
67
+ if inputs:
68
+ first_session = inputs[0][0]
69
+ outputs = list(con.execute('SELECT session, line, output FROM '
70
+ 'output_history WHERE session >= ?', (first_session,)))
71
+ sessions = list(con.execute('SELECT session, start, end, num_cmds, remark FROM '
72
+ 'sessions WHERE session >= ?', (first_session,)))
74
73
 
75
74
  # Create the new history database.
76
75
  new_hist_file = profile_dir / "history.sqlite.new"
@@ -79,26 +78,25 @@ class HistoryTrim(BaseIPythonApplication):
79
78
  # Make sure we don't interfere with an existing file.
80
79
  i += 1
81
80
  new_hist_file = profile_dir / ("history.sqlite.new" + str(i))
82
- new_db = sqlite3.connect(new_hist_file)
83
- new_db.execute("""CREATE TABLE IF NOT EXISTS sessions (session integer
84
- primary key autoincrement, start timestamp,
85
- end timestamp, num_cmds integer, remark text)""")
86
- new_db.execute("""CREATE TABLE IF NOT EXISTS history
87
- (session integer, line integer, source text, source_raw text,
88
- PRIMARY KEY (session, line))""")
89
- new_db.execute("""CREATE TABLE IF NOT EXISTS output_history
90
- (session integer, line integer, output text,
91
- PRIMARY KEY (session, line))""")
92
- new_db.commit()
93
-
94
-
95
- if inputs:
96
- with new_db:
97
- # Add the recent history into the new database.
98
- new_db.executemany('insert into sessions values (?,?,?,?,?)', sessions)
99
- new_db.executemany('insert into history values (?,?,?,?)', inputs)
100
- new_db.executemany('insert into output_history values (?,?,?)', outputs)
101
- new_db.close()
81
+ with sqlite3.connect(new_hist_file) as new_db:
82
+ new_db.execute("""CREATE TABLE IF NOT EXISTS sessions (session integer
83
+ primary key autoincrement, start timestamp,
84
+ end timestamp, num_cmds integer, remark text)""")
85
+ new_db.execute("""CREATE TABLE IF NOT EXISTS history
86
+ (session integer, line integer, source text, source_raw text,
87
+ PRIMARY KEY (session, line))""")
88
+ new_db.execute("""CREATE TABLE IF NOT EXISTS output_history
89
+ (session integer, line integer, output text,
90
+ PRIMARY KEY (session, line))""")
91
+ new_db.commit()
92
+
93
+
94
+ if inputs:
95
+ with new_db:
96
+ # Add the recent history into the new database.
97
+ new_db.executemany('insert into sessions values (?,?,?,?,?)', sessions)
98
+ new_db.executemany('insert into history values (?,?,?,?)', inputs)
99
+ new_db.executemany('insert into output_history values (?,?,?)', outputs)
102
100
 
103
101
  if self.backup:
104
102
  i = 1
@@ -346,9 +346,19 @@ Currently the magic system has the following functions:""",
346
346
 
347
347
  Valid modes: Plain, Context, Verbose, Minimal, and Docs.
348
348
 
349
- If called without arguments, acts as a toggle.
350
-
351
- When in verbose mode the value `--show` (and `--hide`)
349
+ - ``Plain``: similar to Python's default traceback.
350
+ - ``Context``: shows several lines of surrounding context for each
351
+ frame in the traceback.
352
+ - ``Verbose``: like Context, but also displays local variable values
353
+ in each frame.
354
+ - ``Minimal``: shows only the exception type and message, without
355
+ a traceback.
356
+ - ``Docs``: a stripped-down version of Verbose, designed for use
357
+ when running doctests.
358
+
359
+ If called without arguments, cycles through the available modes.
360
+
361
+ When in verbose mode the value ``--show`` (and ``--hide``)
352
362
  will respectively show (or hide) frames with ``__tracebackhide__ =
353
363
  True`` value set.
354
364
  """
@@ -16,7 +16,7 @@
16
16
  # release. 'dev' as a _version_extra string means this is a development
17
17
  # version
18
18
  _version_major = 9
19
- _version_minor = 11
19
+ _version_minor = 12
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "b2"
@@ -203,7 +203,7 @@ def _tokens_filename(
203
203
  ]
204
204
  else:
205
205
  name = util_path.compress_user(
206
- py3compat.cast_unicode(file, util_path.fs_encoding)
206
+ py3compat.cast_unicode(file or "", util_path.fs_encoding)
207
207
  )
208
208
  if lineno is None:
209
209
  return [
@@ -539,8 +539,13 @@ class VerboseTB(TBTools):
539
539
 
540
540
  assert isinstance(frame_info.lineno, int)
541
541
  args, varargs, varkw, locals_ = inspect.getargvalues(frame_info.frame)
542
+ func: str
542
543
  if frame_info.executing is not None:
543
544
  func = frame_info.executing.code_qualname()
545
+ elif frame_info.code is not None:
546
+ func = (
547
+ getattr(frame_info.code, "co_qualname", None) or frame_info.code.co_name
548
+ )
544
549
  else:
545
550
  func = "?"
546
551
  if func == "<module>":
@@ -609,12 +614,14 @@ class VerboseTB(TBTools):
609
614
  if frame_info._sd is None:
610
615
  # fast fallback if file is too long
611
616
  assert frame_info.filename is not None
612
- level_tokens = [
613
- (Token.FilenameEm, util_path.compress_user(frame_info.filename)),
614
- (Token, " "),
615
- (Token, call),
616
- (Token, "\n"),
617
- ]
617
+ level_tokens = (
618
+ _tokens_filename(True, frame_info.filename, lineno=frame_info.lineno)
619
+ + [
620
+ (Token, ", " if call else ""),
621
+ (Token, call),
622
+ (Token, "\n"),
623
+ ]
624
+ )
618
625
 
619
626
  _line_format = Parser(theme_name=self._theme_name).format2
620
627
  assert isinstance(frame_info.code, types.CodeType)
@@ -821,10 +828,9 @@ class VerboseTB(TBTools):
821
828
  pygments_formatter=formatter,
822
829
  )
823
830
 
824
- # Let's estimate the amount of code we will have to parse/highlight.
831
+ # Collect traceback frames and their module sizes.
825
832
  cf: Optional[TracebackType] = etb
826
- max_len = 0
827
- tbs = []
833
+ tbs: list[tuple[TracebackType, int]] = []
828
834
  while cf is not None:
829
835
  try:
830
836
  mod = inspect.getmodule(cf.tb_frame)
@@ -834,31 +840,58 @@ class VerboseTB(TBTools):
834
840
  if root_name == "IPython":
835
841
  cf = cf.tb_next
836
842
  continue
837
- max_len = get_line_number_of_frame(cf.tb_frame)
838
-
843
+ frame_len = get_line_number_of_frame(cf.tb_frame)
844
+ if frame_len == 0:
845
+ # File not found or not a .py file (e.g. <string> from
846
+ # exec()). Check if source is actually available; if not,
847
+ # force the fast path so that FrameInfo's "Could not get
848
+ # source" fallback is rendered.
849
+ try:
850
+ inspect.getsourcelines(cf.tb_frame)
851
+ except OSError:
852
+ frame_len = FAST_THRESHOLD + 1
839
853
  except OSError:
840
- max_len = 0
841
- max_len = max(max_len, max_len)
842
- tbs.append(cf)
843
- cf = getattr(cf, "tb_next", None)
844
-
845
- if max_len > FAST_THRESHOLD:
846
- FIs: list[FrameInfo] = []
847
- for tb in tbs:
854
+ frame_len = FAST_THRESHOLD + 1
855
+ assert cf is not None # narrowing for mypy; guarded by while condition
856
+ tbs.append((cf, frame_len))
857
+ cf = cf.tb_next
858
+
859
+ # Group consecutive frames by fast/slow and process each group.
860
+ # Consecutive slow frames must be processed together so that
861
+ # stack_data can detect RepeatedFrames (recursion collapsing).
862
+ FIs: list[FrameInfo] = []
863
+ i = 0
864
+ while i < len(tbs):
865
+ tb, frame_len = tbs[i]
866
+ if frame_len > FAST_THRESHOLD:
848
867
  frame = tb.tb_frame # type: ignore[union-attr]
849
868
  lineno = frame.f_lineno
850
869
  code = frame.f_code
851
870
  filename = code.co_filename
852
- # TODO: Here we need to use before/after/
853
871
  FIs.append(
854
872
  FrameInfo(
855
873
  "Raw frame", filename, lineno, frame, code, context=context
856
874
  )
857
875
  )
858
- return FIs
859
- res = list(stack_data.FrameInfo.stack_data(etb, options=options))[tb_offset:]
860
- res2 = [FrameInfo._from_stack_data_FrameInfo(r) for r in res]
861
- return res2
876
+ i += 1
877
+ else:
878
+ # Collect the consecutive run of slow frames
879
+ group_start = i
880
+ while i < len(tbs) and tbs[i][1] <= FAST_THRESHOLD:
881
+ i += 1
882
+ # Build set of frame objects in this group for filtering
883
+ group_frames = {tbs[j][0].tb_frame for j in range(group_start, i)}
884
+ # Process via stack_data starting from the first tb in the group
885
+ for sd_fi in stack_data.FrameInfo.stack_data(
886
+ tbs[group_start][0], options=options
887
+ ):
888
+ # stack_data follows tb_next through the full chain,
889
+ # including IPython frames we skipped during collection.
890
+ # Filter those out, but always keep RepeatedFrames.
891
+ if isinstance(sd_fi, stack_data.RepeatedFrames) or sd_fi.frame in group_frames:
892
+ FIs.append(FrameInfo._from_stack_data_FrameInfo(sd_fi))
893
+
894
+ return FIs
862
895
 
863
896
  def structured_traceback(
864
897
  self,
@@ -1,6 +1,6 @@
1
1
  """Terminal input and output prompts."""
2
2
 
3
- from pygments.token import Token
3
+ from pygments.token import _TokenType, Token
4
4
  import sys
5
5
 
6
6
  from IPython.core.displayhook import DisplayHook
@@ -8,10 +8,14 @@ from IPython.core.displayhook import DisplayHook
8
8
  from prompt_toolkit.formatted_text import fragment_list_width, PygmentsTokens
9
9
  from prompt_toolkit.shortcuts import print_formatted_text
10
10
  from prompt_toolkit.enums import EditingMode
11
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
12
+
13
+ if TYPE_CHECKING:
14
+ from IPython.terminal.interactiveshell import TerminalInteractiveShell
11
15
 
12
16
 
13
17
  class Prompts:
14
- def __init__(self, shell):
18
+ def __init__(self, shell: "TerminalInteractiveShell"):
15
19
  self.shell = shell
16
20
 
17
21
  def vi_mode(self):
@@ -84,7 +88,7 @@ class Prompts:
84
88
  (Token.Prompt, ('-' * (width - 2)) + '> '),
85
89
  ]
86
90
 
87
- def out_prompt_tokens(self):
91
+ def out_prompt_tokens(self) -> List[Tuple[_TokenType, str]]:
88
92
  return [
89
93
  (Token.OutPrompt, 'Out['),
90
94
  (Token.OutPromptNum, str(self.shell.execution_count - 1)),
@@ -128,7 +132,7 @@ class RichPromptDisplayHook(DisplayHook):
128
132
  else:
129
133
  sys.stdout.write(prompt_txt)
130
134
 
131
- def write_format_data(self, format_dict, md_dict=None) -> None:
135
+ def write_format_data(self, format_dict: Dict[str, str], md_dict: Optional[Dict[Any, Any]]=None) -> None:
132
136
  assert self.shell is not None
133
137
  if self.shell.mime_renderers:
134
138
 
@@ -9,7 +9,7 @@ import ast
9
9
  import re
10
10
  import signal
11
11
  import sys
12
- from typing import Dict, Union
12
+ from typing import Optional, Dict, Union
13
13
  from collections.abc import Callable
14
14
 
15
15
  from prompt_toolkit.application.current import get_app
@@ -40,7 +40,7 @@ def cursor_in_leading_ws():
40
40
  return (not before) or before.isspace()
41
41
 
42
42
 
43
- def has_focus(value: FocusableElement):
43
+ def has_focus(value: FocusableElement) -> Condition:
44
44
  """Wrapper around has_focus adding a nice `__name__` to tester function"""
45
45
  tester = has_focus_impl(value).func
46
46
  tester.__name__ = f"is_focused({value})"
@@ -102,7 +102,7 @@ _preceding_text_cache: Dict[Union[str, Callable], Condition] = {}
102
102
  _following_text_cache: Dict[Union[str, Callable], Condition] = {}
103
103
 
104
104
 
105
- def preceding_text(pattern: Union[str, Callable]):
105
+ def preceding_text(pattern: Union[str, Callable]) -> Condition:
106
106
  if pattern in _preceding_text_cache:
107
107
  return _preceding_text_cache[pattern]
108
108
 
@@ -129,7 +129,7 @@ def preceding_text(pattern: Union[str, Callable]):
129
129
  return condition
130
130
 
131
131
 
132
- def following_text(pattern):
132
+ def following_text(pattern: str) -> Condition:
133
133
  try:
134
134
  return _following_text_cache[pattern]
135
135
  except KeyError:
@@ -284,7 +284,7 @@ KEYBINDING_FILTERS = {
284
284
  }
285
285
 
286
286
 
287
- def eval_node(node: Union[ast.AST, None]):
287
+ def eval_node(node: Union[ast.AST, None]) -> Optional[Filter]:
288
288
  if node is None:
289
289
  return None
290
290
  if isinstance(node, ast.Expression):
@@ -315,7 +315,7 @@ def eval_node(node: Union[ast.AST, None]):
315
315
  raise ValueError("Unhandled node", ast.dump(node))
316
316
 
317
317
 
318
- def filter_from_string(code: str):
318
+ def filter_from_string(code: str) -> Union[Condition, Filter]:
319
319
  expression = ast.parse(code, mode="eval")
320
320
  return eval_node(expression)
321
321
 
@@ -8,8 +8,10 @@ import pytest
8
8
 
9
9
  # Expose the unittest-driven decorators
10
10
  from .ipunittest import ipdoctest, ipdocstring
11
+ from _pytest.mark.structures import MarkDecorator
12
+ from typing import Optional
11
13
 
12
- def skipif(skip_condition, msg=None):
14
+ def skipif(skip_condition: bool, msg: Optional[str]=None) -> MarkDecorator:
13
15
  """Make function raise SkipTest exception if skip_condition is true
14
16
 
15
17
  Parameters
@@ -39,7 +41,7 @@ def skipif(skip_condition, msg=None):
39
41
 
40
42
  # A version with the condition set to true, common case just to attach a message
41
43
  # to a skip decorator
42
- def skip(msg=None):
44
+ def skip(msg: Optional[str]=None) -> MarkDecorator:
43
45
  """Decorator factory - mark a test function for skipping from test suite.
44
46
 
45
47
  Parameters
@@ -61,7 +63,7 @@ def skip(msg=None):
61
63
  return skipif(True, msg)
62
64
 
63
65
 
64
- def onlyif(condition, msg):
66
+ def onlyif(condition: bool, msg: str) -> MarkDecorator:
65
67
  """The reverse from skipif, see skipif for details."""
66
68
 
67
69
  return skipif(not condition, msg)
@@ -69,7 +71,7 @@ def onlyif(condition, msg):
69
71
 
70
72
  # -----------------------------------------------------------------------------
71
73
  # Utility functions for decorators
72
- def module_not_available(module):
74
+ def module_not_available(module: str) -> bool:
73
75
  """Can module be imported? Returns true if module does NOT import.
74
76
 
75
77
  This is used to make a decorator to skip tests that require module to be
@@ -122,7 +122,7 @@ class Doc2UnitTester:
122
122
  no attempt is made at turning it into a singleton, there is no need for
123
123
  that).
124
124
  """
125
- def __init__(self, verbose=False):
125
+ def __init__(self, verbose: bool=False):
126
126
  """New decorator.
127
127
 
128
128
  Parameters
@@ -300,7 +300,7 @@ class IPDoctestItem(pytest.Item):
300
300
  name: str,
301
301
  runner: "IPDocTestRunner",
302
302
  dtest: "doctest.DocTest",
303
- ):
303
+ ) -> "IPDoctestItem":
304
304
  # incompatible signature due to imposed limits on subclass
305
305
  """The public named constructor."""
306
306
  return super().from_parent(name=name, parent=parent, runner=runner, dtest=dtest)
@@ -475,7 +475,7 @@ def _get_flag_lookup() -> Dict[str, int]:
475
475
  )
476
476
 
477
477
 
478
- def get_optionflags(parent):
478
+ def get_optionflags(parent: "IPDoctestModule") -> int:
479
479
  optionflags_str = parent.config.getini("ipdoctest_optionflags")
480
480
  flag_lookup_table = _get_flag_lookup()
481
481
  flag_acc = 0
@@ -484,7 +484,7 @@ def get_optionflags(parent):
484
484
  return flag_acc
485
485
 
486
486
 
487
- def _get_continue_on_failure(config):
487
+ def _get_continue_on_failure(config: Config) -> bool:
488
488
  continue_on_failure = config.getvalue("ipdoctest_continue_on_failure")
489
489
  if continue_on_failure:
490
490
  # We need to turn off this if we use pdb since we should stop at
@@ -4,12 +4,13 @@ The IPython.testing.decorators module triggers various extra imports, including
4
4
  numpy and sympy if they're present. Since this decorator is used in core parts
5
5
  of IPython, it's in a separate module so that running IPython doesn't trigger
6
6
  those imports."""
7
+ from typing import Any
7
8
 
8
9
  # Copyright (C) IPython Development Team
9
10
  # Distributed under the terms of the Modified BSD License.
10
11
 
11
12
 
12
- def skip_doctest(f):
13
+ def skip_doctest(f: Any) -> Any:
13
14
  """Decorator - mark a function or method for skipping its doctest.
14
15
 
15
16
  This decorator allows you to mark a function whose docstring you wish to
@@ -29,6 +29,8 @@ from IPython.utils import py3compat
29
29
 
30
30
  from . import decorators as dec
31
31
  from . import skipdoctest
32
+ from types import TracebackType
33
+ from typing import List, Optional, Tuple, Type
32
34
 
33
35
 
34
36
  # The docstring for full_path doctests differently on win32 (different path
@@ -67,7 +69,7 @@ def full_path(startPath: str, files: list[str]) -> list[str]:
67
69
  return [ os.path.join(base,f) for f in files ]
68
70
 
69
71
 
70
- def parse_test_output(txt):
72
+ def parse_test_output(txt: str) -> Tuple[int, int]:
71
73
  """Parse the output of a test run and return errors, failures.
72
74
 
73
75
  Parameters
@@ -113,7 +115,7 @@ def parse_test_output(txt):
113
115
  parse_test_output.__test__ = False
114
116
 
115
117
 
116
- def default_argv():
118
+ def default_argv() -> List[str]:
117
119
  """Return a valid default argv for creating testing instances of ipython"""
118
120
 
119
121
  return [
@@ -126,7 +128,7 @@ def default_argv():
126
128
  ]
127
129
 
128
130
 
129
- def default_config():
131
+ def default_config() -> Config:
130
132
  """Return a config object with good defaults for testing."""
131
133
  config = Config()
132
134
  config.TerminalInteractiveShell.colors = "nocolor"
@@ -139,7 +141,7 @@ def default_config():
139
141
  return config
140
142
 
141
143
 
142
- def get_ipython_cmd(as_string=False):
144
+ def get_ipython_cmd(as_string: bool=False) -> List[str]:
143
145
  """
144
146
  Return appropriate IPython command line name. By default, this will return
145
147
  a list that can be used with subprocess.Popen, for example, but passing
@@ -157,7 +159,7 @@ def get_ipython_cmd(as_string=False):
157
159
 
158
160
  return ipython_cmd
159
161
 
160
- def ipexec(fname, options=None, commands=()):
162
+ def ipexec(fname: str, options: Optional[List[str]]=None, commands: Tuple[str, ...]=()) -> Tuple[str, str]:
161
163
  """Utility to call 'ipython filename'.
162
164
 
163
165
  Starts IPython with a minimal and safe configuration to make startup as fast
@@ -215,8 +217,8 @@ def ipexec(fname, options=None, commands=()):
215
217
  return out, err
216
218
 
217
219
 
218
- def ipexec_validate(fname, expected_out, expected_err='',
219
- options=None, commands=()):
220
+ def ipexec_validate(fname: str, expected_out: str, expected_err: str='',
221
+ options: Optional[List[str]]=None, commands: Tuple[str, ...]=()):
220
222
  """Utility to call 'ipython filename' and validate output/error.
221
223
 
222
224
  This function raises an AssertionError if the validation fails.
@@ -267,7 +269,7 @@ class TempFileMixin(unittest.TestCase):
267
269
 
268
270
  Meant as a mixin class for test cases."""
269
271
 
270
- def mktmp(self, src, ext='.py'):
272
+ def mktmp(self, src: str, ext: str='.py'):
271
273
  """Make a valid python temp file."""
272
274
  fname = temp_pyfile(src, ext)
273
275
  if not hasattr(self, 'tmps'):
@@ -318,7 +320,7 @@ class AssertPrints:
318
320
  abcd
319
321
  def
320
322
  """
321
- def __init__(self, s, channel='stdout', suppress=True):
323
+ def __init__(self, s: str, channel: str='stdout', suppress: bool=True):
322
324
  self.s = s
323
325
  if isinstance(self.s, (str, _re_type)):
324
326
  self.s = [self.s]
@@ -331,7 +333,7 @@ class AssertPrints:
331
333
  self.tee = Tee(self.buffer, channel=self.channel)
332
334
  setattr(sys, self.channel, self.buffer if self.suppress else self.tee)
333
335
 
334
- def __exit__(self, etype, value, traceback):
336
+ def __exit__(self, etype: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[TracebackType]):
335
337
  __tracebackhide__ = True
336
338
 
337
339
  try:
@@ -1,2 +1,2 @@
1
1
  # GENERATED BY setup.py
2
- commit = "f5e51b8"
2
+ commit = "d9c6e31"