ipython 9.3.0__tar.gz → 9.5.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.5.0}/IPython/core/completer.py +26 -6
  2. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/debugger.py +32 -2
  3. ipython-9.5.0/IPython/core/debugger_backport.py +206 -0
  4. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/guarded_eval.py +76 -22
  5. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/history.py +1 -1
  6. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/interactiveshell.py +34 -7
  7. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/basic.py +40 -3
  8. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/execution.py +64 -11
  9. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/namespace.py +15 -3
  10. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/script.py +14 -2
  11. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/release.py +1 -1
  12. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/ultratb.py +1 -4
  13. {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/autoreload.py +165 -6
  14. {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/deduperreload/deduperreload.py +56 -44
  15. {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/deduperreload/deduperreload_patching.py +15 -8
  16. {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/tests/test_deduperreload.py +75 -0
  17. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_sysinfo.py +1 -1
  18. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/text.py +5 -1
  19. {ipython-9.3.0/ipython.egg-info → ipython-9.5.0}/PKG-INFO +2 -2
  20. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version9.rst +63 -3
  21. {ipython-9.3.0 → ipython-9.5.0/ipython.egg-info}/PKG-INFO +2 -2
  22. {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/SOURCES.txt +1 -113
  23. {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/requires.txt +1 -1
  24. {ipython-9.3.0 → ipython-9.5.0}/pyproject.toml +1 -1
  25. {ipython-9.3.0 → ipython-9.5.0}/tests/test_completer.py +69 -1
  26. {ipython-9.3.0 → ipython-9.5.0}/tests/test_debugger.py +33 -6
  27. {ipython-9.3.0 → ipython-9.5.0}/tests/test_interactiveshell.py +10 -0
  28. {ipython-9.3.0 → ipython-9.5.0}/tests/test_magic.py +115 -2
  29. {ipython-9.3.0 → ipython-9.5.0}/tests/test_oinspect.py +2 -0
  30. {ipython-9.3.0 → ipython-9.5.0}/tests/test_pycolorize.py +1 -1
  31. {ipython-9.3.0 → ipython-9.5.0}/tests/test_text.py +11 -1
  32. {ipython-9.3.0 → ipython-9.5.0}/tests/test_ultratb.py +15 -0
  33. {ipython-9.3.0 → ipython-9.5.0}/tests/test_zzz_autoreload.py +445 -1
  34. ipython-9.3.0/docs/source/api/generated/IPython.core.alias.rst +0 -36
  35. ipython-9.3.0/docs/source/api/generated/IPython.core.application.rst +0 -20
  36. ipython-9.3.0/docs/source/api/generated/IPython.core.async_helpers.rst +0 -13
  37. ipython-9.3.0/docs/source/api/generated/IPython.core.autocall.rst +0 -24
  38. ipython-9.3.0/docs/source/api/generated/IPython.core.builtin_trap.rst +0 -16
  39. ipython-9.3.0/docs/source/api/generated/IPython.core.compilerop.rst +0 -22
  40. ipython-9.3.0/docs/source/api/generated/IPython.core.completer.rst +0 -107
  41. ipython-9.3.0/docs/source/api/generated/IPython.core.completerlib.rst +0 -43
  42. ipython-9.3.0/docs/source/api/generated/IPython.core.crashhandler.rst +0 -22
  43. ipython-9.3.0/docs/source/api/generated/IPython.core.debugger.rst +0 -35
  44. ipython-9.3.0/docs/source/api/generated/IPython.core.doctb.rst +0 -16
  45. ipython-9.3.0/docs/source/api/generated/IPython.core.error.rst +0 -30
  46. ipython-9.3.0/docs/source/api/generated/IPython.core.events.rst +0 -34
  47. ipython-9.3.0/docs/source/api/generated/IPython.core.extensions.rst +0 -16
  48. ipython-9.3.0/docs/source/api/generated/IPython.core.formatters.rst +0 -83
  49. ipython-9.3.0/docs/source/api/generated/IPython.core.getipython.rst +0 -13
  50. ipython-9.3.0/docs/source/api/generated/IPython.core.guarded_eval.rst +0 -34
  51. ipython-9.3.0/docs/source/api/generated/IPython.core.history.rst +0 -59
  52. ipython-9.3.0/docs/source/api/generated/IPython.core.historyapp.rst +0 -22
  53. ipython-9.3.0/docs/source/api/generated/IPython.core.hooks.rst +0 -31
  54. ipython-9.3.0/docs/source/api/generated/IPython.core.inputtransformer2.rst +0 -85
  55. ipython-9.3.0/docs/source/api/generated/IPython.core.interactiveshell.rst +0 -56
  56. ipython-9.3.0/docs/source/api/generated/IPython.core.logger.rst +0 -16
  57. ipython-9.3.0/docs/source/api/generated/IPython.core.macro.rst +0 -16
  58. ipython-9.3.0/docs/source/api/generated/IPython.core.magic.rst +0 -59
  59. ipython-9.3.0/docs/source/api/generated/IPython.core.magic_arguments.rst +0 -62
  60. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.ast_mod.rst +0 -22
  61. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.auto.rst +0 -16
  62. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.basic.rst +0 -24
  63. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.code.rst +0 -38
  64. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.config.rst +0 -16
  65. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.display.rst +0 -14
  66. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.execution.rst +0 -38
  67. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.extension.rst +0 -14
  68. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.history.rst +0 -14
  69. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.logging.rst +0 -14
  70. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.namespace.rst +0 -14
  71. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.osm.rst +0 -16
  72. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.packaging.rst +0 -20
  73. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.pylab.rst +0 -14
  74. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.rst +0 -14
  75. ipython-9.3.0/docs/source/api/generated/IPython.core.magics.script.rst +0 -26
  76. ipython-9.3.0/docs/source/api/generated/IPython.core.oinspect.rst +0 -52
  77. ipython-9.3.0/docs/source/api/generated/IPython.core.page.rst +0 -37
  78. ipython-9.3.0/docs/source/api/generated/IPython.core.payload.rst +0 -14
  79. ipython-9.3.0/docs/source/api/generated/IPython.core.payloadpage.rst +0 -13
  80. ipython-9.3.0/docs/source/api/generated/IPython.core.prefilter.rst +0 -88
  81. ipython-9.3.0/docs/source/api/generated/IPython.core.profileapp.rst +0 -35
  82. ipython-9.3.0/docs/source/api/generated/IPython.core.profiledir.rst +0 -18
  83. ipython-9.3.0/docs/source/api/generated/IPython.core.pylabtools.rst +0 -37
  84. ipython-9.3.0/docs/source/api/generated/IPython.core.shellapp.rst +0 -20
  85. ipython-9.3.0/docs/source/api/generated/IPython.core.splitinput.rst +0 -22
  86. ipython-9.3.0/docs/source/api/generated/IPython.core.tbtools.rst +0 -40
  87. ipython-9.3.0/docs/source/api/generated/IPython.core.tips.rst +0 -13
  88. ipython-9.3.0/docs/source/api/generated/IPython.core.ultratb.rst +0 -42
  89. ipython-9.3.0/docs/source/api/generated/IPython.display.rst +0 -181
  90. ipython-9.3.0/docs/source/api/generated/IPython.lib.backgroundjobs.rst +0 -34
  91. ipython-9.3.0/docs/source/api/generated/IPython.lib.clipboard.rst +0 -29
  92. ipython-9.3.0/docs/source/api/generated/IPython.lib.deepreload.rst +0 -37
  93. ipython-9.3.0/docs/source/api/generated/IPython.lib.demo.rst +0 -53
  94. ipython-9.3.0/docs/source/api/generated/IPython.lib.editorhooks.rst +0 -43
  95. ipython-9.3.0/docs/source/api/generated/IPython.lib.guisupport.rst +0 -28
  96. ipython-9.3.0/docs/source/api/generated/IPython.lib.latextools.rst +0 -35
  97. ipython-9.3.0/docs/source/api/generated/IPython.lib.pretty.rst +0 -83
  98. ipython-9.3.0/docs/source/api/generated/IPython.paths.rst +0 -25
  99. ipython-9.3.0/docs/source/api/generated/IPython.rst +0 -19
  100. ipython-9.3.0/docs/source/api/generated/IPython.terminal.debugger.rst +0 -22
  101. ipython-9.3.0/docs/source/api/generated/IPython.terminal.embed.rst +0 -30
  102. ipython-9.3.0/docs/source/api/generated/IPython.terminal.interactiveshell.rst +0 -34
  103. ipython-9.3.0/docs/source/api/generated/IPython.terminal.ipapp.rst +0 -30
  104. ipython-9.3.0/docs/source/api/generated/IPython.terminal.magics.rst +0 -22
  105. ipython-9.3.0/docs/source/api/generated/IPython.terminal.prompts.rst +0 -24
  106. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst +0 -46
  107. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst +0 -67
  108. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.filters.rst +0 -58
  109. ipython-9.3.0/docs/source/api/generated/IPython.terminal.shortcuts.rst +0 -76
  110. ipython-9.3.0/docs/source/api/generated/IPython.testing.decorators.rst +0 -25
  111. ipython-9.3.0/docs/source/api/generated/IPython.testing.globalipapp.rst +0 -19
  112. ipython-9.3.0/docs/source/api/generated/IPython.testing.ipunittest.rst +0 -31
  113. ipython-9.3.0/docs/source/api/generated/IPython.testing.skipdoctest.rst +0 -13
  114. ipython-9.3.0/docs/source/api/generated/IPython.testing.tools.rst +0 -60
  115. ipython-9.3.0/docs/source/api/generated/IPython.utils.PyColorize.rst +0 -26
  116. ipython-9.3.0/docs/source/api/generated/IPython.utils.capture.rst +0 -28
  117. ipython-9.3.0/docs/source/api/generated/IPython.utils.coloransi.rst +0 -14
  118. ipython-9.3.0/docs/source/api/generated/IPython.utils.contexts.rst +0 -16
  119. ipython-9.3.0/docs/source/api/generated/IPython.utils.data.rst +0 -16
  120. ipython-9.3.0/docs/source/api/generated/IPython.utils.decorators.rst +0 -19
  121. ipython-9.3.0/docs/source/api/generated/IPython.utils.dir2.rst +0 -19
  122. ipython-9.3.0/docs/source/api/generated/IPython.utils.encoding.rst +0 -16
  123. ipython-9.3.0/docs/source/api/generated/IPython.utils.frame.rst +0 -22
  124. ipython-9.3.0/docs/source/api/generated/IPython.utils.generics.rst +0 -16
  125. ipython-9.3.0/docs/source/api/generated/IPython.utils.importstring.rst +0 -13
  126. ipython-9.3.0/docs/source/api/generated/IPython.utils.io.rst +0 -25
  127. ipython-9.3.0/docs/source/api/generated/IPython.utils.ipstruct.rst +0 -16
  128. ipython-9.3.0/docs/source/api/generated/IPython.utils.module_paths.rst +0 -13
  129. ipython-9.3.0/docs/source/api/generated/IPython.utils.openpy.rst +0 -22
  130. ipython-9.3.0/docs/source/api/generated/IPython.utils.path.rst +0 -56
  131. ipython-9.3.0/docs/source/api/generated/IPython.utils.process.rst +0 -23
  132. ipython-9.3.0/docs/source/api/generated/IPython.utils.sentinel.rst +0 -16
  133. ipython-9.3.0/docs/source/api/generated/IPython.utils.strdispatch.rst +0 -16
  134. ipython-9.3.0/docs/source/api/generated/IPython.utils.sysinfo.rst +0 -22
  135. ipython-9.3.0/docs/source/api/generated/IPython.utils.syspathcontext.rst +0 -16
  136. ipython-9.3.0/docs/source/api/generated/IPython.utils.tempdir.rst +0 -20
  137. ipython-9.3.0/docs/source/api/generated/IPython.utils.terminal.rst +0 -22
  138. ipython-9.3.0/docs/source/api/generated/IPython.utils.text.rst +0 -54
  139. ipython-9.3.0/docs/source/api/generated/IPython.utils.timing.rst +0 -31
  140. ipython-9.3.0/docs/source/api/generated/IPython.utils.tokenutil.rst +0 -29
  141. ipython-9.3.0/docs/source/api/generated/IPython.utils.wildcard.rst +0 -28
  142. ipython-9.3.0/docs/source/api/generated/gen.txt +0 -113
  143. ipython-9.3.0/docs/source/config/options/config-generated.txt +0 -0
  144. ipython-9.3.0/docs/source/config/options/terminal.rst +0 -2072
  145. ipython-9.3.0/docs/source/config/shortcuts/table.tsv +0 -79
  146. ipython-9.3.0/docs/source/interactive/magics-generated.txt +0 -2489
  147. {ipython-9.3.0 → ipython-9.5.0}/.flake8 +0 -0
  148. {ipython-9.3.0 → ipython-9.5.0}/.mailmap +0 -0
  149. {ipython-9.3.0 → ipython-9.5.0}/.pre-commit-config.yaml +0 -0
  150. {ipython-9.3.0 → ipython-9.5.0}/COPYING.rst +0 -0
  151. {ipython-9.3.0 → ipython-9.5.0}/IPython/__init__.py +0 -0
  152. {ipython-9.3.0 → ipython-9.5.0}/IPython/__main__.py +0 -0
  153. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/__init__.py +0 -0
  154. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/alias.py +0 -0
  155. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/application.py +0 -0
  156. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/async_helpers.py +0 -0
  157. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/autocall.py +0 -0
  158. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/builtin_trap.py +0 -0
  159. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/compilerop.py +0 -0
  160. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/completerlib.py +0 -0
  161. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/crashhandler.py +0 -0
  162. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/display.py +0 -0
  163. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/display_functions.py +0 -0
  164. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/display_trap.py +0 -0
  165. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/displayhook.py +0 -0
  166. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/displaypub.py +0 -0
  167. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/doctb.py +0 -0
  168. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/error.py +0 -0
  169. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/events.py +0 -0
  170. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/extensions.py +0 -0
  171. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/formatters.py +0 -0
  172. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/getipython.py +0 -0
  173. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/historyapp.py +0 -0
  174. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/hooks.py +0 -0
  175. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/inputtransformer2.py +0 -0
  176. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/latex_symbols.py +0 -0
  177. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/logger.py +0 -0
  178. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/macro.py +0 -0
  179. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magic.py +0 -0
  180. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magic_arguments.py +0 -0
  181. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/__init__.py +0 -0
  182. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/ast_mod.py +0 -0
  183. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/auto.py +0 -0
  184. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/code.py +0 -0
  185. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/config.py +0 -0
  186. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/display.py +0 -0
  187. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/extension.py +0 -0
  188. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/history.py +0 -0
  189. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/logging.py +0 -0
  190. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/osm.py +0 -0
  191. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/packaging.py +0 -0
  192. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/magics/pylab.py +0 -0
  193. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/oinspect.py +0 -0
  194. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/page.py +0 -0
  195. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/payload.py +0 -0
  196. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/payloadpage.py +0 -0
  197. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/prefilter.py +0 -0
  198. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/profile/README_STARTUP +0 -0
  199. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/profileapp.py +0 -0
  200. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/profiledir.py +0 -0
  201. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/pylabtools.py +0 -0
  202. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/shellapp.py +0 -0
  203. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/splitinput.py +0 -0
  204. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/tbtools.py +0 -0
  205. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/tips.py +0 -0
  206. {ipython-9.3.0 → ipython-9.5.0}/IPython/core/usage.py +0 -0
  207. {ipython-9.3.0 → ipython-9.5.0}/IPython/display.py +0 -0
  208. {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/__init__.py +0 -0
  209. {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/deduperreload/__init__.py +0 -0
  210. {ipython-9.3.0 → ipython-9.5.0}/IPython/extensions/storemagic.py +0 -0
  211. {ipython-9.3.0 → ipython-9.5.0}/IPython/external/__init__.py +0 -0
  212. {ipython-9.3.0 → ipython-9.5.0}/IPython/external/pickleshare.py +0 -0
  213. {ipython-9.3.0 → ipython-9.5.0}/IPython/external/qt_for_kernel.py +0 -0
  214. {ipython-9.3.0 → ipython-9.5.0}/IPython/external/qt_loaders.py +0 -0
  215. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/__init__.py +0 -0
  216. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/backgroundjobs.py +0 -0
  217. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/clipboard.py +0 -0
  218. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/deepreload.py +0 -0
  219. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/demo.py +0 -0
  220. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/display.py +0 -0
  221. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/editorhooks.py +0 -0
  222. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/guisupport.py +0 -0
  223. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/latextools.py +0 -0
  224. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/lexers.py +0 -0
  225. {ipython-9.3.0 → ipython-9.5.0}/IPython/lib/pretty.py +0 -0
  226. {ipython-9.3.0 → ipython-9.5.0}/IPython/paths.py +0 -0
  227. {ipython-9.3.0 → ipython-9.5.0}/IPython/py.typed +0 -0
  228. {ipython-9.3.0 → ipython-9.5.0}/IPython/sphinxext/__init__.py +0 -0
  229. {ipython-9.3.0 → ipython-9.5.0}/IPython/sphinxext/custom_doctests.py +0 -0
  230. {ipython-9.3.0 → ipython-9.5.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  231. {ipython-9.3.0 → ipython-9.5.0}/IPython/sphinxext/ipython_directive.py +0 -0
  232. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/__init__.py +0 -0
  233. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/debugger.py +0 -0
  234. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/embed.py +0 -0
  235. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/interactiveshell.py +0 -0
  236. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/ipapp.py +0 -0
  237. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/magics.py +0 -0
  238. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/prompts.py +0 -0
  239. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  240. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  241. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  242. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  243. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  244. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  245. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  246. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  247. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  248. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  249. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  250. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/ptutils.py +0 -0
  251. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  252. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  253. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/shortcuts/auto_suggest.py +0 -0
  254. {ipython-9.3.0 → ipython-9.5.0}/IPython/terminal/shortcuts/filters.py +0 -0
  255. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/__init__.py +0 -0
  256. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/decorators.py +0 -0
  257. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/globalipapp.py +0 -0
  258. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/ipunittest.py +0 -0
  259. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/Makefile +0 -0
  260. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/__init__.py +0 -0
  261. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/dtexample.py +0 -0
  262. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  263. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  264. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/setup.py +0 -0
  265. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/simple.py +0 -0
  266. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/simplevars.py +0 -0
  267. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_combo.txt +0 -0
  268. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_example.txt +0 -0
  269. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  270. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  271. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/plugin/test_refs.py +0 -0
  272. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/skipdoctest.py +0 -0
  273. {ipython-9.3.0 → ipython-9.5.0}/IPython/testing/tools.py +0 -0
  274. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/PyColorize.py +0 -0
  275. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/__init__.py +0 -0
  276. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_cli.py +0 -0
  277. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_common.py +0 -0
  278. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_emscripten.py +0 -0
  279. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_posix.py +0 -0
  280. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_win32.py +0 -0
  281. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/_process_win32_controller.py +0 -0
  282. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/capture.py +0 -0
  283. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/coloransi.py +0 -0
  284. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/contexts.py +0 -0
  285. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/data.py +0 -0
  286. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/decorators.py +0 -0
  287. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/dir2.py +0 -0
  288. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/docs.py +0 -0
  289. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/encoding.py +0 -0
  290. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/eventful.py +0 -0
  291. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/frame.py +0 -0
  292. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/generics.py +0 -0
  293. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/importstring.py +0 -0
  294. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/io.py +0 -0
  295. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/ipstruct.py +0 -0
  296. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/jsonutil.py +0 -0
  297. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/log.py +0 -0
  298. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/module_paths.py +0 -0
  299. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/openpy.py +0 -0
  300. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/path.py +0 -0
  301. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/process.py +0 -0
  302. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/py3compat.py +0 -0
  303. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/sentinel.py +0 -0
  304. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/strdispatch.py +0 -0
  305. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/sysinfo.py +0 -0
  306. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/syspathcontext.py +0 -0
  307. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/tempdir.py +0 -0
  308. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/terminal.py +0 -0
  309. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/timing.py +0 -0
  310. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/tokenutil.py +0 -0
  311. {ipython-9.3.0 → ipython-9.5.0}/IPython/utils/wildcard.py +0 -0
  312. {ipython-9.3.0 → ipython-9.5.0}/LICENSE +0 -0
  313. {ipython-9.3.0 → ipython-9.5.0}/MANIFEST.in +0 -0
  314. {ipython-9.3.0 → ipython-9.5.0}/README.rst +0 -0
  315. {ipython-9.3.0 → ipython-9.5.0}/_build_meta.py +0 -0
  316. {ipython-9.3.0 → ipython-9.5.0}/docs/Makefile +0 -0
  317. {ipython-9.3.0 → ipython-9.5.0}/docs/README.rst +0 -0
  318. {ipython-9.3.0 → ipython-9.5.0}/docs/autogen_api.py +0 -0
  319. {ipython-9.3.0 → ipython-9.5.0}/docs/autogen_config.py +0 -0
  320. {ipython-9.3.0 → ipython-9.5.0}/docs/autogen_magics.py +0 -0
  321. {ipython-9.3.0 → ipython-9.5.0}/docs/autogen_shortcuts.py +0 -0
  322. {ipython-9.3.0 → ipython-9.5.0}/docs/make.cmd +0 -0
  323. {ipython-9.3.0 → ipython-9.5.0}/docs/man/ipython.1 +0 -0
  324. {ipython-9.3.0 → ipython-9.5.0}/docs/requirements.txt +0 -0
  325. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/running-crop.png +0 -0
  326. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/running.png +0 -0
  327. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/treeview.png +0 -0
  328. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/user-interface.png +0 -0
  329. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/2.0/widgets.png +0 -0
  330. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  331. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  332. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  333. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  334. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  335. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  336. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  337. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  338. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  339. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  340. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  341. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/autosuggest.gif +0 -0
  342. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  343. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  344. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  345. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  346. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  347. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  348. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  349. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  350. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  351. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  352. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  353. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  354. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  355. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  356. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  357. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ms_visual_studio.png +0 -0
  358. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/notebook_specgram.png +0 -0
  359. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/ptshell_features.png +0 -0
  360. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/qtconsole.png +0 -0
  361. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  362. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_images/unicode_completion.png +0 -0
  363. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_static/favicon.ico +0 -0
  364. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_static/logo.png +0 -0
  365. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_static/theme_overrides.css +0 -0
  366. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_templates/breadcrumbs.html +0 -0
  367. {ipython-9.3.0 → ipython-9.5.0}/docs/source/_templates/notebook_redirect.html +0 -0
  368. {ipython-9.3.0 → ipython-9.5.0}/docs/source/about/history.rst +0 -0
  369. {ipython-9.3.0 → ipython-9.5.0}/docs/source/about/index.rst +0 -0
  370. {ipython-9.3.0 → ipython-9.5.0}/docs/source/about/license_and_copyright.rst +0 -0
  371. {ipython-9.3.0 → ipython-9.5.0}/docs/source/api/index.rst +0 -0
  372. {ipython-9.3.0 → ipython-9.5.0}/docs/source/conf.py +0 -0
  373. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/callbacks.rst +0 -0
  374. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/custommagics.rst +0 -0
  375. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/details.rst +0 -0
  376. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/eventloops.rst +0 -0
  377. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/extensions/autoreload.rst +0 -0
  378. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/extensions/index.rst +0 -0
  379. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/extensions/storemagic.rst +0 -0
  380. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/index.rst +0 -0
  381. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/inputtransforms.rst +0 -0
  382. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/integrating.rst +0 -0
  383. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/intro.rst +0 -0
  384. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/options/index.rst +0 -0
  385. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  386. {ipython-9.3.0 → ipython-9.5.0}/docs/source/config/shortcuts/index.rst +0 -0
  387. {ipython-9.3.0 → ipython-9.5.0}/docs/source/coredev/index.rst +0 -0
  388. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/config.rst +0 -0
  389. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/execution.rst +0 -0
  390. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  391. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  392. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/figs/other_kernels.png +0 -0
  393. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/figs/other_kernels.svg +0 -0
  394. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/how_ipython_works.rst +0 -0
  395. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/index.rst +0 -0
  396. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/inputhook_app.rst +0 -0
  397. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/kernels.rst +0 -0
  398. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/messaging.rst +0 -0
  399. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/pycompat.rst +0 -0
  400. {ipython-9.3.0 → ipython-9.5.0}/docs/source/development/wrapperkernels.rst +0 -0
  401. {ipython-9.3.0 → ipython-9.5.0}/docs/source/index.rst +0 -0
  402. {ipython-9.3.0 → ipython-9.5.0}/docs/source/install/index.rst +0 -0
  403. {ipython-9.3.0 → ipython-9.5.0}/docs/source/install/install.rst +0 -0
  404. {ipython-9.3.0 → ipython-9.5.0}/docs/source/install/kernel_install.rst +0 -0
  405. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/autoawait.rst +0 -0
  406. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/index.rst +0 -0
  407. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/magics.rst +0 -0
  408. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/plotting.rst +0 -0
  409. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  410. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/reference.rst +0 -0
  411. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/shell.rst +0 -0
  412. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/tips.rst +0 -0
  413. {ipython-9.3.0 → ipython-9.5.0}/docs/source/interactive/tutorial.rst +0 -0
  414. {ipython-9.3.0 → ipython-9.5.0}/docs/source/links.txt +0 -0
  415. {ipython-9.3.0 → ipython-9.5.0}/docs/source/overview.rst +0 -0
  416. {ipython-9.3.0 → ipython-9.5.0}/docs/source/parallel/index.rst +0 -0
  417. {ipython-9.3.0 → ipython-9.5.0}/docs/source/sphinx.toml +0 -0
  418. {ipython-9.3.0 → ipython-9.5.0}/docs/source/sphinxext.rst +0 -0
  419. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/development.rst +0 -0
  420. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  421. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  422. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  423. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  424. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  425. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  426. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  427. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  428. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  429. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  430. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  431. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/index.rst +0 -0
  432. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/pr/README.md +0 -0
  433. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  434. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  435. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.10.rst +0 -0
  436. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.11.rst +0 -0
  437. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.12.rst +0 -0
  438. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.13.rst +0 -0
  439. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.8.rst +0 -0
  440. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version0.9.rst +0 -0
  441. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version1.0.rst +0 -0
  442. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version2.0.rst +0 -0
  443. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version3.rst +0 -0
  444. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  445. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version4.rst +0 -0
  446. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version5.rst +0 -0
  447. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version6.rst +0 -0
  448. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version7.rst +0 -0
  449. {ipython-9.3.0 → ipython-9.5.0}/docs/source/whatsnew/version8.rst +0 -0
  450. {ipython-9.3.0 → ipython-9.5.0}/docs/sphinxext/apigen.py +0 -0
  451. {ipython-9.3.0 → ipython-9.5.0}/docs/sphinxext/configtraits.py +0 -0
  452. {ipython-9.3.0 → ipython-9.5.0}/docs/sphinxext/github.py +0 -0
  453. {ipython-9.3.0 → ipython-9.5.0}/docs/sphinxext/magics.py +0 -0
  454. {ipython-9.3.0 → ipython-9.5.0}/examples/Embedding/embed_class_long.py +0 -0
  455. {ipython-9.3.0 → ipython-9.5.0}/examples/Embedding/embed_class_short.py +0 -0
  456. {ipython-9.3.0 → ipython-9.5.0}/examples/Embedding/embed_function.py +0 -0
  457. {ipython-9.3.0 → ipython-9.5.0}/examples/Embedding/start_ipython_config.py +0 -0
  458. {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/example-demo.py +0 -0
  459. {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  460. {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  461. {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  462. {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  463. {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  464. {ipython-9.3.0 → ipython-9.5.0}/examples/IPython Kernel/ipython.desktop +0 -0
  465. {ipython-9.3.0 → ipython-9.5.0}/examples/auto_suggest_llm.py +0 -0
  466. {ipython-9.3.0 → ipython-9.5.0}/examples/utils/cwd_prompt.py +0 -0
  467. {ipython-9.3.0 → ipython-9.5.0}/examples/utils/list_pyfiles.ipy +0 -0
  468. {ipython-9.3.0 → ipython-9.5.0}/examples/utils/list_subdirs.ipy +0 -0
  469. {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/dependency_links.txt +0 -0
  470. {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/entry_points.txt +0 -0
  471. {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/not-zip-safe +0 -0
  472. {ipython-9.3.0 → ipython-9.5.0}/ipython.egg-info/top_level.txt +0 -0
  473. {ipython-9.3.0 → ipython-9.5.0}/long_description.rst +0 -0
  474. {ipython-9.3.0 → ipython-9.5.0}/scripts/ipython.ico +0 -0
  475. {ipython-9.3.0 → ipython-9.5.0}/scripts/ipython_nb.ico +0 -0
  476. {ipython-9.3.0 → ipython-9.5.0}/setup.cfg +0 -0
  477. {ipython-9.3.0 → ipython-9.5.0}/setup.py +0 -0
  478. {ipython-9.3.0 → ipython-9.5.0}/setupbase.py +0 -0
  479. {ipython-9.3.0 → ipython-9.5.0}/tests/2x2.jpg +0 -0
  480. {ipython-9.3.0 → ipython-9.5.0}/tests/2x2.png +0 -0
  481. {ipython-9.3.0 → ipython-9.5.0}/tests/__init__.py +0 -0
  482. {ipython-9.3.0 → ipython-9.5.0}/tests/bad_all.py +0 -0
  483. {ipython-9.3.0 → ipython-9.5.0}/tests/conftest.py +0 -0
  484. {ipython-9.3.0 → ipython-9.5.0}/tests/cve.py +0 -0
  485. {ipython-9.3.0 → ipython-9.5.0}/tests/fake_ext_dir/daft_extension.py +0 -0
  486. {ipython-9.3.0 → ipython-9.5.0}/tests/fake_llm.py +0 -0
  487. {ipython-9.3.0 → ipython-9.5.0}/tests/nonascii.py +0 -0
  488. {ipython-9.3.0 → ipython-9.5.0}/tests/nonascii2.py +0 -0
  489. {ipython-9.3.0 → ipython-9.5.0}/tests/print_argv.py +0 -0
  490. {ipython-9.3.0 → ipython-9.5.0}/tests/refbug.py +0 -0
  491. {ipython-9.3.0 → ipython-9.5.0}/tests/simpleerr.py +0 -0
  492. {ipython-9.3.0 → ipython-9.5.0}/tests/tclass.py +0 -0
  493. {ipython-9.3.0 → ipython-9.5.0}/tests/test.wav +0 -0
  494. {ipython-9.3.0 → ipython-9.5.0}/tests/test_alias.py +0 -0
  495. {ipython-9.3.0 → ipython-9.5.0}/tests/test_application.py +0 -0
  496. {ipython-9.3.0 → ipython-9.5.0}/tests/test_async_helpers.py +0 -0
  497. {ipython-9.3.0 → ipython-9.5.0}/tests/test_autocall.py +0 -0
  498. {ipython-9.3.0 → ipython-9.5.0}/tests/test_backgroundjobs.py +0 -0
  499. {ipython-9.3.0 → ipython-9.5.0}/tests/test_capture.py +0 -0
  500. {ipython-9.3.0 → ipython-9.5.0}/tests/test_clipboard.py +0 -0
  501. {ipython-9.3.0 → ipython-9.5.0}/tests/test_compilerop.py +0 -0
  502. {ipython-9.3.0 → ipython-9.5.0}/tests/test_completerlib.py +0 -0
  503. {ipython-9.3.0 → ipython-9.5.0}/tests/test_debug_magic.py +0 -0
  504. {ipython-9.3.0 → ipython-9.5.0}/tests/test_decorators.py +0 -0
  505. {ipython-9.3.0 → ipython-9.5.0}/tests/test_decorators_2.py +0 -0
  506. {ipython-9.3.0 → ipython-9.5.0}/tests/test_deepreload.py +0 -0
  507. {ipython-9.3.0 → ipython-9.5.0}/tests/test_dir2.py +0 -0
  508. {ipython-9.3.0 → ipython-9.5.0}/tests/test_display.py +0 -0
  509. {ipython-9.3.0 → ipython-9.5.0}/tests/test_display_2.py +0 -0
  510. {ipython-9.3.0 → ipython-9.5.0}/tests/test_displayhook.py +0 -0
  511. {ipython-9.3.0 → ipython-9.5.0}/tests/test_editorhooks.py +0 -0
  512. {ipython-9.3.0 → ipython-9.5.0}/tests/test_embed.py +0 -0
  513. {ipython-9.3.0 → ipython-9.5.0}/tests/test_events.py +0 -0
  514. {ipython-9.3.0 → ipython-9.5.0}/tests/test_exceptiongroup_tb.py +0 -0
  515. {ipython-9.3.0 → ipython-9.5.0}/tests/test_extension.py +0 -0
  516. {ipython-9.3.0 → ipython-9.5.0}/tests/test_formatters.py +0 -0
  517. {ipython-9.3.0 → ipython-9.5.0}/tests/test_guarded_eval.py +0 -0
  518. {ipython-9.3.0 → ipython-9.5.0}/tests/test_handlers.py +0 -0
  519. {ipython-9.3.0 → ipython-9.5.0}/tests/test_help.py +0 -0
  520. {ipython-9.3.0 → ipython-9.5.0}/tests/test_history.py +0 -0
  521. {ipython-9.3.0 → ipython-9.5.0}/tests/test_hooks.py +0 -0
  522. {ipython-9.3.0 → ipython-9.5.0}/tests/test_imports.py +0 -0
  523. {ipython-9.3.0 → ipython-9.5.0}/tests/test_importstring.py +0 -0
  524. {ipython-9.3.0 → ipython-9.5.0}/tests/test_inputtransformer2.py +0 -0
  525. {ipython-9.3.0 → ipython-9.5.0}/tests/test_inputtransformer2_line.py +0 -0
  526. {ipython-9.3.0 → ipython-9.5.0}/tests/test_interactivshell.py +0 -0
  527. {ipython-9.3.0 → ipython-9.5.0}/tests/test_io.py +0 -0
  528. {ipython-9.3.0 → ipython-9.5.0}/tests/test_iplib.py +0 -0
  529. {ipython-9.3.0 → ipython-9.5.0}/tests/test_ipunittest.py +0 -0
  530. {ipython-9.3.0 → ipython-9.5.0}/tests/test_latextools.py +0 -0
  531. {ipython-9.3.0 → ipython-9.5.0}/tests/test_logger.py +0 -0
  532. {ipython-9.3.0 → ipython-9.5.0}/tests/test_magic_arguments.py +0 -0
  533. {ipython-9.3.0 → ipython-9.5.0}/tests/test_magic_terminal.py +0 -0
  534. {ipython-9.3.0 → ipython-9.5.0}/tests/test_module_paths.py +0 -0
  535. {ipython-9.3.0 → ipython-9.5.0}/tests/test_openpy.py +0 -0
  536. {ipython-9.3.0 → ipython-9.5.0}/tests/test_page.py +0 -0
  537. {ipython-9.3.0 → ipython-9.5.0}/tests/test_path.py +0 -0
  538. {ipython-9.3.0 → ipython-9.5.0}/tests/test_paths.py +0 -0
  539. {ipython-9.3.0 → ipython-9.5.0}/tests/test_prefilter.py +0 -0
  540. {ipython-9.3.0 → ipython-9.5.0}/tests/test_pretty.py +0 -0
  541. {ipython-9.3.0 → ipython-9.5.0}/tests/test_process.py +0 -0
  542. {ipython-9.3.0 → ipython-9.5.0}/tests/test_profile.py +0 -0
  543. {ipython-9.3.0 → ipython-9.5.0}/tests/test_pt_inputhooks.py +0 -0
  544. {ipython-9.3.0 → ipython-9.5.0}/tests/test_pylabtools.py +0 -0
  545. {ipython-9.3.0 → ipython-9.5.0}/tests/test_qt_loaders.py +0 -0
  546. {ipython-9.3.0 → ipython-9.5.0}/tests/test_run.py +0 -0
  547. {ipython-9.3.0 → ipython-9.5.0}/tests/test_shellapp.py +0 -0
  548. {ipython-9.3.0 → ipython-9.5.0}/tests/test_shortcuts.py +0 -0
  549. {ipython-9.3.0 → ipython-9.5.0}/tests/test_splitinput.py +0 -0
  550. {ipython-9.3.0 → ipython-9.5.0}/tests/test_storemagic.py +0 -0
  551. {ipython-9.3.0 → ipython-9.5.0}/tests/test_sysinfo.py +0 -0
  552. {ipython-9.3.0 → ipython-9.5.0}/tests/test_tempdir.py +0 -0
  553. {ipython-9.3.0 → ipython-9.5.0}/tests/test_tips.py +0 -0
  554. {ipython-9.3.0 → ipython-9.5.0}/tests/test_tokenutil.py +0 -0
  555. {ipython-9.3.0 → ipython-9.5.0}/tests/test_tools.py +0 -0
  556. {ipython-9.3.0 → ipython-9.5.0}/tests/test_wildcard.py +0 -0
@@ -213,7 +213,11 @@ from typing import (
213
213
  Literal,
214
214
  )
215
215
 
216
- from IPython.core.guarded_eval import guarded_eval, EvaluationContext
216
+ from IPython.core.guarded_eval import (
217
+ guarded_eval,
218
+ EvaluationContext,
219
+ _validate_policy_overrides,
220
+ )
217
221
  from IPython.core.error import TryNext
218
222
  from IPython.core.inputtransformer2 import ESC_MAGIC
219
223
  from IPython.core.latex_symbols import latex_symbols, reverse_latex_symbol
@@ -222,7 +226,6 @@ from IPython.utils import generics
222
226
  from IPython.utils.PyColorize import theme_table
223
227
  from IPython.utils.decorators import sphinx_options
224
228
  from IPython.utils.dir2 import dir2, get_real_method
225
- from IPython.utils.docs import GENERATING_DOCUMENTATION
226
229
  from IPython.utils.path import ensure_dir_exists
227
230
  from IPython.utils.process import arg_split
228
231
  from traitlets import (
@@ -953,7 +956,6 @@ class CompletionSplitter:
953
956
  return self._delim_re.split(cut_line)[-1]
954
957
 
955
958
 
956
-
957
959
  class Completer(Configurable):
958
960
 
959
961
  greedy = Bool(
@@ -1045,6 +1047,18 @@ class Completer(Configurable):
1045
1047
  """,
1046
1048
  ).tag(config=True)
1047
1049
 
1050
+ @observe("evaluation")
1051
+ def _evaluation_changed(self, _change):
1052
+ _validate_policy_overrides(
1053
+ policy_name=self.evaluation, policy_overrides=self.policy_overrides
1054
+ )
1055
+
1056
+ @observe("policy_overrides")
1057
+ def _policy_overrides_changed(self, _change):
1058
+ _validate_policy_overrides(
1059
+ policy_name=self.evaluation, policy_overrides=self.policy_overrides
1060
+ )
1061
+
1048
1062
  auto_import_method = DottedObjectName(
1049
1063
  default_value="importlib.import_module",
1050
1064
  allow_none=True,
@@ -1313,14 +1327,19 @@ class Completer(Configurable):
1313
1327
  ),
1314
1328
  )
1315
1329
  done = True
1316
- except Exception as e:
1317
- if self.debug:
1318
- print("Evaluation exception", e)
1330
+ except (SyntaxError, TypeError):
1331
+ # TypeError can show up with something like `+ d`
1332
+ # where `d` is a dictionary.
1333
+
1319
1334
  # trim the expression to remove any invalid prefix
1320
1335
  # e.g. user starts `(d[`, so we get `expr = '(d'`,
1321
1336
  # where parenthesis is not closed.
1322
1337
  # TODO: make this faster by reusing parts of the computation?
1323
1338
  expr = self._trim_expr(expr)
1339
+ except Exception as e:
1340
+ if self.debug:
1341
+ print("Evaluation exception", e)
1342
+ done = True
1324
1343
  return obj
1325
1344
 
1326
1345
  @property
@@ -1331,6 +1350,7 @@ class Completer(Configurable):
1331
1350
  self._auto_import_func = import_item(self.auto_import_method)
1332
1351
  return self._auto_import_func
1333
1352
 
1353
+
1334
1354
  def get__all__entries(obj):
1335
1355
  """returns the strings in the __all__ attribute"""
1336
1356
  try:
@@ -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
@@ -343,6 +353,26 @@ class Pdb(OldPdb):
343
353
  self.initial_frame = frame
344
354
  return super().set_trace(frame)
345
355
 
356
+ def get_stack(self, *args, **kwargs):
357
+ stack, pos = super().get_stack(*args, **kwargs)
358
+ if len(stack) >= 0 and self._is_internal_frame(stack[0][0]):
359
+ stack.pop(0)
360
+ pos -= 1
361
+ return stack, pos
362
+
363
+ def _is_internal_frame(self, frame):
364
+ """Determine if this frame should be skipped as internal"""
365
+ filename = frame.f_code.co_filename
366
+
367
+ # Skip bdb.py runcall and internal operations
368
+ if filename.endswith("bdb.py"):
369
+ func_name = frame.f_code.co_name
370
+ # Skip internal bdb operations but allow breakpoint hits
371
+ if func_name in ("runcall", "run", "runeval"):
372
+ return True
373
+
374
+ return False
375
+
346
376
  def _hidden_predicate(self, frame):
347
377
  """
348
378
  Given a frame return whether it it should be hidden or not by IPython.
@@ -744,7 +774,7 @@ class Pdb(OldPdb):
744
774
  bp,
745
775
  (Token.LinenoEm, num),
746
776
  (Token, " "),
747
- # TODO: invsetigate Toke.Line here
777
+ # TODO: investigate Token.Line here
748
778
  (Token, colored_line),
749
779
  ]
750
780
  )
@@ -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()
@@ -1,5 +1,5 @@
1
1
  from copy import copy
2
- from inspect import isclass, signature, Signature
2
+ from inspect import isclass, signature, Signature, getmodule
3
3
  from typing import (
4
4
  Annotated,
5
5
  AnyStr,
@@ -21,6 +21,7 @@ import builtins
21
21
  import collections
22
22
  import operator
23
23
  import sys
24
+ import warnings
24
25
  from functools import cached_property
25
26
  from dataclasses import dataclass, field
26
27
  from types import MethodDescriptorType, ModuleType
@@ -122,14 +123,24 @@ class EvaluationPolicy:
122
123
  def _get_external(module_name: str, access_path: Sequence[str]):
123
124
  """Get value from external module given a dotted access path.
124
125
 
126
+ Only gets value if the module is already imported.
127
+
125
128
  Raises:
126
129
  * `KeyError` if module is removed not found, and
127
130
  * `AttributeError` if access path does not match an exported object
128
131
  """
129
- member_type = sys.modules[module_name]
130
- for attr in access_path:
131
- member_type = getattr(member_type, attr)
132
- return member_type
132
+ try:
133
+ member_type = sys.modules[module_name]
134
+ # standard module
135
+ for attr in access_path:
136
+ member_type = getattr(member_type, attr)
137
+ return member_type
138
+ except (KeyError, AttributeError):
139
+ # handle modules in namespace packages
140
+ module_path = ".".join([module_name, *access_path])
141
+ if module_path in sys.modules:
142
+ return sys.modules[module_path]
143
+ raise
133
144
 
134
145
 
135
146
  def _has_original_dunder_external(
@@ -139,18 +150,26 @@ def _has_original_dunder_external(
139
150
  method_name: str,
140
151
  ):
141
152
  if module_name not in sys.modules:
142
- # LBYLB as it is faster
143
- return False
153
+ full_module_path = ".".join([module_name, *access_path])
154
+ if full_module_path not in sys.modules:
155
+ # LBYLB as it is faster
156
+ return False
144
157
  try:
145
158
  member_type = _get_external(module_name, access_path)
146
159
  value_type = type(value)
147
160
  if type(value) == member_type:
148
161
  return True
162
+ if isinstance(member_type, ModuleType):
163
+ value_module = getmodule(value_type)
164
+ if not value_module or not value_module.__name__:
165
+ return False
166
+ if value_module.__name__.startswith(member_type.__name__):
167
+ return True
149
168
  if method_name == "__getattribute__":
150
169
  # we have to short-circuit here due to an unresolved issue in
151
170
  # `isinstance` implementation: https://bugs.python.org/issue32683
152
171
  return False
153
- if isinstance(value, member_type):
172
+ if not isinstance(member_type, ModuleType) and isinstance(value, member_type):
154
173
  method = getattr(value_type, method_name, None)
155
174
  member_method = getattr(member_type, method_name, None)
156
175
  if member_method == method:
@@ -185,35 +204,47 @@ def _has_original_dunder(
185
204
  return False
186
205
 
187
206
 
207
+ def _coerce_path_to_tuples(
208
+ allow_list: set[tuple[str, ...] | str],
209
+ ) -> set[tuple[str, ...]]:
210
+ """Replace dotted paths on the provided allow-list with tuples."""
211
+ return {
212
+ path if isinstance(path, tuple) else tuple(path.split("."))
213
+ for path in allow_list
214
+ }
215
+
216
+
188
217
  @undoc
189
218
  @dataclass
190
219
  class SelectivePolicy(EvaluationPolicy):
191
220
  allowed_getitem: set[InstancesHaveGetItem] = field(default_factory=set)
192
- allowed_getitem_external: set[tuple[str, ...]] = field(default_factory=set)
221
+ allowed_getitem_external: set[tuple[str, ...] | str] = field(default_factory=set)
193
222
 
194
223
  allowed_getattr: set[MayHaveGetattr] = field(default_factory=set)
195
- allowed_getattr_external: set[tuple[str, ...]] = field(default_factory=set)
224
+ allowed_getattr_external: set[tuple[str, ...] | str] = field(default_factory=set)
196
225
 
197
226
  allowed_operations: set = field(default_factory=set)
198
- allowed_operations_external: set[tuple[str, ...]] = field(default_factory=set)
227
+ allowed_operations_external: set[tuple[str, ...] | str] = field(default_factory=set)
199
228
 
200
229
  _operation_methods_cache: dict[str, set[Callable]] = field(
201
230
  default_factory=dict, init=False
202
231
  )
203
232
 
204
233
  def can_get_attr(self, value, attr):
234
+ allowed_getattr_external = _coerce_path_to_tuples(self.allowed_getattr_external)
235
+
205
236
  has_original_attribute = _has_original_dunder(
206
237
  value,
207
238
  allowed_types=self.allowed_getattr,
208
239
  allowed_methods=self._getattribute_methods,
209
- allowed_external=self.allowed_getattr_external,
240
+ allowed_external=allowed_getattr_external,
210
241
  method_name="__getattribute__",
211
242
  )
212
243
  has_original_attr = _has_original_dunder(
213
244
  value,
214
245
  allowed_types=self.allowed_getattr,
215
246
  allowed_methods=self._getattr_methods,
216
- allowed_external=self.allowed_getattr_external,
247
+ allowed_external=allowed_getattr_external,
217
248
  method_name="__getattr__",
218
249
  )
219
250
 
@@ -245,7 +276,7 @@ class SelectivePolicy(EvaluationPolicy):
245
276
  return True # pragma: no cover
246
277
 
247
278
  # Properties in subclasses of allowed types may be ok if not changed
248
- for module_name, *access_path in self.allowed_getattr_external:
279
+ for module_name, *access_path in allowed_getattr_external:
249
280
  try:
250
281
  external_class = _get_external(module_name, access_path)
251
282
  external_class_attr_val = getattr(external_class, attr)
@@ -257,15 +288,19 @@ class SelectivePolicy(EvaluationPolicy):
257
288
 
258
289
  def can_get_item(self, value, item):
259
290
  """Allow accessing `__getiitem__` of allow-listed instances unless it was not modified."""
291
+ allowed_getitem_external = _coerce_path_to_tuples(self.allowed_getitem_external)
260
292
  return _has_original_dunder(
261
293
  value,
262
294
  allowed_types=self.allowed_getitem,
263
295
  allowed_methods=self._getitem_methods,
264
- allowed_external=self.allowed_getitem_external,
296
+ allowed_external=allowed_getitem_external,
265
297
  method_name="__getitem__",
266
298
  )
267
299
 
268
300
  def can_operate(self, dunders: tuple[str, ...], a, b=None):
301
+ allowed_operations_external = _coerce_path_to_tuples(
302
+ self.allowed_operations_external
303
+ )
269
304
  objects = [a]
270
305
  if b is not None:
271
306
  objects.append(b)
@@ -275,7 +310,7 @@ class SelectivePolicy(EvaluationPolicy):
275
310
  obj,
276
311
  allowed_types=self.allowed_operations,
277
312
  allowed_methods=self._operator_dunder_methods(dunder),
278
- allowed_external=self.allowed_operations_external,
313
+ allowed_external=allowed_operations_external,
279
314
  method_name=dunder,
280
315
  )
281
316
  for dunder in dunders
@@ -315,15 +350,16 @@ class _DummyNamedTuple(NamedTuple):
315
350
  """Used internally to retrieve methods of named tuple instance."""
316
351
 
317
352
 
353
+ EvaluationPolicyName = Literal["forbidden", "minimal", "limited", "unsafe", "dangerous"]
354
+
355
+
318
356
  class EvaluationContext(NamedTuple):
319
357
  #: Local namespace
320
358
  locals: dict
321
359
  #: Global namespace
322
360
  globals: dict
323
361
  #: Evaluation policy identifier
324
- evaluation: Literal["forbidden", "minimal", "limited", "unsafe", "dangerous"] = (
325
- "forbidden"
326
- )
362
+ evaluation: EvaluationPolicyName = "forbidden"
327
363
  #: Whether the evaluation of code takes place inside of a subscript.
328
364
  #: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``.
329
365
  in_subscript: bool = False
@@ -470,11 +506,24 @@ def get_policy(context: EvaluationContext) -> EvaluationPolicy:
470
506
  for key, value in context.policy_overrides.items():
471
507
  if hasattr(policy, key):
472
508
  setattr(policy, key, value)
473
- else:
474
- print(f"Incorrect policy override key: {key}")
475
509
  return policy
476
510
 
477
511
 
512
+ def _validate_policy_overrides(
513
+ policy_name: EvaluationPolicyName, policy_overrides: dict
514
+ ) -> bool:
515
+ policy = EVALUATION_POLICIES[policy_name]
516
+
517
+ all_good = True
518
+ for key, value in policy_overrides.items():
519
+ if not hasattr(policy, key):
520
+ warnings.warn(
521
+ f"Override {key!r} is not valid with {policy_name!r} evaluation policy"
522
+ )
523
+ all_good = False
524
+ return all_good
525
+
526
+
478
527
  def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
479
528
  """Evaluate AST node in provided context.
480
529
 
@@ -586,7 +635,12 @@ def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
586
635
  dunders = _find_dunder(node.op, UNARY_OP_DUNDERS)
587
636
  if dunders:
588
637
  if policy.can_operate(dunders, value):
589
- return getattr(value, dunders[0])()
638
+ try:
639
+ return getattr(value, dunders[0])()
640
+ except AttributeError:
641
+ raise TypeError(
642
+ f"bad operand type for unary {node.op}: {type(value)}"
643
+ )
590
644
  else:
591
645
  raise GuardRejection(
592
646
  f"Operation (`{dunders}`) for",
@@ -590,7 +590,7 @@ class HistoryOutput:
590
590
  output_type: typing.Literal[
591
591
  "out_stream", "err_stream", "display_data", "execute_result"
592
592
  ]
593
- bundle: typing.Dict[str, str]
593
+ bundle: typing.Dict[str, str | list[str]]
594
594
 
595
595
 
596
596
  class HistoryManager(HistoryAccessor):
@@ -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,
@@ -3047,11 +3063,11 @@ class InteractiveShell(SingletonConfigurable):
3047
3063
  output_stream = outputs[-1]
3048
3064
  if output_stream is None:
3049
3065
  output_stream = HistoryOutput(
3050
- output_type=output_type, bundle={"stream": ""}
3066
+ output_type=output_type, bundle={"stream": []}
3051
3067
  )
3052
3068
  outputs_by_counter[execution_count].append(output_stream)
3053
3069
 
3054
- output_stream.bundle["stream"] += data # Append to existing stream
3070
+ output_stream.bundle["stream"].append(data) # Append to existing stream
3055
3071
  return result
3056
3072
 
3057
3073
  stream.write = write
@@ -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():