ipython 8.36.0__tar.gz → 8.38.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 (622) hide show
  1. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/completer.py +46 -1
  2. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/debugger.py +10 -32
  3. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/release.py +1 -1
  4. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_completer.py +37 -0
  5. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/interactiveshell.py +7 -4
  6. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/shortcuts/auto_suggest.py +22 -9
  7. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/tests/fake_llm.py +15 -1
  8. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/tests/test_shortcuts.py +12 -0
  9. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/_sysinfo.py +1 -1
  10. {ipython-8.36.0/ipython.egg-info → ipython-8.38.0}/PKG-INFO +1 -1
  11. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version8.rst +10 -0
  12. {ipython-8.36.0 → ipython-8.38.0}/examples/auto_suggest_llm.py +2 -2
  13. {ipython-8.36.0 → ipython-8.38.0/ipython.egg-info}/PKG-INFO +1 -1
  14. {ipython-8.36.0 → ipython-8.38.0}/ipython.egg-info/SOURCES.txt +0 -123
  15. ipython-8.36.0/docs/hist_simple.png +0 -0
  16. ipython-8.36.0/docs/hist_with_text.png +0 -0
  17. ipython-8.36.0/docs/plot_simple.png +0 -0
  18. ipython-8.36.0/docs/plot_simple_python.png +0 -0
  19. ipython-8.36.0/docs/source/api/generated/IPython.conftest.rst +0 -28
  20. ipython-8.36.0/docs/source/api/generated/IPython.core.alias.rst +0 -36
  21. ipython-8.36.0/docs/source/api/generated/IPython.core.application.rst +0 -20
  22. ipython-8.36.0/docs/source/api/generated/IPython.core.async_helpers.rst +0 -13
  23. ipython-8.36.0/docs/source/api/generated/IPython.core.autocall.rst +0 -24
  24. ipython-8.36.0/docs/source/api/generated/IPython.core.builtin_trap.rst +0 -16
  25. ipython-8.36.0/docs/source/api/generated/IPython.core.compilerop.rst +0 -25
  26. ipython-8.36.0/docs/source/api/generated/IPython.core.completer.rst +0 -113
  27. ipython-8.36.0/docs/source/api/generated/IPython.core.completerlib.rst +0 -43
  28. ipython-8.36.0/docs/source/api/generated/IPython.core.crashhandler.rst +0 -22
  29. ipython-8.36.0/docs/source/api/generated/IPython.core.debugger.rst +0 -38
  30. ipython-8.36.0/docs/source/api/generated/IPython.core.error.rst +0 -30
  31. ipython-8.36.0/docs/source/api/generated/IPython.core.events.rst +0 -34
  32. ipython-8.36.0/docs/source/api/generated/IPython.core.excolors.rst +0 -13
  33. ipython-8.36.0/docs/source/api/generated/IPython.core.extensions.rst +0 -16
  34. ipython-8.36.0/docs/source/api/generated/IPython.core.formatters.rst +0 -83
  35. ipython-8.36.0/docs/source/api/generated/IPython.core.getipython.rst +0 -13
  36. ipython-8.36.0/docs/source/api/generated/IPython.core.guarded_eval.rst +0 -31
  37. ipython-8.36.0/docs/source/api/generated/IPython.core.history.rst +0 -44
  38. ipython-8.36.0/docs/source/api/generated/IPython.core.historyapp.rst +0 -22
  39. ipython-8.36.0/docs/source/api/generated/IPython.core.hooks.rst +0 -34
  40. ipython-8.36.0/docs/source/api/generated/IPython.core.inputsplitter.rst +0 -58
  41. ipython-8.36.0/docs/source/api/generated/IPython.core.inputtransformer.rst +0 -76
  42. ipython-8.36.0/docs/source/api/generated/IPython.core.inputtransformer2.rst +0 -88
  43. ipython-8.36.0/docs/source/api/generated/IPython.core.interactiveshell.rst +0 -59
  44. ipython-8.36.0/docs/source/api/generated/IPython.core.logger.rst +0 -16
  45. ipython-8.36.0/docs/source/api/generated/IPython.core.macro.rst +0 -16
  46. ipython-8.36.0/docs/source/api/generated/IPython.core.magic.rst +0 -59
  47. ipython-8.36.0/docs/source/api/generated/IPython.core.magic_arguments.rst +0 -62
  48. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.ast_mod.rst +0 -22
  49. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.auto.rst +0 -16
  50. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.basic.rst +0 -24
  51. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.code.rst +0 -38
  52. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.display.rst +0 -14
  53. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.execution.rst +0 -38
  54. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.extension.rst +0 -14
  55. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.history.rst +0 -14
  56. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.logging.rst +0 -14
  57. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.namespace.rst +0 -14
  58. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.osm.rst +0 -16
  59. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.packaging.rst +0 -20
  60. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.pylab.rst +0 -14
  61. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.rst +0 -14
  62. ipython-8.36.0/docs/source/api/generated/IPython.core.magics.script.rst +0 -26
  63. ipython-8.36.0/docs/source/api/generated/IPython.core.oinspect.rst +0 -52
  64. ipython-8.36.0/docs/source/api/generated/IPython.core.page.rst +0 -37
  65. ipython-8.36.0/docs/source/api/generated/IPython.core.payload.rst +0 -14
  66. ipython-8.36.0/docs/source/api/generated/IPython.core.payloadpage.rst +0 -16
  67. ipython-8.36.0/docs/source/api/generated/IPython.core.prefilter.rst +0 -88
  68. ipython-8.36.0/docs/source/api/generated/IPython.core.profileapp.rst +0 -35
  69. ipython-8.36.0/docs/source/api/generated/IPython.core.profiledir.rst +0 -18
  70. ipython-8.36.0/docs/source/api/generated/IPython.core.prompts.rst +0 -16
  71. ipython-8.36.0/docs/source/api/generated/IPython.core.pylabtools.rst +0 -40
  72. ipython-8.36.0/docs/source/api/generated/IPython.core.shellapp.rst +0 -20
  73. ipython-8.36.0/docs/source/api/generated/IPython.core.splitinput.rst +0 -22
  74. ipython-8.36.0/docs/source/api/generated/IPython.core.ultratb.rst +0 -72
  75. ipython-8.36.0/docs/source/api/generated/IPython.display.rst +0 -187
  76. ipython-8.36.0/docs/source/api/generated/IPython.lib.backgroundjobs.rst +0 -34
  77. ipython-8.36.0/docs/source/api/generated/IPython.lib.clipboard.rst +0 -29
  78. ipython-8.36.0/docs/source/api/generated/IPython.lib.deepreload.rst +0 -37
  79. ipython-8.36.0/docs/source/api/generated/IPython.lib.demo.rst +0 -53
  80. ipython-8.36.0/docs/source/api/generated/IPython.lib.editorhooks.rst +0 -43
  81. ipython-8.36.0/docs/source/api/generated/IPython.lib.guisupport.rst +0 -28
  82. ipython-8.36.0/docs/source/api/generated/IPython.lib.latextools.rst +0 -35
  83. ipython-8.36.0/docs/source/api/generated/IPython.lib.lexers.rst +0 -38
  84. ipython-8.36.0/docs/source/api/generated/IPython.lib.pretty.rst +0 -83
  85. ipython-8.36.0/docs/source/api/generated/IPython.paths.rst +0 -25
  86. ipython-8.36.0/docs/source/api/generated/IPython.rst +0 -22
  87. ipython-8.36.0/docs/source/api/generated/IPython.terminal.debugger.rst +0 -22
  88. ipython-8.36.0/docs/source/api/generated/IPython.terminal.embed.rst +0 -30
  89. ipython-8.36.0/docs/source/api/generated/IPython.terminal.interactiveshell.rst +0 -34
  90. ipython-8.36.0/docs/source/api/generated/IPython.terminal.ipapp.rst +0 -30
  91. ipython-8.36.0/docs/source/api/generated/IPython.terminal.magics.rst +0 -22
  92. ipython-8.36.0/docs/source/api/generated/IPython.terminal.prompts.rst +0 -24
  93. ipython-8.36.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst +0 -46
  94. ipython-8.36.0/docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst +0 -67
  95. ipython-8.36.0/docs/source/api/generated/IPython.terminal.shortcuts.filters.rst +0 -58
  96. ipython-8.36.0/docs/source/api/generated/IPython.terminal.shortcuts.rst +0 -76
  97. ipython-8.36.0/docs/source/api/generated/IPython.testing.decorators.rst +0 -28
  98. ipython-8.36.0/docs/source/api/generated/IPython.testing.globalipapp.rst +0 -19
  99. ipython-8.36.0/docs/source/api/generated/IPython.testing.ipunittest.rst +0 -31
  100. ipython-8.36.0/docs/source/api/generated/IPython.testing.skipdoctest.rst +0 -13
  101. ipython-8.36.0/docs/source/api/generated/IPython.testing.tools.rst +0 -66
  102. ipython-8.36.0/docs/source/api/generated/IPython.utils.PyColorize.rst +0 -16
  103. ipython-8.36.0/docs/source/api/generated/IPython.utils.capture.rst +0 -28
  104. ipython-8.36.0/docs/source/api/generated/IPython.utils.colorable.rst +0 -14
  105. ipython-8.36.0/docs/source/api/generated/IPython.utils.coloransi.rst +0 -40
  106. ipython-8.36.0/docs/source/api/generated/IPython.utils.contexts.rst +0 -16
  107. ipython-8.36.0/docs/source/api/generated/IPython.utils.data.rst +0 -16
  108. ipython-8.36.0/docs/source/api/generated/IPython.utils.decorators.rst +0 -19
  109. ipython-8.36.0/docs/source/api/generated/IPython.utils.dir2.rst +0 -19
  110. ipython-8.36.0/docs/source/api/generated/IPython.utils.encoding.rst +0 -16
  111. ipython-8.36.0/docs/source/api/generated/IPython.utils.frame.rst +0 -22
  112. ipython-8.36.0/docs/source/api/generated/IPython.utils.generics.rst +0 -16
  113. ipython-8.36.0/docs/source/api/generated/IPython.utils.importstring.rst +0 -13
  114. ipython-8.36.0/docs/source/api/generated/IPython.utils.io.rst +0 -25
  115. ipython-8.36.0/docs/source/api/generated/IPython.utils.ipstruct.rst +0 -16
  116. ipython-8.36.0/docs/source/api/generated/IPython.utils.module_paths.rst +0 -13
  117. ipython-8.36.0/docs/source/api/generated/IPython.utils.openpy.rst +0 -22
  118. ipython-8.36.0/docs/source/api/generated/IPython.utils.path.rst +0 -62
  119. ipython-8.36.0/docs/source/api/generated/IPython.utils.process.rst +0 -23
  120. ipython-8.36.0/docs/source/api/generated/IPython.utils.sentinel.rst +0 -16
  121. ipython-8.36.0/docs/source/api/generated/IPython.utils.shimmodule.rst +0 -26
  122. ipython-8.36.0/docs/source/api/generated/IPython.utils.strdispatch.rst +0 -16
  123. ipython-8.36.0/docs/source/api/generated/IPython.utils.sysinfo.rst +0 -25
  124. ipython-8.36.0/docs/source/api/generated/IPython.utils.syspathcontext.rst +0 -22
  125. ipython-8.36.0/docs/source/api/generated/IPython.utils.tempdir.rst +0 -20
  126. ipython-8.36.0/docs/source/api/generated/IPython.utils.terminal.rst +0 -25
  127. ipython-8.36.0/docs/source/api/generated/IPython.utils.text.rst +0 -69
  128. ipython-8.36.0/docs/source/api/generated/IPython.utils.timing.rst +0 -31
  129. ipython-8.36.0/docs/source/api/generated/IPython.utils.tokenutil.rst +0 -22
  130. ipython-8.36.0/docs/source/api/generated/IPython.utils.tz.rst +0 -20
  131. ipython-8.36.0/docs/source/api/generated/IPython.utils.ulinecache.rst +0 -13
  132. ipython-8.36.0/docs/source/api/generated/IPython.utils.wildcard.rst +0 -28
  133. ipython-8.36.0/docs/source/api/generated/gen.txt +0 -119
  134. ipython-8.36.0/docs/source/config/options/config-generated.txt +0 -0
  135. ipython-8.36.0/docs/source/config/options/terminal.rst +0 -2025
  136. ipython-8.36.0/docs/source/config/shortcuts/table.tsv +0 -79
  137. ipython-8.36.0/docs/source/interactive/magics-generated.txt +0 -2488
  138. {ipython-8.36.0 → ipython-8.38.0}/.flake8 +0 -0
  139. {ipython-8.36.0 → ipython-8.38.0}/.mailmap +0 -0
  140. {ipython-8.36.0 → ipython-8.38.0}/.pre-commit-config.yaml +0 -0
  141. {ipython-8.36.0 → ipython-8.38.0}/COPYING.rst +0 -0
  142. {ipython-8.36.0 → ipython-8.38.0}/IPython/__init__.py +0 -0
  143. {ipython-8.36.0 → ipython-8.38.0}/IPython/__main__.py +0 -0
  144. {ipython-8.36.0 → ipython-8.38.0}/IPython/conftest.py +0 -0
  145. {ipython-8.36.0 → ipython-8.38.0}/IPython/consoleapp.py +0 -0
  146. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/__init__.py +0 -0
  147. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/alias.py +0 -0
  148. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/application.py +0 -0
  149. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/async_helpers.py +0 -0
  150. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/autocall.py +0 -0
  151. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/builtin_trap.py +0 -0
  152. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/compilerop.py +0 -0
  153. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/completerlib.py +0 -0
  154. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/crashhandler.py +0 -0
  155. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/display.py +0 -0
  156. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/display_functions.py +0 -0
  157. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/display_trap.py +0 -0
  158. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/displayhook.py +0 -0
  159. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/displaypub.py +0 -0
  160. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/error.py +0 -0
  161. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/events.py +0 -0
  162. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/excolors.py +0 -0
  163. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/extensions.py +0 -0
  164. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/formatters.py +0 -0
  165. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/getipython.py +0 -0
  166. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/guarded_eval.py +0 -0
  167. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/history.py +0 -0
  168. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/historyapp.py +0 -0
  169. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/hooks.py +0 -0
  170. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/inputsplitter.py +0 -0
  171. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/inputtransformer.py +0 -0
  172. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/inputtransformer2.py +0 -0
  173. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/interactiveshell.py +0 -0
  174. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/latex_symbols.py +0 -0
  175. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/logger.py +0 -0
  176. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/macro.py +0 -0
  177. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magic.py +0 -0
  178. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magic_arguments.py +0 -0
  179. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/__init__.py +0 -0
  180. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/ast_mod.py +0 -0
  181. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/auto.py +0 -0
  182. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/basic.py +0 -0
  183. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/code.py +0 -0
  184. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/config.py +0 -0
  185. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/display.py +0 -0
  186. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/execution.py +0 -0
  187. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/extension.py +0 -0
  188. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/history.py +0 -0
  189. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/logging.py +0 -0
  190. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/namespace.py +0 -0
  191. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/osm.py +0 -0
  192. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/packaging.py +0 -0
  193. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/pylab.py +0 -0
  194. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/magics/script.py +0 -0
  195. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/oinspect.py +0 -0
  196. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/page.py +0 -0
  197. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/payload.py +0 -0
  198. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/payloadpage.py +0 -0
  199. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/prefilter.py +0 -0
  200. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/profile/README_STARTUP +0 -0
  201. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/profileapp.py +0 -0
  202. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/profiledir.py +0 -0
  203. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/prompts.py +0 -0
  204. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/pylabtools.py +0 -0
  205. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/shellapp.py +0 -0
  206. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/splitinput.py +0 -0
  207. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/2x2.jpg +0 -0
  208. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/2x2.png +0 -0
  209. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/__init__.py +0 -0
  210. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/bad_all.py +0 -0
  211. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/daft_extension/daft_extension.py +0 -0
  212. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/nonascii.py +0 -0
  213. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/nonascii2.py +0 -0
  214. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/print_argv.py +0 -0
  215. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/refbug.py +0 -0
  216. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/simpleerr.py +0 -0
  217. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/tclass.py +0 -0
  218. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_alias.py +0 -0
  219. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_application.py +0 -0
  220. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_async_helpers.py +0 -0
  221. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_autocall.py +0 -0
  222. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_compilerop.py +0 -0
  223. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_completerlib.py +0 -0
  224. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_debugger.py +0 -0
  225. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_display.py +0 -0
  226. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_displayhook.py +0 -0
  227. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_events.py +0 -0
  228. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_exceptiongroup_tb.py +0 -0
  229. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_extension.py +0 -0
  230. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_formatters.py +0 -0
  231. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_guarded_eval.py +0 -0
  232. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_handlers.py +0 -0
  233. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_history.py +0 -0
  234. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_hooks.py +0 -0
  235. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_imports.py +0 -0
  236. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_inputsplitter.py +0 -0
  237. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_inputtransformer.py +0 -0
  238. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_inputtransformer2.py +0 -0
  239. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_inputtransformer2_line.py +0 -0
  240. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_interactiveshell.py +0 -0
  241. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_iplib.py +0 -0
  242. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_logger.py +0 -0
  243. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_magic.py +0 -0
  244. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_magic_arguments.py +0 -0
  245. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_magic_terminal.py +0 -0
  246. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_oinspect.py +0 -0
  247. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_page.py +0 -0
  248. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_paths.py +0 -0
  249. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_prefilter.py +0 -0
  250. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_profile.py +0 -0
  251. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_prompts.py +0 -0
  252. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_pylabtools.py +0 -0
  253. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_run.py +0 -0
  254. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_shellapp.py +0 -0
  255. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_splitinput.py +0 -0
  256. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/tests/test_ultratb.py +0 -0
  257. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/ultratb.py +0 -0
  258. {ipython-8.36.0 → ipython-8.38.0}/IPython/core/usage.py +0 -0
  259. {ipython-8.36.0 → ipython-8.38.0}/IPython/display.py +0 -0
  260. {ipython-8.36.0 → ipython-8.38.0}/IPython/extensions/__init__.py +0 -0
  261. {ipython-8.36.0 → ipython-8.38.0}/IPython/extensions/autoreload.py +0 -0
  262. {ipython-8.36.0 → ipython-8.38.0}/IPython/extensions/storemagic.py +0 -0
  263. {ipython-8.36.0 → ipython-8.38.0}/IPython/extensions/tests/__init__.py +0 -0
  264. {ipython-8.36.0 → ipython-8.38.0}/IPython/extensions/tests/test_autoreload.py +0 -0
  265. {ipython-8.36.0 → ipython-8.38.0}/IPython/extensions/tests/test_storemagic.py +0 -0
  266. {ipython-8.36.0 → ipython-8.38.0}/IPython/external/__init__.py +0 -0
  267. {ipython-8.36.0 → ipython-8.38.0}/IPython/external/qt_for_kernel.py +0 -0
  268. {ipython-8.36.0 → ipython-8.38.0}/IPython/external/qt_loaders.py +0 -0
  269. {ipython-8.36.0 → ipython-8.38.0}/IPython/external/tests/__init__.py +0 -0
  270. {ipython-8.36.0 → ipython-8.38.0}/IPython/external/tests/test_qt_loaders.py +0 -0
  271. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/__init__.py +0 -0
  272. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/backgroundjobs.py +0 -0
  273. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/clipboard.py +0 -0
  274. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/deepreload.py +0 -0
  275. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/demo.py +0 -0
  276. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/display.py +0 -0
  277. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/editorhooks.py +0 -0
  278. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/guisupport.py +0 -0
  279. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/latextools.py +0 -0
  280. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/lexers.py +0 -0
  281. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/pretty.py +0 -0
  282. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/__init__.py +0 -0
  283. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test.wav +0 -0
  284. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_backgroundjobs.py +0 -0
  285. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_clipboard.py +0 -0
  286. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_deepreload.py +0 -0
  287. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_display.py +0 -0
  288. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_editorhooks.py +0 -0
  289. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_imports.py +0 -0
  290. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_latextools.py +0 -0
  291. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_lexers.py +0 -0
  292. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_pretty.py +0 -0
  293. {ipython-8.36.0 → ipython-8.38.0}/IPython/lib/tests/test_pygments.py +0 -0
  294. {ipython-8.36.0 → ipython-8.38.0}/IPython/paths.py +0 -0
  295. {ipython-8.36.0 → ipython-8.38.0}/IPython/py.typed +0 -0
  296. {ipython-8.36.0 → ipython-8.38.0}/IPython/sphinxext/__init__.py +0 -0
  297. {ipython-8.36.0 → ipython-8.38.0}/IPython/sphinxext/custom_doctests.py +0 -0
  298. {ipython-8.36.0 → ipython-8.38.0}/IPython/sphinxext/ipython_console_highlighting.py +0 -0
  299. {ipython-8.36.0 → ipython-8.38.0}/IPython/sphinxext/ipython_directive.py +0 -0
  300. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/__init__.py +0 -0
  301. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/console.py +0 -0
  302. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/debugger.py +0 -0
  303. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/embed.py +0 -0
  304. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/ipapp.py +0 -0
  305. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/magics.py +0 -0
  306. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/prompts.py +0 -0
  307. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/__init__.py +0 -0
  308. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/asyncio.py +0 -0
  309. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/glut.py +0 -0
  310. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/gtk.py +0 -0
  311. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/gtk3.py +0 -0
  312. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/gtk4.py +0 -0
  313. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/osx.py +0 -0
  314. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/pyglet.py +0 -0
  315. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/qt.py +0 -0
  316. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/tk.py +0 -0
  317. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/pt_inputhooks/wx.py +0 -0
  318. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/ptutils.py +0 -0
  319. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/shortcuts/__init__.py +0 -0
  320. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/shortcuts/auto_match.py +0 -0
  321. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/shortcuts/filters.py +0 -0
  322. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/tests/__init__.py +0 -0
  323. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/tests/test_debug_magic.py +0 -0
  324. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/tests/test_embed.py +0 -0
  325. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/tests/test_help.py +0 -0
  326. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/tests/test_interactivshell.py +0 -0
  327. {ipython-8.36.0 → ipython-8.38.0}/IPython/terminal/tests/test_pt_inputhooks.py +0 -0
  328. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/__init__.py +0 -0
  329. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/decorators.py +0 -0
  330. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/globalipapp.py +0 -0
  331. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/ipunittest.py +0 -0
  332. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/Makefile +0 -0
  333. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/README.txt +0 -0
  334. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/__init__.py +0 -0
  335. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/dtexample.py +0 -0
  336. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/ipdoctest.py +0 -0
  337. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/pytest_ipdoctest.py +0 -0
  338. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/setup.py +0 -0
  339. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/simple.py +0 -0
  340. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/simplevars.py +0 -0
  341. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/test_combo.txt +0 -0
  342. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/test_example.txt +0 -0
  343. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/test_exampleip.txt +0 -0
  344. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/test_ipdoctest.py +0 -0
  345. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/plugin/test_refs.py +0 -0
  346. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/skipdoctest.py +0 -0
  347. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/tests/__init__.py +0 -0
  348. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/tests/test_decorators.py +0 -0
  349. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/tests/test_ipunittest.py +0 -0
  350. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/tests/test_tools.py +0 -0
  351. {ipython-8.36.0 → ipython-8.38.0}/IPython/testing/tools.py +0 -0
  352. {ipython-8.36.0 → ipython-8.38.0}/IPython/tests/cve.py +0 -0
  353. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/PyColorize.py +0 -0
  354. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/__init__.py +0 -0
  355. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/_process_cli.py +0 -0
  356. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/_process_common.py +0 -0
  357. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/_process_emscripten.py +0 -0
  358. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/_process_posix.py +0 -0
  359. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/_process_win32.py +0 -0
  360. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/_process_win32_controller.py +0 -0
  361. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/capture.py +0 -0
  362. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/colorable.py +0 -0
  363. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/coloransi.py +0 -0
  364. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/contexts.py +0 -0
  365. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/daemonize.py +0 -0
  366. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/data.py +0 -0
  367. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/decorators.py +0 -0
  368. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/dir2.py +0 -0
  369. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/docs.py +0 -0
  370. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/encoding.py +0 -0
  371. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/eventful.py +0 -0
  372. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/frame.py +0 -0
  373. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/generics.py +0 -0
  374. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/importstring.py +0 -0
  375. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/io.py +0 -0
  376. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/ipstruct.py +0 -0
  377. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/jsonutil.py +0 -0
  378. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/localinterfaces.py +0 -0
  379. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/log.py +0 -0
  380. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/module_paths.py +0 -0
  381. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/openpy.py +0 -0
  382. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/path.py +0 -0
  383. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/process.py +0 -0
  384. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/py3compat.py +0 -0
  385. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/sentinel.py +0 -0
  386. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/shimmodule.py +0 -0
  387. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/signatures.py +0 -0
  388. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/strdispatch.py +0 -0
  389. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/sysinfo.py +0 -0
  390. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/syspathcontext.py +0 -0
  391. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tempdir.py +0 -0
  392. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/terminal.py +0 -0
  393. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/__init__.py +0 -0
  394. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_capture.py +0 -0
  395. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_decorators.py +0 -0
  396. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_deprecated.py +0 -0
  397. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_dir2.py +0 -0
  398. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_imports.py +0 -0
  399. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_importstring.py +0 -0
  400. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_io.py +0 -0
  401. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_module_paths.py +0 -0
  402. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_openpy.py +0 -0
  403. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_path.py +0 -0
  404. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_process.py +0 -0
  405. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_pycolorize.py +0 -0
  406. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_shimmodule.py +0 -0
  407. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_sysinfo.py +0 -0
  408. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_tempdir.py +0 -0
  409. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_text.py +0 -0
  410. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_tokenutil.py +0 -0
  411. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tests/test_wildcard.py +0 -0
  412. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/text.py +0 -0
  413. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/timing.py +0 -0
  414. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tokenutil.py +0 -0
  415. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/traitlets.py +0 -0
  416. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/tz.py +0 -0
  417. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/ulinecache.py +0 -0
  418. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/version.py +0 -0
  419. {ipython-8.36.0 → ipython-8.38.0}/IPython/utils/wildcard.py +0 -0
  420. {ipython-8.36.0 → ipython-8.38.0}/LICENSE +0 -0
  421. {ipython-8.36.0 → ipython-8.38.0}/MANIFEST.in +0 -0
  422. {ipython-8.36.0 → ipython-8.38.0}/README.rst +0 -0
  423. {ipython-8.36.0 → ipython-8.38.0}/_build_meta.py +0 -0
  424. {ipython-8.36.0 → ipython-8.38.0}/docs/Makefile +0 -0
  425. {ipython-8.36.0 → ipython-8.38.0}/docs/README.rst +0 -0
  426. {ipython-8.36.0 → ipython-8.38.0}/docs/autogen_api.py +0 -0
  427. {ipython-8.36.0 → ipython-8.38.0}/docs/autogen_config.py +0 -0
  428. {ipython-8.36.0 → ipython-8.38.0}/docs/autogen_magics.py +0 -0
  429. {ipython-8.36.0 → ipython-8.38.0}/docs/autogen_shortcuts.py +0 -0
  430. {ipython-8.36.0 → ipython-8.38.0}/docs/make.cmd +0 -0
  431. {ipython-8.36.0 → ipython-8.38.0}/docs/man/ipython.1 +0 -0
  432. {ipython-8.36.0 → ipython-8.38.0}/docs/requirements.txt +0 -0
  433. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/2.0/running-crop.png +0 -0
  434. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/2.0/running.png +0 -0
  435. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/2.0/treeview.png +0 -0
  436. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/2.0/user-interface.png +0 -0
  437. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/2.0/widgets.png +0 -0
  438. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_1_prompt_no_text.png +0 -0
  439. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_2_print_hello_suggest.png +0 -0
  440. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_3_print_hello_suggest.png +0 -0
  441. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_4_print_hello.png +0 -0
  442. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_d_completions.png +0 -0
  443. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_d_phantom.png +0 -0
  444. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_def_completions.png +0 -0
  445. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_def_phantom.png +0 -0
  446. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_match_parens.png +0 -0
  447. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/auto_suggest_second_prompt.png +0 -0
  448. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/8.0/pathlib_pathlib_everywhere.jpg +0 -0
  449. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/autosuggest.gif +0 -0
  450. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_dashboard.png +0 -0
  451. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_dashboard_cluster.png +0 -0
  452. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_notebook_cythonmagic.png +0 -0
  453. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_notebook_long_out.png +0 -0
  454. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_notebook_octavemagic.png +0 -0
  455. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_notebook_rmagic.png +0 -0
  456. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_notebook_script_cells.png +0 -0
  457. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_notebook_spectrogram.png +0 -0
  458. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_notebook_tooltip.png +0 -0
  459. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_par_tb.png +0 -0
  460. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_qtconsole_baboon.png +0 -0
  461. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipy_013_qtconsole_completer.png +0 -0
  462. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ipython-6-screenshot.png +0 -0
  463. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/jedi_type_inference_60.png +0 -0
  464. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/kernel_selector_screenshot.png +0 -0
  465. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ms_visual_studio.png +0 -0
  466. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/notebook_specgram.png +0 -0
  467. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/ptshell_features.png +0 -0
  468. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/qtconsole.png +0 -0
  469. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/qtconsole_tabbed.png +0 -0
  470. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_images/unicode_completion.png +0 -0
  471. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_static/favicon.ico +0 -0
  472. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_static/logo.png +0 -0
  473. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_static/theme_overrides.css +0 -0
  474. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_templates/breadcrumbs.html +0 -0
  475. {ipython-8.36.0 → ipython-8.38.0}/docs/source/_templates/notebook_redirect.html +0 -0
  476. {ipython-8.36.0 → ipython-8.38.0}/docs/source/about/history.rst +0 -0
  477. {ipython-8.36.0 → ipython-8.38.0}/docs/source/about/index.rst +0 -0
  478. {ipython-8.36.0 → ipython-8.38.0}/docs/source/about/license_and_copyright.rst +0 -0
  479. {ipython-8.36.0 → ipython-8.38.0}/docs/source/api/index.rst +0 -0
  480. {ipython-8.36.0 → ipython-8.38.0}/docs/source/conf.py +0 -0
  481. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/callbacks.rst +0 -0
  482. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/custommagics.rst +0 -0
  483. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/details.rst +0 -0
  484. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/eventloops.rst +0 -0
  485. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/extensions/autoreload.rst +0 -0
  486. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/extensions/index.rst +0 -0
  487. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/extensions/storemagic.rst +0 -0
  488. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/index.rst +0 -0
  489. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/inputtransforms.rst +0 -0
  490. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/integrating.rst +0 -0
  491. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/intro.rst +0 -0
  492. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/options/index.rst +0 -0
  493. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/shell_mimerenderer.rst +0 -0
  494. {ipython-8.36.0 → ipython-8.38.0}/docs/source/config/shortcuts/index.rst +0 -0
  495. {ipython-8.36.0 → ipython-8.38.0}/docs/source/coredev/index.rst +0 -0
  496. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/config.rst +0 -0
  497. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/execution.rst +0 -0
  498. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/figs/ipy_kernel_and_terminal.png +0 -0
  499. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/figs/ipy_kernel_and_terminal.svg +0 -0
  500. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/figs/other_kernels.png +0 -0
  501. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/figs/other_kernels.svg +0 -0
  502. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/how_ipython_works.rst +0 -0
  503. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/index.rst +0 -0
  504. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/inputhook_app.rst +0 -0
  505. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/kernels.rst +0 -0
  506. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/lexer.rst +0 -0
  507. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/messaging.rst +0 -0
  508. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/pycompat.rst +0 -0
  509. {ipython-8.36.0 → ipython-8.38.0}/docs/source/development/wrapperkernels.rst +0 -0
  510. {ipython-8.36.0 → ipython-8.38.0}/docs/source/index.rst +0 -0
  511. {ipython-8.36.0 → ipython-8.38.0}/docs/source/install/index.rst +0 -0
  512. {ipython-8.36.0 → ipython-8.38.0}/docs/source/install/install.rst +0 -0
  513. {ipython-8.36.0 → ipython-8.38.0}/docs/source/install/kernel_install.rst +0 -0
  514. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/autoawait.rst +0 -0
  515. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/figs/besselj.png +0 -0
  516. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/figs/colors_dark.png +0 -0
  517. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/figs/jn.html +0 -0
  518. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/figs/jn.xhtml +0 -0
  519. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/index.rst +0 -0
  520. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/magics.rst +0 -0
  521. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/plotting.rst +0 -0
  522. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/python-ipython-diff.rst +0 -0
  523. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/reference.rst +0 -0
  524. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/shell.rst +0 -0
  525. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/tips.rst +0 -0
  526. {ipython-8.36.0 → ipython-8.38.0}/docs/source/interactive/tutorial.rst +0 -0
  527. {ipython-8.36.0 → ipython-8.38.0}/docs/source/links.txt +0 -0
  528. {ipython-8.36.0 → ipython-8.38.0}/docs/source/overview.rst +0 -0
  529. {ipython-8.36.0 → ipython-8.38.0}/docs/source/parallel/index.rst +0 -0
  530. {ipython-8.36.0 → ipython-8.38.0}/docs/source/sphinx.toml +0 -0
  531. {ipython-8.36.0 → ipython-8.38.0}/docs/source/sphinxext.rst +0 -0
  532. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/development.rst +0 -0
  533. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-0.11.rst +0 -0
  534. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-0.12.rst +0 -0
  535. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-0.13.rst +0 -0
  536. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-1.0.rst +0 -0
  537. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-2.0.rst +0 -0
  538. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-3.rst +0 -0
  539. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-4.rst +0 -0
  540. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-5.rst +0 -0
  541. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-6.rst +0 -0
  542. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-7.rst +0 -0
  543. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/github-stats-8.rst +0 -0
  544. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/index.rst +0 -0
  545. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/pr/README.md +0 -0
  546. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/pr/antigravity-feature.rst +0 -0
  547. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/pr/incompat-switching-to-perl.rst +0 -0
  548. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version0.10.rst +0 -0
  549. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version0.11.rst +0 -0
  550. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version0.12.rst +0 -0
  551. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version0.13.rst +0 -0
  552. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version0.8.rst +0 -0
  553. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version0.9.rst +0 -0
  554. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version1.0.rst +0 -0
  555. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version2.0.rst +0 -0
  556. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version3.rst +0 -0
  557. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version3_widget_migration.rst +0 -0
  558. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version4.rst +0 -0
  559. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version5.rst +0 -0
  560. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version6.rst +0 -0
  561. {ipython-8.36.0 → ipython-8.38.0}/docs/source/whatsnew/version7.rst +0 -0
  562. {ipython-8.36.0 → ipython-8.38.0}/docs/sphinxext/apigen.py +0 -0
  563. {ipython-8.36.0 → ipython-8.38.0}/docs/sphinxext/configtraits.py +0 -0
  564. {ipython-8.36.0 → ipython-8.38.0}/docs/sphinxext/github.py +0 -0
  565. {ipython-8.36.0 → ipython-8.38.0}/docs/sphinxext/magics.py +0 -0
  566. {ipython-8.36.0 → ipython-8.38.0}/examples/Embedding/Index.ipynb +0 -0
  567. {ipython-8.36.0 → ipython-8.38.0}/examples/Embedding/embed_class_long.py +0 -0
  568. {ipython-8.36.0 → ipython-8.38.0}/examples/Embedding/embed_class_short.py +0 -0
  569. {ipython-8.36.0 → ipython-8.38.0}/examples/Embedding/embed_function.py +0 -0
  570. {ipython-8.36.0 → ipython-8.38.0}/examples/Embedding/start_ipython_config.py +0 -0
  571. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Animations Using clear_output.ipynb +0 -0
  572. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Background Jobs.ipynb +0 -0
  573. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Beyond Plain Python.ipynb +0 -0
  574. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Capturing Output.ipynb +0 -0
  575. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Cell Magics.ipynb +0 -0
  576. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Custom Display Logic.ipynb +0 -0
  577. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Importing Notebooks.ipynb +0 -0
  578. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Index.ipynb +0 -0
  579. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Plotting in the Notebook.ipynb +0 -0
  580. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Raw Input in the Notebook.ipynb +0 -0
  581. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Rich Output.ipynb +0 -0
  582. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Script Magics.ipynb +0 -0
  583. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/SymPy.ipynb +0 -0
  584. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Terminal Usage.ipynb +0 -0
  585. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Third Party Rich Output.ipynb +0 -0
  586. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Trapezoid Rule.ipynb +0 -0
  587. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Updating Displays.ipynb +0 -0
  588. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/Working With External Code.ipynb +0 -0
  589. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/data/flare.json +0 -0
  590. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/example-demo.py +0 -0
  591. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/gui/gui-glut.py +0 -0
  592. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/gui/gui-gtk4.py +0 -0
  593. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/gui/gui-qt.py +0 -0
  594. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/ipython-completion.bash +0 -0
  595. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/ipython-get-history.py +0 -0
  596. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/ipython.desktop +0 -0
  597. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/nbpackage/__init__.py +0 -0
  598. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/nbpackage/mynotebook.ipynb +0 -0
  599. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/nbpackage/nbs/__init__.py +0 -0
  600. {ipython-8.36.0 → ipython-8.38.0}/examples/IPython Kernel/nbpackage/nbs/other.ipynb +0 -0
  601. {ipython-8.36.0 → ipython-8.38.0}/examples/Index.ipynb +0 -0
  602. {ipython-8.36.0 → ipython-8.38.0}/examples/images/FrontendKernel.graffle/data.plist +0 -0
  603. {ipython-8.36.0 → ipython-8.38.0}/examples/images/FrontendKernel.graffle/image1.png +0 -0
  604. {ipython-8.36.0 → ipython-8.38.0}/examples/images/FrontendKernel.png +0 -0
  605. {ipython-8.36.0 → ipython-8.38.0}/examples/images/animation.m4v +0 -0
  606. {ipython-8.36.0 → ipython-8.38.0}/examples/images/ipython_logo.png +0 -0
  607. {ipython-8.36.0 → ipython-8.38.0}/examples/images/python_logo.svg +0 -0
  608. {ipython-8.36.0 → ipython-8.38.0}/examples/utils/cwd_prompt.py +0 -0
  609. {ipython-8.36.0 → ipython-8.38.0}/examples/utils/list_pyfiles.ipy +0 -0
  610. {ipython-8.36.0 → ipython-8.38.0}/examples/utils/list_subdirs.ipy +0 -0
  611. {ipython-8.36.0 → ipython-8.38.0}/ipython.egg-info/dependency_links.txt +0 -0
  612. {ipython-8.36.0 → ipython-8.38.0}/ipython.egg-info/entry_points.txt +0 -0
  613. {ipython-8.36.0 → ipython-8.38.0}/ipython.egg-info/not-zip-safe +0 -0
  614. {ipython-8.36.0 → ipython-8.38.0}/ipython.egg-info/requires.txt +0 -0
  615. {ipython-8.36.0 → ipython-8.38.0}/ipython.egg-info/top_level.txt +0 -0
  616. {ipython-8.36.0 → ipython-8.38.0}/long_description.rst +0 -0
  617. {ipython-8.36.0 → ipython-8.38.0}/pyproject.toml +0 -0
  618. {ipython-8.36.0 → ipython-8.38.0}/scripts/ipython.ico +0 -0
  619. {ipython-8.36.0 → ipython-8.38.0}/scripts/ipython_nb.ico +0 -0
  620. {ipython-8.36.0 → ipython-8.38.0}/setup.cfg +0 -0
  621. {ipython-8.36.0 → ipython-8.38.0}/setup.py +0 -0
  622. {ipython-8.36.0 → ipython-8.38.0}/setupbase.py +0 -0
