ipython 9.1.0__tar.gz → 9.3.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 (555) hide show
  1. {ipython-9.1.0 → ipython-9.3.0}/IPython/__init__.py +5 -0
  2. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/completer.py +93 -7
  3. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/guarded_eval.py +23 -8
  4. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/interactiveshell.py +23 -18
  5. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/execution.py +27 -21
  6. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/release.py +1 -1
  7. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/interactiveshell.py +8 -5
  8. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/shortcuts/auto_suggest.py +33 -17
  9. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/_sysinfo.py +1 -1
  10. {ipython-9.1.0/ipython.egg-info → ipython-9.3.0}/PKG-INFO +1 -1
  11. ipython-9.3.0/docs/source/api/generated/IPython.core.alias.rst +36 -0
  12. ipython-9.3.0/docs/source/api/generated/IPython.core.application.rst +20 -0
  13. ipython-9.3.0/docs/source/api/generated/IPython.core.async_helpers.rst +13 -0
  14. ipython-9.3.0/docs/source/api/generated/IPython.core.autocall.rst +24 -0
  15. ipython-9.3.0/docs/source/api/generated/IPython.core.builtin_trap.rst +16 -0
  16. ipython-9.3.0/docs/source/api/generated/IPython.core.compilerop.rst +22 -0
  17. ipython-9.3.0/docs/source/api/generated/IPython.core.completer.rst +107 -0
  18. ipython-9.3.0/docs/source/api/generated/IPython.core.completerlib.rst +43 -0
  19. ipython-9.3.0/docs/source/api/generated/IPython.core.crashhandler.rst +22 -0
  20. ipython-9.3.0/docs/source/api/generated/IPython.core.debugger.rst +35 -0
  21. ipython-9.3.0/docs/source/api/generated/IPython.core.doctb.rst +16 -0
  22. ipython-9.3.0/docs/source/api/generated/IPython.core.error.rst +30 -0
  23. ipython-9.3.0/docs/source/api/generated/IPython.core.events.rst +34 -0
  24. ipython-9.3.0/docs/source/api/generated/IPython.core.extensions.rst +16 -0
  25. ipython-9.3.0/docs/source/api/generated/IPython.core.formatters.rst +83 -0
  26. ipython-9.3.0/docs/source/api/generated/IPython.core.getipython.rst +13 -0
  27. ipython-9.3.0/docs/source/api/generated/IPython.core.guarded_eval.rst +34 -0
  28. ipython-9.3.0/docs/source/api/generated/IPython.core.history.rst +59 -0
  29. ipython-9.3.0/docs/source/api/generated/IPython.core.historyapp.rst +22 -0
  30. ipython-9.3.0/docs/source/api/generated/IPython.core.hooks.rst +31 -0
  31. ipython-9.3.0/docs/source/api/generated/IPython.core.inputtransformer2.rst +85 -0
  32. ipython-9.3.0/docs/source/api/generated/IPython.core.interactiveshell.rst +56 -0
  33. ipython-9.3.0/docs/source/api/generated/IPython.core.logger.rst +16 -0
  34. ipython-9.3.0/docs/source/api/generated/IPython.core.macro.rst +16 -0
  35. ipython-9.3.0/docs/source/api/generated/IPython.core.magic.rst +59 -0
  36. ipython-9.3.0/docs/source/api/generated/IPython.core.magic_arguments.rst +62 -0
  37. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.ast_mod.rst +22 -0
  38. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.auto.rst +16 -0
  39. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.basic.rst +24 -0
  40. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.code.rst +38 -0
  41. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.config.rst +16 -0
  42. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.display.rst +14 -0
  43. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.execution.rst +38 -0
  44. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.extension.rst +14 -0
  45. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.history.rst +14 -0
  46. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.logging.rst +14 -0
  47. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.namespace.rst +14 -0
  48. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.osm.rst +16 -0
  49. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.packaging.rst +20 -0
  50. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.pylab.rst +14 -0
  51. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.rst +14 -0
  52. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.script.rst +26 -0
  53. ipython-9.3.0/docs/source/api/generated/IPython.core.oinspect.rst +52 -0
  54. ipython-9.3.0/docs/source/api/generated/IPython.core.page.rst +37 -0
  55. ipython-9.3.0/docs/source/api/generated/IPython.core.payload.rst +14 -0
  56. ipython-9.3.0/docs/source/api/generated/IPython.core.payloadpage.rst +13 -0
  57. ipython-9.3.0/docs/source/api/generated/IPython.core.prefilter.rst +88 -0
  58. ipython-9.3.0/docs/source/api/generated/IPython.core.profileapp.rst +35 -0
  59. ipython-9.3.0/docs/source/api/generated/IPython.core.profiledir.rst +18 -0
  60. ipython-9.3.0/docs/source/api/generated/IPython.core.pylabtools.rst +37 -0
  61. ipython-9.3.0/docs/source/api/generated/IPython.core.shellapp.rst +20 -0
  62. ipython-9.3.0/docs/source/api/generated/IPython.core.splitinput.rst +22 -0
  63. ipython-9.3.0/docs/source/api/generated/IPython.core.tbtools.rst +40 -0
  64. ipython-9.3.0/docs/source/api/generated/IPython.core.tips.rst +13 -0
  65. ipython-9.3.0/docs/source/api/generated/IPython.core.ultratb.rst +42 -0
  66. ipython-9.3.0/docs/source/api/generated/IPython.display.rst +181 -0
  67. ipython-9.3.0/docs/source/api/generated/IPython.lib.backgroundjobs.rst +34 -0
  68. ipython-9.3.0/docs/source/api/generated/IPython.lib.clipboard.rst +29 -0
  69. ipython-9.3.0/docs/source/api/generated/IPython.lib.deepreload.rst +37 -0
  70. ipython-9.3.0/docs/source/api/generated/IPython.lib.demo.rst +53 -0
  71. ipython-9.3.0/docs/source/api/generated/IPython.lib.editorhooks.rst +43 -0
  72. ipython-9.3.0/docs/source/api/generated/IPython.lib.guisupport.rst +28 -0
  73. ipython-9.3.0/docs/source/api/generated/IPython.lib.latextools.rst +35 -0
  74. ipython-9.3.0/docs/source/api/generated/IPython.lib.pretty.rst +83 -0
  75. ipython-9.3.0/docs/source/api/generated/IPython.paths.rst +25 -0
  76. ipython-9.3.0/docs/source/api/generated/IPython.rst +19 -0
  77. ipython-9.3.0/docs/source/api/generated/IPython.terminal.debugger.rst +22 -0
  78. ipython-9.3.0/docs/source/api/generated/IPython.terminal.embed.rst +30 -0
  79. ipython-9.3.0/docs/source/api/generated/IPython.terminal.interactiveshell.rst +34 -0
  80. ipython-9.3.0/docs/source/api/generated/IPython.terminal.ipapp.rst +30 -0
  81. ipython-9.3.0/docs/source/api/generated/IPython.terminal.magics.rst +22 -0
  82. ipython-9.3.0/docs/source/api/generated/IPython.terminal.prompts.rst +24 -0
  83. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst +46 -0
  84. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst +67 -0
  85. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.filters.rst +58 -0
  86. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.rst +76 -0
  87. ipython-9.3.0/docs/source/api/generated/IPython.testing.decorators.rst +25 -0
  88. ipython-9.3.0/docs/source/api/generated/IPython.testing.globalipapp.rst +19 -0
  89. ipython-9.3.0/docs/source/api/generated/IPython.testing.ipunittest.rst +31 -0
  90. ipython-9.3.0/docs/source/api/generated/IPython.testing.skipdoctest.rst +13 -0
  91. ipython-9.3.0/docs/source/api/generated/IPython.testing.tools.rst +60 -0
  92. ipython-9.3.0/docs/source/api/generated/IPython.utils.PyColorize.rst +26 -0
  93. ipython-9.3.0/docs/source/api/generated/IPython.utils.capture.rst +28 -0
  94. ipython-9.3.0/docs/source/api/generated/IPython.utils.coloransi.rst +14 -0
  95. ipython-9.3.0/docs/source/api/generated/IPython.utils.contexts.rst +16 -0
  96. ipython-9.3.0/docs/source/api/generated/IPython.utils.data.rst +16 -0
  97. ipython-9.3.0/docs/source/api/generated/IPython.utils.decorators.rst +19 -0
  98. ipython-9.3.0/docs/source/api/generated/IPython.utils.dir2.rst +19 -0
  99. ipython-9.3.0/docs/source/api/generated/IPython.utils.encoding.rst +16 -0
  100. ipython-9.3.0/docs/source/api/generated/IPython.utils.frame.rst +22 -0
  101. ipython-9.3.0/docs/source/api/generated/IPython.utils.generics.rst +16 -0
  102. ipython-9.3.0/docs/source/api/generated/IPython.utils.importstring.rst +13 -0
  103. ipython-9.3.0/docs/source/api/generated/IPython.utils.io.rst +25 -0
  104. ipython-9.3.0/docs/source/api/generated/IPython.utils.ipstruct.rst +16 -0
  105. ipython-9.3.0/docs/source/api/generated/IPython.utils.module_paths.rst +13 -0
  106. ipython-9.3.0/docs/source/api/generated/IPython.utils.openpy.rst +22 -0
  107. ipython-9.3.0/docs/source/api/generated/IPython.utils.path.rst +56 -0
  108. ipython-9.3.0/docs/source/api/generated/IPython.utils.process.rst +23 -0
  109. ipython-9.3.0/docs/source/api/generated/IPython.utils.sentinel.rst +16 -0
  110. ipython-9.3.0/docs/source/api/generated/IPython.utils.strdispatch.rst +16 -0
  111. ipython-9.3.0/docs/source/api/generated/IPython.utils.sysinfo.rst +22 -0
  112. ipython-9.3.0/docs/source/api/generated/IPython.utils.syspathcontext.rst +16 -0
  113. ipython-9.3.0/docs/source/api/generated/IPython.utils.tempdir.rst +20 -0
  114. ipython-9.3.0/docs/source/api/generated/IPython.utils.terminal.rst +22 -0
  115. ipython-9.3.0/docs/source/api/generated/IPython.utils.text.rst +54 -0
  116. ipython-9.3.0/docs/source/api/generated/IPython.utils.timing.rst +31 -0
  117. ipython-9.3.0/docs/source/api/generated/IPython.utils.tokenutil.rst +29 -0
  118. ipython-9.3.0/docs/source/api/generated/IPython.utils.wildcard.rst +28 -0
  119. ipython-9.3.0/docs/source/api/generated/gen.txt +113 -0
  120. ipython-9.3.0/docs/source/config/options/terminal.rst +2072 -0
  121. ipython-9.3.0/docs/source/config/shortcuts/table.tsv +79 -0
  122. ipython-9.3.0/docs/source/interactive/magics-generated.txt +2489 -0
  123. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/reference.rst +8 -3
  124. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version8.rst +58 -0
  125. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version9.rst +41 -0
  126. {ipython-9.1.0 → ipython-9.3.0}/examples/auto_suggest_llm.py +2 -2
  127. {ipython-9.1.0 → ipython-9.3.0/ipython.egg-info}/PKG-INFO +1 -1
  128. {ipython-9.1.0 → ipython-9.3.0}/ipython.egg-info/SOURCES.txt +113 -0
  129. {ipython-9.1.0 → ipython-9.3.0}/pyproject.toml +10 -2
  130. ipython-9.3.0/tests/__init__.py +0 -0
  131. {ipython-9.1.0 → ipython-9.3.0}/tests/fake_llm.py +16 -2
  132. {ipython-9.1.0 → ipython-9.3.0}/tests/test_completer.py +61 -1
  133. {ipython-9.1.0 → ipython-9.3.0}/tests/test_guarded_eval.py +25 -0
  134. {ipython-9.1.0 → ipython-9.3.0}/tests/test_magic.py +20 -2
  135. {ipython-9.1.0 → ipython-9.3.0}/tests/test_shortcuts.py +20 -3
  136. {ipython-9.1.0 → ipython-9.3.0}/.flake8 +0 -0
  137. {ipython-9.1.0 → ipython-9.3.0}/.mailmap +0 -0
  138. {ipython-9.1.0 → ipython-9.3.0}/.pre-commit-config.yaml +0 -0
  139. {ipython-9.1.0 → ipython-9.3.0}/COPYING.rst +0 -0
  140. {ipython-9.1.0 → ipython-9.3.0}/IPython/__main__.py +0 -0
  141. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/__init__.py +0 -0
  142. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/alias.py +0 -0
  143. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/application.py +0 -0
  144. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/async_helpers.py +0 -0
  145. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/autocall.py +0 -0
  146. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/builtin_trap.py +0 -0
  147. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/compilerop.py +0 -0
  148. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/completerlib.py +0 -0
  149. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/crashhandler.py +0 -0
  150. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/debugger.py +0 -0
  151. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/display.py +0 -0
  152. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/display_functions.py +0 -0
  153. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/display_trap.py +0 -0
  154. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/displayhook.py +0 -0
  155. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/displaypub.py +0 -0
  156. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/doctb.py +0 -0
  157. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/error.py +0 -0
  158. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/events.py +0 -0
  159. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/extensions.py +0 -0
  160. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/formatters.py +0 -0
  161. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/getipython.py +0 -0
  162. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/history.py +0 -0
  163. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/historyapp.py +0 -0
  164. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/hooks.py +0 -0
  165. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/inputtransformer2.py +0 -0
  166. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/latex_symbols.py +0 -0
  167. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/logger.py +0 -0
  168. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/macro.py +0 -0
  169. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magic.py +0 -0
  170. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magic_arguments.py +0 -0
  171. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/__init__.py +0 -0
  172. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/ast_mod.py +0 -0
  173. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/auto.py +0 -0
  174. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/basic.py +0 -0
  175. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/code.py +0 -0
  176. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/config.py +0 -0
  177. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/display.py +0 -0
  178. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/extension.py +0 -0
  179. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/history.py +0 -0
  180. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/logging.py +0 -0
  181. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/namespace.py +0 -0
  182. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/osm.py +0 -0
  183. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/packaging.py +0 -0
  184. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/pylab.py +0 -0
  185. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/magics/script.py +0 -0
  186. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/oinspect.py +0 -0
  187. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/page.py +0 -0
  188. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/payload.py +0 -0
  189. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/payloadpage.py +0 -0
  190. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/prefilter.py +0 -0
  191. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/profile/README_STARTUP +0 -0
  192. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/profileapp.py +0 -0
  193. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/profiledir.py +0 -0
  194. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/pylabtools.py +0 -0
  195. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/shellapp.py +0 -0
  196. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/splitinput.py +0 -0
  197. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/tbtools.py +0 -0
  198. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/tips.py +0 -0
  199. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/ultratb.py +0 -0
  200. {ipython-9.1.0 → ipython-9.3.0}/IPython/core/usage.py +0 -0
  201. {ipython-9.1.0 → ipython-9.3.0}/IPython/display.py +0 -0
  202. {ipython-9.1.0 → ipython-9.3.0}/IPython/extensions/__init__.py +0 -0
  203. {ipython-9.1.0 → ipython-9.3.0}/IPython/extensions/autoreload.py +0 -0
  204. {ipython-9.1.0 → ipython-9.3.0}/IPython/extensions/deduperreload/__init__.py +0 -0
  205. {ipython-9.1.0 → ipython-9.3.0}/IPython/extensions/deduperreload/deduperreload.py +0 -0
  206. {ipython-9.1.0 → ipython-9.3.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
  207. {ipython-9.1.0 → ipython-9.3.0}/IPython/extensions/storemagic.py +0 -0
  208. {ipython-9.1.0 → ipython-9.3.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
  209. {ipython-9.1.0 → ipython-9.3.0}/IPython/external/__init__.py +0 -0
  210. {ipython-9.1.0 → ipython-9.3.0}/IPython/external/pickleshare.py +0 -0
  211. {ipython-9.1.0 → ipython-9.3.0}/IPython/external/qt_for_kernel.py +0 -0
  212. {ipython-9.1.0 → ipython-9.3.0}/IPython/external/qt_loaders.py +0 -0
  213. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/__init__.py +0 -0
  214. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/backgroundjobs.py +0 -0
  215. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/clipboard.py +0 -0
  216. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/deepreload.py +0 -0
  217. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/demo.py +0 -0
  218. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/display.py +0 -0
  219. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/editorhooks.py +0 -0
  220. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/guisupport.py +0 -0
  221. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/latextools.py +0 -0
  222. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/lexers.py +0 -0
  223. {ipython-9.1.0 → ipython-9.3.0}/IPython/lib/pretty.py +0 -0
  224. {ipython-9.1.0 → ipython-9.3.0}/IPython/paths.py +0 -0
  225. {ipython-9.1.0 → ipython-9.3.0}/IPython/py.typed +0 -0
  226. {ipython-9.1.0 → ipython-9.3.0}/IPython/sphinxext/__init__.py +0 -0
  227. {ipython-9.1.0 → ipython-9.3.0}/IPython/sphinxext/custom_doctests.py +0 -0
  228. {ipython-9.1.0 → ipython-9.3.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  229. {ipython-9.1.0 → ipython-9.3.0}/IPython/sphinxext/ipython_directive.py +0 -0
  230. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/__init__.py +0 -0
  231. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/debugger.py +0 -0
  232. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/embed.py +0 -0
  233. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/ipapp.py +0 -0
  234. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/magics.py +0 -0
  235. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/prompts.py +0 -0
  236. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  237. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  238. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  239. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  240. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  241. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  242. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  243. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  244. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  245. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  246. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  247. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/ptutils.py +0 -0
  248. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  249. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  250. {ipython-9.1.0 → ipython-9.3.0}/IPython/terminal/shortcuts/filters.py +0 -0
  251. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/__init__.py +0 -0
  252. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/decorators.py +0 -0
  253. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/globalipapp.py +0 -0
  254. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/ipunittest.py +0 -0
  255. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/Makefile +0 -0
  256. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/__init__.py +0 -0
  257. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/dtexample.py +0 -0
  258. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  259. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  260. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/setup.py +0 -0
  261. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/simple.py +0 -0
  262. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/simplevars.py +0 -0
  263. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/test_combo.txt +0 -0
  264. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/test_example.txt +0 -0
  265. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  266. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  267. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/plugin/test_refs.py +0 -0
  268. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/skipdoctest.py +0 -0
  269. {ipython-9.1.0 → ipython-9.3.0}/IPython/testing/tools.py +0 -0
  270. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/PyColorize.py +0 -0
  271. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/__init__.py +0 -0
  272. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/_process_cli.py +0 -0
  273. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/_process_common.py +0 -0
  274. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/_process_emscripten.py +0 -0
  275. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/_process_posix.py +0 -0
  276. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/_process_win32.py +0 -0
  277. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/_process_win32_controller.py +0 -0
  278. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/capture.py +0 -0
  279. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/coloransi.py +0 -0
  280. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/contexts.py +0 -0
  281. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/data.py +0 -0
  282. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/decorators.py +0 -0
  283. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/dir2.py +0 -0
  284. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/docs.py +0 -0
  285. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/encoding.py +0 -0
  286. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/eventful.py +0 -0
  287. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/frame.py +0 -0
  288. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/generics.py +0 -0
  289. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/importstring.py +0 -0
  290. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/io.py +0 -0
  291. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/ipstruct.py +0 -0
  292. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/jsonutil.py +0 -0
  293. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/log.py +0 -0
  294. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/module_paths.py +0 -0
  295. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/openpy.py +0 -0
  296. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/path.py +0 -0
  297. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/process.py +0 -0
  298. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/py3compat.py +0 -0
  299. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/sentinel.py +0 -0
  300. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/strdispatch.py +0 -0
  301. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/sysinfo.py +0 -0
  302. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/syspathcontext.py +0 -0
  303. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/tempdir.py +0 -0
  304. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/terminal.py +0 -0
  305. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/text.py +0 -0
  306. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/timing.py +0 -0
  307. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/tokenutil.py +0 -0
  308. {ipython-9.1.0 → ipython-9.3.0}/IPython/utils/wildcard.py +0 -0
  309. {ipython-9.1.0 → ipython-9.3.0}/LICENSE +0 -0
  310. {ipython-9.1.0 → ipython-9.3.0}/MANIFEST.in +0 -0
  311. {ipython-9.1.0 → ipython-9.3.0}/README.rst +0 -0
  312. {ipython-9.1.0 → ipython-9.3.0}/_build_meta.py +0 -0
  313. {ipython-9.1.0 → ipython-9.3.0}/docs/Makefile +0 -0
  314. {ipython-9.1.0 → ipython-9.3.0}/docs/README.rst +0 -0
  315. {ipython-9.1.0 → ipython-9.3.0}/docs/autogen_api.py +0 -0
  316. {ipython-9.1.0 → ipython-9.3.0}/docs/autogen_config.py +0 -0
  317. {ipython-9.1.0 → ipython-9.3.0}/docs/autogen_magics.py +0 -0
  318. {ipython-9.1.0 → ipython-9.3.0}/docs/autogen_shortcuts.py +0 -0
  319. {ipython-9.1.0 → ipython-9.3.0}/docs/make.cmd +0 -0
  320. {ipython-9.1.0 → ipython-9.3.0}/docs/man/ipython.1 +0 -0
  321. {ipython-9.1.0 → ipython-9.3.0}/docs/requirements.txt +0 -0
  322. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/2.0/running-crop.png +0 -0
  323. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/2.0/running.png +0 -0
  324. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/2.0/treeview.png +0 -0
  325. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/2.0/user-interface.png +0 -0
  326. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/2.0/widgets.png +0 -0
  327. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  328. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  329. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  330. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  331. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  332. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  333. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  334. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  335. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  336. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  337. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  338. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/autosuggest.gif +0 -0
  339. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  340. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  341. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  342. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  343. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  344. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  345. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  346. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  347. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  348. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  349. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  350. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  351. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  352. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  353. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  354. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ms_visual_studio.png +0 -0
  355. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/notebook_specgram.png +0 -0
  356. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/ptshell_features.png +0 -0
  357. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/qtconsole.png +0 -0
  358. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  359. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_images/unicode_completion.png +0 -0
  360. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_static/favicon.ico +0 -0
  361. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_static/logo.png +0 -0
  362. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_static/theme_overrides.css +0 -0
  363. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_templates/breadcrumbs.html +0 -0
  364. {ipython-9.1.0 → ipython-9.3.0}/docs/source/_templates/notebook_redirect.html +0 -0
  365. {ipython-9.1.0 → ipython-9.3.0}/docs/source/about/history.rst +0 -0
  366. {ipython-9.1.0 → ipython-9.3.0}/docs/source/about/index.rst +0 -0
  367. {ipython-9.1.0 → ipython-9.3.0}/docs/source/about/license_and_copyright.rst +0 -0
  368. {ipython-9.1.0 → ipython-9.3.0}/docs/source/api/index.rst +0 -0
  369. {ipython-9.1.0 → ipython-9.3.0}/docs/source/conf.py +0 -0
  370. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/callbacks.rst +0 -0
  371. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/custommagics.rst +0 -0
  372. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/details.rst +0 -0
  373. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/eventloops.rst +0 -0
  374. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/extensions/autoreload.rst +0 -0
  375. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/extensions/index.rst +0 -0
  376. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/extensions/storemagic.rst +0 -0
  377. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/index.rst +0 -0
  378. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/inputtransforms.rst +0 -0
  379. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/integrating.rst +0 -0
  380. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/intro.rst +0 -0
  381. /ipython-9.1.0/tests/__init__.py → /ipython-9.3.0/docs/source/config/options/config-generated.txt +0 -0
  382. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/options/index.rst +0 -0
  383. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  384. {ipython-9.1.0 → ipython-9.3.0}/docs/source/config/shortcuts/index.rst +0 -0
  385. {ipython-9.1.0 → ipython-9.3.0}/docs/source/coredev/index.rst +0 -0
  386. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/config.rst +0 -0
  387. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/execution.rst +0 -0
  388. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  389. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  390. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/figs/other_kernels.png +0 -0
  391. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/figs/other_kernels.svg +0 -0
  392. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/how_ipython_works.rst +0 -0
  393. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/index.rst +0 -0
  394. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/inputhook_app.rst +0 -0
  395. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/kernels.rst +0 -0
  396. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/messaging.rst +0 -0
  397. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/pycompat.rst +0 -0
  398. {ipython-9.1.0 → ipython-9.3.0}/docs/source/development/wrapperkernels.rst +0 -0
  399. {ipython-9.1.0 → ipython-9.3.0}/docs/source/index.rst +0 -0
  400. {ipython-9.1.0 → ipython-9.3.0}/docs/source/install/index.rst +0 -0
  401. {ipython-9.1.0 → ipython-9.3.0}/docs/source/install/install.rst +0 -0
  402. {ipython-9.1.0 → ipython-9.3.0}/docs/source/install/kernel_install.rst +0 -0
  403. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/autoawait.rst +0 -0
  404. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/index.rst +0 -0
  405. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/magics.rst +0 -0
  406. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/plotting.rst +0 -0
  407. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  408. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/shell.rst +0 -0
  409. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/tips.rst +0 -0
  410. {ipython-9.1.0 → ipython-9.3.0}/docs/source/interactive/tutorial.rst +0 -0
  411. {ipython-9.1.0 → ipython-9.3.0}/docs/source/links.txt +0 -0
  412. {ipython-9.1.0 → ipython-9.3.0}/docs/source/overview.rst +0 -0
  413. {ipython-9.1.0 → ipython-9.3.0}/docs/source/parallel/index.rst +0 -0
  414. {ipython-9.1.0 → ipython-9.3.0}/docs/source/sphinx.toml +0 -0
  415. {ipython-9.1.0 → ipython-9.3.0}/docs/source/sphinxext.rst +0 -0
  416. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/development.rst +0 -0
  417. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  418. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  419. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  420. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  421. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  422. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  423. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  424. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  425. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  426. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  427. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  428. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/index.rst +0 -0
  429. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/pr/README.md +0 -0
  430. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  431. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  432. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version0.10.rst +0 -0
  433. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version0.11.rst +0 -0
  434. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version0.12.rst +0 -0
  435. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version0.13.rst +0 -0
  436. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version0.8.rst +0 -0
  437. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version0.9.rst +0 -0
  438. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version1.0.rst +0 -0
  439. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version2.0.rst +0 -0
  440. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version3.rst +0 -0
  441. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  442. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version4.rst +0 -0
  443. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version5.rst +0 -0
  444. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version6.rst +0 -0
  445. {ipython-9.1.0 → ipython-9.3.0}/docs/source/whatsnew/version7.rst +0 -0
  446. {ipython-9.1.0 → ipython-9.3.0}/docs/sphinxext/apigen.py +0 -0
  447. {ipython-9.1.0 → ipython-9.3.0}/docs/sphinxext/configtraits.py +0 -0
  448. {ipython-9.1.0 → ipython-9.3.0}/docs/sphinxext/github.py +0 -0
  449. {ipython-9.1.0 → ipython-9.3.0}/docs/sphinxext/magics.py +0 -0
  450. {ipython-9.1.0 → ipython-9.3.0}/examples/Embedding/embed_class_long.py +0 -0
  451. {ipython-9.1.0 → ipython-9.3.0}/examples/Embedding/embed_class_short.py +0 -0
  452. {ipython-9.1.0 → ipython-9.3.0}/examples/Embedding/embed_function.py +0 -0
  453. {ipython-9.1.0 → ipython-9.3.0}/examples/Embedding/start_ipython_config.py +0 -0
  454. {ipython-9.1.0 → ipython-9.3.0}/examples/IPython Kernel/example-demo.py +0 -0
  455. {ipython-9.1.0 → ipython-9.3.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  456. {ipython-9.1.0 → ipython-9.3.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  457. {ipython-9.1.0 → ipython-9.3.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  458. {ipython-9.1.0 → ipython-9.3.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  459. {ipython-9.1.0 → ipython-9.3.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  460. {ipython-9.1.0 → ipython-9.3.0}/examples/IPython Kernel/ipython.desktop +0 -0
  461. {ipython-9.1.0 → ipython-9.3.0}/examples/utils/cwd_prompt.py +0 -0
  462. {ipython-9.1.0 → ipython-9.3.0}/examples/utils/list_pyfiles.ipy +0 -0
  463. {ipython-9.1.0 → ipython-9.3.0}/examples/utils/list_subdirs.ipy +0 -0
  464. {ipython-9.1.0 → ipython-9.3.0}/ipython.egg-info/dependency_links.txt +0 -0
  465. {ipython-9.1.0 → ipython-9.3.0}/ipython.egg-info/entry_points.txt +0 -0
  466. {ipython-9.1.0 → ipython-9.3.0}/ipython.egg-info/not-zip-safe +0 -0
  467. {ipython-9.1.0 → ipython-9.3.0}/ipython.egg-info/requires.txt +0 -0
  468. {ipython-9.1.0 → ipython-9.3.0}/ipython.egg-info/top_level.txt +0 -0
  469. {ipython-9.1.0 → ipython-9.3.0}/long_description.rst +0 -0
  470. {ipython-9.1.0 → ipython-9.3.0}/scripts/ipython.ico +0 -0
  471. {ipython-9.1.0 → ipython-9.3.0}/scripts/ipython_nb.ico +0 -0
  472. {ipython-9.1.0 → ipython-9.3.0}/setup.cfg +0 -0
  473. {ipython-9.1.0 → ipython-9.3.0}/setup.py +0 -0
  474. {ipython-9.1.0 → ipython-9.3.0}/setupbase.py +0 -0
  475. {ipython-9.1.0 → ipython-9.3.0}/tests/2x2.jpg +0 -0
  476. {ipython-9.1.0 → ipython-9.3.0}/tests/2x2.png +0 -0
  477. {ipython-9.1.0 → ipython-9.3.0}/tests/bad_all.py +0 -0
  478. {ipython-9.1.0 → ipython-9.3.0}/tests/conftest.py +0 -0
  479. {ipython-9.1.0 → ipython-9.3.0}/tests/cve.py +0 -0
  480. {ipython-9.1.0 → ipython-9.3.0}/tests/fake_ext_dir/daft_extension.py +0 -0
  481. {ipython-9.1.0 → ipython-9.3.0}/tests/nonascii.py +0 -0
  482. {ipython-9.1.0 → ipython-9.3.0}/tests/nonascii2.py +0 -0
  483. {ipython-9.1.0 → ipython-9.3.0}/tests/print_argv.py +0 -0
  484. {ipython-9.1.0 → ipython-9.3.0}/tests/refbug.py +0 -0
  485. {ipython-9.1.0 → ipython-9.3.0}/tests/simpleerr.py +0 -0
  486. {ipython-9.1.0 → ipython-9.3.0}/tests/tclass.py +0 -0
  487. {ipython-9.1.0 → ipython-9.3.0}/tests/test.wav +0 -0
  488. {ipython-9.1.0 → ipython-9.3.0}/tests/test_alias.py +0 -0
  489. {ipython-9.1.0 → ipython-9.3.0}/tests/test_application.py +0 -0
  490. {ipython-9.1.0 → ipython-9.3.0}/tests/test_async_helpers.py +0 -0
  491. {ipython-9.1.0 → ipython-9.3.0}/tests/test_autocall.py +0 -0
  492. {ipython-9.1.0 → ipython-9.3.0}/tests/test_backgroundjobs.py +0 -0
  493. {ipython-9.1.0 → ipython-9.3.0}/tests/test_capture.py +0 -0
  494. {ipython-9.1.0 → ipython-9.3.0}/tests/test_clipboard.py +0 -0
  495. {ipython-9.1.0 → ipython-9.3.0}/tests/test_compilerop.py +0 -0
  496. {ipython-9.1.0 → ipython-9.3.0}/tests/test_completerlib.py +0 -0
  497. {ipython-9.1.0 → ipython-9.3.0}/tests/test_debug_magic.py +0 -0
  498. {ipython-9.1.0 → ipython-9.3.0}/tests/test_debugger.py +0 -0
  499. {ipython-9.1.0 → ipython-9.3.0}/tests/test_decorators.py +0 -0
  500. {ipython-9.1.0 → ipython-9.3.0}/tests/test_decorators_2.py +0 -0
  501. {ipython-9.1.0 → ipython-9.3.0}/tests/test_deepreload.py +0 -0
  502. {ipython-9.1.0 → ipython-9.3.0}/tests/test_dir2.py +0 -0
  503. {ipython-9.1.0 → ipython-9.3.0}/tests/test_display.py +0 -0
  504. {ipython-9.1.0 → ipython-9.3.0}/tests/test_display_2.py +0 -0
  505. {ipython-9.1.0 → ipython-9.3.0}/tests/test_displayhook.py +0 -0
  506. {ipython-9.1.0 → ipython-9.3.0}/tests/test_editorhooks.py +0 -0
  507. {ipython-9.1.0 → ipython-9.3.0}/tests/test_embed.py +0 -0
  508. {ipython-9.1.0 → ipython-9.3.0}/tests/test_events.py +0 -0
  509. {ipython-9.1.0 → ipython-9.3.0}/tests/test_exceptiongroup_tb.py +0 -0
  510. {ipython-9.1.0 → ipython-9.3.0}/tests/test_extension.py +0 -0
  511. {ipython-9.1.0 → ipython-9.3.0}/tests/test_formatters.py +0 -0
  512. {ipython-9.1.0 → ipython-9.3.0}/tests/test_handlers.py +0 -0
  513. {ipython-9.1.0 → ipython-9.3.0}/tests/test_help.py +0 -0
  514. {ipython-9.1.0 → ipython-9.3.0}/tests/test_history.py +0 -0
  515. {ipython-9.1.0 → ipython-9.3.0}/tests/test_hooks.py +0 -0
  516. {ipython-9.1.0 → ipython-9.3.0}/tests/test_imports.py +0 -0
  517. {ipython-9.1.0 → ipython-9.3.0}/tests/test_importstring.py +0 -0
  518. {ipython-9.1.0 → ipython-9.3.0}/tests/test_inputtransformer2.py +0 -0
  519. {ipython-9.1.0 → ipython-9.3.0}/tests/test_inputtransformer2_line.py +0 -0
  520. {ipython-9.1.0 → ipython-9.3.0}/tests/test_interactiveshell.py +0 -0
  521. {ipython-9.1.0 → ipython-9.3.0}/tests/test_interactivshell.py +0 -0
  522. {ipython-9.1.0 → ipython-9.3.0}/tests/test_io.py +0 -0
  523. {ipython-9.1.0 → ipython-9.3.0}/tests/test_iplib.py +0 -0
  524. {ipython-9.1.0 → ipython-9.3.0}/tests/test_ipunittest.py +0 -0
  525. {ipython-9.1.0 → ipython-9.3.0}/tests/test_latextools.py +0 -0
  526. {ipython-9.1.0 → ipython-9.3.0}/tests/test_logger.py +0 -0
  527. {ipython-9.1.0 → ipython-9.3.0}/tests/test_magic_arguments.py +0 -0
  528. {ipython-9.1.0 → ipython-9.3.0}/tests/test_magic_terminal.py +0 -0
  529. {ipython-9.1.0 → ipython-9.3.0}/tests/test_module_paths.py +0 -0
  530. {ipython-9.1.0 → ipython-9.3.0}/tests/test_oinspect.py +0 -0
  531. {ipython-9.1.0 → ipython-9.3.0}/tests/test_openpy.py +0 -0
  532. {ipython-9.1.0 → ipython-9.3.0}/tests/test_page.py +0 -0
  533. {ipython-9.1.0 → ipython-9.3.0}/tests/test_path.py +0 -0
  534. {ipython-9.1.0 → ipython-9.3.0}/tests/test_paths.py +0 -0
  535. {ipython-9.1.0 → ipython-9.3.0}/tests/test_prefilter.py +0 -0
  536. {ipython-9.1.0 → ipython-9.3.0}/tests/test_pretty.py +0 -0
  537. {ipython-9.1.0 → ipython-9.3.0}/tests/test_process.py +0 -0
  538. {ipython-9.1.0 → ipython-9.3.0}/tests/test_profile.py +0 -0
  539. {ipython-9.1.0 → ipython-9.3.0}/tests/test_pt_inputhooks.py +0 -0
  540. {ipython-9.1.0 → ipython-9.3.0}/tests/test_pycolorize.py +0 -0
  541. {ipython-9.1.0 → ipython-9.3.0}/tests/test_pylabtools.py +0 -0
  542. {ipython-9.1.0 → ipython-9.3.0}/tests/test_qt_loaders.py +0 -0
  543. {ipython-9.1.0 → ipython-9.3.0}/tests/test_run.py +0 -0
  544. {ipython-9.1.0 → ipython-9.3.0}/tests/test_shellapp.py +0 -0
  545. {ipython-9.1.0 → ipython-9.3.0}/tests/test_splitinput.py +0 -0
  546. {ipython-9.1.0 → ipython-9.3.0}/tests/test_storemagic.py +0 -0
  547. {ipython-9.1.0 → ipython-9.3.0}/tests/test_sysinfo.py +0 -0
  548. {ipython-9.1.0 → ipython-9.3.0}/tests/test_tempdir.py +0 -0
  549. {ipython-9.1.0 → ipython-9.3.0}/tests/test_text.py +0 -0
  550. {ipython-9.1.0 → ipython-9.3.0}/tests/test_tips.py +0 -0
  551. {ipython-9.1.0 → ipython-9.3.0}/tests/test_tokenutil.py +0 -0
  552. {ipython-9.1.0 → ipython-9.3.0}/tests/test_tools.py +0 -0
  553. {ipython-9.1.0 → ipython-9.3.0}/tests/test_ultratb.py +0 -0
  554. {ipython-9.1.0 → ipython-9.3.0}/tests/test_wildcard.py +0 -0
  555. {ipython-9.1.0 → ipython-9.3.0}/tests/test_zzz_autoreload.py +0 -0
@@ -80,6 +80,11 @@ def embed_kernel(module=None, local_ns=None, **kwargs):
80
80
  and/or you want to load full IPython configuration,
81
81
  you probably want `IPython.start_kernel()` instead.
82
82
 
83
+ This is a deprecated alias for `ipykernel.embed.embed_kernel()`,
84
+ to be removed in the future.
85
+ You should import directly from `ipykernel.embed`; this wrapper
86
+ fails anyway if you don't have `ipykernel` package installed.
87
+
83
88
  Parameters
84
89
  ----------
85
90
  module : types.ModuleType, optional
@@ -203,15 +203,11 @@ from types import SimpleNamespace
203
203
  from typing import (
204
204
  Iterable,
205
205
  Iterator,
206
- List,
207
- Tuple,
208
206
  Union,
209
207
  Any,
210
208
  Sequence,
211
- Dict,
212
209
  Optional,
213
210
  TYPE_CHECKING,
214
- Set,
215
211
  Sized,
216
212
  TypeVar,
217
213
  Literal,
@@ -236,10 +232,12 @@ from traitlets import (
236
232
  List as ListTrait,
237
233
  Unicode,
238
234
  Dict as DictTrait,
235
+ DottedObjectName,
239
236
  Union as UnionTrait,
240
237
  observe,
241
238
  )
242
239
  from traitlets.config.configurable import Configurable
240
+ from traitlets.utils.importstring import import_item
243
241
 
244
242
  import __main__
245
243
 
@@ -987,7 +985,7 @@ class Completer(Configurable):
987
985
 
988
986
  - ``forbidden``: no evaluation of code is permitted,
989
987
  - ``minimal``: evaluation of literals and access to built-in namespace;
990
- no item/attribute evaluationm no access to locals/globals,
988
+ no item/attribute evaluation, no access to locals/globals,
991
989
  no evaluation of any operations or comparisons.
992
990
  - ``limited``: access to all namespaces, evaluation of hard-coded methods
993
991
  (for example: :any:`dict.keys`, :any:`object.__getattr__`,
@@ -995,7 +993,9 @@ class Completer(Configurable):
995
993
  :any:`dict`, :any:`list`, :any:`tuple`, ``pandas.Series``),
996
994
  - ``unsafe``: evaluation of all methods and function calls but not of
997
995
  syntax with side-effects like `del x`,
998
- - ``dangerous``: completely arbitrary evaluation.
996
+ - ``dangerous``: completely arbitrary evaluation; does not support auto-import.
997
+
998
+ To override specific elements of the policy, you can use ``policy_overrides`` trait.
999
999
  """,
1000
1000
  ).tag(config=True)
1001
1001
 
@@ -1031,6 +1031,35 @@ class Completer(Configurable):
1031
1031
  """,
1032
1032
  ).tag(config=True)
1033
1033
 
1034
+ policy_overrides = DictTrait(
1035
+ default_value={},
1036
+ key_trait=Unicode(),
1037
+ help="""Overrides for policy evaluation.
1038
+
1039
+ For example, to enable auto-import on completion specify:
1040
+
1041
+ .. code-block::
1042
+
1043
+ ipython --Completer.policy_overrides='{"allow_auto_import": True}' --Completer.use_jedi=False
1044
+
1045
+ """,
1046
+ ).tag(config=True)
1047
+
1048
+ auto_import_method = DottedObjectName(
1049
+ default_value="importlib.import_module",
1050
+ allow_none=True,
1051
+ help="""\
1052
+ Provisional:
1053
+ This is a provisional API in IPython 9.3, it may change without warnings.
1054
+
1055
+ A fully qualified path to an auto-import method for use by completer.
1056
+ The function should take a single string and return `ModuleType` and
1057
+ can raise `ImportError` exception if module is not found.
1058
+
1059
+ The default auto-import implementation does not populate the user namespace with the imported module.
1060
+ """,
1061
+ ).tag(config=True)
1062
+
1034
1063
  def __init__(self, namespace=None, global_namespace=None, **kwargs):
1035
1064
  """Create a new completer for the command line.
1036
1065
 
@@ -1134,6 +1163,48 @@ class Completer(Configurable):
1134
1163
  # we simple attribute matching with normal identifiers.
1135
1164
  _ATTR_MATCH_RE = re.compile(r"(.+)\.(\w*)$")
1136
1165
 
1166
+ def _strip_code_before_operator(self, code: str) -> str:
1167
+ o_parens = {"(", "[", "{"}
1168
+ c_parens = {")", "]", "}"}
1169
+
1170
+ # Dry-run tokenize to catch errors
1171
+ try:
1172
+ _ = list(tokenize.generate_tokens(iter(code.splitlines()).__next__))
1173
+ except tokenize.TokenError:
1174
+ # Try trimming the expression and retrying
1175
+ trimmed_code = self._trim_expr(code)
1176
+ try:
1177
+ _ = list(
1178
+ tokenize.generate_tokens(iter(trimmed_code.splitlines()).__next__)
1179
+ )
1180
+ code = trimmed_code
1181
+ except tokenize.TokenError:
1182
+ return code
1183
+
1184
+ tokens = _parse_tokens(code)
1185
+ encountered_operator = False
1186
+ after_operator = []
1187
+ nesting_level = 0
1188
+
1189
+ for t in tokens:
1190
+ if t.type == tokenize.OP:
1191
+ if t.string in o_parens:
1192
+ nesting_level += 1
1193
+ elif t.string in c_parens:
1194
+ nesting_level -= 1
1195
+ elif t.string != "." and nesting_level == 0:
1196
+ encountered_operator = True
1197
+ after_operator = []
1198
+ continue
1199
+
1200
+ if encountered_operator:
1201
+ after_operator.append(t.string)
1202
+
1203
+ if encountered_operator:
1204
+ return "".join(after_operator)
1205
+ else:
1206
+ return code
1207
+
1137
1208
  def _attr_matches(
1138
1209
  self, text: str, include_prefix: bool = True
1139
1210
  ) -> tuple[Sequence[str], str]:
@@ -1141,9 +1212,12 @@ class Completer(Configurable):
1141
1212
  if not m2:
1142
1213
  return [], ""
1143
1214
  expr, attr = m2.group(1, 2)
1215
+ try:
1216
+ expr = self._strip_code_before_operator(expr)
1217
+ except tokenize.TokenError:
1218
+ pass
1144
1219
 
1145
1220
  obj = self._evaluate_expr(expr)
1146
-
1147
1221
  if obj is not_found:
1148
1222
  return [], ""
1149
1223
 
@@ -1234,6 +1308,8 @@ class Completer(Configurable):
1234
1308
  globals=self.global_namespace,
1235
1309
  locals=self.namespace,
1236
1310
  evaluation=self.evaluation,
1311
+ auto_import=self._auto_import,
1312
+ policy_overrides=self.policy_overrides,
1237
1313
  ),
1238
1314
  )
1239
1315
  done = True
@@ -1247,6 +1323,14 @@ class Completer(Configurable):
1247
1323
  expr = self._trim_expr(expr)
1248
1324
  return obj
1249
1325
 
1326
+ @property
1327
+ def _auto_import(self):
1328
+ if self.auto_import_method is None:
1329
+ return None
1330
+ if not hasattr(self, "_auto_import_func"):
1331
+ self._auto_import_func = import_item(self.auto_import_method)
1332
+ return self._auto_import_func
1333
+
1250
1334
  def get__all__entries(obj):
1251
1335
  """returns the strings in the __all__ attribute"""
1252
1336
  try:
@@ -2787,6 +2871,8 @@ class IPCompleter(Completer):
2787
2871
  locals=self.namespace,
2788
2872
  evaluation=self.evaluation, # type: ignore
2789
2873
  in_subscript=True,
2874
+ auto_import=self._auto_import,
2875
+ policy_overrides=self.policy_overrides,
2790
2876
  ),
2791
2877
  )
2792
2878
 
@@ -1,19 +1,15 @@
1
+ from copy import copy
1
2
  from inspect import isclass, signature, Signature
2
- from pygments.formatters.terminal256 import Terminal256Formatter
3
3
  from typing import (
4
4
  Annotated,
5
5
  AnyStr,
6
6
  Callable,
7
- Dict,
8
7
  Literal,
9
8
  NamedTuple,
10
9
  NewType,
11
10
  Optional,
12
11
  Protocol,
13
- Set,
14
12
  Sequence,
15
- Tuple,
16
- Type,
17
13
  TypeGuard,
18
14
  Union,
19
15
  get_args,
@@ -97,6 +93,7 @@ class EvaluationPolicy:
97
93
  allow_builtins_access: bool = False
98
94
  allow_all_operations: bool = False
99
95
  allow_any_calls: bool = False
96
+ allow_auto_import: bool = False
100
97
  allowed_calls: set[Callable] = field(default_factory=set)
101
98
 
102
99
  def can_get_item(self, value, item):
@@ -330,6 +327,10 @@ class EvaluationContext(NamedTuple):
330
327
  #: Whether the evaluation of code takes place inside of a subscript.
331
328
  #: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``.
332
329
  in_subscript: bool = False
330
+ #: Auto import method
331
+ auto_import: Callable[list[str], ModuleType] | None = None
332
+ #: Overrides for evaluation policy
333
+ policy_overrides: dict = {}
333
334
 
334
335
 
335
336
  class _IdentitySubscript:
@@ -463,6 +464,17 @@ def _find_dunder(node_op, dunders) -> Union[tuple[str, ...], None]:
463
464
  return dunder
464
465
 
465
466
 
467
+ def get_policy(context: EvaluationContext) -> EvaluationPolicy:
468
+ policy = copy(EVALUATION_POLICIES[context.evaluation])
469
+
470
+ for key, value in context.policy_overrides.items():
471
+ if hasattr(policy, key):
472
+ setattr(policy, key, value)
473
+ else:
474
+ print(f"Incorrect policy override key: {key}")
475
+ return policy
476
+
477
+
466
478
  def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
467
479
  """Evaluate AST node in provided context.
468
480
 
@@ -490,7 +502,8 @@ def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
490
502
  The purpose of this function is to guard against unwanted side-effects;
491
503
  it does not give guarantees on protection from malicious code execution.
492
504
  """
493
- policy = EVALUATION_POLICIES[context.evaluation]
505
+ policy = get_policy(context)
506
+
494
507
  if node is None:
495
508
  return None
496
509
  if isinstance(node, ast.Expression):
@@ -711,7 +724,7 @@ def _resolve_annotation(
711
724
 
712
725
 
713
726
  def _eval_node_name(node_id: str, context: EvaluationContext):
714
- policy = EVALUATION_POLICIES[context.evaluation]
727
+ policy = get_policy(context)
715
728
  if policy.allow_locals_access and node_id in context.locals:
716
729
  return context.locals[node_id]
717
730
  if policy.allow_globals_access and node_id in context.globals:
@@ -719,6 +732,8 @@ def _eval_node_name(node_id: str, context: EvaluationContext):
719
732
  if policy.allow_builtins_access and hasattr(builtins, node_id):
720
733
  # note: do not use __builtins__, it is implementation detail of cPython
721
734
  return getattr(builtins, node_id)
735
+ if policy.allow_auto_import and context.auto_import:
736
+ return context.auto_import(node_id)
722
737
  if not policy.allow_globals_access and not policy.allow_locals_access:
723
738
  raise GuardRejection(
724
739
  f"Namespace access not allowed in {context.evaluation} mode"
@@ -728,7 +743,7 @@ def _eval_node_name(node_id: str, context: EvaluationContext):
728
743
 
729
744
 
730
745
  def _eval_or_create_duck(duck_type, node: ast.Call, context: EvaluationContext):
731
- policy = EVALUATION_POLICIES[context.evaluation]
746
+ policy = get_policy(context)
732
747
  # if allow-listed builtin is on type annotation, instantiate it
733
748
  if policy.can_call(duck_type) and not node.keywords:
734
749
  args = [eval_node(arg, context) for arg in node.args]
@@ -290,7 +290,7 @@ class ExecutionResult:
290
290
  """
291
291
 
292
292
  execution_count: Optional[int] = None
293
- error_before_exec: Optional[bool] = None
293
+ error_before_exec: Optional[BaseException] = None
294
294
  error_in_exec: Optional[BaseException] = None
295
295
  info = None
296
296
  result = None
@@ -314,6 +314,7 @@ class ExecutionResult:
314
314
  return '<%s object at %x, execution_count=%s error_before_exec=%s error_in_exec=%s info=%s result=%s>' %\
315
315
  (name, id(self), self.execution_count, self.error_before_exec, self.error_in_exec, repr(self.info), repr(self.result))
316
316
 
317
+
317
318
  @functools.wraps(io_open)
318
319
  def _modified_open(file, *args, **kwargs):
319
320
  if file in {0, 1, 2}:
@@ -331,7 +332,7 @@ class InteractiveShell(SingletonConfigurable):
331
332
 
332
333
  _instance = None
333
334
  _user_ns: dict
334
- _sys_modules_keys: set[str, AnyType]
335
+ _sys_modules_keys: set[str]
335
336
 
336
337
  inspector: oinspect.Inspector
337
338
 
@@ -1572,7 +1573,7 @@ class InteractiveShell(SingletonConfigurable):
1572
1573
  if isinstance(variables, str):
1573
1574
  vlist = variables.split()
1574
1575
  else:
1575
- vlist = variables
1576
+ vlist = list(variables)
1576
1577
  vdict = {}
1577
1578
  cf = sys._getframe(1)
1578
1579
  for name in vlist:
@@ -1887,11 +1888,12 @@ class InteractiveShell(SingletonConfigurable):
1887
1888
  with self.builtin_trap:
1888
1889
  info = self._object_find(oname)
1889
1890
  if info.found:
1890
- docformat = (
1891
- sphinxify(self.object_inspect(oname))
1892
- if self.sphinxify_docstring
1893
- else None
1894
- )
1891
+ if self.sphinxify_docstring:
1892
+ if sphinxify is None:
1893
+ raise ImportError("Module ``docrepr`` required but missing")
1894
+ docformat = sphinxify(self.object_inspect(oname))
1895
+ else:
1896
+ docformat = None
1895
1897
  return self.inspector._get_info(
1896
1898
  info.obj,
1897
1899
  oname,
@@ -2196,7 +2198,7 @@ class InteractiveShell(SingletonConfigurable):
2196
2198
  except KeyboardInterrupt:
2197
2199
  print('\n' + self.get_exception_only(), file=sys.stderr)
2198
2200
 
2199
- def _showtraceback(self, etype, evalue, stb: str):
2201
+ def _showtraceback(self, etype, evalue, stb: list[str]):
2200
2202
  """Actually show a traceback.
2201
2203
 
2202
2204
  Subclasses may override this method to put the traceback on a different
@@ -3152,14 +3154,17 @@ class InteractiveShell(SingletonConfigurable):
3152
3154
  try:
3153
3155
  result = runner(coro)
3154
3156
  except BaseException as e:
3155
- info = ExecutionInfo(
3156
- raw_cell, store_history, silent, shell_futures, cell_id
3157
- )
3158
- result = ExecutionResult(info)
3159
- result.error_in_exec = e
3160
- self.showtraceback(running_compiled_code=True)
3161
- finally:
3162
- return result
3157
+ try:
3158
+ info = ExecutionInfo(
3159
+ raw_cell, store_history, silent, shell_futures, cell_id
3160
+ )
3161
+ result = ExecutionResult(info)
3162
+ result.error_in_exec = e
3163
+ self.showtraceback(running_compiled_code=True)
3164
+ except:
3165
+ pass
3166
+
3167
+ return result
3163
3168
 
3164
3169
  def should_run_async(
3165
3170
  self, raw_cell: str, *, transformed_cell=None, preprocessing_exc_tuple=None
@@ -3596,7 +3601,7 @@ class InteractiveShell(SingletonConfigurable):
3596
3601
  if mode == "exec":
3597
3602
  mod = Module([node], [])
3598
3603
  elif mode == "single":
3599
- mod = ast.Interactive([node]) # type: ignore
3604
+ mod = ast.Interactive([node])
3600
3605
  with compiler.extra_flags(
3601
3606
  getattr(ast, "PyCF_ALLOW_TOP_LEVEL_AWAIT", 0x0)
3602
3607
  if self.autoawait
@@ -160,10 +160,11 @@ class TimeitTemplateFiller(ast.NodeTransformer):
160
160
 
161
161
  class Timer(timeit.Timer):
162
162
  """Timer class that explicitly uses self.inner
163
-
163
+
164
164
  which is an undocumented implementation detail of CPython,
165
165
  not shared by PyPy.
166
166
  """
167
+
167
168
  # Timer.timeit copied from CPython 3.4.2
168
169
  def timeit(self, number=timeit.default_number):
169
170
  """Time 'number' executions of the main statement.
@@ -201,7 +202,6 @@ class ExecutionMagics(Magics):
201
202
  @no_var_expand
202
203
  @line_cell_magic
203
204
  def prun(self, parameter_s='', cell=None):
204
-
205
205
  """Run a statement through the python code profiler.
206
206
 
207
207
  **Usage, in line mode**::
@@ -1000,7 +1000,7 @@ class ExecutionMagics(Magics):
1000
1000
  # Stop iteration is raised on quit command
1001
1001
  pass
1002
1002
 
1003
- except:
1003
+ except Exception:
1004
1004
  etype, value, tb = sys.exc_info()
1005
1005
  # Skip three frames in the traceback: the %run one,
1006
1006
  # one inside bdb.py, and the command-line typed by the
@@ -1142,7 +1142,7 @@ class ExecutionMagics(Magics):
1142
1142
  )
1143
1143
  if stmt == "" and cell is None:
1144
1144
  return
1145
-
1145
+
1146
1146
  timefunc = timeit.default_timer
1147
1147
  number = int(getattr(opts, "n", 0))
1148
1148
  default_repeat = 7 if timeit.default_repeat < 7 else timeit.default_repeat
@@ -1262,7 +1262,7 @@ class ExecutionMagics(Magics):
1262
1262
  @needs_local_scope
1263
1263
  @line_cell_magic
1264
1264
  @output_can_be_silenced
1265
- def time(self,line='', cell=None, local_ns=None):
1265
+ def time(self, line="", cell=None, local_ns=None):
1266
1266
  """Time execution of a Python statement or expression.
1267
1267
 
1268
1268
  The CPU and wall clock times are printed, and the value of the
@@ -1277,13 +1277,19 @@ class ExecutionMagics(Magics):
1277
1277
  - In cell mode, you can time the cell body (a directly
1278
1278
  following statement raises an error).
1279
1279
 
1280
- This function provides very basic timing functionality. Use the timeit
1280
+ This function provides very basic timing functionality. Use the timeit
1281
1281
  magic for more control over the measurement.
1282
1282
 
1283
1283
  .. versionchanged:: 7.3
1284
1284
  User variables are no longer expanded,
1285
1285
  the magic line is always left unmodified.
1286
1286
 
1287
+ .. versionchanged:: 8.3
1288
+ The time magic now correctly propagates system-exiting exceptions
1289
+ (such as ``KeyboardInterrupt`` invoked when interrupting execution)
1290
+ rather than just printing out the exception traceback.
1291
+ The non-system-exception will still be caught as before.
1292
+
1287
1293
  Examples
1288
1294
  --------
1289
1295
  ::
@@ -1324,10 +1330,10 @@ class ExecutionMagics(Magics):
1324
1330
  Compiler : 0.78 s
1325
1331
  """
1326
1332
  # fail immediately if the given expression can't be compiled
1327
-
1333
+
1328
1334
  if line and cell:
1329
1335
  raise UsageError("Can't use statement directly after '%%time'!")
1330
-
1336
+
1331
1337
  if cell:
1332
1338
  expr = self.shell.transform_cell(cell)
1333
1339
  else:
@@ -1338,7 +1344,7 @@ class ExecutionMagics(Magics):
1338
1344
 
1339
1345
  t0 = clock()
1340
1346
  expr_ast = self.shell.compile.ast_parse(expr)
1341
- tp = clock()-t0
1347
+ tp = clock() - t0
1342
1348
 
1343
1349
  # Apply AST transformations
1344
1350
  expr_ast = self.shell.transform_ast(expr_ast)
@@ -1346,8 +1352,8 @@ class ExecutionMagics(Magics):
1346
1352
  # Minimum time above which compilation time will be reported
1347
1353
  tc_min = 0.1
1348
1354
 
1349
- expr_val=None
1350
- if len(expr_ast.body)==1 and isinstance(expr_ast.body[0], ast.Expr):
1355
+ expr_val = None
1356
+ if len(expr_ast.body) == 1 and isinstance(expr_ast.body[0], ast.Expr):
1351
1357
  mode = 'eval'
1352
1358
  source = '<timed eval>'
1353
1359
  expr_ast = ast.Expression(expr_ast.body[0].value)
@@ -1356,25 +1362,25 @@ class ExecutionMagics(Magics):
1356
1362
  source = '<timed exec>'
1357
1363
  # multi-line %%time case
1358
1364
  if len(expr_ast.body) > 1 and isinstance(expr_ast.body[-1], ast.Expr):
1359
- expr_val= expr_ast.body[-1]
1365
+ expr_val = expr_ast.body[-1]
1360
1366
  expr_ast = expr_ast.body[:-1]
1361
1367
  expr_ast = Module(expr_ast, [])
1362
1368
  expr_val = ast.Expression(expr_val.value)
1363
1369
 
1364
1370
  t0 = clock()
1365
1371
  code = self.shell.compile(expr_ast, source, mode)
1366
- tc = clock()-t0
1372
+ tc = clock() - t0
1367
1373
 
1368
1374
  # skew measurement as little as possible
1369
1375
  glob = self.shell.user_ns
1370
1376
  wtime = time.time
1371
1377
  # time execution
1372
1378
  wall_st = wtime()
1373
- if mode=='eval':
1379
+ if mode == "eval":
1374
1380
  st = clock2()
1375
1381
  try:
1376
1382
  out = eval(code, glob, local_ns)
1377
- except:
1383
+ except Exception:
1378
1384
  self.shell.showtraceback()
1379
1385
  return
1380
1386
  end = clock2()
@@ -1382,12 +1388,12 @@ class ExecutionMagics(Magics):
1382
1388
  st = clock2()
1383
1389
  try:
1384
1390
  exec(code, glob, local_ns)
1385
- out=None
1391
+ out = None
1386
1392
  # multi-line %%time case
1387
1393
  if expr_val is not None:
1388
1394
  code_2 = self.shell.compile(expr_val, source, 'eval')
1389
1395
  out = eval(code_2, glob, local_ns)
1390
- except:
1396
+ except Exception:
1391
1397
  self.shell.showtraceback()
1392
1398
  return
1393
1399
  end = clock2()
@@ -1630,14 +1636,15 @@ def parse_breakpoint(text, current_file):
1630
1636
  return current_file, int(text)
1631
1637
  else:
1632
1638
  return text[:colon], int(text[colon+1:])
1633
-
1639
+
1640
+
1634
1641
  def _format_time(timespan, precision=3):
1635
1642
  """Formats the timespan in a human readable form"""
1636
1643
 
1637
1644
  if timespan >= 60.0:
1638
1645
  # we have more than a minute, format that in a human readable form
1639
1646
  # Idea from http://snipplr.com/view/5713/
1640
- parts = [("d", 60*60*24),("h", 60*60),("min", 60), ("s", 1)]
1647
+ parts = [("d", 60 * 60 * 24), ("h", 60 * 60), ("min", 60), ("s", 1)]
1641
1648
  time = []
1642
1649
  leftover = timespan
1643
1650
  for suffix, length in parts:
@@ -1649,7 +1656,6 @@ def _format_time(timespan, precision=3):
1649
1656
  break
1650
1657
  return " ".join(time)
1651
1658
 
1652
-
1653
1659
  # Unfortunately characters outside of range(128) can cause problems in
1654
1660
  # certain terminals.
1655
1661
  # See bug: https://bugs.launchpad.net/ipython/+bug/348466
@@ -1663,7 +1669,7 @@ def _format_time(timespan, precision=3):
1663
1669
  except:
1664
1670
  pass
1665
1671
  scaling = [1, 1e3, 1e6, 1e9]
1666
-
1672
+
1667
1673
  if timespan > 0.0:
1668
1674
  order = min(-int(math.floor(math.log10(timespan)) // 3), 3)
1669
1675
  else:
@@ -16,7 +16,7 @@
16
16
  # release. 'dev' as a _version_extra string means this is a development
17
17
  # version
18
18
  _version_major = 9
19
- _version_minor = 1
19
+ _version_minor = 3
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "b2"
@@ -475,7 +475,7 @@ class TerminalInteractiveShell(InteractiveShell):
475
475
  allow_none=True,
476
476
  help="""\
477
477
  Provisional:
478
- This is a provisinal API in IPython 8.32, before stabilisation
478
+ This is a provisional API in IPython 8.32, before stabilisation
479
479
  in 9.0, it may change without warnings.
480
480
 
481
481
  class to use for the `NavigableAutoSuggestFromHistory` to request
@@ -507,13 +507,16 @@ class TerminalInteractiveShell(InteractiveShell):
507
507
  elif provider == "NavigableAutoSuggestFromHistory":
508
508
  # LLM stuff are all Provisional in 8.32
509
509
  if self._llm_provider_class:
510
- llm_provider_constructor = import_item(self._llm_provider_class)
511
- llm_provider = llm_provider_constructor(**self.llm_constructor_kwargs)
510
+
511
+ def init_llm_provider():
512
+ llm_provider_constructor = import_item(self._llm_provider_class)
513
+ return llm_provider_constructor(**self.llm_constructor_kwargs)
514
+
512
515
  else:
513
- llm_provider = None
516
+ init_llm_provider = None
514
517
  self.auto_suggest = NavigableAutoSuggestFromHistory()
515
518
  # Provisinal in 8.32
516
- self.auto_suggest._llm_provider = llm_provider
519
+ self.auto_suggest._init_llm_provider = init_llm_provider
517
520
 
518
521
  name = self.llm_prefix_from_history
519
522