##// END OF EJS Templates
Fix typos
Andrew Kreimer -
Show More
@@ -1,283 +1,283
1 1 ========================================
2 2 0.9 series
3 3 ========================================
4 4
5 5 Release 0.9.1
6 6 =============
7 7
8 8 This release was quickly made to restore compatibility with Python 2.4, which
9 9 version 0.9 accidentally broke. No new features were introduced, other than
10 10 some additional testing support for internal use.
11 11
12 12
13 13 Release 0.9
14 14 ===========
15 15
16 16 New features
17 17 ------------
18 18
19 19 * All furl files and security certificates are now put in a read-only
20 20 directory named ~/.ipython/security.
21 21
22 22 * A single function :func:`get_ipython_dir`, in :mod:`IPython.genutils` that
23 23 determines the user's IPython directory in a robust manner.
24 24
25 25 * Laurent's WX application has been given a top-level script called
26 26 ipython-wx, and it has received numerous fixes. We expect this code to be
27 27 architecturally better integrated with Gael's WX 'ipython widget' over the
28 28 next few releases.
29 29
30 30 * The Editor synchronization work by Vivian De Smedt has been merged in. This
31 31 code adds a number of new editor hooks to synchronize with editors under
32 32 Windows.
33 33
34 34 * A new, still experimental but highly functional, WX shell by Gael Varoquaux.
35 35 This work was sponsored by Enthought, and while it's still very new, it is
36 36 based on a more cleanly organized architecture of the various IPython
37 37 components. We will continue to develop this over the next few releases as a
38 38 model for GUI components that use IPython.
39 39
40 40 * Another GUI frontend, Cocoa based (Cocoa is the OSX native GUI framework),
41 41 authored by Barry Wark. Currently the WX and the Cocoa ones have slightly
42 42 different internal organizations, but the whole team is working on finding
43 43 what the right abstraction points are for a unified codebase.
44 44
45 45 * As part of the frontend work, Barry Wark also implemented an experimental
46 46 event notification system that various ipython components can use. In the
47 47 next release the implications and use patterns of this system regarding the
48 48 various GUI options will be worked out.
49 49
50 50 * IPython finally has a full test system, that can test docstrings with
51 51 IPython-specific functionality. There are still a few pieces missing for it
52 52 to be widely accessible to all users (so they can run the test suite at any
53 53 time and report problems), but it now works for the developers. We are
54 54 working hard on continuing to improve it, as this was probably IPython's
55 55 major Achilles heel (the lack of proper test coverage made it effectively
56 56 impossible to do large-scale refactoring). The full test suite can now
57 57 be run using the :command:`iptest` command line program.
58 58
59 59 * The notion of a task has been completely reworked. An `ITask` interface has
60 60 been created. This interface defines the methods that tasks need to
61 61 implement. These methods are now responsible for things like submitting
62 62 tasks and processing results. There are two basic task types:
63 63 :class:`IPython.kernel.task.StringTask` (this is the old `Task` object, but
64 64 renamed) and the new :class:`IPython.kernel.task.MapTask`, which is based on
65 65 a function.
66 66
67 67 * A new interface, :class:`IPython.kernel.mapper.IMapper` has been defined to
68 68 standardize the idea of a `map` method. This interface has a single `map`
69 69 method that has the same syntax as the built-in `map`. We have also defined
70 70 a `mapper` factory interface that creates objects that implement
71 71 :class:`IPython.kernel.mapper.IMapper` for different controllers. Both the
72 72 multiengine and task controller now have mapping capabilities.
73 73
74 74 * The parallel function capabilities have been reworks. The major changes are
75 75 that i) there is now an `@parallel` magic that creates parallel functions,
76 76 ii) the syntax for multiple variable follows that of `map`, iii) both the
77 77 multiengine and task controller now have a parallel function implementation.
78 78
79 79 * All of the parallel computing capabilities from `ipython1-dev` have been
80 80 merged into IPython proper. This resulted in the following new subpackages:
81 81 :mod:`IPython.kernel`, :mod:`IPython.kernel.core`, :mod:`traitlets.config`,
82 82 :mod:`IPython.tools` and :mod:`IPython.testing`.
83 83
84 84 * As part of merging in the `ipython1-dev` stuff, the ``setup.py`` script and
85 85 friends have been completely refactored. Now we are checking for
86 86 dependencies using the approach that matplotlib uses.
87 87
88 88 * The documentation has been completely reorganized to accept the
89 89 documentation from `ipython1-dev`.
90 90
91 91 * We have switched to using Foolscap for all of our network protocols in
92 92 :mod:`IPython.kernel`. This gives us secure connections that are both
93 93 encrypted and authenticated.
94 94
95 95 * We have a brand new `COPYING.txt` files that describes the IPython license
96 96 and copyright. The biggest change is that we are putting "The IPython
97 97 Development Team" as the copyright holder. We give more details about
98 98 exactly what this means in this file. All developer should read this and use
99 99 the new banner in all IPython source code files.
100 100
101 101 * sh profile: ./foo runs foo as system command, no need to do !./foo anymore
102 102
103 103 * String lists now support ``sort(field, nums = True)`` method (to easily sort
104 104 system command output). Try it with ``a = !ls -l ; a.sort(1, nums=1)``.
105 105
106 106 * '%cpaste foo' now assigns the pasted block as string list, instead of string
107 107
108 108 * The ipcluster script now run by default with no security. This is done
109 109 because the main usage of the script is for starting things on localhost.
110 110 Eventually when ipcluster is able to start things on other hosts, we will put
111 111 security back.
112 112
113 113 * 'cd --foo' searches directory history for string foo, and jumps to that dir.
114 114 Last part of dir name is checked first. If no matches for that are found,
115 115 look at the whole path.
116 116
117 117
118 118 Bug fixes
119 119 ---------
120 120
121 121 * The Windows installer has been fixed. Now all IPython scripts have ``.bat``
122 122 versions created. Also, the Start Menu shortcuts have been updated.
123 123
124 124 * The colors escapes in the multiengine client are now turned off on win32 as
125 125 they don't print correctly.
126 126
127 127 * The :mod:`IPython.kernel.scripts.ipengine` script was exec'ing
128 128 mpi_import_statement incorrectly, which was leading the engine to crash when
129 129 mpi was enabled.
130 130
131 131 * A few subpackages had missing ``__init__.py`` files.
132 132
133 133 * The documentation is only created if Sphinx is found. Previously, the
134 134 ``setup.py`` script would fail if it was missing.
135 135
136 136 * Greedy ``cd`` completion has been disabled again (it was enabled in 0.8.4) as
137 137 it caused problems on certain platforms.
138 138
139 139
140 140 Backwards incompatible changes
141 141 ------------------------------
142 142
143 143 * The ``clusterfile`` options of the :command:`ipcluster` command has been
144 144 removed as it was not working and it will be replaced soon by something much
145 145 more robust.
146 146
147 147 * The :mod:`IPython.kernel` configuration now properly find the user's
148 148 IPython directory.
149 149
150 150 * In ipapi, the :func:`make_user_ns` function has been replaced with
151 151 :func:`make_user_namespaces`, to support dict subclasses in namespace
152 152 creation.
153 153
154 154 * :class:`IPython.kernel.client.Task` has been renamed
155 155 :class:`IPython.kernel.client.StringTask` to make way for new task types.
156 156
157 157 * The keyword argument `style` has been renamed `dist` in `scatter`, `gather`
158 158 and `map`.
159 159
160 160 * Renamed the values that the rename `dist` keyword argument can have from
161 161 `'basic'` to `'b'`.
162 162
163 163 * IPython has a larger set of dependencies if you want all of its capabilities.
164 164 See the ``setup.py`` script for details.
165 165
166 166 * The constructors for :class:`IPython.kernel.client.MultiEngineClient` and
167 167 :class:`IPython.kernel.client.TaskClient` no longer take the (ip,port) tuple.
168 168 Instead they take the filename of a file that contains the FURL for that
169 169 client. If the FURL file is in your IPYTHONDIR, it will be found automatically
170 170 and the constructor can be left empty.
171 171
172 172 * The asynchronous clients in :mod:`IPython.kernel.asyncclient` are now created
173 173 using the factory functions :func:`get_multiengine_client` and
174 174 :func:`get_task_client`. These return a `Deferred` to the actual client.
175 175
176 176 * The command line options to `ipcontroller` and `ipengine` have changed to
177 177 reflect the new Foolscap network protocol and the FURL files. Please see the
178 178 help for these scripts for details.
179 179
180 180 * The configuration files for the kernel have changed because of the Foolscap
181 181 stuff. If you were using custom config files before, you should delete them
182 182 and regenerate new ones.
183 183
184 184 Changes merged in from IPython1
185 185 -------------------------------
186 186
187 187 New features
188 188 ............
189 189
190 190 * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted and
191 191 zope.interface are now easy installable, we can declare them as dependencies
192 192 in our setupegg.py script.
193 193
194 194 * IPython is now compatible with Twisted 2.5.0 and 8.x.
195 195
196 196 * Added a new example of how to use :mod:`ipython1.kernel.asynclient`.
197 197
198 198 * Initial draft of a process daemon in :mod:`ipython1.daemon`. This has not
199 199 been merged into IPython and is still in `ipython1-dev`.
200 200
201 201 * The ``TaskController`` now has methods for getting the queue status.
202 202
203 203 * The ``TaskResult`` objects not have information about how long the task
204 204 took to run.
205 205
206 206 * We are attaching additional attributes to exceptions ``(_ipython_*)`` that
207 207 we use to carry additional info around.
208 208
209 209 * New top-level module :mod:`asyncclient` that has asynchronous versions (that
210 210 return deferreds) of the client classes. This is designed to users who want
211 211 to run their own Twisted reactor.
212 212
213 213 * All the clients in :mod:`client` are now based on Twisted. This is done by
214 214 running the Twisted reactor in a separate thread and using the
215 215 :func:`blockingCallFromThread` function that is in recent versions of Twisted.
216 216
217 217 * Functions can now be pushed/pulled to/from engines using
218 218 :meth:`MultiEngineClient.push_function` and
219 219 :meth:`MultiEngineClient.pull_function`.
220 220
221 221 * Gather/scatter are now implemented in the client to reduce the work load
222 222 of the controller and improve performance.
223 223
224 * Complete rewrite of the IPython docuementation. All of the documentation
224 * Complete rewrite of the IPython documentation. All of the documentation
225 225 from the IPython website has been moved into docs/source as restructured
226 226 text documents. PDF and HTML documentation are being generated using
227 227 Sphinx.
228 228
229 229 * New developer oriented documentation: development guidelines and roadmap.
230 230
231 231 * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt``
232 232 file that is organized by release and is meant to provide something more
233 233 relevant for users.
234 234
235 235 Bug fixes
236 236 .........
237 237
238 238 * Created a proper ``MANIFEST.in`` file to create source distributions.
239 239
240 240 * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine
241 241 actions were being collected with a :class:`DeferredList` with
242 242 ``fireononeerrback=1``. This meant that methods were returning
243 243 before all engines had given their results. This was causing extremely odd
244 244 bugs in certain cases. To fix this problem, we have 1) set
245 245 ``fireononeerrback=0`` to make sure all results (or exceptions) are in
246 246 before returning and 2) introduced a :exc:`CompositeError` exception
247 247 that wraps all of the engine exceptions. This is a huge change as it means
248 248 that users will have to catch :exc:`CompositeError` rather than the actual
249 249 exception.
250 250
251 251 Backwards incompatible changes
252 252 ..............................
253 253
254 254 * All names have been renamed to conform to the lowercase_with_underscore
255 255 convention. This will require users to change references to all names like
256 256 ``queueStatus`` to ``queue_status``.
257 257
258 258 * Previously, methods like :meth:`MultiEngineClient.push` and
259 259 :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was
260 260 becoming a problem as we weren't able to introduce new keyword arguments into
261 261 the API. Now these methods simple take a dict or sequence. This has also
262 262 allowed us to get rid of the ``*All`` methods like :meth:`pushAll` and
263 263 :meth:`pullAll`. These things are now handled with the ``targets`` keyword
264 264 argument that defaults to ``'all'``.
265 265
266 266 * The :attr:`MultiEngineClient.magicTargets` has been renamed to
267 267 :attr:`MultiEngineClient.targets`.
268 268
269 269 * All methods in the MultiEngine interface now accept the optional keyword
270 270 argument ``block``.
271 271
272 272 * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and
273 273 :class:`TaskController` to :class:`TaskClient`.
274 274
275 275 * Renamed the top-level module from :mod:`api` to :mod:`client`.
276 276
277 277 * Most methods in the multiengine interface now raise a :exc:`CompositeError`
278 278 exception that wraps the user's exceptions, rather than just raising the raw
279 279 user's exception.
280 280
281 281 * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push``
282 282 and ``pull``.
283 283
@@ -1,1798 +1,1798
1 1 ============
2 2 7.x Series
3 3 ============
4 4
5 5 .. _version 7.34:
6 6
7 7 IPython 7.34
8 8 ============
9 9
10 10 This version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
11 11 exit :ghpull:`13668`
12 12
13 13
14 14 .. _version 7.33:
15 15
16 16 IPython 7.33
17 17 ============
18 18
19 19 - Allow IPython hooks to receive current cell ids when frontend support it. See
20 20 :ghpull:`13600`
21 21
22 22 - ``?`` does not trigger the insertion of a new cell anymore as most frontend
23 23 allow proper multiline edition. :ghpull:`13625`
24 24
25 25
26 26 .. _version 7.32:
27 27
28 28 IPython 7.32
29 29 ============
30 30
31 31
32 32
33 33 Autoload magic lazily
34 34 ---------------------
35 35
36 36 The ability to configure magics to be lazily loaded has been added to IPython.
37 37 See the ``ipython --help-all`` section on ``MagicsManager.lazy_magic``.
38 38 One can now use::
39 39
40 40 c.MagicsManager.lazy_magics = {
41 41 "my_magic": "slow.to.import",
42 42 "my_other_magic": "also.slow",
43 43 }
44 44
45 45 And on first use of ``%my_magic``, or corresponding cell magic, or other line magic,
46 46 the corresponding ``load_ext`` will be called just before trying to invoke the magic.
47 47
48 48 Misc
49 49 ----
50 50
51 51 - Update sphinxify for Docrepr 0.2.0 :ghpull:`13503`.
52 52 - Set co_name for cells run line by line (to fix debugging with Python 3.10)
53 53 :ghpull:`13535`
54 54
55 55
56 56 Many thanks to all the contributors to this release. You can find all individual
57 57 contributions to this milestone `on github
58 58 <https://github.com/ipython/ipython/milestone/99>`__.
59 59
60 60 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
61 61 work on IPython and related libraries.
62 62
63 63 .. _version 7.31:
64 64
65 65 IPython 7.31
66 66 ============
67 67
68 68 IPython 7.31 brings a couple of backports and fixes from the 8.0 branches,
69 69 it is likely one of the last releases of the 7.x series, as 8.0 will probably be released
70 70 between this release and what would have been 7.32.
71 71
72 72 Please test 8.0 beta/rc releases in addition to this release.
73 73
74 74 This Releases:
75 75 - Backport some fixes for Python 3.10 (:ghpull:`13412`)
76 76 - use full-alpha transparency on dvipng rendered LaTeX (:ghpull:`13372`)
77 77
78 78 Many thanks to all the contributors to this release. You can find all individual
79 79 contributions to this milestone `on github
80 80 <https://github.com/ipython/ipython/milestone/95>`__.
81 81
82 82 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
83 83 work on IPython and related libraries.
84 84
85 85
86 86 .. _version 7.30:
87 87
88 88 IPython 7.30
89 89 ============
90 90
91 91 IPython 7.30 fixes a couple of bugs introduce in previous releases (in
92 92 particular with respect to path handling), and introduce a few features and
93 93 improvements:
94 94
95 95 Notably we will highlight :ghpull:`13267` "Document that ``%run`` can execute
96 96 notebooks and ipy scripts.", which is the first commit of Fernando PΓ©rez since
97 97 mid 2016 (IPython 5.1). If you are new to IPython, Fernando created IPython in
98 98 2001. The other most recent contribution of Fernando to IPython itself was
99 99 May 2018, by reviewing and merging PRs. I want to note that Fernando is still
100 100 active but mostly as a mentor and leader of the whole Jupyter organisation, but
101 101 we're still happy to see him contribute code !
102 102
103 103 :ghpull:`13290` "Use sphinxify (if available) in object_inspect_mime path"
104 104 should allow richer Repr of docstrings when using jupyterlab inspector.
105 105
106 106 :ghpull:`13311` make the debugger use ``ThreadPoolExecutor`` for debugger cmdloop.
107 107 This should fix some issues/infinite loop, but let us know if you come across
108 108 any regressions. In particular this fixes issues with `kmaork/madbg <https://github.com/kmaork/madbg>`_,
109 109 a remote debugger for IPython.
110 110
111 111 Note that this is likely the ante-penultimate release of IPython 7.x as a stable
112 112 branch, as I hope to release IPython 8.0 as well as IPython 7.31 next
113 113 month/early 2022.
114 114
115 115 IPython 8.0 will drop support for Python 3.7, removed nose as a dependency, and
116 116 7.x will only get critical bug fixes with 8.x becoming the new stable. This will
117 117 not be possible without `NumFOCUS Small Development Grants
118 118 <https://numfocus.org/programs/small-development-grants>`_ Which allowed us to
119 119 hire `Nikita Kniazev <https://github.com/Kojoley>`_ who provide Python and C++
120 120 help and contracting work.
121 121
122 122
123 123 Many thanks to all the contributors to this release. You can find all individual
124 124 contributions to this milestone `on github
125 125 <https://github.com/ipython/ipython/milestone/94?closed=1>`__.
126 126
127 127 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
128 128 work on IPython and related libraries.
129 129
130 130
131 131 .. _version 7.29:
132 132
133 133 IPython 7.29
134 134 ============
135 135
136 136
137 137 IPython 7.29 brings a couple of new functionalities to IPython and a number of bugfixes.
138 138 It is one of the largest recent release, relatively speaking, with close to 15 Pull Requests.
139 139
140 140
141 141 - fix an issue where base64 was returned instead of bytes when showing figures :ghpull:`13162`
142 142 - fix compatibility with PyQt6, PySide 6 :ghpull:`13172`. This may be of
143 143 interest if you are running on Apple Silicon as only qt6.2+ is natively
144 144 compatible.
145 145 - fix matplotlib qtagg eventloop :ghpull:`13179`
146 146 - Multiple docs fixes, typos, ... etc.
147 147 - Debugger will now exit by default on SigInt :ghpull:`13218`, this will be
148 148 useful in notebook/lab if you forgot to exit the debugger. "Interrupt Kernel"
149 149 will now exist the debugger.
150 150
151 151 It give Pdb the ability to skip code in decorators. If functions contain a
152 152 special value names ``__debuggerskip__ = True|False``, the function will not be
153 153 stepped into, and Pdb will step into lower frames only if the value is set to
154 154 ``False``. The exact behavior is still likely to have corner cases and will be
155 155 refined in subsequent releases. Feedback welcome. See the debugger module
156 156 documentation for more info. Thanks to the `D. E. Shaw
157 157 group <https://deshaw.com/>`__ for funding this feature.
158 158
159 159 The main branch of IPython is receiving a number of changes as we received a
160 160 `NumFOCUS SDG <https://numfocus.org/programs/small-development-grants>`__
161 161 ($4800), to help us finish replacing ``nose`` by ``pytest``, and make IPython
162 162 future proof with an 8.0 release.
163 163
164 164
165 165 Many thanks to all the contributors to this release. You can find all individual
166 166 contributions to this milestone `on github
167 167 <https://github.com/ipython/ipython/milestone/93>`__.
168 168
169 169 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
170 170 work on IPython and related libraries.
171 171
172 172
173 173 .. _version 7.28:
174 174
175 175 IPython 7.28
176 176 ============
177 177
178 178
179 179 IPython 7.28 is again a minor release that mostly bring bugfixes, and couple of
180 180 improvement. Many thanks to MrMino, who again did all the work this month, and
181 181 made a number of documentation improvements.
182 182
183 183 Here is a non-exhaustive list of changes,
184 184
185 185 Fixes:
186 186
187 187 - async with doesn't allow newlines :ghpull:`13090`
188 188 - Dynamically changing to vi mode via %config magic) :ghpull:`13091`
189 189
190 190 Virtualenv handling fixes:
191 191
192 192 - init_virtualenv now uses Pathlib :ghpull:`12548`
193 193 - Fix Improper path comparison of virtualenv directories :ghpull:`13140`
194 - Fix virtual environment user warning for lower case pathes :ghpull:`13094`
194 - Fix virtual environment user warning for lower case paths :ghpull:`13094`
195 195 - Adapt to all sorts of drive names for cygwin :ghpull:`13153`
196 196
197 197 New Features:
198 198
199 199 - enable autoplay in embed YouTube player :ghpull:`13133`
200 200
201 201 Documentation:
202 202
203 203 - Fix formatting for the core.interactiveshell documentation :ghpull:`13118`
204 204 - Fix broken ipyparallel's refs :ghpull:`13138`
205 205 - Improve formatting of %time documentation :ghpull:`13125`
206 206 - Reword the YouTubeVideo autoplay WN :ghpull:`13147`
207 207
208 208
209 209 Highlighted features
210 210 --------------------
211 211
212 212
213 213 ``YouTubeVideo`` autoplay and the ability to add extra attributes to ``IFrame``
214 214 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
215 215
216 216 You can add any extra attributes to the ``<iframe>`` tag using the new
217 217 ``extras`` argument in the ``IFrame`` class. For example::
218 218
219 219 In [1]: from IPython.display import IFrame
220 220
221 221 In [2]: IFrame(src="src", width=300, height=300, extras=['loading="eager"'])
222 222
223 223 The above cells will result in the following HTML code being displayed in a
224 224 notebook::
225 225
226 226 <iframe
227 227 width="300"
228 228 height="300"
229 229 src="src"
230 230 frameborder="0"
231 231 allowfullscreen
232 232 loading="eager"
233 233 ></iframe>
234 234
235 235 Related to the above, the ``YouTubeVideo`` class now takes an
236 236 ``allow_autoplay`` flag, which sets up the iframe of the embedded YouTube video
237 237 such that it allows autoplay.
238 238
239 239 .. note::
240 240 Whether this works depends on the autoplay policy of the browser rendering
241 241 the HTML allowing it. It also could get blocked by some browser extensions.
242 242
243 243 Try it out!
244 244
245 245 ::
246 246
247 247 In [1]: from IPython.display import YouTubeVideo
248 248
249 249 In [2]: YouTubeVideo("dQw4w9WgXcQ", allow_autoplay=True)
250 250
251 251
252 252
253 253 Thanks
254 254 ------
255 255
256 256 Many thanks to all the contributors to this release. You can find all individual
257 257 contributions to this milestone `on github
258 258 <https://github.com/ipython/ipython/milestone/92>`__.
259 259
260 260 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
261 261 work on IPython and related libraries.
262 262
263 263
264 264 .. _version 7.27:
265 265
266 266 IPython 7.27
267 267 ============
268 268
269 269 IPython 7.27 is a minor release that fixes a couple of issues and compatibility.
270 270
271 271 - Add support for GTK4 :ghpull:`131011`
272 272 - Add support for Qt6 :ghpull:`13085`
273 273 - Fix an issue with pip magic on windows :ghpull:`13093`
274 274
275 275 Thanks
276 276 ------
277 277
278 278 Many thanks to all the contributors to this release. You can find all individual
279 279 contributions to this milestone `on github
280 280 <https://github.com/ipython/ipython/milestone/91>`__.
281 281
282 282 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
283 283 work on IPython and related libraries.
284 284
285 285 .. _version 7.26:
286 286
287 287 IPython 7.26
288 288 ============
289 289
290 290 IPython 7.26 is a minor release that fixes a couple of issues, updates in API
291 291 and Copyright/Licenses issues around various part of the codebase.
292 292
293 293 We'll highlight `this issue <https://github.com/ipython/ipython/issues/13039>`
294 294 pointing out we were including and refereeing to code from Stack Overflow which
295 295 was CC-BY-SA, hence incompatible with the BSD license of IPython. This lead us
296 296 to a rewriting of the corresponding logic which in our case was done in a more
297 297 efficient way (in our case we were searching string prefixes instead of full
298 298 strings).
299 299
300 300 You will notice also a number of documentation improvements and cleanup.
301 301
302 302 Of particular interest are the following Pull-requests:
303 303
304 304
305 305 - The IPython directive now uses Sphinx logging for warnings. :ghpull:`13030`.
306 306 - Add expiry days option to pastebin magic and change http protocol to https.
307 307 :ghpull:`13056`
308 308 - Make Ipython.utils.timing work with jupyterlite :ghpull:`13050`.
309 309
310 310 Pastebin magic expiry days option
311 311 ---------------------------------
312 312
313 313 The Pastebin magic now has ``-e`` option to determine
314 314 the number of days for paste expiration. For example
315 315 the paste that created with ``%pastebin -e 20 1`` magic will
316 316 be available for next 20 days.
317 317
318 318
319 319
320 320
321 321
322 322 Thanks
323 323 ------
324 324
325 325 Many thanks to all the contributors to this release and in particular MrMino who
326 326 is doing most of the work those days. You can find all individual contributions
327 327 to this milestone `on github <https://github.com/ipython/ipython/milestone/90>`__.
328 328
329 329 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
330 330 work on IPython and related libraries.
331 331
332 332
333 333 .. _version 7.25:
334 334
335 335 IPython 7.25
336 336 ============
337 337
338 338 IPython 7.25 is a minor release that contains a single bugfix, which is highly
339 339 recommended for all users of ipdb, ipython debugger %debug magic and similar.
340 340
341 341 Issuing commands like ``where`` from within the debugger would reset the
342 342 local variables changes made by the user. It is interesting to look at the root
343 343 cause of the issue as accessing an attribute (``frame.f_locals``) would trigger
344 344 this side effects.
345 345
346 346 Thanks in particular to the patience from the reporters at D.E. Shaw for their
347 347 initial bug report that was due to a similar coding oversight in an extension,
348 348 and who took time to debug and narrow down the problem.
349 349
350 350 Thanks
351 351 ------
352 352
353 353 Many thanks to all the contributors to this release you can find all individual
354 354 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/89>`__.
355 355
356 356 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
357 357 work on IPython and related libraries.
358 358
359 359
360 360 .. _version 7.24:
361 361
362 362 IPython 7.24
363 363 ============
364 364
365 365 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
366 366 typical updates:
367 367
368 368 Misc
369 369 ----
370 370
371 371
372 372 - Fix an issue where ``%recall`` would both succeeded and print an error message
373 373 it failed. :ghpull:`12952`
374 374 - Drop support for NumPy 1.16 – practically has no effect beyond indicating in
375 375 package metadata that we do not support it. :ghpull:`12937`
376 376
377 377 Debugger improvements
378 378 ---------------------
379 379
380 380 The debugger (and ``%debug`` magic) have been improved and can skip or hide frames
381 381 originating from files that are not writable to the user, as these are less
382 382 likely to be the source of errors, or be part of system files this can be a useful
383 383 addition when debugging long errors.
384 384
385 385 In addition to the global ``skip_hidden True|False`` command, the debugger has
386 386 gained finer grained control of predicates as to whether to a frame should be
387 387 considered hidden. So far 3 predicates are available :
388 388
389 389 - ``tbhide``: frames containing the local variable ``__tracebackhide__`` set to
390 390 True.
391 391 - ``readonly``: frames originating from readonly files, set to False.
392 392 - ``ipython_internal``: frames that are likely to be from IPython internal
393 393 code, set to True.
394 394
395 395 You can toggle individual predicates during a session with
396 396
397 397 .. code-block::
398 398
399 399 ipdb> skip_predicates readonly True
400 400
401 401 Read-only files will now be considered hidden frames.
402 402
403 403
404 404 You can call ``skip_predicates`` without arguments to see the states of current
405 405 predicates:
406 406
407 407 .. code-block::
408 408
409 409 ipdb> skip_predicates
410 410 current predicates:
411 411 tbhide : True
412 412 readonly : False
413 413 ipython_internal : True
414 414
415 415 If all predicates are set to ``False``, ``skip_hidden`` will practically have
416 416 no effect. We attempt to warn you when all predicates are False.
417 417
418 418 Note that the ``readonly`` predicate may increase disk access as we check for
419 419 file access permission for all frames on many command invocation, but is usually
420 420 cached by operating systems. Let us know if you encounter any issues.
421 421
422 422 As the IPython debugger does not use the traitlets infrastructure for
423 423 configuration, by editing your ``.pdbrc`` files and appending commands you would
424 424 like to be executed just before entering the interactive prompt. For example:
425 425
426 426
427 427 .. code::
428 428
429 429 # file : ~/.pdbrc
430 430 skip_predicates readonly True
431 431 skip_predicates tbhide False
432 432
433 433 Will hide read only frames by default and show frames marked with
434 434 ``__tracebackhide__``.
435 435
436 436
437 437
438 438
439 439 Thanks
440 440 ------
441 441
442 442 Many thanks to all the contributors to this release you can find all individual
443 443 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/87>`__.
444 444
445 445 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
446 446 work on IPython and related libraries, in particular above mentioned
447 447 improvements to the debugger.
448 448
449 449
450 450
451 451
452 452 .. _version 7.23:
453 453
454 454 IPython 7.23 and 7.23.1
455 455 =======================
456 456
457 457
458 458 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
459 459 typical updates:
460 460
461 461 - We moved to GitHub actions away from Travis-CI, the transition may not be
462 462 100% complete (not testing on nightly anymore), but as we ran out of
463 463 Travis-Ci hours on the IPython organisation that was a necessary step.
464 464 :ghpull:`12900`.
465 465
466 466 - We have a new dependency: ``matplotlib-inline``, which try to extract
467 467 matplotlib inline backend specific behavior. It is available on PyPI and
468 468 conda-forge thus should not be a problem to upgrade to this version. If you
469 469 are a package maintainer that might be an extra dependency to package first.
470 470 :ghpull:`12817` (IPython 7.23.1 fix a typo that made this change fail)
471 471
472 472 In the addition/new feature category, ``display()`` now have a ``clear=True``
473 473 option to clear the display if any further outputs arrives, allowing users to
474 474 avoid having to use ``clear_output()`` directly. :ghpull:`12823`.
475 475
476 476 In bug fixes category, this release fix an issue when printing tracebacks
477 477 containing Unicode characters :ghpull:`12758`.
478 478
479 479 In code cleanup category :ghpull:`12932` remove usage of some deprecated
480 480 functionality for compatibility with Python 3.10.
481 481
482 482
483 483
484 484 Thanks
485 485 ------
486 486
487 487 Many thanks to all the contributors to this release you can find all individual
488 488 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/86>`__.
489 489 In particular MrMino for responding to almost all new issues, and triaging many
490 490 of the old ones, as well as takluyver, minrk, willingc for reacting quikly when
491 491 we ran out of CI Hours.
492 492
493 493 Thanks as well to organisations, QuantStack (martinRenou and SylvainCorlay) for
494 494 extracting matplotlib inline backend into its own package, and the `D. E. Shaw group
495 495 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
496 496
497 497
498 498 .. _version 7.22:
499 499
500 500 IPython 7.22
501 501 ============
502 502
503 503 Second release of IPython for 2021, mostly containing bug fixes. Here is a quick
504 504 rundown of the few changes.
505 505
506 506 - Fix some ``sys.excepthook`` shenanigan when embedding with qt, recommended if
507 507 you – for example – use `napari <https://napari.org>`__. :ghpull:`12842`.
508 508 - Fix bug when using the new ipdb ``%context`` magic :ghpull:`12844`
509 509 - Couples of deprecation cleanup :ghpull:`12868`
510 510 - Update for new dpast.com api if you use the ``%pastbin`` magic. :ghpull:`12712`
511 511 - Remove support for numpy before 1.16. :ghpull:`12836`
512 512
513 513
514 514 Thanks
515 515 ------
516 516
517 517 We have a new team member that you should see more often on the IPython
518 518 repository, BΕ‚aΕΌej Michalik (@MrMino) have been doing regular contributions to
519 519 IPython, and spent time replying to many issues and guiding new users to the
520 520 codebase; they now have triage permissions to the IPython repository and we'll
521 521 work toward giving them more permission in the future.
522 522
523 523 Many thanks to all the contributors to this release you can find all individual
524 524 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/84>`__.
525 525
526 526 Thanks as well to organisations, QuantStack for working on debugger
527 527 compatibility for Xeus_python, and the `D. E. Shaw group
528 528 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
529 529
530 530 .. _version 721:
531 531
532 532 IPython 7.21
533 533 ============
534 534
535 535 IPython 7.21 is the first release we have back on schedule of one release every
536 536 month; it contains a number of minor fixes and improvements, notably, the new
537 537 context command for ipdb
538 538
539 539
540 540 New "context" command in ipdb
541 541 -----------------------------
542 542
543 543 It is now possible to change the number of lines shown in the backtrace
544 544 information in ipdb using "context" command. :ghpull:`12826`
545 545
546 546 (thanks @MrMino, there are other improvement from them on master).
547 547
548 548 Other notable changes in IPython 7.21
549 549 -------------------------------------
550 550
551 551 - Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`.
552 552 - Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
553 553 - Misc docs fixes for compatibility and uniformity with Numpydoc.
554 554 :ghpull:`12824`
555 555
556 556
557 557 Thanks
558 558 ------
559 559
560 560 Many thanks to all the contributors to this release you can find all individual
561 561 contribution to this milestone `on github <https://github.com/ipython/ipython/milestone/83>`__.
562 562
563 563
564 564 .. _version 720:
565 565
566 566 IPython 7.20
567 567 ============
568 568
569 569 IPython 7.20 is the accumulation of 3 month of work on IPython, spacing between
570 570 IPython release have been increased from the usual once a month for various
571 571 reason.
572 572
573 573 - Mainly as I'm too busy and the effectively sole maintainer, and
574 574 - Second because not much changes happened before mid December.
575 575
576 576 The main driver for this release was the new version of Jedi 0.18 breaking API;
577 577 which was taken care of in the master branch early in 2020 but not in 7.x as I
578 578 though that by now 8.0 would be out.
579 579
580 580 The inclusion of a resolver in pip did not help and actually made things worse.
581 581 If usually I would have simply pinned Jedi to ``<0.18``; this is not a solution
582 582 anymore as now pip is free to install Jedi 0.18, and downgrade IPython.
583 583
584 584 I'll do my best to keep the regular release, but as the 8.0-dev branch and 7.x
585 585 are starting to diverge this is becoming difficult in particular with my limited
586 586 time, so if you have any cycles to spare I'll appreciate your help to respond to
587 587 issues and pushing 8.0 forward.
588 588
589 589 Here are thus some of the changes for IPython 7.20.
590 590
591 591 - Support for PyQt5 >= 5.11 :ghpull:`12715`
592 - ``%reset`` remove imports more agressively :ghpull:`12718`
592 - ``%reset`` remove imports more aggressively :ghpull:`12718`
593 593 - fix the ``%conda`` magic :ghpull:`12739`
594 594 - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793`
595 595
596 596
597 597 .. _version 719:
598 598
599 599 IPython 7.19
600 600 ============
601 601
602 602 IPython 7.19 accumulative two month of works, bug fixes and improvements, there
603 603 was exceptionally no release last month.
604 604
605 605 - Fix to restore the ability to specify more than one extension using command
606 606 line flags when using traitlets 5.0 :ghpull:`12543`
607 607 - Docs docs formatting that make the install commands work on zsh
608 608 :ghpull:`12587`
609 609 - Always display the last frame in tracebacks even if hidden with
610 610 ``__tracebackhide__`` :ghpull:`12601`
611 611 - Avoid an issue where a callback can be registered multiple times.
612 612 :ghpull:`12625`
613 613 - Avoid an issue in debugger mode where frames changes could be lost.
614 614 :ghpull:`12627`
615 615
616 616 - Never hide the frames that invoke a debugger, even if marked as hidden by
617 617 ``__tracebackhide__`` :ghpull:`12631`
618 618 - Fix calling the debugger in a recursive manner :ghpull:`12659`
619 619
620 620
621 621 A number of code changes have landed on master and we are getting close to
622 622 enough new features and codebase improvement that a 8.0 start to make sens.
623 623 For downstream packages, please start working on migrating downstream testing
624 624 away from iptest and using pytest, as nose will not work on Python 3.10 and we
625 625 will likely start removing it as a dependency for testing.
626 626
627 627 .. _version 718:
628 628
629 629 IPython 7.18
630 630 ============
631 631
632 632 IPython 7.18 is a minor release that mostly contains bugfixes.
633 633
634 634 - ``CRLF`` is now handled by magics my default; solving some issues due to copy
635 635 pasting on windows. :ghpull:`12475`
636 636
637 637 - Requiring pexpect ``>=4.3`` as we are Python 3.7+ only and earlier version of
638 638 pexpect will be incompatible. :ghpull:`12510`
639 639
640 640 - Minimum jedi version is now 0.16. :ghpull:`12488`
641 641
642 642
643 643
644 644 .. _version 717:
645 645
646 646 IPython 7.17
647 647 ============
648 648
649 649 IPython 7.17 brings a couple of new improvements to API and a couple of user
650 650 facing changes to make the terminal experience more user friendly.
651 651
652 652 :ghpull:`12407` introduces the ability to pass extra argument to the IPython
653 653 debugger class; this is to help a new project from ``kmaork``
654 654 (https://github.com/kmaork/madbg) to feature a fully remote debugger.
655 655
656 656 :ghpull:`12410` finally remove support for 3.6, while the codebase is still
657 657 technically compatible; IPython will not install on Python 3.6.
658 658
659 659 lots of work on the debugger and hidden frames from ``@impact27`` in
660 660 :ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
661 661 :ghpull:`12453` which make the debug magic more robust at handling spaces.
662 662
663 663 Biggest API addition is code transformation which is done before code execution;
664 664 IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
665 665 stripping...etc). Transformers are usually called many time; typically:
666 666
667 667 - When trying to figure out whether the code is complete and valid (should we
668 668 insert a new line or execute ?)
669 669 - During actual code execution pass before giving the code to Python's
670 670 ``exec``.
671 671
672 672 This lead to issues when transformer might have had side effects; or do external
673 673 queries. Starting with IPython 7.17 you can expect your transformer to be called
674 674 less time.
675 675
676 676 Input transformers are now called only once in the execution path of
677 677 `InteractiveShell`, allowing to register transformer that potentially have side
678 678 effects (note that this is not recommended). Internal methods `should_run_async`, and
679 679 `run_cell_async` now take a recommended optional `transformed_cell`, and
680 680 `preprocessing_exc_tuple` parameters that will become mandatory at some point in
681 681 the future; that is to say cells need to be explicitly transformed to be valid
682 682 Python syntax ahead of trying to run them. :ghpull:`12440`;
683 683
684 684 ``input_transformers`` can now also have an attribute ``has_side_effects`` set
685 685 to `True`, when this attribute is present; this will prevent the transformers
686 686 from being ran when IPython is trying to guess whether the user input is
687 687 complete. Note that this may means you will need to explicitly execute in some
688 688 case where your transformations are now not ran; but will not affect users with
689 689 no custom extensions.
690 690
691 691
692 692 API Changes
693 693 -----------
694 694
695 695 Change of API and exposed objects automatically detected using `frappuccino
696 696 <https://pypi.org/project/frappuccino/>`_
697 697
698 698
699 699 The following items are new since 7.16.0::
700 700
701 701 + IPython.core.interactiveshell.InteractiveShell.get_local_scope(self, stack_depth)
702 702
703 703 The following signatures differ since 7.16.0::
704 704
705 705 - IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True)
706 706 + 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)
707 707
708 708 - IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell)
709 709 + IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell, *, transformed_cell=None, preprocessing_exc_tuple=None)
710 710
711 711 - IPython.terminal.debugger.TerminalPdb.pt_init(self)
712 712 + IPython.terminal.debugger.TerminalPdb.pt_init(self, pt_session_options=None)
713 713
714 714 This method was added::
715 715
716 716 + IPython.core.interactiveshell.InteractiveShell.get_local_scope
717 717
718 718 Which is now also present on subclasses::
719 719
720 720 + IPython.terminal.embed.InteractiveShellEmbed.get_local_scope
721 721 + IPython.terminal.interactiveshell.TerminalInteractiveShell.get_local_scope
722 722
723 723
724 724 .. _version 716:
725 725
726 726 IPython 7.16.1, 7.16.2
727 727 ======================
728 728
729 729 IPython 7.16.1 was release immediately after 7.16.0 to fix a conda packaging issue.
730 730 The source is identical to 7.16.0 but the file permissions in the tar are different.
731 731
732 732 IPython 7.16.2 pins jedi dependency to "<=0.17.2" which should prevent some
733 733 issues for users still on python 3.6. This may not be sufficient as pip may
734 734 still allow to downgrade IPython.
735 735
736 736 Compatibility with Jedi > 0.17.2 was not added as this would have meant bumping
737 737 the minimal version to >0.16.
738 738
739 739 IPython 7.16
740 740 ============
741 741
742 742
743 743 The default traceback mode will now skip frames that are marked with
744 744 ``__tracebackhide__ = True`` and show how many traceback frames have been
745 745 skipped. This can be toggled by using :magic:`xmode` with the ``--show`` or
746 746 ``--hide`` attribute. It will have no effect on non verbose traceback modes.
747 747
748 748 The ipython debugger also now understands ``__tracebackhide__`` as well and will
749 749 skip hidden frames when displaying. Movement up and down the stack will skip the
750 750 hidden frames and will show how many frames were hidden. Internal IPython frames
751 751 are also now hidden by default. The behavior can be changed with the
752 752 ``skip_hidden`` while in the debugger, command and accepts "yes", "no", "true"
753 753 and "false" case insensitive parameters.
754 754
755 755
756 756 Misc Noticeable changes:
757 757 ------------------------
758 758
759 759 - Exceptions are now (re)raised when running notebooks via the :magic:`%run`, helping to catch issues in workflows and
760 760 pipelines. :ghpull:`12301`
761 761 - Fix inputhook for qt 5.15.0 :ghpull:`12355`
762 762 - Fix wx inputhook :ghpull:`12375`
763 763 - Add handling for malformed pathext env var (Windows) :ghpull:`12367`
764 764 - use $SHELL in system_piped :ghpull:`12360` for uniform behavior with
765 765 ipykernel.
766 766
767 767 Reproducible Build
768 768 ------------------
769 769
770 770 IPython 7.15 reproducible build did not work, so we try again this month
771 771 :ghpull:`12358`.
772 772
773 773
774 774 API Changes
775 775 -----------
776 776
777 777 Change of API and exposed objects automatically detected using `frappuccino
778 778 <https://pypi.org/project/frappuccino/>`_ (still in beta):
779 779
780 780
781 781 The following items are new and mostly related to understanding ``__tracebackhide__``::
782 782
783 783 + IPython.core.debugger.Pdb.do_down(self, arg)
784 784 + IPython.core.debugger.Pdb.do_skip_hidden(self, arg)
785 785 + IPython.core.debugger.Pdb.do_up(self, arg)
786 786 + IPython.core.debugger.Pdb.hidden_frames(self, stack)
787 787 + IPython.core.debugger.Pdb.stop_here(self, frame)
788 788
789 789
790 790 The following items have been removed::
791 791
792 792 - IPython.core.debugger.Pdb.new_do_down
793 793 - IPython.core.debugger.Pdb.new_do_up
794 794
795 795 Those were implementation details.
796 796
797 797
798 798 .. _version 715:
799 799
800 800 IPython 7.15
801 801 ============
802 802
803 803 IPython 7.15 brings a number of bug fixes and user facing improvements.
804 804
805 805 Misc Noticeable changes:
806 806 ------------------------
807 807
808 808 - Long completion name have better elision in terminal :ghpull:`12284`
809 809 - I've started to test on Python 3.9 :ghpull:`12307` and fix some errors.
810 810 - Hi DPI scaling of figures when using qt eventloop :ghpull:`12314`
811 811 - Document the ability to have systemwide configuration for IPython.
812 812 :ghpull:`12328`
813 813 - Fix issues with input autoformatting :ghpull:`12336`
814 814 - ``IPython.core.debugger.Pdb`` is now interruptible (:ghpull:`12168`, in 7.14
815 815 but forgotten in release notes)
816 816 - Video HTML attributes (:ghpull:`12212`, in 7.14 but forgotten in release
817 817 notes)
818 818
819 819 Reproducible Build
820 820 ------------------
821 821
822 822 Starting with IPython 7.15, I am attempting to provide reproducible builds,
823 823 that is to say you should be able from the source tree to generate an sdist
824 824 and wheel that are identical byte for byte with the publish version on PyPI.
825 825
826 826 I've only tested on a couple of machines so far and the process is relatively
827 827 straightforward, so this mean that IPython not only have a deterministic build
828 828 process, but also I have either removed, or put under control all effects of
829 829 the build environments on the final artifact. I encourage you to attempt the
830 830 build process on your machine as documented in :ref:`core_developer_guide`
831 831 and let me know if you do not obtain an identical artifact.
832 832
833 833 While reproducible builds is critical to check that the supply chain of (open
834 834 source) software has not been compromised, it can also help to speedup many
835 835 of the build processes in large environment (conda, apt...) by allowing
836 836 better caching of intermediate build steps.
837 837
838 838 Learn more on `<https://reproducible-builds.org/>`_. `Reflections on trusting
839 839 trust <https://dl.acm.org/doi/10.1145/358198.358210>`_ is also one of the
840 840 cornerstone and recommended reads on this subject.
841 841
842 842 .. note::
843 843
844 844 The build commit from which the sdist is generated is also `signed
845 845 <https://en.wikipedia.org/wiki/Digital_signature>`_, so you should be able to
846 846 check it has not been compromised, and the git repository is a `merkle-tree
847 847 <https://en.wikipedia.org/wiki/Merkle_tree>`_, you can check the consistency
848 848 with `git-fsck <https://git-scm.com/docs/git-fsck>`_ which you likely `want
849 849 to enable by default
850 850 <https://gist.github.com/mbbx6spp/14b86437e794bffb4120>`_.
851 851
852 852 NEP29: Last version to support Python 3.6
853 853 -----------------------------------------
854 854
855 855 IPython 7.15 will be the Last IPython version to officially support Python
856 856 3.6, as stated by `NumPy Enhancement Proposal 29
857 857 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_. Starting with
858 858 next minor version of IPython I may stop testing on Python 3.6 and may stop
859 859 publishing release artifacts that install on Python 3.6
860 860
861 861 Highlighted features
862 862 --------------------
863 863
864 864 Highlighted features are not new, but seem to not be widely known, this
865 865 section will help you discover in more narrative form what you can do with
866 866 IPython.
867 867
868 868 Increase Tab Completion Menu Height
869 869 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
870 870
871 In terminal IPython it is possible to increase the hight of the tab-completion
871 In terminal IPython it is possible to increase the height of the tab-completion
872 872 menu. To do so set the value of
873 873 :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more
874 874 space at the bottom of the screen for various kind of menus in IPython including
875 875 tab completion and searching in history.
876 876
877 877 Autoformat Code in the terminal
878 878 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
879 879
880 880 If you have a preferred code formatter, you can configure IPython to
881 881 reformat your code. Set the value of
882 882 :configtrait:`TerminalInteractiveShell.autoformatter` to for example ``'black'``
883 883 and IPython will auto format your code when possible.
884 884
885 885
886 886 .. _version 714:
887 887
888 888 IPython 7.14
889 889 ============
890 890
891 891 IPython 7.14 is a minor release that fix a couple of bugs and prepare
892 892 compatibility with new or future versions of some libraries.
893 893
894 894 Important changes:
895 895 ------------------
896 896
897 897 - Fix compatibility with Sphinx 3+ :ghpull:`12235`
898 898 - Remove deprecated matplotlib parameter usage, compatibility with matplotlib
899 899 3.3+ :`122250`
900 900
901 901 Misc Changes
902 902 ------------
903 903
904 904 - set ``.py`` extension when editing current buffer in vi/emacs. :ghpull:`12167`
905 905 - support for unicode identifiers in ``?``/``??`` :ghpull:`12208`
906 906 - add extra options to the ``Video`` Rich objects :ghpull:`12212`
907 907 - add pretty-printing to ``SimpleNamespace`` :ghpull:`12230`
908 908
909 909 IPython.core.debugger.Pdb is now interruptible
910 910 ----------------------------------------------
911 911
912 912 A ``KeyboardInterrupt`` will now interrupt IPython's extended debugger, in order to make Jupyter able to interrupt it. (:ghpull:`12168`)
913 913
914 914 Video HTML attributes
915 915 ---------------------
916 916
917 917 Add an option to `IPython.display.Video` to change the attributes of the HTML display of the video (:ghpull:`12212`)
918 918
919 919
920 920 Pending deprecated imports
921 921 --------------------------
922 922
923 923 Many object present in ``IPython.core.display`` are there for internal use only,
924 924 and should already been imported from ``IPython.display`` by users and external
925 925 libraries. Trying to import those from ``IPython.core.display`` is still possible
926 926 but will trigger a
927 927 deprecation warning in later versions of IPython and will become errors in the
928 928 future.
929 929
930 930 This will simplify compatibility with other Python kernels (like Xeus-Python),
931 931 and simplify code base.
932 932
933 933
934 934
935 935
936 936 .. _version 713:
937 937
938 938 IPython 7.13
939 939 ============
940 940
941 941 IPython 7.13 is the final release of the 7.x branch since master is diverging
942 942 toward an 8.0. Exiting new features have already been merged in 8.0 and will
943 943 not be available on the 7.x branch. All the changes below have been backported
944 944 from the master branch.
945 945
946 946
947 947 - Fix inability to run PDB when inside an event loop :ghpull:`12141`
948 948 - Fix ability to interrupt some processes on windows :ghpull:`12137`
949 949 - Fix debugger shortcuts :ghpull:`12132`
950 950 - improve tab completion when inside a string by removing irrelevant elements :ghpull:`12128`
951 951 - Fix display of filename tab completion when the path is long :ghpull:`12122`
952 952 - Many removal of Python 2 specific code path :ghpull:`12110`
953 953 - displaying wav files do not require NumPy anymore, and is 5x to 30x faster :ghpull:`12113`
954 954
955 955 See the list of all closed issues and pull request on `github
956 956 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A7.13>`_.
957 957
958 958 .. _version 712:
959 959
960 960 IPython 7.12
961 961 ============
962 962
963 963 IPython 7.12 is a minor update that mostly brings code cleanup, removal of
964 964 longtime deprecated function and a couple update to documentation cleanup as well.
965 965
966 966 Notable changes are the following:
967 967
968 968 - Exit non-zero when ipython is given a file path to run that doesn't exist :ghpull:`12074`
969 969 - Test PR on ARM64 with Travis-CI :ghpull:`12073`
970 970 - Update CI to work with latest Pytest :ghpull:`12086`
971 971 - Add infrastructure to run ipykernel eventloop via trio :ghpull:`12097`
972 972 - Support git blame ignore revs :ghpull:`12091`
973 973 - Start multi-line ``__repr__`` s on their own line :ghpull:`12099`
974 974
975 975 .. _version 7111:
976 976
977 977 IPython 7.11.1
978 978 ==============
979 979
980 980 A couple of deprecated functions (no-op) have been reintroduces in py3compat as
981 981 Cython was still relying on them, and will be removed in a couple of versions.
982 982
983 983 .. _version 711:
984 984
985 985 IPython 7.11
986 986 ============
987 987
988 988 IPython 7.11 received a couple of compatibility fixes and code cleanup.
989 989
990 990 A number of function in the ``py3compat`` have been removed; a number of types
991 991 in the IPython code base are now non-ambiguous and now always ``unicode``
992 992 instead of ``Union[Unicode,bytes]``; many of the relevant code path have thus
993 993 been simplified/cleaned and types annotation added.
994 994
995 995 IPython support several verbosity level from exceptions. ``xmode plain`` now
996 996 support chained exceptions. :ghpull:`11999`
997 997
998 998 We are starting to remove ``shell=True`` in some usages of subprocess. While not directly
999 999 a security issue (as IPython is made to run arbitrary code anyway) it is not good
1000 1000 practice and we'd like to show the example. :ghissue:`12023`. This discussion
1001 1001 was started by ``@mschwager`` thanks to a new auditing tool they are working on
1002 1002 with duo-labs (`dlint <https://github.com/duo-labs/dlint>`_).
1003 1003
1004 1004 Work around some bugs in Python 3.9 tokenizer :ghpull:`12057`
1005 1005
1006 1006 IPython will now print its version after a crash. :ghpull:`11986`
1007 1007
1008 1008 This is likely the last release from the 7.x series that will see new feature.
1009 1009 The master branch will soon accept large code changes and thrilling new
1010 1010 features; the 7.x branch will only start to accept critical bug fixes, and
1011 1011 update dependencies.
1012 1012
1013 1013 .. _version 7102:
1014 1014
1015 1015 IPython 7.10.2
1016 1016 ==============
1017 1017
1018 1018 IPython 7.10.2 fix a couple of extra incompatibility between IPython, ipdb,
1019 1019 asyncio and Prompt Toolkit 3.
1020 1020
1021 1021 .. _version 7101:
1022 1022
1023 1023 IPython 7.10.1
1024 1024 ==============
1025 1025
1026 1026 IPython 7.10.1 fix a couple of incompatibilities with Prompt toolkit 3 (please
1027 1027 update Prompt toolkit to 3.0.2 at least), and fixes some interaction with
1028 1028 headless IPython.
1029 1029
1030 1030 .. _version 7100:
1031 1031
1032 1032 IPython 7.10.0
1033 1033 ==============
1034 1034
1035 1035 IPython 7.10 is the first double digit minor release in the last decade, and
1036 1036 first since the release of IPython 1.0, previous double digit minor release was
1037 1037 in August 2009.
1038 1038
1039 1039 We've been trying to give you regular release on the last Friday of every month
1040 1040 for a guaranty of rapid access to bug fixes and new features.
1041 1041
1042 1042 Unlike the previous first few releases that have seen only a couple of code
1043 1043 changes, 7.10 bring a number of changes, new features and bugfixes.
1044 1044
1045 1045 Stop Support for Python 3.5 – Adopt NEP 29
1046 1046 ------------------------------------------
1047 1047
1048 1048 IPython has decided to follow the informational `NEP 29
1049 1049 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_ which layout a clear
1050 1050 policy as to which version of (C)Python and NumPy are supported.
1051 1051
1052 1052 We thus dropped support for Python 3.5, and cleaned up a number of code path
1053 that were Python-version dependant. If you are on 3.5 or earlier pip should
1053 that were Python-version dependent. If you are on 3.5 or earlier pip should
1054 1054 automatically give you the latest compatible version of IPython so you do not
1055 1055 need to pin to a given version.
1056 1056
1057 1057 Support for Prompt Toolkit 3.0
1058 1058 ------------------------------
1059 1059
1060 1060 Prompt Toolkit 3.0 was release a week before IPython 7.10 and introduces a few
1061 1061 breaking changes. We believe IPython 7.10 should be compatible with both Prompt
1062 1062 Toolkit 2.x and 3.x, though it has not been extensively tested with 3.x so
1063 1063 please report any issues.
1064 1064
1065 1065
1066 1066 Prompt Rendering Performance improvements
1067 1067 -----------------------------------------
1068 1068
1069 1069 Pull Request :ghpull:`11933` introduced an optimisation in the prompt rendering
1070 1070 logic that should decrease the resource usage of IPython when using the
1071 1071 _default_ configuration but could potentially introduce a regression of
1072 1072 functionalities if you are using a custom prompt.
1073 1073
1074 1074 We know assume if you haven't changed the default keybindings that the prompt
1075 1075 **will not change** during the duration of your input – which is for example
1076 1076 not true when using vi insert mode that switches between `[ins]` and `[nor]`
1077 1077 for the current mode.
1078 1078
1079 1079 If you are experiencing any issue let us know.
1080 1080
1081 1081 Code autoformatting
1082 1082 -------------------
1083 1083
1084 1084 The IPython terminal can now auto format your code just before entering a new
1085 1085 line or executing a command. To do so use the
1086 1086 ``--TerminalInteractiveShell.autoformatter`` option and set it to ``'black'``;
1087 1087 if black is installed IPython will use black to format your code when possible.
1088 1088
1089 1089 IPython cannot always properly format your code; in particular it will
1090 1090 auto formatting with *black* will only work if:
1091 1091
1092 1092 - Your code does not contains magics or special python syntax.
1093 1093
1094 1094 - There is no code after your cursor.
1095 1095
1096 1096 The Black API is also still in motion; so this may not work with all versions of
1097 1097 black.
1098 1098
1099 1099 It should be possible to register custom formatter, though the API is till in
1100 1100 flux.
1101 1101
1102 1102 Arbitrary Mimetypes Handing in Terminal (Aka inline images in terminal)
1103 1103 -----------------------------------------------------------------------
1104 1104
1105 1105 When using IPython terminal it is now possible to register function to handle
1106 1106 arbitrary mimetypes. While rendering non-text based representation was possible in
1107 1107 many jupyter frontend; it was not possible in terminal IPython, as usually
1108 1108 terminal are limited to displaying text. As many terminal these days provide
1109 1109 escape sequences to display non-text; bringing this loved feature to IPython CLI
1110 1110 made a lot of sens. This functionality will not only allow inline images; but
1111 1111 allow opening of external program; for example ``mplayer`` to "display" sound
1112 1112 files.
1113 1113
1114 1114 So far only the hooks necessary for this are in place, but no default mime
1115 1115 renderers added; so inline images will only be available via extensions. We will
1116 1116 progressively enable these features by default in the next few releases, and
1117 1117 contribution is welcomed.
1118 1118
1119 1119 We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more
1120 informations.
1120 information.
1121 1121
1122 1122 This is originally based on work form in :ghpull:`10610` from @stephanh42
1123 1123 started over two years ago, and still a lot need to be done.
1124 1124
1125 1125 MISC
1126 1126 ----
1127 1127
1128 1128 - Completions can define their own ordering :ghpull:`11855`
1129 1129 - Enable Plotting in the same cell than the one that import matplotlib
1130 1130 :ghpull:`11916`
1131 1131 - Allow to store and restore multiple variables at once :ghpull:`11930`
1132 1132
1133 1133 You can see `all pull-requests <https://github.com/ipython/ipython/pulls?q=is%3Apr+milestone%3A7.10+is%3Aclosed>`_ for this release.
1134 1134
1135 1135 API Changes
1136 1136 -----------
1137 1137
1138 1138 Change of API and exposed objects automatically detected using `frappuccino <https://pypi.org/project/frappuccino/>`_ (still in beta):
1139 1139
1140 1140 The following items are new in IPython 7.10::
1141 1141
1142 1142 + IPython.terminal.shortcuts.reformat_text_before_cursor(buffer, document, shell)
1143 1143 + IPython.terminal.interactiveshell.PTK3
1144 1144 + IPython.terminal.interactiveshell.black_reformat_handler(text_before_cursor)
1145 1145 + IPython.terminal.prompts.RichPromptDisplayHook.write_format_data(self, format_dict, md_dict='None')
1146 1146
1147 1147 The following items have been removed in 7.10::
1148 1148
1149 1149 - IPython.lib.pretty.DICT_IS_ORDERED
1150 1150
1151 1151 The following signatures differ between versions::
1152 1152
1153 1153 - IPython.extensions.storemagic.restore_aliases(ip)
1154 1154 + IPython.extensions.storemagic.restore_aliases(ip, alias='None')
1155 1155
1156 1156 Special Thanks
1157 1157 --------------
1158 1158
1159 1159 - @stephanh42 who started the work on inline images in terminal 2 years ago
1160 1160 - @augustogoulart who spent a lot of time triaging issues and responding to
1161 1161 users.
1162 1162 - @con-f-use who is my (@Carreau) first sponsor on GitHub, as a reminder if you
1163 1163 like IPython, Jupyter and many other library of the SciPy stack you can
1164 1164 donate to numfocus.org non profit
1165 1165
1166 1166 .. _version 790:
1167 1167
1168 1168 IPython 7.9.0
1169 1169 =============
1170 1170
1171 1171 IPython 7.9 is a small release with a couple of improvement and bug fixes.
1172 1172
1173 1173 - Xterm terminal title should be restored on exit :ghpull:`11910`
1174 1174 - special variables ``_``,``__``, ``___`` are not set anymore when cache size
1175 1175 is 0 or less. :ghpull:`11877`
1176 1176 - Autoreload should have regained some speed by using a new heuristic logic to
1177 1177 find all objects needing reload. This should avoid large objects traversal
1178 1178 like pandas dataframes. :ghpull:`11876`
1179 1179 - Get ready for Python 4. :ghpull:`11874`
1180 1180 - `%env` Magic now has heuristic to hide potentially sensitive values :ghpull:`11896`
1181 1181
1182 1182 This is a small release despite a number of Pull Request Pending that need to
1183 1183 be reviewed/worked on. Many of the core developers have been busy outside of
1184 1184 IPython/Jupyter and we thanks all contributor for their patience; we'll work on
1185 1185 these as soon as we have time.
1186 1186
1187 1187
1188 1188 .. _version780:
1189 1189
1190 1190 IPython 7.8.0
1191 1191 =============
1192 1192
1193 1193 IPython 7.8.0 contain a few bugfix and 2 new APIs:
1194 1194
1195 1195 - Enable changing the font color for LaTeX rendering :ghpull:`11840`
1196 1196 - and Re-Expose some PDB API (see below)
1197 1197
1198 1198 Expose Pdb API
1199 1199 --------------
1200 1200
1201 1201 Expose the built-in ``pdb.Pdb`` API. ``Pdb`` constructor arguments are generically
1202 1202 exposed, regardless of python version.
1203 1203 Newly exposed arguments:
1204 1204
1205 1205 - ``skip`` - Python 3.1+
1206 1206 - ``nosiginnt`` - Python 3.2+
1207 1207 - ``readrc`` - Python 3.6+
1208 1208
1209 1209 Try it out::
1210 1210
1211 1211 from IPython.terminal.debugger import TerminalPdb
1212 1212 pdb = TerminalPdb(skip=["skipthismodule"])
1213 1213
1214 1214
1215 1215 See :ghpull:`11840`
1216 1216
1217 1217 .. _version770:
1218 1218
1219 1219 IPython 7.7.0
1220 1220 =============
1221 1221
1222 1222 IPython 7.7.0 contain multiple bug fixes and documentation updates; Here are a
1223 1223 few of the outstanding issue fixed:
1224 1224
1225 1225 - Fix a bug introduced in 7.6 where the ``%matplotlib`` magic would fail on
1226 1226 previously acceptable arguments :ghpull:`11814`.
1227 1227 - Fix the manage location on freebsd :ghpull:`11808`.
1228 1228 - Fix error message about aliases after ``%reset`` call in ipykernel
1229 1229 :ghpull:`11806`
1230 1230 - Fix Duplication completions in emacs :ghpull:`11803`
1231 1231
1232 1232 We are planning to adopt `NEP29 <https://github.com/numpy/numpy/pull/14086>`_
1233 1233 (still currently in draft) which may make this minor version of IPython the
1234 1234 last one to support Python 3.5 and will make the code base more aggressive
1235 1235 toward removing compatibility with older versions of Python.
1236 1236
1237 1237 GitHub now support to give only "Triage" permissions to users; if you'd like to
1238 1238 help close stale issues and labels issues please reach to us with your GitHub
1239 1239 Username and we'll add you to the triage team. It is a great way to start
1240 1240 contributing and a path toward getting commit rights.
1241 1241
1242 1242 .. _version761:
1243 1243
1244 1244 IPython 7.6.1
1245 1245 =============
1246 1246
1247 1247 IPython 7.6.1 contain a critical bugfix in the ``%timeit`` magic, which would
1248 1248 crash on some inputs as a side effect of :ghpull:`11716`. See :ghpull:`11812`
1249 1249
1250 1250
1251 1251 .. _whatsnew760:
1252 1252
1253 1253 IPython 7.6.0
1254 1254 =============
1255 1255
1256 1256 IPython 7.6.0 contains a couple of bug fixes and number of small features
1257 1257 additions as well as some compatibility with the current development version of
1258 1258 Python 3.8.
1259 1259
1260 1260 - Add a ``-l`` option to :magic:`psearch` to list the available search
1261 1261 types. :ghpull:`11672`
1262 1262 - Support ``PathLike`` for ``DisplayObject`` and ``Image``. :ghpull:`11764`
1263 1263 - Configurability of timeout in the test suite for slow platforms.
1264 1264 :ghpull:`11756`
1265 1265 - Accept any casing for matplotlib backend. :ghpull:`121748`
1266 1266 - Properly skip test that requires numpy to be installed :ghpull:`11723`
1267 1267 - More support for Python 3.8 and positional only arguments (pep570)
1268 1268 :ghpull:`11720`
1269 1269 - Unicode names for the completion are loaded lazily on first use which
1270 1270 should decrease startup time. :ghpull:`11693`
1271 1271 - Autoreload now update the types of reloaded objects; this for example allow
1272 1272 pickling of reloaded objects. :ghpull:`11644`
1273 1273 - Fix a bug where ``%%time`` magic would suppress cell output. :ghpull:`11716`
1274 1274
1275 1275
1276 1276 Prepare migration to pytest (instead of nose) for testing
1277 1277 ---------------------------------------------------------
1278 1278
1279 1279 Most of the work between 7.5 and 7.6 was to prepare the migration from our
1280 1280 testing framework to pytest. Most of the test suite should now work by simply
1281 1281 issuing ``pytest`` from the root of the repository.
1282 1282
1283 1283 The migration to pytest is just at its beginning. Many of our test still rely
1284 1284 on IPython-specific plugins for nose using pytest (doctest using IPython syntax
1285 1285 is one example of this where test appear as "passing", while no code has been
1286 1286 ran). Many test also need to be updated like ``yield-test`` to be properly
1287 1287 parametrized tests.
1288 1288
1289 1289 Migration to pytest allowed me to discover a number of issues in our test
1290 1290 suite; which was hiding a number of subtle issues – or not actually running
1291 1291 some of the tests in our test suite – I have thus corrected many of those; like
1292 1292 improperly closed resources; or used of deprecated features. I also made use of
1293 1293 the ``pytest --durations=...`` to find some of our slowest test and speed them
1294 1294 up (our test suite can now be up to 10% faster). Pytest as also a variety of
1295 1295 plugins and flags which will make the code quality of IPython and the testing
1296 1296 experience better.
1297 1297
1298 1298 Misc
1299 1299 ----
1300 1300
1301 1301 We skipped the release of 7.6 at the end of May, but will attempt to get back
1302 1302 on schedule. We are starting to think about making introducing backward
1303 1303 incompatible change and start the 8.0 series.
1304 1304
1305 1305 Special Thanks to Gabriel (@gpotter2 on GitHub), who among other took care many
1306 1306 of the remaining task for 7.4 and 7.5, like updating the website.
1307 1307
1308 1308 .. _whatsnew750:
1309 1309
1310 1310 IPython 7.5.0
1311 1311 =============
1312 1312
1313 1313 IPython 7.5.0 consist mostly of bug-fixes, and documentation updates, with one
1314 1314 minor new feature. The `Audio` display element can now be assigned an element
1315 1315 id when displayed in browser. See :ghpull:`11670`
1316 1316
1317 1317 The major outstanding bug fix correct a change of behavior that was introduce
1318 1318 in 7.4.0 where some cell magics would not be able to access or modify global
1319 1319 scope when using the ``@needs_local_scope`` decorator. This was typically
1320 1320 encountered with the ``%%time`` and ``%%timeit`` magics. See :ghissue:`11659`
1321 1321 and :ghpull:`11698`.
1322 1322
1323 1323 .. _whatsnew740:
1324 1324
1325 1325 IPython 7.4.0
1326 1326 =============
1327 1327
1328 1328 Unicode name completions
1329 1329 ------------------------
1330 1330
1331 1331 Previously, we provided completion for a unicode name with its relative symbol.
1332 1332 With this, now IPython provides complete suggestions to unicode name symbols.
1333 1333
1334 1334 As on the PR, if user types ``\LAT<tab>``, IPython provides a list of
1335 1335 possible completions. In this case, it would be something like::
1336 1336
1337 1337 'LATIN CAPITAL LETTER A',
1338 1338 'LATIN CAPITAL LETTER B',
1339 1339 'LATIN CAPITAL LETTER C',
1340 1340 'LATIN CAPITAL LETTER D',
1341 1341 ....
1342 1342
1343 1343 This help to type unicode character that do not have short latex aliases, and
1344 1344 have long unicode names. for example ``Ν°``, ``\GREEK CAPITAL LETTER HETA``.
1345 1345
1346 1346 This feature was contributed by Luciana Marques :ghpull:`11583`.
1347 1347
1348 1348 Make audio normalization optional
1349 1349 ---------------------------------
1350 1350
1351 1351 Added 'normalize' argument to `IPython.display.Audio`. This argument applies
1352 1352 when audio data is given as an array of samples. The default of `normalize=True`
1353 1353 preserves prior behavior of normalizing the audio to the maximum possible range.
1354 1354 Setting to `False` disables normalization.
1355 1355
1356 1356
1357 1357 Miscellaneous
1358 1358 -------------
1359 1359
1360 1360 - Fix improper acceptation of ``return`` outside of functions. :ghpull:`11641`.
1361 1361 - Fixed PyQt 5.11 backwards incompatibility causing sip import failure.
1362 1362 :ghpull:`11613`.
1363 1363 - Fix Bug where ``type?`` would crash IPython. :ghpull:`1608`.
1364 1364 - Allow to apply ``@needs_local_scope`` to cell magics for convenience.
1365 1365 :ghpull:`11542`.
1366 1366
1367 1367 .. _whatsnew730:
1368 1368
1369 1369 IPython 7.3.0
1370 1370 =============
1371 1371
1372 1372
1373 1373 IPython 7.3.0 bring several bug fixes and small improvements that you will
1374 described bellow.
1374 described below.
1375 1375
1376 1376 The biggest change to this release is the implementation of the ``%conda`` and
1377 1377 ``%pip`` magics, that will attempt to install packages in the **current
1378 1378 environment**. You may still need to restart your interpreter or kernel for the
1379 1379 change to be taken into account, but it should simplify installation of packages
1380 1380 into remote environment. Installing using pip/conda from the command line is
1381 1381 still the prefer method.
1382 1382
1383 1383 The ``%pip`` magic was already present, but was only printing a warning; now it
1384 1384 will actually forward commands to pip.
1385 1385
1386 1386 Misc bug fixes and improvements:
1387 1387
1388 1388 - Compatibility with Python 3.8.
1389 1389 - Do not expand shell variable in execution magics, and added the
1390 1390 ``no_var_expand`` decorator for magic requiring a similar functionality
1391 1391 :ghpull:`11516`
1392 1392 - Add ``%pip`` and ``%conda`` magic :ghpull:`11524`
1393 1393 - Re-initialize posix aliases after a ``%reset`` :ghpull:`11528`
1394 1394 - Allow the IPython command line to run ``*.ipynb`` files :ghpull:`11529`
1395 1395
1396 1396 .. _whatsnew720:
1397 1397
1398 1398 IPython 7.2.0
1399 1399 =============
1400 1400
1401 1401 IPython 7.2.0 brings minor bugfixes, improvements, and new configuration options:
1402 1402
1403 1403 - Fix a bug preventing PySide2 GUI integration from working :ghpull:`11464`
1404 1404 - Run CI on Mac OS ! :ghpull:`11471`
1405 1405 - Fix IPython "Demo" mode. :ghpull:`11498`
1406 1406 - Fix ``%run`` magic with path in name :ghpull:`11499`
1407 1407 - Fix: add CWD to sys.path *after* stdlib :ghpull:`11502`
1408 1408 - Better rendering of signatures, especially long ones. :ghpull:`11505`
1409 1409 - Re-enable jedi by default if it's installed :ghpull:`11506`
1410 1410 - Add New ``minimal`` exception reporting mode (useful for educational purpose). See :ghpull:`11509`
1411 1411
1412 1412
1413 1413 Added ability to show subclasses when using pinfo and other utilities
1414 1414 ---------------------------------------------------------------------
1415 1415
1416 1416 When using ``?``/``??`` on a class, IPython will now list the first 10 subclasses.
1417 1417
1418 1418 Special Thanks to Chris Mentzel of the Moore Foundation for this feature. Chris
1419 1419 is one of the people who played a critical role in IPython/Jupyter getting
1420 1420 funding.
1421 1421
1422 1422 We are grateful for all the help Chris has given us over the years,
1423 1423 and we're now proud to have code contributed by Chris in IPython.
1424 1424
1425 1425 OSMagics.cd_force_quiet configuration option
1426 1426 --------------------------------------------
1427 1427
1428 1428 You can set this option to force the %cd magic to behave as if ``-q`` was passed::
1429 1429
1430 1430 In [1]: cd /
1431 1431 /
1432 1432
1433 1433 In [2]: %config OSMagics.cd_force_quiet = True
1434 1434
1435 1435 In [3]: cd /tmp
1436 1436
1437 1437 In [4]:
1438 1438
1439 1439 See :ghpull:`11491`
1440 1440
1441 1441 In vi editing mode, whether the prompt includes the current vi mode can now be configured
1442 1442 -----------------------------------------------------------------------------------------
1443 1443
1444 1444 Set the ``TerminalInteractiveShell.prompt_includes_vi_mode`` to a boolean value
1445 1445 (default: True) to control this feature. See :ghpull:`11492`
1446 1446
1447 1447 .. _whatsnew710:
1448 1448
1449 1449 IPython 7.1.0
1450 1450 =============
1451 1451
1452 1452 IPython 7.1.0 is the first minor release after 7.0.0 and mostly brings fixes to
1453 1453 new features, internal refactoring, and fixes for regressions that happened during the 6.x->7.x
1454 1454 transition. It also brings **Compatibility with Python 3.7.1**, as we're
1455 1455 unwillingly relying on a bug in CPython.
1456 1456
1457 1457 New Core Dev:
1458 1458
1459 - We welcome Jonathan Slenders to the commiters. Jonathan has done a fantastic
1459 - We welcome Jonathan Slenders to the committers. Jonathan has done a fantastic
1460 1460 work on prompt_toolkit, and we'd like to recognise his impact by giving him
1461 1461 commit rights. :ghissue:`11397`
1462 1462
1463 1463 Notable Changes
1464 1464
1465 1465 - Major update of "latex to unicode" tab completion map (see below)
1466 1466
1467 1467 Notable New Features:
1468 1468
1469 1469 - Restore functionality and documentation of the **sphinx directive**, which
1470 1470 is now stricter (fail on error by daefault), has new configuration options,
1471 1471 has a brand new documentation page :ref:`ipython_directive` (which needs
1472 1472 some cleanup). It is also now *tested* so we hope to have less regressions.
1473 1473 :ghpull:`11402`
1474 1474
1475 1475 - ``IPython.display.Video`` now supports ``width`` and ``height`` arguments,
1476 1476 allowing a custom width and height to be set instead of using the video's
1477 1477 width and height. :ghpull:`11353`
1478 1478
1479 1479 - Warn when using ``HTML('<iframe>')`` instead of ``IFrame`` :ghpull:`11350`
1480 1480
1481 1481 - Allow Dynamic switching of editing mode between vi/emacs and show
1482 1482 normal/input mode in prompt when using vi. :ghpull:`11390`. Use ``%config
1483 1483 TerminalInteractiveShell.editing_mode = 'vi'`` or ``%config
1484 1484 TerminalInteractiveShell.editing_mode = 'emacs'`` to dynamically switch
1485 1485 between modes.
1486 1486
1487 1487
1488 1488 Notable Fixes:
1489 1489
1490 1490 - Fix entering of **multi-line blocks in terminal** IPython, and various
1491 1491 crashes in the new input transformation machinery :ghpull:`11354`,
1492 1492 :ghpull:`11356`, :ghpull:`11358`. These also fix a **Compatibility bug
1493 1493 with Python 3.7.1**.
1494 1494
1495 1495 - Fix moving through generator stack in ipdb :ghpull:`11266`
1496 1496
1497 1497 - %Magic command arguments now support quoting. :ghpull:`11330`
1498 1498
1499 1499 - Re-add ``rprint`` and ``rprinte`` aliases. :ghpull:`11331`
1500 1500
1501 1501 - Remove implicit dependency on ``ipython_genutils`` :ghpull:`11317`
1502 1502
1503 1503 - Make ``nonlocal`` raise ``SyntaxError`` instead of silently failing in async
1504 1504 mode. :ghpull:`11382`
1505 1505
1506 1506 - Fix mishandling of magics and ``= !`` assignment just after a dedent in
1507 1507 nested code blocks :ghpull:`11418`
1508 1508
1509 1509 - Fix instructions for custom shortcuts :ghpull:`11426`
1510 1510
1511 1511
1512 1512 Notable Internals improvements:
1513 1513
1514 1514 - Use of ``os.scandir`` (Python 3 only) to speed up some file system operations.
1515 1515 :ghpull:`11365`
1516 1516
1517 1517 - use ``perf_counter`` instead of ``clock`` for more precise
1518 1518 timing results with ``%time`` :ghpull:`11376`
1519 1519
1520 1520 Many thanks to all the contributors and in particular to ``bartskowron`` and
1521 1521 ``tonyfast`` who handled some pretty complicated bugs in the input machinery. We
1522 1522 had a number of first time contributors and maybe hacktoberfest participants that
1523 1523 made significant contributions and helped us free some time to focus on more
1524 1524 complicated bugs.
1525 1525
1526 1526 You
1527 1527 can see all the closed issues and Merged PR, new features and fixes `here
1528 1528 <https://github.com/ipython/ipython/issues?utf8=%E2%9C%93&q=+is%3Aclosed+milestone%3A7.1+>`_.
1529 1529
1530 1530 Unicode Completion update
1531 1531 -------------------------
1532 1532
1533 1533 In IPython 7.1 the Unicode completion map has been updated and synchronized with
1534 1534 the Julia language.
1535 1535
1536 1536 Added and removed character characters:
1537 1537
1538 1538 ``\jmath`` (``Θ·``), ``\\underleftrightarrow`` (U+034D, combining) have been
1539 1539 added, while ``\\textasciicaron`` have been removed
1540 1540
1541 1541 Some sequences have seen their prefix removed:
1542 1542
1543 1543 - 6 characters ``\text...<tab>`` should now be inputed with ``\...<tab>`` directly,
1544 1544 - 45 characters ``\Elz...<tab>`` should now be inputed with ``\...<tab>`` directly,
1545 1545 - 65 characters ``\B...<tab>`` should now be inputed with ``\...<tab>`` directly,
1546 1546 - 450 characters ``\m...<tab>`` should now be inputed with ``\...<tab>`` directly,
1547 1547
1548 1548 Some sequences have seen their prefix shortened:
1549 1549
1550 1550 - 5 characters ``\mitBbb...<tab>`` should now be inputed with ``\bbi...<tab>`` directly,
1551 1551 - 52 characters ``\mit...<tab>`` should now be inputed with ``\i...<tab>`` directly,
1552 1552 - 216 characters ``\mbfit...<tab>`` should now be inputed with ``\bi...<tab>`` directly,
1553 1553 - 222 characters ``\mbf...<tab>`` should now be inputed with ``\b...<tab>`` directly,
1554 1554
1555 1555 A couple of characters had their sequence simplified:
1556 1556
1557 1557 - ``Γ°``, type ``\dh<tab>``, instead of ``\eth<tab>``
1558 1558 - ``Δ§``, type ``\hbar<tab>``, instead of ``\Elzxh<tab>``
1559 1559 - ``ΙΈ``, type ``\ltphi<tab>``, instead of ``\textphi<tab>``
1560 1560 - ``Ο΄``, type ``\varTheta<tab>``, instead of ``\textTheta<tab>``
1561 1561 - ``ℇ``, type ``\eulermascheroni<tab>``, instead of ``\Eulerconst<tab>``
1562 1562 - ``β„Ž``, type ``\planck<tab>``, instead of ``\Planckconst<tab>``
1563 1563
1564 1564 - U+0336 (COMBINING LONG STROKE OVERLAY), type ``\strike<tab>``, instead of ``\Elzbar<tab>``.
1565 1565
1566 1566 A couple of sequences have been updated:
1567 1567
1568 1568 - ``\varepsilon`` now gives ``Ι›`` (GREEK SMALL LETTER EPSILON) instead of ``Ξ΅`` (GREEK LUNATE EPSILON SYMBOL),
1569 1569 - ``\underbar`` now gives U+0331 (COMBINING MACRON BELOW) instead of U+0332 (COMBINING LOW LINE).
1570 1570
1571 1571
1572 1572 .. _whatsnew700:
1573 1573
1574 1574 IPython 7.0.0
1575 1575 =============
1576 1576
1577 1577 Released Thursday September 27th, 2018
1578 1578
1579 1579 IPython 7 includes major feature improvements.
1580 1580 This is also the second major version of IPython to support only
1581 1581 Python 3 – starting at Python 3.4. Python 2 is still community-supported
1582 1582 on the bugfix only 5.x branch, but we remind you that Python 2 "end of life"
1583 1583 is on Jan 1st 2020.
1584 1584
1585 1585 We were able to backport bug fixes to the 5.x branch thanks to our backport bot which
1586 1586 backported more than `70 Pull-Requests
1587 1587 <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>`_
1588 1588
1589 1589 The IPython 6.x branch will likely not see any further release unless critical
1590 1590 bugs are found.
1591 1591
1592 1592 Make sure you have pip > 9.0 before upgrading. You should be able to update by running:
1593 1593
1594 1594 .. code::
1595 1595
1596 1596 pip install ipython --upgrade
1597 1597
1598 1598 .. only:: ipydev
1599 1599
1600 1600 If you are trying to install or update an ``alpha``, ``beta``, or ``rc``
1601 1601 version, use pip ``--pre`` flag.
1602 1602
1603 1603 .. code::
1604 1604
1605 1605 pip install ipython --upgrade --pre
1606 1606
1607 1607
1608 1608 Or, if you have conda installed:
1609 1609
1610 1610 .. code::
1611 1611
1612 1612 conda install ipython
1613 1613
1614 1614
1615 1615
1616 1616 Prompt Toolkit 2.0
1617 1617 ------------------
1618 1618
1619 1619 IPython 7.0+ now uses ``prompt_toolkit 2.0``. If you still need to use an earlier
1620 1620 ``prompt_toolkit`` version, you may need to pin IPython to ``<7.0``.
1621 1621
1622 1622 Autowait: Asynchronous REPL
1623 1623 ---------------------------
1624 1624
1625 1625 Staring with IPython 7.0 on Python 3.6+, IPython can automatically ``await``
1626 1626 top level code. You should not need to access an event loop or runner
1627 1627 yourself. To learn more, read the :ref:`autoawait` section of our docs, see
1628 1628 :ghpull:`11265`, or try the following code::
1629 1629
1630 1630 Python 3.6.0
1631 1631 Type 'copyright', 'credits' or 'license' for more information
1632 1632 IPython 7.0.0 -- An enhanced Interactive Python. Type '?' for help.
1633 1633
1634 1634 In [1]: import aiohttp
1635 1635 ...: result = aiohttp.get('https://api.github.com')
1636 1636
1637 1637 In [2]: response = await result
1638 1638 <pause for a few 100s ms>
1639 1639
1640 1640 In [3]: await response.json()
1641 1641 Out[3]:
1642 1642 {'authorizations_url': 'https://api.github.com/authorizations',
1643 1643 'code_search_url': 'https://api.github.com/search/code?q={query}{&page,per_page,sort,order}',
1644 1644 ...
1645 1645 }
1646 1646
1647 1647 .. note::
1648 1648
1649 1649 Async integration is experimental code, behavior may change or be removed
1650 1650 between Python and IPython versions without warnings.
1651 1651
1652 1652 Integration is by default with `asyncio`, but other libraries can be configured --
1653 1653 like ``curio`` or ``trio`` -- to improve concurrency in the REPL::
1654 1654
1655 1655 In [1]: %autoawait trio
1656 1656
1657 1657 In [2]: import trio
1658 1658
1659 1659 In [3]: async def child(i):
1660 1660 ...: print(" child %s goes to sleep"%i)
1661 1661 ...: await trio.sleep(2)
1662 1662 ...: print(" child %s wakes up"%i)
1663 1663
1664 1664 In [4]: print('parent start')
1665 1665 ...: async with trio.open_nursery() as n:
1666 1666 ...: for i in range(3):
1667 1667 ...: n.spawn(child, i)
1668 1668 ...: print('parent end')
1669 1669 parent start
1670 1670 child 2 goes to sleep
1671 1671 child 0 goes to sleep
1672 1672 child 1 goes to sleep
1673 1673 <about 2 seconds pause>
1674 1674 child 2 wakes up
1675 1675 child 1 wakes up
1676 1676 child 0 wakes up
1677 1677 parent end
1678 1678
1679 1679 See :ref:`autoawait` for more information.
1680 1680
1681 1681
1682 1682 Asynchronous code in a Notebook interface or any other frontend using the
1683 1683 Jupyter Protocol will require further updates to the IPykernel package.
1684 1684
1685 1685 Non-Asynchronous code
1686 1686 ~~~~~~~~~~~~~~~~~~~~~
1687 1687
1688 1688 As the internal API of IPython is now asynchronous, IPython needs to run under
1689 1689 an event loop. In order to allow many workflows, (like using the :magic:`%run`
1690 1690 magic, or copy-pasting code that explicitly starts/stop event loop), when
1691 1691 top-level code is detected as not being asynchronous, IPython code is advanced
1692 1692 via a pseudo-synchronous runner, and may not advance pending tasks.
1693 1693
1694 1694 Change to Nested Embed
1695 1695 ~~~~~~~~~~~~~~~~~~~~~~
1696 1696
1697 1697 The introduction of the ability to run async code had some effect on the
1698 1698 ``IPython.embed()`` API. By default, embed will not allow you to run asynchronous
1699 1699 code unless an event loop is specified.
1700 1700
1701 1701 Effects on Magics
1702 1702 ~~~~~~~~~~~~~~~~~
1703 1703
1704 1704 Some magics will not work with async until they're updated.
1705 1705 Contributions welcome.
1706 1706
1707 1707 Expected Future changes
1708 1708 ~~~~~~~~~~~~~~~~~~~~~~~
1709 1709
1710 1710 We expect more internal but public IPython functions to become ``async``, and
1711 1711 will likely end up having a persistent event loop while IPython is running.
1712 1712
1713 1713 Thanks
1714 1714 ~~~~~~
1715 1715
1716 1716 This release took more than a year in the making.
1717 1717 The code was rebased a number of
1718 1718 times; leading to commit authorship that may have been lost in the final
1719 1719 Pull-Request. Huge thanks to many people for contribution, discussion, code,
1720 1720 documentation, use-cases: dalejung, danielballan, ellisonbg, fperez, gnestor,
1721 1721 minrk, njsmith, pganssle, tacaswell, takluyver , vidartf ... And many others.
1722 1722
1723 1723
1724 1724 Autoreload Improvement
1725 1725 ----------------------
1726 1726
1727 1727 The magic :magic:`%autoreload 2 <autoreload>` now captures new methods added to
1728 1728 classes. Earlier, only methods existing as of the initial import were being
1729 1729 tracked and updated.
1730 1730
1731 1731 This new feature helps dual environment development - Jupyter+IDE - where the
1732 1732 code gradually moves from notebook cells to package files as it gets
1733 1733 structured.
1734 1734
1735 1735 **Example**: An instance of the class ``MyClass`` will be able to access the
1736 1736 method ``cube()`` after it is uncommented and the file ``file1.py`` is saved on
1737 1737 disk.
1738 1738
1739 1739
1740 1740 .. code::
1741 1741
1742 1742 # notebook
1743 1743
1744 1744 from mymodule import MyClass
1745 1745 first = MyClass(5)
1746 1746
1747 1747 .. code::
1748 1748
1749 1749 # mymodule/file1.py
1750 1750
1751 1751 class MyClass:
1752 1752
1753 1753 def __init__(self, a=10):
1754 1754 self.a = a
1755 1755
1756 1756 def square(self):
1757 1757 print('compute square')
1758 1758 return self.a*self.a
1759 1759
1760 1760 # def cube(self):
1761 1761 # print('compute cube')
1762 1762 # return self.a*self.a*self.a
1763 1763
1764 1764
1765 1765
1766 1766
1767 1767 Misc
1768 1768 ----
1769 1769
1770 1770 The autoindent feature that was deprecated in 5.x was re-enabled and
1771 1771 un-deprecated in :ghpull:`11257`
1772 1772
1773 1773 Make :magic:`%run -n -i ... <run>` work correctly. Earlier, if :magic:`%run` was
1774 1774 passed both arguments, ``-n`` would be silently ignored. See :ghpull:`10308`
1775 1775
1776 1776
1777 1777 The :cellmagic:`%%script` (as well as :cellmagic:`%%bash`,
1778 1778 :cellmagic:`%%ruby`... ) cell magics now raise by default if the return code of
1779 1779 the given code is non-zero (thus halting execution of further cells in a
1780 1780 notebook). The behavior can be disable by passing the ``--no-raise-error`` flag.
1781 1781
1782 1782
1783 1783 Deprecations
1784 1784 ------------
1785 1785
1786 1786 A couple of unused functions and methods have been deprecated and will be removed
1787 1787 in future versions:
1788 1788
1789 1789 - ``IPython.utils.io.raw_print_err``
1790 1790 - ``IPython.utils.io.raw_print``
1791 1791
1792 1792
1793 1793 Backwards incompatible changes
1794 1794 ------------------------------
1795 1795
1796 1796 * The API for transforming input before it is parsed as Python code has been
1797 1797 completely redesigned: any custom input transformations will need to be
1798 1798 rewritten. See :doc:`/config/inputtransforms` for details of the new API.
@@ -1,2397 +1,2397
1 1 ============
2 2 8.x Series
3 3 ============
4 4 .. _version 8.28:
5 5
6 6 IPython 8.28
7 7 ============
8 8
9 9 Slight delay of this September release as I was busy at Pydata Paris last week.
10 10 Not many user visible changes for this release, a couple of bug fixes and
11 11 workaround:
12 12
13 13 - :ghpull:`14480` AssertionError: assert _xterm_term_title_saved in WSL – It is
14 14 unclear why the terminal title is not saved in WSL, if you've WSL experience
15 15 we'd love your feedback and help to not just ignore an error
16 16 - :ghpull:`14510` Fix use of pyside6 >= 6.7.0
17 17 - :ghpull:`14518` Make values public (_tb_highlight & _tb_highlight_style)
18 18 - :ghpull:`14515` Use environment variable to identify conda / mamba
19 19
20 20
21 21 As usual you can find the full list of PRs on GitHub under `the 8.28
22 22 <https://github.com/ipython/ipython/milestone/135?closed=1>`__ milestone.
23 23
24 24 For something completely different
25 25 ----------------------------------
26 26
27 27 One of the first works of Science Fiction (`Frankenstein
28 28 <https://en.wikipedia.org/wiki/Frankenstein>`__), was written by `Mary Shelley
29 29 <https://en.wikipedia.org/wiki/Mary_Shelley>`__ when she was 18, before being
30 30 published in London on 1 January 1818 when she was 20. This is often overlooked,
31 31 and the role of founders of science fiction attribute to Edgar Allan Poe and
32 32 Jules Verne despite being published later.
33 33
34 34 Thanks
35 35 ------
36 36
37 37 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
38 38 work on IPython and related libraries.
39 39
40 40
41 41 .. _version 8.27:
42 42
43 43 IPython 8.27
44 44 ============
45 45
46 46 New release of IPython after a month off (not enough changes). We can see a few
47 47 important changes for this release.
48 48
49 - autocall was beeing call getitem, :ghpull:`14486`
49 - autocall was being call getitem, :ghpull:`14486`
50 50 - Only copy files in startup dir if we just created it. :ghpull:`14497`
51 51 - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this
52 52 the first IPython release officially compatible with Python 3.13; you will
53 53 need the most recent ``executing`` and ``stack_data``, we won't pin to avoid
54 54 forcing user of older Python version to upgrade.
55 55
56 56
57 57 As usual you can find the full list of PRs on GitHub under `the 8.27
58 58 <https://github.com/ipython/ipython/milestone/134?closed=1>`__ milestone.
59 59
60 60 Thanks
61 61 ------
62 62
63 63 Many thanks to `@Kleirre <https://github.com/Kleirre>`__ our June intern for
64 64 doing her first contribution to open source, doing the releases notes and
65 65 release. I guess you didn't even notice it was not me who released :-). I wish
66 66 her all the best in her future endeavor and look forward for her work in
67 67 astrophysics.
68 68
69 69 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
70 70 work on IPython and related libraries.
71 71
72 72 .. _version 8.26:
73 73
74 74 IPython 8.26
75 75 ============
76 76
77 77 Hey, the release of IPython for this month is here! (I know you were waiting for it)
78 78
79 79 - :ghpull:`14453` bugfix for call to structured_traceback
80 80
81 81 - :ghpull:`14466` fixed honoring custom repr for NamedTuple if assigned by partialmethod
82 82
83 83 - :ghpull:`14451` Convert matplotlib gui name in enable_gui
84 84
85 85 As usual you can find the full list of PRs on GitHub under `the 8.26
86 86 <https://github.com/ipython/ipython/milestone/133?closed=1>`__ milestone.
87 87
88 88 Thanks
89 89 ------
90 90
91 91 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
92 92 work on IPython and related libraries.
93 93
94 94
95 95 .. _version 8.25:
96 96
97 97 IPython 8.25
98 98 ============
99 99
100 100 Mostly internal changes for this end of may release of IPython.
101 101
102 102 We'll count about a dozen PRs for this moth, with small bugfixes related to
103 103 matplotlib fixes.
104 104
105 105 Of notable interest,
106 106
107 107 - :ghpull:`14426` replaces the unicode micro symbol with greek letter mu,
108 108 visually identical but should fix nfkc normalisations issues.
109 109
110 110 - :ghpull:`14444` introduces ``intersphinx_registry`` as a new dependency
111 111 which is recommended only to build documentation.
112 112
113 113 As usual you can find the full list of PRs on GitHub under `the 8.25
114 114 <https://github.com/ipython/ipython/milestone/132?closed=1>`__ milestone.
115 115
116 116 Thanks
117 117 ------
118 118
119 119 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
120 120 work on IPython and related libraries.
121 121
122 122
123 123 .. _version 8.24:
124 124
125 125 IPython 8.24
126 126 ============
127 127
128 128 Back on regular release schedule, as usual month releases are relatively tiny.
129 129
130 130 The biggest change is the move of the matplotlib backend handling from IPython
131 131 to matplotlib. :ghpull:`14371` :ghpull:`14403`.
132 132
133 133 We will note:
134 134
135 135 - pytest 8 compatibility :ghpull:`14413`
136 136 - ``typing-extension`` now needs 4.6 or newer. It was already the case, but not
137 137 explicated. :ghpull:`14380`
138 138 - Attempt to speed running code under debugger in some cases. :ghpull:`14386`
139 139 :ghpull:`14418`.
140 140 - Multiple fixes to documentation for ipyparallel, simple_prompt and emacs
141 141 :ghpull:`14384` :ghpull:`14404` :ghpull:`14407`
142 142 - Maintenance and cleanup of debugger :ghpull:`14387` :ghpull:`14393`
143 143
144 144 As usual you can find the full list of PRs on GitHub under `the 8.24
145 145 <https://github.com/ipython/ipython/milestone/131?closed=1>`__ milestone.
146 146
147 147 Thanks
148 148 ------
149 149
150 150 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
151 151 work on IPython and related libraries.
152 152
153 153
154 154 .. _version 8.23:
155 155
156 156 IPython 8.23
157 157 ============
158 158
159 159 Super tiny release of IPython on Sunday – a bit later than usual, which is also
160 160 `πŸ³οΈβ€βš§οΈ International Transgender Day of VisibilityπŸ³οΈβ€βš§οΈ
161 161 <https://en.wikipedia.org/wiki/International_Transgender_Day_of_Visibility>`_ –
162 162 so a though for you on this day, you matter and you are valid [1]_.
163 163
164 164 This is a minuscule release with only 5 Pull requests.
165 165
166 166 Main change is :ghpull:`14357` which improve inference from return type
167 167 annotations in completer and the introduction of the optional target
168 168 ``ipython[matplotlib]`` to explicitly request the matplotlib optional
169 169 dependencies.
170 170
171 171 As usual you can find the full list of PRs on GitHub under `the 8.23
172 172 <https://github.com/ipython/ipython/milestone/130?closed=1>`__ milestone.
173 173
174 174 Thanks
175 175 ------
176 176
177 177 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
178 178 work on IPython and related libraries.
179 179
180 180
181 181 .. _version 8.22:
182 182
183 183 IPython 8.22, 8.22.1 and 8.22.2
184 184 ===============================
185 185
186 186 Quick release of IPython for this short month of February, with quite a bit of
187 187 activity with more than 15 PRs.
188 188
189 189 I am not going to details all the changes, but among other we have :
190 190
191 191 - More compatibility with emscripten :ghpull:`14316`, :ghpull:`14318`,
192 192 - Test more downstream project to avoid breakage :ghpull:`14317`
193 193 - Fix recently introduced bug with the ``store`` magic.
194 194 - Fix issues with multiple call to ``matplotlib.pyplot.switch_backend``
195 195 - Fix crashing IPython when some tracebacks encounter dynamically evaluated
196 196 code.
197 197
198 198 IPython 8.22.1 increase the minimal traitlets version, and 8.22.2 fix a critical
199 199 bug on emscripten preventing to use some magics like ``%matplotlib`` on
200 200 jupyter-light.
201 201
202 202 API changes
203 203 -----------
204 204
205 205 One of the largest change is the update the mimehooks and inspector API, see
206 206 :ghpull:`14342`. It should be backward compatible, but many hooks now receive a
207 207 single object with many fields allowing us flexibility to update the API later.
208 208
209 209
210 210 Packaging changes
211 211 -----------------
212 212
213 213 Thanks to `@mkoppe <https://github.com/mkoeppe>`__, we are slowly getting rid of
214 214 setup.py finally migrating to ``pyproject.toml``. There is still quite a bit of
215 215 work, and please open an issue if you encounter any problem.
216 216
217 217
218 218 Deprecation
219 219 -----------
220 220
221 221 A number of unused functions have been marked deprecated or pending deprecation.
222 222 Please let us know if you encounter any of those deprecation messages for us to
223 223 adjust the removal timeline.
224 224
225 225
226 226 Thanks
227 227 ------
228 228
229 229 Many thanks to `@mkoppe <https://github.com/mkoeppe>`__ and `@krassowski
230 230 <https://github.com/krassowski>`__ for their multiple contributions and codebase
231 231 cleanup.
232 232
233 233 As usual you can find the full list of PRs on GitHub under `the 8.22
234 234 <https://github.com/ipython/ipython/milestone/129?closed=1>`__ milestone.
235 235
236 236 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
237 237 work on IPython and related libraries.
238 238
239 239
240 240 .. _version 8.21:
241 241
242 242 IPython 8.21
243 243 ------------
244 244
245 245 More substantial release of IPython slightly out of schedule as it was not
246 246 possible for me to make a release last Friday.
247 247
248 248 Few new features are present, but the codebase has been cleaned, and a couple
249 249 of API are _considered_ for deprecation. They are not deprecated yet, but as
250 250 they do not seem to be quite used, they may emit a warning, in which case please
251 251 comment on the relevant issue to inform me of _which_ project use those feature
252 252 and how you use them. Depending on the feedback I might change the timeline for
253 253 deprecation.
254 254
255 255 This release saw 14 PRs, with more outside contribution than usual,
256 256 I'll note in particular PRs related to making IPython work on emscripten.
257 257
258 258 I also want to point that we are _trying_ to keep compatibility with Python 3.13,
259 259 but it's a cat and mouse game. Plus I am low on time, so I would appreciate any
260 260 help with that.
261 261
262 262 Deprecations
263 263 ~~~~~~~~~~~~
264 264
265 265 - :ghpull:`14307` Pending Deprecation of
266 266 ``ColorSchemeTable.set_active_scheme(...)``'s ``case_sensitive`` Parameter.
267 267 - :ghpull:`14305` Pending Deprecation of constructing ``ColorScheme`` via
268 268 ``kwargs``, in favor passing a single dict.
269 269
270 270
271 271 Fixes
272 272 ~~~~~
273 273
274 274 - :ghpull:`14284` TerminalIPythonApp's would warn that ``auto_create`` option is not
275 275 recognized.
276 276 - :ghpull:`14286` Fix a crash with ``NotOneValueFound`` when rendering complex
277 277 tracebacks.
278 278
279 279 - :ghpull:`14287` Partial Python 3.13 compatibility
280 280 - :ghpull:`14290` Docs/Typos.
281 281
282 282 Changes
283 283 ~~~~~~~
284 284
285 285 - :ghpull:`14289` ``ipdb.set_trace()`` now accepts ``header=`` for better
286 286 compatibility with ``pdb.set_trace()``
287 287
288 288 - :ghpull:`14300` and :ghpull:`14301` Add hooking ability to produce
289 289 mimebundle.
290 290
291 291 We'll outline :ghpull:`14300`, it is now possible to extend the ``?/??``
292 292 operator to return more mimetypes to render richer help in frontends that
293 293 support it. In particular you could send a json representation of the help that
294 294 could be displayed in a customizable way.
295 295
296 296 Miscellaneous
297 297 ~~~~~~~~~~~~~
298 298
299 299 - :ghpull:`14291` Misc Refactor of Color handling
300 300 - :ghpull:`14295` Misc test skip on problematic Pypy versions.
301 301
302 302
303 303 Thanks
304 304 ~~~~~~
305 305
306 306 Special thanks to all our contributors, and to the Pypy team that was extremely
307 307 reactive in helping to investigate a fixing a rare unicode+windows bug.
308 308
309 309 As usual you can find the full list of PRs on GitHub under `the 8.21
310 310 <https://github.com/ipython/ipython/milestone/128?closed=1>`__ milestone.
311 311
312 312 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
313 313 work on IPython and related libraries.
314 314
315 315
316 316 .. _version 8.20:
317 317
318 318 IPython 8.20
319 319 ------------
320 320
321 321 Quick IPython release in this beginning of 2024, barely 2 weeks after the previous
322 322 release.
323 323
324 324 This is mostly to fix a backward compatibility issue, I would have done a patch
325 325 release earlier if I could. As a few other cleanup are also part of this
326 326 release, this will get a minor version bump.
327 327
328 328
329 329 The crux of this release is :ghpull:`14274` (Inspect continuation prompt
330 330 signature and pass only viable arguments), the rest of the changes are mostly
331 331 type annotation, and a few compatibility issues with Python 3.13 that are
332 332 getting addressed.
333 333
334 334 Python 3.13 compatibility is still not complete (help welcomed).
335 335
336 336 As usual you can find the full list of PRs on GitHub under `the 8.20
337 337 <https://github.com/ipython/ipython/milestone/127?closed=1>`__ milestone.
338 338
339 339 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
340 340 work on IPython and related libraries.
341 341
342 342
343 343 .. _version 8.19:
344 344
345 345 IPython 8.19
346 346 ------------
347 347
348 348 New release of IPython a bit before the end of the month, and end of the year.
349 349
350 350 Mostly cleanup and deprecation, due to upstream deprecation and removal.
351 351
352 352 Remove of Python 3.9 support
353 353 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
354 354
355 355 A bit later than originally plan, IPython 8.19 does not support Python 3.9
356 356 anymore, as well as the few conditional code that were executing only on Python
357 357 3.9. :ghpull:`14254`
358 358
359 359 We used the opportunity to deprecate ``IPython.utils.tz`` :ghpull:`14256`, due
360 360 to upstream deprecation of some timezone utilities. It will be removed at a later
361 361 date.
362 362
363 363 We now also run CI on Python 3.12 (what I likely should have done before), but
364 364 running on too many Python version uses a lot of CI time.
365 365
366 366 Absolute and relative Line Numbers in Prompts
367 367 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
368 368
369 369 Thanks to the contribution of ``cohml``, IPython CLI now support absolute and
370 370 relative line numbers in both vi and emacs prompt, use for example
371 371 ``c.TerminalInteractiveShell.prompt_line_number_format='{line: 4d}/{rel_line:+03d} | '``
372 372 configuration option to display both in a custom format.
373 373
374 374 Miscellaneous
375 375 ~~~~~~~~~~~~~
376 376
377 377 In addition to various bugfixes, I unpinned pytest, let me know if there are any
378 378 issues and we'll re-pin.
379 379
380 380 See you in 2024
381 381 ~~~~~~~~~~~~~~~
382 382
383 383 As usual you can find the full list of PRs on GitHub under `the 8.19
384 384 <https://github.com/ipython/ipython/milestone/126?closed=1>`__ milestone.
385 385
386 386 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
387 387 work on IPython and related libraries.
388 388
389 389 .. _version 8.18:
390 390
391 391 IPython 8.18 and 8.18.1
392 392 -----------------------
393 393
394 394 8.18.1 is identical to 8.18 but pin ``prompt_toolkit`` to greater than ``3.0.41``
395 395
396 396 Small release of IPython that fixes a small number of inconveniences.
397 397
398 398 - :ghpull:`14251` Fix a memory leak in qt event loop integration by setting
399 399 the Loop parent to None.
400 400 - :ghpull:`14252` Pickleshare was made an optional dependency in 8.17, this
401 401 leads to warnings in some installations when using modules completions. The
402 402 warning has been silenced.
403 403 - :ghpull:`14241` Update event loop code for compatibility with more recent
404 404 ``prompt_toolkit`` due to deprecations in Python 3.12.
405 405 - :ghpull:`14245` Fix doc example on Pygments styles
406 406 - :ghpull:`14238` Remove dependency on app_nope, this is actually only a
407 407 dependency of IPykernel.
408 408
409 409 As usual you can find the full list of PRs on GitHub under `the 8.18
410 410 <https://github.com/ipython/ipython/milestone/125?closed=1>`__ milestone.
411 411
412 412 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
413 413 work on IPython and related libraries.
414 414
415 415 .. _version 8.17.1:
416 416 .. _version 8.17:
417 417
418 418 IPython 8.17, 8.17.1
419 419 --------------------
420 420
421 421 Medium-sized release of IPython that includes some cleanup (backcall, python2 leftovers)
422 422 and some refactoring improvements (typing, pathlib) and a fix on completion.
423 423
424 424 - :ghpull:`14216` remove backcall dependency
425 425 - :ghpull:`14217` make pickleshare dependency optional
426 426 - :ghpull:`14185` support completion based on type annotations of calls
427 427
428 428 Reverted in 8.17.1:
429 429
430 430 - :ghpull:`14190` remove support for python 2 in lexers (reverted in 8.17.1 as it is imported by qtconsole/spyder)
431 431
432 432
433 433 Mamba and Micromamba magic commands
434 434 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
435 435
436 436 In addition to the ``%conda`` magic command for calling ``conda`` in IPython,
437 437 the ``%mamba`` and ``%micromamba`` magic commands now
438 438 call ``mamba`` and ``micromamba`` if they are on ``sys.path``.
439 439
440 440 .. code::
441 441
442 442 %mamba install pkgname
443 443 %micromamba install pkgname
444 444 %conda install pkgname
445 445 %pip install pkgname
446 446
447 447 %mamba --help
448 448 %micromamba --help
449 449 %conda --help
450 450 %pip --help # works w/ JupyterLite
451 451 !pip --help
452 452
453 453
454 454 :ghpull:`14191`
455 455
456 456 ----
457 457
458 458 As usual you can find the full list of PRs on GitHub under `the 8.17
459 459 <https://github.com/ipython/ipython/milestone/123?closed=1>`__ milestone.
460 460
461 461 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
462 462 work on IPython and related libraries.
463 463
464 464 .. _version 8.16:
465 465 .. _version 8.16.1:
466 466
467 467 IPython 8.16, 8.16.1
468 468 --------------------
469 469
470 470 Small double release of IPython (with the 8.12.3 release notes just below).
471 471 Mostly bug fixes and cleanups, and type annotations. Of interest for users:
472 472
473 473 - :ghpull:`14153` Fix a bug of the new iPdb chained traceback where some
474 474 Exception would not have any traceback. (see upstream fix in CPython for more
475 475 details).
476 476 - :ghpull:`14168` Fix case with spurious message about event loops when using
477 477 matplotlib.
478 478
479 479 This PR is in 8.16.0 but reverted in 8.16.1, we'll rework the fix for 8.17
480 480
481 481 - :ghpull:`14163` Fix an error where semicolon would not suppress output.
482 482
483 483 As usual you can find the full list of PRs on GitHub under `the 8.16
484 484 <https://github.com/ipython/ipython/milestone/121?closed=1>`__ and `8.16.1 milestone
485 485 <https://github.com/ipython/ipython/milestone/124?closed=1>`__.
486 486
487 487 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
488 488 work on IPython and related libraries.
489 489
490 490 .. _version 8.12.3:
491 491
492 492 IPython 8.12.3
493 493 --------------
494 494
495 495 Tiny release of 8.12.3 that backport a small number of fixes for users still
496 496 using Python 3.8.
497 497
498 498 - :ghpull:`14080` add passthrough filter shortcuts
499 499 - :ghpull:`14169` Fix `InteractiveShellEmbed`
500 500
501 501 .. _version 8.15:
502 502
503 503 IPython 8.15
504 504 ------------
505 505
506 506 Medium release of IPython after a couple of month hiatus, and a bit
507 507 off-schedule.
508 508
509 509 Among other, IPython 8.15:
510 510
511 511 - Improve compatibility with future version of Python 3.12/3.13
512 512 :ghpull:`14107`, :ghpull:`14139`,
513 513 - Improve support for ``ExceptionGroups``, :ghpull:`14108`
514 514 - Fix hangs in ``%gui osx``, :ghpull:`14125`
515 515 - Fix memory lead with ``%reset``, :ghpull:`14133`
516 516 - Unstable config option to modify traceback highlighting that is sometime hard
517 517 to read :ghpull:`14138`
518 518 - Support ``.`` in ``ipdb`` as an argument to the ``list`` command
519 519 :ghpull:`14121`
520 520 - Workroud ``parso`` showing warning message when the default logger level is
521 521 changed :ghpull:`14119`
522 522 - Fix multiple issues with matplotlib interactive mode, qt5/qt6 :ghpull:`14128`
523 523
524 524 Support for PEP-678 Exception Notes
525 525 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
526 526
527 527 Ultratb now shows :pep:`678` notes, improving your debugging experience on
528 528 Python 3.11+ or with libraries such as Pytest and Hypothesis.
529 529
530 530 Native fallback for displaying ExceptionGroup
531 531 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
532 532 ExceptionGroups are now displayed with ``traceback.print_exc``, as a temporary fix until UltraTB properly supports displaying child exceptions.
533 533
534 534
535 535 We have two larger features:
536 536
537 537 AST-based macros
538 538 ~~~~~~~~~~~~~~~~
539 539
540 540 :ghpull:`14100` introduce a new and efficient way to modify each execution block
541 541 (cell) using an template-ast-based transform. Unlike IPython pre and post code
542 542 execution hooks, this actually transform the code that is execute with as
543 543 minimal as possible overhead. While it was already technically possible to
544 544 register ast transformers for IPython this was far from evident.
545 545
546 546 This should make it trivial to hook into IPython to implement custom hooks, that
547 547 for example time or profile your code, catch exceptions to provide error
548 548 messages for students or do any other kind of transformations.
549 549
550 550 In addition to programmatic API there is also a magic to quickly register
551 551 hooks::
552 552
553 553 In [1]: %%code_wrap before_after
554 554 ...: print('before')
555 555 ...: __code__
556 556 ...: print('after')
557 557 ...: __ret__
558 558
559 559 This mean that for any subsequent execution code will be executed.
560 560 You can modify the above to print the date, compute the execution time,
561 561 retry the code in a for loop....
562 562
563 563
564 564 Allow IPdb/Pdb to move between chained exceptions
565 565 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
566 566
567 567 The main change is the addition of the ability to move between chained
568 568 exceptions when using IPdb, this feature was also contributed to upstream Pdb
569 569 and is thus native to CPython in Python 3.13+ Though ipdb should support this
570 570 feature in older version of Python. I invite you to look at the `CPython changes
571 571 and docs <https://github.com/python/cpython/pull/106676>`__ for more details.
572 572
573 573 In short, once in post-mortem debugger (``%debug``), you can use the ipdb
574 574 ``exceptions`` command to switch exceptions, for example:
575 575
576 576 .. code-block:: ipython
577 577
578 578 In [1]: def foo(x):
579 579 ...: try:
580 580 ...: bar(x)
581 581 ...: except Exception as e:
582 582 ...: raise ValueError("foo (): bar failed") from e
583 583 ...:
584 584 ...: def bar(x):
585 585 ...: 1 / X
586 586 ...:
587 587
588 588 In [2]: foo(0)
589 589 ---------------------------------------------------------------------------
590 590 NameError Traceback (most recent call last)
591 591 Cell In[1], line 3, in foo(x)
592 592 2 try:
593 593 ----> 3 bar(x)
594 594 4 except Exception as e:
595 595
596 596 Cell In[1], line 9, in bar(x)
597 597 8 def bar(x):
598 598 ----> 9 1 / X
599 599
600 600 NameError: name 'X' is not defined
601 601
602 602 The above exception was the direct cause of the following exception:
603 603
604 604 ValueError Traceback (most recent call last)
605 605 Cell In[2], line 1
606 606 ----> 1 foo(0)
607 607
608 608 Cell In[1], line 5, in foo(x)
609 609 3 bar(x)
610 610 4 except Exception as e:
611 611 ----> 5 raise ValueError("foo (): bar failed") from e
612 612
613 613 ValueError: foo (): bar failed
614 614
615 615 In [3]: %debug
616 616 > <ipython-input-1-b0bbdc271ffb>(5)foo()
617 617 3 bar(x)
618 618 4 except Exception as e:
619 619 ----> 5 raise ValueError("foo (): bar failed") from e
620 620
621 621 In previous ipdb you could not go into the bar error, now from within pdb you
622 622 can use ``exceptions``:
623 623
624 624 .. code-block:: ipython
625 625
626 626 ipdb> exceptions
627 627 0 NameError("name 'X' is not defined")
628 628 > 1 ValueError('foo (): bar failed')
629 629
630 630 ipdb> exceptions 0
631 631 > <ipython-input-1-b0bbdc271ffb>(9)bar()
632 632 6
633 633 7
634 634 8 def bar(x):
635 635 ----> 9 1 / X
636 636 10
637 637
638 638 ipdb>
639 639
640 640 In particular I want to thank the `D.E. Shaw group <https://www.deshaw.com/>`__
641 641 for suggesting and funding the two largest feature as well as many bug fixes of
642 642 this release.
643 643
644 644 As usual you can find the full list of PRs on GitHub under `the 8.15 milestone
645 645 <https://github.com/ipython/ipython/milestone/120?closed=1>`__.
646 646
647 647
648 648
649 649 .. _version 8.14:
650 650
651 651 IPython 8.14
652 652 ------------
653 653
654 654 Small release of IPython.
655 655
656 656 - :ghpull:`14080` fixes some shortcuts issues.
657 657 - :ghpull:`14056` Add option to ``%autoreload`` to hide errors when reloading code. This will be the default for spyder
658 658 user is my understanding.
659 659 - :ghpull:`14039` (and :ghpull:`14040`) to show exception notes in tracebacks.
660 660
661 661 - :ghpull:`14076` Add option to EventManager to prevent printing
662 662
663 663
664 664 SPEC 0 and SPEC 4
665 665 ~~~~~~~~~~~~~~~~~
666 666
667 667 You've heard about the NEPs, (NumPy enhancement Proposal), having a NEP for something non-numpy specific was sometime confusing.
668 668 Long live the `SPECs <https://scientific-python.org/specs/>`_.
669 669
670 670 We are now trying to follow SPEC 0 (aka old NEP 29) for support of upstream libraries.
671 671
672 672 We also now try to follow SPEC 4 (test and publish nightly on a centralized nightly repository).
673 673 We encourage you to do so as well in order to report breakage, and contribute to the SPEC process !
674 674
675 675
676 676 Python 3.12 compatibility ?
677 677 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
678 678
679 679 Python 3.12 changed its tokenizer to have better support for f-strings and allow arbitrary expression.
680 680 This is a great new feature and performance improvement in Python 3.12.
681 681
682 682 Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will
683 break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guarantied.
683 break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guaranteed.
684 684 It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell
685 685 escape (``! ....``), ..., as well as how to do it if we can.
686 686
687 687 In addition even if we there is technical feasibility to do so, it is no clear we have the resources to do it.
688 688 We are thus looking for your help if you can _test_ on Python 3.12 to see to which extent this affects users and which
689 689 features are critical.
690 690
691 691 We are not going to pin IPython to Python ``<3.12`` as otherwise on install pip would downgrade/resolve to IPython 8.13,
692 692 so if you plan to update to Python 3.12 after its release, we encourage for extra care.
693 693
694 694
695 695 .. _version 8.13.1:
696 696 .. _version 8.13.2:
697 697 .. _version 8.12.2:
698 698
699 699 IPython 8.13.1, 8.13.2 and 8.12.2
700 700 ---------------------------------
701 701
702 702 3 quick in succession patch release of IPython in addition to IPython 8.13.0
703 703 having been yanked.
704 704
705 705 IPython 8.13.0 was improperly tagged as still compatible with Python 3.8, and
706 706 still had some mention of compatibility with 3.8. IPython 8.13.1 is identical to
707 707 8.13 but with the exception of being correctly tagged. This release and yank was
708 708 mostly done to fix CI.
709 709
710 710 IPython 8.12.2 and 8.13.2 contain UI fixes, with respect to right arrow not
711 711 working in some case in the terminal, and 8.12.2 contain also a requested
712 712 backport of :ghpull:`14029` (Allow safe access to the ``__getattribute__``
713 713 method of modules) for tab completion.
714 714
715 715 .. _version 8.13:
716 716
717 717 IPython 8.13
718 718 ------------
719 719
720 720 As usual for the end of the month, minor release of IPython. This release is
721 721 significant in that it not only has a number of bugfixes, but also drop support
722 722 for Python 3.8 as per NEP 29 (:ghpull:`14023`).
723 723
724 724 All the critical bugfixes have been backported onto the 8.12.1 release (see
725 725 below). In addition to that went into 8.12.1 you'll find:
726 726
727 727 - Pretty representation for ``Counter`` has been fixed to match the Python one
728 728 and be in decreasing order. :ghpull:`14032`
729 729 - Module completion is better when jedi is disabled :ghpull:`14029`.
730 730 - Improvement of ``%%bash`` magic that would get stuck :ghpull:`14019`
731 731
732 732
733 733 We hope you enjoy this release an will maybe see you at JupyterCon in less than
734 734 two weeks.
735 735
736 736 As usual you can find the full list of PRs on GitHub under `the 8.13 milestone
737 737 <https://github.com/ipython/ipython/milestone/115?closed=1>`__.
738 738
739 739 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
740 740 work on IPython and related libraries.
741 741
742 742
743 743 .. _version 8.12.1:
744 744
745 745 IPython 8.12.1
746 746 --------------
747 747
748 748 This is the twin release of IPython 8.13 that contain only critical UI and bug
749 749 fixes. The next minor version of IPython has dropped support for Python 3.8 – as
750 750 per Nep 29 and this IPython 8.12.x will now only receive bugfixes.
751 751
752 752
753 753 - :ghpull:`14004` Fix a bug introduced in IPython 8.12 that crash when
754 754 inspecting some docstrings.
755 755 - :ghpull:`14010` Fix fast traceback code that was not working in some case.
756 756 - :ghpull:`14014` Fix ``%page`` magic broken in some case.
757 757 - :ghpull:`14026`, :ghpull:`14027` Tweak default shortcut with respect to
758 758 autosuggestions.
759 759 - :ghpull:`14033` add back the ability to use ``.get()`` on OInfo object for
760 760 backward compatibility with h5py (this will be re-deprecated later, and h5py
761 761 will also get a fix).
762 762
763 763 As usual you can find the full list of PRs on GitHub under `the 8.12.1 milestone
764 764 <https://github.com/ipython/ipython/milestone/116?closed=1>`__.
765 765
766 766 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
767 767 work on IPython and related libraries.
768 768
769 769 .. _version 8.12.0:
770 770
771 771 IPython 8.12
772 772 ------------
773 773
774 774 Hopefully slightly early release for IPython 8.12. Last Thursday of the month,
775 775 even if I guess it's likely already Friday somewhere in the pacific ocean.
776 776
777 777 A number of PRs and bug fixes this month with close to 20 PRs merged !
778 778
779 779
780 780 The IPython repo reached :ghpull:`14000` !! Actually the PR that create those exact release
781 781 note is :ghpull:`14000`. Ok, more issues and PR is not always better, and I'd
782 782 love to have more time to close issues and Pull Requests.
783 783
784 784 Let's note that in less than 2 month JupyterCon is back, in Paris please visit
785 785 `jupytercon.com <https://jupytercon.com>`__, and looking forward to see you
786 786 there.
787 787
788 788 Packagers should take note that ``typing_extension`` is now a mandatory dependency
789 789 for Python versions ``<3.10``.
790 790
791 791
792 792
793 793 Let's note also that according to `NEP29
794 794 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, It is soon time to
795 795 stop support for Python 3.8 that will be release more than 3 and 1/2 years ago::
796 796
797 797 On Apr 14, 2023 drop support for Python 3.8 (initially released on Oct 14, 2019)
798 798
799 799 Thus I am likely to stop advertising support for Python 3.8 in the next
800 800 release at the end of April.
801 801
802 802
803 803 Here are some miscellaneous updates of interest:
804 804
805 805 - :ghpull:`13957` brings updates to the Qt integration, particularly for Qt6.
806 806 - :ghpull:`13960` fixes the %debug magic command to give access to the local
807 807 scope.
808 808 - :ghpull:`13964` fixes some crashes with the new fast traceback code. Note that
809 809 there are still some issues with the fast traceback code, and I a, likely
810 810 to fix and tweak behavior.
811 811 - :ghpull:`13973` We are slowly migrating IPython internals to use proper type
812 812 objects/dataclasses instead of dictionaries to allow static typing checks.
813 813 These are technically public API and could lead to breakage, so please let us
814 814 know if that's the case and I'll mitigate.
815 815 - :ghpull:`13990`, :ghpull:`13991`, :ghpull:`13994` all improve keybinding and
816 816 shortcut configurability.
817 817
818 818 As usual you can find the full list of PRs on GitHub under `the 8.12 milestone
819 819 <https://github.com/ipython/ipython/milestone/114?closed=1>`__.
820 820
821 821 We want to thank the D.E. Shaw group for requesting and sponsoring the work on
822 822 the following big feature. We had productive discussions on how to best expose
823 823 this feature
824 824
825 825 Dynamic documentation dispatch
826 826 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
827 827
828 828 We are experimenting with dynamic documentation dispatch for object attribute.
829 829 See :ghissue:`13860`. The goal is to allow object to define documentation for
830 830 their attributes, properties, even when those are dynamically defined with
831 831 `__getattr__`.
832 832
833 833 In particular when those objects are base types it can be useful to show the
834 834 documentation
835 835
836 836
837 837 .. code-block:: ipython
838 838
839 839
840 840 In [1]: class User:
841 841 ...:
842 842 ...: __custom_documentations__ = {
843 843 ...: "first": "The first name of the user.",
844 844 ...: "last": "The last name of the user.",
845 845 ...: }
846 846 ...:
847 847 ...: first:str
848 848 ...: last:str
849 849 ...:
850 850 ...: def __init__(self, first, last):
851 851 ...: self.first = first
852 852 ...: self.last = last
853 853 ...:
854 854 ...: @property
855 855 ...: def full(self):
856 856 ...: """`self.first` and `self.last` joined by a space."""
857 857 ...: return self.first + " " + self.last
858 858 ...:
859 859 ...:
860 860 ...: user = Person('Jane', 'Doe')
861 861
862 862 In [2]: user.first?
863 863 Type: str
864 864 String form: Jane
865 865 Length: 4
866 866 Docstring: the first name of a the person object, a str
867 867 Class docstring:
868 868 ....
869 869
870 870 In [3]: user.last?
871 871 Type: str
872 872 String form: Doe
873 873 Length: 3
874 874 Docstring: the last name, also a str
875 875 ...
876 876
877 877
878 878 We can see here the symmetry with IPython looking for the docstring on the
879 879 properties:
880 880
881 881 .. code-block:: ipython
882 882
883 883
884 884 In [4]: user.full?
885 885 HERE
886 886 Type: property
887 887 String form: <property object at 0x102bb15d0>
888 888 Docstring: first and last join by a space
889 889
890 890
891 891 Note that while in the above example we use a static dictionary, libraries may
892 892 decide to use a custom object that define ``__getitem__``, we caution against
893 893 using objects that would trigger computation to show documentation, but it is
894 894 sometime preferable for highly dynamic code that for example export ans API as
895 895 object.
896 896
897 897
898 898
899 899 .. _version 8.11.0:
900 900
901 901 IPython 8.11
902 902 ------------
903 903
904 904 Back on almost regular monthly schedule for IPython with end-of-month
905 905 really-late-Friday release to make sure some bugs are properly fixed.
906 906 Small addition of with a few new features, bugfix and UX improvements.
907 907
908 908 This is a non-exhaustive list, but among other you will find:
909 909
910 910 Faster Traceback Highlighting
911 911 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
912 912
913 913 Resurrection of pre-IPython-8 traceback highlighting code.
914 914
915 915 Really long and complicated files were slow to highlight in traceback with
916 916 IPython 8 despite upstream improvement that make many case better. Therefore
917 917 starting with IPython 8.11 when one of the highlighted file is more than 10 000
918 918 line long by default, we'll fallback to a faster path that does not have all the
919 919 features of highlighting failing AST nodes.
920 920
921 921 This can be configures by setting the value of
922 922 ``IPython.code.ultratb.FAST_THRESHOLD`` to an arbitrary low or large value.
923 923
924 924
925 925 Autoreload verbosity
926 926 ~~~~~~~~~~~~~~~~~~~~
927 927
928 928 We introduce more descriptive names for the ``%autoreload`` parameter:
929 929
930 930 - ``%autoreload now`` (also ``%autoreload``) - perform autoreload immediately.
931 931 - ``%autoreload off`` (also ``%autoreload 0``) - turn off autoreload.
932 932 - ``%autoreload explicit`` (also ``%autoreload 1``) - turn on autoreload only for modules
933 933 whitelisted by ``%aimport`` statements.
934 934 - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those
935 935 blacklisted by ``%aimport`` statements.
936 - ``%autoreload complete`` (also ``%autoreload 3``) - all the fatures of ``all`` but also adding new
936 - ``%autoreload complete`` (also ``%autoreload 3``) - all the features of ``all`` but also adding new
937 937 objects from the imported modules (see
938 938 IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects).
939 939
940 940 The original designations (e.g. "2") still work, and these new ones are case-insensitive.
941 941
942 942 Additionally, the option ``--print`` or ``-p`` can be added to the line to print the names of
943 943 modules being reloaded. Similarly, ``--log`` or ``-l`` will output the names to the logger at INFO
944 944 level. Both can be used simultaneously.
945 945
946 946 The parsing logic for ``%aimport`` is now improved such that modules can be whitelisted and
947 947 blacklisted in the same line, e.g. it's now possible to call ``%aimport os, -math`` to include
948 948 ``os`` for ``%autoreload explicit`` and exclude ``math`` for modes ``all`` and ``complete``.
949 949
950 950 Terminal shortcuts customization
951 951 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
952 952
953 953 Previously modifying shortcuts was only possible by hooking into startup files
954 954 and practically limited to adding new shortcuts or removing all shortcuts bound
955 955 to a specific key. This release enables users to override existing terminal
956 956 shortcuts, disable them or add new keybindings.
957 957
958 958 For example, to set the :kbd:`right` to accept a single character of auto-suggestion
959 959 you could use::
960 960
961 961 my_shortcuts = [
962 962 {
963 963 "command": "IPython:auto_suggest.accept_character",
964 964 "new_keys": ["right"]
965 965 }
966 966 ]
967 967 %config TerminalInteractiveShell.shortcuts = my_shortcuts
968 968
969 969 You can learn more in :std:configtrait:`TerminalInteractiveShell.shortcuts`
970 970 configuration reference.
971 971
972 972 Miscellaneous
973 973 ~~~~~~~~~~~~~
974 974
975 975 - ``%gui`` should now support PySide6. :ghpull:`13864`
976 976 - Cli shortcuts can now be configured :ghpull:`13928`, see above.
977 977 (note that there might be an issue with prompt_toolkit 3.0.37 and shortcut configuration).
978 978
979 979 - Capture output should now respect ``;`` semicolon to suppress output.
980 980 :ghpull:`13940`
981 981 - Base64 encoded images (in jupyter frontend), will not have trailing newlines.
982 982 :ghpull:`13941`
983 983
984 984 As usual you can find the full list of PRs on GitHub under `the 8.11 milestone
985 985 <https://github.com/ipython/ipython/milestone/113?closed=1>`__.
986 986
987 987 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
988 988 work on IPython and related libraries.
989 989
990 990 .. _version 8.10.0:
991 991
992 992 IPython 8.10
993 993 ------------
994 994
995 995 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
996 996 This is a really low severity CVE that you most likely are not affected by unless:
997 997
998 998 - You are on windows.
999 999 - You have a custom build of Python without ``_ctypes``
1000 1000 - You cd or start IPython or Jupyter in untrusted directory which names may be
1001 1001 valid shell commands.
1002 1002
1003 1003 You can read more on `the advisory
1004 1004 <https://github.com/ipython/ipython/security/advisories/GHSA-29gw-9793-fvw7>`__.
1005 1005
1006 1006 In addition to fixing this CVE we also fix a couple of outstanding bugs and issues.
1007 1007
1008 1008 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
1009 1009 <https://github.com/ipython/ipython/milestone/112?closed=1>`__.
1010 1010
1011 1011 In Particular:
1012 1012
1013 1013 - bump minimum numpy to `>=1.21` version following NEP29. :ghpull:`13930`
1014 1014 - fix for compatibility with MyPy 1.0. :ghpull:`13933`
1015 1015 - fix nbgrader stalling when IPython's ``showtraceback`` function is
1016 1016 monkeypatched. :ghpull:`13934`
1017 1017
1018 1018
1019 1019
1020 1020 As this release also contains those minimal changes in addition to fixing the
1021 1021 CVE I decided to bump the minor version anyway.
1022 1022
1023 1023 This will not affect the normal release schedule, so IPython 8.11 is due in
1024 1024 about 2 weeks.
1025 1025
1026 1026 .. _version 8.9.0:
1027 1027
1028 1028 IPython 8.9.0
1029 1029 -------------
1030 1030
1031 1031 Second release of IPython in 2023, last Friday of the month, we are back on
1032 1032 track. This is a small release with a few bug-fixes, and improvements, mostly
1033 1033 with respect to terminal shortcuts.
1034 1034
1035 1035
1036 1036 The biggest improvement for 8.9 is a drastic amelioration of the
1037 1037 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
1038 1038 active contributor `@krassowski <https://github.com/krassowski>`.
1039 1039
1040 1040 - ``right`` accepts a single character from suggestion
1041 1041 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
1042 1042 precedence and need to be disabled to make this work)
1043 1043 - ``backspace`` deletes a character and resumes hinting autosuggestions
1044 1044 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
1045 1045 - ``backspace`` deletes a character and resumes hinting autosuggestions
1046 1046 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
1047 1047 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
1048 1048
1049 1049 This is best described by the Gif posted by `@krassowski
1050 1050 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
1051 1051
1052 1052 .. image:: ../_images/autosuggest.gif
1053 1053
1054 1054 Please report any feedback in order for us to improve the user experience.
1055 1055 In particular we are also working on making the shortcuts configurable.
1056 1056
1057 1057 If you are interested in better terminal shortcuts, I also invite you to
1058 1058 participate in issue `13879
1059 1059 <https://github.com/ipython/ipython/issues/13879>`__.
1060 1060
1061 1061
1062 1062 As we follow `NEP29
1063 1063 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
1064 1064 IPython will officially stop supporting numpy 1.20, and will stop supporting
1065 1065 Python 3.8 after April release.
1066 1066
1067 1067 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
1068 1068 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
1069 1069
1070 1070
1071 1071 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1072 1072 work on IPython and related libraries.
1073 1073
1074 1074 .. _version 8.8.0:
1075 1075
1076 1076 IPython 8.8.0
1077 1077 -------------
1078 1078
1079 1079 First release of IPython in 2023 as there was no release at the end of
1080 1080 December.
1081 1081
1082 1082 This is an unusually big release (relatively speaking) with more than 15 Pull
1083 1083 Requests merged.
1084 1084
1085 1085 Of particular interest are:
1086 1086
1087 1087 - :ghpull:`13852` that replaces the greedy completer and improves
1088 1088 completion, in particular for dictionary keys.
1089 1089 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
1090 1090 bundled in wheels.
1091 1091 - :ghpull:`13869` that implements tab completions for IPython options in the
1092 1092 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
1093 1093 believe this also needs a recent version of Traitlets.
1094 1094 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
1095 1095 configurable.
1096 1096 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
1097 1097 entry points that would be included in the wheel would be the one of the
1098 1098 Python version that was used to build the ``whl`` file.
1099 1099
1100 1100 In no particular order, the rest of the changes update the test suite to be
1101 1101 compatible with Pygments 2.14, various docfixes, testing on more recent python
1102 1102 versions and various updates.
1103 1103
1104 1104 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
1105 1105 <https://github.com/ipython/ipython/milestone/110>`__.
1106 1106
1107 1107 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
1108 1108 merging contributions.
1109 1109
1110 1110 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1111 1111 work on IPython and related libraries.
1112 1112
1113 1113 .. _version 8.7.0:
1114 1114
1115 1115 IPython 8.7.0
1116 1116 -------------
1117 1117
1118 1118
1119 1119 Small release of IPython with a couple of bug fixes and new features for this
1120 1120 month. Next month is the end of year, it is unclear if there will be a release
1121 1121 close to the new year's eve, or if the next release will be at the end of January.
1122 1122
1123 1123 Here are a few of the relevant fixes,
1124 1124 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
1125 1125 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
1126 1126
1127 1127
1128 1128 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
1129 1129 - IPython shipped with the ``py.typed`` marker now, and we are progressively
1130 1130 adding more types. :ghpull:`13831`
1131 1131 - :ghpull:`13817` add configuration of code blacks formatting.
1132 1132
1133 1133
1134 1134 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1135 1135 work on IPython and related libraries.
1136 1136
1137 1137
1138 1138 .. _version 8.6.0:
1139 1139
1140 1140 IPython 8.6.0
1141 1141 -------------
1142 1142
1143 1143 Back to a more regular release schedule (at least I try), as Friday is
1144 1144 already over by more than 24h hours. This is a slightly bigger release with a
1145 1145 few new features that contain no less than 25 PRs.
1146 1146
1147 1147 We'll notably found a couple of non negligible changes:
1148 1148
1149 1149 The ``install_ext`` and related functions have been removed after being
1150 1150 deprecated for years. You can use pip to install extensions. ``pip`` did not
1151 1151 exist when ``install_ext`` was introduced. You can still load local extensions
1152 1152 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
1153 1153
1154 1154 IPython now has extra entry points that use the major *and minor* version of
1155 1155 python. For some of you this means that you can do a quick ``ipython3.10`` to
1156 1156 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
1157 1157 as your main Python. :ghpull:`13743`
1158 1158
1159 1159 The completer matcher API has been improved. See :ghpull:`13745`. This should
1160 1160 improve the type inference and improve dict keys completions in many use case.
1161 1161 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
1162 1162 it.
1163 1163
1164 1164 The color of error nodes in tracebacks can now be customized. See
1165 1165 :ghpull:`13756`. This is a private attribute until someone finds the time to
1166 1166 properly add a configuration option. Note that with Python 3.11 that also shows
1167 1167 the relevant nodes in traceback, it would be good to leverage this information
1168 1168 (plus the "did you mean" info added on attribute errors). But that's likely work
1169 1169 I won't have time to do before long, so contributions welcome.
1170 1170
1171 1171 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
1172 1172
1173 1173
1174 1174 The ``open()`` function present in the user namespace by default will now refuse
1175 1175 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
1176 1176 This mostly occurs in teaching context when incorrect values get passed around.
1177 1177
1178 1178
1179 1179 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
1180 1180 objects inside arrays. That is to say, the following now works::
1181 1181
1182 1182
1183 1183 >>> def my_func(*arg, **kwargs):pass
1184 1184 >>> container = [my_func]
1185 1185 >>> container[0]?
1186 1186
1187 1187
1188 1188 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
1189 1189 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
1190 1190 group for the request and sponsoring the work.
1191 1191
1192 1192
1193 1193 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
1194 1194 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
1195 1195
1196 1196 Thanks to all hacktoberfest contributors, please contribute to
1197 1197 `closember.org <https://closember.org/>`__.
1198 1198
1199 1199 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1200 1200 work on IPython and related libraries.
1201 1201
1202 1202 .. _version 8.5.0:
1203 1203
1204 1204 IPython 8.5.0
1205 1205 -------------
1206 1206
1207 1207 First release since a couple of month due to various reasons and timing preventing
1208 1208 me for sticking to the usual monthly release the last Friday of each month. This
1209 1209 is of non negligible size as it has more than two dozen PRs with various fixes
1210 1210 an bug fixes.
1211 1211
1212 1212 Many thanks to everybody who contributed PRs for your patience in review and
1213 1213 merges.
1214 1214
1215 1215 Here is a non-exhaustive list of changes that have been implemented for IPython
1216 1216 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
1217 1217 8.5 milestone
1218 1218 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
1219 1219
1220 1220 - Added a shortcut for accepting auto suggestion. The End key shortcut for
1221 1221 accepting auto-suggestion This binding works in Vi mode too, provided
1222 1222 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
1223 1223 ``True`` :ghpull:`13566`.
1224 1224
1225 1225 - No popup in window for latex generation when generating latex (e.g. via
1226 1226 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
1227 1227
1228 1228 - Fixed error raised when attempting to tab-complete an input string with
1229 1229 consecutive periods or forward slashes (such as "file:///var/log/...").
1230 1230 :ghpull:`13675`
1231 1231
1232 1232 - Relative filenames in Latex rendering :
1233 1233 The `latex_to_png_dvipng` command internally generates input and output file
1234 1234 arguments to `latex` and `dvipis`. These arguments are now generated as
1235 1235 relative files to the current working directory instead of absolute file
1236 1236 paths. This solves a problem where the current working directory contains
1237 1237 characters that are not handled properly by `latex` and `dvips`. There are
1238 1238 no changes to the user API. :ghpull:`13680`
1239 1239
1240 1240 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
1241 1241 restructured text documents executed with the ipython-sphinx extension
1242 1242 skipped any lines of code containing python decorators. :ghpull:`13612`
1243 1243
1244 1244 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
1245 1245 - Fix paste magic on wayland. :ghpull:`13671`
1246 1246 - show maxlen in deque's repr. :ghpull:`13648`
1247 1247
1248 1248 Restore line numbers for Input
1249 1249 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1250 1250
1251 1251 Line number information in tracebacks from input are restored.
1252 1252 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
1253 1253
1254 1254 So, instead of::
1255 1255
1256 1256 ---------------------------------------------------------------------------
1257 1257 ZeroDivisionError Traceback (most recent call last)
1258 1258 Input In [3], in <cell line: 1>()
1259 1259 ----> 1 myfunc(2)
1260 1260
1261 1261 Input In [2], in myfunc(z)
1262 1262 1 def myfunc(z):
1263 1263 ----> 2 foo.boo(z-1)
1264 1264
1265 1265 File ~/code/python/ipython/foo.py:3, in boo(x)
1266 1266 2 def boo(x):
1267 1267 ----> 3 return 1/(1-x)
1268 1268
1269 1269 ZeroDivisionError: division by zero
1270 1270
1271 1271 The error traceback now looks like::
1272 1272
1273 1273 ---------------------------------------------------------------------------
1274 1274 ZeroDivisionError Traceback (most recent call last)
1275 1275 Cell In [3], line 1
1276 1276 ----> 1 myfunc(2)
1277 1277
1278 1278 Cell In [2], line 2, in myfunc(z)
1279 1279 1 def myfunc(z):
1280 1280 ----> 2 foo.boo(z-1)
1281 1281
1282 1282 File ~/code/python/ipython/foo.py:3, in boo(x)
1283 1283 2 def boo(x):
1284 1284 ----> 3 return 1/(1-x)
1285 1285
1286 1286 ZeroDivisionError: division by zero
1287 1287
1288 1288 or, with xmode=Plain::
1289 1289
1290 1290 Traceback (most recent call last):
1291 1291 Cell In [12], line 1
1292 1292 myfunc(2)
1293 1293 Cell In [6], line 2 in myfunc
1294 1294 foo.boo(z-1)
1295 1295 File ~/code/python/ipython/foo.py:3 in boo
1296 1296 return 1/(1-x)
1297 1297 ZeroDivisionError: division by zero
1298 1298
1299 1299 :ghpull:`13560`
1300 1300
1301 1301 New setting to silence warning if working inside a virtual environment
1302 1302 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1303 1303
1304 1304 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
1305 1305
1306 1306 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
1307 1307
1308 1308 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
1309 1309
1310 1310 :ghpull:`13706`
1311 1311
1312 1312 -------
1313 1313
1314 1314 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1315 1315 work on IPython and related libraries.
1316 1316
1317 1317
1318 1318 .. _version 8.4.0:
1319 1319
1320 1320 IPython 8.4.0
1321 1321 -------------
1322 1322
1323 1323 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
1324 1324 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
1325 1325
1326 1326 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1327 1327 work on IPython and related libraries.
1328 1328
1329 1329
1330 1330 .. _version 8.3.0:
1331 1331
1332 1332 IPython 8.3.0
1333 1333 -------------
1334 1334
1335 1335 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
1336 1336 ``set_next_input`` as most frontend allow proper multiline editing and it was
1337 1337 causing issues for many users of multi-cell frontends. This has been backported to 7.33
1338 1338
1339 1339
1340 1340 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
1341 1341 the info object when frontend provides it. This has been backported to 7.33
1342 1342
1343 1343 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
1344 1344 auto-suggestion.
1345 1345
1346 1346 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
1347 1347
1348 1348 .. _version 8.2.0:
1349 1349
1350 1350 IPython 8.2.0
1351 1351 -------------
1352 1352
1353 1353 IPython 8.2 mostly bring bugfixes to IPython.
1354 1354
1355 1355 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
1356 1356 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
1357 1357 - History is now pulled from the sqitel database and not from in-memory.
1358 1358 In particular when using the ``%paste`` magic, the content of the pasted text will
1359 1359 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
1360 1360 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
1361 1361 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
1362 1362
1363 1363
1364 1364 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
1365 1365 random, and would appreciate help if you find a reproducible minimal case. I've
1366 1366 tried to make various changes to the codebase to mitigate it, but a proper fix
1367 1367 will be difficult without understanding the cause.
1368 1368
1369 1369
1370 1370 All the issues on pull-requests for this release can be found in the `8.2
1371 1371 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
1372 1372 documentation only PR can be found as part of the `7.33 milestone
1373 1373 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
1374 1374
1375 1375 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1376 1376 work on IPython and related libraries.
1377 1377
1378 1378 .. _version 8.1.1:
1379 1379
1380 1380 IPython 8.1.1
1381 1381 -------------
1382 1382
1383 1383 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
1384 1384
1385 1385 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
1386 1386 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
1387 1387
1388 1388 .. _version 8.1:
1389 1389
1390 1390 IPython 8.1.0
1391 1391 -------------
1392 1392
1393 1393 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
1394 1394 updates a few behaviors that were problematic with the 8.0 as with many new major
1395 1395 release.
1396 1396
1397 1397 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
1398 1398 features listed in :ref:`version 7.32`.
1399 1399
1400 1400 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
1401 1401 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
1402 1402 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
1403 1403 is now explicit in ``setup.cfg``/``setup.py``
1404 1404 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
1405 1405 - Multi-line edit executes too early with await. :ghpull:`13424`
1406 1406
1407 1407 - ``black`` is back as an optional dependency, and autoformatting disabled by
1408 1408 default until some fixes are implemented (black improperly reformat magics).
1409 1409 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
1410 1410 reformatter has been added :ghpull:`13528` . You can use
1411 1411 ``TerminalInteractiveShell.autoformatter="black"``,
1412 1412 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formatting
1413 1413 with black, or switch to yapf.
1414 1414
1415 1415 - Fix and issue where ``display`` was not defined.
1416 1416
1417 1417 - Auto suggestions are now configurable. Currently only
1418 1418 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
1419 1419 welcomed. :ghpull:`13475`
1420 1420
1421 1421 - multiple packaging/testing improvement to simplify downstream packaging
1422 1422 (xfail with reasons, try to not access network...).
1423 1423
1424 1424 - Update deprecation. ``InteractiveShell.magic`` internal method has been
1425 1425 deprecated for many years but did not emit a warning until now.
1426 1426
1427 1427 - internal ``appended_to_syspath`` context manager has been deprecated.
1428 1428
1429 1429 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
1430 1430
1431 1431 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
1432 1432
1433 1433 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
1434 1434
1435 1435 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
1436 1436 removed.
1437 1437
1438 1438 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
1439 1439
1440 1440
1441 1441 We want to remind users that IPython is part of the Jupyter organisations, and
1442 1442 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
1443 1443 Abuse and non-respectful comments on discussion will not be tolerated.
1444 1444
1445 1445 Many thanks to all the contributors to this release, many of the above fixed issues and
1446 1446 new features were done by first time contributors, showing there is still
1447 1447 plenty of easy contribution possible in IPython
1448 1448 . You can find all individual contributions
1449 1449 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
1450 1450
1451 1451 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1452 1452 work on IPython and related libraries. In particular the Lazy autoloading of
1453 1453 magics that you will find described in the 7.32 release notes.
1454 1454
1455 1455
1456 1456 .. _version 8.0.1:
1457 1457
1458 1458 IPython 8.0.1 (CVE-2022-21699)
1459 1459 ------------------------------
1460 1460
1461 1461 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
1462 1462 values in order to prevent potential Execution with Unnecessary Privileges.
1463 1463
1464 1464 Almost all version of IPython looks for configuration and profiles in current
1465 1465 working directory. Since IPython was developed before pip and environments
1466 1466 existed it was used a convenient way to load code/packages in a project
1467 dependant way.
1467 dependent way.
1468 1468
1469 1469 In 2022, it is not necessary anymore, and can lead to confusing behavior where
1470 1470 for example cloning a repository and starting IPython or loading a notebook from
1471 1471 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
1472 1472 code execution.
1473 1473
1474 1474
1475 1475 I did not find any standard way for packaged to advertise CVEs they fix, I'm
1476 1476 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
1477 1477 list the CVEs that should have been fixed. This attribute is informational only
1478 1478 as if a executable has a flaw, this value can always be changed by an attacker.
1479 1479
1480 1480 .. code::
1481 1481
1482 1482 In [1]: import IPython
1483 1483
1484 1484 In [2]: IPython.__patched_cves__
1485 1485 Out[2]: {'CVE-2022-21699'}
1486 1486
1487 1487 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
1488 1488 Out[3]: True
1489 1489
1490 1490 Thus starting with this version:
1491 1491
1492 1492 - The current working directory is not searched anymore for profiles or
1493 1493 configurations files.
1494 1494 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
1495 1495 the list of fixed CVE. This is informational only.
1496 1496
1497 1497 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
1498 1498
1499 1499
1500 1500 .. _version 8.0:
1501 1501
1502 1502 IPython 8.0
1503 1503 -----------
1504 1504
1505 1505 IPython 8.0 is bringing a large number of new features and improvements to both the
1506 1506 user of the terminal and of the kernel via Jupyter. The removal of compatibility
1507 1507 with an older version of Python is also the opportunity to do a couple of
1508 1508 performance improvements in particular with respect to startup time.
1509 1509 The 8.x branch started diverging from its predecessor around IPython 7.12
1510 1510 (January 2020).
1511 1511
1512 1512 This release contains 250+ pull requests, in addition to many of the features
1513 1513 and backports that have made it to the 7.x branch. Please see the
1514 1514 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
1515 1515
1516 1516 Please feel free to send pull requests to update those notes after release,
1517 1517 I have likely forgotten a few things reviewing 250+ PRs.
1518 1518
1519 1519 Dependencies changes/downstream packaging
1520 1520 -----------------------------------------
1521 1521
1522 1522 Most of our building steps have been changed to be (mostly) declarative
1523 1523 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
1524 1524 looking for help to do so.
1525 1525
1526 1526 - minimum supported ``traitlets`` version is now 5+
1527 1527 - we now require ``stack_data``
1528 1528 - minimal Python is now 3.8
1529 1529 - ``nose`` is not a testing requirement anymore
1530 1530 - ``pytest`` replaces nose.
1531 1531 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
1532 1532 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
1533 1533 not have much effect on packaging.
1534 1534
1535 1535
1536 1536 Deprecation and removal
1537 1537 -----------------------
1538 1538
1539 1539 We removed almost all features, arguments, functions, and modules that were
1540 1540 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
1541 1541 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
1542 1542 The few remaining deprecated features we left have better deprecation warnings
1543 1543 or have been turned into explicit errors for better error messages.
1544 1544
1545 1545 I will use this occasion to add the following requests to anyone emitting a
1546 1546 deprecation warning:
1547 1547
1548 1548 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
1549 1549 caller context, and not the callee one.
1550 1550 - Please add **since which version** something is deprecated.
1551 1551
1552 1552 As a side note, it is much easier to conditionally compare version
1553 1553 numbers rather than using ``try/except`` when functionality changes with a version.
1554 1554
1555 1555 I won't list all the removed features here, but modules like ``IPython.kernel``,
1556 1556 which was just a shim module around ``ipykernel`` for the past 8 years, have been
1557 1557 removed, and so many other similar things that pre-date the name **Jupyter**
1558 1558 itself.
1559 1559
1560 1560 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
1561 1561 handled by ``load_extension``.
1562 1562
1563 1563 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
1564 1564 other packages and no longer need to be inside IPython.
1565 1565
1566 1566
1567 1567 Documentation
1568 1568 -------------
1569 1569
1570 1570 The majority of our docstrings have now been reformatted and automatically fixed by
1571 1571 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
1572 1572 to numpydoc.
1573 1573
1574 1574 Type annotations
1575 1575 ----------------
1576 1576
1577 1577 While IPython itself is highly dynamic and can't be completely typed, many of
1578 1578 the functions now have type annotations, and part of the codebase is now checked
1579 1579 by mypy.
1580 1580
1581 1581
1582 1582 Featured changes
1583 1583 ----------------
1584 1584
1585 1585 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
1586 1586 Please note as well that many features have been added in the 7.x branch as well
1587 1587 (and hence why you want to read the 7.x what's new notes), in particular
1588 1588 features contributed by QuantStack (with respect to debugger protocol and Xeus
1589 1589 Python), as well as many debugger features that I was pleased to implement as
1590 1590 part of my work at QuanSight and sponsored by DE Shaw.
1591 1591
1592 1592 Traceback improvements
1593 1593 ~~~~~~~~~~~~~~~~~~~~~~
1594 1594
1595 1595 Previously, error tracebacks for errors happening in code cells were showing a
1596 1596 hash, the one used for compiling the Python AST::
1597 1597
1598 1598 In [1]: def foo():
1599 1599 ...: return 3 / 0
1600 1600 ...:
1601 1601
1602 1602 In [2]: foo()
1603 1603 ---------------------------------------------------------------------------
1604 1604 ZeroDivisionError Traceback (most recent call last)
1605 1605 <ipython-input-2-c19b6d9633cf> in <module>
1606 1606 ----> 1 foo()
1607 1607
1608 1608 <ipython-input-1-1595a74c32d5> in foo()
1609 1609 1 def foo():
1610 1610 ----> 2 return 3 / 0
1611 1611 3
1612 1612
1613 1613 ZeroDivisionError: division by zero
1614 1614
1615 1615 The error traceback is now correctly formatted, showing the cell number in which the error happened::
1616 1616
1617 1617 In [1]: def foo():
1618 1618 ...: return 3 / 0
1619 1619 ...:
1620 1620
1621 1621 Input In [2]: foo()
1622 1622 ---------------------------------------------------------------------------
1623 1623 ZeroDivisionError Traceback (most recent call last)
1624 1624 input In [2], in <module>
1625 1625 ----> 1 foo()
1626 1626
1627 1627 Input In [1], in foo()
1628 1628 1 def foo():
1629 1629 ----> 2 return 3 / 0
1630 1630
1631 1631 ZeroDivisionError: division by zero
1632 1632
1633 1633 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
1634 1634 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
1635 1635
1636 1636 For example in the following snippet::
1637 1637
1638 1638 def foo(i):
1639 1639 x = [[[0]]]
1640 1640 return x[0][i][0]
1641 1641
1642 1642
1643 1643 def bar():
1644 1644 return foo(0) + foo(
1645 1645 1
1646 1646 ) + foo(2)
1647 1647
1648 1648
1649 1649 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
1650 1650 and IPython 8.0 is capable of telling you where the index error occurs::
1651 1651
1652 1652
1653 1653 IndexError
1654 1654 Input In [2], in <module>
1655 1655 ----> 1 bar()
1656 1656 ^^^^^
1657 1657
1658 1658 Input In [1], in bar()
1659 1659 6 def bar():
1660 1660 ----> 7 return foo(0) + foo(
1661 1661 ^^^^
1662 1662 8 1
1663 1663 ^^^^^^^^
1664 1664 9 ) + foo(2)
1665 1665 ^^^^
1666 1666
1667 1667 Input In [1], in foo(i)
1668 1668 1 def foo(i):
1669 1669 2 x = [[[0]]]
1670 1670 ----> 3 return x[0][i][0]
1671 1671 ^^^^^^^
1672 1672
1673 1673 The corresponding locations marked here with ``^`` will show up highlighted in
1674 1674 the terminal and notebooks.
1675 1675
1676 1676 Finally, a colon ``::`` and line number is appended after a filename in
1677 1677 traceback::
1678 1678
1679 1679
1680 1680 ZeroDivisionError Traceback (most recent call last)
1681 1681 File ~/error.py:4, in <module>
1682 1682 1 def f():
1683 1683 2 1/0
1684 1684 ----> 4 f()
1685 1685
1686 1686 File ~/error.py:2, in f()
1687 1687 1 def f():
1688 1688 ----> 2 1/0
1689 1689
1690 1690 Many terminals and editors have integrations enabling you to directly jump to the
1691 1691 relevant file/line when this syntax is used, so this small addition may have a high
1692 1692 impact on productivity.
1693 1693
1694 1694
1695 1695 Autosuggestions
1696 1696 ~~~~~~~~~~~~~~~
1697 1697
1698 1698 Autosuggestion is a very useful feature available in `fish <https://fishshell.com/>`__, `zsh <https://en.wikipedia.org/wiki/Z_shell>`__, and `prompt-toolkit <https://python-prompt-toolkit.readthedocs.io/en/master/pages/asking_for_input.html#auto-suggestion>`__.
1699 1699
1700 1700 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
1701 1701 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
1702 1702
1703 1703 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
1704 1704 or right arrow as described below.
1705 1705
1706 1706 1. Start ipython
1707 1707
1708 1708 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
1709 1709
1710 1710 2. Run ``print("hello")``
1711 1711
1712 1712 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
1713 1713
1714 1714 3. start typing ``print`` again to see the autosuggestion
1715 1715
1716 1716 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
1717 1717
1718 1718 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
1719 1719
1720 1720 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
1721 1721
1722 1722 You can also complete word by word:
1723 1723
1724 1724 1. Run ``def say_hello(): print("hello")``
1725 1725
1726 1726 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
1727 1727
1728 1728 2. Start typing the first letter if ``def`` to see the autosuggestion
1729 1729
1730 1730 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1731 1731
1732 1732 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
1733 1733
1734 1734 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1735 1735
1736 1736 Importantly, this feature does not interfere with tab completion:
1737 1737
1738 1738 1. After running ``def say_hello(): print("hello")``, press d
1739 1739
1740 1740 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1741 1741
1742 1742 2. Press Tab to start tab completion
1743 1743
1744 1744 .. image:: ../_images/8.0/auto_suggest_d_completions.png
1745 1745
1746 1746 3A. Press Tab again to select the first option
1747 1747
1748 1748 .. image:: ../_images/8.0/auto_suggest_def_completions.png
1749 1749
1750 1750 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
1751 1751
1752 1752 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1753 1753
1754 1754 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
1755 1755
1756 1756 .. image:: ../_images/8.0/auto_suggest_match_parens.png
1757 1757
1758 1758
1759 1759 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
1760 1760
1761 1761 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
1762 1762 - To use these shortcuts in vi insert mode, you will have to create `custom keybindings in your config.py <https://github.com/mskar/setup/commit/2892fcee46f9f80ef7788f0749edc99daccc52f4/>`__.
1763 1763
1764 1764
1765 1765 Show pinfo information in ipdb using "?" and "??"
1766 1766 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1767 1767
1768 1768 In IPDB, it is now possible to show the information about an object using "?"
1769 1769 and "??", in much the same way that it can be done when using the IPython prompt::
1770 1770
1771 1771 ipdb> partial?
1772 1772 Init signature: partial(self, /, *args, **kwargs)
1773 1773 Docstring:
1774 1774 partial(func, *args, **keywords) - new function with partial application
1775 1775 of the given arguments and keywords.
1776 1776 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
1777 1777 Type: type
1778 1778 Subclasses:
1779 1779
1780 1780 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
1781 1781
1782 1782
1783 1783 Autoreload 3 feature
1784 1784 ~~~~~~~~~~~~~~~~~~~~
1785 1785
1786 1786 Example: When an IPython session is run with the 'autoreload' extension loaded,
1787 1787 you will now have the option '3' to select, which means the following:
1788 1788
1789 1789 1. replicate all functionality from option 2
1790 1790 2. autoload all new funcs/classes/enums/globals from the module when they are added
1791 1791 3. autoload all newly imported funcs/classes/enums/globals from external modules
1792 1792
1793 1793 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
1794 1794
1795 1795 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
1796 1796
1797 1797 Auto formatting with black in the CLI
1798 1798 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1799 1799
1800 1800 This feature was present in 7.x, but disabled by default.
1801 1801
1802 1802 In 8.0, input was automatically reformatted with Black when black was installed.
1803 1803 This feature has been reverted for the time being.
1804 1804 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
1805 1805
1806 1806 History Range Glob feature
1807 1807 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1808 1808
1809 1809 Previously, when using ``%history``, users could specify either
1810 1810 a range of sessions and lines, for example:
1811 1811
1812 1812 .. code-block:: python
1813 1813
1814 1814 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
1815 1815 # to the fifth line of 6 sessions ago.``
1816 1816
1817 1817 Or users could specify a glob pattern:
1818 1818
1819 1819 .. code-block:: python
1820 1820
1821 1821 -g <pattern> # glob ALL history for the specified pattern.
1822 1822
1823 1823 However users could *not* specify both.
1824 1824
1825 1825 If a user *did* specify both a range and a glob pattern,
1826 1826 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
1827 1827
1828 1828 With this enhancement, if a user specifies both a range and a glob pattern, then the glob pattern will be applied to the specified range of history.
1829 1829
1830 1830 Don't start a multi-line cell with sunken parenthesis
1831 1831 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1832 1832
1833 1833 From now on, IPython will not ask for the next line of input when given a single
1834 1834 line with more closing than opening brackets. For example, this means that if
1835 1835 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
1836 1836 the ``...:`` prompt continuation.
1837 1837
1838 1838 IPython shell for ipdb interact
1839 1839 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1840 1840
1841 1841 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
1842 1842
1843 1843 Automatic Vi prompt stripping
1844 1844 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1845 1845
1846 1846 When pasting code into IPython, it will strip the leading prompt characters if
1847 1847 there are any. For example, you can paste the following code into the console -
1848 1848 it will still work, even though each line is prefixed with prompts (``In``,
1849 1849 ``Out``)::
1850 1850
1851 1851 In [1]: 2 * 2 == 4
1852 1852 Out[1]: True
1853 1853
1854 1854 In [2]: print("This still works as pasted")
1855 1855
1856 1856
1857 1857 Previously, this was not the case for the Vi-mode prompts::
1858 1858
1859 1859 In [1]: [ins] In [13]: 2 * 2 == 4
1860 1860 ...: Out[13]: True
1861 1861 ...:
1862 1862 File "<ipython-input-1-727bb88eaf33>", line 1
1863 1863 [ins] In [13]: 2 * 2 == 4
1864 1864 ^
1865 1865 SyntaxError: invalid syntax
1866 1866
1867 1867 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
1868 1868 skipped just as the normal ``In`` would be.
1869 1869
1870 1870 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
1871 1871 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
1872 1872
1873 1873 Empty History Ranges
1874 1874 ~~~~~~~~~~~~~~~~~~~~
1875 1875
1876 1876 A number of magics that take history ranges can now be used with an empty
1877 1877 range. These magics are:
1878 1878
1879 1879 * ``%save``
1880 1880 * ``%load``
1881 1881 * ``%pastebin``
1882 1882 * ``%pycat``
1883 1883
1884 1884 Using them this way will make them take the history of the current session up
1885 1885 to the point of the magic call (such that the magic itself will not be
1886 1886 included).
1887 1887
1888 1888 Therefore it is now possible to save the whole history to a file using
1889 1889 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
1890 1890 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
1891 1891 ``%pastebin``, or view the whole thing syntax-highlighted with a single
1892 1892 ``%pycat``.
1893 1893
1894 1894
1895 1895 Windows timing implementation: Switch to process_time
1896 1896 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1897 1897 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
1898 1898 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
1899 1899 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
1900 1900
1901 1901 Miscellaneous
1902 1902 ~~~~~~~~~~~~~
1903 1903 - Non-text formatters are not disabled in the terminal, which should simplify
1904 1904 writing extensions displaying images or other mimetypes in supporting terminals.
1905 1905 :ghpull:`12315`
1906 1906 - It is now possible to automatically insert matching brackets in Terminal IPython using the
1907 1907 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
1908 1908 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
1909 1909 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
1910 1910 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
1911 1911 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
1912 1912 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
1913 1913 - The debugger now has a persistent history, which should make it less
1914 1914 annoying to retype commands :ghpull:`13246`
1915 1915 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
1916 1916 now warn users if they use one of those commands. :ghpull:`12954`
1917 1917 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
1918 1918
1919 1919 Re-added support for XDG config directories
1920 1920 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1921 1921
1922 1922 XDG support through the years comes and goes. There is a tension between having
1923 1923 an identical location for configuration in all platforms versus having simple instructions.
1924 1924 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
1925 1925 config files back into ``~/.ipython``. That migration code has now been removed.
1926 1926 IPython now checks the XDG locations, so if you _manually_ move your config
1927 1927 files to your preferred location, IPython will not move them back.
1928 1928
1929 1929
1930 1930 Preparing for Python 3.10
1931 1931 -------------------------
1932 1932
1933 1933 To prepare for Python 3.10, we have started working on removing reliance and
1934 1934 any dependency that is not compatible with Python 3.10. This includes migrating our
1935 1935 test suite to pytest and starting to remove nose. This also means that the
1936 1936 ``iptest`` command is now gone and all testing is via pytest.
1937 1937
1938 1938 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
1939 1939 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
1940 1940 who did a fantastic job at updating our code base, migrating to pytest, pushing
1941 1941 our coverage, and fixing a large number of bugs. I highly recommend contacting
1942 1942 them if you need help with C++ and Python projects.
1943 1943
1944 1944 You can find all relevant issues and PRs with `the SDG 2021 tag <https://github.com/ipython/ipython/issues?q=label%3A%22Numfocus+SDG+2021%22+>`__
1945 1945
1946 1946 Removing support for older Python versions
1947 1947 ------------------------------------------
1948 1948
1949 1949
1950 1950 We are removing support for Python up through 3.7, allowing internal code to use the more
1951 1951 efficient ``pathlib`` and to make better use of type annotations.
1952 1952
1953 1953 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
1954 1954 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
1955 1955
1956 1956
1957 1957 We had about 34 PRs only to update some logic to update some functions from managing strings to
1958 1958 using Pathlib.
1959 1959
1960 1960 The completer has also seen significant updates and now makes use of newer Jedi APIs,
1961 1961 offering faster and more reliable tab completion.
1962 1962
1963 1963 Misc Statistics
1964 1964 ---------------
1965 1965
1966 1966 Here are some numbers::
1967 1967
1968 1968 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
1969 1969 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
1970 1970
1971 1971 $ git diff --stat 7.x...master | tail -1
1972 1972 340 files changed, 13399 insertions(+), 12421 deletions(-)
1973 1973
1974 1974 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
1975 1975 maintainers pushing buttons).::
1976 1976
1977 1977 $ git shortlog -s --no-merges 7.x...master | sort -nr
1978 1978 535 Matthias Bussonnier
1979 1979 86 Nikita Kniazev
1980 1980 69 Blazej Michalik
1981 1981 49 Samuel Gaist
1982 1982 27 Itamar Turner-Trauring
1983 1983 18 Spas Kalaydzhisyki
1984 1984 17 Thomas Kluyver
1985 1985 17 Quentin Peter
1986 1986 17 James Morris
1987 1987 17 Artur Svistunov
1988 1988 15 Bart Skowron
1989 1989 14 Alex Hall
1990 1990 13 rushabh-v
1991 1991 13 Terry Davis
1992 1992 13 Benjamin Ragan-Kelley
1993 1993 8 martinRenou
1994 1994 8 farisachugthai
1995 1995 7 dswij
1996 1996 7 Gal B
1997 1997 7 Corentin Cadiou
1998 1998 6 yuji96
1999 1999 6 Martin Skarzynski
2000 2000 6 Justin Palmer
2001 2001 6 Daniel Goldfarb
2002 2002 6 Ben Greiner
2003 2003 5 Sammy Al Hashemi
2004 2004 5 Paul Ivanov
2005 2005 5 Inception95
2006 2006 5 Eyenpi
2007 2007 5 Douglas Blank
2008 2008 5 Coco Mishra
2009 2009 5 Bibo Hao
2010 2010 5 AndrΓ© A. Gomes
2011 2011 5 Ahmed Fasih
2012 2012 4 takuya fujiwara
2013 2013 4 palewire
2014 2014 4 Thomas A Caswell
2015 2015 4 Talley Lambert
2016 2016 4 Scott Sanderson
2017 2017 4 Ram Rachum
2018 2018 4 Nick Muoh
2019 2019 4 Nathan Goldbaum
2020 2020 4 Mithil Poojary
2021 2021 4 Michael T
2022 2022 4 Jakub Klus
2023 2023 4 Ian Castleden
2024 2024 4 Eli Rykoff
2025 2025 4 Ashwin Vishnu
2026 2026 3 谭九鼎
2027 2027 3 sleeping
2028 2028 3 Sylvain Corlay
2029 2029 3 Peter Corke
2030 2030 3 Paul Bissex
2031 2031 3 Matthew Feickert
2032 2032 3 Fernando Perez
2033 2033 3 Eric Wieser
2034 2034 3 Daniel Mietchen
2035 2035 3 Aditya Sathe
2036 2036 3 007vedant
2037 2037 2 rchiodo
2038 2038 2 nicolaslazo
2039 2039 2 luttik
2040 2040 2 gorogoroumaru
2041 2041 2 foobarbyte
2042 2042 2 bar-hen
2043 2043 2 Theo Ouzhinski
2044 2044 2 Strawkage
2045 2045 2 Samreen Zarroug
2046 2046 2 Pete Blois
2047 2047 2 Meysam Azad
2048 2048 2 Matthieu Ancellin
2049 2049 2 Mark Schmitz
2050 2050 2 Maor Kleinberger
2051 2051 2 MRCWirtz
2052 2052 2 Lumir Balhar
2053 2053 2 Julien Rabinow
2054 2054 2 Juan Luis Cano RodrΓ­guez
2055 2055 2 Joyce Er
2056 2056 2 Jakub
2057 2057 2 Faris A Chugthai
2058 2058 2 Ethan Madden
2059 2059 2 Dimitri Papadopoulos
2060 2060 2 Diego Fernandez
2061 2061 2 Daniel Shimon
2062 2062 2 Coco Bennett
2063 2063 2 Carlos Cordoba
2064 2064 2 Boyuan Liu
2065 2065 2 BaoGiang HoangVu
2066 2066 2 Augusto
2067 2067 2 Arthur Svistunov
2068 2068 2 Arthur Moreira
2069 2069 2 Ali Nabipour
2070 2070 2 Adam Hackbarth
2071 2071 1 richard
2072 2072 1 linar-jether
2073 2073 1 lbennett
2074 2074 1 juacrumar
2075 2075 1 gpotter2
2076 2076 1 digitalvirtuoso
2077 2077 1 dalthviz
2078 2078 1 Yonatan Goldschmidt
2079 2079 1 Tomasz KΕ‚oczko
2080 2080 1 Tobias Bengfort
2081 2081 1 Timur Kushukov
2082 2082 1 Thomas
2083 2083 1 Snir Broshi
2084 2084 1 Shao Yang Hong
2085 2085 1 Sanjana-03
2086 2086 1 Romulo Filho
2087 2087 1 Rodolfo Carvalho
2088 2088 1 Richard Shadrach
2089 2089 1 Reilly Tucker Siemens
2090 2090 1 Rakessh Roshan
2091 2091 1 Piers Titus van der Torren
2092 2092 1 PhanatosZou
2093 2093 1 Pavel Safronov
2094 2094 1 Paulo S. Costa
2095 2095 1 Paul McCarthy
2096 2096 1 NotWearingPants
2097 2097 1 Naelson Douglas
2098 2098 1 Michael Tiemann
2099 2099 1 Matt Wozniski
2100 2100 1 Markus Wageringel
2101 2101 1 Marcus Wirtz
2102 2102 1 Marcio Mazza
2103 2103 1 LumΓ­r 'Frenzy' Balhar
2104 2104 1 Lightyagami1
2105 2105 1 Leon Anavi
2106 2106 1 LeafyLi
2107 2107 1 L0uisJ0shua
2108 2108 1 Kyle Cutler
2109 2109 1 Krzysztof Cybulski
2110 2110 1 Kevin Kirsche
2111 2111 1 KIU Shueng Chuan
2112 2112 1 Jonathan Slenders
2113 2113 1 Jay Qi
2114 2114 1 Jake VanderPlas
2115 2115 1 Iwan Briquemont
2116 2116 1 Hussaina Begum Nandyala
2117 2117 1 Gordon Ball
2118 2118 1 Gabriel Simonetto
2119 2119 1 Frank Tobia
2120 2120 1 Erik
2121 2121 1 Elliott Sales de Andrade
2122 2122 1 Daniel Hahler
2123 2123 1 Dan Green-Leipciger
2124 2124 1 Dan Green
2125 2125 1 Damian Yurzola
2126 2126 1 Coon, Ethan T
2127 2127 1 Carol Willing
2128 2128 1 Brian Lee
2129 2129 1 Brendan Gerrity
2130 2130 1 Blake Griffin
2131 2131 1 Bastian Ebeling
2132 2132 1 Bartosz Telenczuk
2133 2133 1 Ankitsingh6299
2134 2134 1 Andrew Port
2135 2135 1 Andrew J. Hesford
2136 2136 1 Albert Zhang
2137 2137 1 Adam Johnson
2138 2138
2139 2139 This does not, of course, represent non-code contributions, for which we are also grateful.
2140 2140
2141 2141
2142 2142 API Changes using Frappuccino
2143 2143 -----------------------------
2144 2144
2145 2145 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
2146 2146
2147 2147
2148 2148 The following items are new in IPython 8.0 ::
2149 2149
2150 2150 + IPython.core.async_helpers.get_asyncio_loop()
2151 2151 + IPython.core.completer.Dict
2152 2152 + IPython.core.completer.Pattern
2153 2153 + IPython.core.completer.Sequence
2154 2154 + IPython.core.completer.__skip_doctest__
2155 2155 + IPython.core.debugger.Pdb.precmd(self, line)
2156 2156 + IPython.core.debugger.__skip_doctest__
2157 2157 + IPython.core.display.__getattr__(name)
2158 2158 + IPython.core.display.warn
2159 2159 + IPython.core.display_functions
2160 2160 + IPython.core.display_functions.DisplayHandle
2161 2161 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
2162 2162 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
2163 2163 + IPython.core.display_functions.__all__
2164 2164 + IPython.core.display_functions.__builtins__
2165 2165 + IPython.core.display_functions.__cached__
2166 2166 + IPython.core.display_functions.__doc__
2167 2167 + IPython.core.display_functions.__file__
2168 2168 + IPython.core.display_functions.__loader__
2169 2169 + IPython.core.display_functions.__name__
2170 2170 + IPython.core.display_functions.__package__
2171 2171 + IPython.core.display_functions.__spec__
2172 2172 + IPython.core.display_functions.b2a_hex
2173 2173 + IPython.core.display_functions.clear_output(wait=False)
2174 2174 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
2175 2175 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
2176 2176 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
2177 2177 + IPython.core.extensions.BUILTINS_EXTS
2178 2178 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
2179 2179 + IPython.core.interactiveshell.Callable
2180 2180 + IPython.core.interactiveshell.__annotations__
2181 2181 + IPython.core.ultratb.List
2182 2182 + IPython.core.ultratb.Tuple
2183 2183 + IPython.lib.pretty.CallExpression
2184 2184 + IPython.lib.pretty.CallExpression.factory(name)
2185 2185 + IPython.lib.pretty.RawStringLiteral
2186 2186 + IPython.lib.pretty.RawText
2187 2187 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
2188 2188 + IPython.terminal.embed.Set
2189 2189
2190 2190 The following items have been removed (or moved to superclass)::
2191 2191
2192 2192 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
2193 2193 - IPython.core.completer.Sentinel
2194 2194 - IPython.core.completer.skip_doctest
2195 2195 - IPython.core.debugger.Tracer
2196 2196 - IPython.core.display.DisplayHandle
2197 2197 - IPython.core.display.DisplayHandle.display
2198 2198 - IPython.core.display.DisplayHandle.update
2199 2199 - IPython.core.display.b2a_hex
2200 2200 - IPython.core.display.clear_output
2201 2201 - IPython.core.display.display
2202 2202 - IPython.core.display.publish_display_data
2203 2203 - IPython.core.display.update_display
2204 2204 - IPython.core.excolors.Deprec
2205 2205 - IPython.core.excolors.ExceptionColors
2206 2206 - IPython.core.history.warn
2207 2207 - IPython.core.hooks.late_startup_hook
2208 2208 - IPython.core.hooks.pre_run_code_hook
2209 2209 - IPython.core.hooks.shutdown_hook
2210 2210 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
2211 2211 - IPython.core.interactiveshell.InteractiveShell.init_readline
2212 2212 - IPython.core.interactiveshell.InteractiveShell.write
2213 2213 - IPython.core.interactiveshell.InteractiveShell.write_err
2214 2214 - IPython.core.interactiveshell.get_default_colors
2215 2215 - IPython.core.interactiveshell.removed_co_newlocals
2216 2216 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
2217 2217 - IPython.core.magics.script.PIPE
2218 2218 - IPython.core.prefilter.PrefilterManager.init_transformers
2219 2219 - IPython.core.release.classifiers
2220 2220 - IPython.core.release.description
2221 2221 - IPython.core.release.keywords
2222 2222 - IPython.core.release.long_description
2223 2223 - IPython.core.release.name
2224 2224 - IPython.core.release.platforms
2225 2225 - IPython.core.release.url
2226 2226 - IPython.core.ultratb.VerboseTB.format_records
2227 2227 - IPython.core.ultratb.find_recursion
2228 2228 - IPython.core.ultratb.findsource
2229 2229 - IPython.core.ultratb.fix_frame_records_filenames
2230 2230 - IPython.core.ultratb.inspect_error
2231 2231 - IPython.core.ultratb.is_recursion_error
2232 2232 - IPython.core.ultratb.with_patch_inspect
2233 2233 - IPython.external.__all__
2234 2234 - IPython.external.__builtins__
2235 2235 - IPython.external.__cached__
2236 2236 - IPython.external.__doc__
2237 2237 - IPython.external.__file__
2238 2238 - IPython.external.__loader__
2239 2239 - IPython.external.__name__
2240 2240 - IPython.external.__package__
2241 2241 - IPython.external.__path__
2242 2242 - IPython.external.__spec__
2243 2243 - IPython.kernel.KernelConnectionInfo
2244 2244 - IPython.kernel.__builtins__
2245 2245 - IPython.kernel.__cached__
2246 2246 - IPython.kernel.__warningregistry__
2247 2247 - IPython.kernel.pkg
2248 2248 - IPython.kernel.protocol_version
2249 2249 - IPython.kernel.protocol_version_info
2250 2250 - IPython.kernel.src
2251 2251 - IPython.kernel.version_info
2252 2252 - IPython.kernel.warn
2253 2253 - IPython.lib.backgroundjobs
2254 2254 - IPython.lib.backgroundjobs.BackgroundJobBase
2255 2255 - IPython.lib.backgroundjobs.BackgroundJobBase.run
2256 2256 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
2257 2257 - IPython.lib.backgroundjobs.BackgroundJobExpr
2258 2258 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
2259 2259 - IPython.lib.backgroundjobs.BackgroundJobFunc
2260 2260 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
2261 2261 - IPython.lib.backgroundjobs.BackgroundJobManager
2262 2262 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
2263 2263 - IPython.lib.backgroundjobs.BackgroundJobManager.new
2264 2264 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
2265 2265 - IPython.lib.backgroundjobs.BackgroundJobManager.result
2266 2266 - IPython.lib.backgroundjobs.BackgroundJobManager.status
2267 2267 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
2268 2268 - IPython.lib.backgroundjobs.__builtins__
2269 2269 - IPython.lib.backgroundjobs.__cached__
2270 2270 - IPython.lib.backgroundjobs.__doc__
2271 2271 - IPython.lib.backgroundjobs.__file__
2272 2272 - IPython.lib.backgroundjobs.__loader__
2273 2273 - IPython.lib.backgroundjobs.__name__
2274 2274 - IPython.lib.backgroundjobs.__package__
2275 2275 - IPython.lib.backgroundjobs.__spec__
2276 2276 - IPython.lib.kernel.__builtins__
2277 2277 - IPython.lib.kernel.__cached__
2278 2278 - IPython.lib.kernel.__doc__
2279 2279 - IPython.lib.kernel.__file__
2280 2280 - IPython.lib.kernel.__loader__
2281 2281 - IPython.lib.kernel.__name__
2282 2282 - IPython.lib.kernel.__package__
2283 2283 - IPython.lib.kernel.__spec__
2284 2284 - IPython.lib.kernel.__warningregistry__
2285 2285 - IPython.paths.fs_encoding
2286 2286 - IPython.terminal.debugger.DEFAULT_BUFFER
2287 2287 - IPython.terminal.debugger.cursor_in_leading_ws
2288 2288 - IPython.terminal.debugger.emacs_insert_mode
2289 2289 - IPython.terminal.debugger.has_selection
2290 2290 - IPython.terminal.debugger.vi_insert_mode
2291 2291 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
2292 2292 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
2293 2293 - IPython.testing.test
2294 2294 - IPython.utils.contexts.NoOpContext
2295 2295 - IPython.utils.io.IOStream
2296 2296 - IPython.utils.io.IOStream.close
2297 2297 - IPython.utils.io.IOStream.write
2298 2298 - IPython.utils.io.IOStream.writelines
2299 2299 - IPython.utils.io.__warningregistry__
2300 2300 - IPython.utils.io.atomic_writing
2301 2301 - IPython.utils.io.stderr
2302 2302 - IPython.utils.io.stdin
2303 2303 - IPython.utils.io.stdout
2304 2304 - IPython.utils.io.unicode_std_stream
2305 2305 - IPython.utils.path.get_ipython_cache_dir
2306 2306 - IPython.utils.path.get_ipython_dir
2307 2307 - IPython.utils.path.get_ipython_module_path
2308 2308 - IPython.utils.path.get_ipython_package_dir
2309 2309 - IPython.utils.path.locate_profile
2310 2310 - IPython.utils.path.unquote_filename
2311 2311 - IPython.utils.py3compat.PY2
2312 2312 - IPython.utils.py3compat.PY3
2313 2313 - IPython.utils.py3compat.buffer_to_bytes
2314 2314 - IPython.utils.py3compat.builtin_mod_name
2315 2315 - IPython.utils.py3compat.cast_bytes
2316 2316 - IPython.utils.py3compat.getcwd
2317 2317 - IPython.utils.py3compat.isidentifier
2318 2318 - IPython.utils.py3compat.u_format
2319 2319
2320 2320 The following signatures differ between 7.x and 8.0::
2321 2321
2322 2322 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
2323 2323 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
2324 2324
2325 2325 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
2326 2326 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
2327 2327
2328 2328 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
2329 2329 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
2330 2330
2331 2331 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
2332 2332 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
2333 2333
2334 2334 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
2335 2335 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
2336 2336
2337 2337 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
2338 2338 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
2339 2339
2340 2340 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
2341 2341 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
2342 2342
2343 2343 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
2344 2344 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
2345 2345
2346 2346 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
2347 2347 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
2348 2348
2349 2349 - IPython.terminal.embed.embed(**kwargs)
2350 2350 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
2351 2351
2352 2352 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
2353 2353 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
2354 2354
2355 2355 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
2356 2356 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
2357 2357
2358 2358 - IPython.utils.path.get_py_filename(name, force_win32='None')
2359 2359 + IPython.utils.path.get_py_filename(name)
2360 2360
2361 2361 The following are new attributes (that might be inherited)::
2362 2362
2363 2363 + IPython.core.completer.IPCompleter.unicode_names
2364 2364 + IPython.core.debugger.InterruptiblePdb.precmd
2365 2365 + IPython.core.debugger.Pdb.precmd
2366 2366 + IPython.core.ultratb.AutoFormattedTB.has_colors
2367 2367 + IPython.core.ultratb.ColorTB.has_colors
2368 2368 + IPython.core.ultratb.FormattedTB.has_colors
2369 2369 + IPython.core.ultratb.ListTB.has_colors
2370 2370 + IPython.core.ultratb.SyntaxTB.has_colors
2371 2371 + IPython.core.ultratb.TBTools.has_colors
2372 2372 + IPython.core.ultratb.VerboseTB.has_colors
2373 2373 + IPython.terminal.debugger.TerminalPdb.do_interact
2374 2374 + IPython.terminal.debugger.TerminalPdb.precmd
2375 2375
2376 2376 The following attribute/methods have been removed::
2377 2377
2378 2378 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
2379 2379 - IPython.core.ultratb.AutoFormattedTB.format_records
2380 2380 - IPython.core.ultratb.ColorTB.format_records
2381 2381 - IPython.core.ultratb.FormattedTB.format_records
2382 2382 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
2383 2383 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
2384 2384 - IPython.terminal.embed.InteractiveShellEmbed.write
2385 2385 - IPython.terminal.embed.InteractiveShellEmbed.write_err
2386 2386 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
2387 2387 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
2388 2388 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
2389 2389 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
2390 2390 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
2391 2391 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
2392 2392 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
2393 2393 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
2394 2394
2395 2395 ------
2396 2396
2397 .. [1] If this make you incomfortable feel free to not use IPython 8.23.
2397 .. [1] If this make you uncomfortable feel free to not use IPython 8.23.
General Comments 0
You need to be logged in to leave comments. Login now