@@ -1145,6 +1145,48 @@ class Completer(Configurable):
1145
1145
  # we simple attribute matching with normal identifiers.
1146
1146
  _ATTR_MATCH_RE = re.compile(r"(.+)\.(\w*)$")
1147
1147
 
1148
+ def _strip_code_before_operator(self, code: str) -> str:
1149
+ o_parens = {"(", "[", "{"}
1150
+ c_parens = {")", "]", "}"}
1151
+
1152
+ # Dry-run tokenize to catch errors
1153
+ try:
1154
+ _ = list(tokenize.generate_tokens(iter(code.splitlines()).__next__))
1155
+ except tokenize.TokenError:
1156
+ # Try trimming the expression and retrying
1157
+ trimmed_code = self._trim_expr(code)
1158
+ try:
1159
+ _ = list(
1160
+ tokenize.generate_tokens(iter(trimmed_code.splitlines()).__next__)
1161
+ )
1162
+ code = trimmed_code
1163
+ except tokenize.TokenError:
1164
+ return code
1165
+
1166
+ tokens = _parse_tokens(code)
1167
+ encountered_operator = False
1168
+ after_operator = []
1169
+ nesting_level = 0
1170
+
1171
+ for t in tokens:
1172
+ if t.type == tokenize.OP:
1173
+ if t.string in o_parens:
1174
+ nesting_level += 1
1175
+ elif t.string in c_parens:
1176
+ nesting_level -= 1
1177
+ elif t.string != "." and nesting_level == 0:
1178
+ encountered_operator = True
1179
+ after_operator = []
1180
+ continue
1181
+
1182
+ if encountered_operator:
1183
+ after_operator.append(t.string)
1184
+
1185
+ if encountered_operator:
1186
+ return "".join(after_operator)
1187
+ else:
1188
+ return code
1189
+
1148
1190
  def _attr_matches(
1149
1191
  self, text: str, include_prefix: bool = True
1150
1192
  ) -> Tuple[Sequence[str], str]:
