ipython 8.29.0__tar.gz → 8.31.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 (497) hide show
  1. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/completer.py +52 -20
  2. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/crashhandler.py +33 -21
  3. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/debugger.py +1 -1
  4. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/display.py +7 -4
  5. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/formatters.py +92 -33
  6. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/guarded_eval.py +6 -9
  7. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/inputsplitter.py +1 -0
  8. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/inputtransformer.py +35 -2
  9. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/inputtransformer2.py +4 -1
  10. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/basic.py +2 -2
  11. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/logging.py +2 -2
  12. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/prompts.py +3 -1
  13. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/release.py +1 -1
  14. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/nonascii2.py +2 -2
  15. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_completer.py +95 -45
  16. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_formatters.py +1 -2
  17. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_inputtransformer2.py +1 -0
  18. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_interactiveshell.py +1 -1
  19. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_logger.py +1 -1
  20. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_magic.py +2 -2
  21. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_paths.py +10 -8
  22. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_run.py +3 -3
  23. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_ultratb.py +4 -3
  24. {ipython-8.29.0 → ipython-8.31.0}/IPython/extensions/tests/test_storemagic.py +29 -24
  25. {ipython-8.29.0 → ipython-8.31.0}/IPython/external/qt_loaders.py +1 -0
  26. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/__init__.py +2 -2
  27. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/clipboard.py +1 -0
  28. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/latextools.py +4 -4
  29. {ipython-8.29.0 → ipython-8.31.0}/IPython/sphinxext/custom_doctests.py +1 -1
  30. {ipython-8.29.0 → ipython-8.31.0}/IPython/sphinxext/ipython_directive.py +16 -14
  31. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/interactiveshell.py +21 -12
  32. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/shortcuts/__init__.py +8 -0
  33. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/shortcuts/auto_match.py +1 -0
  34. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/tests/__init__.py +2 -2
  35. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/_process_cli.py +3 -1
  36. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/_process_win32.py +1 -1
  37. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/_sysinfo.py +1 -1
  38. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/dir2.py +2 -2
  39. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/sysinfo.py +1 -1
  40. {ipython-8.29.0/ipython.egg-info → ipython-8.31.0}/PKG-INFO +1 -1
  41. {ipython-8.29.0 → ipython-8.31.0}/docs/source/conf.py +1 -1
  42. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/inputtransforms.rst +2 -2
  43. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/integrating.rst +4 -2
  44. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/magics.rst +1 -1
  45. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version8.rst +133 -50
  46. {ipython-8.29.0 → ipython-8.31.0/ipython.egg-info}/PKG-INFO +1 -1
  47. {ipython-8.29.0 → ipython-8.31.0}/pyproject.toml +17 -5
  48. {ipython-8.29.0 → ipython-8.31.0}/.flake8 +0 -0
  49. {ipython-8.29.0 → ipython-8.31.0}/.mailmap +0 -0
  50. {ipython-8.29.0 → ipython-8.31.0}/.pre-commit-config.yaml +0 -0
  51. {ipython-8.29.0 → ipython-8.31.0}/COPYING.rst +0 -0
  52. {ipython-8.29.0 → ipython-8.31.0}/IPython/__init__.py +0 -0
  53. {ipython-8.29.0 → ipython-8.31.0}/IPython/__main__.py +0 -0
  54. {ipython-8.29.0 → ipython-8.31.0}/IPython/conftest.py +0 -0
  55. {ipython-8.29.0 → ipython-8.31.0}/IPython/consoleapp.py +0 -0
  56. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/__init__.py +0 -0
  57. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/alias.py +0 -0
  58. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/application.py +0 -0
  59. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/async_helpers.py +0 -0
  60. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/autocall.py +0 -0
  61. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/builtin_trap.py +0 -0
  62. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/compilerop.py +0 -0
  63. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/completerlib.py +0 -0
  64. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/display_functions.py +0 -0
  65. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/display_trap.py +0 -0
  66. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/displayhook.py +0 -0
  67. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/displaypub.py +0 -0
  68. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/error.py +0 -0
  69. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/events.py +0 -0
  70. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/excolors.py +0 -0
  71. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/extensions.py +0 -0
  72. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/getipython.py +0 -0
  73. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/history.py +0 -0
  74. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/historyapp.py +0 -0
  75. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/hooks.py +0 -0
  76. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/interactiveshell.py +0 -0
  77. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/latex_symbols.py +0 -0
  78. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/logger.py +0 -0
  79. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/macro.py +0 -0
  80. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magic.py +0 -0
  81. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magic_arguments.py +0 -0
  82. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/__init__.py +0 -0
  83. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/ast_mod.py +0 -0
  84. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/auto.py +0 -0
  85. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/code.py +0 -0
  86. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/config.py +0 -0
  87. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/display.py +0 -0
  88. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/execution.py +0 -0
  89. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/extension.py +0 -0
  90. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/history.py +0 -0
  91. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/namespace.py +0 -0
  92. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/osm.py +0 -0
  93. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/packaging.py +0 -0
  94. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/pylab.py +0 -0
  95. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/magics/script.py +0 -0
  96. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/oinspect.py +0 -0
  97. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/page.py +0 -0
  98. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/payload.py +0 -0
  99. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/payloadpage.py +0 -0
  100. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/prefilter.py +0 -0
  101. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/profile/README_STARTUP +0 -0
  102. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/profileapp.py +0 -0
  103. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/profiledir.py +0 -0
  104. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/pylabtools.py +0 -0
  105. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/shellapp.py +0 -0
  106. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/splitinput.py +0 -0
  107. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/2x2.jpg +0 -0
  108. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/2x2.png +0 -0
  109. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/__init__.py +0 -0
  110. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/bad_all.py +0 -0
  111. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
  112. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/nonascii.py +0 -0
  113. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/print_argv.py +0 -0
  114. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/refbug.py +0 -0
  115. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/simpleerr.py +0 -0
  116. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/tclass.py +0 -0
  117. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_alias.py +0 -0
  118. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_application.py +0 -0
  119. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_async_helpers.py +0 -0
  120. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_autocall.py +0 -0
  121. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_compilerop.py +0 -0
  122. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_completerlib.py +0 -0
  123. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_debugger.py +0 -0
  124. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_display.py +0 -0
  125. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_displayhook.py +0 -0
  126. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_events.py +0 -0
  127. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
  128. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_extension.py +0 -0
  129. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_guarded_eval.py +0 -0
  130. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_handlers.py +0 -0
  131. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_history.py +0 -0
  132. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_hooks.py +0 -0
  133. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_imports.py +0 -0
  134. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_inputsplitter.py +0 -0
  135. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_inputtransformer.py +0 -0
  136. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
  137. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_iplib.py +0 -0
  138. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_magic_arguments.py +0 -0
  139. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_magic_terminal.py +0 -0
  140. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_oinspect.py +0 -0
  141. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_page.py +0 -0
  142. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_prefilter.py +0 -0
  143. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_profile.py +0 -0
  144. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_prompts.py +0 -0
  145. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_pylabtools.py +0 -0
  146. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_shellapp.py +0 -0
  147. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/tests/test_splitinput.py +0 -0
  148. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/ultratb.py +0 -0
  149. {ipython-8.29.0 → ipython-8.31.0}/IPython/core/usage.py +0 -0
  150. {ipython-8.29.0 → ipython-8.31.0}/IPython/display.py +0 -0
  151. {ipython-8.29.0 → ipython-8.31.0}/IPython/extensions/__init__.py +0 -0
  152. {ipython-8.29.0 → ipython-8.31.0}/IPython/extensions/autoreload.py +0 -0
  153. {ipython-8.29.0 → ipython-8.31.0}/IPython/extensions/storemagic.py +0 -0
  154. {ipython-8.29.0 → ipython-8.31.0}/IPython/extensions/tests/__init__.py +0 -0
  155. {ipython-8.29.0 → ipython-8.31.0}/IPython/extensions/tests/test_autoreload.py +0 -0
  156. {ipython-8.29.0 → ipython-8.31.0}/IPython/external/__init__.py +0 -0
  157. {ipython-8.29.0 → ipython-8.31.0}/IPython/external/qt_for_kernel.py +0 -0
  158. {ipython-8.29.0 → ipython-8.31.0}/IPython/external/tests/__init__.py +0 -0
  159. {ipython-8.29.0 → ipython-8.31.0}/IPython/external/tests/test_qt_loaders.py +0 -0
  160. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/backgroundjobs.py +0 -0
  161. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/deepreload.py +0 -0
  162. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/demo.py +0 -0
  163. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/display.py +0 -0
  164. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/editorhooks.py +0 -0
  165. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/guisupport.py +0 -0
  166. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/lexers.py +0 -0
  167. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/pretty.py +0 -0
  168. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/__init__.py +0 -0
  169. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test.wav +0 -0
  170. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
  171. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_clipboard.py +0 -0
  172. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_deepreload.py +0 -0
  173. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_display.py +0 -0
  174. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_editorhooks.py +0 -0
  175. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_imports.py +0 -0
  176. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_latextools.py +0 -0
  177. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_lexers.py +0 -0
  178. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_pretty.py +0 -0
  179. {ipython-8.29.0 → ipython-8.31.0}/IPython/lib/tests/test_pygments.py +0 -0
  180. {ipython-8.29.0 → ipython-8.31.0}/IPython/paths.py +0 -0
  181. {ipython-8.29.0 → ipython-8.31.0}/IPython/py.typed +0 -0
  182. {ipython-8.29.0 → ipython-8.31.0}/IPython/sphinxext/__init__.py +0 -0
  183. {ipython-8.29.0 → ipython-8.31.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  184. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/__init__.py +0 -0
  185. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/console.py +0 -0
  186. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/debugger.py +0 -0
  187. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/embed.py +0 -0
  188. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/ipapp.py +0 -0
  189. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/magics.py +0 -0
  190. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/prompts.py +0 -0
  191. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  192. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  193. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  194. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  195. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  196. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  197. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  198. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  199. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  200. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  201. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  202. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/ptutils.py +0 -0
  203. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
  204. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/shortcuts/filters.py +0 -0
  205. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/tests/__init__.py +0 -0
  206. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
  207. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/tests/test_embed.py +0 -0
  208. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/tests/test_help.py +0 -0
  209. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
  210. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
  211. {ipython-8.29.0 → ipython-8.31.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
  212. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/__init__.py +0 -0
  213. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/decorators.py +0 -0
  214. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/globalipapp.py +0 -0
  215. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/ipunittest.py +0 -0
  216. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/Makefile +0 -0
  217. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/README.txt +0 -0
  218. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/__init__.py +0 -0
  219. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/dtexample.py +0 -0
  220. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  221. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  222. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/setup.py +0 -0
  223. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/simple.py +0 -0
  224. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/simplevars.py +0 -0
  225. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/test_combo.txt +0 -0
  226. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/test_example.txt +0 -0
  227. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  228. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  229. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/plugin/test_refs.py +0 -0
  230. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/skipdoctest.py +0 -0
  231. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/tests/test_decorators.py +0 -0
  232. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/tests/test_ipunittest.py +0 -0
  233. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/tests/test_tools.py +0 -0
  234. {ipython-8.29.0 → ipython-8.31.0}/IPython/testing/tools.py +0 -0
  235. {ipython-8.29.0 → ipython-8.31.0}/IPython/tests/cve.py +0 -0
  236. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/PyColorize.py +0 -0
  237. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/__init__.py +0 -0
  238. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/_process_common.py +0 -0
  239. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/_process_emscripten.py +0 -0
  240. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/_process_posix.py +0 -0
  241. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/_process_win32_controller.py +0 -0
  242. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/capture.py +0 -0
  243. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/colorable.py +0 -0
  244. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/coloransi.py +0 -0
  245. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/contexts.py +0 -0
  246. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/daemonize.py +0 -0
  247. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/data.py +0 -0
  248. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/decorators.py +0 -0
  249. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/docs.py +0 -0
  250. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/encoding.py +0 -0
  251. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/eventful.py +0 -0
  252. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/frame.py +0 -0
  253. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/generics.py +0 -0
  254. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/importstring.py +0 -0
  255. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/io.py +0 -0
  256. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/ipstruct.py +0 -0
  257. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/jsonutil.py +0 -0
  258. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/localinterfaces.py +0 -0
  259. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/log.py +0 -0
  260. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/module_paths.py +0 -0
  261. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/openpy.py +0 -0
  262. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/path.py +0 -0
  263. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/process.py +0 -0
  264. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/py3compat.py +0 -0
  265. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/sentinel.py +0 -0
  266. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/shimmodule.py +0 -0
  267. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/signatures.py +0 -0
  268. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/strdispatch.py +0 -0
  269. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/syspathcontext.py +0 -0
  270. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tempdir.py +0 -0
  271. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/terminal.py +0 -0
  272. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/__init__.py +0 -0
  273. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_capture.py +0 -0
  274. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_decorators.py +0 -0
  275. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_deprecated.py +0 -0
  276. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_dir2.py +0 -0
  277. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_imports.py +0 -0
  278. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_importstring.py +0 -0
  279. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_io.py +0 -0
  280. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_module_paths.py +0 -0
  281. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_openpy.py +0 -0
  282. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_path.py +0 -0
  283. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_process.py +0 -0
  284. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_pycolorize.py +0 -0
  285. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_shimmodule.py +0 -0
  286. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_sysinfo.py +0 -0
  287. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_tempdir.py +0 -0
  288. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_text.py +0 -0
  289. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_tokenutil.py +0 -0
  290. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tests/test_wildcard.py +0 -0
  291. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/text.py +0 -0
  292. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/timing.py +0 -0
  293. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tokenutil.py +0 -0
  294. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/traitlets.py +0 -0
  295. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/tz.py +0 -0
  296. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/ulinecache.py +0 -0
  297. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/version.py +0 -0
  298. {ipython-8.29.0 → ipython-8.31.0}/IPython/utils/wildcard.py +0 -0
  299. {ipython-8.29.0 → ipython-8.31.0}/LICENSE +0 -0
  300. {ipython-8.29.0 → ipython-8.31.0}/MANIFEST.in +0 -0
  301. {ipython-8.29.0 → ipython-8.31.0}/README.rst +0 -0
  302. {ipython-8.29.0 → ipython-8.31.0}/_build_meta.py +0 -0
  303. {ipython-8.29.0 → ipython-8.31.0}/docs/Makefile +0 -0
  304. {ipython-8.29.0 → ipython-8.31.0}/docs/README.rst +0 -0
  305. {ipython-8.29.0 → ipython-8.31.0}/docs/autogen_api.py +0 -0
  306. {ipython-8.29.0 → ipython-8.31.0}/docs/autogen_config.py +0 -0
  307. {ipython-8.29.0 → ipython-8.31.0}/docs/autogen_magics.py +0 -0
  308. {ipython-8.29.0 → ipython-8.31.0}/docs/autogen_shortcuts.py +0 -0
  309. {ipython-8.29.0 → ipython-8.31.0}/docs/make.cmd +0 -0
  310. {ipython-8.29.0 → ipython-8.31.0}/docs/man/ipython.1 +0 -0
  311. {ipython-8.29.0 → ipython-8.31.0}/docs/requirements.txt +0 -0
  312. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/2.0/running-crop.png +0 -0
  313. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/2.0/running.png +0 -0
  314. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/2.0/treeview.png +0 -0
  315. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/2.0/user-interface.png +0 -0
  316. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/2.0/widgets.png +0 -0
  317. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  318. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  319. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  320. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  321. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  322. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  323. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  324. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  325. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  326. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  327. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  328. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/autosuggest.gif +0 -0
  329. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  330. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  331. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  332. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  333. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  334. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  335. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  336. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  337. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  338. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  339. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  340. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  341. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  342. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  343. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  344. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ms_visual_studio.png +0 -0
  345. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/notebook_specgram.png +0 -0
  346. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/ptshell_features.png +0 -0
  347. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/qtconsole.png +0 -0
  348. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  349. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_images/unicode_completion.png +0 -0
  350. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_static/favicon.ico +0 -0
  351. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_static/logo.png +0 -0
  352. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_static/theme_overrides.css +0 -0
  353. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_templates/breadcrumbs.html +0 -0
  354. {ipython-8.29.0 → ipython-8.31.0}/docs/source/_templates/notebook_redirect.html +0 -0
  355. {ipython-8.29.0 → ipython-8.31.0}/docs/source/about/history.rst +0 -0
  356. {ipython-8.29.0 → ipython-8.31.0}/docs/source/about/index.rst +0 -0
  357. {ipython-8.29.0 → ipython-8.31.0}/docs/source/about/license_and_copyright.rst +0 -0
  358. {ipython-8.29.0 → ipython-8.31.0}/docs/source/api/index.rst +0 -0
  359. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/callbacks.rst +0 -0
  360. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/custommagics.rst +0 -0
  361. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/details.rst +0 -0
  362. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/eventloops.rst +0 -0
  363. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/extensions/autoreload.rst +0 -0
  364. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/extensions/index.rst +0 -0
  365. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/extensions/storemagic.rst +0 -0
  366. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/index.rst +0 -0
  367. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/intro.rst +0 -0
  368. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/options/index.rst +0 -0
  369. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  370. {ipython-8.29.0 → ipython-8.31.0}/docs/source/config/shortcuts/index.rst +0 -0
  371. {ipython-8.29.0 → ipython-8.31.0}/docs/source/coredev/index.rst +0 -0
  372. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/config.rst +0 -0
  373. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/execution.rst +0 -0
  374. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  375. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  376. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/figs/other_kernels.png +0 -0
  377. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/figs/other_kernels.svg +0 -0
  378. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/how_ipython_works.rst +0 -0
  379. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/index.rst +0 -0
  380. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/inputhook_app.rst +0 -0
  381. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/kernels.rst +0 -0
  382. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/lexer.rst +0 -0
  383. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/messaging.rst +0 -0
  384. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/pycompat.rst +0 -0
  385. {ipython-8.29.0 → ipython-8.31.0}/docs/source/development/wrapperkernels.rst +0 -0
  386. {ipython-8.29.0 → ipython-8.31.0}/docs/source/index.rst +0 -0
  387. {ipython-8.29.0 → ipython-8.31.0}/docs/source/install/index.rst +0 -0
  388. {ipython-8.29.0 → ipython-8.31.0}/docs/source/install/install.rst +0 -0
  389. {ipython-8.29.0 → ipython-8.31.0}/docs/source/install/kernel_install.rst +0 -0
  390. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/autoawait.rst +0 -0
  391. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/figs/besselj.png +0 -0
  392. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/figs/colors_dark.png +0 -0
  393. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/figs/jn.html +0 -0
  394. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/figs/jn.xhtml +0 -0
  395. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/index.rst +0 -0
  396. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/plotting.rst +0 -0
  397. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  398. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/reference.rst +0 -0
  399. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/shell.rst +0 -0
  400. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/tips.rst +0 -0
  401. {ipython-8.29.0 → ipython-8.31.0}/docs/source/interactive/tutorial.rst +0 -0
  402. {ipython-8.29.0 → ipython-8.31.0}/docs/source/links.txt +0 -0
  403. {ipython-8.29.0 → ipython-8.31.0}/docs/source/overview.rst +0 -0
  404. {ipython-8.29.0 → ipython-8.31.0}/docs/source/parallel/index.rst +0 -0
  405. {ipython-8.29.0 → ipython-8.31.0}/docs/source/sphinx.toml +0 -0
  406. {ipython-8.29.0 → ipython-8.31.0}/docs/source/sphinxext.rst +0 -0
  407. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/development.rst +0 -0
  408. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  409. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  410. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  411. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  412. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  413. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  414. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  415. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  416. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  417. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  418. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  419. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/index.rst +0 -0
  420. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/pr/README.md +0 -0
  421. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  422. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  423. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version0.10.rst +0 -0
  424. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version0.11.rst +0 -0
  425. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version0.12.rst +0 -0
  426. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version0.13.rst +0 -0
  427. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version0.8.rst +0 -0
  428. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version0.9.rst +0 -0
  429. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version1.0.rst +0 -0
  430. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version2.0.rst +0 -0
  431. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version3.rst +0 -0
  432. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  433. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version4.rst +0 -0
  434. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version5.rst +0 -0
  435. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version6.rst +0 -0
  436. {ipython-8.29.0 → ipython-8.31.0}/docs/source/whatsnew/version7.rst +0 -0
  437. {ipython-8.29.0 → ipython-8.31.0}/docs/sphinxext/apigen.py +0 -0
  438. {ipython-8.29.0 → ipython-8.31.0}/docs/sphinxext/configtraits.py +0 -0
  439. {ipython-8.29.0 → ipython-8.31.0}/docs/sphinxext/github.py +0 -0
  440. {ipython-8.29.0 → ipython-8.31.0}/docs/sphinxext/magics.py +0 -0
  441. {ipython-8.29.0 → ipython-8.31.0}/examples/Embedding/Index.ipynb +0 -0
  442. {ipython-8.29.0 → ipython-8.31.0}/examples/Embedding/embed_class_long.py +0 -0
  443. {ipython-8.29.0 → ipython-8.31.0}/examples/Embedding/embed_class_short.py +0 -0
  444. {ipython-8.29.0 → ipython-8.31.0}/examples/Embedding/embed_function.py +0 -0
  445. {ipython-8.29.0 → ipython-8.31.0}/examples/Embedding/start_ipython_config.py +0 -0
  446. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
  447. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
  448. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
  449. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
  450. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
  451. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
  452. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
  453. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Index.ipynb +0 -0
  454. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
  455. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
  456. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
  457. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
  458. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
  459. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
  460. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
  461. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
  462. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
  463. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
  464. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/data/flare.json +0 -0
  465. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/example-demo.py +0 -0
  466. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  467. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  468. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  469. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  470. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  471. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/ipython.desktop +0 -0
  472. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
  473. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
  474. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
  475. {ipython-8.29.0 → ipython-8.31.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
  476. {ipython-8.29.0 → ipython-8.31.0}/examples/Index.ipynb +0 -0
  477. {ipython-8.29.0 → ipython-8.31.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
  478. {ipython-8.29.0 → ipython-8.31.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
  479. {ipython-8.29.0 → ipython-8.31.0}/examples/images/FrontendKernel.png +0 -0
  480. {ipython-8.29.0 → ipython-8.31.0}/examples/images/animation.m4v +0 -0
  481. {ipython-8.29.0 → ipython-8.31.0}/examples/images/ipython_logo.png +0 -0
  482. {ipython-8.29.0 → ipython-8.31.0}/examples/images/python_logo.svg +0 -0
  483. {ipython-8.29.0 → ipython-8.31.0}/examples/utils/cwd_prompt.py +0 -0
  484. {ipython-8.29.0 → ipython-8.31.0}/examples/utils/list_pyfiles.ipy +0 -0
  485. {ipython-8.29.0 → ipython-8.31.0}/examples/utils/list_subdirs.ipy +0 -0
  486. {ipython-8.29.0 → ipython-8.31.0}/ipython.egg-info/SOURCES.txt +0 -0
  487. {ipython-8.29.0 → ipython-8.31.0}/ipython.egg-info/dependency_links.txt +0 -0
  488. {ipython-8.29.0 → ipython-8.31.0}/ipython.egg-info/entry_points.txt +0 -0
  489. {ipython-8.29.0 → ipython-8.31.0}/ipython.egg-info/not-zip-safe +0 -0
  490. {ipython-8.29.0 → ipython-8.31.0}/ipython.egg-info/requires.txt +0 -0
  491. {ipython-8.29.0 → ipython-8.31.0}/ipython.egg-info/top_level.txt +0 -0
  492. {ipython-8.29.0 → ipython-8.31.0}/long_description.rst +0 -0
  493. {ipython-8.29.0 → ipython-8.31.0}/scripts/ipython.ico +0 -0
  494. {ipython-8.29.0 → ipython-8.31.0}/scripts/ipython_nb.ico +0 -0
  495. {ipython-8.29.0 → ipython-8.31.0}/setup.cfg +0 -0
  496. {ipython-8.29.0 → ipython-8.31.0}/setup.py +0 -0
  497. {ipython-8.29.0 → ipython-8.31.0}/setupbase.py +0 -0
@@ -184,6 +184,7 @@ import glob
184
184
  import inspect
185
185
  import itertools
186
186
  import keyword
187
+ import ast
187
188
  import os
188
189
  import re
189
190
  import string
@@ -347,7 +348,7 @@ def provisionalcompleter(action='ignore'):
347
348
  yield
348
349
 
349
350
 
350
- def has_open_quotes(s):
351
+ def has_open_quotes(s: str) -> Union[str, bool]:
351
352
  """Return whether a string has open quotes.
352
353
 
353
354
  This simply counts whether the number of quote characters of either type in
@@ -368,7 +369,7 @@ def has_open_quotes(s):
368
369
  return False
369
370
 
370
371
 
371
- def protect_filename(s, protectables=PROTECTABLES):
372
+ def protect_filename(s: str, protectables: str = PROTECTABLES) -> str:
372
373
  """Escape a string to protect certain characters."""
373
374
  if set(s) & set(protectables):
374
375
  if sys.platform == "win32":
@@ -449,11 +450,11 @@ def completions_sorting_key(word):
449
450
 
450
451
  if word.startswith('%%'):
451
452
  # If there's another % in there, this is something else, so leave it alone
452
- if not "%" in word[2:]:
453
+ if "%" not in word[2:]:
453
454
  word = word[2:]
454
455
  prio2 = 2
455
456
  elif word.startswith('%'):
456
- if not "%" in word[1:]:
457
+ if "%" not in word[1:]:
457
458
  word = word[1:]
458
459
  prio2 = 1
459
460
 
@@ -752,7 +753,7 @@ def completion_matcher(
752
753
  priority: Optional[float] = None,
753
754
  identifier: Optional[str] = None,
754
755
  api_version: int = 1,
755
- ):
756
+ ) -> Callable[[Matcher], Matcher]:
756
757
  """Adds attributes describing the matcher.
757
758
 
758
759
  Parameters
@@ -961,8 +962,8 @@ class CompletionSplitter(object):
961
962
  def split_line(self, line, cursor_pos=None):
962
963
  """Split a line of text with a cursor at the given position.
963
964
  """
964
- l = line if cursor_pos is None else line[:cursor_pos]
965
- return self._delim_re.split(l)[-1]
965
+ cut_line = line if cursor_pos is None else line[:cursor_pos]
966
+ return self._delim_re.split(cut_line)[-1]
966
967
 
967
968
 
968
969
 
@@ -1141,8 +1142,13 @@ class Completer(Configurable):
1141
1142
  """
1142
1143
  return self._attr_matches(text)[0]
1143
1144
 
1144
- def _attr_matches(self, text, include_prefix=True) -> Tuple[Sequence[str], str]:
1145
- m2 = re.match(r"(.+)\.(\w*)$", self.line_buffer)
1145
+ # we simple attribute matching with normal identifiers.
1146
+ _ATTR_MATCH_RE = re.compile(r"(.+)\.(\w*)$")
1147
+
1148
+ def _attr_matches(
1149
+ self, text: str, include_prefix: bool = True
1150
+ ) -> Tuple[Sequence[str], str]:
1151
+ m2 = self._ATTR_MATCH_RE.match(self.line_buffer)
1146
1152
  if not m2:
1147
1153
  return [], ""
1148
1154
  expr, attr = m2.group(1, 2)
@@ -1204,6 +1210,30 @@ class Completer(Configurable):
1204
1210
  "." + attr,
1205
1211
  )
1206
1212
 
1213
+ def _trim_expr(self, code: str) -> str:
1214
+ """
1215
+ Trim the code until it is a valid expression and not a tuple;
1216
+
1217
+ return the trimmed expression for guarded_eval.
1218
+ """
1219
+ while code:
1220
+ code = code[1:]
1221
+ try:
1222
+ res = ast.parse(code)
1223
+ except SyntaxError:
1224
+ continue
1225
+
1226
+ assert res is not None
1227
+ if len(res.body) != 1:
1228
+ continue
1229
+ expr = res.body[0].value
1230
+ if isinstance(expr, ast.Tuple) and not code[-1] == ")":
1231
+ # we skip implicit tuple, like when trimming `fun(a,b`<completion>
1232
+ # as `a,b` would be a tuple, and we actually expect to get only `b`
1233
+ continue
1234
+ return code
1235
+ return ""
1236
+
1207
1237
  def _evaluate_expr(self, expr):
1208
1238
  obj = not_found
1209
1239
  done = False
@@ -1225,14 +1255,14 @@ class Completer(Configurable):
1225
1255
  # e.g. user starts `(d[`, so we get `expr = '(d'`,
1226
1256
  # where parenthesis is not closed.
1227
1257
  # TODO: make this faster by reusing parts of the computation?
1228
- expr = expr[1:]
1258
+ expr = self._trim_expr(expr)
1229
1259
  return obj
1230
1260
 
1231
1261
  def get__all__entries(obj):
1232
1262
  """returns the strings in the __all__ attribute"""
1233
1263
  try:
1234
1264
  words = getattr(obj, '__all__')
1235
- except:
1265
+ except Exception:
1236
1266
  return []
1237
1267
 
1238
1268
  return [w for w in words if isinstance(w, str)]
@@ -1362,9 +1392,9 @@ def match_dict_keys(
1362
1392
  # All checks passed!
1363
1393
  return True
1364
1394
 
1365
- filtered_key_is_final: Dict[
1366
- Union[str, bytes, int, float], _DictKeyState
1367
- ] = defaultdict(lambda: _DictKeyState.BASELINE)
1395
+ filtered_key_is_final: Dict[Union[str, bytes, int, float], _DictKeyState] = (
1396
+ defaultdict(lambda: _DictKeyState.BASELINE)
1397
+ )
1368
1398
 
1369
1399
  for k in keys:
1370
1400
  # If at least one of the matches is not final, mark as undetermined.
@@ -1447,7 +1477,7 @@ def match_dict_keys(
1447
1477
  try:
1448
1478
  if not str_key.startswith(prefix_str):
1449
1479
  continue
1450
- except (AttributeError, TypeError, UnicodeError) as e:
1480
+ except (AttributeError, TypeError, UnicodeError):
1451
1481
  # Python 3+ TypeError on b'a'.startswith('a') or vice-versa
1452
1482
  continue
1453
1483
 
@@ -1495,7 +1525,7 @@ def cursor_to_position(text:str, line:int, column:int)->int:
1495
1525
  lines = text.split('\n')
1496
1526
  assert line <= len(lines), '{} <= {}'.format(str(line), str(len(lines)))
1497
1527
 
1498
- return sum(len(l) + 1 for l in lines[:line]) + column
1528
+ return sum(len(line) + 1 for line in lines[:line]) + column
1499
1529
 
1500
1530
  def position_to_cursor(text:str, offset:int)->Tuple[int, int]:
1501
1531
  """
@@ -2112,7 +2142,7 @@ class IPCompleter(Completer):
2112
2142
  result["suppress"] = is_magic_prefix and bool(result["completions"])
2113
2143
  return result
2114
2144
 
2115
- def magic_matches(self, text: str):
2145
+ def magic_matches(self, text: str) -> List[str]:
2116
2146
  """Match magics.
2117
2147
 
2118
2148
  .. deprecated:: 8.6
@@ -2469,7 +2499,8 @@ class IPCompleter(Completer):
2469
2499
  # parenthesis before the cursor
2470
2500
  # e.g. for "foo (1+bar(x), pa<cursor>,a=1)", the candidate is "foo"
2471
2501
  tokens = regexp.findall(self.text_until_cursor)
2472
- iterTokens = reversed(tokens); openPar = 0
2502
+ iterTokens = reversed(tokens)
2503
+ openPar = 0
2473
2504
 
2474
2505
  for token in iterTokens:
2475
2506
  if token == ')':
@@ -2489,7 +2520,8 @@ class IPCompleter(Completer):
2489
2520
  try:
2490
2521
  ids.append(next(iterTokens))
2491
2522
  if not isId(ids[-1]):
2492
- ids.pop(); break
2523
+ ids.pop()
2524
+ break
2493
2525
  if not next(iterTokens) == '.':
2494
2526
  break
2495
2527
  except StopIteration:
@@ -3215,7 +3247,7 @@ class IPCompleter(Completer):
3215
3247
  else:
3216
3248
  api_version = _get_matcher_api_version(matcher)
3217
3249
  raise ValueError(f"Unsupported API version {api_version}")
3218
- except:
3250
+ except BaseException:
3219
3251
  # Show the ugly traceback if the matcher causes an
3220
3252
  # exception, but do NOT crash the kernel!
3221
3253
  sys.excepthook(*sys.exc_info())
@@ -24,14 +24,17 @@ import traceback
24
24
  from pprint import pformat
25
25
  from pathlib import Path
26
26
 
27
+ import builtins as builtin_mod
28
+
27
29
  from IPython.core import ultratb
30
+ from IPython.core.application import Application
28
31
  from IPython.core.release import author_email
29
32
  from IPython.utils.sysinfo import sys_info
30
- from IPython.utils.py3compat import input
31
33
 
32
34
  from IPython.core.release import __version__ as version
33
35
 
34
- from typing import Optional
36
+ from typing import Optional, Dict
37
+ import types
35
38
 
36
39
  #-----------------------------------------------------------------------------
37
40
  # Code
@@ -84,7 +87,7 @@ Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
84
87
  """
85
88
 
86
89
 
87
- class CrashHandler(object):
90
+ class CrashHandler:
88
91
  """Customizable crash handlers for IPython applications.
89
92
 
90
93
  Instances of this class provide a :meth:`__call__` method which can be
@@ -95,10 +98,11 @@ class CrashHandler(object):
95
98
 
96
99
  message_template = _default_message_template
97
100
  section_sep = '\n\n'+'*'*75+'\n\n'
101
+ info: Dict[str, Optional[str]]
98
102
 
99
103
  def __init__(
100
104
  self,
101
- app,
105
+ app: Application,
102
106
  contact_name: Optional[str] = None,
103
107
  contact_email: Optional[str] = None,
104
108
  bug_tracker: Optional[str] = None,
@@ -142,10 +146,14 @@ class CrashHandler(object):
142
146
  bug_tracker = bug_tracker,
143
147
  crash_report_fname = self.crash_report_fname)
144
148
 
145
-
146
- def __call__(self, etype, evalue, etb):
149
+ def __call__(
150
+ self,
151
+ etype: type[BaseException],
152
+ evalue: BaseException,
153
+ etb: types.TracebackType,
154
+ ) -> None:
147
155
  """Handle an exception, call for compatible with sys.excepthook"""
148
-
156
+
149
157
  # do not allow the crash handler to be called twice without reinstalling it
150
158
  # this prevents unlikely errors in the crash handling from entering an
151
159
  # infinite loop.
@@ -155,21 +163,23 @@ class CrashHandler(object):
155
163
  color_scheme = 'NoColor'
156
164
 
157
165
  # Use this ONLY for developer debugging (keep commented out for release)
158
- #color_scheme = 'Linux' # dbg
159
- try:
160
- rptdir = self.app.ipython_dir
161
- except:
166
+ # color_scheme = 'Linux' # dbg
167
+ ipython_dir = getattr(self.app, "ipython_dir", None)
168
+ if ipython_dir is not None:
169
+ assert isinstance(ipython_dir, str)
170
+ rptdir = Path(ipython_dir)
171
+ else:
162
172
  rptdir = Path.cwd()
163
- if rptdir is None or not Path.is_dir(rptdir):
173
+ if not rptdir.is_dir():
164
174
  rptdir = Path.cwd()
165
175
  report_name = rptdir / self.crash_report_fname
166
176
  # write the report filename into the instance dict so it can get
167
177
  # properly expanded out in the user message template
168
- self.crash_report_fname = report_name
169
- self.info['crash_report_fname'] = report_name
178
+ self.crash_report_fname = str(report_name)
179
+ self.info["crash_report_fname"] = str(report_name)
170
180
  TBhandler = ultratb.VerboseTB(
171
181
  color_scheme=color_scheme,
172
- long_header=1,
182
+ long_header=True,
173
183
  call_pdb=self.call_pdb,
174
184
  )
175
185
  if self.call_pdb:
@@ -195,11 +205,11 @@ class CrashHandler(object):
195
205
  print(self.message_template.format(**self.info), file=sys.stderr)
196
206
 
197
207
  # Construct report on disk
198
- report.write(self.make_report(traceback))
208
+ report.write(self.make_report(str(traceback)))
199
209
 
200
- input("Hit <Enter> to quit (your terminal may close):")
210
+ builtin_mod.input("Hit <Enter> to quit (your terminal may close):")
201
211
 
202
- def make_report(self,traceback):
212
+ def make_report(self, traceback: str) -> str:
203
213
  """Return a string containing a crash report."""
204
214
 
205
215
  sec_sep = self.section_sep
@@ -211,8 +221,8 @@ class CrashHandler(object):
211
221
  try:
212
222
  config = pformat(self.app.config)
213
223
  rpt_add(sec_sep)
214
- rpt_add('Application name: %s\n\n' % self.app_name)
215
- rpt_add('Current user configuration structure:\n\n')
224
+ rpt_add("Application name: %s\n\n" % self.app.name)
225
+ rpt_add("Current user configuration structure:\n\n")
216
226
  rpt_add(config)
217
227
  except:
218
228
  pass
@@ -221,7 +231,9 @@ class CrashHandler(object):
221
231
  return ''.join(report)
222
232
 
223
233
 
224
- def crash_handler_lite(etype, evalue, tb):
234
+ def crash_handler_lite(
235
+ etype: type[BaseException], evalue: BaseException, tb: types.TracebackType
236
+ ) -> None:
225
237
  """a light excepthook, adding a small message to the usual traceback"""
226
238
  traceback.print_exception(etype, evalue, tb)
227
239
 
@@ -550,7 +550,7 @@ class Pdb(OldPdb):
550
550
  So if frame is self.current_frame we instead return self.curframe_locals
551
551
 
552
552
  """
553
- if frame is self.curframe:
553
+ if frame is getattr(self, "curframe", None):
554
554
  return self.curframe_locals
555
555
  else:
556
556
  return frame.f_locals
@@ -16,7 +16,8 @@ from copy import deepcopy
16
16
  from os.path import splitext
17
17
  from pathlib import Path, PurePath
18
18
 
19
- from IPython.utils.py3compat import cast_unicode
19
+ from typing import Optional
20
+
20
21
  from IPython.testing.skipdoctest import skip_doctest
21
22
  from . import display_functions
22
23
 
@@ -518,7 +519,7 @@ class SVG(DisplayObject):
518
519
  _read_flags = 'rb'
519
520
  # wrap data in a property, which extracts the <svg> tag, discarding
520
521
  # document headers
521
- _data = None
522
+ _data: Optional[str] = None
522
523
 
523
524
  @property
524
525
  def data(self):
@@ -540,8 +541,10 @@ class SVG(DisplayObject):
540
541
  # fallback on the input, trust the user
541
542
  # but this is probably an error.
542
543
  pass
543
- svg = cast_unicode(svg)
544
- self._data = svg
544
+ if isinstance(svg, bytes):
545
+ self._data = svg.decode(errors="replace")
546
+ else:
547
+ self._data = svg
545
548
 
546
549
  def _repr_svg_(self):
547
550
  return self._data_and_metadata()
@@ -1,6 +1,61 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Display formatters.
3
3
 
4
+ This module defines the base instances in order to implement custom
5
+ formatters/mimetypes
6
+ got objects:
7
+
8
+ As we want to see internal IPython working we are going to use the following
9
+ function to diaply objects instead of the normal print or display method:
10
+
11
+ >>> ip = get_ipython()
12
+ >>> ip.display_formatter.format(...)
13
+ ({'text/plain': 'Ellipsis'}, {})
14
+
15
+ This return a tuple with the mimebumdle for the current object, and the
16
+ associated metadata.
17
+
18
+
19
+ We can now define our own formatter and register it:
20
+
21
+
22
+ >>> from IPython.core.formatters import BaseFormatter, FormatterABC
23
+
24
+
25
+ >>> class LLMFormatter(BaseFormatter):
26
+ ...
27
+ ... format_type = 'x-vendor/llm'
28
+ ... print_method = '_repr_llm_'
29
+ ... _return_type = (dict, str)
30
+
31
+ >>> llm_formatter = LLMFormatter(parent=ip.display_formatter)
32
+
33
+ >>> ip.display_formatter.formatters[LLMFormatter.format_type] = llm_formatter
34
+
35
+ Now any class that define `_repr_llm_` will return a x-vendor/llm as part of
36
+ it's display data:
37
+
38
+ >>> class A:
39
+ ...
40
+ ... def _repr_llm_(self, *kwargs):
41
+ ... return 'This a A'
42
+ ...
43
+
44
+ >>> ip.display_formatter.format(A())
45
+ ({'text/plain': '<IPython.core.formatters.A at ...>', 'x-vendor/llm': 'This a A'}, {})
46
+
47
+ As usual, you can register methods for third party types (see
48
+ :ref:`third_party_formatting`)
49
+
50
+ >>> def llm_int(obj):
51
+ ... return 'This is the integer %s, in between %s and %s'%(obj, obj-1, obj+1)
52
+
53
+ >>> llm_formatter.for_type(int, llm_int)
54
+
55
+ >>> ip.display_formatter.format(42)
56
+ ({'text/plain': '42', 'x-vendor/llm': 'This is the integer 42, in between 41 and 43'}, {})
57
+
58
+
4
59
  Inheritance diagram:
5
60
 
6
61
  .. inheritance-diagram:: IPython.core.formatters
@@ -37,9 +92,10 @@ class DisplayFormatter(Configurable):
37
92
  active_types = List(Unicode(),
38
93
  help="""List of currently active mime-types to display.
39
94
  You can use this to set a white-list for formats to display.
40
-
95
+
41
96
  Most users will not need to change this value.
42
- """).tag(config=True)
97
+ """,
98
+ ).tag(config=True)
43
99
 
44
100
  @default('active_types')
45
101
  def _active_types_default(self):
@@ -144,7 +200,7 @@ class DisplayFormatter(Configurable):
144
200
  """
145
201
  format_dict = {}
146
202
  md_dict = {}
147
-
203
+
148
204
  if self.ipython_display_formatter(obj):
149
205
  # object handled itself, don't proceed
150
206
  return {}, {}
@@ -176,18 +232,18 @@ class DisplayFormatter(Configurable):
176
232
  continue
177
233
  if exclude and format_type in exclude:
178
234
  continue
179
-
235
+
180
236
  md = None
181
237
  try:
182
238
  data = formatter(obj)
183
239
  except:
184
240
  # FIXME: log the exception
185
241
  raise
186
-
242
+
187
243
  # formatters can return raw data or (data, metadata)
188
244
  if isinstance(data, tuple) and len(data) == 2:
189
245
  data, md = data
190
-
246
+
191
247
  if data is not None:
192
248
  format_dict[format_type] = data
193
249
  if md is not None:
@@ -252,7 +308,7 @@ class FormatterABC(metaclass=abc.ABCMeta):
252
308
 
253
309
  # Is the formatter enabled...
254
310
  enabled = True
255
-
311
+
256
312
  @abc.abstractmethod
257
313
  def __call__(self, obj):
258
314
  """Return a JSON'able representation of the object.
@@ -278,12 +334,15 @@ def _get_type(obj):
278
334
  return getattr(obj, '__class__', None) or type(obj)
279
335
 
280
336
 
281
- _raise_key_error = Sentinel('_raise_key_error', __name__,
282
- """
337
+ _raise_key_error = Sentinel(
338
+ "_raise_key_error",
339
+ __name__,
340
+ """
283
341
  Special value to raise a KeyError
284
342
 
285
343
  Raise KeyError in `BaseFormatter.pop` if passed as the default value to `pop`
286
- """)
344
+ """,
345
+ )
287
346
 
288
347
 
289
348
  class BaseFormatter(Configurable):
@@ -329,7 +388,7 @@ class BaseFormatter(Configurable):
329
388
  # The deferred-import type-specific printers.
330
389
  # Map (modulename, classname) pairs to the format functions.
331
390
  deferred_printers = Dict().tag(config=True)
332
-
391
+
333
392
  @catch_format_error
334
393
  def __call__(self, obj):
335
394
  """Compute the format for an object."""
@@ -348,7 +407,7 @@ class BaseFormatter(Configurable):
348
407
  return None
349
408
  else:
350
409
  return None
351
-
410
+
352
411
  def __contains__(self, typ):
353
412
  """map in to lookup_by_type"""
354
413
  try:
@@ -357,7 +416,7 @@ class BaseFormatter(Configurable):
357
416
  return False
358
417
  else:
359
418
  return True
360
-
419
+
361
420
  def _check_return(self, r, obj):
362
421
  """Check that a return value is appropriate
363
422
 
@@ -372,7 +431,7 @@ class BaseFormatter(Configurable):
372
431
  (self.format_type, type(r), self._return_type, _safe_repr(obj)),
373
432
  FormatterWarning
374
433
  )
375
-
434
+
376
435
  def lookup(self, obj):
377
436
  """Look up the formatter for a given instance.
378
437
 
@@ -395,7 +454,7 @@ class BaseFormatter(Configurable):
395
454
  return self.singleton_printers[obj_id]
396
455
  # then lookup by type
397
456
  return self.lookup_by_type(_get_type(obj))
398
-
457
+
399
458
  def lookup_by_type(self, typ):
400
459
  """Look up the registered formatter for a type.
401
460
 
@@ -426,7 +485,7 @@ class BaseFormatter(Configurable):
426
485
  for cls in pretty._get_mro(typ):
427
486
  if cls in self.type_printers or self._in_deferred_types(cls):
428
487
  return self.type_printers[cls]
429
-
488
+
430
489
  # If we have reached here, the lookup failed.
431
490
  raise KeyError("No registered printer for {0!r}".format(typ))
432
491
 
@@ -459,15 +518,15 @@ class BaseFormatter(Configurable):
459
518
  if isinstance(typ, str):
460
519
  type_module, type_name = typ.rsplit('.', 1)
461
520
  return self.for_type_by_name(type_module, type_name, func)
462
-
521
+
463
522
  try:
464
523
  oldfunc = self.lookup_by_type(typ)
465
524
  except KeyError:
466
525
  oldfunc = None
467
-
526
+
468
527
  if func is not None:
469
528
  self.type_printers[typ] = func
470
-
529
+
471
530
  return oldfunc
472
531
 
473
532
  def for_type_by_name(self, type_module, type_name, func=None):
@@ -501,16 +560,16 @@ class BaseFormatter(Configurable):
501
560
  this will be the previous value (to enable restoring later).
502
561
  """
503
562
  key = (type_module, type_name)
504
-
563
+
505
564
  try:
506
565
  oldfunc = self.lookup_by_type("%s.%s" % key)
507
566
  except KeyError:
508
567
  oldfunc = None
509
-
568
+
510
569
  if func is not None:
511
570
  self.deferred_printers[key] = func
512
571
  return oldfunc
513
-
572
+
514
573
  def pop(self, typ, default=_raise_key_error):
515
574
  """Pop a formatter for the given type.
516
575
 
@@ -529,7 +588,7 @@ class BaseFormatter(Configurable):
529
588
  ------
530
589
  KeyError if the type is not registered and default is not specified.
531
590
  """
532
-
591
+
533
592
  if isinstance(typ, str):
534
593
  typ_key = tuple(typ.rsplit('.',1))
535
594
  if typ_key not in self.deferred_printers:
@@ -599,14 +658,14 @@ class PlainTextFormatter(BaseFormatter):
599
658
  # This subclass ignores this attribute as it always need to return
600
659
  # something.
601
660
  enabled = Bool(True).tag(config=False)
602
-
661
+
603
662
  max_seq_length = Integer(pretty.MAX_SEQ_LENGTH,
604
663
  help="""Truncate large collections (lists, dicts, tuples, sets) to this size.
605
-
664
+
606
665
  Set to 0 to disable truncation.
607
- """
666
+ """,
608
667
  ).tag(config=True)
609
-
668
+
610
669
  # Look for a _repr_pretty_ methods to use for pretty printing.
611
670
  print_method = ObjectName('_repr_pretty_')
612
671
 
@@ -775,7 +834,7 @@ class PNGFormatter(BaseFormatter):
775
834
  format_type = Unicode('image/png')
776
835
 
777
836
  print_method = ObjectName('_repr_png_')
778
-
837
+
779
838
  _return_type = (bytes, str)
780
839
 
781
840
 
@@ -829,7 +888,7 @@ class JSONFormatter(BaseFormatter):
829
888
  _return_type = (list, dict)
830
889
 
831
890
  print_method = ObjectName('_repr_json_')
832
-
891
+
833
892
  def _check_return(self, r, obj):
834
893
  """Check that a return value is appropriate
835
894
 
@@ -887,19 +946,19 @@ class PDFFormatter(BaseFormatter):
887
946
 
888
947
  class IPythonDisplayFormatter(BaseFormatter):
889
948
  """An escape-hatch Formatter for objects that know how to display themselves.
890
-
949
+
891
950
  To define the callables that compute the representation of your
892
951
  objects, define a :meth:`_ipython_display_` method or use the :meth:`for_type`
893
952
  or :meth:`for_type_by_name` methods to register functions that handle
894
953
  this. Unlike mime-type displays, this method should not return anything,
895
954
  instead calling any appropriate display methods itself.
896
-
955
+
897
956
  This display formatter has highest priority.
898
957
  If it fires, no other display formatter will be called.
899
958
 
900
959
  Prior to IPython 6.1, `_ipython_display_` was the only way to display custom mime-types
901
960
  without registering a new Formatter.
902
-
961
+
903
962
  IPython 6.1 introduces `_repr_mimebundle_` for displaying custom mime-types,
904
963
  so `_ipython_display_` should only be used for objects that require unusual
905
964
  display patterns, such as multiple display calls.
@@ -943,7 +1002,7 @@ class MimeBundleFormatter(BaseFormatter):
943
1002
  """
944
1003
  print_method = ObjectName('_repr_mimebundle_')
945
1004
  _return_type = dict
946
-
1005
+
947
1006
  def _check_return(self, r, obj):
948
1007
  r = super(MimeBundleFormatter, self)._check_return(r, obj)
949
1008
  # always return (data, metadata):
@@ -44,20 +44,17 @@ else:
44
44
 
45
45
  @undoc
46
46
  class HasGetItem(Protocol):
47
- def __getitem__(self, key) -> None:
48
- ...
47
+ def __getitem__(self, key) -> None: ...
49
48
 
50
49
 
51
50
  @undoc
52
51
  class InstancesHaveGetItem(Protocol):
53
- def __call__(self, *args, **kwargs) -> HasGetItem:
54
- ...
52
+ def __call__(self, *args, **kwargs) -> HasGetItem: ...
55
53
 
56
54
 
57
55
  @undoc
58
56
  class HasGetAttr(Protocol):
59
- def __getattr__(self, key) -> None:
60
- ...
57
+ def __getattr__(self, key) -> None: ...
61
58
 
62
59
 
63
60
  @undoc
@@ -329,9 +326,9 @@ class EvaluationContext(NamedTuple):
329
326
  #: Global namespace
330
327
  globals: dict
331
328
  #: Evaluation policy identifier
332
- evaluation: Literal[
333
- "forbidden", "minimal", "limited", "unsafe", "dangerous"
334
- ] = "forbidden"
329
+ evaluation: Literal["forbidden", "minimal", "limited", "unsafe", "dangerous"] = (
330
+ "forbidden"
331
+ )
335
332
  #: Whether the evaluation of code takes place inside of a subscript.
336
333
  #: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``.
337
334
  in_subscript: bool = False