Show More
@@ -1,181 +1,220 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 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 | The main change in IPython 8.0 is the integration of the ``stack_data`` package; |
|
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. | |||
|
32 | ||||
|
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 | |||
|
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 | |||
|
37 | or errors. | |||
|
38 | ||||
|
39 | There are many change in IPython 8.0 will will try to describe subsequently, | |||
|
40 | ||||
|
41 | ||||
|
42 | The first on is the integration of the ``stack_data`` package; | |||
31 | which provide smarter information in traceback; in particular it will highlight |
|
43 | which provide smarter information in traceback; in particular it will highlight | |
32 | 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. | |
33 |
|
45 | |||
34 | For example in the following snippet:: |
|
46 | For example in the following snippet:: | |
35 |
|
47 | |||
36 | def foo(i): |
|
48 | def foo(i): | |
37 | x = [[[0]]] |
|
49 | x = [[[0]]] | |
38 | return x[0][i][0] |
|
50 | return x[0][i][0] | |
39 |
|
51 | |||
40 |
|
52 | |||
41 | def bar(): |
|
53 | def bar(): | |
42 | return foo(0) + foo( |
|
54 | return foo(0) + foo( | |
43 | 1 |
|
55 | 1 | |
44 | ) + foo(2) |
|
56 | ) + foo(2) | |
45 |
|
57 | |||
46 |
|
58 | |||
47 | 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``, | |
48 | 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:: | |
49 |
|
61 | |||
50 | return x[0][i][0] |
|
62 | return x[0][i][0] | |
51 | ^ |
|
63 | ^ | |
52 |
|
64 | |||
|
65 | ||||
|
66 | Numfocus Small Developer Grant | |||
|
67 | ------------------------------ | |||
|
68 | ||||
53 | 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 | |
54 | 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 | |
55 |
test suite to |
|
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. | |||
|
73 | ||||
|
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>`__ | |||
|
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 | |||
|
78 | them if you need help with C++ and Python projects | |||
56 |
|
79 | |||
57 | We are also removing support for Python 3.6 allowing internal code to use more |
|
80 | You can find all relevant issues and PRs with the SDG 2021 tag: | |
|
81 | ||||
|
82 | https://github.com/ipython/ipython/issues?q=label%3A%22Numfocus+SDG+2021%22+ | |||
|
83 | ||||
|
84 | Removing support for Older Python | |||
|
85 | --------------------------------- | |||
|
86 | ||||
|
87 | ||||
|
88 | We are also removing support for Python up to 3.7 allowing internal code to use more | |||
58 | efficient ``pathlib``, and make better use of type annotations. |
|
89 | efficient ``pathlib``, and make better use of type annotations. | |
59 |
|
90 | |||
|
91 | IMAGE : Pathlib, pathlib everywhere. | |||
|
92 | ||||
60 | 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 | |
61 | offering faster and more reliable tab completion. |
|
94 | offering faster and more reliable tab completion. | |
62 |
|
95 | |||
63 | 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 | |
64 | 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 | |
65 | 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. | |
66 |
|
99 | |||
67 |
|
100 | |||
68 | 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>`__. | |
69 |
|
102 | |||
70 | `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 | |
71 | `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>`__. | |
72 |
|
105 | |||
73 | 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, | |
74 | or right arrow as described below. |
|
107 | or right arrow as described below. | |
75 |
|
108 | |||
76 | 1. Start ipython |
|
109 | 1. Start ipython | |
77 |
|
110 | |||
78 | .. image:: ../_images/auto_suggest_prompt_no_text.png |
|
111 | .. image:: ../_images/auto_suggest_prompt_no_text.png | |
79 |
|
112 | |||
80 | 2. Run ``print("hello")`` |
|
113 | 2. Run ``print("hello")`` | |
81 |
|
114 | |||
82 | .. image:: ../_images/auto_suggest_print_hello_suggest.png |
|
115 | .. image:: ../_images/auto_suggest_print_hello_suggest.png | |
83 |
|
116 | |||
84 | 3. Press p to see the autosuggestion |
|
117 | 3. Press p to see the autosuggestion | |
85 |
|
118 | |||
86 | .. image:: ../_images/auto_suggest_print_hello_suggest.png |
|
119 | .. image:: ../_images/auto_suggest_print_hello_suggest.png | |
87 |
|
120 | |||
88 | 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 | |
89 |
|
122 | |||
90 | .. image:: ../_images/auto_suggest_print_hello.png |
|
123 | .. image:: ../_images/auto_suggest_print_hello.png | |
91 |
|
124 | |||
92 | You can also complete word by word: |
|
125 | You can also complete word by word: | |
93 |
|
126 | |||
94 | 1. Run ``def say_hello(): print("hello")`` |
|
127 | 1. Run ``def say_hello(): print("hello")`` | |
95 |
|
128 | |||
96 | .. image:: ../_images/auto_suggest_second_prompt.png |
|
129 | .. image:: ../_images/auto_suggest_second_prompt.png | |
97 |
|
130 | |||
98 | 2. Press d to see the autosuggestion |
|
131 | 2. Press d to see the autosuggestion | |
99 |
|
132 | |||
100 | .. image:: ../_images/audo_suggest_d_phantom.png |
|
133 | .. image:: ../_images/audo_suggest_d_phantom.png | |
101 |
|
134 | |||
102 | 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 | |
103 |
|
136 | |||
104 | .. image:: ../_images/auto_suggest_def_phantom.png |
|
137 | .. image:: ../_images/auto_suggest_def_phantom.png | |
105 |
|
138 | |||
106 | Importantly, this feature does not interfere with tab completion: |
|
139 | Importantly, this feature does not interfere with tab completion: | |
107 |
|
140 | |||
108 | 1. After running ``def say_hello(): print("hello")``, press d |
|
141 | 1. After running ``def say_hello(): print("hello")``, press d | |
109 |
|
142 | |||
110 | .. image:: ../_images/audo_suggest_d_phantom.png |
|
143 | .. image:: ../_images/audo_suggest_d_phantom.png | |
111 |
|
144 | |||
112 | 2. Press Tab to start tab completion |
|
145 | 2. Press Tab to start tab completion | |
113 |
|
146 | |||
114 | .. image:: ../_images/auto_suggest_d_completions.png |
|
147 | .. image:: ../_images/auto_suggest_d_completions.png | |
115 |
|
148 | |||
116 | 3A. Press Tab again to select the first option |
|
149 | 3A. Press Tab again to select the first option | |
117 |
|
150 | |||
118 | .. image:: ../_images/auto_suggest_def_completions.png |
|
151 | .. image:: ../_images/auto_suggest_def_completions.png | |
119 |
|
152 | |||
120 | 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 | |
121 |
|
154 | |||
122 | .. image:: ../_images/auto_suggest_def_phantom.png |
|
155 | .. image:: ../_images/auto_suggest_def_phantom.png | |
123 |
|
156 | |||
124 | 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 | |
125 |
|
158 | |||
126 | .. image:: ../_images/auto_suggest_match_parens.png |
|
159 | .. image:: ../_images/auto_suggest_match_parens.png | |
127 |
|
160 | |||
128 | To install a version of ipython with autosuggestions enabled, run: |
|
161 | To install a version of ipython with autosuggestions enabled, run: | |
129 |
|
162 | |||
130 | ``pip install git+https://github.com/mskar/ipython@auto_suggest`` |
|
163 | ``pip install git+https://github.com/mskar/ipython@auto_suggest`` | |
131 |
|
164 | |||
132 | 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: | |
133 |
|
166 | |||
134 | - 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. | |
135 | - 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/>`__. | |
136 |
|
169 | |||
137 |
|
170 | |||
138 | Show pinfo information in ipdb using "?" and "??" |
|
171 | Show pinfo information in ipdb using "?" and "??" | |
139 | ------------------------------------------------- |
|
172 | ------------------------------------------------- | |
140 |
|
173 | |||
141 | 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 "?" | |
142 | 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:: | |
143 |
|
176 | |||
144 | ipdb> partial? |
|
177 | ipdb> partial? | |
145 | Init signature: partial(self, /, *args, **kwargs) |
|
178 | Init signature: partial(self, /, *args, **kwargs) | |
146 | Docstring: |
|
179 | Docstring: | |
147 | partial(func, *args, **keywords) - new function with partial application |
|
180 | partial(func, *args, **keywords) - new function with partial application | |
148 | of the given arguments and keywords. |
|
181 | of the given arguments and keywords. | |
149 | File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py |
|
182 | File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py | |
150 | Type: type |
|
183 | Type: type | |
151 | Subclasses: |
|
184 | Subclasses: | |
152 |
|
185 | |||
153 | 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. | |
154 |
|
187 | |||
155 |
|
188 | |||
156 | Autoreload 3 feature |
|
189 | Autoreload 3 feature | |
157 | ==================== |
|
190 | ==================== | |
158 |
|
191 | |||
159 | 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, | |
160 | 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: | |
161 |
|
194 | |||
162 | 1. replicate all functionality from option 2 |
|
195 | 1. replicate all functionality from option 2 | |
163 | 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 | |
164 | 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 | |
165 |
|
198 | |||
166 | 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`` | |
167 |
|
200 | |||
168 | For more information please see unit test - |
|
201 | For more information please see unit test - | |
169 | extensions/tests/test_autoreload.py : 'test_autoload_newly_added_objects' |
|
202 | extensions/tests/test_autoreload.py : 'test_autoload_newly_added_objects' | |
170 |
|
203 | |||
|
204 | ||||
|
205 | Miscelanious | |||
|
206 | ------------ | |||
|
207 | ||||
|
208 | Minimum supported | |||
|
209 | ||||
171 | ======= |
|
210 | ======= | |
172 |
|
211 | |||
173 | .. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT. |
|
212 | .. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT. | |
174 |
|
213 | |||
175 | As a reminder, IPython master has diverged from the 7.x branch, thus master may |
|
214 | As a reminder, IPython master has diverged from the 7.x branch, thus master may | |
176 | have more feature and API changes. |
|
215 | have more feature and API changes. | |
177 |
|
216 | |||
178 | Backwards incompatible changes |
|
217 | Backwards incompatible changes | |
179 | ------------------------------ |
|
218 | ------------------------------ | |
180 |
|
219 | |||
181 | .. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT. |
|
220 | .. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT. |
General Comments 0
You need to be logged in to leave comments.
Login now