@@ -1152,9 +1194,12 @@ class Completer(Configurable):
1152
1194
  if not m2:
1153
1195
  return [], ""
1154
1196
  expr, attr = m2.group(1, 2)
1197
+ try:
1198
+ expr = self._strip_code_before_operator(expr)
1199
+ except tokenize.TokenError:
1200
+ pass
1155
1201
 
1156
1202
  obj = self._evaluate_expr(expr)
1157
-
1158
1203
  if obj is not_found:
1159
1204
  return [], ""
1160
1205
 
@@ -248,13 +248,7 @@ class Pdb(OldPdb):
248
248
  docs for more info.
249
249
  """
250
250
 
251
- # Parent constructor:
252
- try:
253
- self.context = int(context)
254
- if self.context <= 0:
255
- raise ValueError("Context must be a positive integer")
256
- except (TypeError, ValueError) as e:
257
- raise ValueError("Context must be a positive integer") from e
251
+ self.context = int(context)
258
252
 
259
253
  # `kwargs` ensures full compatibility with stdlib's `pdb.Pdb`.
260
254
  OldPdb.__init__(self, completekey, stdin, stdout, **kwargs)
@@ -490,14 +484,9 @@ class Pdb(OldPdb):
490
484
  ColorsNormal = Colors.Normal
491
485
  if context is None:
492
486
  context = self.context
493
- try:
494
- context = int(context)
495
- if context <= 0:
496
- raise ValueError("Context must be a positive integer")
497
- except (TypeError, ValueError) as e:
498
- raise ValueError("Context must be a positive integer") from e
499
487
  try:
500
488
  skipped = 0
489
+ to_print = ""
501
490
  for hidden, frame_lineno in zip(self.hidden_frames(self.stack), self.stack):
502
491
  if hidden and self.skip_hidden:
503
492
  skipped += 1
@@ -507,31 +496,21 @@ class Pdb(OldPdb):
507
496
  f"{Colors.excName} [... skipping {skipped} hidden frame(s)]{ColorsNormal}\n"
508
497
  )
509
498
  skipped = 0
510
- self.print_stack_entry(frame_lineno, context=context)
499
+ to_print += self.format_stack_entry(frame_lineno)
511
500
  if skipped:
512
- print(
501
+ to_print += (
513
502
  f"{Colors.excName} [... skipping {skipped} hidden frame(s)]{ColorsNormal}\n"
514
503
  )
504
+ print(to_print, file=self.stdout)
515
505
  except KeyboardInterrupt:
516
506
  pass
517
507
 
518
- def print_stack_entry(self, frame_lineno, prompt_prefix='\n-> ',
519
- context=None):
520
- if context is None:
521
- context = self.context
522
- try:
523
- context = int(context)
524
- if context <= 0:
525
- raise ValueError("Context must be a positive integer")
526
- except (TypeError, ValueError) as e:
527
- raise ValueError("Context must be a positive integer") from e
528
- print(self.format_stack_entry(frame_lineno, '', context), file=self.stdout)
508
+ def print_stack_entry(self, frame_lineno, prompt_prefix='\n-> '):
509
+ print(self.format_stack_entry(frame_lineno, ''), file=self.stdout)
529
510
 
530
- # vds: >>
531
511
  frame, lineno = frame_lineno
532
512
  filename = frame.f_code.co_filename
533
513
  self.shell.hooks.synchronize_with_editor(filename, lineno, 0)
534
- # vds: <<
535
514
 
536
515
  def _get_frame_locals(self, frame):
537
516
  """ "
