ipython 8.19.0__tar.gz → 8.21.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 (498) hide show
  1. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/alias.py +15 -9
  2. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/application.py +4 -0
  3. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/debugger.py +6 -3
  4. ipython-8.21.0/IPython/core/excolors.py +175 -0
  5. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/extensions.py +5 -21
  6. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/interactiveshell.py +1 -1
  7. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/basic.py +1 -1
  8. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/oinspect.py +26 -13
  9. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/payload.py +1 -2
  10. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/profileapp.py +1 -1
  11. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/release.py +1 -1
  12. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_completer.py +40 -8
  13. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_interactiveshell.py +5 -1
  14. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_magic_arguments.py +9 -7
  15. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_profile.py +7 -1
  16. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/ultratb.py +14 -1
  17. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/interactiveshell.py +22 -10
  18. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/ipapp.py +4 -4
  19. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/prompts.py +3 -2
  20. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/ipunittest.py +9 -1
  21. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/pytest_ipdoctest.py +23 -19
  22. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/tests/test_decorators.py +4 -2
  23. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/_process_posix.py +5 -2
  24. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/_sysinfo.py +1 -1
  25. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/coloransi.py +40 -6
  26. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_io.py +1 -0
  27. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/text.py +2 -2
  28. {ipython-8.19.0 → ipython-8.21.0}/MANIFEST.in +1 -0
  29. {ipython-8.19.0 → ipython-8.21.0}/PKG-INFO +7 -9
  30. ipython-8.21.0/_build_meta.py +2 -0
  31. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/details.rst +3 -5
  32. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version8.rst +106 -2
  33. {ipython-8.19.0 → ipython-8.21.0}/examples/Embedding/embed_class_long.py +4 -4
  34. {ipython-8.19.0 → ipython-8.21.0}/examples/utils/cwd_prompt.py +3 -7
  35. {ipython-8.19.0 → ipython-8.21.0}/ipython.egg-info/PKG-INFO +7 -9
  36. {ipython-8.19.0 → ipython-8.21.0}/ipython.egg-info/SOURCES.txt +1 -0
  37. {ipython-8.19.0 → ipython-8.21.0}/ipython.egg-info/requires.txt +4 -4
  38. {ipython-8.19.0 → ipython-8.21.0}/pyproject.toml +8 -2
  39. {ipython-8.19.0 → ipython-8.21.0}/setup.cfg +1 -2
  40. {ipython-8.19.0 → ipython-8.21.0}/setup.py +0 -1
  41. ipython-8.19.0/IPython/core/excolors.py +0 -165
  42. {ipython-8.19.0 → ipython-8.21.0}/.flake8 +0 -0
  43. {ipython-8.19.0 → ipython-8.21.0}/.mailmap +0 -0
  44. {ipython-8.19.0 → ipython-8.21.0}/.pre-commit-config.yaml +0 -0
  45. {ipython-8.19.0 → ipython-8.21.0}/COPYING.rst +0 -0
  46. {ipython-8.19.0 → ipython-8.21.0}/IPython/__init__.py +0 -0
  47. {ipython-8.19.0 → ipython-8.21.0}/IPython/__main__.py +0 -0
  48. {ipython-8.19.0 → ipython-8.21.0}/IPython/conftest.py +0 -0
  49. {ipython-8.19.0 → ipython-8.21.0}/IPython/consoleapp.py +0 -0
  50. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/__init__.py +0 -0
  51. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/async_helpers.py +0 -0
  52. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/autocall.py +0 -0
  53. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/builtin_trap.py +0 -0
  54. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/compilerop.py +0 -0
  55. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/completer.py +0 -0
  56. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/completerlib.py +0 -0
  57. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/crashhandler.py +0 -0
  58. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/display.py +0 -0
  59. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/display_functions.py +0 -0
  60. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/display_trap.py +0 -0
  61. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/displayhook.py +0 -0
  62. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/displaypub.py +0 -0
  63. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/error.py +0 -0
  64. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/events.py +0 -0
  65. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/formatters.py +0 -0
  66. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/getipython.py +0 -0
  67. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/guarded_eval.py +0 -0
  68. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/history.py +0 -0
  69. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/historyapp.py +0 -0
  70. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/hooks.py +0 -0
  71. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/inputsplitter.py +0 -0
  72. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/inputtransformer.py +0 -0
  73. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/inputtransformer2.py +0 -0
  74. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/latex_symbols.py +0 -0
  75. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/logger.py +0 -0
  76. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/macro.py +0 -0
  77. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magic.py +0 -0
  78. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magic_arguments.py +0 -0
  79. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/__init__.py +0 -0
  80. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/ast_mod.py +0 -0
  81. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/auto.py +0 -0
  82. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/code.py +0 -0
  83. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/config.py +0 -0
  84. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/display.py +0 -0
  85. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/execution.py +0 -0
  86. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/extension.py +0 -0
  87. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/history.py +0 -0
  88. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/logging.py +0 -0
  89. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/namespace.py +0 -0
  90. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/osm.py +0 -0
  91. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/packaging.py +0 -0
  92. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/pylab.py +0 -0
  93. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/magics/script.py +0 -0
  94. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/page.py +0 -0
  95. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/payloadpage.py +0 -0
  96. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/prefilter.py +0 -0
  97. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/profile/README_STARTUP +0 -0
  98. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/profiledir.py +0 -0
  99. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/prompts.py +0 -0
  100. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/pylabtools.py +0 -0
  101. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/shellapp.py +0 -0
  102. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/splitinput.py +0 -0
  103. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/2x2.jpg +0 -0
  104. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/2x2.png +0 -0
  105. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/__init__.py +0 -0
  106. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/bad_all.py +0 -0
  107. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
  108. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/nonascii.py +0 -0
  109. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/nonascii2.py +0 -0
  110. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/print_argv.py +0 -0
  111. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/refbug.py +0 -0
  112. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/simpleerr.py +0 -0
  113. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/tclass.py +0 -0
  114. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_alias.py +0 -0
  115. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_application.py +0 -0
  116. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_async_helpers.py +0 -0
  117. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_autocall.py +0 -0
  118. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_compilerop.py +0 -0
  119. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_completerlib.py +0 -0
  120. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_debugger.py +0 -0
  121. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_display.py +0 -0
  122. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_displayhook.py +0 -0
  123. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_events.py +0 -0
  124. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
  125. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_extension.py +0 -0
  126. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_formatters.py +0 -0
  127. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_guarded_eval.py +0 -0
  128. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_handlers.py +0 -0
  129. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_history.py +0 -0
  130. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_hooks.py +0 -0
  131. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_imports.py +0 -0
  132. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_inputsplitter.py +0 -0
  133. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_inputtransformer.py +0 -0
  134. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
  135. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
  136. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_iplib.py +0 -0
  137. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_logger.py +0 -0
  138. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_magic.py +0 -0
  139. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_magic_terminal.py +0 -0
  140. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_oinspect.py +0 -0
  141. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_page.py +0 -0
  142. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_paths.py +0 -0
  143. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_prefilter.py +0 -0
  144. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_prompts.py +0 -0
  145. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_pylabtools.py +0 -0
  146. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_run.py +0 -0
  147. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_shellapp.py +0 -0
  148. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_splitinput.py +0 -0
  149. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/tests/test_ultratb.py +0 -0
  150. {ipython-8.19.0 → ipython-8.21.0}/IPython/core/usage.py +0 -0
  151. {ipython-8.19.0 → ipython-8.21.0}/IPython/display.py +0 -0
  152. {ipython-8.19.0 → ipython-8.21.0}/IPython/extensions/__init__.py +0 -0
  153. {ipython-8.19.0 → ipython-8.21.0}/IPython/extensions/autoreload.py +0 -0
  154. {ipython-8.19.0 → ipython-8.21.0}/IPython/extensions/storemagic.py +0 -0
  155. {ipython-8.19.0 → ipython-8.21.0}/IPython/extensions/tests/__init__.py +0 -0
  156. {ipython-8.19.0 → ipython-8.21.0}/IPython/extensions/tests/test_autoreload.py +0 -0
  157. {ipython-8.19.0 → ipython-8.21.0}/IPython/extensions/tests/test_storemagic.py +0 -0
  158. {ipython-8.19.0 → ipython-8.21.0}/IPython/external/__init__.py +0 -0
  159. {ipython-8.19.0 → ipython-8.21.0}/IPython/external/qt_for_kernel.py +0 -0
  160. {ipython-8.19.0 → ipython-8.21.0}/IPython/external/qt_loaders.py +0 -0
  161. {ipython-8.19.0 → ipython-8.21.0}/IPython/external/tests/__init__.py +0 -0
  162. {ipython-8.19.0 → ipython-8.21.0}/IPython/external/tests/test_qt_loaders.py +0 -0
  163. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/__init__.py +0 -0
  164. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/backgroundjobs.py +0 -0
  165. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/clipboard.py +0 -0
  166. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/deepreload.py +0 -0
  167. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/demo.py +0 -0
  168. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/display.py +0 -0
  169. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/editorhooks.py +0 -0
  170. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/guisupport.py +0 -0
  171. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/latextools.py +0 -0
  172. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/lexers.py +0 -0
  173. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/pretty.py +0 -0
  174. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/__init__.py +0 -0
  175. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test.wav +0 -0
  176. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
  177. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_clipboard.py +0 -0
  178. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_deepreload.py +0 -0
  179. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_display.py +0 -0
  180. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_editorhooks.py +0 -0
  181. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_imports.py +0 -0
  182. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_latextools.py +0 -0
  183. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_lexers.py +0 -0
  184. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_pretty.py +0 -0
  185. {ipython-8.19.0 → ipython-8.21.0}/IPython/lib/tests/test_pygments.py +0 -0
  186. {ipython-8.19.0 → ipython-8.21.0}/IPython/paths.py +0 -0
  187. {ipython-8.19.0 → ipython-8.21.0}/IPython/py.typed +0 -0
  188. {ipython-8.19.0 → ipython-8.21.0}/IPython/sphinxext/__init__.py +0 -0
  189. {ipython-8.19.0 → ipython-8.21.0}/IPython/sphinxext/custom_doctests.py +0 -0
  190. {ipython-8.19.0 → ipython-8.21.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  191. {ipython-8.19.0 → ipython-8.21.0}/IPython/sphinxext/ipython_directive.py +0 -0
  192. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/__init__.py +0 -0
  193. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/console.py +0 -0
  194. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/debugger.py +0 -0
  195. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/embed.py +0 -0
  196. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/magics.py +0 -0
  197. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  198. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  199. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  200. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  201. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  202. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  203. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  204. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  205. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  206. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  207. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  208. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/ptutils.py +0 -0
  209. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  210. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  211. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
  212. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/shortcuts/filters.py +0 -0
  213. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/tests/__init__.py +0 -0
  214. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
  215. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/tests/test_embed.py +0 -0
  216. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/tests/test_help.py +0 -0
  217. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
  218. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
  219. {ipython-8.19.0 → ipython-8.21.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
  220. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/__init__.py +0 -0
  221. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/decorators.py +0 -0
  222. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/globalipapp.py +0 -0
  223. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/Makefile +0 -0
  224. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/README.txt +0 -0
  225. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/__init__.py +0 -0
  226. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/dtexample.py +0 -0
  227. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  228. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/setup.py +0 -0
  229. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/simple.py +0 -0
  230. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/simplevars.py +0 -0
  231. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/test_combo.txt +0 -0
  232. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/test_example.txt +0 -0
  233. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  234. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  235. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/plugin/test_refs.py +0 -0
  236. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/skipdoctest.py +0 -0
  237. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/tests/__init__.py +0 -0
  238. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/tests/test_ipunittest.py +0 -0
  239. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/tests/test_tools.py +0 -0
  240. {ipython-8.19.0 → ipython-8.21.0}/IPython/testing/tools.py +0 -0
  241. {ipython-8.19.0 → ipython-8.21.0}/IPython/tests/cve.py +0 -0
  242. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/PyColorize.py +0 -0
  243. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/__init__.py +0 -0
  244. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/_process_cli.py +0 -0
  245. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/_process_common.py +0 -0
  246. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/_process_win32.py +0 -0
  247. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/_process_win32_controller.py +0 -0
  248. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/capture.py +0 -0
  249. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/colorable.py +0 -0
  250. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/contexts.py +0 -0
  251. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/daemonize.py +0 -0
  252. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/data.py +0 -0
  253. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/decorators.py +0 -0
  254. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/dir2.py +0 -0
  255. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/docs.py +0 -0
  256. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/encoding.py +0 -0
  257. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/eventful.py +0 -0
  258. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/frame.py +0 -0
  259. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/generics.py +0 -0
  260. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/importstring.py +0 -0
  261. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/io.py +0 -0
  262. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/ipstruct.py +0 -0
  263. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/jsonutil.py +0 -0
  264. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/localinterfaces.py +0 -0
  265. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/log.py +0 -0
  266. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/module_paths.py +0 -0
  267. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/openpy.py +0 -0
  268. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/path.py +0 -0
  269. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/process.py +0 -0
  270. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/py3compat.py +0 -0
  271. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/sentinel.py +0 -0
  272. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/shimmodule.py +0 -0
  273. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/signatures.py +0 -0
  274. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/strdispatch.py +0 -0
  275. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/sysinfo.py +0 -0
  276. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/syspathcontext.py +0 -0
  277. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tempdir.py +0 -0
  278. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/terminal.py +0 -0
  279. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/__init__.py +0 -0
  280. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_capture.py +0 -0
  281. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_decorators.py +0 -0
  282. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_deprecated.py +0 -0
  283. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_dir2.py +0 -0
  284. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_imports.py +0 -0
  285. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_importstring.py +0 -0
  286. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_module_paths.py +0 -0
  287. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_openpy.py +0 -0
  288. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_path.py +0 -0
  289. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_process.py +0 -0
  290. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_pycolorize.py +0 -0
  291. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_shimmodule.py +0 -0
  292. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_sysinfo.py +0 -0
  293. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_tempdir.py +0 -0
  294. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_text.py +0 -0
  295. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_tokenutil.py +0 -0
  296. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tests/test_wildcard.py +0 -0
  297. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/timing.py +0 -0
  298. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tokenutil.py +0 -0
  299. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/traitlets.py +0 -0
  300. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/tz.py +0 -0
  301. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/ulinecache.py +0 -0
  302. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/version.py +0 -0
  303. {ipython-8.19.0 → ipython-8.21.0}/IPython/utils/wildcard.py +0 -0
  304. {ipython-8.19.0 → ipython-8.21.0}/LICENSE +0 -0
  305. {ipython-8.19.0 → ipython-8.21.0}/README.rst +0 -0
  306. {ipython-8.19.0 → ipython-8.21.0}/docs/Makefile +0 -0
  307. {ipython-8.19.0 → ipython-8.21.0}/docs/README.rst +0 -0
  308. {ipython-8.19.0 → ipython-8.21.0}/docs/autogen_api.py +0 -0
  309. {ipython-8.19.0 → ipython-8.21.0}/docs/autogen_config.py +0 -0
  310. {ipython-8.19.0 → ipython-8.21.0}/docs/autogen_magics.py +0 -0
  311. {ipython-8.19.0 → ipython-8.21.0}/docs/autogen_shortcuts.py +0 -0
  312. {ipython-8.19.0 → ipython-8.21.0}/docs/make.cmd +0 -0
  313. {ipython-8.19.0 → ipython-8.21.0}/docs/man/ipython.1 +0 -0
  314. {ipython-8.19.0 → ipython-8.21.0}/docs/requirements.txt +0 -0
  315. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/2.0/running-crop.png +0 -0
  316. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/2.0/running.png +0 -0
  317. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/2.0/treeview.png +0 -0
  318. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/2.0/user-interface.png +0 -0
  319. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/2.0/widgets.png +0 -0
  320. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  321. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  322. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  323. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  324. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  325. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  326. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  327. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  328. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  329. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  330. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  331. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/autosuggest.gif +0 -0
  332. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  333. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  334. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  335. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  336. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  337. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  338. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  339. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  340. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  341. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  342. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  343. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  344. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  345. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  346. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  347. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ms_visual_studio.png +0 -0
  348. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/notebook_specgram.png +0 -0
  349. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/ptshell_features.png +0 -0
  350. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/qtconsole.png +0 -0
  351. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  352. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_images/unicode_completion.png +0 -0
  353. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_static/favicon.ico +0 -0
  354. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_static/logo.png +0 -0
  355. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_static/theme_overrides.css +0 -0
  356. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_templates/breadcrumbs.html +0 -0
  357. {ipython-8.19.0 → ipython-8.21.0}/docs/source/_templates/notebook_redirect.html +0 -0
  358. {ipython-8.19.0 → ipython-8.21.0}/docs/source/about/history.rst +0 -0
  359. {ipython-8.19.0 → ipython-8.21.0}/docs/source/about/index.rst +0 -0
  360. {ipython-8.19.0 → ipython-8.21.0}/docs/source/about/license_and_copyright.rst +0 -0
  361. {ipython-8.19.0 → ipython-8.21.0}/docs/source/api/index.rst +0 -0
  362. {ipython-8.19.0 → ipython-8.21.0}/docs/source/conf.py +0 -0
  363. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/callbacks.rst +0 -0
  364. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/custommagics.rst +0 -0
  365. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/eventloops.rst +0 -0
  366. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/extensions/autoreload.rst +0 -0
  367. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/extensions/index.rst +0 -0
  368. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/extensions/storemagic.rst +0 -0
  369. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/index.rst +0 -0
  370. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/inputtransforms.rst +0 -0
  371. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/integrating.rst +0 -0
  372. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/intro.rst +0 -0
  373. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/options/index.rst +0 -0
  374. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  375. {ipython-8.19.0 → ipython-8.21.0}/docs/source/config/shortcuts/index.rst +0 -0
  376. {ipython-8.19.0 → ipython-8.21.0}/docs/source/coredev/index.rst +0 -0
  377. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/config.rst +0 -0
  378. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/execution.rst +0 -0
  379. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  380. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  381. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/figs/other_kernels.png +0 -0
  382. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/figs/other_kernels.svg +0 -0
  383. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/how_ipython_works.rst +0 -0
  384. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/index.rst +0 -0
  385. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/inputhook_app.rst +0 -0
  386. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/kernels.rst +0 -0
  387. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/lexer.rst +0 -0
  388. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/messaging.rst +0 -0
  389. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/parallel_connections.rst +0 -0
  390. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/parallel_messages.rst +0 -0
  391. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/pycompat.rst +0 -0
  392. {ipython-8.19.0 → ipython-8.21.0}/docs/source/development/wrapperkernels.rst +0 -0
  393. {ipython-8.19.0 → ipython-8.21.0}/docs/source/index.rst +0 -0
  394. {ipython-8.19.0 → ipython-8.21.0}/docs/source/install/index.rst +0 -0
  395. {ipython-8.19.0 → ipython-8.21.0}/docs/source/install/install.rst +0 -0
  396. {ipython-8.19.0 → ipython-8.21.0}/docs/source/install/kernel_install.rst +0 -0
  397. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/autoawait.rst +0 -0
  398. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/figs/besselj.png +0 -0
  399. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/figs/colors_dark.png +0 -0
  400. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/figs/jn.html +0 -0
  401. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/figs/jn.xhtml +0 -0
  402. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/index.rst +0 -0
  403. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/magics.rst +0 -0
  404. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/plotting.rst +0 -0
  405. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  406. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/reference.rst +0 -0
  407. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/shell.rst +0 -0
  408. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/tips.rst +0 -0
  409. {ipython-8.19.0 → ipython-8.21.0}/docs/source/interactive/tutorial.rst +0 -0
  410. {ipython-8.19.0 → ipython-8.21.0}/docs/source/links.txt +0 -0
  411. {ipython-8.19.0 → ipython-8.21.0}/docs/source/overview.rst +0 -0
  412. {ipython-8.19.0 → ipython-8.21.0}/docs/source/parallel/index.rst +0 -0
  413. {ipython-8.19.0 → ipython-8.21.0}/docs/source/sphinxext.rst +0 -0
  414. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/development.rst +0 -0
  415. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  416. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  417. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  418. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  419. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  420. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  421. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  422. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  423. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  424. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  425. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  426. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/index.rst +0 -0
  427. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/pr/README.md +0 -0
  428. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  429. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  430. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version0.10.rst +0 -0
  431. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version0.11.rst +0 -0
  432. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version0.12.rst +0 -0
  433. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version0.13.rst +0 -0
  434. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version0.8.rst +0 -0
  435. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version0.9.rst +0 -0
  436. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version1.0.rst +0 -0
  437. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version2.0.rst +0 -0
  438. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version3.rst +0 -0
  439. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  440. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version4.rst +0 -0
  441. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version5.rst +0 -0
  442. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version6.rst +0 -0
  443. {ipython-8.19.0 → ipython-8.21.0}/docs/source/whatsnew/version7.rst +0 -0
  444. {ipython-8.19.0 → ipython-8.21.0}/docs/sphinxext/apigen.py +0 -0
  445. {ipython-8.19.0 → ipython-8.21.0}/docs/sphinxext/configtraits.py +0 -0
  446. {ipython-8.19.0 → ipython-8.21.0}/docs/sphinxext/github.py +0 -0
  447. {ipython-8.19.0 → ipython-8.21.0}/docs/sphinxext/magics.py +0 -0
  448. {ipython-8.19.0 → ipython-8.21.0}/examples/Embedding/Index.ipynb +0 -0
  449. {ipython-8.19.0 → ipython-8.21.0}/examples/Embedding/embed_class_short.py +0 -0
  450. {ipython-8.19.0 → ipython-8.21.0}/examples/Embedding/embed_function.py +0 -0
  451. {ipython-8.19.0 → ipython-8.21.0}/examples/Embedding/start_ipython_config.py +0 -0
  452. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
  453. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
  454. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
  455. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
  456. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
  457. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
  458. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
  459. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Index.ipynb +0 -0
  460. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
  461. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
  462. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
  463. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
  464. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
  465. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
  466. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
  467. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
  468. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
  469. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
  470. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/data/flare.json +0 -0
  471. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/example-demo.py +0 -0
  472. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  473. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  474. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  475. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  476. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  477. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/ipython.desktop +0 -0
  478. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
  479. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
  480. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
  481. {ipython-8.19.0 → ipython-8.21.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
  482. {ipython-8.19.0 → ipython-8.21.0}/examples/Index.ipynb +0 -0
  483. {ipython-8.19.0 → ipython-8.21.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
  484. {ipython-8.19.0 → ipython-8.21.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
  485. {ipython-8.19.0 → ipython-8.21.0}/examples/images/FrontendKernel.png +0 -0
  486. {ipython-8.19.0 → ipython-8.21.0}/examples/images/animation.m4v +0 -0
  487. {ipython-8.19.0 → ipython-8.21.0}/examples/images/ipython_logo.png +0 -0
  488. {ipython-8.19.0 → ipython-8.21.0}/examples/images/python_logo.svg +0 -0
  489. {ipython-8.19.0 → ipython-8.21.0}/examples/utils/list_pyfiles.ipy +0 -0
  490. {ipython-8.19.0 → ipython-8.21.0}/examples/utils/list_subdirs.ipy +0 -0
  491. {ipython-8.19.0 → ipython-8.21.0}/ipython.egg-info/dependency_links.txt +0 -0
  492. {ipython-8.19.0 → ipython-8.21.0}/ipython.egg-info/entry_points.txt +0 -0
  493. {ipython-8.19.0 → ipython-8.21.0}/ipython.egg-info/not-zip-safe +0 -0
  494. {ipython-8.19.0 → ipython-8.21.0}/ipython.egg-info/top_level.txt +0 -0
  495. {ipython-8.19.0 → ipython-8.21.0}/long_description.rst +0 -0
  496. {ipython-8.19.0 → ipython-8.21.0}/scripts/ipython.ico +0 -0
  497. {ipython-8.19.0 → ipython-8.21.0}/scripts/ipython_nb.ico +0 -0
  498. {ipython-8.19.0 → ipython-8.21.0}/setupbase.py +0 -0
@@ -190,22 +190,28 @@ class Alias(object):
190
190
  #-----------------------------------------------------------------------------
191
191
 
192
192
  class AliasManager(Configurable):
193
-
194
- default_aliases = List(default_aliases()).tag(config=True)
195
- user_aliases = List(default_value=[]).tag(config=True)
196
- shell = Instance('IPython.core.interactiveshell.InteractiveShellABC', allow_none=True)
193
+ default_aliases: List = List(default_aliases()).tag(config=True)
194
+ user_aliases: List = List(default_value=[]).tag(config=True)
195
+ shell = Instance(
196
+ "IPython.core.interactiveshell.InteractiveShellABC", allow_none=True
197
+ )
197
198
 
198
199
  def __init__(self, shell=None, **kwargs):
199
200
  super(AliasManager, self).__init__(shell=shell, **kwargs)
200
201
  # For convenient access
201
- self.linemagics = self.shell.magics_manager.magics['line']
202
- self.init_aliases()
202
+ if self.shell is not None:
203
+ self.linemagics = self.shell.magics_manager.magics["line"]
204
+ self.init_aliases()
203
205
 
204
206
  def init_aliases(self):
205
207
  # Load default & user aliases
206
208
  for name, cmd in self.default_aliases + self.user_aliases:
207
- if cmd.startswith('ls ') and self.shell.colors == 'NoColor':
208
- cmd = cmd.replace(' --color', '')
209
+ if (
210
+ cmd.startswith("ls ")
211
+ and self.shell is not None
212
+ and self.shell.colors == "NoColor"
213
+ ):
214
+ cmd = cmd.replace(" --color", "")
209
215
  self.soft_define_alias(name, cmd)
210
216
 
211
217
  @property
@@ -246,7 +252,7 @@ class AliasManager(Configurable):
246
252
  raise ValueError('%s is not an alias' % name)
247
253
 
248
254
  def clear_aliases(self):
249
- for name, cmd in self.aliases:
255
+ for name, _ in self.aliases:
250
256
  self.undefine_alias(name)
251
257
 
252
258
  def retrieve_alias(self, name):
@@ -213,7 +213,9 @@ class BaseIPythonApplication(Application):
213
213
  return d
214
214
 
215
215
  _in_init_profile_dir = False
216
+
216
217
  profile_dir = Instance(ProfileDir, allow_none=True)
218
+
217
219
  @default('profile_dir')
218
220
  def _profile_dir_default(self):
219
221
  # avoid recursion
@@ -226,11 +228,13 @@ class BaseIPythonApplication(Application):
226
228
  overwrite = Bool(False,
227
229
  help="""Whether to overwrite existing config files when copying"""
228
230
  ).tag(config=True)
231
+
229
232
  auto_create = Bool(False,
230
233
  help="""Whether to create profile dir if it doesn't exist"""
231
234
  ).tag(config=True)
232
235
 
233
236
  config_files = List(Unicode())
237
+
234
238
  @default('config_files')
235
239
  def _config_files_default(self):
236
240
  return [self.config_file_name]
@@ -454,7 +454,7 @@ class Pdb(OldPdb):
454
454
  with self._hold_exceptions(_chained_exceptions):
455
455
  OldPdb.interaction(self, frame, tb)
456
456
  else:
457
- OldPdb.interaction(self, frame, traceback)
457
+ OldPdb.interaction(self, frame, tb_or_exc)
458
458
 
459
459
  except KeyboardInterrupt:
460
460
  self.stdout.write("\n" + self.shell.get_exception_only())
@@ -1111,10 +1111,13 @@ class InterruptiblePdb(Pdb):
1111
1111
  raise
1112
1112
 
1113
1113
 
1114
- def set_trace(frame=None):
1114
+ def set_trace(frame=None, header=None):
1115
1115
  """
1116
1116
  Start debugging from `frame`.
1117
1117
 
1118
1118
  If frame is not specified, debugging starts from caller's frame.
1119
1119
  """
1120
- Pdb().set_trace(frame or sys._getframe().f_back)
1120
+ pdb = Pdb()
1121
+ if header is not None:
1122
+ pdb.message(header)
1123
+ pdb.set_trace(frame or sys._getframe().f_back)
@@ -0,0 +1,175 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Color schemes for exception handling code in IPython.
4
+ """
5
+
6
+ import os
7
+
8
+ #*****************************************************************************
9
+ # Copyright (C) 2005-2006 Fernando Perez <fperez@colorado.edu>
10
+ #
11
+ # Distributed under the terms of the BSD License. The full license is in
12
+ # the file COPYING, distributed as part of this software.
13
+ #*****************************************************************************
14
+
15
+ from IPython.utils.coloransi import ColorSchemeTable, TermColors, ColorScheme
16
+
17
+ def exception_colors():
18
+ """Return a color table with fields for exception reporting.
19
+
20
+ The table is an instance of ColorSchemeTable with schemes added for
21
+ 'Neutral', 'Linux', 'LightBG' and 'NoColor' and fields for exception handling filled
22
+ in.
23
+
24
+ Examples:
25
+
26
+ >>> ec = exception_colors()
27
+ >>> ec.active_scheme_name
28
+ ''
29
+ >>> print(ec.active_colors)
30
+ None
31
+
32
+ Now we activate a color scheme:
33
+ >>> ec.set_active_scheme('NoColor')
34
+ >>> ec.active_scheme_name
35
+ 'NoColor'
36
+ >>> sorted(ec.active_colors.keys())
37
+ ['Normal', 'caret', 'em', 'excName', 'filename', 'filenameEm', 'line',
38
+ 'lineno', 'linenoEm', 'name', 'nameEm', 'normalEm', 'topline', 'vName',
39
+ 'val', 'valEm']
40
+ """
41
+
42
+ ex_colors = ColorSchemeTable()
43
+
44
+ # Populate it with color schemes
45
+ C = TermColors # shorthand and local lookup
46
+ ex_colors.add_scheme(
47
+ ColorScheme(
48
+ "NoColor",
49
+ {
50
+ # The color to be used for the top line
51
+ "topline": C.NoColor,
52
+
53
+ # The colors to be used in the traceback
54
+ "filename": C.NoColor,
55
+ "lineno": C.NoColor,
56
+ "name": C.NoColor,
57
+ "vName": C.NoColor,
58
+ "val": C.NoColor,
59
+ "em": C.NoColor,
60
+
61
+ # Emphasized colors for the last frame of the traceback
62
+ "normalEm": C.NoColor,
63
+ "filenameEm": C.NoColor,
64
+ "linenoEm": C.NoColor,
65
+ "nameEm": C.NoColor,
66
+ "valEm": C.NoColor,
67
+
68
+ # Colors for printing the exception
69
+ "excName": C.NoColor,
70
+ "line": C.NoColor,
71
+ "caret": C.NoColor,
72
+ "Normal": C.NoColor,
73
+ },
74
+ )
75
+ )
76
+
77
+ # make some schemes as instances so we can copy them for modification easily
78
+ ex_colors.add_scheme(
79
+ ColorScheme(
80
+ "Linux",
81
+ {
82
+ # The color to be used for the top line
83
+ "topline": C.LightRed,
84
+ # The colors to be used in the traceback
85
+ "filename": C.Green,
86
+ "lineno": C.Green,
87
+ "name": C.Purple,
88
+ "vName": C.Cyan,
89
+ "val": C.Green,
90
+ "em": C.LightCyan,
91
+ # Emphasized colors for the last frame of the traceback
92
+ "normalEm": C.LightCyan,
93
+ "filenameEm": C.LightGreen,
94
+ "linenoEm": C.LightGreen,
95
+ "nameEm": C.LightPurple,
96
+ "valEm": C.LightBlue,
97
+ # Colors for printing the exception
98
+ "excName": C.LightRed,
99
+ "line": C.Yellow,
100
+ "caret": C.White,
101
+ "Normal": C.Normal,
102
+ },
103
+ )
104
+ )
105
+
106
+ # For light backgrounds, swap dark/light colors
107
+ ex_colors.add_scheme(
108
+ ColorScheme(
109
+ "LightBG",
110
+ {
111
+ # The color to be used for the top line
112
+ "topline": C.Red,
113
+
114
+ # The colors to be used in the traceback
115
+ "filename": C.LightGreen,
116
+ "lineno": C.LightGreen,
117
+ "name": C.LightPurple,
118
+ "vName": C.Cyan,
119
+ "val": C.LightGreen,
120
+ "em": C.Cyan,
121
+
122
+ # Emphasized colors for the last frame of the traceback
123
+ "normalEm": C.Cyan,
124
+ "filenameEm": C.Green,
125
+ "linenoEm": C.Green,
126
+ "nameEm": C.Purple,
127
+ "valEm": C.Blue,
128
+
129
+ # Colors for printing the exception
130
+ "excName": C.Red,
131
+ # "line": C.Brown, # brown often is displayed as yellow
132
+ "line": C.Red,
133
+ "caret": C.Normal,
134
+ "Normal": C.Normal,
135
+ },
136
+ )
137
+ )
138
+
139
+ ex_colors.add_scheme(
140
+ ColorScheme(
141
+ "Neutral",
142
+ {
143
+ # The color to be used for the top line
144
+ "topline": C.Red,
145
+ # The colors to be used in the traceback
146
+ "filename": C.LightGreen,
147
+ "lineno": C.LightGreen,
148
+ "name": C.LightPurple,
149
+ "vName": C.Cyan,
150
+ "val": C.LightGreen,
151
+ "em": C.Cyan,
152
+ # Emphasized colors for the last frame of the traceback
153
+ "normalEm": C.Cyan,
154
+ "filenameEm": C.Green,
155
+ "linenoEm": C.Green,
156
+ "nameEm": C.Purple,
157
+ "valEm": C.Blue,
158
+ # Colors for printing the exception
159
+ "excName": C.Red,
160
+ # line = C.Brown, # brown often is displayed as yellow
161
+ "line": C.Red,
162
+ "caret": C.Normal,
163
+ "Normal": C.Normal,
164
+ },
165
+ )
166
+ )
167
+
168
+ # Hack: the 'neutral' colours are not very visible on a dark background on
169
+ # Windows. Since Windows command prompts have a dark background by default, and
170
+ # relatively few users are likely to alter that, we will use the 'Linux' colours,
171
+ # designed for a dark background, as the default on Windows.
172
+ if os.name == "nt":
173
+ ex_colors.add_scheme(ex_colors['Linux'].copy('Neutral'))
174
+
175
+ return ex_colors
@@ -10,8 +10,7 @@ import sys
10
10
  from importlib import import_module, reload
11
11
 
12
12
  from traitlets.config.configurable import Configurable
13
- from IPython.utils.path import ensure_dir_exists, compress_user
14
- from IPython.utils.decorators import undoc
13
+ from IPython.utils.path import ensure_dir_exists
15
14
  from traitlets import Instance
16
15
 
17
16
 
@@ -36,35 +35,22 @@ class ExtensionManager(Configurable):
36
35
  the only argument. You can do anything you want with IPython at
37
36
  that point, including defining new magic and aliases, adding new
38
37
  components, etc.
39
-
38
+
40
39
  You can also optionally define an :func:`unload_ipython_extension(ipython)`
41
40
  function, which will be called if the user unloads or reloads the extension.
42
41
  The extension manager will only call :func:`load_ipython_extension` again
43
42
  if the extension is reloaded.
44
43
 
45
44
  You can put your extension modules anywhere you want, as long as
46
- they can be imported by Python's standard import mechanism. However,
47
- to make it easy to write extensions, you can also put your extensions
48
- in ``os.path.join(self.ipython_dir, 'extensions')``. This directory
49
- is added to ``sys.path`` automatically.
45
+ they can be imported by Python's standard import mechanism.
50
46
  """
51
47
 
52
48
  shell = Instance('IPython.core.interactiveshell.InteractiveShellABC', allow_none=True)
53
49
 
54
50
  def __init__(self, shell=None, **kwargs):
55
51
  super(ExtensionManager, self).__init__(shell=shell, **kwargs)
56
- self.shell.observe(
57
- self._on_ipython_dir_changed, names=('ipython_dir',)
58
- )
59
52
  self.loaded = set()
60
53
 
61
- @property
62
- def ipython_extension_dir(self):
63
- return os.path.join(self.shell.ipython_dir, u'extensions')
64
-
65
- def _on_ipython_dir_changed(self, change):
66
- ensure_dir_exists(self.ipython_extension_dir)
67
-
68
54
  def load_extension(self, module_str: str):
69
55
  """Load an IPython extension by its module name.
70
56
 
@@ -84,7 +70,7 @@ class ExtensionManager(Configurable):
84
70
  if module_str in self.loaded:
85
71
  return "already loaded"
86
72
 
87
- from IPython.utils.syspathcontext import prepended_to_syspath
73
+ assert self.shell is not None
88
74
 
89
75
  with self.shell.builtin_trap:
90
76
  if module_str not in sys.modules:
@@ -125,7 +111,6 @@ class ExtensionManager(Configurable):
125
111
  :func:`reload` is called and then the :func:`load_ipython_extension`
126
112
  function of the module, if it exists is called.
127
113
  """
128
- from IPython.utils.syspathcontext import prepended_to_syspath
129
114
 
130
115
  if BUILTINS_EXTS.get(module_str, False) is True:
131
116
  module_str = "IPython.extensions." + module_str
@@ -133,8 +118,7 @@ class ExtensionManager(Configurable):
133
118
  if (module_str in self.loaded) and (module_str in sys.modules):
134
119
  self.unload_extension(module_str)
135
120
  mod = sys.modules[module_str]
136
- with prepended_to_syspath(self.ipython_extension_dir):
137
- reload(mod)
121
+ reload(mod)
138
122
  if self._call_load_ipython_extension(mod):
139
123
  self.loaded.add(module_str)
140
124
  else:
@@ -3604,7 +3604,7 @@ class InteractiveShell(SingletonConfigurable):
3604
3604
  # Things related to GUI support and pylab
3605
3605
  #-------------------------------------------------------------------------
3606
3606
 
3607
- active_eventloop = None
3607
+ active_eventloop: Optional[str] = None
3608
3608
 
3609
3609
  def enable_gui(self, gui=None):
3610
3610
  raise NotImplementedError('Implement enable_gui in a subclass')
@@ -124,7 +124,7 @@ class BasicMagics(Magics):
124
124
  In [6]: %whereami
125
125
  Out[6]: '/home/testuser'
126
126
 
127
- In [7]: %alias_magic h history "-p -l 30" --line
127
+ In [7]: %alias_magic h history -p "-l 30" --line
128
128
  Created `%h` as an alias for `%history -l 30`.
129
129
  """
130
130
 
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  """Tools for inspecting Python objects.
3
2
 
4
3
  Uses syntax highlighting for presenting the various information elements.
@@ -22,7 +21,6 @@ import inspect
22
21
  import io as stdlib_io
23
22
  import linecache
24
23
  import os
25
- import sys
26
24
  import types
27
25
  import warnings
28
26
 
@@ -30,6 +28,8 @@ from typing import Any, Optional, Dict, Union, List, Tuple
30
28
 
31
29
  from typing import TypeAlias
32
30
 
31
+ import traitlets
32
+
33
33
  # IPython's own
34
34
  from IPython.core import page
35
35
  from IPython.lib.pretty import pretty
@@ -41,7 +41,7 @@ from IPython.utils.path import compress_user
41
41
  from IPython.utils.text import indent
42
42
  from IPython.utils.wildcard import list_namespace
43
43
  from IPython.utils.wildcard import typestr2type
44
- from IPython.utils.coloransi import TermColors, ColorScheme, ColorSchemeTable
44
+ from IPython.utils.coloransi import TermColors
45
45
  from IPython.utils.py3compat import cast_unicode
46
46
  from IPython.utils.colorable import Colorable
47
47
  from IPython.utils.decorators import undoc
@@ -145,7 +145,7 @@ def get_encoding(obj):
145
145
  # getsourcelines returns lineno with 1-offset and page() uses
146
146
  # 0-offset, so we must adjust.
147
147
  with stdlib_io.open(ofile, 'rb') as buffer: # Tweaked to use io.open for Python 2
148
- encoding, lines = openpy.detect_encoding(buffer.readline)
148
+ encoding, _lines = openpy.detect_encoding(buffer.readline)
149
149
  return encoding
150
150
 
151
151
  def getdoc(obj) -> Union[str,None]:
@@ -328,7 +328,7 @@ def _get_wrapped(obj):
328
328
  return orig_obj
329
329
  return obj
330
330
 
331
- def find_file(obj) -> str:
331
+ def find_file(obj) -> Optional[str]:
332
332
  """Find the absolute path to the file where an object was defined.
333
333
 
334
334
  This is essentially a robust wrapper around `inspect.getabsfile`.
@@ -346,7 +346,7 @@ def find_file(obj) -> str:
346
346
  """
347
347
  obj = _get_wrapped(obj)
348
348
 
349
- fname = None
349
+ fname: Optional[str] = None
350
350
  try:
351
351
  fname = inspect.getabsfile(obj)
352
352
  except TypeError:
@@ -360,7 +360,7 @@ def find_file(obj) -> str:
360
360
  except OSError:
361
361
  pass
362
362
 
363
- return cast_unicode(fname)
363
+ return fname
364
364
 
365
365
 
366
366
  def find_source_lines(obj):
@@ -396,11 +396,20 @@ def find_source_lines(obj):
396
396
 
397
397
  class Inspector(Colorable):
398
398
 
399
- def __init__(self, color_table=InspectColors,
400
- code_color_table=PyColorize.ANSICodeColors,
401
- scheme=None,
402
- str_detail_level=0,
403
- parent=None, config=None):
399
+ mime_hooks = traitlets.Dict(
400
+ config=True,
401
+ help="dictionary of mime to callable to add informations into help mimebundle dict",
402
+ ).tag(config=True)
403
+
404
+ def __init__(
405
+ self,
406
+ color_table=InspectColors,
407
+ code_color_table=PyColorize.ANSICodeColors,
408
+ scheme=None,
409
+ str_detail_level=0,
410
+ parent=None,
411
+ config=None,
412
+ ):
404
413
  super(Inspector, self).__init__(parent=parent, config=config)
405
414
  self.color_table = color_table
406
415
  self.parser = PyColorize.Parser(out='str', parent=self, style=scheme)
@@ -625,7 +634,7 @@ class Inspector(Colorable):
625
634
  if k in ("text/html", "text/plain"):
626
635
  continue
627
636
  else:
628
- new_b = bundle[k] # type:ignore
637
+ new_b[k] = bundle[k] # type:ignore
629
638
  return new_b
630
639
 
631
640
  def _append_info_field(
@@ -759,6 +768,10 @@ class Inspector(Colorable):
759
768
  detail_level=detail_level,
760
769
  omit_sections=omit_sections,
761
770
  )
771
+ for key, hook in self.mime_hooks.items():
772
+ res = hook(obj, info)
773
+ if res is not None:
774
+ bundle[key] = res
762
775
  return self.format_mime(bundle)
763
776
 
764
777
  def pinfo(
@@ -26,8 +26,7 @@ from traitlets import List
26
26
  #-----------------------------------------------------------------------------
27
27
 
28
28
  class PayloadManager(Configurable):
29
-
30
- _payload = List([])
29
+ _payload: List = List([])
31
30
 
32
31
  def write_payload(self, data, single=True):
33
32
  """Include or update the specified `data` payload in the PayloadManager.
@@ -209,7 +209,7 @@ class ProfileCreate(BaseIPythonApplication):
209
209
  name = u'ipython-profile'
210
210
  description = create_help
211
211
  examples = _create_examples
212
- auto_create = Bool(True)
212
+ auto_create = Bool(True).tag(config=True)
213
213
  def _log_format_default(self):
214
214
  return "[%(name)s] %(message)s"
215
215
 
@@ -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 = 19
19
+ _version_minor = 21
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "rc1"
@@ -34,6 +34,7 @@ from IPython.core.completer import (
34
34
  # Test functions
35
35
  # -----------------------------------------------------------------------------
36
36
 
37
+
37
38
  def recompute_unicode_ranges():
38
39
  """
39
40
  utility to recompute the largest unicode range without any characters
@@ -42,8 +43,9 @@ def recompute_unicode_ranges():
42
43
  """
43
44
  import itertools
44
45
  import unicodedata
46
+
45
47
  valid = []
46
- for c in range(0,0x10FFFF + 1):
48
+ for c in range(0, 0x10FFFF + 1):
47
49
  try:
48
50
  unicodedata.name(chr(c))
49
51
  except ValueError:
@@ -58,22 +60,28 @@ def recompute_unicode_ranges():
58
60
  rg = list(ranges(valid))
59
61
  lens = []
60
62
  gap_lens = []
61
- pstart, pstop = 0,0
63
+ pstart, pstop = 0, 0
62
64
  for start, stop in rg:
63
- lens.append(stop-start)
64
- gap_lens.append((start - pstop, hex(pstop), hex(start), f'{round((start - pstop)/0xe01f0*100)}%'))
65
+ lens.append(stop - start)
66
+ gap_lens.append(
67
+ (
68
+ start - pstop,
69
+ hex(pstop + 1),
70
+ hex(start),
71
+ f"{round((start - pstop)/0xe01f0*100)}%",
72
+ )
73
+ )
65
74
  pstart, pstop = start, stop
66
75
 
67
76
  return sorted(gap_lens)[-1]
68
77
 
69
78
 
70
-
71
79
  def test_unicode_range():
72
80
  """
73
81
  Test that the ranges we test for unicode names give the same number of
74
82
  results than testing the full length.
75
83
  """
76
- from IPython.core.completer import _unicode_name_compute, _UNICODE_RANGES
84
+ from IPython.core.completer import _unicode_name_compute, _UNICODE_RANGES
77
85
 
78
86
  expected_list = _unicode_name_compute([(0, 0x110000)])
79
87
  test = _unicode_name_compute(_UNICODE_RANGES)
@@ -98,8 +106,8 @@ def test_unicode_range():
98
106
  """
99
107
  assert len_exp == len_test, message
100
108
 
101
- # fail if new unicode symbols have been added.
102
- assert len_exp <= 143041, message
109
+ # fail if new unicode symbols have been added.
110
+ assert len_exp <= 143668, message
103
111
 
104
112
 
105
113
  @contextmanager
@@ -428,6 +436,10 @@ class TestCompleter(unittest.TestCase):
428
436
  c = _("%ls foo")[0]
429
437
  self.assertEqual(c.text, escaped)
430
438
 
439
+ @pytest.mark.xfail(
440
+ sys.version_info.releaselevel in ("alpha",),
441
+ reason="Parso does not yet parse 3.13",
442
+ )
431
443
  def test_all_completions_dups(self):
432
444
  """
433
445
  Make sure the output of `IPCompleter.all_completions` does not have
@@ -446,6 +458,10 @@ class TestCompleter(unittest.TestCase):
446
458
  matches = c.all_completions("TestClass.a")
447
459
  assert matches == ['TestClass.a', 'TestClass.a1'], jedi_status
448
460
 
461
+ @pytest.mark.xfail(
462
+ sys.version_info.releaselevel in ("alpha",),
463
+ reason="Parso does not yet parse 3.13",
464
+ )
449
465
  def test_jedi(self):
450
466
  """
451
467
  A couple of issue we had with Jedi
@@ -481,6 +497,10 @@ class TestCompleter(unittest.TestCase):
481
497
 
482
498
  _test_not_complete("does not mix types", 'a=(1,"foo");a[0].', "capitalize")
483
499
 
500
+ @pytest.mark.xfail(
501
+ sys.version_info.releaselevel in ("alpha",),
502
+ reason="Parso does not yet parse 3.13",
503
+ )
484
504
  def test_completion_have_signature(self):
485
505
  """
486
506
  Lets make sure jedi is capable of pulling out the signature of the function we are completing.
@@ -496,6 +516,10 @@ class TestCompleter(unittest.TestCase):
496
516
  "encoding" in c.signature
497
517
  ), "Signature of function was not found by completer"
498
518
 
519
+ @pytest.mark.xfail(
520
+ sys.version_info.releaselevel in ("alpha",),
521
+ reason="Parso does not yet parse 3.13",
522
+ )
499
523
  def test_completions_have_type(self):
500
524
  """
501
525
  Lets make sure matchers provide completion type.
@@ -531,6 +555,10 @@ class TestCompleter(unittest.TestCase):
531
555
  assert len(l) == 1, "Completions (Z.z<tab>) correctly deduplicate: %s " % l
532
556
  assert l[0].text == "zoo" # and not `it.accumulate`
533
557
 
558
+ @pytest.mark.xfail(
559
+ sys.version_info.releaselevel in ("alpha",),
560
+ reason="Parso does not yet parse 3.13",
561
+ )
534
562
  def test_greedy_completions(self):
535
563
  """
536
564
  Test the capability of the Greedy completer.
@@ -1608,6 +1636,10 @@ class TestCompleter(unittest.TestCase):
1608
1636
  configure(None)
1609
1637
  _("--", ["completion_iter", "completion_list"])
1610
1638
 
1639
+ @pytest.mark.xfail(
1640
+ sys.version_info.releaselevel in ("alpha",),
1641
+ reason="Parso does not yet parse 3.13",
1642
+ )
1611
1643
  def test_matcher_suppression_with_jedi(self):
1612
1644
  ip = get_ipython()
1613
1645
  c = ip.Completer
@@ -577,8 +577,12 @@ class InteractiveShellTestCase(unittest.TestCase):
577
577
  self.assertEqual(res.success, True)
578
578
 
579
579
 
580
+ @pytest.mark.skipif(
581
+ sys.implementation.name == "pypy"
582
+ and ((7, 3, 13) < sys.implementation.version < (7, 3, 16)),
583
+ reason="Unicode issues with scandir on PyPy, see https://github.com/pypy/pypy/issues/4860",
584
+ )
580
585
  class TestSafeExecfileNonAsciiPath(unittest.TestCase):
581
-
582
586
  @onlyif_unicode_paths
583
587
  def setUp(self):
584
588
  self.BASETESTDIR = tempfile.mkdtemp()