##// END OF EJS Templates
misc updates
Matthias Bussonnier -
Show More
@@ -1,220 +1,361 b''
1 =====================
1 =====================
2 Development version
2 Development version
3 =====================
3 =====================
4
4
5 This document describes in-flight development work.
5 This document describes in-flight development work.
6
6
7 .. warning::
7 .. warning::
8
8
9 Please do not edit this file by hand (doing so will likely cause merge
9 Please do not edit this file by hand (doing so will likely cause merge
10 conflicts for other Pull Requests). Instead, create a new file in the
10 conflicts for other Pull Requests). Instead, create a new file in the
11 `docs/source/whatsnew/pr` folder
11 `docs/source/whatsnew/pr` folder
12
12
13
13
14 Released .... ...., 2019
14 Released .... ...., 2019
15
15
16
16
17 Need to be updated:
17 Need to be updated:
18
18
19 .. toctree::
19 .. toctree::
20 :maxdepth: 2
20 :maxdepth: 2
21 :glob:
21 :glob:
22
22
23 pr/*
23 pr/*
24
24
25 IPython 8.0 is bringing a large number of new features and improvements to both the
25 IPython 8.0 is bringing a large number of new features and improvements to both the
26 user of the terminal and of the kernel via Jupyter. The removal of compatibility
26 user of the terminal and of the kernel via Jupyter. The removal of compatibility
27 with older version of Python is also the opportunity to do a couple of
27 with older version of Python is also the opportunity to do a couple of
28 performance improvement in particular with respect to startup time.
28 performance improvement in particular with respect to startup time.
29
29
30 This release contains 250+ Pull requests, in addition to many of the features
30 This release contains 250+ Pull requests, in addition to many of the features
31 and backports that have made it to the 7.x branch.
31 and backports that have made it to the 7.x branch.
32
32
33 We removed almost all features, arguments, functions, and modules that were
33 We removed almost all features, arguments, functions, and modules that were
34 marked as deprecated between IPython 1.0 and 5.0 and before. As reminder 5.0 was
34 marked as deprecated between IPython 1.0 and 5.0 and before. As reminder 5.0 was
35 released in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in
35 released in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in
36 may 2020. The few remaining deprecated features have better deprecation warnings
36 may 2020. The few remaining deprecated features have better deprecation warnings
37 or errors.
37 or errors.
38
38
39 There are many change in IPython 8.0 will will try to describe subsequently,
39 There are many change in IPython 8.0 will will try to describe subsequently,
40
40
41
41
42 The first on is the integration of the ``stack_data`` package;
42 The first on is the integration of the ``stack_data`` package;
43 which provide smarter information in traceback; in particular it will highlight
43 which provide smarter information in traceback; in particular it will highlight
44 the AST node where an error occurs which can help to quickly narrow down errors.
44 the AST node where an error occurs which can help to quickly narrow down errors.
45
45
46 For example in the following snippet::
46 For example in the following snippet::
47
47
48 def foo(i):
48 def foo(i):
49 x = [[[0]]]
49 x = [[[0]]]
50 return x[0][i][0]
50 return x[0][i][0]
51
51
52
52
53 def bar():
53 def bar():
54 return foo(0) + foo(
54 return foo(0) + foo(
55 1
55 1
56 ) + foo(2)
56 ) + foo(2)
57
57
58
58
59 Calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
59 Calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
60 IPython 8.0 is capable of telling you, where the index error occurs::
60 IPython 8.0 is capable of telling you, where the index error occurs::
61
61
62 return x[0][i][0]
62 return x[0][i][0]
63 ^
63 ^
64
64
65
65
66 Numfocus Small Developer Grant
66 Numfocus Small Developer Grant
67 ------------------------------
67 ------------------------------
68
68
69 To prepare for Python 3.10 we have also started working on removing reliance and
69 To prepare for Python 3.10 we have also started working on removing reliance and
70 any dependency that is not Python 3.10 compatible; that include migrating our
70 any dependency that is not Python 3.10 compatible; that include migrating our
71 test suite to pytest, and starting to remove nose. This also mean that the
71 test suite to pytest, and starting to remove nose. This also mean that the
72 ``iptest`` command is now gone, and all testing is via pytest.
72 ``iptest`` command is now gone, and all testing is via pytest.
73
73
74 This was in bog part thanks the NumFOCUS Small Developer grant, we were able to
74 This was in bog part thanks the NumFOCUS Small Developer grant, we were able to
75 allocate 4000 to hire `Nikita Kniazev @Kojoley <https://github.com/Kojoley>`__
75 allocate 4000 to hire `Nikita Kniazev @Kojoley <https://github.com/Kojoley>`__
76 who did a fantastic job at updating our code base, migrating to pytest, pushing
76 who did a fantastic job at updating our code base, migrating to pytest, pushing
77 our coverage, and fixing a large number of bugs. I highly recommend contacting
77 our coverage, and fixing a large number of bugs. I highly recommend contacting
78 them if you need help with C++ and Python projects
78 them if you need help with C++ and Python projects
79
79
80 You can find all relevant issues and PRs with the SDG 2021 tag:
80 You can find all relevant issues and PRs with the SDG 2021 tag:
81
81
82 https://github.com/ipython/ipython/issues?q=label%3A%22Numfocus+SDG+2021%22+
82 https://github.com/ipython/ipython/issues?q=label%3A%22Numfocus+SDG+2021%22+
83
83
84 Removing support for Older Python
84 Removing support for Older Python
85 ---------------------------------
85 ---------------------------------
86
86
87
87
88 We are also removing support for Python up to 3.7 allowing internal code to use more
88 We are also removing support for Python up to 3.7 allowing internal code to use more
89 efficient ``pathlib``, and make better use of type annotations.
89 efficient ``pathlib``, and make better use of type annotations.
90
90
91 IMAGE : Pathlib, pathlib everywhere.
91 IMAGE : Pathlib, pathlib everywhere.
92
92
93 The completer has also seen significant updates and make use of newer Jedi API
93 The completer has also seen significant updates and make use of newer Jedi API
94 offering faster and more reliable tab completion.
94 offering faster and more reliable tab completion.
95
95
96 For the terminal users this also enable the auto-suggestion feature, described
96 For the terminal users this also enable the auto-suggestion feature, described
97 below, which show "ghost text" ahead of your cursor you can accept without
97 below, which show "ghost text" ahead of your cursor you can accept without
98 having to press the tab key or ask the completer to suggest completions.
98 having to press the tab key or ask the completer to suggest completions.
99
99
100
100
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>`__.
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 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
103 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
104 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
104 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
105
105
106 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
106 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
107 or right arrow as described below.
107 or right arrow as described below.
108
108
109 1. Start ipython
109 1. Start ipython
110
110
111 .. image:: ../_images/auto_suggest_prompt_no_text.png
111 .. image:: ../_images/auto_suggest_prompt_no_text.png
112
112
113 2. Run ``print("hello")``
113 2. Run ``print("hello")``
114
114
115 .. image:: ../_images/auto_suggest_print_hello_suggest.png
115 .. image:: ../_images/auto_suggest_print_hello_suggest.png
116
116
117 3. Press p to see the autosuggestion
117 3. Press p to see the autosuggestion
118
118
119 .. image:: ../_images/auto_suggest_print_hello_suggest.png
119 .. image:: ../_images/auto_suggest_print_hello_suggest.png
120
120
121 4. Press ctrl f, or ctrl e, or right arrow to accept the suggestion
121 4. Press ctrl f, or ctrl e, or right arrow to accept the suggestion
122
122
123 .. image:: ../_images/auto_suggest_print_hello.png
123 .. image:: ../_images/auto_suggest_print_hello.png
124
124
125 You can also complete word by word:
125 You can also complete word by word:
126
126
127 1. Run ``def say_hello(): print("hello")``
127 1. Run ``def say_hello(): print("hello")``
128
128
129 .. image:: ../_images/auto_suggest_second_prompt.png
129 .. image:: ../_images/auto_suggest_second_prompt.png
130
130
131 2. Press d to see the autosuggestion
131 2. Press d to see the autosuggestion
132
132
133 .. image:: ../_images/audo_suggest_d_phantom.png
133 .. image:: ../_images/audo_suggest_d_phantom.png
134
134
135 3. Press alt f to accept the first word of the suggestion
135 3. Press alt f to accept the first word of the suggestion
136
136
137 .. image:: ../_images/auto_suggest_def_phantom.png
137 .. image:: ../_images/auto_suggest_def_phantom.png
138
138
139 Importantly, this feature does not interfere with tab completion:
139 Importantly, this feature does not interfere with tab completion:
140
140
141 1. After running ``def say_hello(): print("hello")``, press d
141 1. After running ``def say_hello(): print("hello")``, press d
142
142
143 .. image:: ../_images/audo_suggest_d_phantom.png
143 .. image:: ../_images/audo_suggest_d_phantom.png
144
144
145 2. Press Tab to start tab completion
145 2. Press Tab to start tab completion
146
146
147 .. image:: ../_images/auto_suggest_d_completions.png
147 .. image:: ../_images/auto_suggest_d_completions.png
148
148
149 3A. Press Tab again to select the first option
149 3A. Press Tab again to select the first option
150
150
151 .. image:: ../_images/auto_suggest_def_completions.png
151 .. image:: ../_images/auto_suggest_def_completions.png
152
152
153 3B. Press alt f to accept to accept the first word of the suggestion
153 3B. Press alt f to accept to accept the first word of the suggestion
154
154
155 .. image:: ../_images/auto_suggest_def_phantom.png
155 .. image:: ../_images/auto_suggest_def_phantom.png
156
156
157 3C. Press ctrl f or ctrl e to accept the entire suggestion
157 3C. Press ctrl f or ctrl e to accept the entire suggestion
158
158
159 .. image:: ../_images/auto_suggest_match_parens.png
159 .. image:: ../_images/auto_suggest_match_parens.png
160
160
161 To install a version of ipython with autosuggestions enabled, run:
161 To install a version of ipython with autosuggestions enabled, run:
162
162
163 ``pip install git+https://github.com/mskar/ipython@auto_suggest``
163 ``pip install git+https://github.com/mskar/ipython@auto_suggest``
164
164
165 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
165 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
166
166
167 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
167 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
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/>`__.
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 Show pinfo information in ipdb using "?" and "??"
171 Show pinfo information in ipdb using "?" and "??"
172 -------------------------------------------------
172 -------------------------------------------------
173
173
174 In IPDB, it is now possible to show the information about an object using "?"
174 In IPDB, it is now possible to show the information about an object using "?"
175 and "??", in much the same way it can be done when using the IPython prompt::
175 and "??", in much the same way it can be done when using the IPython prompt::
176
176
177 ipdb> partial?
177 ipdb> partial?
178 Init signature: partial(self, /, *args, **kwargs)
178 Init signature: partial(self, /, *args, **kwargs)
179 Docstring:
179 Docstring:
180 partial(func, *args, **keywords) - new function with partial application
180 partial(func, *args, **keywords) - new function with partial application
181 of the given arguments and keywords.
181 of the given arguments and keywords.
182 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
182 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
183 Type: type
183 Type: type
184 Subclasses:
184 Subclasses:
185
185
186 Previously, "pinfo" or "pinfo2" command had to be used for this purpose.
186 Previously, "pinfo" or "pinfo2" command had to be used for this purpose.
187
187
188
188
189 Autoreload 3 feature
189 Autoreload 3 feature
190 ====================
190 ====================
191
191
192 Example: When an IPython session is ran with the 'autoreload' extension loaded,
192 Example: When an IPython session is ran with the 'autoreload' extension loaded,
193 you will now have the option '3' to select which means the following:
193 you will now have the option '3' to select which means the following:
194
194
195 1. replicate all functionality from option 2
195 1. replicate all functionality from option 2
196 2. autoload all new funcs/classes/enums/globals from the module when they're added
196 2. autoload all new funcs/classes/enums/globals from the module when they're added
197 3. autoload all newly imported funcs/classes/enums/globals from external modules
197 3. autoload all newly imported funcs/classes/enums/globals from external modules
198
198
199 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``
199 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``
200
200
201 For more information please see unit test -
201 For more information please see unit test -
202 extensions/tests/test_autoreload.py : 'test_autoload_newly_added_objects'
202 extensions/tests/test_autoreload.py : 'test_autoload_newly_added_objects'
203
203
204
204
205 Miscelanious
205 Miscelanious
206 ------------
206 ------------
207
207
208 Minimum supported
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 .. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT.
353 .. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT.
213
354
214 As a reminder, IPython master has diverged from the 7.x branch, thus master may
355 As a reminder, IPython master has diverged from the 7.x branch, thus master may
215 have more feature and API changes.
356 have more feature and API changes.
216
357
217 Backwards incompatible changes
358 Backwards incompatible changes
218 ------------------------------
359 ------------------------------
219
360
220 .. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT.
361 .. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT.
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now