##// END OF EJS Templates
misc updates
Matthias Bussonnier -
Show More
@@ -1,220 +1,361 b''
1 1 =====================
2 2 Development version
3 3 =====================
4 4
5 5 This document describes in-flight development work.
6 6
7 7 .. warning::
8 8
9 9 Please do not edit this file by hand (doing so will likely cause merge
10 10 conflicts for other Pull Requests). Instead, create a new file in the
11 11 `docs/source/whatsnew/pr` folder
12 12
13 13
14 14 Released .... ...., 2019
15 15
16 16
17 17 Need to be updated:
18 18
19 19 .. toctree::
20 20 :maxdepth: 2
21 21 :glob:
22 22
23 23 pr/*
24 24
25 25 IPython 8.0 is bringing a large number of new features and improvements to both the
26 26 user of the terminal and of the kernel via Jupyter. The removal of compatibility
27 27 with older version of Python is also the opportunity to do a couple of
28 28 performance improvement in particular with respect to startup time.
29 29
30 30 This release contains 250+ Pull requests, in addition to many of the features
31 31 and backports that have made it to the 7.x branch.
32 32
33 33 We removed almost all features, arguments, functions, and modules that were
34 34 marked as deprecated between IPython 1.0 and 5.0 and before. As reminder 5.0 was
35 35 released in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in
36 36 may 2020. The few remaining deprecated features have better deprecation warnings
37 37 or errors.
38 38
39 39 There are many change in IPython 8.0 will will try to describe subsequently,
40 40
41 41
42 42 The first on is the integration of the ``stack_data`` package;
43 43 which provide smarter information in traceback; in particular it will highlight
44 44 the AST node where an error occurs which can help to quickly narrow down errors.
45 45
46 46 For example in the following snippet::
47 47
48 48 def foo(i):
49 49 x = [[[0]]]
50 50 return x[0][i][0]
51 51
52 52
53 53 def bar():
54 54 return foo(0) + foo(
55 55 1
56 56 ) + foo(2)
57 57
58 58
59 59 Calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
60 60 IPython 8.0 is capable of telling you, where the index error occurs::
61 61
62 62 return x[0][i][0]
63 63 ^
64 64
65 65
66 66 Numfocus Small Developer Grant
67 67 ------------------------------
68 68
69 69 To prepare for Python 3.10 we have also started working on removing reliance and
70 70 any dependency that is not Python 3.10 compatible; that include migrating our
71 71 test suite to pytest, and starting to remove nose. This also mean that the
72 72 ``iptest`` command is now gone, and all testing is via pytest.
73 73
74 74 This was in bog part thanks the NumFOCUS Small Developer grant, we were able to
75 75 allocate 4000 to hire `Nikita Kniazev @Kojoley <https://github.com/Kojoley>`__
76 76 who did a fantastic job at updating our code base, migrating to pytest, pushing
77 77 our coverage, and fixing a large number of bugs. I highly recommend contacting
78 78 them if you need help with C++ and Python projects
79 79
80 80 You can find all relevant issues and PRs with the SDG 2021 tag:
81 81
82 82 https://github.com/ipython/ipython/issues?q=label%3A%22Numfocus+SDG+2021%22+
83 83
84 84 Removing support for Older Python
85 85 ---------------------------------
86 86
87 87
88 88 We are also removing support for Python up to 3.7 allowing internal code to use more
89 89 efficient ``pathlib``, and make better use of type annotations.
90 90
91 91 IMAGE : Pathlib, pathlib everywhere.
92 92
93 93 The completer has also seen significant updates and make use of newer Jedi API
94 94 offering faster and more reliable tab completion.
95 95
96 96 For the terminal users this also enable the auto-suggestion feature, described
97 97 below, which show "ghost text" ahead of your cursor you can accept without
98 98 having to press the tab key or ask the completer to suggest completions.
99 99
100 100
101 101 Autosuggestion is a very useful feature available in `fish <https://fishshell.com/>`__, `zsh <https://en.wikipedia.org/wiki/Z_shell>`__, and `prompt-toolkit <https://python-prompt-toolkit.readthedocs.io/en/master/pages/asking_for_input.html#auto-suggestion>`__.
102 102
103 103 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
104 104 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
105 105
106 106 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
107 107 or right arrow as described below.
108 108
109 109 1. Start ipython
110 110
111 111 .. image:: ../_images/auto_suggest_prompt_no_text.png
112 112
113 113 2. Run ``print("hello")``
114 114
115 115 .. image:: ../_images/auto_suggest_print_hello_suggest.png
116 116
117 117 3. Press p to see the autosuggestion
118 118
119 119 .. image:: ../_images/auto_suggest_print_hello_suggest.png
120 120
121 121 4. Press ctrl f, or ctrl e, or right arrow to accept the suggestion
122 122
123 123 .. image:: ../_images/auto_suggest_print_hello.png
124 124
125 125 You can also complete word by word:
126 126
127 127 1. Run ``def say_hello(): print("hello")``
128 128
129 129 .. image:: ../_images/auto_suggest_second_prompt.png
130 130
131 131 2. Press d to see the autosuggestion
132 132
133 133 .. image:: ../_images/audo_suggest_d_phantom.png
134 134
135 135 3. Press alt f to accept the first word of the suggestion
136 136
137 137 .. image:: ../_images/auto_suggest_def_phantom.png
138 138
139 139 Importantly, this feature does not interfere with tab completion:
140 140
141 141 1. After running ``def say_hello(): print("hello")``, press d
142 142
143 143 .. image:: ../_images/audo_suggest_d_phantom.png
144 144
145 145 2. Press Tab to start tab completion
146 146
147 147 .. image:: ../_images/auto_suggest_d_completions.png
148 148
149 149 3A. Press Tab again to select the first option
150 150
151 151 .. image:: ../_images/auto_suggest_def_completions.png
152 152
153 153 3B. Press alt f to accept to accept the first word of the suggestion
154 154
155 155 .. image:: ../_images/auto_suggest_def_phantom.png
156 156
157 157 3C. Press ctrl f or ctrl e to accept the entire suggestion
158 158
159 159 .. image:: ../_images/auto_suggest_match_parens.png
160 160
161 161 To install a version of ipython with autosuggestions enabled, run:
162 162
163 163 ``pip install git+https://github.com/mskar/ipython@auto_suggest``
164 164
165 165 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
166 166
167 167 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
168 168 - To use these shortcuts in vi insert mode, you will have to create `custom keybindings in your config.py <https://github.com/mskar/setup/commit/2892fcee46f9f80ef7788f0749edc99daccc52f4/>`__.
169 169
170 170
171 171 Show pinfo information in ipdb using "?" and "??"
172 172 -------------------------------------------------
173 173
174 174 In IPDB, it is now possible to show the information about an object using "?"
175 175 and "??", in much the same way it can be done when using the IPython prompt::
176 176
177 177 ipdb> partial?
178 178 Init signature: partial(self, /, *args, **kwargs)
179 179 Docstring:
180 180 partial(func, *args, **keywords) - new function with partial application
181 181 of the given arguments and keywords.
182 182 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
183 183 Type: type
184 184 Subclasses:
185 185
186 186 Previously, "pinfo" or "pinfo2" command had to be used for this purpose.
187 187
188 188
189 189 Autoreload 3 feature
190 190 ====================
191 191
192 192 Example: When an IPython session is ran with the 'autoreload' extension loaded,
193 193 you will now have the option '3' to select which means the following:
194 194
195 195 1. replicate all functionality from option 2
196 196 2. autoload all new funcs/classes/enums/globals from the module when they're added
197 197 3. autoload all newly imported funcs/classes/enums/globals from external modules
198 198
199 199 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``
200 200
201 201 For more information please see unit test -
202 202 extensions/tests/test_autoreload.py : 'test_autoload_newly_added_objects'
203 203
204 204
205 205 Miscelanious
206 206 ------------
207 207
208 208 Minimum supported
209 209
210 =======
210
211 History Range Glob feature
212 ==========================
213
214 Previously, when using ``%history``, users could specify either
215 a range of sessions and lines, for example:
216
217 .. code-block:: python
218
219 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
220 # to the fifth line of 6 sessions ago.``
221
222 Or users could specify a glob pattern:
223
224 .. code-block:: python
225
226 -g <pattern> # glob ALL history for the specified pattern.
227
228 However users could *not* specify both.
229
230 If a user *did* specify both a range and a glob pattern,
231 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
232
233 ---
234
235 With this enhancement, if a user specifies both a range and a glob pattern, then the glob pattern will be applied to the specified range of history.
236
237 Don't start a multi line cell with sunken parenthesis
238 -----------------------------------------------------
239
240 From now on IPython will not ask for the next line of input when given a single
241 line with more closing than opening brackets. For example, this means that if
242 you (mis)type ']]' instead of '[]', a ``SyntaxError`` will show up, instead of
243 the ``...:`` prompt continuation.
244
245 IPython shell for ipdb interact
246 -------------------------------
247
248 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
249
250 Automatic Vi prompt stripping
251 =============================
252
253 When pasting code into IPython, it will strip the leading prompt characters if
254 there are any. For example, you can paste the following code into the console -
255 it will still work, even though each line is prefixed with prompts (`In`,
256 `Out`)::
257
258 In [1]: 2 * 2 == 4
259 Out[1]: True
260
261 In [2]: print("This still works as pasted")
262
263
264 Previously, this was not the case for the Vi-mode prompts::
265
266 In [1]: [ins] In [13]: 2 * 2 == 4
267 ...: Out[13]: True
268 ...:
269 File "<ipython-input-1-727bb88eaf33>", line 1
270 [ins] In [13]: 2 * 2 == 4
271 ^
272 SyntaxError: invalid syntax
273
274 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
275 skipped just as the normal ``In`` would be.
276
277 IPython shell can be started in the Vi mode using ``ipython
278 --TerminalInteractiveShell.editing_mode=vi``
279
280 Empty History Ranges
281 ====================
282
283 A number of magics that take history ranges can now be used with an empty
284 range. These magics are:
285
286 * ``%save``
287 * ``%load``
288 * ``%pastebin``
289 * ``%pycat``
290
291 Using them this way will make them take the history of the current session up
292 to the point of the magic call (such that the magic itself will not be
293 included).
294
295 Therefore it is now possible to save the whole history to a file using simple
296 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
297 when followed with :kbd:`F2`), send it to dpaste.org using ``%pastebin``, or
298 view the whole thing syntax-highlighted with a single ``%pycat``.
299
300 Traceback improvements
301 ======================
302
303
304 UPDATE THIS IN INPUT.
305
306 Previously, error tracebacks for errors happening in code cells were showing a hash, the one used for compiling the Python AST::
307
308 In [1]: def foo():
309 ...: return 3 / 0
310 ...:
311
312 In [2]: foo()
313 ---------------------------------------------------------------------------
314 ZeroDivisionError Traceback (most recent call last)
315 <ipython-input-2-c19b6d9633cf> in <module>
316 ----> 1 foo()
317
318 <ipython-input-1-1595a74c32d5> in foo()
319 1 def foo():
320 ----> 2 return 3 / 0
321 3
322
323 ZeroDivisionError: division by zero
324
325 The error traceback is now correctly formatted, showing the cell number in which the error happened::
326
327 In [1]: def foo():
328 ...: return 3 / 0
329 ...:
330
331 In [2]: foo()
332 ---------------------------------------------------------------------------
333 ZeroDivisionError Traceback (most recent call last)
334 In [2], in <module>
335 ----> 1 foo()
336
337 In [1], in foo()
338 1 def foo():
339 ----> 2 return 3 / 0
340
341 ZeroDivisionError: division by zero
342
343 Remove Deprecated Stuff
344 =======================
345
346
347 We no longer need to add `extensions` to the PYTHONPATH because that is being
348 handled by `load_extension`.
349
350 We are also removing Cythonmagic, sympyprinting and rmagic as they are now in
351 other packages and no longer need to be inside IPython.
211 352
212 353 .. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT.
213 354
214 355 As a reminder, IPython master has diverged from the 7.x branch, thus master may
215 356 have more feature and API changes.
216 357
217 358 Backwards incompatible changes
218 359 ------------------------------
219 360
220 361 .. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT.
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now