ipython 8.27.0__tar.gz → 8.29.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.27.0 → ipython-8.29.0}/IPython/core/completer.py +2 -2
  2. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/completerlib.py +1 -1
  3. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/debugger.py +28 -5
  4. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/display.py +101 -21
  5. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/guarded_eval.py +4 -4
  6. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/inputsplitter.py +1 -1
  7. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/interactiveshell.py +1 -1
  8. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/ast_mod.py +1 -1
  9. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/code.py +3 -1
  10. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/execution.py +15 -5
  11. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/packaging.py +32 -2
  12. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/oinspect.py +1 -1
  13. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/page.py +2 -2
  14. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/prefilter.py +4 -2
  15. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/pylabtools.py +1 -1
  16. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/release.py +5 -14
  17. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_completer.py +1 -1
  18. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_display.py +1 -1
  19. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_interactiveshell.py +1 -1
  20. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_prefilter.py +10 -0
  21. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_run.py +1 -1
  22. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_ultratb.py +3 -3
  23. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/ultratb.py +4 -4
  24. {ipython-8.27.0 → ipython-8.29.0}/IPython/external/qt_loaders.py +14 -2
  25. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/pretty.py +11 -4
  26. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/shortcuts/auto_suggest.py +1 -1
  27. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/shortcuts/filters.py +1 -1
  28. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tests/test_tools.py +2 -2
  29. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tools.py +3 -8
  30. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_sysinfo.py +1 -1
  31. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/frame.py +5 -3
  32. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/terminal.py +7 -1
  33. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_path.py +85 -88
  34. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/text.py +95 -37
  35. {ipython-8.27.0/ipython.egg-info → ipython-8.29.0}/PKG-INFO +1 -1
  36. {ipython-8.27.0 → ipython-8.29.0}/docs/source/conf.py +1 -2
  37. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/tutorial.rst +1 -2
  38. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.9.rst +1 -1
  39. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version7.rst +7 -7
  40. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version8.rst +106 -13
  41. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +1 -1
  42. {ipython-8.27.0 → ipython-8.29.0/ipython.egg-info}/PKG-INFO +1 -1
  43. {ipython-8.27.0 → ipython-8.29.0}/pyproject.toml +11 -1
  44. {ipython-8.27.0 → ipython-8.29.0}/setupbase.py +29 -43
  45. {ipython-8.27.0 → ipython-8.29.0}/.flake8 +0 -0
  46. {ipython-8.27.0 → ipython-8.29.0}/.mailmap +0 -0
  47. {ipython-8.27.0 → ipython-8.29.0}/.pre-commit-config.yaml +0 -0
  48. {ipython-8.27.0 → ipython-8.29.0}/COPYING.rst +0 -0
  49. {ipython-8.27.0 → ipython-8.29.0}/IPython/__init__.py +0 -0
  50. {ipython-8.27.0 → ipython-8.29.0}/IPython/__main__.py +0 -0
  51. {ipython-8.27.0 → ipython-8.29.0}/IPython/conftest.py +0 -0
  52. {ipython-8.27.0 → ipython-8.29.0}/IPython/consoleapp.py +0 -0
  53. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/__init__.py +0 -0
  54. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/alias.py +0 -0
  55. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/application.py +0 -0
  56. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/async_helpers.py +0 -0
  57. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/autocall.py +0 -0
  58. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/builtin_trap.py +0 -0
  59. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/compilerop.py +0 -0
  60. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/crashhandler.py +0 -0
  61. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/display_functions.py +0 -0
  62. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/display_trap.py +0 -0
  63. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/displayhook.py +0 -0
  64. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/displaypub.py +0 -0
  65. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/error.py +0 -0
  66. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/events.py +0 -0
  67. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/excolors.py +0 -0
  68. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/extensions.py +0 -0
  69. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/formatters.py +0 -0
  70. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/getipython.py +0 -0
  71. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/history.py +0 -0
  72. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/historyapp.py +0 -0
  73. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/hooks.py +0 -0
  74. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/inputtransformer.py +0 -0
  75. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/inputtransformer2.py +0 -0
  76. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/latex_symbols.py +0 -0
  77. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/logger.py +0 -0
  78. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/macro.py +0 -0
  79. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magic.py +0 -0
  80. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magic_arguments.py +0 -0
  81. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/__init__.py +0 -0
  82. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/auto.py +0 -0
  83. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/basic.py +0 -0
  84. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/config.py +0 -0
  85. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/display.py +0 -0
  86. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/extension.py +0 -0
  87. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/history.py +0 -0
  88. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/logging.py +0 -0
  89. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/namespace.py +0 -0
  90. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/osm.py +0 -0
  91. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/pylab.py +0 -0
  92. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/magics/script.py +0 -0
  93. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/payload.py +0 -0
  94. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/payloadpage.py +0 -0
  95. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/profile/README_STARTUP +0 -0
  96. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/profileapp.py +0 -0
  97. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/profiledir.py +0 -0
  98. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/prompts.py +0 -0
  99. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/shellapp.py +0 -0
  100. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/splitinput.py +0 -0
  101. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/2x2.jpg +0 -0
  102. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/2x2.png +0 -0
  103. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/__init__.py +0 -0
  104. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/bad_all.py +0 -0
  105. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
  106. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/nonascii.py +0 -0
  107. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/nonascii2.py +0 -0
  108. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/print_argv.py +0 -0
  109. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/refbug.py +0 -0
  110. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/simpleerr.py +0 -0
  111. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/tclass.py +0 -0
  112. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_alias.py +0 -0
  113. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_application.py +0 -0
  114. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_async_helpers.py +0 -0
  115. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_autocall.py +0 -0
  116. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_compilerop.py +0 -0
  117. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_completerlib.py +0 -0
  118. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_debugger.py +0 -0
  119. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_displayhook.py +0 -0
  120. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_events.py +0 -0
  121. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
  122. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_extension.py +0 -0
  123. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_formatters.py +0 -0
  124. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_guarded_eval.py +0 -0
  125. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_handlers.py +0 -0
  126. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_history.py +0 -0
  127. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_hooks.py +0 -0
  128. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_imports.py +0 -0
  129. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_inputsplitter.py +0 -0
  130. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_inputtransformer.py +0 -0
  131. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
  132. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
  133. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_iplib.py +0 -0
  134. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_logger.py +0 -0
  135. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_magic.py +0 -0
  136. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_magic_arguments.py +0 -0
  137. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_magic_terminal.py +0 -0
  138. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_oinspect.py +0 -0
  139. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_page.py +0 -0
  140. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_paths.py +0 -0
  141. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_profile.py +0 -0
  142. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_prompts.py +0 -0
  143. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_pylabtools.py +0 -0
  144. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_shellapp.py +0 -0
  145. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/tests/test_splitinput.py +0 -0
  146. {ipython-8.27.0 → ipython-8.29.0}/IPython/core/usage.py +0 -0
  147. {ipython-8.27.0 → ipython-8.29.0}/IPython/display.py +0 -0
  148. {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/__init__.py +0 -0
  149. {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/autoreload.py +0 -0
  150. {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/storemagic.py +0 -0
  151. {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/tests/__init__.py +0 -0
  152. {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/tests/test_autoreload.py +0 -0
  153. {ipython-8.27.0 → ipython-8.29.0}/IPython/extensions/tests/test_storemagic.py +0 -0
  154. {ipython-8.27.0 → ipython-8.29.0}/IPython/external/__init__.py +0 -0
  155. {ipython-8.27.0 → ipython-8.29.0}/IPython/external/qt_for_kernel.py +0 -0
  156. {ipython-8.27.0 → ipython-8.29.0}/IPython/external/tests/__init__.py +0 -0
  157. {ipython-8.27.0 → ipython-8.29.0}/IPython/external/tests/test_qt_loaders.py +0 -0
  158. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/__init__.py +0 -0
  159. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/backgroundjobs.py +0 -0
  160. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/clipboard.py +0 -0
  161. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/deepreload.py +0 -0
  162. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/demo.py +0 -0
  163. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/display.py +0 -0
  164. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/editorhooks.py +0 -0
  165. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/guisupport.py +0 -0
  166. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/latextools.py +0 -0
  167. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/lexers.py +0 -0
  168. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/__init__.py +0 -0
  169. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test.wav +0 -0
  170. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
  171. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_clipboard.py +0 -0
  172. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_deepreload.py +0 -0
  173. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_display.py +0 -0
  174. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_editorhooks.py +0 -0
  175. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_imports.py +0 -0
  176. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_latextools.py +0 -0
  177. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_lexers.py +0 -0
  178. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_pretty.py +0 -0
  179. {ipython-8.27.0 → ipython-8.29.0}/IPython/lib/tests/test_pygments.py +0 -0
  180. {ipython-8.27.0 → ipython-8.29.0}/IPython/paths.py +0 -0
  181. {ipython-8.27.0 → ipython-8.29.0}/IPython/py.typed +0 -0
  182. {ipython-8.27.0 → ipython-8.29.0}/IPython/sphinxext/__init__.py +0 -0
  183. {ipython-8.27.0 → ipython-8.29.0}/IPython/sphinxext/custom_doctests.py +0 -0
  184. {ipython-8.27.0 → ipython-8.29.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  185. {ipython-8.27.0 → ipython-8.29.0}/IPython/sphinxext/ipython_directive.py +0 -0
  186. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/__init__.py +0 -0
  187. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/console.py +0 -0
  188. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/debugger.py +0 -0
  189. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/embed.py +0 -0
  190. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/interactiveshell.py +0 -0
  191. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/ipapp.py +0 -0
  192. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/magics.py +0 -0
  193. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/prompts.py +0 -0
  194. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  195. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  196. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  197. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  198. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  199. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  200. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  201. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  202. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  203. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  204. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  205. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/ptutils.py +0 -0
  206. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  207. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  208. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/__init__.py +0 -0
  209. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
  210. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_embed.py +0 -0
  211. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_help.py +0 -0
  212. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
  213. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
  214. {ipython-8.27.0 → ipython-8.29.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
  215. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/__init__.py +0 -0
  216. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/decorators.py +0 -0
  217. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/globalipapp.py +0 -0
  218. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/ipunittest.py +0 -0
  219. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/Makefile +0 -0
  220. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/README.txt +0 -0
  221. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/__init__.py +0 -0
  222. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/dtexample.py +0 -0
  223. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  224. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  225. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/setup.py +0 -0
  226. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/simple.py +0 -0
  227. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/simplevars.py +0 -0
  228. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_combo.txt +0 -0
  229. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_example.txt +0 -0
  230. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  231. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  232. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/plugin/test_refs.py +0 -0
  233. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/skipdoctest.py +0 -0
  234. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tests/__init__.py +0 -0
  235. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tests/test_decorators.py +0 -0
  236. {ipython-8.27.0 → ipython-8.29.0}/IPython/testing/tests/test_ipunittest.py +0 -0
  237. {ipython-8.27.0 → ipython-8.29.0}/IPython/tests/cve.py +0 -0
  238. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/PyColorize.py +0 -0
  239. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/__init__.py +0 -0
  240. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_cli.py +0 -0
  241. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_common.py +0 -0
  242. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_emscripten.py +0 -0
  243. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_posix.py +0 -0
  244. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_win32.py +0 -0
  245. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/_process_win32_controller.py +0 -0
  246. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/capture.py +0 -0
  247. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/colorable.py +0 -0
  248. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/coloransi.py +0 -0
  249. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/contexts.py +0 -0
  250. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/daemonize.py +0 -0
  251. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/data.py +0 -0
  252. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/decorators.py +0 -0
  253. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/dir2.py +0 -0
  254. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/docs.py +0 -0
  255. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/encoding.py +0 -0
  256. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/eventful.py +0 -0
  257. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/generics.py +0 -0
  258. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/importstring.py +0 -0
  259. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/io.py +0 -0
  260. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/ipstruct.py +0 -0
  261. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/jsonutil.py +0 -0
  262. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/localinterfaces.py +0 -0
  263. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/log.py +0 -0
  264. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/module_paths.py +0 -0
  265. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/openpy.py +0 -0
  266. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/path.py +0 -0
  267. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/process.py +0 -0
  268. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/py3compat.py +0 -0
  269. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/sentinel.py +0 -0
  270. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/shimmodule.py +0 -0
  271. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/signatures.py +0 -0
  272. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/strdispatch.py +0 -0
  273. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/sysinfo.py +0 -0
  274. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/syspathcontext.py +0 -0
  275. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tempdir.py +0 -0
  276. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/__init__.py +0 -0
  277. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_capture.py +0 -0
  278. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_decorators.py +0 -0
  279. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_deprecated.py +0 -0
  280. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_dir2.py +0 -0
  281. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_imports.py +0 -0
  282. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_importstring.py +0 -0
  283. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_io.py +0 -0
  284. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_module_paths.py +0 -0
  285. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_openpy.py +0 -0
  286. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_process.py +0 -0
  287. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_pycolorize.py +0 -0
  288. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_shimmodule.py +0 -0
  289. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_sysinfo.py +0 -0
  290. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_tempdir.py +0 -0
  291. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_text.py +0 -0
  292. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_tokenutil.py +0 -0
  293. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tests/test_wildcard.py +0 -0
  294. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/timing.py +0 -0
  295. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tokenutil.py +0 -0
  296. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/traitlets.py +0 -0
  297. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/tz.py +0 -0
  298. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/ulinecache.py +0 -0
  299. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/version.py +0 -0
  300. {ipython-8.27.0 → ipython-8.29.0}/IPython/utils/wildcard.py +0 -0
  301. {ipython-8.27.0 → ipython-8.29.0}/LICENSE +0 -0
  302. {ipython-8.27.0 → ipython-8.29.0}/MANIFEST.in +0 -0
  303. {ipython-8.27.0 → ipython-8.29.0}/README.rst +0 -0
  304. {ipython-8.27.0 → ipython-8.29.0}/_build_meta.py +0 -0
  305. {ipython-8.27.0 → ipython-8.29.0}/docs/Makefile +0 -0
  306. {ipython-8.27.0 → ipython-8.29.0}/docs/README.rst +0 -0
  307. {ipython-8.27.0 → ipython-8.29.0}/docs/autogen_api.py +0 -0
  308. {ipython-8.27.0 → ipython-8.29.0}/docs/autogen_config.py +0 -0
  309. {ipython-8.27.0 → ipython-8.29.0}/docs/autogen_magics.py +0 -0
  310. {ipython-8.27.0 → ipython-8.29.0}/docs/autogen_shortcuts.py +0 -0
  311. {ipython-8.27.0 → ipython-8.29.0}/docs/make.cmd +0 -0
  312. {ipython-8.27.0 → ipython-8.29.0}/docs/man/ipython.1 +0 -0
  313. {ipython-8.27.0 → ipython-8.29.0}/docs/requirements.txt +0 -0
  314. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/running-crop.png +0 -0
  315. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/running.png +0 -0
  316. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/treeview.png +0 -0
  317. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/user-interface.png +0 -0
  318. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/2.0/widgets.png +0 -0
  319. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  320. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  321. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  322. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  323. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  324. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  325. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  326. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  327. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  328. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  329. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  330. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/autosuggest.gif +0 -0
  331. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  332. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  333. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  334. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  335. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  336. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  337. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  338. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  339. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  340. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  341. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  342. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  343. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  344. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  345. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  346. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ms_visual_studio.png +0 -0
  347. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/notebook_specgram.png +0 -0
  348. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/ptshell_features.png +0 -0
  349. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/qtconsole.png +0 -0
  350. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  351. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_images/unicode_completion.png +0 -0
  352. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_static/favicon.ico +0 -0
  353. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_static/logo.png +0 -0
  354. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_static/theme_overrides.css +0 -0
  355. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_templates/breadcrumbs.html +0 -0
  356. {ipython-8.27.0 → ipython-8.29.0}/docs/source/_templates/notebook_redirect.html +0 -0
  357. {ipython-8.27.0 → ipython-8.29.0}/docs/source/about/history.rst +0 -0
  358. {ipython-8.27.0 → ipython-8.29.0}/docs/source/about/index.rst +0 -0
  359. {ipython-8.27.0 → ipython-8.29.0}/docs/source/about/license_and_copyright.rst +0 -0
  360. {ipython-8.27.0 → ipython-8.29.0}/docs/source/api/index.rst +0 -0
  361. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/callbacks.rst +0 -0
  362. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/custommagics.rst +0 -0
  363. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/details.rst +0 -0
  364. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/eventloops.rst +0 -0
  365. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/extensions/autoreload.rst +0 -0
  366. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/extensions/index.rst +0 -0
  367. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/extensions/storemagic.rst +0 -0
  368. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/index.rst +0 -0
  369. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/inputtransforms.rst +0 -0
  370. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/integrating.rst +0 -0
  371. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/intro.rst +0 -0
  372. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/options/index.rst +0 -0
  373. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  374. {ipython-8.27.0 → ipython-8.29.0}/docs/source/config/shortcuts/index.rst +0 -0
  375. {ipython-8.27.0 → ipython-8.29.0}/docs/source/coredev/index.rst +0 -0
  376. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/config.rst +0 -0
  377. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/execution.rst +0 -0
  378. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  379. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  380. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/figs/other_kernels.png +0 -0
  381. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/figs/other_kernels.svg +0 -0
  382. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/how_ipython_works.rst +0 -0
  383. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/index.rst +0 -0
  384. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/inputhook_app.rst +0 -0
  385. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/kernels.rst +0 -0
  386. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/lexer.rst +0 -0
  387. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/messaging.rst +0 -0
  388. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/pycompat.rst +0 -0
  389. {ipython-8.27.0 → ipython-8.29.0}/docs/source/development/wrapperkernels.rst +0 -0
  390. {ipython-8.27.0 → ipython-8.29.0}/docs/source/index.rst +0 -0
  391. {ipython-8.27.0 → ipython-8.29.0}/docs/source/install/index.rst +0 -0
  392. {ipython-8.27.0 → ipython-8.29.0}/docs/source/install/install.rst +0 -0
  393. {ipython-8.27.0 → ipython-8.29.0}/docs/source/install/kernel_install.rst +0 -0
  394. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/autoawait.rst +0 -0
  395. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/figs/besselj.png +0 -0
  396. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/figs/colors_dark.png +0 -0
  397. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/figs/jn.html +0 -0
  398. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/figs/jn.xhtml +0 -0
  399. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/index.rst +0 -0
  400. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/magics.rst +0 -0
  401. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/plotting.rst +0 -0
  402. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  403. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/reference.rst +0 -0
  404. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/shell.rst +0 -0
  405. {ipython-8.27.0 → ipython-8.29.0}/docs/source/interactive/tips.rst +0 -0
  406. {ipython-8.27.0 → ipython-8.29.0}/docs/source/links.txt +0 -0
  407. {ipython-8.27.0 → ipython-8.29.0}/docs/source/overview.rst +0 -0
  408. {ipython-8.27.0 → ipython-8.29.0}/docs/source/parallel/index.rst +0 -0
  409. {ipython-8.27.0 → ipython-8.29.0}/docs/source/sphinx.toml +0 -0
  410. {ipython-8.27.0 → ipython-8.29.0}/docs/source/sphinxext.rst +0 -0
  411. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/development.rst +0 -0
  412. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  413. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  414. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  415. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  416. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  417. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  418. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  419. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  420. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  421. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  422. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  423. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/index.rst +0 -0
  424. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/pr/README.md +0 -0
  425. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  426. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  427. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.10.rst +0 -0
  428. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.11.rst +0 -0
  429. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.12.rst +0 -0
  430. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.13.rst +0 -0
  431. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version0.8.rst +0 -0
  432. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version1.0.rst +0 -0
  433. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version2.0.rst +0 -0
  434. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version3.rst +0 -0
  435. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  436. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version4.rst +0 -0
  437. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version5.rst +0 -0
  438. {ipython-8.27.0 → ipython-8.29.0}/docs/source/whatsnew/version6.rst +0 -0
  439. {ipython-8.27.0 → ipython-8.29.0}/docs/sphinxext/apigen.py +0 -0
  440. {ipython-8.27.0 → ipython-8.29.0}/docs/sphinxext/configtraits.py +0 -0
  441. {ipython-8.27.0 → ipython-8.29.0}/docs/sphinxext/github.py +0 -0
  442. {ipython-8.27.0 → ipython-8.29.0}/docs/sphinxext/magics.py +0 -0
  443. {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/Index.ipynb +0 -0
  444. {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/embed_class_long.py +0 -0
  445. {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/embed_class_short.py +0 -0
  446. {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/embed_function.py +0 -0
  447. {ipython-8.27.0 → ipython-8.29.0}/examples/Embedding/start_ipython_config.py +0 -0
  448. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
  449. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
  450. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
  451. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
  452. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
  453. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
  454. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
  455. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Index.ipynb +0 -0
  456. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
  457. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
  458. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
  459. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
  460. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
  461. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
  462. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
  463. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
  464. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
  465. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/data/flare.json +0 -0
  466. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/example-demo.py +0 -0
  467. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  468. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  469. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  470. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  471. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  472. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/ipython.desktop +0 -0
  473. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
  474. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
  475. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
  476. {ipython-8.27.0 → ipython-8.29.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
  477. {ipython-8.27.0 → ipython-8.29.0}/examples/Index.ipynb +0 -0
  478. {ipython-8.27.0 → ipython-8.29.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
  479. {ipython-8.27.0 → ipython-8.29.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
  480. {ipython-8.27.0 → ipython-8.29.0}/examples/images/FrontendKernel.png +0 -0
  481. {ipython-8.27.0 → ipython-8.29.0}/examples/images/animation.m4v +0 -0
  482. {ipython-8.27.0 → ipython-8.29.0}/examples/images/ipython_logo.png +0 -0
  483. {ipython-8.27.0 → ipython-8.29.0}/examples/images/python_logo.svg +0 -0
  484. {ipython-8.27.0 → ipython-8.29.0}/examples/utils/cwd_prompt.py +0 -0
  485. {ipython-8.27.0 → ipython-8.29.0}/examples/utils/list_pyfiles.ipy +0 -0
  486. {ipython-8.27.0 → ipython-8.29.0}/examples/utils/list_subdirs.ipy +0 -0
  487. {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/SOURCES.txt +0 -0
  488. {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/dependency_links.txt +0 -0
  489. {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/entry_points.txt +0 -0
  490. {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/not-zip-safe +0 -0
  491. {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/requires.txt +0 -0
  492. {ipython-8.27.0 → ipython-8.29.0}/ipython.egg-info/top_level.txt +0 -0
  493. {ipython-8.27.0 → ipython-8.29.0}/long_description.rst +0 -0
  494. {ipython-8.27.0 → ipython-8.29.0}/scripts/ipython.ico +0 -0
  495. {ipython-8.27.0 → ipython-8.29.0}/scripts/ipython_nb.ico +0 -0
  496. {ipython-8.27.0 → ipython-8.29.0}/setup.cfg +0 -0
  497. {ipython-8.27.0 → ipython-8.29.0}/setup.py +0 -0
@@ -159,7 +159,7 @@ By default results from all matchers are combined, in the order determined by
159
159
  their priority. Matchers can request to suppress results from subsequent
160
160
  matchers by setting ``suppress`` to ``True`` in the ``MatcherResult``.
161
161
 
162
- When multiple matchers simultaneously request surpression, the results from of
162
+ When multiple matchers simultaneously request suppression, the results from of
163
163
  the matcher with higher priority will be returned.
164
164
 
165
165
  Sometimes it is desirable to suppress most but not all other matchers;
@@ -2651,7 +2651,7 @@ class IPCompleter(Completer):
2651
2651
  )
2652
2652
  can_close_quote = can_close_quote and self.auto_close_dict_keys
2653
2653
 
2654
- # fast path if closing qoute should be appended but not suffix is allowed
2654
+ # fast path if closing quote should be appended but not suffix is allowed
2655
2655
  if not can_close_quote and not can_close_bracket and closing_quote:
2656
2656
  return [leading + k for k in matches]
2657
2657
 
@@ -167,7 +167,7 @@ def is_possible_submodule(module, attr):
167
167
  try:
168
168
  obj = getattr(module, attr)
169
169
  except AttributeError:
170
- # Is possilby an unimported submodule
170
+ # Is possibly an unimported submodule
171
171
  return True
172
172
  except TypeError:
173
173
  # https://github.com/ipython/ipython/issues/9678
@@ -14,14 +14,35 @@ Among other things, this subclass of PDB:
14
14
  - hide frames in tracebacks based on `__tracebackhide__`
15
15
  - allows to skip frames based on `__debuggerskip__`
16
16
 
17
+
18
+ Global Configuration
19
+ --------------------
20
+
21
+ The IPython debugger will by read the global ``~/.pdbrc`` file.
22
+ That is to say you can list all commands supported by ipdb in your `~/.pdbrc`
23
+ configuration file, to globally configure pdb.
24
+
25
+ Example::
26
+
27
+ # ~/.pdbrc
28
+ skip_predicates debuggerskip false
29
+ skip_hidden false
30
+ context 25
31
+
32
+ Features
33
+ --------
34
+
35
+ The IPython debugger can hide and skip frames when printing or moving through
36
+ the stack. This can have a performance impact, so can be configures.
37
+
17
38
  The skipping and hiding frames are configurable via the `skip_predicates`
18
39
  command.
19
40
 
20
41
  By default, frames from readonly files will be hidden, frames containing
21
- ``__tracebackhide__=True`` will be hidden.
42
+ ``__tracebackhide__ = True`` will be hidden.
22
43
 
23
- Frames containing ``__debuggerskip__`` will be stepped over, frames who's parent
24
- frames value of ``__debuggerskip__`` is ``True`` will be skipped.
44
+ Frames containing ``__debuggerskip__`` will be stepped over, frames whose parent
45
+ frames value of ``__debuggerskip__`` is ``True`` will also be skipped.
25
46
 
26
47
  >>> def helpers_helper():
27
48
  ... pass
@@ -156,7 +177,7 @@ def BdbQuit_excepthook(et, ev, tb, excepthook=None):
156
177
  parameter.
157
178
  """
158
179
  raise ValueError(
159
- "`BdbQuit_excepthook` is deprecated since version 5.1. It is still arround only because it is still imported by ipdb.",
180
+ "`BdbQuit_excepthook` is deprecated since version 5.1. It is still around only because it is still imported by ipdb.",
160
181
  )
161
182
 
162
183
 
@@ -1070,7 +1091,9 @@ class Pdb(OldPdb):
1070
1091
  raise ValueError()
1071
1092
  self.context = new_context
1072
1093
  except ValueError:
1073
- self.error("The 'context' command requires a positive integer argument.")
1094
+ self.error(
1095
+ f"The 'context' command requires a positive integer argument (current value {self.context})."
1096
+ )
1074
1097
 
1075
1098
 
1076
1099
  class InterruptiblePdb(Pdb):
@@ -21,13 +21,35 @@ from IPython.testing.skipdoctest import skip_doctest
21
21
  from . import display_functions
22
22
 
23
23
 
24
- __all__ = ['display_pretty', 'display_html', 'display_markdown',
25
- 'display_svg', 'display_png', 'display_jpeg', 'display_latex', 'display_json',
26
- 'display_javascript', 'display_pdf', 'DisplayObject', 'TextDisplayObject',
27
- 'Pretty', 'HTML', 'Markdown', 'Math', 'Latex', 'SVG', 'ProgressBar', 'JSON',
28
- 'GeoJSON', 'Javascript', 'Image', 'set_matplotlib_formats',
29
- 'set_matplotlib_close',
30
- 'Video']
24
+ __all__ = [
25
+ "display_pretty",
26
+ "display_html",
27
+ "display_markdown",
28
+ "display_svg",
29
+ "display_png",
30
+ "display_jpeg",
31
+ "display_webp",
32
+ "display_latex",
33
+ "display_json",
34
+ "display_javascript",
35
+ "display_pdf",
36
+ "DisplayObject",
37
+ "TextDisplayObject",
38
+ "Pretty",
39
+ "HTML",
40
+ "Markdown",
41
+ "Math",
42
+ "Latex",
43
+ "SVG",
44
+ "ProgressBar",
45
+ "JSON",
46
+ "GeoJSON",
47
+ "Javascript",
48
+ "Image",
49
+ "set_matplotlib_formats",
50
+ "set_matplotlib_close",
51
+ "Video",
52
+ ]
31
53
 
32
54
  _deprecated_names = ["display", "clear_output", "publish_display_data", "update_display", "DisplayHandle"]
33
55
 
@@ -41,7 +63,11 @@ from warnings import warn
41
63
 
42
64
  def __getattr__(name):
43
65
  if name in _deprecated_names:
44
- warn(f"Importing {name} from IPython.core.display is deprecated since IPython 7.14, please import from IPython display", DeprecationWarning, stacklevel=2)
66
+ warn(
67
+ f"Importing {name} from IPython.core.display is deprecated since IPython 7.14, please import from IPython.display",
68
+ DeprecationWarning,
69
+ stacklevel=2,
70
+ )
45
71
  return getattr(display_functions, name)
46
72
 
47
73
  if name in globals().keys():
@@ -196,6 +222,23 @@ def display_jpeg(*objs, **kwargs):
196
222
  _display_mimetype('image/jpeg', objs, **kwargs)
197
223
 
198
224
 
225
+ def display_webp(*objs, **kwargs):
226
+ """Display the WEBP representation of an object.
227
+
228
+ Parameters
229
+ ----------
230
+ *objs : object
231
+ The Python objects to display, or if raw=True raw JPEG data to
232
+ display.
233
+ raw : bool
234
+ Are the data objects raw data or Python objects that need to be
235
+ formatted before display? [default: False]
236
+ metadata : dict (optional)
237
+ Metadata to be associated with the specific mimetype output.
238
+ """
239
+ _display_mimetype("image/webp", objs, **kwargs)
240
+
241
+
199
242
  def display_latex(*objs, **kwargs):
200
243
  """Display the LaTeX representation of an object.
201
244
 
@@ -772,9 +815,14 @@ class Javascript(TextDisplayObject):
772
815
  r += _lib_t2*len(self.lib)
773
816
  return r
774
817
 
775
- # constants for identifying png/jpeg data
776
- _PNG = b'\x89PNG\r\n\x1a\n'
777
- _JPEG = b'\xff\xd8'
818
+
819
+ # constants for identifying png/jpeg/gif/webp data
820
+ _PNG = b"\x89PNG\r\n\x1a\n"
821
+ _JPEG = b"\xff\xd8"
822
+ _GIF1 = b"GIF87a"
823
+ _GIF2 = b"GIF89a"
824
+ _WEBP = b"WEBP"
825
+
778
826
 
779
827
  def _pngxy(data):
780
828
  """read the (width, height) from a PNG header"""
@@ -782,6 +830,7 @@ def _pngxy(data):
782
830
  # next 8 bytes are width/height
783
831
  return struct.unpack('>ii', data[ihdr+4:ihdr+12])
784
832
 
833
+
785
834
  def _jpegxy(data):
786
835
  """read the (width, height) from a JPEG header"""
787
836
  # adapted from http://www.64lines.com/jpeg-width-height
@@ -801,22 +850,45 @@ def _jpegxy(data):
801
850
  h, w = struct.unpack('>HH', data[iSOF+5:iSOF+9])
802
851
  return w, h
803
852
 
853
+
804
854
  def _gifxy(data):
805
855
  """read the (width, height) from a GIF header"""
806
856
  return struct.unpack('<HH', data[6:10])
807
857
 
808
858
 
859
+ def _webpxy(data):
860
+ """read the (width, height) from a WEBP header"""
861
+ if data[12:16] == b"VP8 ":
862
+ width, height = struct.unpack("<HH", data[24:30])
863
+ width = width & 0x3FFF
864
+ height = height & 0x3FFF
865
+ return (width, height)
866
+ elif data[12:16] == b"VP8L":
867
+ size_info = struct.unpack("<I", data[21:25])[0]
868
+ width = 1 + ((size_info & 0x3F) << 8) | (size_info >> 24)
869
+ height = 1 + (
870
+ (((size_info >> 8) & 0xF) << 10)
871
+ | (((size_info >> 14) & 0x3FC) << 2)
872
+ | ((size_info >> 22) & 0x3)
873
+ )
874
+ return (width, height)
875
+ else:
876
+ raise ValueError("Not a valid WEBP header")
877
+
878
+
809
879
  class Image(DisplayObject):
810
880
 
811
- _read_flags = 'rb'
812
- _FMT_JPEG = u'jpeg'
813
- _FMT_PNG = u'png'
814
- _FMT_GIF = u'gif'
815
- _ACCEPTABLE_EMBEDDINGS = [_FMT_JPEG, _FMT_PNG, _FMT_GIF]
881
+ _read_flags = "rb"
882
+ _FMT_JPEG = "jpeg"
883
+ _FMT_PNG = "png"
884
+ _FMT_GIF = "gif"
885
+ _FMT_WEBP = "webp"
886
+ _ACCEPTABLE_EMBEDDINGS = [_FMT_JPEG, _FMT_PNG, _FMT_GIF, _FMT_WEBP]
816
887
  _MIMETYPES = {
817
- _FMT_PNG: 'image/png',
818
- _FMT_JPEG: 'image/jpeg',
819
- _FMT_GIF: 'image/gif',
888
+ _FMT_PNG: "image/png",
889
+ _FMT_JPEG: "image/jpeg",
890
+ _FMT_GIF: "image/gif",
891
+ _FMT_WEBP: "image/webp",
820
892
  }
821
893
 
822
894
  def __init__(
@@ -833,7 +905,7 @@ class Image(DisplayObject):
833
905
  metadata=None,
834
906
  alt=None,
835
907
  ):
836
- """Create a PNG/JPEG/GIF image object given raw data.
908
+ """Create a PNG/JPEG/GIF/WEBP image object given raw data.
837
909
 
838
910
  When this object is returned by an input cell or passed to the
839
911
  display function, it will result in the image being displayed
@@ -854,7 +926,7 @@ class Image(DisplayObject):
854
926
  Images from a file are always embedded.
855
927
 
856
928
  format : unicode
857
- The format of the image data (png/jpeg/jpg/gif). If a filename or URL is given
929
+ The format of the image data (png/jpeg/jpg/gif/webp). If a filename or URL is given
858
930
  for format will be inferred from the filename extension.
859
931
 
860
932
  embed : bool
@@ -938,6 +1010,8 @@ class Image(DisplayObject):
938
1010
  format = self._FMT_PNG
939
1011
  elif ext == u'gif':
940
1012
  format = self._FMT_GIF
1013
+ elif ext == "webp":
1014
+ format = self._FMT_WEBP
941
1015
  else:
942
1016
  format = ext.lower()
943
1017
  elif isinstance(data, bytes):
@@ -945,6 +1019,12 @@ class Image(DisplayObject):
945
1019
  # only if format has not been specified.
946
1020
  if data[:2] == _JPEG:
947
1021
  format = self._FMT_JPEG
1022
+ elif data[:8] == _PNG:
1023
+ format = self._FMT_PNG
1024
+ elif data[8:12] == _WEBP:
1025
+ format = self._FMT_WEBP
1026
+ elif data[:6] == _GIF1 or data[:6] == _GIF2:
1027
+ format = self._FMT_GIF
948
1028
 
949
1029
  # failed to detect format, default png
950
1030
  if format is None:
@@ -132,7 +132,7 @@ def _get_external(module_name: str, access_path: Sequence[str]):
132
132
 
133
133
  Raises:
134
134
  * `KeyError` if module is removed not found, and
135
- * `AttributeError` if acess path does not match an exported object
135
+ * `AttributeError` if access path does not match an exported object
136
136
  """
137
137
  member_type = sys.modules[module_name]
138
138
  for attr in access_path:
@@ -235,7 +235,7 @@ class SelectivePolicy(EvaluationPolicy):
235
235
  accept = has_original_attr and has_original_attribute
236
236
 
237
237
  if accept:
238
- # We still need to check for overriden properties.
238
+ # We still need to check for overridden properties.
239
239
 
240
240
  value_class = type(value)
241
241
  if not hasattr(value_class, attr):
@@ -332,7 +332,7 @@ class EvaluationContext(NamedTuple):
332
332
  evaluation: Literal[
333
333
  "forbidden", "minimal", "limited", "unsafe", "dangerous"
334
334
  ] = "forbidden"
335
- #: Whether the evalution of code takes place inside of a subscript.
335
+ #: Whether the evaluation of code takes place inside of a subscript.
336
336
  #: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``.
337
337
  in_subscript: bool = False
338
338
 
@@ -373,7 +373,7 @@ def guarded_eval(code: str, context: EvaluationContext):
373
373
  # getitem at all, for example it fails on simple `[0][1]`
374
374
 
375
375
  if context.in_subscript:
376
- # syntatic sugar for ellipsis (:) is only available in susbcripts
376
+ # syntactic sugar for ellipsis (:) is only available in subscripts
377
377
  # so we need to trick the ast parser into thinking that we have
378
378
  # a subscript, but we need to be able to later recognise that we did
379
379
  # it so we can ignore the actual __getitem__ operation
@@ -97,7 +97,7 @@ def num_ini_spaces(s):
97
97
  """
98
98
  warnings.warn(
99
99
  "`num_ini_spaces` is Pending Deprecation since IPython 8.17."
100
- "It is considered fro removal in in future version. "
100
+ "It is considered for removal in in future version. "
101
101
  "Please open an issue if you believe it should be kept.",
102
102
  stacklevel=2,
103
103
  category=PendingDeprecationWarning,
@@ -1627,7 +1627,7 @@ class InteractiveShell(SingletonConfigurable):
1627
1627
  Returns
1628
1628
  -------
1629
1629
  parts_ok: bool
1630
- wether we were properly able to parse parts.
1630
+ whether we were properly able to parse parts.
1631
1631
  parts: list of str
1632
1632
  extracted parts
1633
1633
 
@@ -5,7 +5,7 @@ with ast-transformers it is not easy to directly manipulate ast.
5
5
 
6
6
 
7
7
  IPython has pre-code and post-code hooks, but are ran from within the IPython
8
- machinery so may be inappropriate, for example for performance mesurement.
8
+ machinery so may be inappropriate, for example for performance measurement.
9
9
 
10
10
  This module give you tools to simplify this, and expose 2 classes:
11
11
 
@@ -153,7 +153,9 @@ def strip_initial_indent(lines):
153
153
 
154
154
  for line in it:
155
155
  if line.startswith(indent):
156
- yield line[len(indent):]
156
+ yield line[len(indent) :]
157
+ elif line in ("\n", "\r\n") or len(line) == 0:
158
+ yield line
157
159
  else:
158
160
  # Less indented than the first line - stop dedenting
159
161
  yield line
@@ -195,12 +195,16 @@ class ExecutionMagics(Magics):
195
195
 
196
196
  """Run a statement through the python code profiler.
197
197
 
198
- Usage, in line mode:
198
+ **Usage, in line mode:**
199
+
199
200
  %prun [options] statement
200
201
 
201
- Usage, in cell mode:
202
+ **Usage, in cell mode:**
203
+
202
204
  %%prun [options] [statement]
205
+
203
206
  code...
207
+
204
208
  code...
205
209
 
206
210
  In cell mode, the additional code lines are appended to the (possibly
@@ -1028,11 +1032,16 @@ class ExecutionMagics(Magics):
1028
1032
  def timeit(self, line='', cell=None, local_ns=None):
1029
1033
  """Time execution of a Python statement or expression
1030
1034
 
1031
- Usage, in line mode:
1035
+ **Usage, in line mode:**
1036
+
1032
1037
  %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement
1033
- or in cell mode:
1038
+
1039
+ **or in cell mode:**
1040
+
1034
1041
  %%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code
1042
+
1035
1043
  code
1044
+
1036
1045
  code...
1037
1046
 
1038
1047
  Time execution of a Python statement or expression using the timeit
@@ -1046,6 +1055,7 @@ class ExecutionMagics(Magics):
1046
1055
  body has access to any variables created in the setup code.
1047
1056
 
1048
1057
  Options:
1058
+
1049
1059
  -n<N>: execute the given statement <N> times in a loop. If <N> is not
1050
1060
  provided, <N> is determined so as to get sufficient accuracy.
1051
1061
 
@@ -1066,7 +1076,7 @@ class ExecutionMagics(Magics):
1066
1076
  -q: Quiet, do not print result.
1067
1077
 
1068
1078
  -o: return a TimeitResult that can be stored in a variable to inspect
1069
- the result in more details.
1079
+ the result in more details.
1070
1080
 
1071
1081
  .. versionchanged:: 7.3
1072
1082
  User variables are no longer expanded,
@@ -9,6 +9,7 @@
9
9
  #-----------------------------------------------------------------------------
10
10
 
11
11
  import functools
12
+ import os
12
13
  import re
13
14
  import shlex
14
15
  import sys
@@ -41,6 +42,16 @@ def _get_conda_like_executable(command):
41
42
  executable: string
42
43
  Value should be: conda, mamba or micromamba
43
44
  """
45
+ # Check for a environment variable bound to the base executable, both conda and mamba
46
+ # set these when activating an environment.
47
+ base_executable = "CONDA_EXE"
48
+ if "mamba" in command.lower():
49
+ base_executable = "MAMBA_EXE"
50
+ if base_executable in os.environ:
51
+ executable = Path(os.environ[base_executable])
52
+ if executable.is_file():
53
+ return str(executable.resolve())
54
+
44
55
  # Check if there is a conda executable in the same directory as the Python executable.
45
56
  # This is the case within conda's root environment.
46
57
  executable = Path(sys.executable).parent / command
@@ -48,10 +59,12 @@ def _get_conda_like_executable(command):
48
59
  return str(executable)
49
60
 
50
61
  # Otherwise, attempt to extract the executable from conda history.
51
- # This applies in any conda environment.
62
+ # This applies in any conda environment. Parsing this way is error prone because
63
+ # different versions of conda and mamba include differing cmd values such as
64
+ # `conda`, `conda-script.py`, or `path/to/conda`, here use the raw command provided.
52
65
  history = Path(sys.prefix, "conda-meta", "history").read_text(encoding="utf-8")
53
66
  match = re.search(
54
- rf"^#\s*cmd:\s*(?P<command>.*{executable})\s[create|install]",
67
+ rf"^#\s*cmd:\s*(?P<command>.*{command})\s[create|install]",
55
68
  history,
56
69
  flags=re.MULTILINE,
57
70
  )
@@ -149,3 +162,20 @@ class PackagingMagics(Magics):
149
162
  """
150
163
  micromamba = _get_conda_like_executable("micromamba")
151
164
  self._run_command(micromamba, line)
165
+
166
+ @line_magic
167
+ def uv(self, line):
168
+ """Run the uv package manager within the current kernel.
169
+
170
+ Usage:
171
+ %uv pip install [pkgs]
172
+ """
173
+ python = sys.executable
174
+ if sys.platform == "win32":
175
+ python = '"' + python + '"'
176
+ else:
177
+ python = shlex.quote(python)
178
+
179
+ self.shell.system(" ".join([python, "-m", "uv", line]))
180
+
181
+ print("Note: you may need to restart the kernel to use updated packages.")
@@ -460,7 +460,7 @@ class Inspector(Colorable):
460
460
 
461
461
  mime_hooks = traitlets.Dict(
462
462
  config=True,
463
- help="dictionary of mime to callable to add informations into help mimebundle dict",
463
+ help="dictionary of mime to callable to add information into help mimebundle dict",
464
464
  ).tag(config=True)
465
465
 
466
466
  def __init__(
@@ -125,7 +125,7 @@ def _detect_screen_size(screen_lines_def):
125
125
  # print('***Screen size:',screen_lines_real,'lines x',
126
126
  # screen_cols,'columns.') # dbg
127
127
 
128
- def pager_page(strng, start=0, screen_lines=0, pager_cmd=None):
128
+ def pager_page(strng, start=0, screen_lines=0, pager_cmd=None) -> None:
129
129
  """Display a string, piping through a pager after a certain length.
130
130
 
131
131
  strng can be a mime-bundle dict, supplying multiple representations,
@@ -239,7 +239,7 @@ def pager_page(strng, start=0, screen_lines=0, pager_cmd=None):
239
239
  page_dumb(strng,screen_lines=screen_lines)
240
240
 
241
241
 
242
- def page(data, start=0, screen_lines=0, pager_cmd=None):
242
+ def page(data, start: int = 0, screen_lines: int = 0, pager_cmd=None):
243
243
  """Display content in a pager, piping through a pager after a certain length.
244
244
 
245
245
  data can be a mime-bundle dict, supplying multiple representations,
@@ -512,8 +512,10 @@ class AutocallChecker(PrefilterChecker):
512
512
  callable(oinfo.obj)
513
513
  and (not self.exclude_regexp.match(line_info.the_rest))
514
514
  and self.function_name_regexp.match(line_info.ifun)
515
- and line_info.raw_the_rest.startswith(" ")
516
- or not line_info.raw_the_rest.strip()
515
+ and (
516
+ line_info.raw_the_rest.startswith(" ")
517
+ or not line_info.raw_the_rest.strip()
518
+ )
517
519
  ):
518
520
  return self.prefilter_manager.get_handler_by_name("auto")
519
521
  else:
@@ -528,7 +528,7 @@ def _list_matplotlib_backends_and_gui_loops() -> list[str]:
528
528
 
529
529
 
530
530
  # Matplotlib and IPython do not always use the same gui framework name.
531
- # Always use the approprate one of these conversion functions when passing a
531
+ # Always use the appropriate one of these conversion functions when passing a
532
532
  # gui framework name to/from Matplotlib.
533
533
  def _convert_gui_to_matplotlib(gui: str | None) -> str | None:
534
534
  if gui and gui.lower() == "osx":
@@ -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 = 8
19
- _version_minor = 27
19
+ _version_minor = 29
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "rc1"
@@ -32,22 +32,13 @@ if _version_extra:
32
32
  version = __version__ # backwards compatibility name
33
33
  version_info = (_version_major, _version_minor, _version_patch, _version_extra)
34
34
 
35
- # Change this when incrementing the kernel protocol version
36
- kernel_protocol_version_info = (5, 0)
37
- kernel_protocol_version = "%i.%i" % kernel_protocol_version_info
38
35
 
39
36
  license = "BSD-3-Clause"
40
37
 
41
- authors = {'Fernando' : ('Fernando Perez','fperez.net@gmail.com'),
42
- 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
43
- 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
44
- 'Ville' : ('Ville Vainio','vivainio@gmail.com'),
45
- 'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
46
- 'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com'),
47
- 'Thomas' : ('Thomas A. Kluyver', 'takowl@gmail.com'),
48
- 'Jorgen' : ('Jorgen Stenarson', 'jorgen.stenarson@bostream.nu'),
49
- 'Matthias' : ('Matthias Bussonnier', 'bussonniermatthias@gmail.com'),
50
- }
38
+ authors = {
39
+ "Fernando": ("Fernando Perez", "fperez.net@gmail.com"),
40
+ "M": ("M Bussonnier", "mbussonnier@gmail.com"),
41
+ }
51
42
 
52
43
  author = 'The IPython Development Team'
53
44
 
@@ -204,7 +204,7 @@ def test_line_split():
204
204
  # was at the end of part1. So an empty part2 represents someone hitting
205
205
  # tab at the end of the line, the most common case.
206
206
  t = [
207
- ("run some/scrip", "", "some/scrip"),
207
+ ("run some/script", "", "some/script"),
208
208
  ("run scripts/er", "ror.py foo", "scripts/er"),
209
209
  ("echo $HOM", "", "HOM"),
210
210
  ("print sys.pa", "", "sys.pa"),
@@ -140,7 +140,7 @@ def test_image_filename_defaults():
140
140
  format="badformat",
141
141
  embed=True,
142
142
  )
143
- # check boths paths to allow packages to test at build and install time
143
+ # check both paths to allow packages to test at build and install time
144
144
  imgfile = os.path.join(tpath, 'core/tests/2x2.png')
145
145
  img = display.Image(filename=imgfile)
146
146
  assert "png" == img.format
@@ -660,7 +660,7 @@ class TestSystemRaw(ExitCodeChecks):
660
660
  @mock.patch('os.system', side_effect=KeyboardInterrupt)
661
661
  def test_control_c(self, *mocks):
662
662
  try:
663
- self.system("sleep 1 # wont happen")
663
+ self.system("sleep 1 # won't happen")
664
664
  except KeyboardInterrupt: # pragma: no cove
665
665
  self.fail(
666
666
  "system call should intercept "
@@ -137,3 +137,13 @@ def test_autocall_should_support_unicode():
137
137
  finally:
138
138
  ip.run_line_magic("autocall", "0")
139
139
  del ip.user_ns["π"]
140
+
141
+
142
+ def test_autocall_regression_gh_14513():
143
+ ip.run_line_magic("autocall", "2")
144
+ ip.user_ns["foo"] = dict()
145
+ try:
146
+ assert ip.prefilter("foo") == "foo"
147
+ finally:
148
+ ip.run_line_magic("autocall", "0")
149
+ del ip.user_ns["foo"]
@@ -579,7 +579,7 @@ def test_run_tb():
579
579
  def test_multiprocessing_run():
580
580
  """Set we can run mutiprocesgin without messing up up main namespace
581
581
 
582
- Note that import `nose.tools as nt` mdify the value s
582
+ Note that import `nose.tools as nt` modify the values
583
583
  sys.module['__mp_main__'] so we need to temporarily set it to None to test
584
584
  the issue.
585
585
  """
@@ -158,14 +158,14 @@ class NestedGenExprTestCase(unittest.TestCase):
158
158
 
159
159
 
160
160
  indentationerror_file = """if True:
161
- zoon()
161
+ zoom()
162
162
  """
163
163
 
164
164
  class IndentationErrorTest(unittest.TestCase):
165
165
  def test_indentationerror_shows_line(self):
166
166
  # See issue gh-2398
167
167
  with tt.AssertPrints("IndentationError"):
168
- with tt.AssertPrints("zoon()", suppress=False):
168
+ with tt.AssertPrints("zoom()", suppress=False):
169
169
  ip.run_cell(indentationerror_file)
170
170
 
171
171
  with TemporaryDirectory() as td:
@@ -174,7 +174,7 @@ class IndentationErrorTest(unittest.TestCase):
174
174
  f.write(indentationerror_file)
175
175
 
176
176
  with tt.AssertPrints("IndentationError"):
177
- with tt.AssertPrints("zoon()", suppress=False):
177
+ with tt.AssertPrints("zoom()", suppress=False):
178
178
  ip.magic('run %s' % fname)
179
179
 
180
180
  @skip_without("pandas")