##// END OF EJS Templates
prepare 7.22 release notes
Matthias Bussonnier -
Show More
@@ -1,1260 +1,1280 b''
1 ============
1 ============
2 7.x Series
2 7.x Series
3 ============
3 ============
4
4
5 .. _version 7.22:
6 =================
7
8
9 Thanks
10 ------
11
12 We have a new team member that you should see more often on the IPython
13 repository, BΕ‚aΕΌej Michalik (@MrMino) have been doing regular contributions to
14 IPython, and spent time replying to many issues and guiding new users to the
15 codebase; they now have triage permissions to the IPython repository and we'll
16 work toward giving them more permission in the future.
17
18 Many thanks to all the contributors to this release you can find all individual
19 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/XX>`_.
20
21 Thanks as well to organisations, QuantStack for working on debugger
22 compatibility for Xeus_python, and the `D. E. Shaw group
23 <https://deshaw.com/>` for sponsoring work on IPython and related libraries.
24
5 .. _version 721:
25 .. _version 721:
6
26
7 IPython 7.21
27 IPython 7.21
8 ============
28 ============
9
29
10 IPython 7.21 is the first release we have back on schedule of one release every
30 IPython 7.21 is the first release we have back on schedule of one release every
11 month; it contains a number of minor fixes and improvements, notably, the new
31 month; it contains a number of minor fixes and improvements, notably, the new
12 context command for ipdb
32 context command for ipdb
13
33
14
34
15 New "context" command in ipdb
35 New "context" command in ipdb
16 -----------------------------
36 -----------------------------
17
37
18 It is now possible to change the number of lines shown in the backtrace
38 It is now possible to change the number of lines shown in the backtrace
19 information in ipdb using "context" command. :ghpull:`12826`
39 information in ipdb using "context" command. :ghpull:`12826`
20
40
21 (thanks @MrMino, there are other improvement from them on master).
41 (thanks @MrMino, there are other improvement from them on master).
22
42
23 Other notable changes in IPython 7.21
43 Other notable changes in IPython 7.21
24 -------------------------------------
44 -------------------------------------
25
45
26 - Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`.
46 - Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`.
27 - Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
47 - Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
28 - Misc docs fixes for compatibility and uniformity with Numpydoc.
48 - Misc docs fixes for compatibility and uniformity with Numpydoc.
29 :ghpull:`12824`
49 :ghpull:`12824`
30
50
31
51
32 Thanks
52 Thanks
33 ------
53 ------
34
54
35 Many thanks to all the contributors to this release you can find all individual
55 Many thanks to all the contributors to this release you can find all individual
36 contribution to this milestone `on github <https://github.com/ipython/ipython/milestone/83>`_.
56 contribution to this milestone `on github <https://github.com/ipython/ipython/milestone/83>`_.
37
57
38
58
39 .. _version 720:
59 .. _version 720:
40
60
41 IPython 7.20
61 IPython 7.20
42 ============
62 ============
43
63
44 IPython 7.20 is the accumulation of 3 month of work on IPython, spacing between
64 IPython 7.20 is the accumulation of 3 month of work on IPython, spacing between
45 IPython release have been increased from the usual once a month for various
65 IPython release have been increased from the usual once a month for various
46 reason.
66 reason.
47
67
48 - Mainly as I'm too busy and the effectively sole maintainer, and
68 - Mainly as I'm too busy and the effectively sole maintainer, and
49 - Second because not much changes happened before mid December.
69 - Second because not much changes happened before mid December.
50
70
51 The main driver for this release was the new version of Jedi 0.18 breaking API;
71 The main driver for this release was the new version of Jedi 0.18 breaking API;
52 which was taken care of in the master branch early in 2020 but not in 7.x as I
72 which was taken care of in the master branch early in 2020 but not in 7.x as I
53 though that by now 8.0 would be out.
73 though that by now 8.0 would be out.
54
74
55 The inclusion of a resolver in pip did not help and actually made things worse.
75 The inclusion of a resolver in pip did not help and actually made things worse.
56 If usually I would have simply pinned Jedi to ``<0.18``; this is not a solution
76 If usually I would have simply pinned Jedi to ``<0.18``; this is not a solution
57 anymore as now pip is free to install Jedi 0.18, and downgrade IPython.
77 anymore as now pip is free to install Jedi 0.18, and downgrade IPython.
58
78
59 I'll do my best to keep the regular release, but as the 8.0-dev branch and 7.x
79 I'll do my best to keep the regular release, but as the 8.0-dev branch and 7.x
60 are starting to diverge this is becoming difficult in particular with my limited
80 are starting to diverge this is becoming difficult in particular with my limited
61 time, so if you have any cycles to spare I'll appreciate your help to respond to
81 time, so if you have any cycles to spare I'll appreciate your help to respond to
62 issues and pushing 8.0 forward.
82 issues and pushing 8.0 forward.
63
83
64 Here are thus some of the changes for IPython 7.20.
84 Here are thus some of the changes for IPython 7.20.
65
85
66 - Support for PyQt5 >= 5.11 :ghpull:`12715`
86 - Support for PyQt5 >= 5.11 :ghpull:`12715`
67 - ``%reset`` remove imports more agressively :ghpull:`12718`
87 - ``%reset`` remove imports more agressively :ghpull:`12718`
68 - fix the ``%conda`` magic :ghpull:`12739`
88 - fix the ``%conda`` magic :ghpull:`12739`
69 - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793`
89 - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793`
70
90
71
91
72 .. _version 719:
92 .. _version 719:
73
93
74 IPython 7.19
94 IPython 7.19
75 ============
95 ============
76
96
77 IPython 7.19 accumulative two month of works, bug fixes and improvements, there
97 IPython 7.19 accumulative two month of works, bug fixes and improvements, there
78 was exceptionally no release last month.
98 was exceptionally no release last month.
79
99
80 - Fix to restore the ability to specify more than one extension using command
100 - Fix to restore the ability to specify more than one extension using command
81 line flags when using traitlets 5.0 :ghpull:`12543`
101 line flags when using traitlets 5.0 :ghpull:`12543`
82 - Docs docs formatting that make the install commands work on zsh
102 - Docs docs formatting that make the install commands work on zsh
83 :ghpull:`12587`
103 :ghpull:`12587`
84 - Always display the last frame in tracebacks even if hidden with
104 - Always display the last frame in tracebacks even if hidden with
85 ``__traceback_hide__`` :ghpull:`12601`
105 ``__traceback_hide__`` :ghpull:`12601`
86 - Avoid an issue where a callback can be registered multiple times.
106 - Avoid an issue where a callback can be registered multiple times.
87 :ghpull:`12625`
107 :ghpull:`12625`
88 - Avoid an issue in debugger mode where frames changes could be lost.
108 - Avoid an issue in debugger mode where frames changes could be lost.
89 :ghpull:`12627`
109 :ghpull:`12627`
90
110
91 - Never hide the frames that invoke a debugger, even if marked as hidden by
111 - Never hide the frames that invoke a debugger, even if marked as hidden by
92 ``__traceback_hide__`` :ghpull:`12631`
112 ``__traceback_hide__`` :ghpull:`12631`
93 - Fix calling the debugger in a recursive manner :ghpull:`12659`
113 - Fix calling the debugger in a recursive manner :ghpull:`12659`
94
114
95
115
96 A number of code changes have landed on master and we are getting close to
116 A number of code changes have landed on master and we are getting close to
97 enough new features and codebase improvement that a 8.0 start to make sens.
117 enough new features and codebase improvement that a 8.0 start to make sens.
98 For downstream packages, please start working on migrating downstream testing
118 For downstream packages, please start working on migrating downstream testing
99 away from iptest and using pytest, as nose will not work on Python 3.10 and we
119 away from iptest and using pytest, as nose will not work on Python 3.10 and we
100 will likely start removing it as a dependency for testing.
120 will likely start removing it as a dependency for testing.
101
121
102 .. _version 718:
122 .. _version 718:
103
123
104 IPython 7.18
124 IPython 7.18
105 ============
125 ============
106
126
107 IPython 7.18 is a minor release that mostly contains bugfixes.
127 IPython 7.18 is a minor release that mostly contains bugfixes.
108
128
109 - ``CRLF`` is now handled by magics my default; solving some issues due to copy
129 - ``CRLF`` is now handled by magics my default; solving some issues due to copy
110 pasting on windows. :ghpull:`12475`
130 pasting on windows. :ghpull:`12475`
111
131
112 - Requiring pexpect ``>=4.3`` as we are Python 3.7+ only and earlier version of
132 - Requiring pexpect ``>=4.3`` as we are Python 3.7+ only and earlier version of
113 pexpect will be incompatible. :ghpull:`12510`
133 pexpect will be incompatible. :ghpull:`12510`
114
134
115 - Minimum jedi version is now 0.16. :ghpull:`12488`
135 - Minimum jedi version is now 0.16. :ghpull:`12488`
116
136
117
137
118
138
119 .. _version 717:
139 .. _version 717:
120
140
121 IPython 7.17
141 IPython 7.17
122 ============
142 ============
123
143
124 IPython 7.17 brings a couple of new improvements to API and a couple of user
144 IPython 7.17 brings a couple of new improvements to API and a couple of user
125 facing changes to make the terminal experience more user friendly.
145 facing changes to make the terminal experience more user friendly.
126
146
127 :ghpull:`12407` introduces the ability to pass extra argument to the IPython
147 :ghpull:`12407` introduces the ability to pass extra argument to the IPython
128 debugger class; this is to help a new project from ``kmaork``
148 debugger class; this is to help a new project from ``kmaork``
129 (https://github.com/kmaork/madbg) to feature a fully remote debugger.
149 (https://github.com/kmaork/madbg) to feature a fully remote debugger.
130
150
131 :ghpull:`12410` finally remove support for 3.6, while the codebase is still
151 :ghpull:`12410` finally remove support for 3.6, while the codebase is still
132 technically compatible; IPython will not install on Python 3.6.
152 technically compatible; IPython will not install on Python 3.6.
133
153
134 lots of work on the debugger and hidden frames from ``@impact27`` in
154 lots of work on the debugger and hidden frames from ``@impact27`` in
135 :ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
155 :ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
136 :ghpull:`12453` which make the debug magic more robust at handling spaces.
156 :ghpull:`12453` which make the debug magic more robust at handling spaces.
137
157
138 Biggest API addition is code transformation which is done before code execution;
158 Biggest API addition is code transformation which is done before code execution;
139 IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
159 IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
140 stripping...etc). Transformers are usually called many time; typically:
160 stripping...etc). Transformers are usually called many time; typically:
141
161
142 - When trying to figure out whether the code is complete and valid (should we
162 - When trying to figure out whether the code is complete and valid (should we
143 insert a new line or execute ?)
163 insert a new line or execute ?)
144 - During actual code execution pass before giving the code to Python's
164 - During actual code execution pass before giving the code to Python's
145 ``exec``.
165 ``exec``.
146
166
147 This lead to issues when transformer might have had side effects; or do external
167 This lead to issues when transformer might have had side effects; or do external
148 queries. Starting with IPython 7.17 you can expect your transformer to be called
168 queries. Starting with IPython 7.17 you can expect your transformer to be called
149 less time.
169 less time.
150
170
151 Input transformers are now called only once in the execution path of
171 Input transformers are now called only once in the execution path of
152 `InteractiveShell`, allowing to register transformer that potentially have side
172 `InteractiveShell`, allowing to register transformer that potentially have side
153 effects (note that this is not recommended). Internal methods `should_run_async`, and
173 effects (note that this is not recommended). Internal methods `should_run_async`, and
154 `run_cell_async` now take a recommended optional `transformed_cell`, and
174 `run_cell_async` now take a recommended optional `transformed_cell`, and
155 `preprocessing_exc_tuple` parameters that will become mandatory at some point in
175 `preprocessing_exc_tuple` parameters that will become mandatory at some point in
156 the future; that is to say cells need to be explicitly transformed to be valid
176 the future; that is to say cells need to be explicitly transformed to be valid
157 Python syntax ahead of trying to run them. :ghpull:`12440`;
177 Python syntax ahead of trying to run them. :ghpull:`12440`;
158
178
159 ``input_transformers`` can now also have an attribute ``has_side_effects`` set
179 ``input_transformers`` can now also have an attribute ``has_side_effects`` set
160 to `True`, when this attribute is present; this will prevent the transformers
180 to `True`, when this attribute is present; this will prevent the transformers
161 from being ran when IPython is trying to guess whether the user input is
181 from being ran when IPython is trying to guess whether the user input is
162 complete. Note that this may means you will need to explicitly execute in some
182 complete. Note that this may means you will need to explicitly execute in some
163 case where your transformations are now not ran; but will not affect users with
183 case where your transformations are now not ran; but will not affect users with
164 no custom extensions.
184 no custom extensions.
165
185
166
186
167 API Changes
187 API Changes
168 -----------
188 -----------
169
189
170 Change of API and exposed objects automatically detected using `frappuccino
190 Change of API and exposed objects automatically detected using `frappuccino
171 <https://pypi.org/project/frappuccino/>`_
191 <https://pypi.org/project/frappuccino/>`_
172
192
173
193
174 The following items are new since 7.16.0::
194 The following items are new since 7.16.0::
175
195
176 + IPython.core.interactiveshell.InteractiveShell.get_local_scope(self, stack_depth)
196 + IPython.core.interactiveshell.InteractiveShell.get_local_scope(self, stack_depth)
177
197
178 The following signatures differ since 7.16.0::
198 The following signatures differ since 7.16.0::
179
199
180 - IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True)
200 - IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True)
181 + IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True, *, transformed_cell=None, preprocessing_exc_tuple=None)
201 + IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True, *, transformed_cell=None, preprocessing_exc_tuple=None)
182
202
183 - IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell)
203 - IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell)
184 + IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell, *, transformed_cell=None, preprocessing_exc_tuple=None)
204 + IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell, *, transformed_cell=None, preprocessing_exc_tuple=None)
185
205
186 - IPython.terminal.debugger.TerminalPdb.pt_init(self)
206 - IPython.terminal.debugger.TerminalPdb.pt_init(self)
187 + IPython.terminal.debugger.TerminalPdb.pt_init(self, pt_session_options=None)
207 + IPython.terminal.debugger.TerminalPdb.pt_init(self, pt_session_options=None)
188
208
189 This method was added::
209 This method was added::
190
210
191 + IPython.core.interactiveshell.InteractiveShell.get_local_scope
211 + IPython.core.interactiveshell.InteractiveShell.get_local_scope
192
212
193 Which is now also present on subclasses::
213 Which is now also present on subclasses::
194
214
195 + IPython.terminal.embed.InteractiveShellEmbed.get_local_scope
215 + IPython.terminal.embed.InteractiveShellEmbed.get_local_scope
196 + IPython.terminal.interactiveshell.TerminalInteractiveShell.get_local_scope
216 + IPython.terminal.interactiveshell.TerminalInteractiveShell.get_local_scope
197
217
198
218
199 .. _version 716:
219 .. _version 716:
200
220
201 IPython 7.16
221 IPython 7.16
202 ============
222 ============
203
223
204
224
205 The default traceback mode will now skip frames that are marked with
225 The default traceback mode will now skip frames that are marked with
206 ``__tracebackhide__ = True`` and show how many traceback frames have been
226 ``__tracebackhide__ = True`` and show how many traceback frames have been
207 skipped. This can be toggled by using :magic:`xmode` with the ``--show`` or
227 skipped. This can be toggled by using :magic:`xmode` with the ``--show`` or
208 ``--hide`` attribute. It will have no effect on non verbose traceback modes.
228 ``--hide`` attribute. It will have no effect on non verbose traceback modes.
209
229
210 The ipython debugger also now understands ``__tracebackhide__`` as well and will
230 The ipython debugger also now understands ``__tracebackhide__`` as well and will
211 skip hidden frames when displaying. Movement up and down the stack will skip the
231 skip hidden frames when displaying. Movement up and down the stack will skip the
212 hidden frames and will show how many frames were hidden. Internal IPython frames
232 hidden frames and will show how many frames were hidden. Internal IPython frames
213 are also now hidden by default. The behavior can be changed with the
233 are also now hidden by default. The behavior can be changed with the
214 ``skip_hidden`` while in the debugger, command and accepts "yes", "no", "true"
234 ``skip_hidden`` while in the debugger, command and accepts "yes", "no", "true"
215 and "false" case insensitive parameters.
235 and "false" case insensitive parameters.
216
236
217
237
218 Misc Noticeable changes:
238 Misc Noticeable changes:
219 ------------------------
239 ------------------------
220
240
221 - Exceptions are now (re)raised when running notebooks via the :magic:`%run`, helping to catch issues in workflows and
241 - Exceptions are now (re)raised when running notebooks via the :magic:`%run`, helping to catch issues in workflows and
222 pipelines. :ghpull:`12301`
242 pipelines. :ghpull:`12301`
223 - Fix inputhook for qt 5.15.0 :ghpull:`12355`
243 - Fix inputhook for qt 5.15.0 :ghpull:`12355`
224 - Fix wx inputhook :ghpull:`12375`
244 - Fix wx inputhook :ghpull:`12375`
225 - Add handling for malformed pathext env var (Windows) :ghpull:`12367`
245 - Add handling for malformed pathext env var (Windows) :ghpull:`12367`
226 - use $SHELL in system_piped :ghpull:`12360` for uniform behavior with
246 - use $SHELL in system_piped :ghpull:`12360` for uniform behavior with
227 ipykernel.
247 ipykernel.
228
248
229 Reproducible Build
249 Reproducible Build
230 ------------------
250 ------------------
231
251
232 IPython 7.15 reproducible build did not work, so we try again this month
252 IPython 7.15 reproducible build did not work, so we try again this month
233 :ghpull:`12358`.
253 :ghpull:`12358`.
234
254
235
255
236 API Changes
256 API Changes
237 -----------
257 -----------
238
258
239 Change of API and exposed objects automatically detected using `frappuccino
259 Change of API and exposed objects automatically detected using `frappuccino
240 <https://pypi.org/project/frappuccino/>`_ (still in beta):
260 <https://pypi.org/project/frappuccino/>`_ (still in beta):
241
261
242
262
243 The following items are new and mostly related to understanding ``__tracebackbhide__``::
263 The following items are new and mostly related to understanding ``__tracebackbhide__``::
244
264
245 + IPython.core.debugger.Pdb.do_down(self, arg)
265 + IPython.core.debugger.Pdb.do_down(self, arg)
246 + IPython.core.debugger.Pdb.do_skip_hidden(self, arg)
266 + IPython.core.debugger.Pdb.do_skip_hidden(self, arg)
247 + IPython.core.debugger.Pdb.do_up(self, arg)
267 + IPython.core.debugger.Pdb.do_up(self, arg)
248 + IPython.core.debugger.Pdb.hidden_frames(self, stack)
268 + IPython.core.debugger.Pdb.hidden_frames(self, stack)
249 + IPython.core.debugger.Pdb.stop_here(self, frame)
269 + IPython.core.debugger.Pdb.stop_here(self, frame)
250
270
251
271
252 The following items have been removed::
272 The following items have been removed::
253
273
254 - IPython.core.debugger.Pdb.new_do_down
274 - IPython.core.debugger.Pdb.new_do_down
255 - IPython.core.debugger.Pdb.new_do_up
275 - IPython.core.debugger.Pdb.new_do_up
256
276
257 Those were implementation details.
277 Those were implementation details.
258
278
259
279
260 .. _version 715:
280 .. _version 715:
261
281
262 IPython 7.15
282 IPython 7.15
263 ============
283 ============
264
284
265 IPython 7.15 brings a number of bug fixes and user facing improvements.
285 IPython 7.15 brings a number of bug fixes and user facing improvements.
266
286
267 Misc Noticeable changes:
287 Misc Noticeable changes:
268 ------------------------
288 ------------------------
269
289
270 - Long completion name have better elision in terminal :ghpull:`12284`
290 - Long completion name have better elision in terminal :ghpull:`12284`
271 - I've started to test on Python 3.9 :ghpull:`12307` and fix some errors.
291 - I've started to test on Python 3.9 :ghpull:`12307` and fix some errors.
272 - Hi DPI scaling of figures when using qt eventloop :ghpull:`12314`
292 - Hi DPI scaling of figures when using qt eventloop :ghpull:`12314`
273 - Document the ability to have systemwide configuration for IPython.
293 - Document the ability to have systemwide configuration for IPython.
274 :ghpull:`12328`
294 :ghpull:`12328`
275 - Fix issues with input autoformatting :ghpull:`12336`
295 - Fix issues with input autoformatting :ghpull:`12336`
276 - ``IPython.core.debugger.Pdb`` is now interruptible (:ghpull:`12168`, in 7.14
296 - ``IPython.core.debugger.Pdb`` is now interruptible (:ghpull:`12168`, in 7.14
277 but forgotten in release notes)
297 but forgotten in release notes)
278 - Video HTML attributes (:ghpull:`12212`, in 7.14 but forgotten in release
298 - Video HTML attributes (:ghpull:`12212`, in 7.14 but forgotten in release
279 notes)
299 notes)
280
300
281 Reproducible Build
301 Reproducible Build
282 ------------------
302 ------------------
283
303
284 Starting with IPython 7.15, I am attempting to provide reproducible builds,
304 Starting with IPython 7.15, I am attempting to provide reproducible builds,
285 that is to say you should be able from the source tree to generate an sdist
305 that is to say you should be able from the source tree to generate an sdist
286 and wheel that are identical byte for byte with the publish version on PyPI.
306 and wheel that are identical byte for byte with the publish version on PyPI.
287
307
288 I've only tested on a couple of machines so far and the process is relatively
308 I've only tested on a couple of machines so far and the process is relatively
289 straightforward, so this mean that IPython not only have a deterministic build
309 straightforward, so this mean that IPython not only have a deterministic build
290 process, but also I have either removed, or put under control all effects of
310 process, but also I have either removed, or put under control all effects of
291 the build environments on the final artifact. I encourage you to attempt the
311 the build environments on the final artifact. I encourage you to attempt the
292 build process on your machine as documented in :ref:`core_developer_guide`
312 build process on your machine as documented in :ref:`core_developer_guide`
293 and let me know if you do not obtain an identical artifact.
313 and let me know if you do not obtain an identical artifact.
294
314
295 While reproducible builds is critical to check that the supply chain of (open
315 While reproducible builds is critical to check that the supply chain of (open
296 source) software has not been compromised, it can also help to speedup many
316 source) software has not been compromised, it can also help to speedup many
297 of the build processes in large environment (conda, apt...) by allowing
317 of the build processes in large environment (conda, apt...) by allowing
298 better caching of intermediate build steps.
318 better caching of intermediate build steps.
299
319
300 Learn more on `<https://reproducible-builds.org/>`_. `Reflections on trusting
320 Learn more on `<https://reproducible-builds.org/>`_. `Reflections on trusting
301 trust <https://dl.acm.org/doi/10.1145/358198.358210>`_ is also one of the
321 trust <https://dl.acm.org/doi/10.1145/358198.358210>`_ is also one of the
302 cornerstone and recommended reads on this subject.
322 cornerstone and recommended reads on this subject.
303
323
304 .. note::
324 .. note::
305
325
306 The build commit from which the sdist is generated is also `signed
326 The build commit from which the sdist is generated is also `signed
307 <https://en.wikipedia.org/wiki/Digital_signature>`_, so you should be able to
327 <https://en.wikipedia.org/wiki/Digital_signature>`_, so you should be able to
308 check it has not been compromised, and the git repository is a `merkle-tree
328 check it has not been compromised, and the git repository is a `merkle-tree
309 <https://en.wikipedia.org/wiki/Merkle_tree>`_, you can check the consistency
329 <https://en.wikipedia.org/wiki/Merkle_tree>`_, you can check the consistency
310 with `git-fsck <https://git-scm.com/docs/git-fsck>`_ which you likely `want
330 with `git-fsck <https://git-scm.com/docs/git-fsck>`_ which you likely `want
311 to enable by default
331 to enable by default
312 <https://gist.github.com/mbbx6spp/14b86437e794bffb4120>`_.
332 <https://gist.github.com/mbbx6spp/14b86437e794bffb4120>`_.
313
333
314 NEP29: Last version to support Python 3.6
334 NEP29: Last version to support Python 3.6
315 -----------------------------------------
335 -----------------------------------------
316
336
317 IPython 7.15 will be the Last IPython version to officially support Python
337 IPython 7.15 will be the Last IPython version to officially support Python
318 3.6, as stated by `NumPy Enhancement Proposal 29
338 3.6, as stated by `NumPy Enhancement Proposal 29
319 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_. Starting with
339 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_. Starting with
320 next minor version of IPython I may stop testing on Python 3.6 and may stop
340 next minor version of IPython I may stop testing on Python 3.6 and may stop
321 publishing release artifacts that install on Python 3.6
341 publishing release artifacts that install on Python 3.6
322
342
323 Highlighted features
343 Highlighted features
324 --------------------
344 --------------------
325
345
326 Highlighted features are not new, but seem to not be widely known, this
346 Highlighted features are not new, but seem to not be widely known, this
327 section will help you discover in more narrative form what you can do with
347 section will help you discover in more narrative form what you can do with
328 IPython.
348 IPython.
329
349
330 Increase Tab Completion Menu Height
350 Increase Tab Completion Menu Height
331 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
351 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
332
352
333 In terminal IPython it is possible to increase the hight of the tab-completion
353 In terminal IPython it is possible to increase the hight of the tab-completion
334 menu. To do so set the value of
354 menu. To do so set the value of
335 :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more
355 :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more
336 space at the bottom of the screen for various kind of menus in IPython including
356 space at the bottom of the screen for various kind of menus in IPython including
337 tab completion and searching in history.
357 tab completion and searching in history.
338
358
339 Autoformat Code in the terminal
359 Autoformat Code in the terminal
340 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
360 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
341
361
342 If you have a preferred code formatter, you can configure IPython to
362 If you have a preferred code formatter, you can configure IPython to
343 reformat your code. Set the value of
363 reformat your code. Set the value of
344 :configtrait:`TerminalInteractiveShell.autoformatter` to for example ``'black'``
364 :configtrait:`TerminalInteractiveShell.autoformatter` to for example ``'black'``
345 and IPython will auto format your code when possible.
365 and IPython will auto format your code when possible.
346
366
347
367
348 .. _version 714:
368 .. _version 714:
349
369
350 IPython 7.14
370 IPython 7.14
351 ============
371 ============
352
372
353 IPython 7.14 is a minor release that fix a couple of bugs and prepare
373 IPython 7.14 is a minor release that fix a couple of bugs and prepare
354 compatibility with new or future versions of some libraries.
374 compatibility with new or future versions of some libraries.
355
375
356 Important changes:
376 Important changes:
357 ------------------
377 ------------------
358
378
359 - Fix compatibility with Sphinx 3+ :ghpull:`12235`
379 - Fix compatibility with Sphinx 3+ :ghpull:`12235`
360 - Remove deprecated matplotlib parameter usage, compatibility with matplotlib
380 - Remove deprecated matplotlib parameter usage, compatibility with matplotlib
361 3.3+ :`122250`
381 3.3+ :`122250`
362
382
363 Misc Changes
383 Misc Changes
364 ------------
384 ------------
365
385
366 - set ``.py`` extension when editing current buffer in vi/emacs. :ghpull:`12167`
386 - set ``.py`` extension when editing current buffer in vi/emacs. :ghpull:`12167`
367 - support for unicode identifiers in ``?``/``??`` :ghpull:`12208`
387 - support for unicode identifiers in ``?``/``??`` :ghpull:`12208`
368 - add extra options to the ``Video`` Rich objects :ghpull:`12212`
388 - add extra options to the ``Video`` Rich objects :ghpull:`12212`
369 - add pretty-printing to ``SimpleNamespace`` :ghpull:`12230`
389 - add pretty-printing to ``SimpleNamespace`` :ghpull:`12230`
370
390
371 IPython.core.debugger.Pdb is now interruptible
391 IPython.core.debugger.Pdb is now interruptible
372 ----------------------------------------------
392 ----------------------------------------------
373
393
374 A ``KeyboardInterrupt`` will now interrupt IPython's extended debugger, in order to make Jupyter able to interrupt it. (:ghpull:`12168`)
394 A ``KeyboardInterrupt`` will now interrupt IPython's extended debugger, in order to make Jupyter able to interrupt it. (:ghpull:`12168`)
375
395
376 Video HTML attributes
396 Video HTML attributes
377 ---------------------
397 ---------------------
378
398
379 Add an option to `IPython.display.Video` to change the attributes of the HTML display of the video (:ghpull:`12212`)
399 Add an option to `IPython.display.Video` to change the attributes of the HTML display of the video (:ghpull:`12212`)
380
400
381
401
382 Pending deprecated imports
402 Pending deprecated imports
383 --------------------------
403 --------------------------
384
404
385 Many object present in ``IPython.core.display`` are there for internal use only,
405 Many object present in ``IPython.core.display`` are there for internal use only,
386 and should already been imported from ``IPython.display`` by users and external
406 and should already been imported from ``IPython.display`` by users and external
387 libraries. Trying to import those from ``IPython.core.display`` is still possible
407 libraries. Trying to import those from ``IPython.core.display`` is still possible
388 but will trigger a
408 but will trigger a
389 deprecation warning in later versions of IPython and will become errors in the
409 deprecation warning in later versions of IPython and will become errors in the
390 future.
410 future.
391
411
392 This will simplify compatibility with other Python kernels (like Xeus-Python),
412 This will simplify compatibility with other Python kernels (like Xeus-Python),
393 and simplify code base.
413 and simplify code base.
394
414
395
415
396
416
397
417
398 .. _version 713:
418 .. _version 713:
399
419
400 IPython 7.13
420 IPython 7.13
401 ============
421 ============
402
422
403 IPython 7.13 is the final release of the 7.x branch since master is diverging
423 IPython 7.13 is the final release of the 7.x branch since master is diverging
404 toward an 8.0. Exiting new features have already been merged in 8.0 and will
424 toward an 8.0. Exiting new features have already been merged in 8.0 and will
405 not be available on the 7.x branch. All the changes below have been backported
425 not be available on the 7.x branch. All the changes below have been backported
406 from the master branch.
426 from the master branch.
407
427
408
428
409 - Fix inability to run PDB when inside an event loop :ghpull:`12141`
429 - Fix inability to run PDB when inside an event loop :ghpull:`12141`
410 - Fix ability to interrupt some processes on windows :ghpull:`12137`
430 - Fix ability to interrupt some processes on windows :ghpull:`12137`
411 - Fix debugger shortcuts :ghpull:`12132`
431 - Fix debugger shortcuts :ghpull:`12132`
412 - improve tab completion when inside a string by removing irrelevant elements :ghpull:`12128`
432 - improve tab completion when inside a string by removing irrelevant elements :ghpull:`12128`
413 - Fix display of filename tab completion when the path is long :ghpull:`12122`
433 - Fix display of filename tab completion when the path is long :ghpull:`12122`
414 - Many removal of Python 2 specific code path :ghpull:`12110`
434 - Many removal of Python 2 specific code path :ghpull:`12110`
415 - displaying wav files do not require NumPy anymore, and is 5x to 30x faster :ghpull:`12113`
435 - displaying wav files do not require NumPy anymore, and is 5x to 30x faster :ghpull:`12113`
416
436
417 See the list of all closed issues and pull request on `github
437 See the list of all closed issues and pull request on `github
418 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A7.13>`_.
438 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A7.13>`_.
419
439
420 .. _version 712:
440 .. _version 712:
421
441
422 IPython 7.12
442 IPython 7.12
423 ============
443 ============
424
444
425 IPython 7.12 is a minor update that mostly brings code cleanup, removal of
445 IPython 7.12 is a minor update that mostly brings code cleanup, removal of
426 longtime deprecated function and a couple update to documentation cleanup as well.
446 longtime deprecated function and a couple update to documentation cleanup as well.
427
447
428 Notable changes are the following:
448 Notable changes are the following:
429
449
430 - Exit non-zero when ipython is given a file path to run that doesn't exist :ghpull:`12074`
450 - Exit non-zero when ipython is given a file path to run that doesn't exist :ghpull:`12074`
431 - Test PR on ARM64 with Travis-CI :ghpull:`12073`
451 - Test PR on ARM64 with Travis-CI :ghpull:`12073`
432 - Update CI to work with latest Pytest :ghpull:`12086`
452 - Update CI to work with latest Pytest :ghpull:`12086`
433 - Add infrastructure to run ipykernel eventloop via trio :ghpull:`12097`
453 - Add infrastructure to run ipykernel eventloop via trio :ghpull:`12097`
434 - Support git blame ignore revs :ghpull:`12091`
454 - Support git blame ignore revs :ghpull:`12091`
435 - Start multi-line ``__repr__`` s on their own line :ghpull:`12099`
455 - Start multi-line ``__repr__`` s on their own line :ghpull:`12099`
436
456
437 .. _version 7111:
457 .. _version 7111:
438
458
439 IPython 7.11.1
459 IPython 7.11.1
440 ==============
460 ==============
441
461
442 A couple of deprecated functions (no-op) have been reintroduces in py3compat as
462 A couple of deprecated functions (no-op) have been reintroduces in py3compat as
443 Cython was still relying on them, and will be removed in a couple of versions.
463 Cython was still relying on them, and will be removed in a couple of versions.
444
464
445 .. _version 711:
465 .. _version 711:
446
466
447 IPython 7.11
467 IPython 7.11
448 ============
468 ============
449
469
450 IPython 7.11 received a couple of compatibility fixes and code cleanup.
470 IPython 7.11 received a couple of compatibility fixes and code cleanup.
451
471
452 A number of function in the ``py3compat`` have been removed; a number of types
472 A number of function in the ``py3compat`` have been removed; a number of types
453 in the IPython code base are now non-ambiguous and now always ``unicode``
473 in the IPython code base are now non-ambiguous and now always ``unicode``
454 instead of ``Union[Unicode,bytes]``; many of the relevant code path have thus
474 instead of ``Union[Unicode,bytes]``; many of the relevant code path have thus
455 been simplified/cleaned and types annotation added.
475 been simplified/cleaned and types annotation added.
456
476
457 IPython support several verbosity level from exceptions. ``xmode plain`` now
477 IPython support several verbosity level from exceptions. ``xmode plain`` now
458 support chained exceptions. :ghpull:`11999`
478 support chained exceptions. :ghpull:`11999`
459
479
460 We are starting to remove ``shell=True`` in some usages of subprocess. While not directly
480 We are starting to remove ``shell=True`` in some usages of subprocess. While not directly
461 a security issue (as IPython is made to run arbitrary code anyway) it is not good
481 a security issue (as IPython is made to run arbitrary code anyway) it is not good
462 practice and we'd like to show the example. :ghissue:`12023`. This discussion
482 practice and we'd like to show the example. :ghissue:`12023`. This discussion
463 was started by ``@mschwager`` thanks to a new auditing tool they are working on
483 was started by ``@mschwager`` thanks to a new auditing tool they are working on
464 with duo-labs (`dlint <https://github.com/duo-labs/dlint>`_).
484 with duo-labs (`dlint <https://github.com/duo-labs/dlint>`_).
465
485
466 Work around some bugs in Python 3.9 tokenizer :ghpull:`12057`
486 Work around some bugs in Python 3.9 tokenizer :ghpull:`12057`
467
487
468 IPython will now print its version after a crash. :ghpull:`11986`
488 IPython will now print its version after a crash. :ghpull:`11986`
469
489
470 This is likely the last release from the 7.x series that will see new feature.
490 This is likely the last release from the 7.x series that will see new feature.
471 The master branch will soon accept large code changes and thrilling new
491 The master branch will soon accept large code changes and thrilling new
472 features; the 7.x branch will only start to accept critical bug fixes, and
492 features; the 7.x branch will only start to accept critical bug fixes, and
473 update dependencies.
493 update dependencies.
474
494
475 .. _version 7102:
495 .. _version 7102:
476
496
477 IPython 7.10.2
497 IPython 7.10.2
478 ==============
498 ==============
479
499
480 IPython 7.10.2 fix a couple of extra incompatibility between IPython, ipdb,
500 IPython 7.10.2 fix a couple of extra incompatibility between IPython, ipdb,
481 asyncio and Prompt Toolkit 3.
501 asyncio and Prompt Toolkit 3.
482
502
483 .. _version 7101:
503 .. _version 7101:
484
504
485 IPython 7.10.1
505 IPython 7.10.1
486 ==============
506 ==============
487
507
488 IPython 7.10.1 fix a couple of incompatibilities with Prompt toolkit 3 (please
508 IPython 7.10.1 fix a couple of incompatibilities with Prompt toolkit 3 (please
489 update Prompt toolkit to 3.0.2 at least), and fixes some interaction with
509 update Prompt toolkit to 3.0.2 at least), and fixes some interaction with
490 headless IPython.
510 headless IPython.
491
511
492 .. _version 7100:
512 .. _version 7100:
493
513
494 IPython 7.10.0
514 IPython 7.10.0
495 ==============
515 ==============
496
516
497 IPython 7.10 is the first double digit minor release in the last decade, and
517 IPython 7.10 is the first double digit minor release in the last decade, and
498 first since the release of IPython 1.0, previous double digit minor release was
518 first since the release of IPython 1.0, previous double digit minor release was
499 in August 2009.
519 in August 2009.
500
520
501 We've been trying to give you regular release on the last Friday of every month
521 We've been trying to give you regular release on the last Friday of every month
502 for a guaranty of rapid access to bug fixes and new features.
522 for a guaranty of rapid access to bug fixes and new features.
503
523
504 Unlike the previous first few releases that have seen only a couple of code
524 Unlike the previous first few releases that have seen only a couple of code
505 changes, 7.10 bring a number of changes, new features and bugfixes.
525 changes, 7.10 bring a number of changes, new features and bugfixes.
506
526
507 Stop Support for Python 3.5 – Adopt NEP 29
527 Stop Support for Python 3.5 – Adopt NEP 29
508 ------------------------------------------
528 ------------------------------------------
509
529
510 IPython has decided to follow the informational `NEP 29
530 IPython has decided to follow the informational `NEP 29
511 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_ which layout a clear
531 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_ which layout a clear
512 policy as to which version of (C)Python and NumPy are supported.
532 policy as to which version of (C)Python and NumPy are supported.
513
533
514 We thus dropped support for Python 3.5, and cleaned up a number of code path
534 We thus dropped support for Python 3.5, and cleaned up a number of code path
515 that were Python-version dependant. If you are on 3.5 or earlier pip should
535 that were Python-version dependant. If you are on 3.5 or earlier pip should
516 automatically give you the latest compatible version of IPython so you do not
536 automatically give you the latest compatible version of IPython so you do not
517 need to pin to a given version.
537 need to pin to a given version.
518
538
519 Support for Prompt Toolkit 3.0
539 Support for Prompt Toolkit 3.0
520 ------------------------------
540 ------------------------------
521
541
522 Prompt Toolkit 3.0 was release a week before IPython 7.10 and introduces a few
542 Prompt Toolkit 3.0 was release a week before IPython 7.10 and introduces a few
523 breaking changes. We believe IPython 7.10 should be compatible with both Prompt
543 breaking changes. We believe IPython 7.10 should be compatible with both Prompt
524 Toolkit 2.x and 3.x, though it has not been extensively tested with 3.x so
544 Toolkit 2.x and 3.x, though it has not been extensively tested with 3.x so
525 please report any issues.
545 please report any issues.
526
546
527
547
528 Prompt Rendering Performance improvements
548 Prompt Rendering Performance improvements
529 -----------------------------------------
549 -----------------------------------------
530
550
531 Pull Request :ghpull:`11933` introduced an optimisation in the prompt rendering
551 Pull Request :ghpull:`11933` introduced an optimisation in the prompt rendering
532 logic that should decrease the resource usage of IPython when using the
552 logic that should decrease the resource usage of IPython when using the
533 _default_ configuration but could potentially introduce a regression of
553 _default_ configuration but could potentially introduce a regression of
534 functionalities if you are using a custom prompt.
554 functionalities if you are using a custom prompt.
535
555
536 We know assume if you haven't changed the default keybindings that the prompt
556 We know assume if you haven't changed the default keybindings that the prompt
537 **will not change** during the duration of your input – which is for example
557 **will not change** during the duration of your input – which is for example
538 not true when using vi insert mode that switches between `[ins]` and `[nor]`
558 not true when using vi insert mode that switches between `[ins]` and `[nor]`
539 for the current mode.
559 for the current mode.
540
560
541 If you are experiencing any issue let us know.
561 If you are experiencing any issue let us know.
542
562
543 Code autoformatting
563 Code autoformatting
544 -------------------
564 -------------------
545
565
546 The IPython terminal can now auto format your code just before entering a new
566 The IPython terminal can now auto format your code just before entering a new
547 line or executing a command. To do so use the
567 line or executing a command. To do so use the
548 ``--TerminalInteractiveShell.autoformatter`` option and set it to ``'black'``;
568 ``--TerminalInteractiveShell.autoformatter`` option and set it to ``'black'``;
549 if black is installed IPython will use black to format your code when possible.
569 if black is installed IPython will use black to format your code when possible.
550
570
551 IPython cannot always properly format your code; in particular it will
571 IPython cannot always properly format your code; in particular it will
552 auto formatting with *black* will only work if:
572 auto formatting with *black* will only work if:
553
573
554 - Your code does not contains magics or special python syntax.
574 - Your code does not contains magics or special python syntax.
555
575
556 - There is no code after your cursor.
576 - There is no code after your cursor.
557
577
558 The Black API is also still in motion; so this may not work with all versions of
578 The Black API is also still in motion; so this may not work with all versions of
559 black.
579 black.
560
580
561 It should be possible to register custom formatter, though the API is till in
581 It should be possible to register custom formatter, though the API is till in
562 flux.
582 flux.
563
583
564 Arbitrary Mimetypes Handing in Terminal (Aka inline images in terminal)
584 Arbitrary Mimetypes Handing in Terminal (Aka inline images in terminal)
565 -----------------------------------------------------------------------
585 -----------------------------------------------------------------------
566
586
567 When using IPython terminal it is now possible to register function to handle
587 When using IPython terminal it is now possible to register function to handle
568 arbitrary mimetypes. While rendering non-text based representation was possible in
588 arbitrary mimetypes. While rendering non-text based representation was possible in
569 many jupyter frontend; it was not possible in terminal IPython, as usually
589 many jupyter frontend; it was not possible in terminal IPython, as usually
570 terminal are limited to displaying text. As many terminal these days provide
590 terminal are limited to displaying text. As many terminal these days provide
571 escape sequences to display non-text; bringing this loved feature to IPython CLI
591 escape sequences to display non-text; bringing this loved feature to IPython CLI
572 made a lot of sens. This functionality will not only allow inline images; but
592 made a lot of sens. This functionality will not only allow inline images; but
573 allow opening of external program; for example ``mplayer`` to "display" sound
593 allow opening of external program; for example ``mplayer`` to "display" sound
574 files.
594 files.
575
595
576 So far only the hooks necessary for this are in place, but no default mime
596 So far only the hooks necessary for this are in place, but no default mime
577 renderers added; so inline images will only be available via extensions. We will
597 renderers added; so inline images will only be available via extensions. We will
578 progressively enable these features by default in the next few releases, and
598 progressively enable these features by default in the next few releases, and
579 contribution is welcomed.
599 contribution is welcomed.
580
600
581 We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more
601 We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more
582 informations.
602 informations.
583
603
584 This is originally based on work form in :ghpull:`10610` from @stephanh42
604 This is originally based on work form in :ghpull:`10610` from @stephanh42
585 started over two years ago, and still a lot need to be done.
605 started over two years ago, and still a lot need to be done.
586
606
587 MISC
607 MISC
588 ----
608 ----
589
609
590 - Completions can define their own ordering :ghpull:`11855`
610 - Completions can define their own ordering :ghpull:`11855`
591 - Enable Plotting in the same cell than the one that import matplotlib
611 - Enable Plotting in the same cell than the one that import matplotlib
592 :ghpull:`11916`
612 :ghpull:`11916`
593 - Allow to store and restore multiple variables at once :ghpull:`11930`
613 - Allow to store and restore multiple variables at once :ghpull:`11930`
594
614
595 You can see `all pull-requests <https://github.com/ipython/ipython/pulls?q=is%3Apr+milestone%3A7.10+is%3Aclosed>`_ for this release.
615 You can see `all pull-requests <https://github.com/ipython/ipython/pulls?q=is%3Apr+milestone%3A7.10+is%3Aclosed>`_ for this release.
596
616
597 API Changes
617 API Changes
598 -----------
618 -----------
599
619
600 Change of API and exposed objects automatically detected using `frappuccino <https://pypi.org/project/frappuccino/>`_ (still in beta):
620 Change of API and exposed objects automatically detected using `frappuccino <https://pypi.org/project/frappuccino/>`_ (still in beta):
601
621
602 The following items are new in IPython 7.10::
622 The following items are new in IPython 7.10::
603
623
604 + IPython.terminal.shortcuts.reformat_text_before_cursor(buffer, document, shell)
624 + IPython.terminal.shortcuts.reformat_text_before_cursor(buffer, document, shell)
605 + IPython.terminal.interactiveshell.PTK3
625 + IPython.terminal.interactiveshell.PTK3
606 + IPython.terminal.interactiveshell.black_reformat_handler(text_before_cursor)
626 + IPython.terminal.interactiveshell.black_reformat_handler(text_before_cursor)
607 + IPython.terminal.prompts.RichPromptDisplayHook.write_format_data(self, format_dict, md_dict='None')
627 + IPython.terminal.prompts.RichPromptDisplayHook.write_format_data(self, format_dict, md_dict='None')
608
628
609 The following items have been removed in 7.10::
629 The following items have been removed in 7.10::
610
630
611 - IPython.lib.pretty.DICT_IS_ORDERED
631 - IPython.lib.pretty.DICT_IS_ORDERED
612
632
613 The following signatures differ between versions::
633 The following signatures differ between versions::
614
634
615 - IPython.extensions.storemagic.restore_aliases(ip)
635 - IPython.extensions.storemagic.restore_aliases(ip)
616 + IPython.extensions.storemagic.restore_aliases(ip, alias='None')
636 + IPython.extensions.storemagic.restore_aliases(ip, alias='None')
617
637
618 Special Thanks
638 Special Thanks
619 --------------
639 --------------
620
640
621 - @stephanh42 who started the work on inline images in terminal 2 years ago
641 - @stephanh42 who started the work on inline images in terminal 2 years ago
622 - @augustogoulart who spent a lot of time triaging issues and responding to
642 - @augustogoulart who spent a lot of time triaging issues and responding to
623 users.
643 users.
624 - @con-f-use who is my (@Carreau) first sponsor on GitHub, as a reminder if you
644 - @con-f-use who is my (@Carreau) first sponsor on GitHub, as a reminder if you
625 like IPython, Jupyter and many other library of the SciPy stack you can
645 like IPython, Jupyter and many other library of the SciPy stack you can
626 donate to numfocus.org non profit
646 donate to numfocus.org non profit
627
647
628 .. _version 790:
648 .. _version 790:
629
649
630 IPython 7.9.0
650 IPython 7.9.0
631 =============
651 =============
632
652
633 IPython 7.9 is a small release with a couple of improvement and bug fixes.
653 IPython 7.9 is a small release with a couple of improvement and bug fixes.
634
654
635 - Xterm terminal title should be restored on exit :ghpull:`11910`
655 - Xterm terminal title should be restored on exit :ghpull:`11910`
636 - special variables ``_``,``__``, ``___`` are not set anymore when cache size
656 - special variables ``_``,``__``, ``___`` are not set anymore when cache size
637 is 0 or less. :ghpull:`11877`
657 is 0 or less. :ghpull:`11877`
638 - Autoreload should have regained some speed by using a new heuristic logic to
658 - Autoreload should have regained some speed by using a new heuristic logic to
639 find all objects needing reload. This should avoid large objects traversal
659 find all objects needing reload. This should avoid large objects traversal
640 like pandas dataframes. :ghpull:`11876`
660 like pandas dataframes. :ghpull:`11876`
641 - Get ready for Python 4. :ghpull:`11874`
661 - Get ready for Python 4. :ghpull:`11874`
642 - `%env` Magic now has heuristic to hide potentially sensitive values :ghpull:`11896`
662 - `%env` Magic now has heuristic to hide potentially sensitive values :ghpull:`11896`
643
663
644 This is a small release despite a number of Pull Request Pending that need to
664 This is a small release despite a number of Pull Request Pending that need to
645 be reviewed/worked on. Many of the core developers have been busy outside of
665 be reviewed/worked on. Many of the core developers have been busy outside of
646 IPython/Jupyter and we thanks all contributor for their patience; we'll work on
666 IPython/Jupyter and we thanks all contributor for their patience; we'll work on
647 these as soon as we have time.
667 these as soon as we have time.
648
668
649
669
650 .. _version780:
670 .. _version780:
651
671
652 IPython 7.8.0
672 IPython 7.8.0
653 =============
673 =============
654
674
655 IPython 7.8.0 contain a few bugfix and 2 new APIs:
675 IPython 7.8.0 contain a few bugfix and 2 new APIs:
656
676
657 - Enable changing the font color for LaTeX rendering :ghpull:`11840`
677 - Enable changing the font color for LaTeX rendering :ghpull:`11840`
658 - and Re-Expose some PDB API (see below)
678 - and Re-Expose some PDB API (see below)
659
679
660 Expose Pdb API
680 Expose Pdb API
661 --------------
681 --------------
662
682
663 Expose the built-in ``pdb.Pdb`` API. ``Pdb`` constructor arguments are generically
683 Expose the built-in ``pdb.Pdb`` API. ``Pdb`` constructor arguments are generically
664 exposed, regardless of python version.
684 exposed, regardless of python version.
665 Newly exposed arguments:
685 Newly exposed arguments:
666
686
667 - ``skip`` - Python 3.1+
687 - ``skip`` - Python 3.1+
668 - ``nosiginnt`` - Python 3.2+
688 - ``nosiginnt`` - Python 3.2+
669 - ``readrc`` - Python 3.6+
689 - ``readrc`` - Python 3.6+
670
690
671 Try it out::
691 Try it out::
672
692
673 from IPython.terminal.debugger import TerminalPdb
693 from IPython.terminal.debugger import TerminalPdb
674 pdb = TerminalPdb(skip=["skipthismodule"])
694 pdb = TerminalPdb(skip=["skipthismodule"])
675
695
676
696
677 See :ghpull:`11840`
697 See :ghpull:`11840`
678
698
679 .. _version770:
699 .. _version770:
680
700
681 IPython 7.7.0
701 IPython 7.7.0
682 =============
702 =============
683
703
684 IPython 7.7.0 contain multiple bug fixes and documentation updates; Here are a
704 IPython 7.7.0 contain multiple bug fixes and documentation updates; Here are a
685 few of the outstanding issue fixed:
705 few of the outstanding issue fixed:
686
706
687 - Fix a bug introduced in 7.6 where the ``%matplotlib`` magic would fail on
707 - Fix a bug introduced in 7.6 where the ``%matplotlib`` magic would fail on
688 previously acceptable arguments :ghpull:`11814`.
708 previously acceptable arguments :ghpull:`11814`.
689 - Fix the manage location on freebsd :ghpull:`11808`.
709 - Fix the manage location on freebsd :ghpull:`11808`.
690 - Fix error message about aliases after ``%reset`` call in ipykernel
710 - Fix error message about aliases after ``%reset`` call in ipykernel
691 :ghpull:`11806`
711 :ghpull:`11806`
692 - Fix Duplication completions in emacs :ghpull:`11803`
712 - Fix Duplication completions in emacs :ghpull:`11803`
693
713
694 We are planning to adopt `NEP29 <https://github.com/numpy/numpy/pull/14086>`_
714 We are planning to adopt `NEP29 <https://github.com/numpy/numpy/pull/14086>`_
695 (still currently in draft) which may make this minor version of IPython the
715 (still currently in draft) which may make this minor version of IPython the
696 last one to support Python 3.5 and will make the code base more aggressive
716 last one to support Python 3.5 and will make the code base more aggressive
697 toward removing compatibility with older versions of Python.
717 toward removing compatibility with older versions of Python.
698
718
699 GitHub now support to give only "Triage" permissions to users; if you'd like to
719 GitHub now support to give only "Triage" permissions to users; if you'd like to
700 help close stale issues and labels issues please reach to us with your GitHub
720 help close stale issues and labels issues please reach to us with your GitHub
701 Username and we'll add you to the triage team. It is a great way to start
721 Username and we'll add you to the triage team. It is a great way to start
702 contributing and a path toward getting commit rights.
722 contributing and a path toward getting commit rights.
703
723
704 .. _version761:
724 .. _version761:
705
725
706 IPython 7.6.1
726 IPython 7.6.1
707 =============
727 =============
708
728
709 IPython 7.6.1 contain a critical bugfix in the ``%timeit`` magic, which would
729 IPython 7.6.1 contain a critical bugfix in the ``%timeit`` magic, which would
710 crash on some inputs as a side effect of :ghpull:`11716`. See :ghpull:`11812`
730 crash on some inputs as a side effect of :ghpull:`11716`. See :ghpull:`11812`
711
731
712
732
713 .. _whatsnew760:
733 .. _whatsnew760:
714
734
715 IPython 7.6.0
735 IPython 7.6.0
716 =============
736 =============
717
737
718 IPython 7.6.0 contains a couple of bug fixes and number of small features
738 IPython 7.6.0 contains a couple of bug fixes and number of small features
719 additions as well as some compatibility with the current development version of
739 additions as well as some compatibility with the current development version of
720 Python 3.8.
740 Python 3.8.
721
741
722 - Add a ``-l`` option to :magic:`psearch` to list the available search
742 - Add a ``-l`` option to :magic:`psearch` to list the available search
723 types. :ghpull:`11672`
743 types. :ghpull:`11672`
724 - Support ``PathLike`` for ``DisplayObject`` and ``Image``. :ghpull:`11764`
744 - Support ``PathLike`` for ``DisplayObject`` and ``Image``. :ghpull:`11764`
725 - Configurability of timeout in the test suite for slow platforms.
745 - Configurability of timeout in the test suite for slow platforms.
726 :ghpull:`11756`
746 :ghpull:`11756`
727 - Accept any casing for matplotlib backend. :ghpull:`121748`
747 - Accept any casing for matplotlib backend. :ghpull:`121748`
728 - Properly skip test that requires numpy to be installed :ghpull:`11723`
748 - Properly skip test that requires numpy to be installed :ghpull:`11723`
729 - More support for Python 3.8 and positional only arguments (pep570)
749 - More support for Python 3.8 and positional only arguments (pep570)
730 :ghpull:`11720`
750 :ghpull:`11720`
731 - Unicode names for the completion are loaded lazily on first use which
751 - Unicode names for the completion are loaded lazily on first use which
732 should decrease startup time. :ghpull:`11693`
752 should decrease startup time. :ghpull:`11693`
733 - Autoreload now update the types of reloaded objects; this for example allow
753 - Autoreload now update the types of reloaded objects; this for example allow
734 pickling of reloaded objects. :ghpull:`11644`
754 pickling of reloaded objects. :ghpull:`11644`
735 - Fix a bug where ``%%time`` magic would suppress cell output. :ghpull:`11716`
755 - Fix a bug where ``%%time`` magic would suppress cell output. :ghpull:`11716`
736
756
737
757
738 Prepare migration to pytest (instead of nose) for testing
758 Prepare migration to pytest (instead of nose) for testing
739 ---------------------------------------------------------
759 ---------------------------------------------------------
740
760
741 Most of the work between 7.5 and 7.6 was to prepare the migration from our
761 Most of the work between 7.5 and 7.6 was to prepare the migration from our
742 testing framework to pytest. Most of the test suite should now work by simply
762 testing framework to pytest. Most of the test suite should now work by simply
743 issuing ``pytest`` from the root of the repository.
763 issuing ``pytest`` from the root of the repository.
744
764
745 The migration to pytest is just at its beginning. Many of our test still rely
765 The migration to pytest is just at its beginning. Many of our test still rely
746 on IPython-specific plugins for nose using pytest (doctest using IPython syntax
766 on IPython-specific plugins for nose using pytest (doctest using IPython syntax
747 is one example of this where test appear as "passing", while no code has been
767 is one example of this where test appear as "passing", while no code has been
748 ran). Many test also need to be updated like ``yield-test`` to be properly
768 ran). Many test also need to be updated like ``yield-test`` to be properly
749 parametrized tests.
769 parametrized tests.
750
770
751 Migration to pytest allowed me to discover a number of issues in our test
771 Migration to pytest allowed me to discover a number of issues in our test
752 suite; which was hiding a number of subtle issues – or not actually running
772 suite; which was hiding a number of subtle issues – or not actually running
753 some of the tests in our test suite – I have thus corrected many of those; like
773 some of the tests in our test suite – I have thus corrected many of those; like
754 improperly closed resources; or used of deprecated features. I also made use of
774 improperly closed resources; or used of deprecated features. I also made use of
755 the ``pytest --durations=...`` to find some of our slowest test and speed them
775 the ``pytest --durations=...`` to find some of our slowest test and speed them
756 up (our test suite can now be up to 10% faster). Pytest as also a variety of
776 up (our test suite can now be up to 10% faster). Pytest as also a variety of
757 plugins and flags which will make the code quality of IPython and the testing
777 plugins and flags which will make the code quality of IPython and the testing
758 experience better.
778 experience better.
759
779
760 Misc
780 Misc
761 ----
781 ----
762
782
763 We skipped the release of 7.6 at the end of May, but will attempt to get back
783 We skipped the release of 7.6 at the end of May, but will attempt to get back
764 on schedule. We are starting to think about making introducing backward
784 on schedule. We are starting to think about making introducing backward
765 incompatible change and start the 8.0 series.
785 incompatible change and start the 8.0 series.
766
786
767 Special Thanks to Gabriel (@gpotter2 on GitHub), who among other took care many
787 Special Thanks to Gabriel (@gpotter2 on GitHub), who among other took care many
768 of the remaining task for 7.4 and 7.5, like updating the website.
788 of the remaining task for 7.4 and 7.5, like updating the website.
769
789
770 .. _whatsnew750:
790 .. _whatsnew750:
771
791
772 IPython 7.5.0
792 IPython 7.5.0
773 =============
793 =============
774
794
775 IPython 7.5.0 consist mostly of bug-fixes, and documentation updates, with one
795 IPython 7.5.0 consist mostly of bug-fixes, and documentation updates, with one
776 minor new feature. The `Audio` display element can now be assigned an element
796 minor new feature. The `Audio` display element can now be assigned an element
777 id when displayed in browser. See :ghpull:`11670`
797 id when displayed in browser. See :ghpull:`11670`
778
798
779 The major outstanding bug fix correct a change of behavior that was introduce
799 The major outstanding bug fix correct a change of behavior that was introduce
780 in 7.4.0 where some cell magics would not be able to access or modify global
800 in 7.4.0 where some cell magics would not be able to access or modify global
781 scope when using the ``@needs_local_scope`` decorator. This was typically
801 scope when using the ``@needs_local_scope`` decorator. This was typically
782 encountered with the ``%%time`` and ``%%timeit`` magics. See :ghissue:`11659`
802 encountered with the ``%%time`` and ``%%timeit`` magics. See :ghissue:`11659`
783 and :ghpull:`11698`.
803 and :ghpull:`11698`.
784
804
785 .. _whatsnew740:
805 .. _whatsnew740:
786
806
787 IPython 7.4.0
807 IPython 7.4.0
788 =============
808 =============
789
809
790 Unicode name completions
810 Unicode name completions
791 ------------------------
811 ------------------------
792
812
793 Previously, we provided completion for a unicode name with its relative symbol.
813 Previously, we provided completion for a unicode name with its relative symbol.
794 With this, now IPython provides complete suggestions to unicode name symbols.
814 With this, now IPython provides complete suggestions to unicode name symbols.
795
815
796 As on the PR, if user types ``\LAT<tab>``, IPython provides a list of
816 As on the PR, if user types ``\LAT<tab>``, IPython provides a list of
797 possible completions. In this case, it would be something like::
817 possible completions. In this case, it would be something like::
798
818
799 'LATIN CAPITAL LETTER A',
819 'LATIN CAPITAL LETTER A',
800 'LATIN CAPITAL LETTER B',
820 'LATIN CAPITAL LETTER B',
801 'LATIN CAPITAL LETTER C',
821 'LATIN CAPITAL LETTER C',
802 'LATIN CAPITAL LETTER D',
822 'LATIN CAPITAL LETTER D',
803 ....
823 ....
804
824
805 This help to type unicode character that do not have short latex aliases, and
825 This help to type unicode character that do not have short latex aliases, and
806 have long unicode names. for example ``Ν°``, ``\GREEK CAPITAL LETTER HETA``.
826 have long unicode names. for example ``Ν°``, ``\GREEK CAPITAL LETTER HETA``.
807
827
808 This feature was contributed by Luciana Marques :ghpull:`11583`.
828 This feature was contributed by Luciana Marques :ghpull:`11583`.
809
829
810 Make audio normalization optional
830 Make audio normalization optional
811 ---------------------------------
831 ---------------------------------
812
832
813 Added 'normalize' argument to `IPython.display.Audio`. This argument applies
833 Added 'normalize' argument to `IPython.display.Audio`. This argument applies
814 when audio data is given as an array of samples. The default of `normalize=True`
834 when audio data is given as an array of samples. The default of `normalize=True`
815 preserves prior behavior of normalizing the audio to the maximum possible range.
835 preserves prior behavior of normalizing the audio to the maximum possible range.
816 Setting to `False` disables normalization.
836 Setting to `False` disables normalization.
817
837
818
838
819 Miscellaneous
839 Miscellaneous
820 -------------
840 -------------
821
841
822 - Fix improper acceptation of ``return`` outside of functions. :ghpull:`11641`.
842 - Fix improper acceptation of ``return`` outside of functions. :ghpull:`11641`.
823 - Fixed PyQt 5.11 backwards incompatibility causing sip import failure.
843 - Fixed PyQt 5.11 backwards incompatibility causing sip import failure.
824 :ghpull:`11613`.
844 :ghpull:`11613`.
825 - Fix Bug where ``type?`` would crash IPython. :ghpull:`1608`.
845 - Fix Bug where ``type?`` would crash IPython. :ghpull:`1608`.
826 - Allow to apply ``@needs_local_scope`` to cell magics for convenience.
846 - Allow to apply ``@needs_local_scope`` to cell magics for convenience.
827 :ghpull:`11542`.
847 :ghpull:`11542`.
828
848
829 .. _whatsnew730:
849 .. _whatsnew730:
830
850
831 IPython 7.3.0
851 IPython 7.3.0
832 =============
852 =============
833
853
834 .. _whatsnew720:
854 .. _whatsnew720:
835
855
836 IPython 7.3.0 bring several bug fixes and small improvements that you will
856 IPython 7.3.0 bring several bug fixes and small improvements that you will
837 described bellow.
857 described bellow.
838
858
839 The biggest change to this release is the implementation of the ``%conda`` and
859 The biggest change to this release is the implementation of the ``%conda`` and
840 ``%pip`` magics, that will attempt to install packages in the **current
860 ``%pip`` magics, that will attempt to install packages in the **current
841 environment**. You may still need to restart your interpreter or kernel for the
861 environment**. You may still need to restart your interpreter or kernel for the
842 change to be taken into account, but it should simplify installation of packages
862 change to be taken into account, but it should simplify installation of packages
843 into remote environment. Installing using pip/conda from the command line is
863 into remote environment. Installing using pip/conda from the command line is
844 still the prefer method.
864 still the prefer method.
845
865
846 The ``%pip`` magic was already present, but was only printing a warning; now it
866 The ``%pip`` magic was already present, but was only printing a warning; now it
847 will actually forward commands to pip.
867 will actually forward commands to pip.
848
868
849 Misc bug fixes and improvements:
869 Misc bug fixes and improvements:
850
870
851 - Compatibility with Python 3.8.
871 - Compatibility with Python 3.8.
852 - Do not expand shell variable in execution magics, and added the
872 - Do not expand shell variable in execution magics, and added the
853 ``no_var_expand`` decorator for magic requiring a similar functionality
873 ``no_var_expand`` decorator for magic requiring a similar functionality
854 :ghpull:`11516`
874 :ghpull:`11516`
855 - Add ``%pip`` and ``%conda`` magic :ghpull:`11524`
875 - Add ``%pip`` and ``%conda`` magic :ghpull:`11524`
856 - Re-initialize posix aliases after a ``%reset`` :ghpull:`11528`
876 - Re-initialize posix aliases after a ``%reset`` :ghpull:`11528`
857 - Allow the IPython command line to run ``*.ipynb`` files :ghpull:`11529`
877 - Allow the IPython command line to run ``*.ipynb`` files :ghpull:`11529`
858
878
859 IPython 7.2.0
879 IPython 7.2.0
860 =============
880 =============
861
881
862 IPython 7.2.0 brings minor bugfixes, improvements, and new configuration options:
882 IPython 7.2.0 brings minor bugfixes, improvements, and new configuration options:
863
883
864 - Fix a bug preventing PySide2 GUI integration from working :ghpull:`11464`
884 - Fix a bug preventing PySide2 GUI integration from working :ghpull:`11464`
865 - Run CI on Mac OS ! :ghpull:`11471`
885 - Run CI on Mac OS ! :ghpull:`11471`
866 - Fix IPython "Demo" mode. :ghpull:`11498`
886 - Fix IPython "Demo" mode. :ghpull:`11498`
867 - Fix ``%run`` magic with path in name :ghpull:`11499`
887 - Fix ``%run`` magic with path in name :ghpull:`11499`
868 - Fix: add CWD to sys.path *after* stdlib :ghpull:`11502`
888 - Fix: add CWD to sys.path *after* stdlib :ghpull:`11502`
869 - Better rendering of signatures, especially long ones. :ghpull:`11505`
889 - Better rendering of signatures, especially long ones. :ghpull:`11505`
870 - Re-enable jedi by default if it's installed :ghpull:`11506`
890 - Re-enable jedi by default if it's installed :ghpull:`11506`
871 - Add New ``minimal`` exception reporting mode (useful for educational purpose). See :ghpull:`11509`
891 - Add New ``minimal`` exception reporting mode (useful for educational purpose). See :ghpull:`11509`
872
892
873
893
874 Added ability to show subclasses when using pinfo and other utilities
894 Added ability to show subclasses when using pinfo and other utilities
875 ---------------------------------------------------------------------
895 ---------------------------------------------------------------------
876
896
877 When using ``?``/``??`` on a class, IPython will now list the first 10 subclasses.
897 When using ``?``/``??`` on a class, IPython will now list the first 10 subclasses.
878
898
879 Special Thanks to Chris Mentzel of the Moore Foundation for this feature. Chris
899 Special Thanks to Chris Mentzel of the Moore Foundation for this feature. Chris
880 is one of the people who played a critical role in IPython/Jupyter getting
900 is one of the people who played a critical role in IPython/Jupyter getting
881 funding.
901 funding.
882
902
883 We are grateful for all the help Chris has given us over the years,
903 We are grateful for all the help Chris has given us over the years,
884 and we're now proud to have code contributed by Chris in IPython.
904 and we're now proud to have code contributed by Chris in IPython.
885
905
886 OSMagics.cd_force_quiet configuration option
906 OSMagics.cd_force_quiet configuration option
887 --------------------------------------------
907 --------------------------------------------
888
908
889 You can set this option to force the %cd magic to behave as if ``-q`` was passed:
909 You can set this option to force the %cd magic to behave as if ``-q`` was passed:
890 ::
910 ::
891
911
892 In [1]: cd /
912 In [1]: cd /
893 /
913 /
894
914
895 In [2]: %config OSMagics.cd_force_quiet = True
915 In [2]: %config OSMagics.cd_force_quiet = True
896
916
897 In [3]: cd /tmp
917 In [3]: cd /tmp
898
918
899 In [4]:
919 In [4]:
900
920
901 See :ghpull:`11491`
921 See :ghpull:`11491`
902
922
903 In vi editing mode, whether the prompt includes the current vi mode can now be configured
923 In vi editing mode, whether the prompt includes the current vi mode can now be configured
904 -----------------------------------------------------------------------------------------
924 -----------------------------------------------------------------------------------------
905
925
906 Set the ``TerminalInteractiveShell.prompt_includes_vi_mode`` to a boolean value
926 Set the ``TerminalInteractiveShell.prompt_includes_vi_mode`` to a boolean value
907 (default: True) to control this feature. See :ghpull:`11492`
927 (default: True) to control this feature. See :ghpull:`11492`
908
928
909 .. _whatsnew710:
929 .. _whatsnew710:
910
930
911 IPython 7.1.0
931 IPython 7.1.0
912 =============
932 =============
913
933
914 IPython 7.1.0 is the first minor release after 7.0.0 and mostly brings fixes to
934 IPython 7.1.0 is the first minor release after 7.0.0 and mostly brings fixes to
915 new features, internal refactoring, and fixes for regressions that happened during the 6.x->7.x
935 new features, internal refactoring, and fixes for regressions that happened during the 6.x->7.x
916 transition. It also brings **Compatibility with Python 3.7.1**, as we're
936 transition. It also brings **Compatibility with Python 3.7.1**, as we're
917 unwillingly relying on a bug in CPython.
937 unwillingly relying on a bug in CPython.
918
938
919 New Core Dev:
939 New Core Dev:
920
940
921 - We welcome Jonathan Slenders to the commiters. Jonathan has done a fantastic
941 - We welcome Jonathan Slenders to the commiters. Jonathan has done a fantastic
922 work on prompt_toolkit, and we'd like to recognise his impact by giving him
942 work on prompt_toolkit, and we'd like to recognise his impact by giving him
923 commit rights. :ghissue:`11397`
943 commit rights. :ghissue:`11397`
924
944
925 Notable Changes
945 Notable Changes
926
946
927 - Major update of "latex to unicode" tab completion map (see below)
947 - Major update of "latex to unicode" tab completion map (see below)
928
948
929 Notable New Features:
949 Notable New Features:
930
950
931 - Restore functionality and documentation of the **sphinx directive**, which
951 - Restore functionality and documentation of the **sphinx directive**, which
932 is now stricter (fail on error by daefault), has new configuration options,
952 is now stricter (fail on error by daefault), has new configuration options,
933 has a brand new documentation page :ref:`ipython_directive` (which needs
953 has a brand new documentation page :ref:`ipython_directive` (which needs
934 some cleanup). It is also now *tested* so we hope to have less regressions.
954 some cleanup). It is also now *tested* so we hope to have less regressions.
935 :ghpull:`11402`
955 :ghpull:`11402`
936
956
937 - ``IPython.display.Video`` now supports ``width`` and ``height`` arguments,
957 - ``IPython.display.Video`` now supports ``width`` and ``height`` arguments,
938 allowing a custom width and height to be set instead of using the video's
958 allowing a custom width and height to be set instead of using the video's
939 width and height. :ghpull:`11353`
959 width and height. :ghpull:`11353`
940
960
941 - Warn when using ``HTML('<iframe>')`` instead of ``IFrame`` :ghpull:`11350`
961 - Warn when using ``HTML('<iframe>')`` instead of ``IFrame`` :ghpull:`11350`
942
962
943 - Allow Dynamic switching of editing mode between vi/emacs and show
963 - Allow Dynamic switching of editing mode between vi/emacs and show
944 normal/input mode in prompt when using vi. :ghpull:`11390`. Use ``%config
964 normal/input mode in prompt when using vi. :ghpull:`11390`. Use ``%config
945 TerminalInteractiveShell.editing_mode = 'vi'`` or ``%config
965 TerminalInteractiveShell.editing_mode = 'vi'`` or ``%config
946 TerminalInteractiveShell.editing_mode = 'emacs'`` to dynamically switch
966 TerminalInteractiveShell.editing_mode = 'emacs'`` to dynamically switch
947 between modes.
967 between modes.
948
968
949
969
950 Notable Fixes:
970 Notable Fixes:
951
971
952 - Fix entering of **multi-line blocks in terminal** IPython, and various
972 - Fix entering of **multi-line blocks in terminal** IPython, and various
953 crashes in the new input transformation machinery :ghpull:`11354`,
973 crashes in the new input transformation machinery :ghpull:`11354`,
954 :ghpull:`11356`, :ghpull:`11358`. These also fix a **Compatibility bug
974 :ghpull:`11356`, :ghpull:`11358`. These also fix a **Compatibility bug
955 with Python 3.7.1**.
975 with Python 3.7.1**.
956
976
957 - Fix moving through generator stack in ipdb :ghpull:`11266`
977 - Fix moving through generator stack in ipdb :ghpull:`11266`
958
978
959 - %Magic command arguments now support quoting. :ghpull:`11330`
979 - %Magic command arguments now support quoting. :ghpull:`11330`
960
980
961 - Re-add ``rprint`` and ``rprinte`` aliases. :ghpull:`11331`
981 - Re-add ``rprint`` and ``rprinte`` aliases. :ghpull:`11331`
962
982
963 - Remove implicit dependency on ``ipython_genutils`` :ghpull:`11317`
983 - Remove implicit dependency on ``ipython_genutils`` :ghpull:`11317`
964
984
965 - Make ``nonlocal`` raise ``SyntaxError`` instead of silently failing in async
985 - Make ``nonlocal`` raise ``SyntaxError`` instead of silently failing in async
966 mode. :ghpull:`11382`
986 mode. :ghpull:`11382`
967
987
968 - Fix mishandling of magics and ``= !`` assignment just after a dedent in
988 - Fix mishandling of magics and ``= !`` assignment just after a dedent in
969 nested code blocks :ghpull:`11418`
989 nested code blocks :ghpull:`11418`
970
990
971 - Fix instructions for custom shortcuts :ghpull:`11426`
991 - Fix instructions for custom shortcuts :ghpull:`11426`
972
992
973
993
974 Notable Internals improvements:
994 Notable Internals improvements:
975
995
976 - Use of ``os.scandir`` (Python 3 only) to speed up some file system operations.
996 - Use of ``os.scandir`` (Python 3 only) to speed up some file system operations.
977 :ghpull:`11365`
997 :ghpull:`11365`
978
998
979 - use ``perf_counter`` instead of ``clock`` for more precise
999 - use ``perf_counter`` instead of ``clock`` for more precise
980 timing results with ``%time`` :ghpull:`11376`
1000 timing results with ``%time`` :ghpull:`11376`
981
1001
982 Many thanks to all the contributors and in particular to ``bartskowron`` and
1002 Many thanks to all the contributors and in particular to ``bartskowron`` and
983 ``tonyfast`` who handled some pretty complicated bugs in the input machinery. We
1003 ``tonyfast`` who handled some pretty complicated bugs in the input machinery. We
984 had a number of first time contributors and maybe hacktoberfest participants that
1004 had a number of first time contributors and maybe hacktoberfest participants that
985 made significant contributions and helped us free some time to focus on more
1005 made significant contributions and helped us free some time to focus on more
986 complicated bugs.
1006 complicated bugs.
987
1007
988 You
1008 You
989 can see all the closed issues and Merged PR, new features and fixes `here
1009 can see all the closed issues and Merged PR, new features and fixes `here
990 <https://github.com/ipython/ipython/issues?utf8=%E2%9C%93&q=+is%3Aclosed+milestone%3A7.1+>`_.
1010 <https://github.com/ipython/ipython/issues?utf8=%E2%9C%93&q=+is%3Aclosed+milestone%3A7.1+>`_.
991
1011
992 Unicode Completion update
1012 Unicode Completion update
993 -------------------------
1013 -------------------------
994
1014
995 In IPython 7.1 the Unicode completion map has been updated and synchronized with
1015 In IPython 7.1 the Unicode completion map has been updated and synchronized with
996 the Julia language.
1016 the Julia language.
997
1017
998 Added and removed character characters:
1018 Added and removed character characters:
999
1019
1000 ``\jmath`` (``Θ·``), ``\\underleftrightarrow`` (U+034D, combining) have been
1020 ``\jmath`` (``Θ·``), ``\\underleftrightarrow`` (U+034D, combining) have been
1001 added, while ``\\textasciicaron`` have been removed
1021 added, while ``\\textasciicaron`` have been removed
1002
1022
1003 Some sequences have seen their prefix removed:
1023 Some sequences have seen their prefix removed:
1004
1024
1005 - 6 characters ``\text...<tab>`` should now be inputed with ``\...<tab>`` directly,
1025 - 6 characters ``\text...<tab>`` should now be inputed with ``\...<tab>`` directly,
1006 - 45 characters ``\Elz...<tab>`` should now be inputed with ``\...<tab>`` directly,
1026 - 45 characters ``\Elz...<tab>`` should now be inputed with ``\...<tab>`` directly,
1007 - 65 characters ``\B...<tab>`` should now be inputed with ``\...<tab>`` directly,
1027 - 65 characters ``\B...<tab>`` should now be inputed with ``\...<tab>`` directly,
1008 - 450 characters ``\m...<tab>`` should now be inputed with ``\...<tab>`` directly,
1028 - 450 characters ``\m...<tab>`` should now be inputed with ``\...<tab>`` directly,
1009
1029
1010 Some sequences have seen their prefix shortened:
1030 Some sequences have seen their prefix shortened:
1011
1031
1012 - 5 characters ``\mitBbb...<tab>`` should now be inputed with ``\bbi...<tab>`` directly,
1032 - 5 characters ``\mitBbb...<tab>`` should now be inputed with ``\bbi...<tab>`` directly,
1013 - 52 characters ``\mit...<tab>`` should now be inputed with ``\i...<tab>`` directly,
1033 - 52 characters ``\mit...<tab>`` should now be inputed with ``\i...<tab>`` directly,
1014 - 216 characters ``\mbfit...<tab>`` should now be inputed with ``\bi...<tab>`` directly,
1034 - 216 characters ``\mbfit...<tab>`` should now be inputed with ``\bi...<tab>`` directly,
1015 - 222 characters ``\mbf...<tab>`` should now be inputed with ``\b...<tab>`` directly,
1035 - 222 characters ``\mbf...<tab>`` should now be inputed with ``\b...<tab>`` directly,
1016
1036
1017 A couple of characters had their sequence simplified:
1037 A couple of characters had their sequence simplified:
1018
1038
1019 - ``Γ°``, type ``\dh<tab>``, instead of ``\eth<tab>``
1039 - ``Γ°``, type ``\dh<tab>``, instead of ``\eth<tab>``
1020 - ``Δ§``, type ``\hbar<tab>``, instead of ``\Elzxh<tab>``
1040 - ``Δ§``, type ``\hbar<tab>``, instead of ``\Elzxh<tab>``
1021 - ``ΙΈ``, type ``\ltphi<tab>``, instead of ``\textphi<tab>``
1041 - ``ΙΈ``, type ``\ltphi<tab>``, instead of ``\textphi<tab>``
1022 - ``Ο΄``, type ``\varTheta<tab>``, instead of ``\textTheta<tab>``
1042 - ``Ο΄``, type ``\varTheta<tab>``, instead of ``\textTheta<tab>``
1023 - ``ℇ``, type ``\eulermascheroni<tab>``, instead of ``\Eulerconst<tab>``
1043 - ``ℇ``, type ``\eulermascheroni<tab>``, instead of ``\Eulerconst<tab>``
1024 - ``β„Ž``, type ``\planck<tab>``, instead of ``\Planckconst<tab>``
1044 - ``β„Ž``, type ``\planck<tab>``, instead of ``\Planckconst<tab>``
1025
1045
1026 - U+0336 (COMBINING LONG STROKE OVERLAY), type ``\strike<tab>``, instead of ``\Elzbar<tab>``.
1046 - U+0336 (COMBINING LONG STROKE OVERLAY), type ``\strike<tab>``, instead of ``\Elzbar<tab>``.
1027
1047
1028 A couple of sequences have been updated:
1048 A couple of sequences have been updated:
1029
1049
1030 - ``\varepsilon`` now gives ``Ι›`` (GREEK SMALL LETTER EPSILON) instead of ``Ξ΅`` (GREEK LUNATE EPSILON SYMBOL),
1050 - ``\varepsilon`` now gives ``Ι›`` (GREEK SMALL LETTER EPSILON) instead of ``Ξ΅`` (GREEK LUNATE EPSILON SYMBOL),
1031 - ``\underbar`` now gives U+0331 (COMBINING MACRON BELOW) instead of U+0332 (COMBINING LOW LINE).
1051 - ``\underbar`` now gives U+0331 (COMBINING MACRON BELOW) instead of U+0332 (COMBINING LOW LINE).
1032
1052
1033
1053
1034 .. _whatsnew700:
1054 .. _whatsnew700:
1035
1055
1036 IPython 7.0.0
1056 IPython 7.0.0
1037 =============
1057 =============
1038
1058
1039 Released Thursday September 27th, 2018
1059 Released Thursday September 27th, 2018
1040
1060
1041 IPython 7 includes major feature improvements.
1061 IPython 7 includes major feature improvements.
1042 This is also the second major version of IPython to support only
1062 This is also the second major version of IPython to support only
1043 Python 3 – starting at Python 3.4. Python 2 is still community-supported
1063 Python 3 – starting at Python 3.4. Python 2 is still community-supported
1044 on the bugfix only 5.x branch, but we remind you that Python 2 "end of life"
1064 on the bugfix only 5.x branch, but we remind you that Python 2 "end of life"
1045 is on Jan 1st 2020.
1065 is on Jan 1st 2020.
1046
1066
1047 We were able to backport bug fixes to the 5.x branch thanks to our backport bot which
1067 We were able to backport bug fixes to the 5.x branch thanks to our backport bot which
1048 backported more than `70 Pull-Requests
1068 backported more than `70 Pull-Requests
1049 <https://github.com/ipython/ipython/pulls?page=3&q=is%3Apr+sort%3Aupdated-desc+author%3Aapp%2Fmeeseeksdev++5.x&utf8=%E2%9C%93>`_, but there are still many PRs that required manual work. This is an area of the project where you can easily contribute by looking for `PRs that still need manual backport <https://github.com/ipython/ipython/issues?q=label%3A%22Still+Needs+Manual+Backport%22+is%3Aclosed+sort%3Aupdated-desc>`_
1069 <https://github.com/ipython/ipython/pulls?page=3&q=is%3Apr+sort%3Aupdated-desc+author%3Aapp%2Fmeeseeksdev++5.x&utf8=%E2%9C%93>`_, but there are still many PRs that required manual work. This is an area of the project where you can easily contribute by looking for `PRs that still need manual backport <https://github.com/ipython/ipython/issues?q=label%3A%22Still+Needs+Manual+Backport%22+is%3Aclosed+sort%3Aupdated-desc>`_
1050
1070
1051 The IPython 6.x branch will likely not see any further release unless critical
1071 The IPython 6.x branch will likely not see any further release unless critical
1052 bugs are found.
1072 bugs are found.
1053
1073
1054 Make sure you have pip > 9.0 before upgrading. You should be able to update by running:
1074 Make sure you have pip > 9.0 before upgrading. You should be able to update by running:
1055
1075
1056 .. code::
1076 .. code::
1057
1077
1058 pip install ipython --upgrade
1078 pip install ipython --upgrade
1059
1079
1060 .. only:: ipydev
1080 .. only:: ipydev
1061
1081
1062 If you are trying to install or update an ``alpha``, ``beta``, or ``rc``
1082 If you are trying to install or update an ``alpha``, ``beta``, or ``rc``
1063 version, use pip ``--pre`` flag.
1083 version, use pip ``--pre`` flag.
1064
1084
1065 .. code::
1085 .. code::
1066
1086
1067 pip install ipython --upgrade --pre
1087 pip install ipython --upgrade --pre
1068
1088
1069
1089
1070 Or, if you have conda installed:
1090 Or, if you have conda installed:
1071
1091
1072 .. code::
1092 .. code::
1073
1093
1074 conda install ipython
1094 conda install ipython
1075
1095
1076
1096
1077
1097
1078 Prompt Toolkit 2.0
1098 Prompt Toolkit 2.0
1079 ------------------
1099 ------------------
1080
1100
1081 IPython 7.0+ now uses ``prompt_toolkit 2.0``. If you still need to use an earlier
1101 IPython 7.0+ now uses ``prompt_toolkit 2.0``. If you still need to use an earlier
1082 ``prompt_toolkit`` version, you may need to pin IPython to ``<7.0``.
1102 ``prompt_toolkit`` version, you may need to pin IPython to ``<7.0``.
1083
1103
1084 Autowait: Asynchronous REPL
1104 Autowait: Asynchronous REPL
1085 ---------------------------
1105 ---------------------------
1086
1106
1087 Staring with IPython 7.0 on Python 3.6+, IPython can automatically ``await``
1107 Staring with IPython 7.0 on Python 3.6+, IPython can automatically ``await``
1088 top level code. You should not need to access an event loop or runner
1108 top level code. You should not need to access an event loop or runner
1089 yourself. To learn more, read the :ref:`autoawait` section of our docs, see
1109 yourself. To learn more, read the :ref:`autoawait` section of our docs, see
1090 :ghpull:`11265`, or try the following code::
1110 :ghpull:`11265`, or try the following code::
1091
1111
1092 Python 3.6.0
1112 Python 3.6.0
1093 Type 'copyright', 'credits' or 'license' for more information
1113 Type 'copyright', 'credits' or 'license' for more information
1094 IPython 7.0.0 -- An enhanced Interactive Python. Type '?' for help.
1114 IPython 7.0.0 -- An enhanced Interactive Python. Type '?' for help.
1095
1115
1096 In [1]: import aiohttp
1116 In [1]: import aiohttp
1097 ...: result = aiohttp.get('https://api.github.com')
1117 ...: result = aiohttp.get('https://api.github.com')
1098
1118
1099 In [2]: response = await result
1119 In [2]: response = await result
1100 <pause for a few 100s ms>
1120 <pause for a few 100s ms>
1101
1121
1102 In [3]: await response.json()
1122 In [3]: await response.json()
1103 Out[3]:
1123 Out[3]:
1104 {'authorizations_url': 'https://api.github.com/authorizations',
1124 {'authorizations_url': 'https://api.github.com/authorizations',
1105 'code_search_url': 'https://api.github.com/search/code?q={query}{&page,per_page,sort,order}',
1125 'code_search_url': 'https://api.github.com/search/code?q={query}{&page,per_page,sort,order}',
1106 ...
1126 ...
1107 }
1127 }
1108
1128
1109 .. note::
1129 .. note::
1110
1130
1111 Async integration is experimental code, behavior may change or be removed
1131 Async integration is experimental code, behavior may change or be removed
1112 between Python and IPython versions without warnings.
1132 between Python and IPython versions without warnings.
1113
1133
1114 Integration is by default with `asyncio`, but other libraries can be configured --
1134 Integration is by default with `asyncio`, but other libraries can be configured --
1115 like ``curio`` or ``trio`` -- to improve concurrency in the REPL::
1135 like ``curio`` or ``trio`` -- to improve concurrency in the REPL::
1116
1136
1117 In [1]: %autoawait trio
1137 In [1]: %autoawait trio
1118
1138
1119 In [2]: import trio
1139 In [2]: import trio
1120
1140
1121 In [3]: async def child(i):
1141 In [3]: async def child(i):
1122 ...: print(" child %s goes to sleep"%i)
1142 ...: print(" child %s goes to sleep"%i)
1123 ...: await trio.sleep(2)
1143 ...: await trio.sleep(2)
1124 ...: print(" child %s wakes up"%i)
1144 ...: print(" child %s wakes up"%i)
1125
1145
1126 In [4]: print('parent start')
1146 In [4]: print('parent start')
1127 ...: async with trio.open_nursery() as n:
1147 ...: async with trio.open_nursery() as n:
1128 ...: for i in range(3):
1148 ...: for i in range(3):
1129 ...: n.spawn(child, i)
1149 ...: n.spawn(child, i)
1130 ...: print('parent end')
1150 ...: print('parent end')
1131 parent start
1151 parent start
1132 child 2 goes to sleep
1152 child 2 goes to sleep
1133 child 0 goes to sleep
1153 child 0 goes to sleep
1134 child 1 goes to sleep
1154 child 1 goes to sleep
1135 <about 2 seconds pause>
1155 <about 2 seconds pause>
1136 child 2 wakes up
1156 child 2 wakes up
1137 child 1 wakes up
1157 child 1 wakes up
1138 child 0 wakes up
1158 child 0 wakes up
1139 parent end
1159 parent end
1140
1160
1141 See :ref:`autoawait` for more information.
1161 See :ref:`autoawait` for more information.
1142
1162
1143
1163
1144 Asynchronous code in a Notebook interface or any other frontend using the
1164 Asynchronous code in a Notebook interface or any other frontend using the
1145 Jupyter Protocol will require further updates to the IPykernel package.
1165 Jupyter Protocol will require further updates to the IPykernel package.
1146
1166
1147 Non-Asynchronous code
1167 Non-Asynchronous code
1148 ~~~~~~~~~~~~~~~~~~~~~
1168 ~~~~~~~~~~~~~~~~~~~~~
1149
1169
1150 As the internal API of IPython is now asynchronous, IPython needs to run under
1170 As the internal API of IPython is now asynchronous, IPython needs to run under
1151 an event loop. In order to allow many workflows, (like using the :magic:`%run`
1171 an event loop. In order to allow many workflows, (like using the :magic:`%run`
1152 magic, or copy-pasting code that explicitly starts/stop event loop), when
1172 magic, or copy-pasting code that explicitly starts/stop event loop), when
1153 top-level code is detected as not being asynchronous, IPython code is advanced
1173 top-level code is detected as not being asynchronous, IPython code is advanced
1154 via a pseudo-synchronous runner, and may not advance pending tasks.
1174 via a pseudo-synchronous runner, and may not advance pending tasks.
1155
1175
1156 Change to Nested Embed
1176 Change to Nested Embed
1157 ~~~~~~~~~~~~~~~~~~~~~~
1177 ~~~~~~~~~~~~~~~~~~~~~~
1158
1178
1159 The introduction of the ability to run async code had some effect on the
1179 The introduction of the ability to run async code had some effect on the
1160 ``IPython.embed()`` API. By default, embed will not allow you to run asynchronous
1180 ``IPython.embed()`` API. By default, embed will not allow you to run asynchronous
1161 code unless an event loop is specified.
1181 code unless an event loop is specified.
1162
1182
1163 Effects on Magics
1183 Effects on Magics
1164 ~~~~~~~~~~~~~~~~~
1184 ~~~~~~~~~~~~~~~~~
1165
1185
1166 Some magics will not work with async until they're updated.
1186 Some magics will not work with async until they're updated.
1167 Contributions welcome.
1187 Contributions welcome.
1168
1188
1169 Expected Future changes
1189 Expected Future changes
1170 ~~~~~~~~~~~~~~~~~~~~~~~
1190 ~~~~~~~~~~~~~~~~~~~~~~~
1171
1191
1172 We expect more internal but public IPython functions to become ``async``, and
1192 We expect more internal but public IPython functions to become ``async``, and
1173 will likely end up having a persistent event loop while IPython is running.
1193 will likely end up having a persistent event loop while IPython is running.
1174
1194
1175 Thanks
1195 Thanks
1176 ~~~~~~
1196 ~~~~~~
1177
1197
1178 This release took more than a year in the making.
1198 This release took more than a year in the making.
1179 The code was rebased a number of
1199 The code was rebased a number of
1180 times; leading to commit authorship that may have been lost in the final
1200 times; leading to commit authorship that may have been lost in the final
1181 Pull-Request. Huge thanks to many people for contribution, discussion, code,
1201 Pull-Request. Huge thanks to many people for contribution, discussion, code,
1182 documentation, use-cases: dalejung, danielballan, ellisonbg, fperez, gnestor,
1202 documentation, use-cases: dalejung, danielballan, ellisonbg, fperez, gnestor,
1183 minrk, njsmith, pganssle, tacaswell, takluyver , vidartf ... And many others.
1203 minrk, njsmith, pganssle, tacaswell, takluyver , vidartf ... And many others.
1184
1204
1185
1205
1186 Autoreload Improvement
1206 Autoreload Improvement
1187 ----------------------
1207 ----------------------
1188
1208
1189 The magic :magic:`%autoreload 2 <autoreload>` now captures new methods added to
1209 The magic :magic:`%autoreload 2 <autoreload>` now captures new methods added to
1190 classes. Earlier, only methods existing as of the initial import were being
1210 classes. Earlier, only methods existing as of the initial import were being
1191 tracked and updated.
1211 tracked and updated.
1192
1212
1193 This new feature helps dual environment development - Jupyter+IDE - where the
1213 This new feature helps dual environment development - Jupyter+IDE - where the
1194 code gradually moves from notebook cells to package files as it gets
1214 code gradually moves from notebook cells to package files as it gets
1195 structured.
1215 structured.
1196
1216
1197 **Example**: An instance of the class ``MyClass`` will be able to access the
1217 **Example**: An instance of the class ``MyClass`` will be able to access the
1198 method ``cube()`` after it is uncommented and the file ``file1.py`` is saved on
1218 method ``cube()`` after it is uncommented and the file ``file1.py`` is saved on
1199 disk.
1219 disk.
1200
1220
1201
1221
1202 .. code::
1222 .. code::
1203
1223
1204 # notebook
1224 # notebook
1205
1225
1206 from mymodule import MyClass
1226 from mymodule import MyClass
1207 first = MyClass(5)
1227 first = MyClass(5)
1208
1228
1209 .. code::
1229 .. code::
1210
1230
1211 # mymodule/file1.py
1231 # mymodule/file1.py
1212
1232
1213 class MyClass:
1233 class MyClass:
1214
1234
1215 def __init__(self, a=10):
1235 def __init__(self, a=10):
1216 self.a = a
1236 self.a = a
1217
1237
1218 def square(self):
1238 def square(self):
1219 print('compute square')
1239 print('compute square')
1220 return self.a*self.a
1240 return self.a*self.a
1221
1241
1222 # def cube(self):
1242 # def cube(self):
1223 # print('compute cube')
1243 # print('compute cube')
1224 # return self.a*self.a*self.a
1244 # return self.a*self.a*self.a
1225
1245
1226
1246
1227
1247
1228
1248
1229 Misc
1249 Misc
1230 ----
1250 ----
1231
1251
1232 The autoindent feature that was deprecated in 5.x was re-enabled and
1252 The autoindent feature that was deprecated in 5.x was re-enabled and
1233 un-deprecated in :ghpull:`11257`
1253 un-deprecated in :ghpull:`11257`
1234
1254
1235 Make :magic:`%run -n -i ... <run>` work correctly. Earlier, if :magic:`%run` was
1255 Make :magic:`%run -n -i ... <run>` work correctly. Earlier, if :magic:`%run` was
1236 passed both arguments, ``-n`` would be silently ignored. See :ghpull:`10308`
1256 passed both arguments, ``-n`` would be silently ignored. See :ghpull:`10308`
1237
1257
1238
1258
1239 The :cellmagic:`%%script` (as well as :cellmagic:`%%bash`,
1259 The :cellmagic:`%%script` (as well as :cellmagic:`%%bash`,
1240 :cellmagic:`%%ruby`... ) cell magics now raise by default if the return code of
1260 :cellmagic:`%%ruby`... ) cell magics now raise by default if the return code of
1241 the given code is non-zero (thus halting execution of further cells in a
1261 the given code is non-zero (thus halting execution of further cells in a
1242 notebook). The behavior can be disable by passing the ``--no-raise-error`` flag.
1262 notebook). The behavior can be disable by passing the ``--no-raise-error`` flag.
1243
1263
1244
1264
1245 Deprecations
1265 Deprecations
1246 ------------
1266 ------------
1247
1267
1248 A couple of unused functions and methods have been deprecated and will be removed
1268 A couple of unused functions and methods have been deprecated and will be removed
1249 in future versions:
1269 in future versions:
1250
1270
1251 - ``IPython.utils.io.raw_print_err``
1271 - ``IPython.utils.io.raw_print_err``
1252 - ``IPython.utils.io.raw_print``
1272 - ``IPython.utils.io.raw_print``
1253
1273
1254
1274
1255 Backwards incompatible changes
1275 Backwards incompatible changes
1256 ------------------------------
1276 ------------------------------
1257
1277
1258 * The API for transforming input before it is parsed as Python code has been
1278 * The API for transforming input before it is parsed as Python code has been
1259 completely redesigned: any custom input transformations will need to be
1279 completely redesigned: any custom input transformations will need to be
1260 rewritten. See :doc:`/config/inputtransforms` for details of the new API.
1280 rewritten. See :doc:`/config/inputtransforms` for details of the new API.
General Comments 0
You need to be logged in to leave comments. Login now