ipython 8.25.0__tar.gz → 8.27.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.25.0 → ipython-8.27.0}/IPython/core/async_helpers.py +0 -1
  2. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/completer.py +69 -26
  3. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/interactiveshell.py +1 -1
  4. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/pylab.py +1 -1
  5. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/prefilter.py +4 -2
  6. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/profiledir.py +32 -13
  7. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/release.py +1 -1
  8. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/splitinput.py +9 -2
  9. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_autocall.py +1 -0
  10. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_completer.py +32 -12
  11. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_debugger.py +63 -45
  12. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_formatters.py +37 -22
  13. ipython-8.27.0/IPython/core/tests/test_handlers.py +75 -0
  14. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_interactiveshell.py +67 -47
  15. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_oinspect.py +21 -11
  16. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_prefilter.py +23 -11
  17. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_pylabtools.py +23 -0
  18. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_splitinput.py +7 -5
  19. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_ultratb.py +12 -0
  20. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/ultratb.py +23 -20
  21. {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/tests/test_autoreload.py +1 -0
  22. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/pretty.py +10 -2
  23. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/interactiveshell.py +5 -0
  24. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/asyncio.py +1 -0
  25. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/decorators.py +7 -4
  26. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_emscripten.py +0 -1
  27. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_sysinfo.py +1 -1
  28. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/io.py +2 -0
  29. {ipython-8.25.0/ipython.egg-info → ipython-8.27.0}/PKG-INFO +2 -1
  30. {ipython-8.25.0 → ipython-8.27.0}/README.rst +0 -52
  31. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/custommagics.rst +2 -2
  32. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version8.rst +53 -0
  33. {ipython-8.25.0 → ipython-8.27.0/ipython.egg-info}/PKG-INFO +2 -1
  34. {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/requires.txt +1 -0
  35. {ipython-8.25.0 → ipython-8.27.0}/pyproject.toml +7 -0
  36. ipython-8.25.0/IPython/core/tests/test_handlers.py +0 -97
  37. {ipython-8.25.0 → ipython-8.27.0}/.flake8 +0 -0
  38. {ipython-8.25.0 → ipython-8.27.0}/.mailmap +0 -0
  39. {ipython-8.25.0 → ipython-8.27.0}/.pre-commit-config.yaml +0 -0
  40. {ipython-8.25.0 → ipython-8.27.0}/COPYING.rst +0 -0
  41. {ipython-8.25.0 → ipython-8.27.0}/IPython/__init__.py +0 -0
  42. {ipython-8.25.0 → ipython-8.27.0}/IPython/__main__.py +0 -0
  43. {ipython-8.25.0 → ipython-8.27.0}/IPython/conftest.py +0 -0
  44. {ipython-8.25.0 → ipython-8.27.0}/IPython/consoleapp.py +0 -0
  45. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/__init__.py +0 -0
  46. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/alias.py +0 -0
  47. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/application.py +0 -0
  48. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/autocall.py +0 -0
  49. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/builtin_trap.py +0 -0
  50. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/compilerop.py +0 -0
  51. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/completerlib.py +0 -0
  52. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/crashhandler.py +0 -0
  53. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/debugger.py +0 -0
  54. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/display.py +0 -0
  55. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/display_functions.py +0 -0
  56. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/display_trap.py +0 -0
  57. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/displayhook.py +0 -0
  58. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/displaypub.py +0 -0
  59. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/error.py +0 -0
  60. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/events.py +0 -0
  61. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/excolors.py +0 -0
  62. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/extensions.py +0 -0
  63. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/formatters.py +0 -0
  64. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/getipython.py +0 -0
  65. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/guarded_eval.py +0 -0
  66. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/history.py +0 -0
  67. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/historyapp.py +0 -0
  68. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/hooks.py +0 -0
  69. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/inputsplitter.py +0 -0
  70. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/inputtransformer.py +0 -0
  71. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/inputtransformer2.py +0 -0
  72. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/latex_symbols.py +0 -0
  73. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/logger.py +0 -0
  74. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/macro.py +0 -0
  75. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magic.py +0 -0
  76. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magic_arguments.py +0 -0
  77. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/__init__.py +0 -0
  78. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/ast_mod.py +0 -0
  79. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/auto.py +0 -0
  80. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/basic.py +0 -0
  81. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/code.py +0 -0
  82. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/config.py +0 -0
  83. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/display.py +0 -0
  84. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/execution.py +0 -0
  85. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/extension.py +0 -0
  86. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/history.py +0 -0
  87. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/logging.py +0 -0
  88. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/namespace.py +0 -0
  89. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/osm.py +0 -0
  90. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/packaging.py +0 -0
  91. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/magics/script.py +0 -0
  92. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/oinspect.py +0 -0
  93. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/page.py +0 -0
  94. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/payload.py +0 -0
  95. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/payloadpage.py +0 -0
  96. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/profile/README_STARTUP +0 -0
  97. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/profileapp.py +0 -0
  98. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/prompts.py +0 -0
  99. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/pylabtools.py +0 -0
  100. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/shellapp.py +0 -0
  101. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/2x2.jpg +0 -0
  102. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/2x2.png +0 -0
  103. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/__init__.py +0 -0
  104. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/bad_all.py +0 -0
  105. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
  106. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/nonascii.py +0 -0
  107. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/nonascii2.py +0 -0
  108. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/print_argv.py +0 -0
  109. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/refbug.py +0 -0
  110. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/simpleerr.py +0 -0
  111. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/tclass.py +0 -0
  112. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_alias.py +0 -0
  113. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_application.py +0 -0
  114. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_async_helpers.py +0 -0
  115. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_compilerop.py +0 -0
  116. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_completerlib.py +0 -0
  117. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_display.py +0 -0
  118. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_displayhook.py +0 -0
  119. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_events.py +0 -0
  120. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
  121. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_extension.py +0 -0
  122. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_guarded_eval.py +0 -0
  123. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_history.py +0 -0
  124. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_hooks.py +0 -0
  125. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_imports.py +0 -0
  126. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_inputsplitter.py +0 -0
  127. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_inputtransformer.py +0 -0
  128. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
  129. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
  130. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_iplib.py +0 -0
  131. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_logger.py +0 -0
  132. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_magic.py +0 -0
  133. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_magic_arguments.py +0 -0
  134. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_magic_terminal.py +0 -0
  135. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_page.py +0 -0
  136. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_paths.py +0 -0
  137. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_profile.py +0 -0
  138. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_prompts.py +0 -0
  139. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_run.py +0 -0
  140. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/tests/test_shellapp.py +0 -0
  141. {ipython-8.25.0 → ipython-8.27.0}/IPython/core/usage.py +0 -0
  142. {ipython-8.25.0 → ipython-8.27.0}/IPython/display.py +0 -0
  143. {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/__init__.py +0 -0
  144. {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/autoreload.py +0 -0
  145. {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/storemagic.py +0 -0
  146. {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/tests/__init__.py +0 -0
  147. {ipython-8.25.0 → ipython-8.27.0}/IPython/extensions/tests/test_storemagic.py +0 -0
  148. {ipython-8.25.0 → ipython-8.27.0}/IPython/external/__init__.py +0 -0
  149. {ipython-8.25.0 → ipython-8.27.0}/IPython/external/qt_for_kernel.py +0 -0
  150. {ipython-8.25.0 → ipython-8.27.0}/IPython/external/qt_loaders.py +0 -0
  151. {ipython-8.25.0 → ipython-8.27.0}/IPython/external/tests/__init__.py +0 -0
  152. {ipython-8.25.0 → ipython-8.27.0}/IPython/external/tests/test_qt_loaders.py +0 -0
  153. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/__init__.py +0 -0
  154. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/backgroundjobs.py +0 -0
  155. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/clipboard.py +0 -0
  156. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/deepreload.py +0 -0
  157. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/demo.py +0 -0
  158. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/display.py +0 -0
  159. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/editorhooks.py +0 -0
  160. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/guisupport.py +0 -0
  161. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/latextools.py +0 -0
  162. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/lexers.py +0 -0
  163. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/__init__.py +0 -0
  164. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test.wav +0 -0
  165. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
  166. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_clipboard.py +0 -0
  167. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_deepreload.py +0 -0
  168. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_display.py +0 -0
  169. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_editorhooks.py +0 -0
  170. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_imports.py +0 -0
  171. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_latextools.py +0 -0
  172. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_lexers.py +0 -0
  173. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_pretty.py +0 -0
  174. {ipython-8.25.0 → ipython-8.27.0}/IPython/lib/tests/test_pygments.py +0 -0
  175. {ipython-8.25.0 → ipython-8.27.0}/IPython/paths.py +0 -0
  176. {ipython-8.25.0 → ipython-8.27.0}/IPython/py.typed +0 -0
  177. {ipython-8.25.0 → ipython-8.27.0}/IPython/sphinxext/__init__.py +0 -0
  178. {ipython-8.25.0 → ipython-8.27.0}/IPython/sphinxext/custom_doctests.py +0 -0
  179. {ipython-8.25.0 → ipython-8.27.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  180. {ipython-8.25.0 → ipython-8.27.0}/IPython/sphinxext/ipython_directive.py +0 -0
  181. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/__init__.py +0 -0
  182. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/console.py +0 -0
  183. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/debugger.py +0 -0
  184. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/embed.py +0 -0
  185. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/ipapp.py +0 -0
  186. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/magics.py +0 -0
  187. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/prompts.py +0 -0
  188. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  189. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  190. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  191. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  192. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  193. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  194. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  195. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  196. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  197. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  198. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/ptutils.py +0 -0
  199. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  200. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  201. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
  202. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/shortcuts/filters.py +0 -0
  203. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/__init__.py +0 -0
  204. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
  205. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_embed.py +0 -0
  206. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_help.py +0 -0
  207. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
  208. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
  209. {ipython-8.25.0 → ipython-8.27.0}/IPython/terminal/tests/test_shortcuts.py +0 -0
  210. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/__init__.py +0 -0
  211. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/globalipapp.py +0 -0
  212. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/ipunittest.py +0 -0
  213. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/Makefile +0 -0
  214. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/README.txt +0 -0
  215. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/__init__.py +0 -0
  216. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/dtexample.py +0 -0
  217. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  218. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  219. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/setup.py +0 -0
  220. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/simple.py +0 -0
  221. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/simplevars.py +0 -0
  222. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_combo.txt +0 -0
  223. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_example.txt +0 -0
  224. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  225. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  226. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/plugin/test_refs.py +0 -0
  227. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/skipdoctest.py +0 -0
  228. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tests/__init__.py +0 -0
  229. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tests/test_decorators.py +0 -0
  230. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tests/test_ipunittest.py +0 -0
  231. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tests/test_tools.py +0 -0
  232. {ipython-8.25.0 → ipython-8.27.0}/IPython/testing/tools.py +0 -0
  233. {ipython-8.25.0 → ipython-8.27.0}/IPython/tests/cve.py +0 -0
  234. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/PyColorize.py +0 -0
  235. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/__init__.py +0 -0
  236. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_cli.py +0 -0
  237. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_common.py +0 -0
  238. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_posix.py +0 -0
  239. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_win32.py +0 -0
  240. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/_process_win32_controller.py +0 -0
  241. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/capture.py +0 -0
  242. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/colorable.py +0 -0
  243. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/coloransi.py +0 -0
  244. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/contexts.py +0 -0
  245. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/daemonize.py +0 -0
  246. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/data.py +0 -0
  247. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/decorators.py +0 -0
  248. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/dir2.py +0 -0
  249. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/docs.py +0 -0
  250. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/encoding.py +0 -0
  251. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/eventful.py +0 -0
  252. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/frame.py +0 -0
  253. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/generics.py +0 -0
  254. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/importstring.py +0 -0
  255. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/ipstruct.py +0 -0
  256. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/jsonutil.py +0 -0
  257. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/localinterfaces.py +0 -0
  258. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/log.py +0 -0
  259. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/module_paths.py +0 -0
  260. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/openpy.py +0 -0
  261. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/path.py +0 -0
  262. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/process.py +0 -0
  263. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/py3compat.py +0 -0
  264. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/sentinel.py +0 -0
  265. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/shimmodule.py +0 -0
  266. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/signatures.py +0 -0
  267. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/strdispatch.py +0 -0
  268. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/sysinfo.py +0 -0
  269. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/syspathcontext.py +0 -0
  270. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tempdir.py +0 -0
  271. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/terminal.py +0 -0
  272. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/__init__.py +0 -0
  273. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_capture.py +0 -0
  274. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_decorators.py +0 -0
  275. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_deprecated.py +0 -0
  276. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_dir2.py +0 -0
  277. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_imports.py +0 -0
  278. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_importstring.py +0 -0
  279. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_io.py +0 -0
  280. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_module_paths.py +0 -0
  281. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_openpy.py +0 -0
  282. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_path.py +0 -0
  283. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_process.py +0 -0
  284. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_pycolorize.py +0 -0
  285. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_shimmodule.py +0 -0
  286. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_sysinfo.py +0 -0
  287. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_tempdir.py +0 -0
  288. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_text.py +0 -0
  289. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_tokenutil.py +0 -0
  290. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tests/test_wildcard.py +0 -0
  291. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/text.py +0 -0
  292. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/timing.py +0 -0
  293. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tokenutil.py +0 -0
  294. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/traitlets.py +0 -0
  295. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/tz.py +0 -0
  296. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/ulinecache.py +0 -0
  297. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/version.py +0 -0
  298. {ipython-8.25.0 → ipython-8.27.0}/IPython/utils/wildcard.py +0 -0
  299. {ipython-8.25.0 → ipython-8.27.0}/LICENSE +0 -0
  300. {ipython-8.25.0 → ipython-8.27.0}/MANIFEST.in +0 -0
  301. {ipython-8.25.0 → ipython-8.27.0}/_build_meta.py +0 -0
  302. {ipython-8.25.0 → ipython-8.27.0}/docs/Makefile +0 -0
  303. {ipython-8.25.0 → ipython-8.27.0}/docs/README.rst +0 -0
  304. {ipython-8.25.0 → ipython-8.27.0}/docs/autogen_api.py +0 -0
  305. {ipython-8.25.0 → ipython-8.27.0}/docs/autogen_config.py +0 -0
  306. {ipython-8.25.0 → ipython-8.27.0}/docs/autogen_magics.py +0 -0
  307. {ipython-8.25.0 → ipython-8.27.0}/docs/autogen_shortcuts.py +0 -0
  308. {ipython-8.25.0 → ipython-8.27.0}/docs/make.cmd +0 -0
  309. {ipython-8.25.0 → ipython-8.27.0}/docs/man/ipython.1 +0 -0
  310. {ipython-8.25.0 → ipython-8.27.0}/docs/requirements.txt +0 -0
  311. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/running-crop.png +0 -0
  312. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/running.png +0 -0
  313. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/treeview.png +0 -0
  314. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/user-interface.png +0 -0
  315. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/2.0/widgets.png +0 -0
  316. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  317. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  318. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  319. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  320. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  321. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  322. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  323. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  324. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  325. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  326. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  327. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/autosuggest.gif +0 -0
  328. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  329. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  330. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  331. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  332. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  333. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  334. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  335. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  336. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  337. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  338. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  339. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  340. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  341. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  342. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  343. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ms_visual_studio.png +0 -0
  344. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/notebook_specgram.png +0 -0
  345. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/ptshell_features.png +0 -0
  346. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/qtconsole.png +0 -0
  347. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  348. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_images/unicode_completion.png +0 -0
  349. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_static/favicon.ico +0 -0
  350. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_static/logo.png +0 -0
  351. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_static/theme_overrides.css +0 -0
  352. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_templates/breadcrumbs.html +0 -0
  353. {ipython-8.25.0 → ipython-8.27.0}/docs/source/_templates/notebook_redirect.html +0 -0
  354. {ipython-8.25.0 → ipython-8.27.0}/docs/source/about/history.rst +0 -0
  355. {ipython-8.25.0 → ipython-8.27.0}/docs/source/about/index.rst +0 -0
  356. {ipython-8.25.0 → ipython-8.27.0}/docs/source/about/license_and_copyright.rst +0 -0
  357. {ipython-8.25.0 → ipython-8.27.0}/docs/source/api/index.rst +0 -0
  358. {ipython-8.25.0 → ipython-8.27.0}/docs/source/conf.py +0 -0
  359. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/callbacks.rst +0 -0
  360. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/details.rst +0 -0
  361. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/eventloops.rst +0 -0
  362. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/extensions/autoreload.rst +0 -0
  363. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/extensions/index.rst +0 -0
  364. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/extensions/storemagic.rst +0 -0
  365. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/index.rst +0 -0
  366. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/inputtransforms.rst +0 -0
  367. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/integrating.rst +0 -0
  368. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/intro.rst +0 -0
  369. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/options/index.rst +0 -0
  370. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  371. {ipython-8.25.0 → ipython-8.27.0}/docs/source/config/shortcuts/index.rst +0 -0
  372. {ipython-8.25.0 → ipython-8.27.0}/docs/source/coredev/index.rst +0 -0
  373. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/config.rst +0 -0
  374. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/execution.rst +0 -0
  375. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  376. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  377. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/figs/other_kernels.png +0 -0
  378. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/figs/other_kernels.svg +0 -0
  379. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/how_ipython_works.rst +0 -0
  380. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/index.rst +0 -0
  381. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/inputhook_app.rst +0 -0
  382. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/kernels.rst +0 -0
  383. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/lexer.rst +0 -0
  384. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/messaging.rst +0 -0
  385. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/pycompat.rst +0 -0
  386. {ipython-8.25.0 → ipython-8.27.0}/docs/source/development/wrapperkernels.rst +0 -0
  387. {ipython-8.25.0 → ipython-8.27.0}/docs/source/index.rst +0 -0
  388. {ipython-8.25.0 → ipython-8.27.0}/docs/source/install/index.rst +0 -0
  389. {ipython-8.25.0 → ipython-8.27.0}/docs/source/install/install.rst +0 -0
  390. {ipython-8.25.0 → ipython-8.27.0}/docs/source/install/kernel_install.rst +0 -0
  391. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/autoawait.rst +0 -0
  392. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/figs/besselj.png +0 -0
  393. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/figs/colors_dark.png +0 -0
  394. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/figs/jn.html +0 -0
  395. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/figs/jn.xhtml +0 -0
  396. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/index.rst +0 -0
  397. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/magics.rst +0 -0
  398. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/plotting.rst +0 -0
  399. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  400. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/reference.rst +0 -0
  401. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/shell.rst +0 -0
  402. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/tips.rst +0 -0
  403. {ipython-8.25.0 → ipython-8.27.0}/docs/source/interactive/tutorial.rst +0 -0
  404. {ipython-8.25.0 → ipython-8.27.0}/docs/source/links.txt +0 -0
  405. {ipython-8.25.0 → ipython-8.27.0}/docs/source/overview.rst +0 -0
  406. {ipython-8.25.0 → ipython-8.27.0}/docs/source/parallel/index.rst +0 -0
  407. {ipython-8.25.0 → ipython-8.27.0}/docs/source/sphinx.toml +0 -0
  408. {ipython-8.25.0 → ipython-8.27.0}/docs/source/sphinxext.rst +0 -0
  409. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/development.rst +0 -0
  410. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  411. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  412. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  413. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  414. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  415. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  416. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  417. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  418. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  419. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  420. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  421. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/index.rst +0 -0
  422. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/pr/README.md +0 -0
  423. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  424. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  425. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.10.rst +0 -0
  426. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.11.rst +0 -0
  427. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.12.rst +0 -0
  428. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.13.rst +0 -0
  429. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.8.rst +0 -0
  430. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version0.9.rst +0 -0
  431. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version1.0.rst +0 -0
  432. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version2.0.rst +0 -0
  433. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version3.rst +0 -0
  434. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  435. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version4.rst +0 -0
  436. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version5.rst +0 -0
  437. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version6.rst +0 -0
  438. {ipython-8.25.0 → ipython-8.27.0}/docs/source/whatsnew/version7.rst +0 -0
  439. {ipython-8.25.0 → ipython-8.27.0}/docs/sphinxext/apigen.py +0 -0
  440. {ipython-8.25.0 → ipython-8.27.0}/docs/sphinxext/configtraits.py +0 -0
  441. {ipython-8.25.0 → ipython-8.27.0}/docs/sphinxext/github.py +0 -0
  442. {ipython-8.25.0 → ipython-8.27.0}/docs/sphinxext/magics.py +0 -0
  443. {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/Index.ipynb +0 -0
  444. {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/embed_class_long.py +0 -0
  445. {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/embed_class_short.py +0 -0
  446. {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/embed_function.py +0 -0
  447. {ipython-8.25.0 → ipython-8.27.0}/examples/Embedding/start_ipython_config.py +0 -0
  448. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
  449. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
  450. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
  451. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
  452. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
  453. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
  454. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
  455. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Index.ipynb +0 -0
  456. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
  457. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
  458. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
  459. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
  460. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
  461. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
  462. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
  463. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
  464. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
  465. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
  466. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/data/flare.json +0 -0
  467. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/example-demo.py +0 -0
  468. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  469. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  470. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  471. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  472. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  473. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/ipython.desktop +0 -0
  474. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
  475. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
  476. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
  477. {ipython-8.25.0 → ipython-8.27.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
  478. {ipython-8.25.0 → ipython-8.27.0}/examples/Index.ipynb +0 -0
  479. {ipython-8.25.0 → ipython-8.27.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
  480. {ipython-8.25.0 → ipython-8.27.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
  481. {ipython-8.25.0 → ipython-8.27.0}/examples/images/FrontendKernel.png +0 -0
  482. {ipython-8.25.0 → ipython-8.27.0}/examples/images/animation.m4v +0 -0
  483. {ipython-8.25.0 → ipython-8.27.0}/examples/images/ipython_logo.png +0 -0
  484. {ipython-8.25.0 → ipython-8.27.0}/examples/images/python_logo.svg +0 -0
  485. {ipython-8.25.0 → ipython-8.27.0}/examples/utils/cwd_prompt.py +0 -0
  486. {ipython-8.25.0 → ipython-8.27.0}/examples/utils/list_pyfiles.ipy +0 -0
  487. {ipython-8.25.0 → ipython-8.27.0}/examples/utils/list_subdirs.ipy +0 -0
  488. {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/SOURCES.txt +0 -0
  489. {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/dependency_links.txt +0 -0
  490. {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/entry_points.txt +0 -0
  491. {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/not-zip-safe +0 -0
  492. {ipython-8.25.0 → ipython-8.27.0}/ipython.egg-info/top_level.txt +0 -0
  493. {ipython-8.25.0 → ipython-8.27.0}/long_description.rst +0 -0
  494. {ipython-8.25.0 → ipython-8.27.0}/scripts/ipython.ico +0 -0
  495. {ipython-8.25.0 → ipython-8.27.0}/scripts/ipython_nb.ico +0 -0
  496. {ipython-8.25.0 → ipython-8.27.0}/setup.cfg +0 -0
  497. {ipython-8.25.0 → ipython-8.27.0}/setup.py +0 -0
  498. {ipython-8.25.0 → ipython-8.27.0}/setupbase.py +0 -0
@@ -10,7 +10,6 @@ explicitly to actually raise a SyntaxError and stay as close as possible to
10
10
  Python semantics.
11
11
  """
12
12
 
13
-
14
13
  import ast
15
14
  import asyncio
16
15
  import inspect
@@ -898,7 +898,7 @@ def rectify_completions(text: str, completions: _IC, *, _debug: bool = False) ->
898
898
  new_text = text[new_start:c.start] + c.text + text[c.end:new_end]
899
899
  if c._origin == 'jedi':
900
900
  seen_jedi.add(new_text)
901
- elif c._origin == 'IPCompleter.python_matches':
901
+ elif c._origin == "IPCompleter.python_matcher":
902
902
  seen_python_matches.add(new_text)
903
903
  yield Completion(new_start, new_end, new_text, type=c.type, _origin=c._origin, signature=c.signature)
904
904
  diff = seen_python_matches.difference(seen_jedi)
@@ -1139,15 +1139,18 @@ class Completer(Configurable):
1139
1139
  with a __getattr__ hook is evaluated.
1140
1140
 
1141
1141
  """
1142
+ return self._attr_matches(text)[0]
1143
+
1144
+ def _attr_matches(self, text, include_prefix=True) -> Tuple[Sequence[str], str]:
1142
1145
  m2 = re.match(r"(.+)\.(\w*)$", self.line_buffer)
1143
1146
  if not m2:
1144
- return []
1147
+ return [], ""
1145
1148
  expr, attr = m2.group(1, 2)
1146
1149
 
1147
1150
  obj = self._evaluate_expr(expr)
1148
1151
 
1149
1152
  if obj is not_found:
1150
- return []
1153
+ return [], ""
1151
1154
 
1152
1155
  if self.limit_to__all__ and hasattr(obj, '__all__'):
1153
1156
  words = get__all__entries(obj)
@@ -1170,28 +1173,36 @@ class Completer(Configurable):
1170
1173
  # reconciliator would know that we intend to append to rather than
1171
1174
  # replace the input text; this requires refactoring to return range
1172
1175
  # which ought to be replaced (as does jedi).
1173
- tokens = _parse_tokens(expr)
1174
- rev_tokens = reversed(tokens)
1175
- skip_over = {tokenize.ENDMARKER, tokenize.NEWLINE}
1176
- name_turn = True
1177
-
1178
- parts = []
1179
- for token in rev_tokens:
1180
- if token.type in skip_over:
1181
- continue
1182
- if token.type == tokenize.NAME and name_turn:
1183
- parts.append(token.string)
1184
- name_turn = False
1185
- elif token.type == tokenize.OP and token.string == "." and not name_turn:
1186
- parts.append(token.string)
1187
- name_turn = True
1188
- else:
1189
- # short-circuit if not empty nor name token
1190
- break
1176
+ if include_prefix:
1177
+ tokens = _parse_tokens(expr)
1178
+ rev_tokens = reversed(tokens)
1179
+ skip_over = {tokenize.ENDMARKER, tokenize.NEWLINE}
1180
+ name_turn = True
1181
+
1182
+ parts = []
1183
+ for token in rev_tokens:
1184
+ if token.type in skip_over:
1185
+ continue
1186
+ if token.type == tokenize.NAME and name_turn:
1187
+ parts.append(token.string)
1188
+ name_turn = False
1189
+ elif (
1190
+ token.type == tokenize.OP and token.string == "." and not name_turn
1191
+ ):
1192
+ parts.append(token.string)
1193
+ name_turn = True
1194
+ else:
1195
+ # short-circuit if not empty nor name token
1196
+ break
1191
1197
 
1192
- prefix_after_space = "".join(reversed(parts))
1198
+ prefix_after_space = "".join(reversed(parts))
1199
+ else:
1200
+ prefix_after_space = ""
1193
1201
 
1194
- return ["%s.%s" % (prefix_after_space, w) for w in words if w[:n] == attr]
1202
+ return (
1203
+ ["%s.%s" % (prefix_after_space, w) for w in words if w[:n] == attr],
1204
+ "." + attr,
1205
+ )
1195
1206
 
1196
1207
  def _evaluate_expr(self, expr):
1197
1208
  obj = not_found
@@ -1973,9 +1984,8 @@ class IPCompleter(Completer):
1973
1984
  *self.magic_arg_matchers,
1974
1985
  self.custom_completer_matcher,
1975
1986
  self.dict_key_matcher,
1976
- # TODO: convert python_matches to v2 API
1977
1987
  self.magic_matcher,
1978
- self.python_matches,
1988
+ self.python_matcher,
1979
1989
  self.file_matcher,
1980
1990
  self.python_func_kw_matcher,
1981
1991
  ]
@@ -2316,9 +2326,42 @@ class IPCompleter(Completer):
2316
2326
  else:
2317
2327
  return iter([])
2318
2328
 
2329
+ @context_matcher()
2330
+ def python_matcher(self, context: CompletionContext) -> SimpleMatcherResult:
2331
+ """Match attributes or global python names"""
2332
+ text = context.line_with_cursor
2333
+ if "." in text:
2334
+ try:
2335
+ matches, fragment = self._attr_matches(text, include_prefix=False)
2336
+ if text.endswith(".") and self.omit__names:
2337
+ if self.omit__names == 1:
2338
+ # true if txt is _not_ a __ name, false otherwise:
2339
+ no__name = lambda txt: re.match(r".*\.__.*?__", txt) is None
2340
+ else:
2341
+ # true if txt is _not_ a _ name, false otherwise:
2342
+ no__name = (
2343
+ lambda txt: re.match(r"\._.*?", txt[txt.rindex(".") :])
2344
+ is None
2345
+ )
2346
+ matches = filter(no__name, matches)
2347
+ return _convert_matcher_v1_result_to_v2(
2348
+ matches, type="attribute", fragment=fragment
2349
+ )
2350
+ except NameError:
2351
+ # catches <undefined attributes>.<tab>
2352
+ matches = []
2353
+ return _convert_matcher_v1_result_to_v2(matches, type="attribute")
2354
+ else:
2355
+ matches = self.global_matches(context.token)
2356
+ # TODO: maybe distinguish between functions, modules and just "variables"
2357
+ return _convert_matcher_v1_result_to_v2(matches, type="variable")
2358
+
2319
2359
  @completion_matcher(api_version=1)
2320
2360
  def python_matches(self, text: str) -> Iterable[str]:
2321
- """Match attributes or global python names"""
2361
+ """Match attributes or global python names.
2362
+
2363
+ .. deprecated:: 8.27
2364
+ You can use :meth:`python_matcher` instead."""
2322
2365
  if "." in text:
2323
2366
  try:
2324
2367
  matches = self.attr_matches(text)
@@ -2033,7 +2033,7 @@ class InteractiveShell(SingletonConfigurable):
2033
2033
  print(self.InteractiveTB.stb2text(stb))
2034
2034
  print("The original exception:")
2035
2035
  stb = self.InteractiveTB.structured_traceback(
2036
- (etype,value,tb), tb_offset=tb_offset
2036
+ etype, value, tb, tb_offset=tb_offset
2037
2037
  )
2038
2038
  return stb
2039
2039
 
@@ -100,7 +100,7 @@ class PylabMagics(Magics):
100
100
  % _list_matplotlib_backends_and_gui_loops()
101
101
  )
102
102
  else:
103
- gui, backend = self.shell.enable_matplotlib(args.gui.lower() if isinstance(args.gui, str) else args.gui)
103
+ gui, backend = self.shell.enable_matplotlib(args.gui)
104
104
  self._show_matplotlib_backend(args.gui, backend)
105
105
 
106
106
  @skip_doctest
@@ -476,8 +476,8 @@ class PythonOpsChecker(PrefilterChecker):
476
476
  any python operator, we should simply execute the line (regardless of
477
477
  whether or not there's a possible autocall expansion). This avoids
478
478
  spurious (and very confusing) geattr() accesses."""
479
- if line_info.the_rest and line_info.the_rest[0] in '!=()<>,+*/%^&|':
480
- return self.prefilter_manager.get_handler_by_name('normal')
479
+ if line_info.the_rest and line_info.the_rest[0] in "!=()<>,+*/%^&|":
480
+ return self.prefilter_manager.get_handler_by_name("normal")
481
481
  else:
482
482
  return None
483
483
 
@@ -512,6 +512,8 @@ 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
517
  ):
516
518
  return self.prefilter_manager.get_handler_by_name("auto")
517
519
  else:
@@ -14,6 +14,8 @@ from ..paths import get_ipython_package_dir
14
14
  from ..utils.path import expand_path, ensure_dir_exists
15
15
  from traitlets import Unicode, Bool, observe
16
16
 
17
+ from typing import Optional
18
+
17
19
  #-----------------------------------------------------------------------------
18
20
  # Module errors
19
21
  #-----------------------------------------------------------------------------
@@ -68,18 +70,31 @@ class ProfileDir(LoggingConfigurable):
68
70
  self.pid_dir = os.path.join(new, self.pid_dir_name)
69
71
  self.static_dir = os.path.join(new, self.static_dir_name)
70
72
  self.check_dirs()
71
-
72
- def _mkdir(self, path, mode=None):
73
+
74
+ def _mkdir(self, path: str, mode: Optional[int] = None) -> bool:
73
75
  """ensure a directory exists at a given path
74
76
 
75
77
  This is a version of os.mkdir, with the following differences:
76
78
 
77
- - returns True if it created the directory, False otherwise
79
+ - returns whether the directory has been created or not.
78
80
  - ignores EEXIST, protecting against race conditions where
79
81
  the dir may have been created in between the check and
80
82
  the creation
81
83
  - sets permissions if requested and the dir already exists
84
+
85
+ Parameters
86
+ ----------
87
+ path: str
88
+ path of the dir to create
89
+ mode: int
90
+ see `mode` of `os.mkdir`
91
+
92
+ Returns
93
+ -------
94
+ bool:
95
+ returns True if it created the directory, False otherwise
82
96
  """
97
+
83
98
  if os.path.exists(path):
84
99
  if mode and os.stat(path).st_mode != mode:
85
100
  try:
@@ -109,16 +124,20 @@ class ProfileDir(LoggingConfigurable):
109
124
 
110
125
  @observe('startup_dir')
111
126
  def check_startup_dir(self, change=None):
112
- self._mkdir(self.startup_dir)
113
-
114
- readme = os.path.join(self.startup_dir, 'README')
115
- src = os.path.join(get_ipython_package_dir(), u'core', u'profile', u'README_STARTUP')
116
-
117
- if not os.path.exists(src):
118
- self.log.warning("Could not copy README_STARTUP to startup dir. Source file %s does not exist.", src)
119
-
120
- if os.path.exists(src) and not os.path.exists(readme):
121
- shutil.copy(src, readme)
127
+ if self._mkdir(self.startup_dir):
128
+ readme = os.path.join(self.startup_dir, "README")
129
+ src = os.path.join(
130
+ get_ipython_package_dir(), "core", "profile", "README_STARTUP"
131
+ )
132
+
133
+ if os.path.exists(src):
134
+ if not os.path.exists(readme):
135
+ shutil.copy(src, readme)
136
+ else:
137
+ self.log.warning(
138
+ "Could not copy README_STARTUP to startup dir. Source file %s does not exist.",
139
+ src,
140
+ )
122
141
 
123
142
  @observe('security_dir')
124
143
  def check_security_dir(self, change=None):
@@ -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 = 25
19
+ _version_minor = 27
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "rc1"
@@ -76,7 +76,7 @@ def split_user_input(line, pattern=None):
76
76
 
77
77
  # print('line:<%s>' % line) # dbg
78
78
  # print('pre <%s> ifun <%s> rest <%s>' % (pre,ifun.strip(),the_rest)) # dbg
79
- return pre, esc or '', ifun.strip(), the_rest.lstrip()
79
+ return pre, esc or "", ifun.strip(), the_rest
80
80
 
81
81
 
82
82
  class LineInfo(object):
@@ -107,11 +107,15 @@ class LineInfo(object):
107
107
 
108
108
  the_rest
109
109
  Everything else on the line.
110
+
111
+ raw_the_rest
112
+ the_rest without whitespace stripped.
110
113
  """
111
114
  def __init__(self, line, continue_prompt=False):
112
115
  self.line = line
113
116
  self.continue_prompt = continue_prompt
114
- self.pre, self.esc, self.ifun, self.the_rest = split_user_input(line)
117
+ self.pre, self.esc, self.ifun, self.raw_the_rest = split_user_input(line)
118
+ self.the_rest = self.raw_the_rest.lstrip()
115
119
 
116
120
  self.pre_char = self.pre.strip()
117
121
  if self.pre_char:
@@ -136,3 +140,6 @@ class LineInfo(object):
136
140
 
137
141
  def __str__(self):
138
142
  return "LineInfo [%s|%s|%s|%s]" %(self.pre, self.esc, self.ifun, self.the_rest)
143
+
144
+ def __repr__(self):
145
+ return "<" + str(self) + ">"
@@ -5,6 +5,7 @@ directory, which we are removing. For now putting this here ensures at least
5
5
  we do run the test, though ultimately this functionality should all be tested
6
6
  with better-isolated tests that don't rely on the global instance in iptest.
7
7
  """
8
+
8
9
  from IPython.core.splitinput import LineInfo
9
10
  from IPython.core.prefilter import AutocallChecker
10
11
 
@@ -10,6 +10,9 @@ import sys
10
10
  import textwrap
11
11
  import unittest
12
12
 
13
+ from importlib.metadata import version
14
+
15
+
13
16
  from contextlib import contextmanager
14
17
 
15
18
  from traitlets.config.loader import Config
@@ -30,6 +33,9 @@ from IPython.core.completer import (
30
33
  CompletionContext,
31
34
  )
32
35
 
36
+ from packaging.version import parse
37
+
38
+
33
39
  # -----------------------------------------------------------------------------
34
40
  # Test functions
35
41
  # -----------------------------------------------------------------------------
@@ -456,7 +462,10 @@ class TestCompleter(unittest.TestCase):
456
462
  matches = c.all_completions("TestClass.")
457
463
  assert len(matches) > 2, (jedi_status, matches)
458
464
  matches = c.all_completions("TestClass.a")
459
- assert matches == ['TestClass.a', 'TestClass.a1'], jedi_status
465
+ if jedi_status:
466
+ assert matches == ["TestClass.a", "TestClass.a1"], jedi_status
467
+ else:
468
+ assert matches == [".a", ".a1"], jedi_status
460
469
 
461
470
  @pytest.mark.xfail(
462
471
  sys.version_info.releaselevel in ("alpha",),
@@ -531,7 +540,11 @@ class TestCompleter(unittest.TestCase):
531
540
  c = next(completions) # should be `%time` or similar
532
541
  assert c.type == "magic", "Type of magic was not assigned by completer"
533
542
 
534
- @pytest.mark.xfail(reason="Known failure on jedi<=0.18.0")
543
+ @pytest.mark.xfail(
544
+ parse(version("jedi")) <= parse("0.18.0"),
545
+ reason="Known failure on jedi<=0.18.0",
546
+ strict=True,
547
+ )
535
548
  def test_deduplicate_completions(self):
536
549
  """
537
550
  Test that completions are correctly deduplicated (even if ranges are not the same)
@@ -584,7 +597,7 @@ class TestCompleter(unittest.TestCase):
584
597
  ip.Completer.use_jedi = True
585
598
  with provisionalcompleter():
586
599
  completions = ip.Completer.completions(line, cursor_pos)
587
- self.assertIn(completion, completions)
600
+ self.assertIn(completion, list(completions))
588
601
 
589
602
  with provisionalcompleter():
590
603
  _(
@@ -612,7 +625,7 @@ class TestCompleter(unittest.TestCase):
612
625
  _(
613
626
  "assert str.star",
614
627
  14,
615
- "str.startswith",
628
+ ".startswith",
616
629
  "Should have completed on `assert str.star`: %s",
617
630
  Completion(11, 14, "startswith"),
618
631
  )
@@ -623,6 +636,13 @@ class TestCompleter(unittest.TestCase):
623
636
  "Should have completed on `d['a b'].str`: %s",
624
637
  Completion(9, 12, "strip"),
625
638
  )
639
+ _(
640
+ "a.app",
641
+ 4,
642
+ ".append",
643
+ "Should have completed on `a.app`: %s",
644
+ Completion(2, 4, "append"),
645
+ )
626
646
 
627
647
  def test_omit__names(self):
628
648
  # also happens to test IPCompleter as a configurable
@@ -637,8 +657,8 @@ class TestCompleter(unittest.TestCase):
637
657
  with provisionalcompleter():
638
658
  c.use_jedi = False
639
659
  s, matches = c.complete("ip.")
640
- self.assertIn("ip.__str__", matches)
641
- self.assertIn("ip._hidden_attr", matches)
660
+ self.assertIn(".__str__", matches)
661
+ self.assertIn("._hidden_attr", matches)
642
662
 
643
663
  # c.use_jedi = True
644
664
  # completions = set(c.completions('ip.', 3))
@@ -651,7 +671,7 @@ class TestCompleter(unittest.TestCase):
651
671
  with provisionalcompleter():
652
672
  c.use_jedi = False
653
673
  s, matches = c.complete("ip.")
654
- self.assertNotIn("ip.__str__", matches)
674
+ self.assertNotIn(".__str__", matches)
655
675
  # self.assertIn('ip._hidden_attr', matches)
656
676
 
657
677
  # c.use_jedi = True
@@ -665,8 +685,8 @@ class TestCompleter(unittest.TestCase):
665
685
  with provisionalcompleter():
666
686
  c.use_jedi = False
667
687
  s, matches = c.complete("ip.")
668
- self.assertNotIn("ip.__str__", matches)
669
- self.assertNotIn("ip._hidden_attr", matches)
688
+ self.assertNotIn(".__str__", matches)
689
+ self.assertNotIn("._hidden_attr", matches)
670
690
 
671
691
  # c.use_jedi = True
672
692
  # completions = set(c.completions('ip.', 3))
@@ -676,7 +696,7 @@ class TestCompleter(unittest.TestCase):
676
696
  with provisionalcompleter():
677
697
  c.use_jedi = False
678
698
  s, matches = c.complete("ip._x.")
679
- self.assertIn("ip._x.keys", matches)
699
+ self.assertIn(".keys", matches)
680
700
 
681
701
  # c.use_jedi = True
682
702
  # completions = set(c.completions('ip._x.', 6))
@@ -687,7 +707,7 @@ class TestCompleter(unittest.TestCase):
687
707
 
688
708
  def test_limit_to__all__False_ok(self):
689
709
  """
690
- Limit to all is deprecated, once we remove it this test can go away.
710
+ Limit to all is deprecated, once we remove it this test can go away.
691
711
  """
692
712
  ip = get_ipython()
693
713
  c = ip.Completer
@@ -698,7 +718,7 @@ class TestCompleter(unittest.TestCase):
698
718
  cfg.IPCompleter.limit_to__all__ = False
699
719
  c.update_config(cfg)
700
720
  s, matches = c.complete("d.")
701
- self.assertIn("d.x", matches)
721
+ self.assertIn(".x", matches)
702
722
 
703
723
  def test_get__all__entries_ok(self):
704
724
  class A:
@@ -59,40 +59,43 @@ def test_ipdb_magics():
59
59
 
60
60
  First, set up some test functions and classes which we can inspect.
61
61
 
62
- >>> class ExampleClass(object):
63
- ... """Docstring for ExampleClass."""
64
- ... def __init__(self):
65
- ... """Docstring for ExampleClass.__init__"""
66
- ... pass
67
- ... def __str__(self):
68
- ... return "ExampleClass()"
69
-
70
- >>> def example_function(x, y, z="hello"):
71
- ... """Docstring for example_function."""
72
- ... pass
62
+ In [1]: class ExampleClass(object):
63
+ ...: """Docstring for ExampleClass."""
64
+ ...: def __init__(self):
65
+ ...: """Docstring for ExampleClass.__init__"""
66
+ ...: pass
67
+ ...: def __str__(self):
68
+ ...: return "ExampleClass()"
73
69
 
74
- >>> old_trace = sys.gettrace()
70
+ In [2]: def example_function(x, y, z="hello"):
71
+ ...: """Docstring for example_function."""
72
+ ...: pass
75
73
 
76
- Create a function which triggers ipdb.
74
+ In [3]: old_trace = sys.gettrace()
77
75
 
78
- >>> def trigger_ipdb():
79
- ... a = ExampleClass()
80
- ... debugger.Pdb().set_trace()
76
+ Create a function which triggers ipdb.
81
77
 
82
- >>> with PdbTestInput([
83
- ... 'pdef example_function',
84
- ... 'pdoc ExampleClass',
85
- ... 'up',
86
- ... 'down',
87
- ... 'list',
88
- ... 'pinfo a',
89
- ... 'll',
90
- ... 'continue',
91
- ... ]):
92
- ... trigger_ipdb()
93
- --Return--
94
- None
95
- > <doctest ...>(3)trigger_ipdb()
78
+ In [4]: def trigger_ipdb():
79
+ ...: a = ExampleClass()
80
+ ...: debugger.Pdb().set_trace()
81
+
82
+ Run ipdb with faked input & check output. Because of a difference between
83
+ Python 3.13 & older versions, the first bit of the output is inconsistent.
84
+ We need to use ... to accommodate that, so the examples have to use IPython
85
+ prompts so that ... is distinct from the Python PS2 prompt.
86
+
87
+ In [5]: with PdbTestInput([
88
+ ...: 'pdef example_function',
89
+ ...: 'pdoc ExampleClass',
90
+ ...: 'up',
91
+ ...: 'down',
92
+ ...: 'list',
93
+ ...: 'pinfo a',
94
+ ...: 'll',
95
+ ...: 'continue',
96
+ ...: ]):
97
+ ...: trigger_ipdb()
98
+ ...> <doctest ...>(3)trigger_ipdb()
96
99
  1 def trigger_ipdb():
97
100
  2 a = ExampleClass()
98
101
  ----> 3 debugger.Pdb().set_trace()
@@ -112,8 +115,7 @@ def test_ipdb_magics():
112
115
  10 ]):
113
116
  ---> 11 trigger_ipdb()
114
117
  <BLANKLINE>
115
- ipdb> down
116
- None
118
+ ipdb> down...
117
119
  > <doctest ...>(3)trigger_ipdb()
118
120
  1 def trigger_ipdb():
119
121
  2 a = ExampleClass()
@@ -136,10 +138,10 @@ def test_ipdb_magics():
136
138
  ----> 3 debugger.Pdb().set_trace()
137
139
  <BLANKLINE>
138
140
  ipdb> continue
139
-
140
- Restore previous trace function, e.g. for coverage.py
141
-
142
- >>> sys.settrace(old_trace)
141
+
142
+ Restore previous trace function, e.g. for coverage.py
143
+
144
+ In [6]: sys.settrace(old_trace)
143
145
  '''
144
146
 
145
147
  def test_ipdb_magics2():
@@ -447,6 +449,11 @@ def test_decorator_skip_disabled():
447
449
  child.close()
448
450
 
449
451
 
452
+ @pytest.mark.xfail(
453
+ sys.version_info.releaselevel not in ("final", "candidate"),
454
+ reason="fails on 3.13.dev",
455
+ strict=True,
456
+ )
450
457
  @pytest.mark.skipif(platform.python_implementation() == "PyPy", reason="issues on PyPy")
451
458
  @skip_win32
452
459
  def test_decorator_skip_with_breakpoint():
@@ -490,15 +497,26 @@ def test_decorator_skip_with_breakpoint():
490
497
  child.expect_exact(line)
491
498
  child.sendline("")
492
499
 
493
- # as the filename does not exists, we'll rely on the filename prompt
494
- child.expect_exact("47 bar(3, 4)")
495
-
496
- for input_, expected in [
497
- (f"b {name}.py:3", ""),
498
- ("step", "1---> 3 pass # should not stop here except"),
499
- ("step", "---> 38 @pdb_skipped_decorator"),
500
- ("continue", ""),
501
- ]:
500
+ # From 3.13, set_trace()/breakpoint() stop on the line where they're
501
+ # called, instead of the next line.
502
+ if sys.version_info >= (3, 13):
503
+ child.expect_exact("--> 46 ipdb.set_trace()")
504
+ extra_step = [("step", "--> 47 bar(3, 4)")]
505
+ else:
506
+ child.expect_exact("--> 47 bar(3, 4)")
507
+ extra_step = []
508
+
509
+ for input_, expected in (
510
+ [
511
+ (f"b {name}.py:3", ""),
512
+ ]
513
+ + extra_step
514
+ + [
515
+ ("step", "1---> 3 pass # should not stop here except"),
516
+ ("step", "---> 38 @pdb_skipped_decorator"),
517
+ ("continue", ""),
518
+ ]
519
+ ):
502
520
  child.expect("ipdb>")
503
521
  child.sendline(input_)
504
522
  child.expect_exact(input_)