@@ -555,15 +534,14 @@ class Pdb(OldPdb):
555
534
  else:
556
535
  return frame.f_locals
557
536
 
558
- def format_stack_entry(self, frame_lineno, lprefix=': ', context=None):
559
- if context is None:
560
- context = self.context
537
+ def format_stack_entry(self, frame_lineno, lprefix=': '):
538
+ context = self.context
561
539
  try:
562
540
  context = int(context)
563
541
  if context <= 0:
564
542
  print("Context must be a positive integer", file=self.stdout)
565
543
  except (TypeError, ValueError):
566
- print("Context must be a positive integer", file=self.stdout)
544
+ print("Context must be a positive integer", file=self.stdout)
567
545
 
568
546
  import reprlib
569
547
 
@@ -16,7 +16,7 @@
16
16
  # release. 'dev' as a _version_extra string means this is a development
17
17
  # version
18
18
  _version_major = 8
19
- _version_minor = 36
19
+ _version_minor = 38
20
20
  _version_patch = 0
21
21
  _version_extra = ".dev"
22
22
  # _version_extra = "rc1"
@@ -595,7 +595,9 @@ class TestCompleter(unittest.TestCase):
595
595
  """
596
596
  ip = get_ipython()
597
597
  ip.ex("a=list(range(5))")
598
+ ip.ex("b,c = 1, 1.2")
598
599
  ip.ex("d = {'a b': str}")
600
+ ip.ex("x=y='a'")
599
601
  _, c = ip.complete(".", line="a[0].")
600
602
  self.assertFalse(".real" in c, "Shouldn't have completed on a[0]: %s" % c)
601
603
 
@@ -653,6 +655,41 @@ class TestCompleter(unittest.TestCase):
653
655
  "Should have completed on `a.app`: %s",
654
656
  Completion(2, 4, "append"),
655
657
  )
658
+ _(
659
+ "x.upper() == y.",
660
+ 15,
661
+ ".upper",
662
+ "Should have completed on `x.upper() == y.`: %s",
663
+ Completion(15, 15, "upper"),
664
+ )
665
+ _(
666
+ "(x.upper() == y.",
667
+ 16,
668
+ ".upper",
669
+ "Should have completed on `(x.upper() == y.`: %s",
670
+ Completion(16, 16, "upper"),
671
+ )
672
+ _(
673
+ "(x.upper() == y).",
674
+ 17,
675
+ ".bit_length",
676
+ "Should have completed on `(x.upper() == y).`: %s",
677
+ Completion(17, 17, "bit_length"),
678
+ )
679
+ _(
680
+ "{'==', 'abc'}.",
681
+ 14,
682
+ ".add",
683
+ "Should have completed on `{'==', 'abc'}.`: %s",
684
+ Completion(14, 14, "add"),
685
+ )
686
+ _(
687
+ "b + c.",
688
+ 6,
689
+ ".hex",
690
+ "Should have completed on `b + c.`: %s",
691
+ Completion(6, 6, "hex"),
692
+ )
656
693
 
657
694
  def test_omit__names(self):
658
695
  # also happens to test IPCompleter as a configurable
@@ -502,13 +502,16 @@ class TerminalInteractiveShell(InteractiveShell):
502
502
  elif provider == "NavigableAutoSuggestFromHistory":
503
503
  # LLM stuff are all Provisional in 8.32
504
504
  if self._llm_provider_class:
505
- llm_provider_constructor = import_item(self._llm_provider_class)
506
- llm_provider = llm_provider_constructor(**self.llm_constructor_kwargs)
505
+
506
+ def init_llm_provider():
507
+ llm_provider_constructor = import_item(self._llm_provider_class)
508
+ return llm_provider_constructor(**self.llm_constructor_kwargs)
509
+
507
510
  else:
508
- llm_provider = None
511
+ init_llm_provider = None
509
512
  self.auto_suggest = NavigableAutoSuggestFromHistory()
510
513
  # Provisinal in 8.32
511
- self.auto_suggest._llm_provider = llm_provider
514
+ self.auto_suggest._init_llm_provider = init_llm_provider
512
515
 
513
516
  name = self.llm_prefix_from_history
514
517
 
@@ -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):
@@ -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,7 +1,8 @@
1
1
  import asyncio
2
+ from time import sleep
2
3
 
3
4
  try:
4
- from jupyter_ai_magics import BaseProvider
5
+ from jupyter_ai_magics.providers import BaseProvider
5
6
  from langchain_community.llms import FakeListLLM
6
7
  except ImportError:
7
8
 
@@ -87,3 +88,16 @@ class FibonacciCompletionProvider(BaseProvider, FakeListLLM): # type: ignore[mi
87
88
  reply_to=request_number,
88
89
  done=True,
89
90
  )
91
+
92
+
93
+ class SlowStartingCompletionProvider(BaseProvider, FakeListLLM): # type: ignore[misc, valid-type]
94
+ id = "slow_provider"
95
+ name = "Slow Provider"
96
+ model_id_key = "model"
97
+ models = ["model_a"]
98
+
99
+ def __init__(self, **kwargs):
100
+ kwargs["responses"] = ["This fake response will be used for completion"]
101
+ kwargs["model_id"] = "model_a"
102
+ sleep(10)
103
+ super().__init__(**kwargs)
@@ -1,4 +1,5 @@
1
1
  import pytest
2
+ import time
2
3
  from IPython.terminal.interactiveshell import PtkHistoryAdapter
3
4
  from IPython.terminal.shortcuts.auto_suggest import (
4
5
  accept,
@@ -68,6 +69,17 @@ async def test_llm_autosuggestion():
68
69
  assert event.current_buffer.suggestion.text == FIBONACCI[len(text) :]
69
70
 
70
71
 
72
+ def test_slow_llm_provider_should_not_block_init():
73
+ ip = get_ipython()
74
+ provider = NavigableAutoSuggestFromHistory()
75
+ ip.auto_suggest = provider
76
+ start = time.perf_counter()
77
+ ip.llm_provider_class = "tests.fake_llm.SlowStartingCompletionProvider"
78
+ end = time.perf_counter()
79
+ elapsed = end - start
80
+ assert elapsed < 0.1
81
+
82
+
71
83
  @pytest.mark.parametrize(
72
84
  "text, suggestion, expected",
73
85
  [
@@ -1,2 +1,2 @@
1
1
  # GENERATED BY setup.py
2
- commit = "3525cd4bc"
2
+ commit = "f014fa10d"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipython
3
- Version: 8.36.0
3
+ Version: 8.38.0
4
4
  Summary: IPython: Productive Interactive Computing
5
5
  Author: The IPython Development Team
6
6
  Author-email: ipython-dev@python.org
@@ -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
@@ -68,13 +68,13 @@ import asyncio
68
68
  import textwrap
69
69
  from typing import Any, AsyncIterable, AsyncIterator
70
70
 
71
- from jupyter_ai.completions.models import (
71
+ from jupyter_ai_magics.models.completion import (
72
72
  InlineCompletionList,
73
73
  InlineCompletionReply,
74
74
  InlineCompletionRequest,
75
75
  InlineCompletionStreamChunk,
76
76
  )
77
- from jupyter_ai_magics import BaseProvider
77
+ from jupyter_ai_magics.providers import BaseProvider
78
78
  from langchain_community.llms import FakeListLLM
79
79
 
80
80
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipython
3
- Version: 8.36.0
3
+ Version: 8.38.0
4
4
  Summary: IPython: Productive Interactive Computing
5
5
  Author: The IPython Development Team
6
6
  Author-email: ipython-dev@python.org
@@ -304,11 +304,7 @@ docs/autogen_api.py
304
304
  docs/autogen_config.py
305
305
  docs/autogen_magics.py
306
306
  docs/autogen_shortcuts.py
307
- docs/hist_simple.png
308
- docs/hist_with_text.png
309
307
  docs/make.cmd
310
- docs/plot_simple.png
311
- docs/plot_simple_python.png
312
308
  docs/requirements.txt
313
309
  docs/man/ipython.1
314
310
  docs/source/conf.py
@@ -364,121 +360,6 @@ docs/source/about/history.rst
364
360
  docs/source/about/index.rst
365
361
  docs/source/about/license_and_copyright.rst
366
362
  docs/source/api/index.rst
367
- docs/source/api/generated/IPython.conftest.rst
368
- docs/source/api/generated/IPython.core.alias.rst
369
- docs/source/api/generated/IPython.core.application.rst
370
- docs/source/api/generated/IPython.core.async_helpers.rst
371
- docs/source/api/generated/IPython.core.autocall.rst
372
- docs/source/api/generated/IPython.core.builtin_trap.rst
373
- docs/source/api/generated/IPython.core.compilerop.rst
374
- docs/source/api/generated/IPython.core.completer.rst
375
- docs/source/api/generated/IPython.core.completerlib.rst
376
- docs/source/api/generated/IPython.core.crashhandler.rst
377
- docs/source/api/generated/IPython.core.debugger.rst
378
- docs/source/api/generated/IPython.core.error.rst
379
- docs/source/api/generated/IPython.core.events.rst
380
- docs/source/api/generated/IPython.core.excolors.rst
381
- docs/source/api/generated/IPython.core.extensions.rst
382
- docs/source/api/generated/IPython.core.formatters.rst
383
- docs/source/api/generated/IPython.core.getipython.rst
384
- docs/source/api/generated/IPython.core.guarded_eval.rst
385
- docs/source/api/generated/IPython.core.history.rst
386
- docs/source/api/generated/IPython.core.historyapp.rst
387
- docs/source/api/generated/IPython.core.hooks.rst
388
- docs/source/api/generated/IPython.core.inputsplitter.rst
389
- docs/source/api/generated/IPython.core.inputtransformer.rst
390
- docs/source/api/generated/IPython.core.inputtransformer2.rst
391
- docs/source/api/generated/IPython.core.interactiveshell.rst
392
- docs/source/api/generated/IPython.core.logger.rst
393
- docs/source/api/generated/IPython.core.macro.rst
394
- docs/source/api/generated/IPython.core.magic.rst
395
- docs/source/api/generated/IPython.core.magic_arguments.rst
396
- docs/source/api/generated/IPython.core.magics.ast_mod.rst
397
- docs/source/api/generated/IPython.core.magics.auto.rst
398
- docs/source/api/generated/IPython.core.magics.basic.rst
399
- docs/source/api/generated/IPython.core.magics.code.rst
400
- docs/source/api/generated/IPython.core.magics.display.rst
401
- docs/source/api/generated/IPython.core.magics.execution.rst
402
- docs/source/api/generated/IPython.core.magics.extension.rst
403
- docs/source/api/generated/IPython.core.magics.history.rst
404
- docs/source/api/generated/IPython.core.magics.logging.rst
405
- docs/source/api/generated/IPython.core.magics.namespace.rst
406
- docs/source/api/generated/IPython.core.magics.osm.rst
407
- docs/source/api/generated/IPython.core.magics.packaging.rst
408
- docs/source/api/generated/IPython.core.magics.pylab.rst
409
- docs/source/api/generated/IPython.core.magics.rst
410
- docs/source/api/generated/IPython.core.magics.script.rst
411
- docs/source/api/generated/IPython.core.oinspect.rst
412
- docs/source/api/generated/IPython.core.page.rst
413
- docs/source/api/generated/IPython.core.payload.rst
414
- docs/source/api/generated/IPython.core.payloadpage.rst
415
- docs/source/api/generated/IPython.core.prefilter.rst
416
- docs/source/api/generated/IPython.core.profileapp.rst
417
- docs/source/api/generated/IPython.core.profiledir.rst
418
- docs/source/api/generated/IPython.core.prompts.rst
419
- docs/source/api/generated/IPython.core.pylabtools.rst
420
- docs/source/api/generated/IPython.core.shellapp.rst
421
- docs/source/api/generated/IPython.core.splitinput.rst
422
- docs/source/api/generated/IPython.core.ultratb.rst
423
- docs/source/api/generated/IPython.display.rst
424
- docs/source/api/generated/IPython.lib.backgroundjobs.rst
425
- docs/source/api/generated/IPython.lib.clipboard.rst
426
- docs/source/api/generated/IPython.lib.deepreload.rst
427
- docs/source/api/generated/IPython.lib.demo.rst
428
- docs/source/api/generated/IPython.lib.editorhooks.rst
429
- docs/source/api/generated/IPython.lib.guisupport.rst
430
- docs/source/api/generated/IPython.lib.latextools.rst
431
- docs/source/api/generated/IPython.lib.lexers.rst
432
- docs/source/api/generated/IPython.lib.pretty.rst
433
- docs/source/api/generated/IPython.paths.rst
434
- docs/source/api/generated/IPython.rst
435
- docs/source/api/generated/IPython.terminal.debugger.rst
436
- docs/source/api/generated/IPython.terminal.embed.rst
437
- docs/source/api/generated/IPython.terminal.interactiveshell.rst
438
- docs/source/api/generated/IPython.terminal.ipapp.rst
439
- docs/source/api/generated/IPython.terminal.magics.rst
440
- docs/source/api/generated/IPython.terminal.prompts.rst
441
- docs/source/api/generated/IPython.terminal.shortcuts.auto_match.rst
442
- docs/source/api/generated/IPython.terminal.shortcuts.auto_suggest.rst
443
- docs/source/api/generated/IPython.terminal.shortcuts.filters.rst
444
- docs/source/api/generated/IPython.terminal.shortcuts.rst
445
- docs/source/api/generated/IPython.testing.decorators.rst
446
- docs/source/api/generated/IPython.testing.globalipapp.rst
447
- docs/source/api/generated/IPython.testing.ipunittest.rst
448
- docs/source/api/generated/IPython.testing.skipdoctest.rst
449
- docs/source/api/generated/IPython.testing.tools.rst
450
- docs/source/api/generated/IPython.utils.PyColorize.rst
451
- docs/source/api/generated/IPython.utils.capture.rst
452
- docs/source/api/generated/IPython.utils.colorable.rst
453
- docs/source/api/generated/IPython.utils.coloransi.rst
454
- docs/source/api/generated/IPython.utils.contexts.rst
455
- docs/source/api/generated/IPython.utils.data.rst
456
- docs/source/api/generated/IPython.utils.decorators.rst
457
- docs/source/api/generated/IPython.utils.dir2.rst
458
- docs/source/api/generated/IPython.utils.encoding.rst
459
- docs/source/api/generated/IPython.utils.frame.rst
460
- docs/source/api/generated/IPython.utils.generics.rst
461
- docs/source/api/generated/IPython.utils.importstring.rst
462
- docs/source/api/generated/IPython.utils.io.rst
463
- docs/source/api/generated/IPython.utils.ipstruct.rst
464
- docs/source/api/generated/IPython.utils.module_paths.rst
465
- docs/source/api/generated/IPython.utils.openpy.rst
466
- docs/source/api/generated/IPython.utils.path.rst
467
- docs/source/api/generated/IPython.utils.process.rst
468
- docs/source/api/generated/IPython.utils.sentinel.rst
469
- docs/source/api/generated/IPython.utils.shimmodule.rst
470
- docs/source/api/generated/IPython.utils.strdispatch.rst
471
- docs/source/api/generated/IPython.utils.sysinfo.rst
472
- docs/source/api/generated/IPython.utils.syspathcontext.rst
473
- docs/source/api/generated/IPython.utils.tempdir.rst
474
- docs/source/api/generated/IPython.utils.terminal.rst
475
- docs/source/api/generated/IPython.utils.text.rst
476
- docs/source/api/generated/IPython.utils.timing.rst
477
- docs/source/api/generated/IPython.utils.tokenutil.rst
478
- docs/source/api/generated/IPython.utils.tz.rst
479
- docs/source/api/generated/IPython.utils.ulinecache.rst
480
- docs/source/api/generated/IPython.utils.wildcard.rst
481
- docs/source/api/generated/gen.txt
482
363
  docs/source/config/callbacks.rst
483
364
  docs/source/config/custommagics.rst
484
365
  docs/source/config/details.rst
@@ -491,11 +372,8 @@ docs/source/config/shell_mimerenderer.rst
491
372
  docs/source/config/extensions/autoreload.rst
492
373
  docs/source/config/extensions/index.rst
493
374
  docs/source/config/extensions/storemagic.rst
494
- docs/source/config/options/config-generated.txt
495
375
  docs/source/config/options/index.rst
496
- docs/source/config/options/terminal.rst
497
376
  docs/source/config/shortcuts/index.rst
498
- docs/source/config/shortcuts/table.tsv
499
377
  docs/source/coredev/index.rst
500
378
  docs/source/development/config.rst
501
379
  docs/source/development/execution.rst
@@ -516,7 +394,6 @@ docs/source/install/install.rst
516
394
  docs/source/install/kernel_install.rst
517
395
  docs/source/interactive/autoawait.rst
518
396
  docs/source/interactive/index.rst
519
- docs/source/interactive/magics-generated.txt
520
397
  docs/source/interactive/magics.rst
521
398
  docs/source/interactive/plotting.rst
522
399
  docs/source/interactive/python-ipython-diff.rst
Binary file
Binary file
Binary file
Binary file
@@ -1,28 +0,0 @@
1
- .. AUTO-GENERATED FILE -- DO NOT EDIT!
2
-
3
- Module: :mod:`conftest`
4
- =======================
5
- .. automodule:: IPython.conftest
6
-
7
- .. currentmodule:: IPython.conftest
8
-
9
- 6 Functions
10
- -----------
11
-
12
- .. autofunction:: IPython.conftest.pytest_collection_modifyitems
13
-
14
-
15
- .. autofunction:: IPython.conftest.get_ipython
16
-
17
-
18
- .. autofunction:: IPython.conftest.work_path
19
-
20
-
21
- .. autofunction:: IPython.conftest.nopage
22
-
23
-
24
- .. autofunction:: IPython.conftest.xsys
25
-
26
-
27
- .. autofunction:: IPython.conftest.inject
28
-
@@ -1,36 +0,0 @@
1
- .. AUTO-GENERATED FILE -- DO NOT EDIT!
2
-
3
- Module: :mod:`core.alias`
4
- =========================
5
- .. automodule:: IPython.core.alias
6
-
7
- .. currentmodule:: IPython.core.alias
8
-
9
- 4 Classes
10
- ---------
11
-
12
- .. autoclass:: AliasError
13
- :members:
14
- :show-inheritance:
15
-
16
- .. autoclass:: InvalidAliasError
17
- :members:
18
- :show-inheritance:
19
-
20
- .. autoclass:: Alias
21
- :members:
22
- :show-inheritance:
23
-
24
- .. automethod:: __init__
25
-
26
- .. autoclass:: AliasManager
27
- :members:
28
- :show-inheritance:
29
-
30
- .. automethod:: __init__
31
-
32
- 1 Function
33
- ----------
34
-
35
- .. autofunction:: IPython.core.alias.default_aliases
36
-
@@ -1,20 +0,0 @@
1
- .. AUTO-GENERATED FILE -- DO NOT EDIT!
2
-
3
- Module: :mod:`core.application`
4
- ===============================
5
- .. automodule:: IPython.core.application
6
-
7
- .. currentmodule:: IPython.core.application
8
-
9
- 2 Classes
10
- ---------
11
-
12
- .. autoclass:: ProfileAwareConfigLoader
13
- :members:
14
- :show-inheritance:
15
-
16
- .. autoclass:: BaseIPythonApplication
17
- :members:
18
- :show-inheritance:
19
-
20
- .. automethod:: __init__