ipython 9.3.0__tar.gz → 9.4.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 (556) hide show
  1. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/debugger.py +11 -1
  2. ipython-9.4.0/IPython/core/debugger_backport.py +206 -0
  3. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/interactiveshell.py +32 -5
  4. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/execution.py +64 -11
  5. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/namespace.py +19 -5
  6. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/script.py +8 -1
  7. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/release.py +1 -1
  8. {ipython-9.3.0 → ipython-9.4.0}/IPython/extensions/autoreload.py +165 -6
  9. {ipython-9.3.0 → ipython-9.4.0}/IPython/extensions/deduperreload/deduperreload.py +1 -10
  10. {ipython-9.3.0 → ipython-9.4.0}/IPython/extensions/tests/test_deduperreload.py +39 -0
  11. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/_sysinfo.py +1 -1
  12. {ipython-9.3.0/ipython.egg-info → ipython-9.4.0}/PKG-INFO +1 -1
  13. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version9.rst +24 -3
  14. {ipython-9.3.0 → ipython-9.4.0/ipython.egg-info}/PKG-INFO +1 -1
  15. {ipython-9.3.0 → ipython-9.4.0}/ipython.egg-info/SOURCES.txt +1 -113
  16. {ipython-9.3.0 → ipython-9.4.0}/tests/test_debugger.py +28 -0
  17. {ipython-9.3.0 → ipython-9.4.0}/tests/test_magic.py +17 -2
  18. {ipython-9.3.0 → ipython-9.4.0}/tests/test_zzz_autoreload.py +445 -1
  19. ipython-9.3.0/docs/source/api/generated/IPython.core.alias.rst +0 -36
  20. ipython-9.3.0/docs/source/api/generated/IPython.core.application.rst +0 -20
  21. ipython-9.3.0/docs/source/api/generated/IPython.core.async_helpers.rst +0 -13
  22. ipython-9.3.0/docs/source/api/generated/IPython.core.autocall.rst +0 -24
  23. ipython-9.3.0/docs/source/api/generated/IPython.core.builtin_trap.rst +0 -16
  24. ipython-9.3.0/docs/source/api/generated/IPython.core.compilerop.rst +0 -22
  25. ipython-9.3.0/docs/source/api/generated/IPython.core.completer.rst +0 -107
  26. ipython-9.3.0/docs/source/api/generated/IPython.core.completerlib.rst +0 -43
  27. ipython-9.3.0/docs/source/api/generated/IPython.core.crashhandler.rst +0 -22
  28. ipython-9.3.0/docs/source/api/generated/IPython.core.debugger.rst +0 -35
  29. ipython-9.3.0/docs/source/api/generated/IPython.core.doctb.rst +0 -16
  30. ipython-9.3.0/docs/source/api/generated/IPython.core.error.rst +0 -30
  31. ipython-9.3.0/docs/source/api/generated/IPython.core.events.rst +0 -34
  32. ipython-9.3.0/docs/source/api/generated/IPython.core.extensions.rst +0 -16
  33. ipython-9.3.0/docs/source/api/generated/IPython.core.formatters.rst +0 -83
  34. ipython-9.3.0/docs/source/api/generated/IPython.core.getipython.rst +0 -13
  35. ipython-9.3.0/docs/source/api/generated/IPython.core.guarded_eval.rst +0 -34
  36. ipython-9.3.0/docs/source/api/generated/IPython.core.history.rst +0 -59
  37. ipython-9.3.0/docs/source/api/generated/IPython.core.historyapp.rst +0 -22
  38. ipython-9.3.0/docs/source/api/generated/IPython.core.hooks.rst +0 -31
  39. ipython-9.3.0/docs/source/api/generated/IPython.core.inputtransformer2.rst +0 -85
  40. ipython-9.3.0/docs/source/api/generated/IPython.core.interactiveshell.rst +0 -56
  41. ipython-9.3.0/docs/source/api/generated/IPython.core.logger.rst +0 -16
  42. ipython-9.3.0/docs/source/api/generated/IPython.core.macro.rst +0 -16
  43. ipython-9.3.0/docs/source/api/generated/IPython.core.magic.rst +0 -59
  44. ipython-9.3.0/docs/source/api/generated/IPython.core.magic_arguments.rst +0 -62
  45. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.ast_mod.rst +0 -22
  46. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.auto.rst +0 -16
  47. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.basic.rst +0 -24
  48. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.code.rst +0 -38
  49. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.config.rst +0 -16
  50. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.display.rst +0 -14
  51. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.execution.rst +0 -38
  52. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.extension.rst +0 -14
  53. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.history.rst +0 -14
  54. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.logging.rst +0 -14
  55. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.namespace.rst +0 -14
  56. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.osm.rst +0 -16
  57. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.packaging.rst +0 -20
  58. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.pylab.rst +0 -14
  59. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.rst +0 -14
  60. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.script.rst +0 -26
  61. ipython-9.3.0/docs/source/api/generated/IPython.core.oinspect.rst +0 -52
  62. ipython-9.3.0/docs/source/api/generated/IPython.core.page.rst +0 -37
  63. ipython-9.3.0/docs/source/api/generated/IPython.core.payload.rst +0 -14
  64. ipython-9.3.0/docs/source/api/generated/IPython.core.payloadpage.rst +0 -13
  65. ipython-9.3.0/docs/source/api/generated/IPython.core.prefilter.rst +0 -88
  66. ipython-9.3.0/docs/source/api/generated/IPython.core.profileapp.rst +0 -35
  67. ipython-9.3.0/docs/source/api/generated/IPython.core.profiledir.rst +0 -18
  68. ipython-9.3.0/docs/source/api/generated/IPython.core.pylabtools.rst +0 -37
  69. ipython-9.3.0/docs/source/api/generated/IPython.core.shellapp.rst +0 -20
  70. ipython-9.3.0/docs/source/api/generated/IPython.core.splitinput.rst +0 -22
  71. ipython-9.3.0/docs/source/api/generated/IPython.core.tbtools.rst +0 -40
  72. ipython-9.3.0/docs/source/api/generated/IPython.core.tips.rst +0 -13
  73. ipython-9.3.0/docs/source/api/generated/IPython.core.ultratb.rst +0 -42
  74. ipython-9.3.0/docs/source/api/generated/IPython.display.rst +0 -181
  75. ipython-9.3.0/docs/source/api/generated/IPython.lib.backgroundjobs.rst +0 -34
  76. ipython-9.3.0/docs/source/api/generated/IPython.lib.clipboard.rst +0 -29
  77. ipython-9.3.0/docs/source/api/generated/IPython.lib.deepreload.rst +0 -37
  78. ipython-9.3.0/docs/source/api/generated/IPython.lib.demo.rst +0 -53
  79. ipython-9.3.0/docs/source/api/generated/IPython.lib.editorhooks.rst +0 -43
  80. ipython-9.3.0/docs/source/api/generated/IPython.lib.guisupport.rst +0 -28
  81. ipython-9.3.0/docs/source/api/generated/IPython.lib.latextools.rst +0 -35
  82. ipython-9.3.0/docs/source/api/generated/IPython.lib.pretty.rst +0 -83
  83. ipython-9.3.0/docs/source/api/generated/IPython.paths.rst +0 -25
  84. ipython-9.3.0/docs/source/api/generated/IPython.rst +0 -19
  85. ipython-9.3.0/docs/source/api/generated/IPython.terminal.debugger.rst +0 -22
  86. ipython-9.3.0/docs/source/api/generated/IPython.terminal.embed.rst +0 -30
  87. ipython-9.3.0/docs/source/api/generated/IPython.terminal.interactiveshell.rst +0 -34
  88. ipython-9.3.0/docs/source/api/generated/IPython.terminal.ipapp.rst +0 -30
  89. ipython-9.3.0/docs/source/api/generated/IPython.terminal.magics.rst +0 -22
  90. ipython-9.3.0/docs/source/api/generated/IPython.terminal.prompts.rst +0 -24
  91. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst +0 -46
  92. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst +0 -67
  93. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.filters.rst +0 -58
  94. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.rst +0 -76
  95. ipython-9.3.0/docs/source/api/generated/IPython.testing.decorators.rst +0 -25
  96. ipython-9.3.0/docs/source/api/generated/IPython.testing.globalipapp.rst +0 -19
  97. ipython-9.3.0/docs/source/api/generated/IPython.testing.ipunittest.rst +0 -31
  98. ipython-9.3.0/docs/source/api/generated/IPython.testing.skipdoctest.rst +0 -13
  99. ipython-9.3.0/docs/source/api/generated/IPython.testing.tools.rst +0 -60
  100. ipython-9.3.0/docs/source/api/generated/IPython.utils.PyColorize.rst +0 -26
  101. ipython-9.3.0/docs/source/api/generated/IPython.utils.capture.rst +0 -28
  102. ipython-9.3.0/docs/source/api/generated/IPython.utils.coloransi.rst +0 -14
  103. ipython-9.3.0/docs/source/api/generated/IPython.utils.contexts.rst +0 -16
  104. ipython-9.3.0/docs/source/api/generated/IPython.utils.data.rst +0 -16
  105. ipython-9.3.0/docs/source/api/generated/IPython.utils.decorators.rst +0 -19
  106. ipython-9.3.0/docs/source/api/generated/IPython.utils.dir2.rst +0 -19
  107. ipython-9.3.0/docs/source/api/generated/IPython.utils.encoding.rst +0 -16
  108. ipython-9.3.0/docs/source/api/generated/IPython.utils.frame.rst +0 -22
  109. ipython-9.3.0/docs/source/api/generated/IPython.utils.generics.rst +0 -16
  110. ipython-9.3.0/docs/source/api/generated/IPython.utils.importstring.rst +0 -13
  111. ipython-9.3.0/docs/source/api/generated/IPython.utils.io.rst +0 -25
  112. ipython-9.3.0/docs/source/api/generated/IPython.utils.ipstruct.rst +0 -16
  113. ipython-9.3.0/docs/source/api/generated/IPython.utils.module_paths.rst +0 -13
  114. ipython-9.3.0/docs/source/api/generated/IPython.utils.openpy.rst +0 -22
  115. ipython-9.3.0/docs/source/api/generated/IPython.utils.path.rst +0 -56
  116. ipython-9.3.0/docs/source/api/generated/IPython.utils.process.rst +0 -23
  117. ipython-9.3.0/docs/source/api/generated/IPython.utils.sentinel.rst +0 -16
  118. ipython-9.3.0/docs/source/api/generated/IPython.utils.strdispatch.rst +0 -16
  119. ipython-9.3.0/docs/source/api/generated/IPython.utils.sysinfo.rst +0 -22
  120. ipython-9.3.0/docs/source/api/generated/IPython.utils.syspathcontext.rst +0 -16
  121. ipython-9.3.0/docs/source/api/generated/IPython.utils.tempdir.rst +0 -20
  122. ipython-9.3.0/docs/source/api/generated/IPython.utils.terminal.rst +0 -22
  123. ipython-9.3.0/docs/source/api/generated/IPython.utils.text.rst +0 -54
  124. ipython-9.3.0/docs/source/api/generated/IPython.utils.timing.rst +0 -31
  125. ipython-9.3.0/docs/source/api/generated/IPython.utils.tokenutil.rst +0 -29
  126. ipython-9.3.0/docs/source/api/generated/IPython.utils.wildcard.rst +0 -28
  127. ipython-9.3.0/docs/source/api/generated/gen.txt +0 -113
  128. ipython-9.3.0/docs/source/config/options/config-generated.txt +0 -0
  129. ipython-9.3.0/docs/source/config/options/terminal.rst +0 -2072
  130. ipython-9.3.0/docs/source/config/shortcuts/table.tsv +0 -79
  131. ipython-9.3.0/docs/source/interactive/magics-generated.txt +0 -2489
  132. {ipython-9.3.0 → ipython-9.4.0}/.flake8 +0 -0
  133. {ipython-9.3.0 → ipython-9.4.0}/.mailmap +0 -0
  134. {ipython-9.3.0 → ipython-9.4.0}/.pre-commit-config.yaml +0 -0
  135. {ipython-9.3.0 → ipython-9.4.0}/COPYING.rst +0 -0
  136. {ipython-9.3.0 → ipython-9.4.0}/IPython/__init__.py +0 -0
  137. {ipython-9.3.0 → ipython-9.4.0}/IPython/__main__.py +0 -0
  138. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/__init__.py +0 -0
  139. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/alias.py +0 -0
  140. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/application.py +0 -0
  141. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/async_helpers.py +0 -0
  142. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/autocall.py +0 -0
  143. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/builtin_trap.py +0 -0
  144. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/compilerop.py +0 -0
  145. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/completer.py +0 -0
  146. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/completerlib.py +0 -0
  147. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/crashhandler.py +0 -0
  148. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/display.py +0 -0
  149. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/display_functions.py +0 -0
  150. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/display_trap.py +0 -0
  151. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/displayhook.py +0 -0
  152. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/displaypub.py +0 -0
  153. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/doctb.py +0 -0
  154. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/error.py +0 -0
  155. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/events.py +0 -0
  156. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/extensions.py +0 -0
  157. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/formatters.py +0 -0
  158. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/getipython.py +0 -0
  159. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/guarded_eval.py +0 -0
  160. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/history.py +0 -0
  161. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/historyapp.py +0 -0
  162. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/hooks.py +0 -0
  163. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/inputtransformer2.py +0 -0
  164. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/latex_symbols.py +0 -0
  165. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/logger.py +0 -0
  166. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/macro.py +0 -0
  167. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magic.py +0 -0
  168. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magic_arguments.py +0 -0
  169. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/__init__.py +0 -0
  170. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/ast_mod.py +0 -0
  171. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/auto.py +0 -0
  172. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/basic.py +0 -0
  173. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/code.py +0 -0
  174. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/config.py +0 -0
  175. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/display.py +0 -0
  176. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/extension.py +0 -0
  177. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/history.py +0 -0
  178. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/logging.py +0 -0
  179. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/osm.py +0 -0
  180. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/packaging.py +0 -0
  181. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/magics/pylab.py +0 -0
  182. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/oinspect.py +0 -0
  183. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/page.py +0 -0
  184. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/payload.py +0 -0
  185. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/payloadpage.py +0 -0
  186. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/prefilter.py +0 -0
  187. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/profile/README_STARTUP +0 -0
  188. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/profileapp.py +0 -0
  189. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/profiledir.py +0 -0
  190. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/pylabtools.py +0 -0
  191. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/shellapp.py +0 -0
  192. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/splitinput.py +0 -0
  193. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/tbtools.py +0 -0
  194. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/tips.py +0 -0
  195. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/ultratb.py +0 -0
  196. {ipython-9.3.0 → ipython-9.4.0}/IPython/core/usage.py +0 -0
  197. {ipython-9.3.0 → ipython-9.4.0}/IPython/display.py +0 -0
  198. {ipython-9.3.0 → ipython-9.4.0}/IPython/extensions/__init__.py +0 -0
  199. {ipython-9.3.0 → ipython-9.4.0}/IPython/extensions/deduperreload/__init__.py +0 -0
  200. {ipython-9.3.0 → ipython-9.4.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
  201. {ipython-9.3.0 → ipython-9.4.0}/IPython/extensions/storemagic.py +0 -0
  202. {ipython-9.3.0 → ipython-9.4.0}/IPython/external/__init__.py +0 -0
  203. {ipython-9.3.0 → ipython-9.4.0}/IPython/external/pickleshare.py +0 -0
  204. {ipython-9.3.0 → ipython-9.4.0}/IPython/external/qt_for_kernel.py +0 -0
  205. {ipython-9.3.0 → ipython-9.4.0}/IPython/external/qt_loaders.py +0 -0
  206. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/__init__.py +0 -0
  207. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/backgroundjobs.py +0 -0
  208. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/clipboard.py +0 -0
  209. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/deepreload.py +0 -0
  210. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/demo.py +0 -0
  211. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/display.py +0 -0
  212. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/editorhooks.py +0 -0
  213. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/guisupport.py +0 -0
  214. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/latextools.py +0 -0
  215. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/lexers.py +0 -0
  216. {ipython-9.3.0 → ipython-9.4.0}/IPython/lib/pretty.py +0 -0
  217. {ipython-9.3.0 → ipython-9.4.0}/IPython/paths.py +0 -0
  218. {ipython-9.3.0 → ipython-9.4.0}/IPython/py.typed +0 -0
  219. {ipython-9.3.0 → ipython-9.4.0}/IPython/sphinxext/__init__.py +0 -0
  220. {ipython-9.3.0 → ipython-9.4.0}/IPython/sphinxext/custom_doctests.py +0 -0
  221. {ipython-9.3.0 → ipython-9.4.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  222. {ipython-9.3.0 → ipython-9.4.0}/IPython/sphinxext/ipython_directive.py +0 -0
  223. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/__init__.py +0 -0
  224. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/debugger.py +0 -0
  225. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/embed.py +0 -0
  226. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/interactiveshell.py +0 -0
  227. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/ipapp.py +0 -0
  228. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/magics.py +0 -0
  229. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/prompts.py +0 -0
  230. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  231. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  232. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  233. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  234. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  235. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  236. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  237. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  238. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  239. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  240. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  241. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/ptutils.py +0 -0
  242. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  243. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  244. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
  245. {ipython-9.3.0 → ipython-9.4.0}/IPython/terminal/shortcuts/filters.py +0 -0
  246. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/__init__.py +0 -0
  247. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/decorators.py +0 -0
  248. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/globalipapp.py +0 -0
  249. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/ipunittest.py +0 -0
  250. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/Makefile +0 -0
  251. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/__init__.py +0 -0
  252. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/dtexample.py +0 -0
  253. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  254. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  255. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/setup.py +0 -0
  256. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/simple.py +0 -0
  257. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/simplevars.py +0 -0
  258. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/test_combo.txt +0 -0
  259. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/test_example.txt +0 -0
  260. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  261. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  262. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/plugin/test_refs.py +0 -0
  263. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/skipdoctest.py +0 -0
  264. {ipython-9.3.0 → ipython-9.4.0}/IPython/testing/tools.py +0 -0
  265. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/PyColorize.py +0 -0
  266. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/__init__.py +0 -0
  267. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/_process_cli.py +0 -0
  268. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/_process_common.py +0 -0
  269. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/_process_emscripten.py +0 -0
  270. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/_process_posix.py +0 -0
  271. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/_process_win32.py +0 -0
  272. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/_process_win32_controller.py +0 -0
  273. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/capture.py +0 -0
  274. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/coloransi.py +0 -0
  275. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/contexts.py +0 -0
  276. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/data.py +0 -0
  277. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/decorators.py +0 -0
  278. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/dir2.py +0 -0
  279. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/docs.py +0 -0
  280. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/encoding.py +0 -0
  281. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/eventful.py +0 -0
  282. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/frame.py +0 -0
  283. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/generics.py +0 -0
  284. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/importstring.py +0 -0
  285. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/io.py +0 -0
  286. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/ipstruct.py +0 -0
  287. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/jsonutil.py +0 -0
  288. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/log.py +0 -0
  289. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/module_paths.py +0 -0
  290. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/openpy.py +0 -0
  291. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/path.py +0 -0
  292. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/process.py +0 -0
  293. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/py3compat.py +0 -0
  294. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/sentinel.py +0 -0
  295. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/strdispatch.py +0 -0
  296. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/sysinfo.py +0 -0
  297. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/syspathcontext.py +0 -0
  298. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/tempdir.py +0 -0
  299. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/terminal.py +0 -0
  300. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/text.py +0 -0
  301. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/timing.py +0 -0
  302. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/tokenutil.py +0 -0
  303. {ipython-9.3.0 → ipython-9.4.0}/IPython/utils/wildcard.py +0 -0
  304. {ipython-9.3.0 → ipython-9.4.0}/LICENSE +0 -0
  305. {ipython-9.3.0 → ipython-9.4.0}/MANIFEST.in +0 -0
  306. {ipython-9.3.0 → ipython-9.4.0}/README.rst +0 -0
  307. {ipython-9.3.0 → ipython-9.4.0}/_build_meta.py +0 -0
  308. {ipython-9.3.0 → ipython-9.4.0}/docs/Makefile +0 -0
  309. {ipython-9.3.0 → ipython-9.4.0}/docs/README.rst +0 -0
  310. {ipython-9.3.0 → ipython-9.4.0}/docs/autogen_api.py +0 -0
  311. {ipython-9.3.0 → ipython-9.4.0}/docs/autogen_config.py +0 -0
  312. {ipython-9.3.0 → ipython-9.4.0}/docs/autogen_magics.py +0 -0
  313. {ipython-9.3.0 → ipython-9.4.0}/docs/autogen_shortcuts.py +0 -0
  314. {ipython-9.3.0 → ipython-9.4.0}/docs/make.cmd +0 -0
  315. {ipython-9.3.0 → ipython-9.4.0}/docs/man/ipython.1 +0 -0
  316. {ipython-9.3.0 → ipython-9.4.0}/docs/requirements.txt +0 -0
  317. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/2.0/running-crop.png +0 -0
  318. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/2.0/running.png +0 -0
  319. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/2.0/treeview.png +0 -0
  320. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/2.0/user-interface.png +0 -0
  321. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/2.0/widgets.png +0 -0
  322. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  323. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  324. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  325. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  326. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  327. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  328. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  329. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  330. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  331. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  332. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  333. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/autosuggest.gif +0 -0
  334. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  335. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  336. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  337. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  338. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  339. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  340. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  341. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  342. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  343. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  344. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  345. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  346. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  347. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  348. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  349. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ms_visual_studio.png +0 -0
  350. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/notebook_specgram.png +0 -0
  351. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/ptshell_features.png +0 -0
  352. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/qtconsole.png +0 -0
  353. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  354. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_images/unicode_completion.png +0 -0
  355. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_static/favicon.ico +0 -0
  356. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_static/logo.png +0 -0
  357. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_static/theme_overrides.css +0 -0
  358. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_templates/breadcrumbs.html +0 -0
  359. {ipython-9.3.0 → ipython-9.4.0}/docs/source/_templates/notebook_redirect.html +0 -0
  360. {ipython-9.3.0 → ipython-9.4.0}/docs/source/about/history.rst +0 -0
  361. {ipython-9.3.0 → ipython-9.4.0}/docs/source/about/index.rst +0 -0
  362. {ipython-9.3.0 → ipython-9.4.0}/docs/source/about/license_and_copyright.rst +0 -0
  363. {ipython-9.3.0 → ipython-9.4.0}/docs/source/api/index.rst +0 -0
  364. {ipython-9.3.0 → ipython-9.4.0}/docs/source/conf.py +0 -0
  365. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/callbacks.rst +0 -0
  366. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/custommagics.rst +0 -0
  367. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/details.rst +0 -0
  368. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/eventloops.rst +0 -0
  369. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/extensions/autoreload.rst +0 -0
  370. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/extensions/index.rst +0 -0
  371. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/extensions/storemagic.rst +0 -0
  372. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/index.rst +0 -0
  373. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/inputtransforms.rst +0 -0
  374. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/integrating.rst +0 -0
  375. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/intro.rst +0 -0
  376. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/options/index.rst +0 -0
  377. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  378. {ipython-9.3.0 → ipython-9.4.0}/docs/source/config/shortcuts/index.rst +0 -0
  379. {ipython-9.3.0 → ipython-9.4.0}/docs/source/coredev/index.rst +0 -0
  380. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/config.rst +0 -0
  381. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/execution.rst +0 -0
  382. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  383. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  384. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/figs/other_kernels.png +0 -0
  385. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/figs/other_kernels.svg +0 -0
  386. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/how_ipython_works.rst +0 -0
  387. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/index.rst +0 -0
  388. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/inputhook_app.rst +0 -0
  389. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/kernels.rst +0 -0
  390. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/messaging.rst +0 -0
  391. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/pycompat.rst +0 -0
  392. {ipython-9.3.0 → ipython-9.4.0}/docs/source/development/wrapperkernels.rst +0 -0
  393. {ipython-9.3.0 → ipython-9.4.0}/docs/source/index.rst +0 -0
  394. {ipython-9.3.0 → ipython-9.4.0}/docs/source/install/index.rst +0 -0
  395. {ipython-9.3.0 → ipython-9.4.0}/docs/source/install/install.rst +0 -0
  396. {ipython-9.3.0 → ipython-9.4.0}/docs/source/install/kernel_install.rst +0 -0
  397. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/autoawait.rst +0 -0
  398. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/index.rst +0 -0
  399. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/magics.rst +0 -0
  400. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/plotting.rst +0 -0
  401. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  402. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/reference.rst +0 -0
  403. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/shell.rst +0 -0
  404. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/tips.rst +0 -0
  405. {ipython-9.3.0 → ipython-9.4.0}/docs/source/interactive/tutorial.rst +0 -0
  406. {ipython-9.3.0 → ipython-9.4.0}/docs/source/links.txt +0 -0
  407. {ipython-9.3.0 → ipython-9.4.0}/docs/source/overview.rst +0 -0
  408. {ipython-9.3.0 → ipython-9.4.0}/docs/source/parallel/index.rst +0 -0
  409. {ipython-9.3.0 → ipython-9.4.0}/docs/source/sphinx.toml +0 -0
  410. {ipython-9.3.0 → ipython-9.4.0}/docs/source/sphinxext.rst +0 -0
  411. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/development.rst +0 -0
  412. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  413. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  414. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  415. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  416. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  417. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  418. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  419. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  420. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  421. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  422. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  423. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/index.rst +0 -0
  424. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/pr/README.md +0 -0
  425. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  426. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  427. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version0.10.rst +0 -0
  428. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version0.11.rst +0 -0
  429. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version0.12.rst +0 -0
  430. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version0.13.rst +0 -0
  431. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version0.8.rst +0 -0
  432. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version0.9.rst +0 -0
  433. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version1.0.rst +0 -0
  434. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version2.0.rst +0 -0
  435. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version3.rst +0 -0
  436. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  437. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version4.rst +0 -0
  438. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version5.rst +0 -0
  439. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version6.rst +0 -0
  440. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version7.rst +0 -0
  441. {ipython-9.3.0 → ipython-9.4.0}/docs/source/whatsnew/version8.rst +0 -0
  442. {ipython-9.3.0 → ipython-9.4.0}/docs/sphinxext/apigen.py +0 -0
  443. {ipython-9.3.0 → ipython-9.4.0}/docs/sphinxext/configtraits.py +0 -0
  444. {ipython-9.3.0 → ipython-9.4.0}/docs/sphinxext/github.py +0 -0
  445. {ipython-9.3.0 → ipython-9.4.0}/docs/sphinxext/magics.py +0 -0
  446. {ipython-9.3.0 → ipython-9.4.0}/examples/Embedding/embed_class_long.py +0 -0
  447. {ipython-9.3.0 → ipython-9.4.0}/examples/Embedding/embed_class_short.py +0 -0
  448. {ipython-9.3.0 → ipython-9.4.0}/examples/Embedding/embed_function.py +0 -0
  449. {ipython-9.3.0 → ipython-9.4.0}/examples/Embedding/start_ipython_config.py +0 -0
  450. {ipython-9.3.0 → ipython-9.4.0}/examples/IPython Kernel/example-demo.py +0 -0
  451. {ipython-9.3.0 → ipython-9.4.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  452. {ipython-9.3.0 → ipython-9.4.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  453. {ipython-9.3.0 → ipython-9.4.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  454. {ipython-9.3.0 → ipython-9.4.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  455. {ipython-9.3.0 → ipython-9.4.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  456. {ipython-9.3.0 → ipython-9.4.0}/examples/IPython Kernel/ipython.desktop +0 -0
  457. {ipython-9.3.0 → ipython-9.4.0}/examples/auto_suggest_llm.py +0 -0
  458. {ipython-9.3.0 → ipython-9.4.0}/examples/utils/cwd_prompt.py +0 -0
  459. {ipython-9.3.0 → ipython-9.4.0}/examples/utils/list_pyfiles.ipy +0 -0
  460. {ipython-9.3.0 → ipython-9.4.0}/examples/utils/list_subdirs.ipy +0 -0
  461. {ipython-9.3.0 → ipython-9.4.0}/ipython.egg-info/dependency_links.txt +0 -0
  462. {ipython-9.3.0 → ipython-9.4.0}/ipython.egg-info/entry_points.txt +0 -0
  463. {ipython-9.3.0 → ipython-9.4.0}/ipython.egg-info/not-zip-safe +0 -0
  464. {ipython-9.3.0 → ipython-9.4.0}/ipython.egg-info/requires.txt +0 -0
  465. {ipython-9.3.0 → ipython-9.4.0}/ipython.egg-info/top_level.txt +0 -0
  466. {ipython-9.3.0 → ipython-9.4.0}/long_description.rst +0 -0
  467. {ipython-9.3.0 → ipython-9.4.0}/pyproject.toml +0 -0
  468. {ipython-9.3.0 → ipython-9.4.0}/scripts/ipython.ico +0 -0
  469. {ipython-9.3.0 → ipython-9.4.0}/scripts/ipython_nb.ico +0 -0
  470. {ipython-9.3.0 → ipython-9.4.0}/setup.cfg +0 -0
  471. {ipython-9.3.0 → ipython-9.4.0}/setup.py +0 -0
  472. {ipython-9.3.0 → ipython-9.4.0}/setupbase.py +0 -0
  473. {ipython-9.3.0 → ipython-9.4.0}/tests/2x2.jpg +0 -0
  474. {ipython-9.3.0 → ipython-9.4.0}/tests/2x2.png +0 -0
  475. {ipython-9.3.0 → ipython-9.4.0}/tests/__init__.py +0 -0
  476. {ipython-9.3.0 → ipython-9.4.0}/tests/bad_all.py +0 -0
  477. {ipython-9.3.0 → ipython-9.4.0}/tests/conftest.py +0 -0
  478. {ipython-9.3.0 → ipython-9.4.0}/tests/cve.py +0 -0
  479. {ipython-9.3.0 → ipython-9.4.0}/tests/fake_ext_dir/daft_extension.py +0 -0
  480. {ipython-9.3.0 → ipython-9.4.0}/tests/fake_llm.py +0 -0
  481. {ipython-9.3.0 → ipython-9.4.0}/tests/nonascii.py +0 -0
  482. {ipython-9.3.0 → ipython-9.4.0}/tests/nonascii2.py +0 -0
  483. {ipython-9.3.0 → ipython-9.4.0}/tests/print_argv.py +0 -0
  484. {ipython-9.3.0 → ipython-9.4.0}/tests/refbug.py +0 -0
  485. {ipython-9.3.0 → ipython-9.4.0}/tests/simpleerr.py +0 -0
  486. {ipython-9.3.0 → ipython-9.4.0}/tests/tclass.py +0 -0
  487. {ipython-9.3.0 → ipython-9.4.0}/tests/test.wav +0 -0
  488. {ipython-9.3.0 → ipython-9.4.0}/tests/test_alias.py +0 -0
  489. {ipython-9.3.0 → ipython-9.4.0}/tests/test_application.py +0 -0
  490. {ipython-9.3.0 → ipython-9.4.0}/tests/test_async_helpers.py +0 -0
  491. {ipython-9.3.0 → ipython-9.4.0}/tests/test_autocall.py +0 -0
  492. {ipython-9.3.0 → ipython-9.4.0}/tests/test_backgroundjobs.py +0 -0
  493. {ipython-9.3.0 → ipython-9.4.0}/tests/test_capture.py +0 -0
  494. {ipython-9.3.0 → ipython-9.4.0}/tests/test_clipboard.py +0 -0
  495. {ipython-9.3.0 → ipython-9.4.0}/tests/test_compilerop.py +0 -0
  496. {ipython-9.3.0 → ipython-9.4.0}/tests/test_completer.py +0 -0
  497. {ipython-9.3.0 → ipython-9.4.0}/tests/test_completerlib.py +0 -0
  498. {ipython-9.3.0 → ipython-9.4.0}/tests/test_debug_magic.py +0 -0
  499. {ipython-9.3.0 → ipython-9.4.0}/tests/test_decorators.py +0 -0
  500. {ipython-9.3.0 → ipython-9.4.0}/tests/test_decorators_2.py +0 -0
  501. {ipython-9.3.0 → ipython-9.4.0}/tests/test_deepreload.py +0 -0
  502. {ipython-9.3.0 → ipython-9.4.0}/tests/test_dir2.py +0 -0
  503. {ipython-9.3.0 → ipython-9.4.0}/tests/test_display.py +0 -0
  504. {ipython-9.3.0 → ipython-9.4.0}/tests/test_display_2.py +0 -0
  505. {ipython-9.3.0 → ipython-9.4.0}/tests/test_displayhook.py +0 -0
  506. {ipython-9.3.0 → ipython-9.4.0}/tests/test_editorhooks.py +0 -0
  507. {ipython-9.3.0 → ipython-9.4.0}/tests/test_embed.py +0 -0
  508. {ipython-9.3.0 → ipython-9.4.0}/tests/test_events.py +0 -0
  509. {ipython-9.3.0 → ipython-9.4.0}/tests/test_exceptiongroup_tb.py +0 -0
  510. {ipython-9.3.0 → ipython-9.4.0}/tests/test_extension.py +0 -0
  511. {ipython-9.3.0 → ipython-9.4.0}/tests/test_formatters.py +0 -0
  512. {ipython-9.3.0 → ipython-9.4.0}/tests/test_guarded_eval.py +0 -0
  513. {ipython-9.3.0 → ipython-9.4.0}/tests/test_handlers.py +0 -0
  514. {ipython-9.3.0 → ipython-9.4.0}/tests/test_help.py +0 -0
  515. {ipython-9.3.0 → ipython-9.4.0}/tests/test_history.py +0 -0
  516. {ipython-9.3.0 → ipython-9.4.0}/tests/test_hooks.py +0 -0
  517. {ipython-9.3.0 → ipython-9.4.0}/tests/test_imports.py +0 -0
  518. {ipython-9.3.0 → ipython-9.4.0}/tests/test_importstring.py +0 -0
  519. {ipython-9.3.0 → ipython-9.4.0}/tests/test_inputtransformer2.py +0 -0
  520. {ipython-9.3.0 → ipython-9.4.0}/tests/test_inputtransformer2_line.py +0 -0
  521. {ipython-9.3.0 → ipython-9.4.0}/tests/test_interactiveshell.py +0 -0
  522. {ipython-9.3.0 → ipython-9.4.0}/tests/test_interactivshell.py +0 -0
  523. {ipython-9.3.0 → ipython-9.4.0}/tests/test_io.py +0 -0
  524. {ipython-9.3.0 → ipython-9.4.0}/tests/test_iplib.py +0 -0
  525. {ipython-9.3.0 → ipython-9.4.0}/tests/test_ipunittest.py +0 -0
  526. {ipython-9.3.0 → ipython-9.4.0}/tests/test_latextools.py +0 -0
  527. {ipython-9.3.0 → ipython-9.4.0}/tests/test_logger.py +0 -0
  528. {ipython-9.3.0 → ipython-9.4.0}/tests/test_magic_arguments.py +0 -0
  529. {ipython-9.3.0 → ipython-9.4.0}/tests/test_magic_terminal.py +0 -0
  530. {ipython-9.3.0 → ipython-9.4.0}/tests/test_module_paths.py +0 -0
  531. {ipython-9.3.0 → ipython-9.4.0}/tests/test_oinspect.py +0 -0
  532. {ipython-9.3.0 → ipython-9.4.0}/tests/test_openpy.py +0 -0
  533. {ipython-9.3.0 → ipython-9.4.0}/tests/test_page.py +0 -0
  534. {ipython-9.3.0 → ipython-9.4.0}/tests/test_path.py +0 -0
  535. {ipython-9.3.0 → ipython-9.4.0}/tests/test_paths.py +0 -0
  536. {ipython-9.3.0 → ipython-9.4.0}/tests/test_prefilter.py +0 -0
  537. {ipython-9.3.0 → ipython-9.4.0}/tests/test_pretty.py +0 -0
  538. {ipython-9.3.0 → ipython-9.4.0}/tests/test_process.py +0 -0
  539. {ipython-9.3.0 → ipython-9.4.0}/tests/test_profile.py +0 -0
  540. {ipython-9.3.0 → ipython-9.4.0}/tests/test_pt_inputhooks.py +0 -0
  541. {ipython-9.3.0 → ipython-9.4.0}/tests/test_pycolorize.py +0 -0
  542. {ipython-9.3.0 → ipython-9.4.0}/tests/test_pylabtools.py +0 -0
  543. {ipython-9.3.0 → ipython-9.4.0}/tests/test_qt_loaders.py +0 -0
  544. {ipython-9.3.0 → ipython-9.4.0}/tests/test_run.py +0 -0
  545. {ipython-9.3.0 → ipython-9.4.0}/tests/test_shellapp.py +0 -0
  546. {ipython-9.3.0 → ipython-9.4.0}/tests/test_shortcuts.py +0 -0
  547. {ipython-9.3.0 → ipython-9.4.0}/tests/test_splitinput.py +0 -0
  548. {ipython-9.3.0 → ipython-9.4.0}/tests/test_storemagic.py +0 -0
  549. {ipython-9.3.0 → ipython-9.4.0}/tests/test_sysinfo.py +0 -0
  550. {ipython-9.3.0 → ipython-9.4.0}/tests/test_tempdir.py +0 -0
  551. {ipython-9.3.0 → ipython-9.4.0}/tests/test_text.py +0 -0
  552. {ipython-9.3.0 → ipython-9.4.0}/tests/test_tips.py +0 -0
  553. {ipython-9.3.0 → ipython-9.4.0}/tests/test_tokenutil.py +0 -0
  554. {ipython-9.3.0 → ipython-9.4.0}/tests/test_tools.py +0 -0
  555. {ipython-9.3.0 → ipython-9.4.0}/tests/test_ultratb.py +0 -0
  556. {ipython-9.3.0 → ipython-9.4.0}/tests/test_wildcard.py +0 -0
@@ -133,6 +133,7 @@ from contextlib import contextmanager
133
133
  from functools import lru_cache
134
134
 
135
135
  from IPython import get_ipython
136
+ from IPython.core.debugger_backport import PdbClosureBackport
136
137
  from IPython.utils import PyColorize
137
138
  from IPython.utils.PyColorize import TokenStream
138
139
 
@@ -140,9 +141,18 @@ from typing import TYPE_CHECKING
140
141
  from types import FrameType
141
142
 
142
143
  # We have to check this directly from sys.argv, config struct not yet available
143
- from pdb import Pdb as OldPdb
144
+ from pdb import Pdb as _OldPdb
144
145
  from pygments.token import Token
145
146
 
147
+
148
+ if sys.version_info < (3, 13):
149
+
150
+ class OldPdb(PdbClosureBackport, _OldPdb):
151
+ pass
152
+
153
+ else:
154
+ OldPdb = _OldPdb
155
+
146
156
  if TYPE_CHECKING:
147
157
  # otherwise circular import
148
158
  from IPython.core.interactiveshell import InteractiveShell
@@ -0,0 +1,206 @@
1
+ """
2
+ The code in this module is a backport of cPython changes in Pdb
3
+ that were introduced in Python 3.13 by gh-83151: Make closure work on pdb
4
+ https://github.com/python/cpython/pull/111094.
5
+ This file should be removed once IPython drops supports for Python 3.12.
6
+
7
+ The only changes are:
8
+ - reformatting by darker (black) formatter
9
+ - addition of type-ignore comments to satisfy mypy
10
+
11
+ Copyright (c) 2001 Python Software Foundation; All Rights Reserved
12
+
13
+ PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
14
+ --------------------------------------------
15
+
16
+ 1. This LICENSE AGREEMENT is between the Python Software Foundation
17
+ ("PSF"), and the Individual or Organization ("Licensee") accessing and
18
+ otherwise using this software ("Python") in source or binary form and
19
+ its associated documentation.
20
+
21
+ 2. Subject to the terms and conditions of this License Agreement, PSF hereby
22
+ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
23
+ analyze, test, perform and/or display publicly, prepare derivative works,
24
+ distribute, and otherwise use Python alone or in any derivative version,
25
+ provided, however, that PSF's License Agreement and PSF's notice of copyright,
26
+ i.e., "Copyright (c) 2001 Python Software Foundation; All Rights Reserved"
27
+ are retained in Python alone or in any derivative version prepared by Licensee.
28
+
29
+ 3. In the event Licensee prepares a derivative work that is based on
30
+ or incorporates Python or any part thereof, and wants to make
31
+ the derivative work available to others as provided herein, then
32
+ Licensee hereby agrees to include in any such work a brief summary of
33
+ the changes made to Python.
34
+
35
+ 4. PSF is making Python available to Licensee on an "AS IS"
36
+ basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
37
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
38
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
39
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
40
+ INFRINGE ANY THIRD PARTY RIGHTS.
41
+
42
+ 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
43
+ FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
44
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
45
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
46
+
47
+ 6. This License Agreement will automatically terminate upon a material
48
+ breach of its terms and conditions.
49
+
50
+ 7. Nothing in this License Agreement shall be deemed to create any
51
+ relationship of agency, partnership, or joint venture between PSF and
52
+ Licensee. This License Agreement does not grant permission to use PSF
53
+ trademarks or trade name in a trademark sense to endorse or promote
54
+ products or services of Licensee, or any third party.
55
+
56
+ 8. By copying, installing or otherwise using Python, Licensee
57
+ agrees to be bound by the terms and conditions of this License
58
+ Agreement.
59
+ """
60
+
61
+ import sys
62
+ import types
63
+ import codeop
64
+ import textwrap
65
+ from types import CodeType
66
+
67
+
68
+ class PdbClosureBackport:
69
+ def _exec_in_closure(self, source, globals, locals): # type: ignore[no-untyped-def]
70
+ """Run source code in closure so code object created within source
71
+ can find variables in locals correctly
72
+ returns True if the source is executed, False otherwise
73
+ """
74
+
75
+ # Determine if the source should be executed in closure. Only when the
76
+ # source compiled to multiple code objects, we should use this feature.
77
+ # Otherwise, we can just raise an exception and normal exec will be used.
78
+
79
+ code = compile(source, "<string>", "exec")
80
+ if not any(isinstance(const, CodeType) for const in code.co_consts):
81
+ return False
82
+
83
+ # locals could be a proxy which does not support pop
84
+ # copy it first to avoid modifying the original locals
85
+ locals_copy = dict(locals)
86
+
87
+ locals_copy["__pdb_eval__"] = {"result": None, "write_back": {}}
88
+
89
+ # If the source is an expression, we need to print its value
90
+ try:
91
+ compile(source, "<string>", "eval")
92
+ except SyntaxError:
93
+ pass
94
+ else:
95
+ source = "__pdb_eval__['result'] = " + source
96
+
97
+ # Add write-back to update the locals
98
+ source = (
99
+ "try:\n"
100
+ + textwrap.indent(source, " ")
101
+ + "\n"
102
+ + "finally:\n"
103
+ + " __pdb_eval__['write_back'] = locals()"
104
+ )
105
+
106
+ # Build a closure source code with freevars from locals like:
107
+ # def __pdb_outer():
108
+ # var = None
109
+ # def __pdb_scope(): # This is the code object we want to execute
110
+ # nonlocal var
111
+ # <source>
112
+ # return __pdb_scope.__code__
113
+ source_with_closure = (
114
+ "def __pdb_outer():\n"
115
+ + "\n".join(f" {var} = None" for var in locals_copy)
116
+ + "\n"
117
+ + " def __pdb_scope():\n"
118
+ + "\n".join(f" nonlocal {var}" for var in locals_copy)
119
+ + "\n"
120
+ + textwrap.indent(source, " ")
121
+ + "\n"
122
+ + " return __pdb_scope.__code__"
123
+ )
124
+
125
+ # Get the code object of __pdb_scope()
126
+ # The exec fills locals_copy with the __pdb_outer() function and we can call
127
+ # that to get the code object of __pdb_scope()
128
+ ns = {}
129
+ try:
130
+ exec(source_with_closure, {}, ns)
131
+ except Exception:
132
+ return False
133
+ code = ns["__pdb_outer"]()
134
+
135
+ cells = tuple(types.CellType(locals_copy.get(var)) for var in code.co_freevars)
136
+
137
+ try:
138
+ exec(code, globals, locals_copy, closure=cells)
139
+ except Exception:
140
+ return False
141
+
142
+ # get the data we need from the statement
143
+ pdb_eval = locals_copy["__pdb_eval__"]
144
+
145
+ # __pdb_eval__ should not be updated back to locals
146
+ pdb_eval["write_back"].pop("__pdb_eval__")
147
+
148
+ # Write all local variables back to locals
149
+ locals.update(pdb_eval["write_back"])
150
+ eval_result = pdb_eval["result"]
151
+ if eval_result is not None:
152
+ print(repr(eval_result))
153
+
154
+ return True
155
+
156
+ def default(self, line): # type: ignore[no-untyped-def]
157
+ if line[:1] == "!":
158
+ line = line[1:].strip()
159
+ locals = self.curframe_locals
160
+ globals = self.curframe.f_globals
161
+ try:
162
+ buffer = line
163
+ if (
164
+ code := codeop.compile_command(line + "\n", "<stdin>", "single")
165
+ ) is None:
166
+ # Multi-line mode
167
+ with self._disable_command_completion():
168
+ buffer = line
169
+ continue_prompt = "... "
170
+ while (
171
+ code := codeop.compile_command(buffer, "<stdin>", "single")
172
+ ) is None:
173
+ if self.use_rawinput:
174
+ try:
175
+ line = input(continue_prompt)
176
+ except (EOFError, KeyboardInterrupt):
177
+ self.lastcmd = ""
178
+ print("\n")
179
+ return
180
+ else:
181
+ self.stdout.write(continue_prompt)
182
+ self.stdout.flush()
183
+ line = self.stdin.readline()
184
+ if not len(line):
185
+ self.lastcmd = ""
186
+ self.stdout.write("\n")
187
+ self.stdout.flush()
188
+ return
189
+ else:
190
+ line = line.rstrip("\r\n")
191
+ buffer += "\n" + line
192
+ save_stdout = sys.stdout
193
+ save_stdin = sys.stdin
194
+ save_displayhook = sys.displayhook
195
+ try:
196
+ sys.stdin = self.stdin
197
+ sys.stdout = self.stdout
198
+ sys.displayhook = self.displayhook
199
+ if not self._exec_in_closure(buffer, globals, locals):
200
+ exec(code, globals, locals)
201
+ finally:
202
+ sys.stdout = save_stdout
203
+ sys.stdin = save_stdin
204
+ sys.displayhook = save_displayhook
205
+ except:
206
+ self._error_exc()
@@ -252,13 +252,23 @@ class ExecutionInfo:
252
252
  Stores information about what is going to happen.
253
253
  """
254
254
  raw_cell = None
255
+ transformed_cell = None
255
256
  store_history = False
256
257
  silent = False
257
258
  shell_futures = True
258
259
  cell_id = None
259
260
 
260
- def __init__(self, raw_cell, store_history, silent, shell_futures, cell_id):
261
+ def __init__(
262
+ self,
263
+ raw_cell,
264
+ store_history,
265
+ silent,
266
+ shell_futures,
267
+ cell_id,
268
+ transformed_cell=None,
269
+ ):
261
270
  self.raw_cell = raw_cell
271
+ self.transformed_cell = transformed_cell
262
272
  self.store_history = store_history
263
273
  self.silent = silent
264
274
  self.shell_futures = shell_futures
@@ -269,12 +279,18 @@ class ExecutionInfo:
269
279
  raw_cell = (
270
280
  (self.raw_cell[:50] + "..") if len(self.raw_cell) > 50 else self.raw_cell
271
281
  )
282
+ transformed_cell = (
283
+ (self.transformed_cell[:50] + "..")
284
+ if self.transformed_cell and len(self.transformed_cell) > 50
285
+ else self.transformed_cell
286
+ )
272
287
  return (
273
- '<%s object at %x, raw_cell="%s" store_history=%s silent=%s shell_futures=%s cell_id=%s>'
288
+ '<%s object at %x, raw_cell="%s" transformed_cell="%s" store_history=%s silent=%s shell_futures=%s cell_id=%s>'
274
289
  % (
275
290
  name,
276
291
  id(self),
277
292
  raw_cell,
293
+ transformed_cell,
278
294
  self.store_history,
279
295
  self.silent,
280
296
  self.shell_futures,
@@ -3156,14 +3172,18 @@ class InteractiveShell(SingletonConfigurable):
3156
3172
  except BaseException as e:
3157
3173
  try:
3158
3174
  info = ExecutionInfo(
3159
- raw_cell, store_history, silent, shell_futures, cell_id
3175
+ raw_cell,
3176
+ store_history,
3177
+ silent,
3178
+ shell_futures,
3179
+ cell_id,
3180
+ transformed_cell=transformed_cell,
3160
3181
  )
3161
3182
  result = ExecutionResult(info)
3162
3183
  result.error_in_exec = e
3163
3184
  self.showtraceback(running_compiled_code=True)
3164
3185
  except:
3165
3186
  pass
3166
-
3167
3187
  return result
3168
3188
 
3169
3189
  def should_run_async(
@@ -3248,7 +3268,14 @@ class InteractiveShell(SingletonConfigurable):
3248
3268
 
3249
3269
  .. versionadded:: 7.0
3250
3270
  """
3251
- info = ExecutionInfo(raw_cell, store_history, silent, shell_futures, cell_id)
3271
+ info = ExecutionInfo(
3272
+ raw_cell,
3273
+ store_history,
3274
+ silent,
3275
+ shell_futures,
3276
+ cell_id,
3277
+ transformed_cell=transformed_cell,
3278
+ )
3252
3279
  result = ExecutionResult(info)
3253
3280
 
3254
3281
  if (not raw_cell) or raw_cell.isspace():
@@ -20,6 +20,7 @@ import shlex
20
20
  import sys
21
21
  import time
22
22
  import timeit
23
+ import signal
23
24
  from typing import Dict, Any
24
25
  from ast import (
25
26
  Assign,
@@ -1257,8 +1258,15 @@ class ExecutionMagics(Magics):
1257
1258
  if return_result:
1258
1259
  return timeit_result
1259
1260
 
1260
- @skip_doctest
1261
1261
  @no_var_expand
1262
+ @magic_arguments.magic_arguments()
1263
+ @magic_arguments.argument(
1264
+ "--no-raise-error",
1265
+ action="store_true",
1266
+ dest="no_raise_error",
1267
+ help="If given, don't re-raise exceptions",
1268
+ )
1269
+ @skip_doctest
1262
1270
  @needs_local_scope
1263
1271
  @line_cell_magic
1264
1272
  @output_can_be_silenced
@@ -1329,9 +1337,34 @@ class ExecutionMagics(Magics):
1329
1337
  Wall time: 0.00 s
1330
1338
  Compiler : 0.78 s
1331
1339
  """
1332
- # fail immediately if the given expression can't be compiled
1340
+ line_present = False
1341
+ # Try to parse --no-raise-error if present, else ignore unrecognized args
1342
+ try:
1343
+ args = magic_arguments.parse_argstring(self.time, line)
1344
+ except UsageError as e:
1345
+ # Only ignore UsageError if caused by unrecognized arguments
1346
+ # We'll manually check for --no-raise-error and remove it from line
1347
+ line_present = True
1348
+
1349
+ # Check if --no-raise-error is present
1350
+ no_raise_error = "--no-raise-error" in line
1351
+
1352
+ if no_raise_error:
1353
+ # Remove --no-raise-error while preserving the rest of the line structure
1354
+ line = re.sub(r"\s*--no-raise-error\s*", " ", line).strip()
1355
+ # Clean up any double spaces
1356
+ line = re.sub(r"\s+", " ", line)
1357
+
1358
+ class Args:
1359
+ def __init__(self, no_raise_error):
1360
+ self.no_raise_error = no_raise_error
1361
+
1362
+ args = Args(no_raise_error)
1363
+ else:
1364
+ if not hasattr(args, "no_raise_error"):
1365
+ args.no_raise_error = False
1333
1366
 
1334
- if line and cell:
1367
+ if line_present and cell:
1335
1368
  raise UsageError("Can't use statement directly after '%%time'!")
1336
1369
 
1337
1370
  if cell:
@@ -1376,13 +1409,24 @@ class ExecutionMagics(Magics):
1376
1409
  wtime = time.time
1377
1410
  # time execution
1378
1411
  wall_st = wtime()
1412
+ # Track whether to propagate exceptions or exit
1413
+ exit_on_interrupt = False
1414
+ interrupt_occured = False
1415
+ captured_exception = None
1416
+
1379
1417
  if mode == "eval":
1380
1418
  st = clock2()
1381
1419
  try:
1382
1420
  out = eval(code, glob, local_ns)
1383
- except Exception:
1384
- self.shell.showtraceback()
1385
- return
1421
+ except KeyboardInterrupt as e:
1422
+ captured_exception = e
1423
+ interrupt_occured = True
1424
+ exit_on_interrupt = True
1425
+ except Exception as e:
1426
+ captured_exception = e
1427
+ interrupt_occured = True
1428
+ if not args.no_raise_error:
1429
+ exit_on_interrupt = True
1386
1430
  end = clock2()
1387
1431
  else:
1388
1432
  st = clock2()
@@ -1393,11 +1437,16 @@ class ExecutionMagics(Magics):
1393
1437
  if expr_val is not None:
1394
1438
  code_2 = self.shell.compile(expr_val, source, 'eval')
1395
1439
  out = eval(code_2, glob, local_ns)
1396
- except Exception:
1397
- self.shell.showtraceback()
1398
- return
1440
+ except KeyboardInterrupt as e:
1441
+ captured_exception = e
1442
+ interrupt_occured = True
1443
+ exit_on_interrupt = True
1444
+ except Exception as e:
1445
+ captured_exception = e
1446
+ interrupt_occured = True
1447
+ if not args.no_raise_error:
1448
+ exit_on_interrupt = True
1399
1449
  end = clock2()
1400
-
1401
1450
  wall_end = wtime()
1402
1451
  # Compute actual times and report
1403
1452
  wall_time = wall_end - wall_st
@@ -1416,6 +1465,10 @@ class ExecutionMagics(Magics):
1416
1465
  print(f"Compiler : {_format_time(tc)}")
1417
1466
  if tp > tp_min:
1418
1467
  print(f"Parser : {_format_time(tp)}")
1468
+ if interrupt_occured:
1469
+ if exit_on_interrupt and captured_exception:
1470
+ raise captured_exception
1471
+ return
1419
1472
  return out
1420
1473
 
1421
1474
  @skip_doctest
@@ -1514,7 +1567,7 @@ class ExecutionMagics(Magics):
1514
1567
  default="",
1515
1568
  nargs="?",
1516
1569
  help="""
1517
-
1570
+
1518
1571
  The name of the variable in which to store output.
1519
1572
  This is a ``utils.io.CapturedIO`` object with stdout/err attributes
1520
1573
  for the text of the captured output.
@@ -361,6 +361,9 @@ class NamespaceMagics(Magics):
361
361
  - For numpy arrays, a summary with shape, number of
362
362
  elements, typecode and size in memory.
363
363
 
364
+ - For objects that have shape attribute, primarily dataframe and series like
365
+ objects, will print the shape.
366
+
364
367
  - Everything else: a string representation, snipping their middle if
365
368
  too long.
366
369
 
@@ -372,11 +375,17 @@ class NamespaceMagics(Magics):
372
375
 
373
376
  In [2]: beta = 'test'
374
377
 
375
- In [3]: %whos
378
+ In [3]: df = pd.DataFrame({"a": range(10), "b": range(10,20)})
379
+
380
+ In [4]: s = df["a"]
381
+
382
+ In [5]: %whos
376
383
  Variable Type Data/Info
377
384
  --------------------------------
378
385
  alpha int 123
379
386
  beta str test
387
+ df DataFrame Shape: (10, 2)
388
+ s Series Shape: (10, )
380
389
  """
381
390
 
382
391
  varnames = self.who_ls(parameter_s)
@@ -441,9 +450,7 @@ class NamespaceMagics(Magics):
441
450
  Mb = 1048576 # kb**2
442
451
  for vname,var,vtype in zip(varnames,varlist,typelist):
443
452
  print(vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth), end=' ')
444
- if vtype in seq_types:
445
- print("n="+str(len(var)))
446
- elif vtype == ndarray_type:
453
+ if vtype == ndarray_type:
447
454
  vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
448
455
  if vtype==ndarray_type:
449
456
  # numpy
@@ -458,7 +465,14 @@ class NamespaceMagics(Magics):
458
465
  if vbytes < Mb:
459
466
  print('(%s kb)' % (vbytes/kb,))
460
467
  else:
461
- print('(%s Mb)' % (vbytes/Mb,))
468
+ print("(%s Mb)" % (vbytes / Mb,))
469
+ elif hasattr(var, "shape"):
470
+ # Useful for DataFrames and Series
471
+ # Ought to work for both pandas and polars
472
+ print(f"Shape: {var.shape}")
473
+ elif hasattr(var, "__len__"):
474
+ ## types that can be used in len function
475
+ print(var if isinstance(var, str) else f"n={len(var)}")
462
476
  else:
463
477
  try:
464
478
  vstr = str(var)
@@ -11,6 +11,7 @@ import os
11
11
  import signal
12
12
  import sys
13
13
  import time
14
+ from codecs import getincrementaldecoder
14
15
  from subprocess import CalledProcessError
15
16
  from threading import Thread
16
17
 
@@ -227,15 +228,21 @@ class ScriptMagics(Magics):
227
228
  return await stream.read(e.consumed)
228
229
 
229
230
  async def _handle_stream(stream, stream_arg, file_object):
231
+ should_break = False
232
+ decoder = getincrementaldecoder("utf-8")(errors="replace")
230
233
  while True:
231
- chunk = (await _readchunk(stream)).decode("utf8", errors="replace")
234
+ chunk = decoder.decode(await _readchunk(stream))
232
235
  if not chunk:
233
236
  break
237
+ chunk = decoder.decode("", final=True)
238
+ should_break = True
234
239
  if stream_arg:
235
240
  self.shell.user_ns[stream_arg] = chunk
236
241
  else:
237
242
  file_object.write(chunk)
238
243
  file_object.flush()
244
+ if should_break:
245
+ break
239
246
 
240
247
  async def _stream_communicate(process, cell):
241
248
  process.stdin.write(cell)
@@ -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 = 3
19
+ _version_minor = 4
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "b2"