ipython 9.2.0__tar.gz → 9.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/completer.py +93 -7
  2. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/guarded_eval.py +23 -8
  3. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/interactiveshell.py +12 -10
  4. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/release.py +1 -1
  5. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/interactiveshell.py +8 -5
  6. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/shortcuts/auto_suggest.py +22 -9
  7. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/_sysinfo.py +1 -1
  8. {ipython-9.2.0/ipython.egg-info → ipython-9.3.0}/PKG-INFO +1 -1
  9. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.guarded_eval.rst +4 -1
  10. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/options/terminal.rst +61 -5
  11. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/magics-generated.txt +4 -8
  12. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version8.rst +10 -0
  13. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version9.rst +28 -0
  14. {ipython-9.2.0 → ipython-9.3.0}/examples/auto_suggest_llm.py +2 -2
  15. {ipython-9.2.0 → ipython-9.3.0/ipython.egg-info}/PKG-INFO +1 -1
  16. {ipython-9.2.0 → ipython-9.3.0}/ipython.egg-info/SOURCES.txt +0 -1
  17. {ipython-9.2.0 → ipython-9.3.0}/pyproject.toml +10 -2
  18. {ipython-9.2.0 → ipython-9.3.0}/tests/fake_llm.py +15 -1
  19. {ipython-9.2.0 → ipython-9.3.0}/tests/test_completer.py +61 -1
  20. {ipython-9.2.0 → ipython-9.3.0}/tests/test_guarded_eval.py +25 -0
  21. {ipython-9.2.0 → ipython-9.3.0}/tests/test_shortcuts.py +12 -0
  22. ipython-9.2.0/docs/source/.jupyter/desktop-workspaces/default-37a8.jupyterlab-workspace +0 -1
  23. {ipython-9.2.0 → ipython-9.3.0}/.flake8 +0 -0
  24. {ipython-9.2.0 → ipython-9.3.0}/.mailmap +0 -0
  25. {ipython-9.2.0 → ipython-9.3.0}/.pre-commit-config.yaml +0 -0
  26. {ipython-9.2.0 → ipython-9.3.0}/COPYING.rst +0 -0
  27. {ipython-9.2.0 → ipython-9.3.0}/IPython/__init__.py +0 -0
  28. {ipython-9.2.0 → ipython-9.3.0}/IPython/__main__.py +0 -0
  29. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/__init__.py +0 -0
  30. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/alias.py +0 -0
  31. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/application.py +0 -0
  32. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/async_helpers.py +0 -0
  33. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/autocall.py +0 -0
  34. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/builtin_trap.py +0 -0
  35. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/compilerop.py +0 -0
  36. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/completerlib.py +0 -0
  37. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/crashhandler.py +0 -0
  38. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/debugger.py +0 -0
  39. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/display.py +0 -0
  40. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/display_functions.py +0 -0
  41. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/display_trap.py +0 -0
  42. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/displayhook.py +0 -0
  43. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/displaypub.py +0 -0
  44. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/doctb.py +0 -0
  45. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/error.py +0 -0
  46. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/events.py +0 -0
  47. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/extensions.py +0 -0
  48. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/formatters.py +0 -0
  49. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/getipython.py +0 -0
  50. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/history.py +0 -0
  51. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/historyapp.py +0 -0
  52. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/hooks.py +0 -0
  53. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/inputtransformer2.py +0 -0
  54. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/latex_symbols.py +0 -0
  55. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/logger.py +0 -0
  56. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/macro.py +0 -0
  57. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magic.py +0 -0
  58. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magic_arguments.py +0 -0
  59. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/__init__.py +0 -0
  60. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/ast_mod.py +0 -0
  61. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/auto.py +0 -0
  62. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/basic.py +0 -0
  63. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/code.py +0 -0
  64. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/config.py +0 -0
  65. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/display.py +0 -0
  66. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/execution.py +0 -0
  67. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/extension.py +0 -0
  68. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/history.py +0 -0
  69. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/logging.py +0 -0
  70. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/namespace.py +0 -0
  71. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/osm.py +0 -0
  72. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/packaging.py +0 -0
  73. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/pylab.py +0 -0
  74. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/magics/script.py +0 -0
  75. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/oinspect.py +0 -0
  76. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/page.py +0 -0
  77. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/payload.py +0 -0
  78. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/payloadpage.py +0 -0
  79. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/prefilter.py +0 -0
  80. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/profile/README_STARTUP +0 -0
  81. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/profileapp.py +0 -0
  82. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/profiledir.py +0 -0
  83. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/pylabtools.py +0 -0
  84. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/shellapp.py +0 -0
  85. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/splitinput.py +0 -0
  86. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/tbtools.py +0 -0
  87. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/tips.py +0 -0
  88. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/ultratb.py +0 -0
  89. {ipython-9.2.0 → ipython-9.3.0}/IPython/core/usage.py +0 -0
  90. {ipython-9.2.0 → ipython-9.3.0}/IPython/display.py +0 -0
  91. {ipython-9.2.0 → ipython-9.3.0}/IPython/extensions/__init__.py +0 -0
  92. {ipython-9.2.0 → ipython-9.3.0}/IPython/extensions/autoreload.py +0 -0
  93. {ipython-9.2.0 → ipython-9.3.0}/IPython/extensions/deduperreload/__init__.py +0 -0
  94. {ipython-9.2.0 → ipython-9.3.0}/IPython/extensions/deduperreload/deduperreload.py +0 -0
  95. {ipython-9.2.0 → ipython-9.3.0}/IPython/extensions/deduperreload/deduperreload_patching.py +0 -0
  96. {ipython-9.2.0 → ipython-9.3.0}/IPython/extensions/storemagic.py +0 -0
  97. {ipython-9.2.0 → ipython-9.3.0}/IPython/extensions/tests/test_deduperreload.py +0 -0
  98. {ipython-9.2.0 → ipython-9.3.0}/IPython/external/__init__.py +0 -0
  99. {ipython-9.2.0 → ipython-9.3.0}/IPython/external/pickleshare.py +0 -0
  100. {ipython-9.2.0 → ipython-9.3.0}/IPython/external/qt_for_kernel.py +0 -0
  101. {ipython-9.2.0 → ipython-9.3.0}/IPython/external/qt_loaders.py +0 -0
  102. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/__init__.py +0 -0
  103. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/backgroundjobs.py +0 -0
  104. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/clipboard.py +0 -0
  105. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/deepreload.py +0 -0
  106. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/demo.py +0 -0
  107. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/display.py +0 -0
  108. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/editorhooks.py +0 -0
  109. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/guisupport.py +0 -0
  110. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/latextools.py +0 -0
  111. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/lexers.py +0 -0
  112. {ipython-9.2.0 → ipython-9.3.0}/IPython/lib/pretty.py +0 -0
  113. {ipython-9.2.0 → ipython-9.3.0}/IPython/paths.py +0 -0
  114. {ipython-9.2.0 → ipython-9.3.0}/IPython/py.typed +0 -0
  115. {ipython-9.2.0 → ipython-9.3.0}/IPython/sphinxext/__init__.py +0 -0
  116. {ipython-9.2.0 → ipython-9.3.0}/IPython/sphinxext/custom_doctests.py +0 -0
  117. {ipython-9.2.0 → ipython-9.3.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  118. {ipython-9.2.0 → ipython-9.3.0}/IPython/sphinxext/ipython_directive.py +0 -0
  119. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/__init__.py +0 -0
  120. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/debugger.py +0 -0
  121. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/embed.py +0 -0
  122. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/ipapp.py +0 -0
  123. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/magics.py +0 -0
  124. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/prompts.py +0 -0
  125. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  126. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  127. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  128. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  129. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  130. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  131. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  132. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  133. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  134. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  135. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  136. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/ptutils.py +0 -0
  137. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  138. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  139. {ipython-9.2.0 → ipython-9.3.0}/IPython/terminal/shortcuts/filters.py +0 -0
  140. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/__init__.py +0 -0
  141. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/decorators.py +0 -0
  142. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/globalipapp.py +0 -0
  143. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/ipunittest.py +0 -0
  144. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/Makefile +0 -0
  145. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/__init__.py +0 -0
  146. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/dtexample.py +0 -0
  147. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  148. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  149. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/setup.py +0 -0
  150. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/simple.py +0 -0
  151. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/simplevars.py +0 -0
  152. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/test_combo.txt +0 -0
  153. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/test_example.txt +0 -0
  154. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  155. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  156. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/plugin/test_refs.py +0 -0
  157. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/skipdoctest.py +0 -0
  158. {ipython-9.2.0 → ipython-9.3.0}/IPython/testing/tools.py +0 -0
  159. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/PyColorize.py +0 -0
  160. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/__init__.py +0 -0
  161. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/_process_cli.py +0 -0
  162. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/_process_common.py +0 -0
  163. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/_process_emscripten.py +0 -0
  164. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/_process_posix.py +0 -0
  165. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/_process_win32.py +0 -0
  166. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/_process_win32_controller.py +0 -0
  167. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/capture.py +0 -0
  168. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/coloransi.py +0 -0
  169. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/contexts.py +0 -0
  170. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/data.py +0 -0
  171. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/decorators.py +0 -0
  172. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/dir2.py +0 -0
  173. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/docs.py +0 -0
  174. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/encoding.py +0 -0
  175. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/eventful.py +0 -0
  176. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/frame.py +0 -0
  177. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/generics.py +0 -0
  178. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/importstring.py +0 -0
  179. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/io.py +0 -0
  180. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/ipstruct.py +0 -0
  181. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/jsonutil.py +0 -0
  182. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/log.py +0 -0
  183. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/module_paths.py +0 -0
  184. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/openpy.py +0 -0
  185. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/path.py +0 -0
  186. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/process.py +0 -0
  187. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/py3compat.py +0 -0
  188. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/sentinel.py +0 -0
  189. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/strdispatch.py +0 -0
  190. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/sysinfo.py +0 -0
  191. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/syspathcontext.py +0 -0
  192. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/tempdir.py +0 -0
  193. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/terminal.py +0 -0
  194. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/text.py +0 -0
  195. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/timing.py +0 -0
  196. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/tokenutil.py +0 -0
  197. {ipython-9.2.0 → ipython-9.3.0}/IPython/utils/wildcard.py +0 -0
  198. {ipython-9.2.0 → ipython-9.3.0}/LICENSE +0 -0
  199. {ipython-9.2.0 → ipython-9.3.0}/MANIFEST.in +0 -0
  200. {ipython-9.2.0 → ipython-9.3.0}/README.rst +0 -0
  201. {ipython-9.2.0 → ipython-9.3.0}/_build_meta.py +0 -0
  202. {ipython-9.2.0 → ipython-9.3.0}/docs/Makefile +0 -0
  203. {ipython-9.2.0 → ipython-9.3.0}/docs/README.rst +0 -0
  204. {ipython-9.2.0 → ipython-9.3.0}/docs/autogen_api.py +0 -0
  205. {ipython-9.2.0 → ipython-9.3.0}/docs/autogen_config.py +0 -0
  206. {ipython-9.2.0 → ipython-9.3.0}/docs/autogen_magics.py +0 -0
  207. {ipython-9.2.0 → ipython-9.3.0}/docs/autogen_shortcuts.py +0 -0
  208. {ipython-9.2.0 → ipython-9.3.0}/docs/make.cmd +0 -0
  209. {ipython-9.2.0 → ipython-9.3.0}/docs/man/ipython.1 +0 -0
  210. {ipython-9.2.0 → ipython-9.3.0}/docs/requirements.txt +0 -0
  211. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/2.0/running-crop.png +0 -0
  212. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/2.0/running.png +0 -0
  213. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/2.0/treeview.png +0 -0
  214. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/2.0/user-interface.png +0 -0
  215. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/2.0/widgets.png +0 -0
  216. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  217. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  218. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  219. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  220. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  221. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  222. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  223. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  224. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  225. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  226. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  227. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/autosuggest.gif +0 -0
  228. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  229. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  230. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  231. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  232. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  233. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  234. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  235. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  236. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  237. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  238. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  239. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  240. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  241. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  242. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  243. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ms_visual_studio.png +0 -0
  244. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/notebook_specgram.png +0 -0
  245. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/ptshell_features.png +0 -0
  246. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/qtconsole.png +0 -0
  247. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  248. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_images/unicode_completion.png +0 -0
  249. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_static/favicon.ico +0 -0
  250. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_static/logo.png +0 -0
  251. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_static/theme_overrides.css +0 -0
  252. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_templates/breadcrumbs.html +0 -0
  253. {ipython-9.2.0 → ipython-9.3.0}/docs/source/_templates/notebook_redirect.html +0 -0
  254. {ipython-9.2.0 → ipython-9.3.0}/docs/source/about/history.rst +0 -0
  255. {ipython-9.2.0 → ipython-9.3.0}/docs/source/about/index.rst +0 -0
  256. {ipython-9.2.0 → ipython-9.3.0}/docs/source/about/license_and_copyright.rst +0 -0
  257. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.alias.rst +0 -0
  258. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.application.rst +0 -0
  259. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.async_helpers.rst +0 -0
  260. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.autocall.rst +0 -0
  261. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.builtin_trap.rst +0 -0
  262. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.compilerop.rst +0 -0
  263. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.completer.rst +0 -0
  264. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.completerlib.rst +0 -0
  265. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.crashhandler.rst +0 -0
  266. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.debugger.rst +0 -0
  267. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.doctb.rst +0 -0
  268. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.error.rst +0 -0
  269. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.events.rst +0 -0
  270. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.extensions.rst +0 -0
  271. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.formatters.rst +0 -0
  272. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.getipython.rst +0 -0
  273. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.history.rst +0 -0
  274. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.historyapp.rst +0 -0
  275. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.hooks.rst +0 -0
  276. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.inputtransformer2.rst +0 -0
  277. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.interactiveshell.rst +0 -0
  278. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.logger.rst +0 -0
  279. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.macro.rst +0 -0
  280. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magic.rst +0 -0
  281. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magic_arguments.rst +0 -0
  282. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.ast_mod.rst +0 -0
  283. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.auto.rst +0 -0
  284. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.basic.rst +0 -0
  285. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.code.rst +0 -0
  286. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.config.rst +0 -0
  287. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.display.rst +0 -0
  288. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.execution.rst +0 -0
  289. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.extension.rst +0 -0
  290. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.history.rst +0 -0
  291. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.logging.rst +0 -0
  292. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.namespace.rst +0 -0
  293. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.osm.rst +0 -0
  294. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.packaging.rst +0 -0
  295. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.pylab.rst +0 -0
  296. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.rst +0 -0
  297. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.magics.script.rst +0 -0
  298. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.oinspect.rst +0 -0
  299. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.page.rst +0 -0
  300. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.payload.rst +0 -0
  301. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.payloadpage.rst +0 -0
  302. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.prefilter.rst +0 -0
  303. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.profileapp.rst +0 -0
  304. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.profiledir.rst +0 -0
  305. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.pylabtools.rst +0 -0
  306. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.shellapp.rst +0 -0
  307. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.splitinput.rst +0 -0
  308. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.tbtools.rst +0 -0
  309. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.tips.rst +0 -0
  310. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.core.ultratb.rst +0 -0
  311. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.display.rst +0 -0
  312. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.lib.backgroundjobs.rst +0 -0
  313. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.lib.clipboard.rst +0 -0
  314. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.lib.deepreload.rst +0 -0
  315. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.lib.demo.rst +0 -0
  316. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.lib.editorhooks.rst +0 -0
  317. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.lib.guisupport.rst +0 -0
  318. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.lib.latextools.rst +0 -0
  319. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.lib.pretty.rst +0 -0
  320. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.paths.rst +0 -0
  321. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.rst +0 -0
  322. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.debugger.rst +0 -0
  323. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.embed.rst +0 -0
  324. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.interactiveshell.rst +0 -0
  325. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.ipapp.rst +0 -0
  326. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.magics.rst +0 -0
  327. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.prompts.rst +0 -0
  328. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst +0 -0
  329. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst +0 -0
  330. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.shortcuts.filters.rst +0 -0
  331. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.terminal.shortcuts.rst +0 -0
  332. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.testing.decorators.rst +0 -0
  333. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.testing.globalipapp.rst +0 -0
  334. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.testing.ipunittest.rst +0 -0
  335. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.testing.skipdoctest.rst +0 -0
  336. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.testing.tools.rst +0 -0
  337. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.PyColorize.rst +0 -0
  338. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.capture.rst +0 -0
  339. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.coloransi.rst +0 -0
  340. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.contexts.rst +0 -0
  341. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.data.rst +0 -0
  342. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.decorators.rst +0 -0
  343. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.dir2.rst +0 -0
  344. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.encoding.rst +0 -0
  345. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.frame.rst +0 -0
  346. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.generics.rst +0 -0
  347. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.importstring.rst +0 -0
  348. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.io.rst +0 -0
  349. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.ipstruct.rst +0 -0
  350. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.module_paths.rst +0 -0
  351. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.openpy.rst +0 -0
  352. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.path.rst +0 -0
  353. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.process.rst +0 -0
  354. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.sentinel.rst +0 -0
  355. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.strdispatch.rst +0 -0
  356. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.sysinfo.rst +0 -0
  357. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.syspathcontext.rst +0 -0
  358. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.tempdir.rst +0 -0
  359. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.terminal.rst +0 -0
  360. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.text.rst +0 -0
  361. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.timing.rst +0 -0
  362. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.tokenutil.rst +0 -0
  363. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/IPython.utils.wildcard.rst +0 -0
  364. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/generated/gen.txt +0 -0
  365. {ipython-9.2.0 → ipython-9.3.0}/docs/source/api/index.rst +0 -0
  366. {ipython-9.2.0 → ipython-9.3.0}/docs/source/conf.py +0 -0
  367. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/callbacks.rst +0 -0
  368. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/custommagics.rst +0 -0
  369. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/details.rst +0 -0
  370. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/eventloops.rst +0 -0
  371. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/extensions/autoreload.rst +0 -0
  372. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/extensions/index.rst +0 -0
  373. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/extensions/storemagic.rst +0 -0
  374. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/index.rst +0 -0
  375. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/inputtransforms.rst +0 -0
  376. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/integrating.rst +0 -0
  377. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/intro.rst +0 -0
  378. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/options/config-generated.txt +0 -0
  379. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/options/index.rst +0 -0
  380. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  381. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/shortcuts/index.rst +0 -0
  382. {ipython-9.2.0 → ipython-9.3.0}/docs/source/config/shortcuts/table.tsv +0 -0
  383. {ipython-9.2.0 → ipython-9.3.0}/docs/source/coredev/index.rst +0 -0
  384. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/config.rst +0 -0
  385. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/execution.rst +0 -0
  386. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  387. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  388. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/figs/other_kernels.png +0 -0
  389. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/figs/other_kernels.svg +0 -0
  390. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/how_ipython_works.rst +0 -0
  391. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/index.rst +0 -0
  392. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/inputhook_app.rst +0 -0
  393. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/kernels.rst +0 -0
  394. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/messaging.rst +0 -0
  395. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/pycompat.rst +0 -0
  396. {ipython-9.2.0 → ipython-9.3.0}/docs/source/development/wrapperkernels.rst +0 -0
  397. {ipython-9.2.0 → ipython-9.3.0}/docs/source/index.rst +0 -0
  398. {ipython-9.2.0 → ipython-9.3.0}/docs/source/install/index.rst +0 -0
  399. {ipython-9.2.0 → ipython-9.3.0}/docs/source/install/install.rst +0 -0
  400. {ipython-9.2.0 → ipython-9.3.0}/docs/source/install/kernel_install.rst +0 -0
  401. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/autoawait.rst +0 -0
  402. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/index.rst +0 -0
  403. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/magics.rst +0 -0
  404. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/plotting.rst +0 -0
  405. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  406. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/reference.rst +0 -0
  407. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/shell.rst +0 -0
  408. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/tips.rst +0 -0
  409. {ipython-9.2.0 → ipython-9.3.0}/docs/source/interactive/tutorial.rst +0 -0
  410. {ipython-9.2.0 → ipython-9.3.0}/docs/source/links.txt +0 -0
  411. {ipython-9.2.0 → ipython-9.3.0}/docs/source/overview.rst +0 -0
  412. {ipython-9.2.0 → ipython-9.3.0}/docs/source/parallel/index.rst +0 -0
  413. {ipython-9.2.0 → ipython-9.3.0}/docs/source/sphinx.toml +0 -0
  414. {ipython-9.2.0 → ipython-9.3.0}/docs/source/sphinxext.rst +0 -0
  415. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/development.rst +0 -0
  416. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  417. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  418. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  419. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  420. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  421. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  422. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  423. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  424. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  425. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  426. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  427. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/index.rst +0 -0
  428. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/pr/README.md +0 -0
  429. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  430. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  431. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version0.10.rst +0 -0
  432. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version0.11.rst +0 -0
  433. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version0.12.rst +0 -0
  434. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version0.13.rst +0 -0
  435. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version0.8.rst +0 -0
  436. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version0.9.rst +0 -0
  437. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version1.0.rst +0 -0
  438. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version2.0.rst +0 -0
  439. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version3.rst +0 -0
  440. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  441. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version4.rst +0 -0
  442. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version5.rst +0 -0
  443. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version6.rst +0 -0
  444. {ipython-9.2.0 → ipython-9.3.0}/docs/source/whatsnew/version7.rst +0 -0
  445. {ipython-9.2.0 → ipython-9.3.0}/docs/sphinxext/apigen.py +0 -0
  446. {ipython-9.2.0 → ipython-9.3.0}/docs/sphinxext/configtraits.py +0 -0
  447. {ipython-9.2.0 → ipython-9.3.0}/docs/sphinxext/github.py +0 -0
  448. {ipython-9.2.0 → ipython-9.3.0}/docs/sphinxext/magics.py +0 -0
  449. {ipython-9.2.0 → ipython-9.3.0}/examples/Embedding/embed_class_long.py +0 -0
  450. {ipython-9.2.0 → ipython-9.3.0}/examples/Embedding/embed_class_short.py +0 -0
  451. {ipython-9.2.0 → ipython-9.3.0}/examples/Embedding/embed_function.py +0 -0
  452. {ipython-9.2.0 → ipython-9.3.0}/examples/Embedding/start_ipython_config.py +0 -0
  453. {ipython-9.2.0 → ipython-9.3.0}/examples/IPython Kernel/example-demo.py +0 -0
  454. {ipython-9.2.0 → ipython-9.3.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  455. {ipython-9.2.0 → ipython-9.3.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  456. {ipython-9.2.0 → ipython-9.3.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  457. {ipython-9.2.0 → ipython-9.3.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  458. {ipython-9.2.0 → ipython-9.3.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  459. {ipython-9.2.0 → ipython-9.3.0}/examples/IPython Kernel/ipython.desktop +0 -0
  460. {ipython-9.2.0 → ipython-9.3.0}/examples/utils/cwd_prompt.py +0 -0
  461. {ipython-9.2.0 → ipython-9.3.0}/examples/utils/list_pyfiles.ipy +0 -0
  462. {ipython-9.2.0 → ipython-9.3.0}/examples/utils/list_subdirs.ipy +0 -0
  463. {ipython-9.2.0 → ipython-9.3.0}/ipython.egg-info/dependency_links.txt +0 -0
  464. {ipython-9.2.0 → ipython-9.3.0}/ipython.egg-info/entry_points.txt +0 -0
  465. {ipython-9.2.0 → ipython-9.3.0}/ipython.egg-info/not-zip-safe +0 -0
  466. {ipython-9.2.0 → ipython-9.3.0}/ipython.egg-info/requires.txt +0 -0
  467. {ipython-9.2.0 → ipython-9.3.0}/ipython.egg-info/top_level.txt +0 -0
  468. {ipython-9.2.0 → ipython-9.3.0}/long_description.rst +0 -0
  469. {ipython-9.2.0 → ipython-9.3.0}/scripts/ipython.ico +0 -0
  470. {ipython-9.2.0 → ipython-9.3.0}/scripts/ipython_nb.ico +0 -0
  471. {ipython-9.2.0 → ipython-9.3.0}/setup.cfg +0 -0
  472. {ipython-9.2.0 → ipython-9.3.0}/setup.py +0 -0
  473. {ipython-9.2.0 → ipython-9.3.0}/setupbase.py +0 -0
  474. {ipython-9.2.0 → ipython-9.3.0}/tests/2x2.jpg +0 -0
  475. {ipython-9.2.0 → ipython-9.3.0}/tests/2x2.png +0 -0
  476. {ipython-9.2.0 → ipython-9.3.0}/tests/__init__.py +0 -0
  477. {ipython-9.2.0 → ipython-9.3.0}/tests/bad_all.py +0 -0
  478. {ipython-9.2.0 → ipython-9.3.0}/tests/conftest.py +0 -0
  479. {ipython-9.2.0 → ipython-9.3.0}/tests/cve.py +0 -0
  480. {ipython-9.2.0 → ipython-9.3.0}/tests/fake_ext_dir/daft_extension.py +0 -0
  481. {ipython-9.2.0 → ipython-9.3.0}/tests/nonascii.py +0 -0
  482. {ipython-9.2.0 → ipython-9.3.0}/tests/nonascii2.py +0 -0
  483. {ipython-9.2.0 → ipython-9.3.0}/tests/print_argv.py +0 -0
  484. {ipython-9.2.0 → ipython-9.3.0}/tests/refbug.py +0 -0
  485. {ipython-9.2.0 → ipython-9.3.0}/tests/simpleerr.py +0 -0
  486. {ipython-9.2.0 → ipython-9.3.0}/tests/tclass.py +0 -0
  487. {ipython-9.2.0 → ipython-9.3.0}/tests/test.wav +0 -0
  488. {ipython-9.2.0 → ipython-9.3.0}/tests/test_alias.py +0 -0
  489. {ipython-9.2.0 → ipython-9.3.0}/tests/test_application.py +0 -0
  490. {ipython-9.2.0 → ipython-9.3.0}/tests/test_async_helpers.py +0 -0
  491. {ipython-9.2.0 → ipython-9.3.0}/tests/test_autocall.py +0 -0
  492. {ipython-9.2.0 → ipython-9.3.0}/tests/test_backgroundjobs.py +0 -0
  493. {ipython-9.2.0 → ipython-9.3.0}/tests/test_capture.py +0 -0
  494. {ipython-9.2.0 → ipython-9.3.0}/tests/test_clipboard.py +0 -0
  495. {ipython-9.2.0 → ipython-9.3.0}/tests/test_compilerop.py +0 -0
  496. {ipython-9.2.0 → ipython-9.3.0}/tests/test_completerlib.py +0 -0
  497. {ipython-9.2.0 → ipython-9.3.0}/tests/test_debug_magic.py +0 -0
  498. {ipython-9.2.0 → ipython-9.3.0}/tests/test_debugger.py +0 -0
  499. {ipython-9.2.0 → ipython-9.3.0}/tests/test_decorators.py +0 -0
  500. {ipython-9.2.0 → ipython-9.3.0}/tests/test_decorators_2.py +0 -0
  501. {ipython-9.2.0 → ipython-9.3.0}/tests/test_deepreload.py +0 -0
  502. {ipython-9.2.0 → ipython-9.3.0}/tests/test_dir2.py +0 -0
  503. {ipython-9.2.0 → ipython-9.3.0}/tests/test_display.py +0 -0
  504. {ipython-9.2.0 → ipython-9.3.0}/tests/test_display_2.py +0 -0
  505. {ipython-9.2.0 → ipython-9.3.0}/tests/test_displayhook.py +0 -0
  506. {ipython-9.2.0 → ipython-9.3.0}/tests/test_editorhooks.py +0 -0
  507. {ipython-9.2.0 → ipython-9.3.0}/tests/test_embed.py +0 -0
  508. {ipython-9.2.0 → ipython-9.3.0}/tests/test_events.py +0 -0
  509. {ipython-9.2.0 → ipython-9.3.0}/tests/test_exceptiongroup_tb.py +0 -0
  510. {ipython-9.2.0 → ipython-9.3.0}/tests/test_extension.py +0 -0
  511. {ipython-9.2.0 → ipython-9.3.0}/tests/test_formatters.py +0 -0
  512. {ipython-9.2.0 → ipython-9.3.0}/tests/test_handlers.py +0 -0
  513. {ipython-9.2.0 → ipython-9.3.0}/tests/test_help.py +0 -0
  514. {ipython-9.2.0 → ipython-9.3.0}/tests/test_history.py +0 -0
  515. {ipython-9.2.0 → ipython-9.3.0}/tests/test_hooks.py +0 -0
  516. {ipython-9.2.0 → ipython-9.3.0}/tests/test_imports.py +0 -0
  517. {ipython-9.2.0 → ipython-9.3.0}/tests/test_importstring.py +0 -0
  518. {ipython-9.2.0 → ipython-9.3.0}/tests/test_inputtransformer2.py +0 -0
  519. {ipython-9.2.0 → ipython-9.3.0}/tests/test_inputtransformer2_line.py +0 -0
  520. {ipython-9.2.0 → ipython-9.3.0}/tests/test_interactiveshell.py +0 -0
  521. {ipython-9.2.0 → ipython-9.3.0}/tests/test_interactivshell.py +0 -0
  522. {ipython-9.2.0 → ipython-9.3.0}/tests/test_io.py +0 -0
  523. {ipython-9.2.0 → ipython-9.3.0}/tests/test_iplib.py +0 -0
  524. {ipython-9.2.0 → ipython-9.3.0}/tests/test_ipunittest.py +0 -0
  525. {ipython-9.2.0 → ipython-9.3.0}/tests/test_latextools.py +0 -0
  526. {ipython-9.2.0 → ipython-9.3.0}/tests/test_logger.py +0 -0
  527. {ipython-9.2.0 → ipython-9.3.0}/tests/test_magic.py +0 -0
  528. {ipython-9.2.0 → ipython-9.3.0}/tests/test_magic_arguments.py +0 -0
  529. {ipython-9.2.0 → ipython-9.3.0}/tests/test_magic_terminal.py +0 -0
  530. {ipython-9.2.0 → ipython-9.3.0}/tests/test_module_paths.py +0 -0
  531. {ipython-9.2.0 → ipython-9.3.0}/tests/test_oinspect.py +0 -0
  532. {ipython-9.2.0 → ipython-9.3.0}/tests/test_openpy.py +0 -0
  533. {ipython-9.2.0 → ipython-9.3.0}/tests/test_page.py +0 -0
  534. {ipython-9.2.0 → ipython-9.3.0}/tests/test_path.py +0 -0
  535. {ipython-9.2.0 → ipython-9.3.0}/tests/test_paths.py +0 -0
  536. {ipython-9.2.0 → ipython-9.3.0}/tests/test_prefilter.py +0 -0
  537. {ipython-9.2.0 → ipython-9.3.0}/tests/test_pretty.py +0 -0
  538. {ipython-9.2.0 → ipython-9.3.0}/tests/test_process.py +0 -0
  539. {ipython-9.2.0 → ipython-9.3.0}/tests/test_profile.py +0 -0
  540. {ipython-9.2.0 → ipython-9.3.0}/tests/test_pt_inputhooks.py +0 -0
  541. {ipython-9.2.0 → ipython-9.3.0}/tests/test_pycolorize.py +0 -0
  542. {ipython-9.2.0 → ipython-9.3.0}/tests/test_pylabtools.py +0 -0
  543. {ipython-9.2.0 → ipython-9.3.0}/tests/test_qt_loaders.py +0 -0
  544. {ipython-9.2.0 → ipython-9.3.0}/tests/test_run.py +0 -0
  545. {ipython-9.2.0 → ipython-9.3.0}/tests/test_shellapp.py +0 -0
  546. {ipython-9.2.0 → ipython-9.3.0}/tests/test_splitinput.py +0 -0
  547. {ipython-9.2.0 → ipython-9.3.0}/tests/test_storemagic.py +0 -0
  548. {ipython-9.2.0 → ipython-9.3.0}/tests/test_sysinfo.py +0 -0
  549. {ipython-9.2.0 → ipython-9.3.0}/tests/test_tempdir.py +0 -0
  550. {ipython-9.2.0 → ipython-9.3.0}/tests/test_text.py +0 -0
  551. {ipython-9.2.0 → ipython-9.3.0}/tests/test_tips.py +0 -0
  552. {ipython-9.2.0 → ipython-9.3.0}/tests/test_tokenutil.py +0 -0
  553. {ipython-9.2.0 → ipython-9.3.0}/tests/test_tools.py +0 -0
  554. {ipython-9.2.0 → ipython-9.3.0}/tests/test_ultratb.py +0 -0
  555. {ipython-9.2.0 → ipython-9.3.0}/tests/test_wildcard.py +0 -0
  556. {ipython-9.2.0 → ipython-9.3.0}/tests/test_zzz_autoreload.py +0 -0
@@ -203,15 +203,11 @@ from types import SimpleNamespace
203
203
  from typing import (
204
204
  Iterable,
205
205
  Iterator,
206
- List,
207
- Tuple,
208
206
  Union,
209
207
  Any,
210
208
  Sequence,
211
- Dict,
212
209
  Optional,
213
210
  TYPE_CHECKING,
214
- Set,
215
211
  Sized,
216
212
  TypeVar,
217
213
  Literal,
@@ -236,10 +232,12 @@ from traitlets import (
236
232
  List as ListTrait,
237
233
  Unicode,
238
234
  Dict as DictTrait,
235
+ DottedObjectName,
239
236
  Union as UnionTrait,
240
237
  observe,
241
238
  )
242
239
  from traitlets.config.configurable import Configurable
240
+ from traitlets.utils.importstring import import_item
243
241
 
244
242
  import __main__
245
243
 
@@ -987,7 +985,7 @@ class Completer(Configurable):
987
985
 
988
986
  - ``forbidden``: no evaluation of code is permitted,
989
987
  - ``minimal``: evaluation of literals and access to built-in namespace;
990
- no item/attribute evaluationm no access to locals/globals,
988
+ no item/attribute evaluation, no access to locals/globals,
991
989
  no evaluation of any operations or comparisons.
992
990
  - ``limited``: access to all namespaces, evaluation of hard-coded methods
993
991
  (for example: :any:`dict.keys`, :any:`object.__getattr__`,
@@ -995,7 +993,9 @@ class Completer(Configurable):
995
993
  :any:`dict`, :any:`list`, :any:`tuple`, ``pandas.Series``),
996
994
  - ``unsafe``: evaluation of all methods and function calls but not of
997
995
  syntax with side-effects like `del x`,
998
- - ``dangerous``: completely arbitrary evaluation.
996
+ - ``dangerous``: completely arbitrary evaluation; does not support auto-import.
997
+
998
+ To override specific elements of the policy, you can use ``policy_overrides`` trait.
999
999
  """,
1000
1000
  ).tag(config=True)
1001
1001
 
@@ -1031,6 +1031,35 @@ class Completer(Configurable):
1031
1031
  """,
1032
1032
  ).tag(config=True)
1033
1033
 
1034
+ policy_overrides = DictTrait(
1035
+ default_value={},
1036
+ key_trait=Unicode(),
1037
+ help="""Overrides for policy evaluation.
1038
+
1039
+ For example, to enable auto-import on completion specify:
1040
+
1041
+ .. code-block::
1042
+
1043
+ ipython --Completer.policy_overrides='{"allow_auto_import": True}' --Completer.use_jedi=False
1044
+
1045
+ """,
1046
+ ).tag(config=True)
1047
+
1048
+ auto_import_method = DottedObjectName(
1049
+ default_value="importlib.import_module",
1050
+ allow_none=True,
1051
+ help="""\
1052
+ Provisional:
1053
+ This is a provisional API in IPython 9.3, it may change without warnings.
1054
+
1055
+ A fully qualified path to an auto-import method for use by completer.
1056
+ The function should take a single string and return `ModuleType` and
1057
+ can raise `ImportError` exception if module is not found.
1058
+
1059
+ The default auto-import implementation does not populate the user namespace with the imported module.
1060
+ """,
1061
+ ).tag(config=True)
1062
+
1034
1063
  def __init__(self, namespace=None, global_namespace=None, **kwargs):
1035
1064
  """Create a new completer for the command line.
1036
1065
 
@@ -1134,6 +1163,48 @@ class Completer(Configurable):
1134
1163
  # we simple attribute matching with normal identifiers.
1135
1164
  _ATTR_MATCH_RE = re.compile(r"(.+)\.(\w*)$")
1136
1165
 
1166
+ def _strip_code_before_operator(self, code: str) -> str:
1167
+ o_parens = {"(", "[", "{"}
1168
+ c_parens = {")", "]", "}"}
1169
+
1170
+ # Dry-run tokenize to catch errors
1171
+ try:
1172
+ _ = list(tokenize.generate_tokens(iter(code.splitlines()).__next__))
1173
+ except tokenize.TokenError:
1174
+ # Try trimming the expression and retrying
1175
+ trimmed_code = self._trim_expr(code)
1176
+ try:
1177
+ _ = list(
1178
+ tokenize.generate_tokens(iter(trimmed_code.splitlines()).__next__)
1179
+ )
1180
+ code = trimmed_code
1181
+ except tokenize.TokenError:
1182
+ return code
1183
+
1184
+ tokens = _parse_tokens(code)
1185
+ encountered_operator = False
1186
+ after_operator = []
1187
+ nesting_level = 0
1188
+
1189
+ for t in tokens:
1190
+ if t.type == tokenize.OP:
1191
+ if t.string in o_parens:
1192
+ nesting_level += 1
1193
+ elif t.string in c_parens:
1194
+ nesting_level -= 1
1195
+ elif t.string != "." and nesting_level == 0:
1196
+ encountered_operator = True
1197
+ after_operator = []
1198
+ continue
1199
+
1200
+ if encountered_operator:
1201
+ after_operator.append(t.string)
1202
+
1203
+ if encountered_operator:
1204
+ return "".join(after_operator)
1205
+ else:
1206
+ return code
1207
+
1137
1208
  def _attr_matches(
1138
1209
  self, text: str, include_prefix: bool = True
1139
1210
  ) -> tuple[Sequence[str], str]:
@@ -1141,9 +1212,12 @@ class Completer(Configurable):
1141
1212
  if not m2:
1142
1213
  return [], ""
1143
1214
  expr, attr = m2.group(1, 2)
1215
+ try:
1216
+ expr = self._strip_code_before_operator(expr)
1217
+ except tokenize.TokenError:
1218
+ pass
1144
1219
 
1145
1220
  obj = self._evaluate_expr(expr)
1146
-
1147
1221
  if obj is not_found:
1148
1222
  return [], ""
1149
1223
 
@@ -1234,6 +1308,8 @@ class Completer(Configurable):
1234
1308
  globals=self.global_namespace,
1235
1309
  locals=self.namespace,
1236
1310
  evaluation=self.evaluation,
1311
+ auto_import=self._auto_import,
1312
+ policy_overrides=self.policy_overrides,
1237
1313
  ),
1238
1314
  )
1239
1315
  done = True
@@ -1247,6 +1323,14 @@ class Completer(Configurable):
1247
1323
  expr = self._trim_expr(expr)
1248
1324
  return obj
1249
1325
 
1326
+ @property
1327
+ def _auto_import(self):
1328
+ if self.auto_import_method is None:
1329
+ return None
1330
+ if not hasattr(self, "_auto_import_func"):
1331
+ self._auto_import_func = import_item(self.auto_import_method)
1332
+ return self._auto_import_func
1333
+
1250
1334
  def get__all__entries(obj):
1251
1335
  """returns the strings in the __all__ attribute"""
1252
1336
  try:
@@ -2787,6 +2871,8 @@ class IPCompleter(Completer):
2787
2871
  locals=self.namespace,
2788
2872
  evaluation=self.evaluation, # type: ignore
2789
2873
  in_subscript=True,
2874
+ auto_import=self._auto_import,
2875
+ policy_overrides=self.policy_overrides,
2790
2876
  ),
2791
2877
  )
2792
2878
 
@@ -1,19 +1,15 @@
1
+ from copy import copy
1
2
  from inspect import isclass, signature, Signature
2
- from pygments.formatters.terminal256 import Terminal256Formatter
3
3
  from typing import (
4
4
  Annotated,
5
5
  AnyStr,
6
6
  Callable,
7
- Dict,
8
7
  Literal,
9
8
  NamedTuple,
10
9
  NewType,
11
10
  Optional,
12
11
  Protocol,
13
- Set,
14
12
  Sequence,
15
- Tuple,
16
- Type,
17
13
  TypeGuard,
18
14
  Union,
19
15
  get_args,
@@ -97,6 +93,7 @@ class EvaluationPolicy:
97
93
  allow_builtins_access: bool = False
98
94
  allow_all_operations: bool = False
99
95
  allow_any_calls: bool = False
96
+ allow_auto_import: bool = False
100
97
  allowed_calls: set[Callable] = field(default_factory=set)
101
98
 
102
99
  def can_get_item(self, value, item):
@@ -330,6 +327,10 @@ class EvaluationContext(NamedTuple):
330
327
  #: Whether the evaluation of code takes place inside of a subscript.
331
328
  #: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``.
332
329
  in_subscript: bool = False
330
+ #: Auto import method
331
+ auto_import: Callable[list[str], ModuleType] | None = None
332
+ #: Overrides for evaluation policy
333
+ policy_overrides: dict = {}
333
334
 
334
335
 
335
336
  class _IdentitySubscript:
@@ -463,6 +464,17 @@ def _find_dunder(node_op, dunders) -> Union[tuple[str, ...], None]:
463
464
  return dunder
464
465
 
465
466
 
467
+ def get_policy(context: EvaluationContext) -> EvaluationPolicy:
468
+ policy = copy(EVALUATION_POLICIES[context.evaluation])
469
+
470
+ for key, value in context.policy_overrides.items():
471
+ if hasattr(policy, key):
472
+ setattr(policy, key, value)
473
+ else:
474
+ print(f"Incorrect policy override key: {key}")
475
+ return policy
476
+
477
+
466
478
  def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
467
479
  """Evaluate AST node in provided context.
468
480
 
@@ -490,7 +502,8 @@ def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
490
502
  The purpose of this function is to guard against unwanted side-effects;
491
503
  it does not give guarantees on protection from malicious code execution.
492
504
  """
493
- policy = EVALUATION_POLICIES[context.evaluation]
505
+ policy = get_policy(context)
506
+
494
507
  if node is None:
495
508
  return None
496
509
  if isinstance(node, ast.Expression):
@@ -711,7 +724,7 @@ def _resolve_annotation(
711
724
 
712
725
 
713
726
  def _eval_node_name(node_id: str, context: EvaluationContext):
714
- policy = EVALUATION_POLICIES[context.evaluation]
727
+ policy = get_policy(context)
715
728
  if policy.allow_locals_access and node_id in context.locals:
716
729
  return context.locals[node_id]
717
730
  if policy.allow_globals_access and node_id in context.globals:
@@ -719,6 +732,8 @@ def _eval_node_name(node_id: str, context: EvaluationContext):
719
732
  if policy.allow_builtins_access and hasattr(builtins, node_id):
720
733
  # note: do not use __builtins__, it is implementation detail of cPython
721
734
  return getattr(builtins, node_id)
735
+ if policy.allow_auto_import and context.auto_import:
736
+ return context.auto_import(node_id)
722
737
  if not policy.allow_globals_access and not policy.allow_locals_access:
723
738
  raise GuardRejection(
724
739
  f"Namespace access not allowed in {context.evaluation} mode"
@@ -728,7 +743,7 @@ def _eval_node_name(node_id: str, context: EvaluationContext):
728
743
 
729
744
 
730
745
  def _eval_or_create_duck(duck_type, node: ast.Call, context: EvaluationContext):
731
- policy = EVALUATION_POLICIES[context.evaluation]
746
+ policy = get_policy(context)
732
747
  # if allow-listed builtin is on type annotation, instantiate it
733
748
  if policy.can_call(duck_type) and not node.keywords:
734
749
  args = [eval_node(arg, context) for arg in node.args]
@@ -290,7 +290,7 @@ class ExecutionResult:
290
290
  """
291
291
 
292
292
  execution_count: Optional[int] = None
293
- error_before_exec: Optional[bool] = None
293
+ error_before_exec: Optional[BaseException] = None
294
294
  error_in_exec: Optional[BaseException] = None
295
295
  info = None
296
296
  result = None
@@ -314,6 +314,7 @@ class ExecutionResult:
314
314
  return '<%s object at %x, execution_count=%s error_before_exec=%s error_in_exec=%s info=%s result=%s>' %\
315
315
  (name, id(self), self.execution_count, self.error_before_exec, self.error_in_exec, repr(self.info), repr(self.result))
316
316
 
317
+
317
318
  @functools.wraps(io_open)
318
319
  def _modified_open(file, *args, **kwargs):
319
320
  if file in {0, 1, 2}:
@@ -331,7 +332,7 @@ class InteractiveShell(SingletonConfigurable):
331
332
 
332
333
  _instance = None
333
334
  _user_ns: dict
334
- _sys_modules_keys: set[str, AnyType]
335
+ _sys_modules_keys: set[str]
335
336
 
336
337
  inspector: oinspect.Inspector
337
338
 
@@ -1572,7 +1573,7 @@ class InteractiveShell(SingletonConfigurable):
1572
1573
  if isinstance(variables, str):
1573
1574
  vlist = variables.split()
1574
1575
  else:
1575
- vlist = variables
1576
+ vlist = list(variables)
1576
1577
  vdict = {}
1577
1578
  cf = sys._getframe(1)
1578
1579
  for name in vlist:
@@ -1887,11 +1888,12 @@ class InteractiveShell(SingletonConfigurable):
1887
1888
  with self.builtin_trap:
1888
1889
  info = self._object_find(oname)
1889
1890
  if info.found:
1890
- docformat = (
1891
- sphinxify(self.object_inspect(oname))
1892
- if self.sphinxify_docstring
1893
- else None
1894
- )
1891
+ if self.sphinxify_docstring:
1892
+ if sphinxify is None:
1893
+ raise ImportError("Module ``docrepr`` required but missing")
1894
+ docformat = sphinxify(self.object_inspect(oname))
1895
+ else:
1896
+ docformat = None
1895
1897
  return self.inspector._get_info(
1896
1898
  info.obj,
1897
1899
  oname,
@@ -2196,7 +2198,7 @@ class InteractiveShell(SingletonConfigurable):
2196
2198
  except KeyboardInterrupt:
2197
2199
  print('\n' + self.get_exception_only(), file=sys.stderr)
2198
2200
 
2199
- def _showtraceback(self, etype, evalue, stb: str):
2201
+ def _showtraceback(self, etype, evalue, stb: list[str]):
2200
2202
  """Actually show a traceback.
2201
2203
 
2202
2204
  Subclasses may override this method to put the traceback on a different
@@ -3599,7 +3601,7 @@ class InteractiveShell(SingletonConfigurable):
3599
3601
  if mode == "exec":
3600
3602
  mod = Module([node], [])
3601
3603
  elif mode == "single":
3602
- mod = ast.Interactive([node]) # type: ignore
3604
+ mod = ast.Interactive([node])
3603
3605
  with compiler.extra_flags(
3604
3606
  getattr(ast, "PyCF_ALLOW_TOP_LEVEL_AWAIT", 0x0)
3605
3607
  if self.autoawait
@@ -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 = 2
19
+ _version_minor = 3
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "b2"
@@ -475,7 +475,7 @@ class TerminalInteractiveShell(InteractiveShell):
475
475
  allow_none=True,
476
476
  help="""\
477
477
  Provisional:
478
- This is a provisinal API in IPython 8.32, before stabilisation
478
+ This is a provisional API in IPython 8.32, before stabilisation
479
479
  in 9.0, it may change without warnings.
480
480
 
481
481
  class to use for the `NavigableAutoSuggestFromHistory` to request
@@ -507,13 +507,16 @@ class TerminalInteractiveShell(InteractiveShell):
507
507
  elif provider == "NavigableAutoSuggestFromHistory":
508
508
  # LLM stuff are all Provisional in 8.32
509
509
  if self._llm_provider_class:
510
- llm_provider_constructor = import_item(self._llm_provider_class)
511
- llm_provider = llm_provider_constructor(**self.llm_constructor_kwargs)
510
+
511
+ def init_llm_provider():
512
+ llm_provider_constructor = import_item(self._llm_provider_class)
513
+ return llm_provider_constructor(**self.llm_constructor_kwargs)
514
+
512
515
  else:
513
- llm_provider = None
516
+ init_llm_provider = None
514
517
  self.auto_suggest = NavigableAutoSuggestFromHistory()
515
518
  # Provisinal in 8.32
516
- self.auto_suggest._llm_provider = llm_provider
519
+ self.auto_suggest._init_llm_provider = init_llm_provider
517
520
 
518
521
  name = self.llm_prefix_from_history
519
522
 
@@ -171,16 +171,19 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
171
171
  # another request.
172
172
  _llm_task: asyncio.Task | None = None
173
173
 
174
- # This is the instance of the LLM provider from jupyter-ai to which we forward the request
175
- # to generate inline completions.
176
- _llm_provider: Any | None
174
+ # This is the constructor of the LLM provider from jupyter-ai
175
+ # to which we forward the request to generate inline completions.
176
+ _init_llm_provider: Callable | None
177
+
178
+ _llm_provider_instance: Any | None
177
179
  _llm_prefixer: Callable = lambda self, x: "wrong"
178
180
 
179
181
  def __init__(self):
180
182
  super().__init__()
181
183
  self.skip_lines = 0
182
184
  self._connected_apps = []
183
- self._llm_provider = None
185
+ self._llm_provider_instance = None
186
+ self._init_llm_provider = None
184
187
  self._request_number = 0
185
188
 
186
189
  def reset_history_position(self, _: Buffer) -> None:
@@ -317,6 +320,16 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
317
320
  "LLM task not cancelled, does your provider support cancellation?"
318
321
  )
319
322
 
323
+ @property
324
+ def _llm_provider(self):
325
+ """Lazy-initialized instance of the LLM provider.
326
+
327
+ Do not use in the constructor, as `_init_llm_provider` can trigger slow side-effects.
328
+ """
329
+ if self._llm_provider_instance is None and self._init_llm_provider:
330
+ self._llm_provider_instance = self._init_llm_provider()
331
+ return self._llm_provider_instance
332
+
320
333
  async def _trigger_llm(self, buffer) -> None:
321
334
  """
322
335
  This will ask the current llm provider a suggestion for the current buffer.
@@ -325,14 +338,14 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
325
338
  """
326
339
  # we likely want to store the current cursor position, and cancel if the cursor has moved.
327
340
  try:
328
- import jupyter_ai.completions.models as jai_models
341
+ import jupyter_ai_magics
329
342
  except ModuleNotFoundError:
330
- jai_models = None
343
+ jupyter_ai_magics = None
331
344
  if not self._llm_provider:
332
345
  warnings.warn("No LLM provider found, cannot trigger LLM completions")
333
346
  return
334
- if jai_models is None:
335
- warnings.warn("LLM Completion requires `jupyter_ai` to be installed")
347
+ if jupyter_ai_magics is None:
348
+ warnings.warn("LLM Completion requires `jupyter_ai_magics` to be installed")
336
349
 
337
350
  self._cancel_running_llm_task()
338
351
 
@@ -359,7 +372,7 @@ class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):
359
372
  provider to stream it's response back to us iteratively setting it as
360
373
  the suggestion on the current buffer.
361
374
 
362
- Unlike with JupyterAi, as we do not have multiple cell, the cell id
375
+ Unlike with JupyterAi, as we do not have multiple cells, the cell id
363
376
  is always set to `None`.
364
377
 
365
378
  We set the prefix to the current cell content, but could also insert the
@@ -1,2 +1,2 @@
1
1
  # GENERATED BY setup.py
2
- commit = "40eaac2d4"
2
+ commit = "e87cb2a40"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipython
3
- Version: 9.2.0
3
+ Version: 9.3.0
4
4
  Summary: IPython: Productive Interactive Computing
5
5
  Author: The IPython Development Team
6
6
  Author-email: ipython-dev@python.org
@@ -21,11 +21,14 @@ Module: :mod:`core.guarded_eval`
21
21
  :members:
22
22
  :show-inheritance:
23
23
 
24
- 2 Functions
24
+ 3 Functions
25
25
  -----------
26
26
 
27
27
  .. autofunction:: IPython.core.guarded_eval.guarded_eval
28
28
 
29
29
 
30
+ .. autofunction:: IPython.core.guarded_eval.get_policy
31
+
32
+
30
33
  .. autofunction:: IPython.core.guarded_eval.eval_node
31
34
 
@@ -1174,7 +1174,7 @@
1174
1174
  .. configtrait:: TerminalInteractiveShell.llm_provider_class
1175
1175
 
1176
1176
  Provisional:
1177
- This is a provisinal API in IPython 8.32, before stabilisation
1177
+ This is a provisional API in IPython 8.32, before stabilisation
1178
1178
  in 9.0, it may change without warnings.
1179
1179
 
1180
1180
  class to use for the `NavigableAutoSuggestFromHistory` to request
@@ -1734,6 +1734,20 @@
1734
1734
  :trait type: Bool
1735
1735
  :default: ``False``
1736
1736
 
1737
+ .. configtrait:: Completer.auto_import_method
1738
+
1739
+ Provisional:
1740
+ This is a provisional API in IPython 9.3, it may change without warnings.
1741
+
1742
+ A fully qualified path to an auto-import method for use by completer.
1743
+ The function should take a single string and return `ModuleType` and
1744
+ can raise `ImportError` exception if module is not found.
1745
+
1746
+ The default auto-import implementation does not populate the user namespace with the imported module.
1747
+
1748
+ :trait type: DottedObjectName
1749
+ :default: ``'importlib.import_module'``
1750
+
1737
1751
  .. configtrait:: Completer.backslash_combining_completions
1738
1752
 
1739
1753
  Enable unicode completions, e.g. \alpha<tab> . Includes completion of latex commands, unicode names, and expanding unicode characters back to latex commands.
@@ -1762,7 +1776,7 @@
1762
1776
 
1763
1777
  - ``forbidden``: no evaluation of code is permitted,
1764
1778
  - ``minimal``: evaluation of literals and access to built-in namespace;
1765
- no item/attribute evaluationm no access to locals/globals,
1779
+ no item/attribute evaluation, no access to locals/globals,
1766
1780
  no evaluation of any operations or comparisons.
1767
1781
  - ``limited``: access to all namespaces, evaluation of hard-coded methods
1768
1782
  (for example: :any:`dict.keys`, :any:`object.__getattr__`,
@@ -1770,7 +1784,9 @@
1770
1784
  :any:`dict`, :any:`list`, :any:`tuple`, ``pandas.Series``),
1771
1785
  - ``unsafe``: evaluation of all methods and function calls but not of
1772
1786
  syntax with side-effects like `del x`,
1773
- - ``dangerous``: completely arbitrary evaluation.
1787
+ - ``dangerous``: completely arbitrary evaluation; does not support auto-import.
1788
+
1789
+ To override specific elements of the policy, you can use ``policy_overrides`` trait.
1774
1790
 
1775
1791
  :options: ``'forbidden'``, ``'minimal'``, ``'limited'``, ``'unsafe'``, ``'dangerous'``
1776
1792
  :default: ``'limited'``
@@ -1799,6 +1815,18 @@
1799
1815
  :trait type: Int
1800
1816
  :default: ``400``
1801
1817
 
1818
+ .. configtrait:: Completer.policy_overrides
1819
+
1820
+ Overrides for policy evaluation.
1821
+
1822
+ For example, to enable auto-import on completion specify:
1823
+
1824
+ .. code-block::
1825
+
1826
+ ipython --Completer.policy_overrides='{"allow_auto_import": True}' --Completer.use_jedi=False
1827
+
1828
+ :trait type: Dict
1829
+
1802
1830
  .. configtrait:: Completer.use_jedi
1803
1831
 
1804
1832
  Experimental: Use Jedi to generate autocompletions. Default to True if jedi is installed.
@@ -1818,6 +1846,20 @@
1818
1846
  :trait type: Bool
1819
1847
  :default: ``False``
1820
1848
 
1849
+ .. configtrait:: IPCompleter.auto_import_method
1850
+
1851
+ Provisional:
1852
+ This is a provisional API in IPython 9.3, it may change without warnings.
1853
+
1854
+ A fully qualified path to an auto-import method for use by completer.
1855
+ The function should take a single string and return `ModuleType` and
1856
+ can raise `ImportError` exception if module is not found.
1857
+
1858
+ The default auto-import implementation does not populate the user namespace with the imported module.
1859
+
1860
+ :trait type: DottedObjectName
1861
+ :default: ``'importlib.import_module'``
1862
+
1821
1863
  .. configtrait:: IPCompleter.backslash_combining_completions
1822
1864
 
1823
1865
  Enable unicode completions, e.g. \alpha<tab> . Includes completion of latex commands, unicode names, and expanding unicode characters back to latex commands.
@@ -1854,7 +1896,7 @@
1854
1896
 
1855
1897
  - ``forbidden``: no evaluation of code is permitted,
1856
1898
  - ``minimal``: evaluation of literals and access to built-in namespace;
1857
- no item/attribute evaluationm no access to locals/globals,
1899
+ no item/attribute evaluation, no access to locals/globals,
1858
1900
  no evaluation of any operations or comparisons.
1859
1901
  - ``limited``: access to all namespaces, evaluation of hard-coded methods
1860
1902
  (for example: :any:`dict.keys`, :any:`object.__getattr__`,
@@ -1862,7 +1904,9 @@
1862
1904
  :any:`dict`, :any:`list`, :any:`tuple`, ``pandas.Series``),
1863
1905
  - ``unsafe``: evaluation of all methods and function calls but not of
1864
1906
  syntax with side-effects like `del x`,
1865
- - ``dangerous``: completely arbitrary evaluation.
1907
+ - ``dangerous``: completely arbitrary evaluation; does not support auto-import.
1908
+
1909
+ To override specific elements of the policy, you can use ``policy_overrides`` trait.
1866
1910
 
1867
1911
  :options: ``'forbidden'``, ``'minimal'``, ``'limited'``, ``'unsafe'``, ``'dangerous'``
1868
1912
  :default: ``'limited'``
@@ -1934,6 +1978,18 @@
1934
1978
  :options: ``0``, ``1``, ``2``
1935
1979
  :default: ``2``
1936
1980
 
1981
+ .. configtrait:: IPCompleter.policy_overrides
1982
+
1983
+ Overrides for policy evaluation.
1984
+
1985
+ For example, to enable auto-import on completion specify:
1986
+
1987
+ .. code-block::
1988
+
1989
+ ipython --Completer.policy_overrides='{"allow_auto_import": True}' --Completer.use_jedi=False
1990
+
1991
+ :trait type: Dict
1992
+
1937
1993
  .. configtrait:: IPCompleter.profile_completions
1938
1994
 
1939
1995
  If True, emit profiling data for completion subsystem using cProfile.
@@ -694,12 +694,9 @@ Line magics
694
694
  -n print line numbers for each input. This feature is only available if numbered prompts are in use.
695
695
  -o also print outputs for each input.
696
696
  -p print classic '>>>' python prompts before each input. This is useful for making documentation, and in conjunction with -o, for producing doctest-ready output.
697
- -t print the 'translated' history, as IPython understands it. IPython filters your input and converts it all into valid Python source before executing it (things like magics or aliases are turned into function calls, for example).
698
- With this option, you'll see the native history instead of the user-entered version: '%cd /' will be seen as 'get_ipython().run_line_magic("cd", "/")' instead of '%cd /'.
699
- -f FILENAME FILENAME: instead of printing the output to the screen, redirect it to the given file. The file is always overwritten, though *when it can*, IPython asks for confirmation first. In particular, running the command 'history -f
700
- FILENAME' from the IPython Notebook interface will replace FILENAME even if it already exists *without* confirmation.
701
- -g <[PATTERN ...]> treat the arg as a glob pattern to search for in (full) history. This includes the saved history (almost all commands ever written). The pattern may contain '?' to match one unknown character and '*' to match any number of unknown
702
- characters. Use '%hist -g' to show full saved history (may be very long).
697
+ -t print the 'translated' history, as IPython understands it. IPython filters your input and converts it all into valid Python source before executing it (things like magics or aliases are turned into function calls, for example). With this option, you'll see the native history instead of the user-entered version: '%cd /' will be seen as 'get_ipython().run_line_magic("cd", "/")' instead of '%cd /'.
698
+ -f FILENAME FILENAME: instead of printing the output to the screen, redirect it to the given file. The file is always overwritten, though *when it can*, IPython asks for confirmation first. In particular, running the command 'history -f FILENAME' from the IPython Notebook interface will replace FILENAME even if it already exists *without* confirmation.
699
+ -g <[PATTERN ...]> treat the arg as a glob pattern to search for in (full) history. This includes the saved history (almost all commands ever written). The pattern may contain '?' to match one unknown character and '*' to match any number of unknown characters. Use '%hist -g' to show full saved history (may be very long).
703
700
  -l <[LIMIT]> get the last n lines from all sessions. Specify n as a single arg, or the default is the last 10 lines.
704
701
  -u when searching history using `-g`, show only unique history.
705
702
 
@@ -2328,8 +2325,7 @@ Cell magics
2328
2325
  run the cell, capturing stdout, stderr, and IPython's rich display() calls.
2329
2326
 
2330
2327
  positional arguments:
2331
- output The name of the variable in which to store output. This is a ``utils.io.CapturedIO`` object with stdout/err attributes for the text of the captured output. CapturedOutput also has a ``show()`` method for displaying the output, and
2332
- ``__call__`` as well, so you can use that to quickly display the output. If unspecified, captured output is discarded.
2328
+ output The name of the variable in which to store output. This is a ``utils.io.CapturedIO`` object with stdout/err attributes for the text of the captured output. CapturedOutput also has a ``show()`` method for displaying the output, and ``__call__`` as well, so you can use that to quickly display the output. If unspecified, captured output is discarded.
2333
2329
 
2334
2330
  options:
2335
2331
  --no-stderr Don't capture stderr.
@@ -2,6 +2,16 @@
2
2
  8.x Series
3
3
  ============
4
4
 
5
+ .. _version 8.37:
6
+
7
+ IPython 8.37
8
+ ============
9
+
10
+ This release includes fixes for the tab completer and LLM completer backported from IPython 9.4:
11
+
12
+ - :ghpull:`14910` Eliminate startup delay when LLM completion provider is configured
13
+ - :ghpull:`14898` Fix attribute completion for expressions with comparison operators
14
+
5
15
  .. _version 8.36:
6
16
 
7
17
  IPython 8.36