##// END OF EJS Templates
fixup docs
Matthias Bussonnier -
Show More
@@ -1,34 +1,33 b''
1 1 =====================
2 2 Development version
3 3 =====================
4 4
5 5 This document describes in-flight development work.
6 6
7 7 .. warning::
8 8
9 9 Please do not edit this file by hand (doing so will likely cause merge
10 10 conflicts for other Pull Requests). Instead, create a new file in the
11 11 `docs/source/whatsnew/pr` folder
12 12
13 13
14 14 Released .... ...., 2019
15 15
16 16
17 17 Need to be updated:
18 18
19 19 .. toctree::
20 20 :maxdepth: 2
21 21 :glob:
22 22
23 23 pr/*
24 24
25 25
26 26
27 27
28
29 28 .. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT.
30 29
31 30 Backwards incompatible changes
32 31 ------------------------------
33 32
34 33 .. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT.
@@ -1,1450 +1,1499 b''
1 1 ============
2 2 8.x Series
3 3 ============
4 4
5 5 .. _version 8.11.0:
6 6
7 7 IPython 8.11
8 8 ------------
9 9
10 10 Back on almost regular monthly schedule for IPython with end-of-month
11 11 really-late-Friday release to make sure some bugs are properly fixed.
12 12 Small addition of with a few new features, bugfix and UX improvements.
13 13
14 14 This is a non-exhaustive list, but among other you will find:
15 15
16 16 Faster Traceback Highlighting
17 17 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 18
19 19 Resurrection of pre-IPython-8 traceback highlighting code.
20 20
21 21 Really long and complicated files were slow to highlight in traceback with
22 22 IPython 8 despite upstream improvement that make many case better. Therefore
23 23 starting with IPython 8.11 when one of the highlighted file is more than 10 000
24 24 line long by default, we'll fallback to a faster path that does not have all the
25 25 features of highlighting failing AST nodes.
26 26
27 27 This can be configures by setting the value of
28 28 ``IPython.code.ultratb.FAST_THRESHOLD`` to an arbitrary low or large value.
29 29
30
31 Autoreload verbosity
32 ~~~~~~~~~~~~~~~~~~~~
33
34 We introduce more descriptive names for the ``%autoreload`` parameter:
35
36 - ``%autoreload now`` (also ``%autoreload``) - perform autoreload immediately.
37 - ``%autoreload off`` (also ``%autoreload 0``) - turn off autoreload.
38 - ``%autoreload explicit`` (also ``%autoreload 1``) - turn on autoreload only for modules
39 whitelisted by ``%aimport`` statements.
40 - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those
41 blacklisted by ``%aimport`` statements.
42 - ``%autoreload complete`` (also ``%autoreload 3``) - all the fatures of ``all`` but also adding new
43 objects from the imported modules (see
44 IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects).
45
46 The original designations (e.g. "2") still work, and these new ones are case-insensitive.
47
48 Additionally, the option ``--print`` or ``-p`` can be added to the line to print the names of
49 modules being reloaded. Similarly, ``--log`` or ``-l`` will output the names to the logger at INFO
50 level. Both can be used simultaneously.
51
52 The parsing logic for ``%aimport`` is now improved such that modules can be whitelisted and
53 blacklisted in the same line, e.g. it's now possible to call ``%aimport os, -math`` to include
54 ``os`` for ``%autoreload explicit`` and exclude ``math`` for modes ``all`` and ``complete``.
55
56 Terminal shortcuts customization
57 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58
59 Previously modifying shortcuts was only possible by hooking into startup files
60 and practically limited to adding new shortcuts or removing all shortcuts bound
61 to a specific key. This release enables users to override existing terminal
62 shortcuts, disable them or add new keybindings.
63
64 For example, to set the :kbd:`right` to accept a single character of auto-suggestion
65 you could use::
66
67 my_shortcuts = [
68 {
69 "command": "IPython:auto_suggest.accept_character",
70 "new_keys": ["right"]
71 }
72 ]
73 %config TerminalInteractiveShell.shortcuts = my_shortcuts
74
75 You can learn more in :std:configtrait:`TerminalInteractiveShell.shortcuts`
76 configuration reference.
77
30 78 Miscellaneous
31 79 ~~~~~~~~~~~~~
32 80
33 81 - ``%gui`` should now support PySide6. :ghpull:`13864`
34 - Cli shortcuts can now be configured :ghpull:`13928`
82 - Cli shortcuts can now be configured :ghpull:`13928`, see above.
35 83 (note that there might be an issue with prompt_toolkit 3.0.37 and shortcut configuration).
84
36 85 - Capture output should now respect ``;`` semicolon to suppress output.
37 86 :ghpull:`13940`
38 87 - Base64 encoded images (in jupyter frontend), will not have trailing newlines.
39 88 :ghpull:`13941`
40 89
41 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
90 As usual you can find the full list of PRs on GitHub under `the 8.11 milestone
42 91 <https://github.com/ipython/ipython/milestone/113?closed=1>`__.
43 92
44 93 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
45 94 work on IPython and related libraries.
46 95
47 96 .. _version 8.10.0:
48 97
49 98 IPython 8.10
50 99 ------------
51 100
52 101 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
53 102 This is a really low severity CVE that you most likely are not affected by unless:
54 103
55 104 - You are on windows.
56 105 - You have a custom build of Python without ``_ctypes``
57 106 - You cd or start IPython or Jupyter in untrusted directory which names may be
58 107 valid shell commands.
59 108
60 109 You can read more on `the advisory
61 110 <https://github.com/ipython/ipython/security/advisories/GHSA-29gw-9793-fvw7>`__.
62 111
63 112 In addition to fixing this CVE we also fix a couple of outstanding bugs and issues.
64 113
65 114 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
66 115 <https://github.com/ipython/ipython/milestone/112?closed=1>`__.
67 116
68 117 In Particular:
69 118
70 119 - bump minimum numpy to `>=1.21` version following NEP29. :ghpull:`13930`
71 120 - fix for compatibility with MyPy 1.0. :ghpull:`13933`
72 121 - fix nbgrader stalling when IPython's ``showtraceback`` function is
73 122 monkeypatched. :ghpull:`13934`
74 123
75 124
76 125
77 126 As this release also contains those minimal changes in addition to fixing the
78 127 CVE I decided to bump the minor version anyway.
79 128
80 129 This will not affect the normal release schedule, so IPython 8.11 is due in
81 130 about 2 weeks.
82 131
83 132 .. _version 8.9.0:
84 133
85 134 IPython 8.9.0
86 135 -------------
87 136
88 137 Second release of IPython in 2023, last Friday of the month, we are back on
89 138 track. This is a small release with a few bug-fixes, and improvements, mostly
90 139 with respect to terminal shortcuts.
91 140
92 141
93 142 The biggest improvement for 8.9 is a drastic amelioration of the
94 143 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
95 144 active contributor `@krassowski <https://github.com/krassowski>`.
96 145
97 146 - ``right`` accepts a single character from suggestion
98 147 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
99 148 precedence and need to be disabled to make this work)
100 149 - ``backspace`` deletes a character and resumes hinting autosuggestions
101 150 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
102 151 - ``backspace`` deletes a character and resumes hinting autosuggestions
103 152 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
104 153 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
105 154
106 155 This is best described by the Gif posted by `@krassowski
107 156 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
108 157
109 158 .. image:: ../_images/autosuggest.gif
110 159
111 160 Please report any feedback in order for us to improve the user experience.
112 161 In particular we are also working on making the shortcuts configurable.
113 162
114 163 If you are interested in better terminal shortcuts, I also invite you to
115 164 participate in issue `13879
116 165 <https://github.com/ipython/ipython/issues/13879>`__.
117 166
118 167
119 168 As we follow `NEP29
120 169 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
121 170 IPython will officially stop supporting numpy 1.20, and will stop supporting
122 171 Python 3.8 after April release.
123 172
124 173 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
125 174 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
126 175
127 176
128 177 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
129 178 work on IPython and related libraries.
130 179
131 180 .. _version 8.8.0:
132 181
133 182 IPython 8.8.0
134 183 -------------
135 184
136 185 First release of IPython in 2023 as there was no release at the end of
137 186 December.
138 187
139 188 This is an unusually big release (relatively speaking) with more than 15 Pull
140 189 Requests merged.
141 190
142 191 Of particular interest are:
143 192
144 193 - :ghpull:`13852` that replaces the greedy completer and improves
145 194 completion, in particular for dictionary keys.
146 195 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
147 196 bundled in wheels.
148 197 - :ghpull:`13869` that implements tab completions for IPython options in the
149 198 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
150 199 believe this also needs a recent version of Traitlets.
151 200 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
152 201 configurable.
153 202 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
154 203 entry points that would be included in the wheel would be the one of the
155 204 Python version that was used to build the ``whl`` file.
156 205
157 206 In no particular order, the rest of the changes update the test suite to be
158 207 compatible with Pygments 2.14, various docfixes, testing on more recent python
159 208 versions and various updates.
160 209
161 210 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
162 211 <https://github.com/ipython/ipython/milestone/110>`__.
163 212
164 213 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
165 214 merging contributions.
166 215
167 216 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
168 217 work on IPython and related libraries.
169 218
170 219 .. _version 8.7.0:
171 220
172 221 IPython 8.7.0
173 222 -------------
174 223
175 224
176 225 Small release of IPython with a couple of bug fixes and new features for this
177 226 month. Next month is the end of year, it is unclear if there will be a release
178 227 close to the new year's eve, or if the next release will be at the end of January.
179 228
180 229 Here are a few of the relevant fixes,
181 230 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
182 231 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
183 232
184 233
185 234 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
186 235 - IPython shipped with the ``py.typed`` marker now, and we are progressively
187 236 adding more types. :ghpull:`13831`
188 237 - :ghpull:`13817` add configuration of code blacks formatting.
189 238
190 239
191 240 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
192 241 work on IPython and related libraries.
193 242
194 243
195 244 .. _version 8.6.0:
196 245
197 246 IPython 8.6.0
198 247 -------------
199 248
200 249 Back to a more regular release schedule (at least I try), as Friday is
201 250 already over by more than 24h hours. This is a slightly bigger release with a
202 251 few new features that contain no less than 25 PRs.
203 252
204 253 We'll notably found a couple of non negligible changes:
205 254
206 255 The ``install_ext`` and related functions have been removed after being
207 256 deprecated for years. You can use pip to install extensions. ``pip`` did not
208 257 exist when ``install_ext`` was introduced. You can still load local extensions
209 258 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
210 259
211 260 IPython now has extra entry points that use the major *and minor* version of
212 261 python. For some of you this means that you can do a quick ``ipython3.10`` to
213 262 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
214 263 as your main Python. :ghpull:`13743`
215 264
216 265 The completer matcher API has been improved. See :ghpull:`13745`. This should
217 266 improve the type inference and improve dict keys completions in many use case.
218 267 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
219 268 it.
220 269
221 270 The color of error nodes in tracebacks can now be customized. See
222 271 :ghpull:`13756`. This is a private attribute until someone finds the time to
223 272 properly add a configuration option. Note that with Python 3.11 that also shows
224 273 the relevant nodes in traceback, it would be good to leverage this information
225 274 (plus the "did you mean" info added on attribute errors). But that's likely work
226 275 I won't have time to do before long, so contributions welcome.
227 276
228 277 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
229 278
230 279
231 280 The ``open()`` function present in the user namespace by default will now refuse
232 281 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
233 282 This mostly occurs in teaching context when incorrect values get passed around.
234 283
235 284
236 285 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
237 286 objects inside arrays. That is to say, the following now works::
238 287
239 288
240 289 >>> def my_func(*arg, **kwargs):pass
241 290 >>> container = [my_func]
242 291 >>> container[0]?
243 292
244 293
245 294 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
246 295 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
247 296 group for the request and sponsoring the work.
248 297
249 298
250 299 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
251 300 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
252 301
253 302 Thanks to all hacktoberfest contributors, please contribute to
254 303 `closember.org <https://closember.org/>`__.
255 304
256 305 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
257 306 work on IPython and related libraries.
258 307
259 308 .. _version 8.5.0:
260 309
261 310 IPython 8.5.0
262 311 -------------
263 312
264 313 First release since a couple of month due to various reasons and timing preventing
265 314 me for sticking to the usual monthly release the last Friday of each month. This
266 315 is of non negligible size as it has more than two dozen PRs with various fixes
267 316 an bug fixes.
268 317
269 318 Many thanks to everybody who contributed PRs for your patience in review and
270 319 merges.
271 320
272 321 Here is a non-exhaustive list of changes that have been implemented for IPython
273 322 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
274 323 8.5 milestone
275 324 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
276 325
277 326 - Added a shortcut for accepting auto suggestion. The End key shortcut for
278 327 accepting auto-suggestion This binding works in Vi mode too, provided
279 328 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
280 329 ``True`` :ghpull:`13566`.
281 330
282 331 - No popup in window for latex generation when generating latex (e.g. via
283 332 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
284 333
285 334 - Fixed error raised when attempting to tab-complete an input string with
286 335 consecutive periods or forward slashes (such as "file:///var/log/...").
287 336 :ghpull:`13675`
288 337
289 338 - Relative filenames in Latex rendering :
290 339 The `latex_to_png_dvipng` command internally generates input and output file
291 340 arguments to `latex` and `dvipis`. These arguments are now generated as
292 341 relative files to the current working directory instead of absolute file
293 342 paths. This solves a problem where the current working directory contains
294 343 characters that are not handled properly by `latex` and `dvips`. There are
295 344 no changes to the user API. :ghpull:`13680`
296 345
297 346 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
298 347 restructured text documents executed with the ipython-sphinx extension
299 348 skipped any lines of code containing python decorators. :ghpull:`13612`
300 349
301 350 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
302 351 - Fix paste magic on wayland. :ghpull:`13671`
303 352 - show maxlen in deque's repr. :ghpull:`13648`
304 353
305 354 Restore line numbers for Input
306 355 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
307 356
308 357 Line number information in tracebacks from input are restored.
309 358 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
310 359
311 360 So, instead of::
312 361
313 362 ---------------------------------------------------------------------------
314 363 ZeroDivisionError Traceback (most recent call last)
315 364 Input In [3], in <cell line: 1>()
316 365 ----> 1 myfunc(2)
317 366
318 367 Input In [2], in myfunc(z)
319 368 1 def myfunc(z):
320 369 ----> 2 foo.boo(z-1)
321 370
322 371 File ~/code/python/ipython/foo.py:3, in boo(x)
323 372 2 def boo(x):
324 373 ----> 3 return 1/(1-x)
325 374
326 375 ZeroDivisionError: division by zero
327 376
328 377 The error traceback now looks like::
329 378
330 379 ---------------------------------------------------------------------------
331 380 ZeroDivisionError Traceback (most recent call last)
332 381 Cell In [3], line 1
333 382 ----> 1 myfunc(2)
334 383
335 384 Cell In [2], line 2, in myfunc(z)
336 385 1 def myfunc(z):
337 386 ----> 2 foo.boo(z-1)
338 387
339 388 File ~/code/python/ipython/foo.py:3, in boo(x)
340 389 2 def boo(x):
341 390 ----> 3 return 1/(1-x)
342 391
343 392 ZeroDivisionError: division by zero
344 393
345 394 or, with xmode=Plain::
346 395
347 396 Traceback (most recent call last):
348 397 Cell In [12], line 1
349 398 myfunc(2)
350 399 Cell In [6], line 2 in myfunc
351 400 foo.boo(z-1)
352 401 File ~/code/python/ipython/foo.py:3 in boo
353 402 return 1/(1-x)
354 403 ZeroDivisionError: division by zero
355 404
356 405 :ghpull:`13560`
357 406
358 407 New setting to silence warning if working inside a virtual environment
359 408 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
360 409
361 410 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
362 411
363 412 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
364 413
365 414 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
366 415
367 416 :ghpull:`13706`
368 417
369 418 -------
370 419
371 420 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
372 421 work on IPython and related libraries.
373 422
374 423
375 424 .. _version 8.4.0:
376 425
377 426 IPython 8.4.0
378 427 -------------
379 428
380 429 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
381 430 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
382 431
383 432 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
384 433 work on IPython and related libraries.
385 434
386 435
387 436 .. _version 8.3.0:
388 437
389 438 IPython 8.3.0
390 439 -------------
391 440
392 441 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
393 442 ``set_next_input`` as most frontend allow proper multiline editing and it was
394 443 causing issues for many users of multi-cell frontends. This has been backported to 7.33
395 444
396 445
397 446 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
398 447 the info object when frontend provides it. This has been backported to 7.33
399 448
400 449 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
401 450 auto-suggestion.
402 451
403 452 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
404 453
405 454 .. _version 8.2.0:
406 455
407 456 IPython 8.2.0
408 457 -------------
409 458
410 459 IPython 8.2 mostly bring bugfixes to IPython.
411 460
412 461 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
413 462 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
414 463 - History is now pulled from the sqitel database and not from in-memory.
415 464 In particular when using the ``%paste`` magic, the content of the pasted text will
416 465 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
417 466 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
418 467 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
419 468
420 469
421 470 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
422 471 random, and would appreciate help if you find a reproducible minimal case. I've
423 472 tried to make various changes to the codebase to mitigate it, but a proper fix
424 473 will be difficult without understanding the cause.
425 474
426 475
427 476 All the issues on pull-requests for this release can be found in the `8.2
428 477 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
429 478 documentation only PR can be found as part of the `7.33 milestone
430 479 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
431 480
432 481 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
433 482 work on IPython and related libraries.
434 483
435 484 .. _version 8.1.1:
436 485
437 486 IPython 8.1.1
438 487 -------------
439 488
440 489 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
441 490
442 491 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
443 492 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
444 493
445 494 .. _version 8.1:
446 495
447 496 IPython 8.1.0
448 497 -------------
449 498
450 499 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
451 500 updates a few behaviors that were problematic with the 8.0 as with many new major
452 501 release.
453 502
454 503 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
455 504 features listed in :ref:`version 7.32`.
456 505
457 506 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
458 507 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
459 508 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
460 509 is now explicit in ``setup.cfg``/``setup.py``
461 510 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
462 511 - Multi-line edit executes too early with await. :ghpull:`13424`
463 512
464 513 - ``black`` is back as an optional dependency, and autoformatting disabled by
465 514 default until some fixes are implemented (black improperly reformat magics).
466 515 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
467 516 reformatter has been added :ghpull:`13528` . You can use
468 517 ``TerminalInteractiveShell.autoformatter="black"``,
469 518 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formating
470 519 with black, or switch to yapf.
471 520
472 521 - Fix and issue where ``display`` was not defined.
473 522
474 523 - Auto suggestions are now configurable. Currently only
475 524 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
476 525 welcomed. :ghpull:`13475`
477 526
478 527 - multiple packaging/testing improvement to simplify downstream packaging
479 528 (xfail with reasons, try to not access network...).
480 529
481 530 - Update deprecation. ``InteractiveShell.magic`` internal method has been
482 531 deprecated for many years but did not emit a warning until now.
483 532
484 533 - internal ``appended_to_syspath`` context manager has been deprecated.
485 534
486 535 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
487 536
488 537 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
489 538
490 539 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
491 540
492 541 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
493 542 removed.
494 543
495 544 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
496 545
497 546
498 547 We want to remind users that IPython is part of the Jupyter organisations, and
499 548 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
500 549 Abuse and non-respectful comments on discussion will not be tolerated.
501 550
502 551 Many thanks to all the contributors to this release, many of the above fixed issues and
503 552 new features were done by first time contributors, showing there is still
504 553 plenty of easy contribution possible in IPython
505 554 . You can find all individual contributions
506 555 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
507 556
508 557 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
509 558 work on IPython and related libraries. In particular the Lazy autoloading of
510 559 magics that you will find described in the 7.32 release notes.
511 560
512 561
513 562 .. _version 8.0.1:
514 563
515 564 IPython 8.0.1 (CVE-2022-21699)
516 565 ------------------------------
517 566
518 567 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
519 568 values in order to prevent potential Execution with Unnecessary Privileges.
520 569
521 570 Almost all version of IPython looks for configuration and profiles in current
522 571 working directory. Since IPython was developed before pip and environments
523 572 existed it was used a convenient way to load code/packages in a project
524 573 dependant way.
525 574
526 575 In 2022, it is not necessary anymore, and can lead to confusing behavior where
527 576 for example cloning a repository and starting IPython or loading a notebook from
528 577 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
529 578 code execution.
530 579
531 580
532 581 I did not find any standard way for packaged to advertise CVEs they fix, I'm
533 582 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
534 583 list the CVEs that should have been fixed. This attribute is informational only
535 584 as if a executable has a flaw, this value can always be changed by an attacker.
536 585
537 586 .. code::
538 587
539 588 In [1]: import IPython
540 589
541 590 In [2]: IPython.__patched_cves__
542 591 Out[2]: {'CVE-2022-21699'}
543 592
544 593 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
545 594 Out[3]: True
546 595
547 596 Thus starting with this version:
548 597
549 598 - The current working directory is not searched anymore for profiles or
550 599 configurations files.
551 600 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
552 601 the list of fixed CVE. This is informational only.
553 602
554 603 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
555 604
556 605
557 606 .. _version 8.0:
558 607
559 608 IPython 8.0
560 609 -----------
561 610
562 611 IPython 8.0 is bringing a large number of new features and improvements to both the
563 612 user of the terminal and of the kernel via Jupyter. The removal of compatibility
564 613 with an older version of Python is also the opportunity to do a couple of
565 614 performance improvements in particular with respect to startup time.
566 615 The 8.x branch started diverging from its predecessor around IPython 7.12
567 616 (January 2020).
568 617
569 618 This release contains 250+ pull requests, in addition to many of the features
570 619 and backports that have made it to the 7.x branch. Please see the
571 620 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
572 621
573 622 Please feel free to send pull requests to update those notes after release,
574 623 I have likely forgotten a few things reviewing 250+ PRs.
575 624
576 625 Dependencies changes/downstream packaging
577 626 -----------------------------------------
578 627
579 628 Most of our building steps have been changed to be (mostly) declarative
580 629 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
581 630 looking for help to do so.
582 631
583 632 - minimum supported ``traitlets`` version is now 5+
584 633 - we now require ``stack_data``
585 634 - minimal Python is now 3.8
586 635 - ``nose`` is not a testing requirement anymore
587 636 - ``pytest`` replaces nose.
588 637 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
589 638 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
590 639 not have much effect on packaging.
591 640
592 641
593 642 Deprecation and removal
594 643 -----------------------
595 644
596 645 We removed almost all features, arguments, functions, and modules that were
597 646 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
598 647 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
599 648 The few remaining deprecated features we left have better deprecation warnings
600 649 or have been turned into explicit errors for better error messages.
601 650
602 651 I will use this occasion to add the following requests to anyone emitting a
603 652 deprecation warning:
604 653
605 654 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
606 655 caller context, and not the callee one.
607 656 - Please add **since which version** something is deprecated.
608 657
609 658 As a side note, it is much easier to conditionally compare version
610 659 numbers rather than using ``try/except`` when functionality changes with a version.
611 660
612 661 I won't list all the removed features here, but modules like ``IPython.kernel``,
613 662 which was just a shim module around ``ipykernel`` for the past 8 years, have been
614 663 removed, and so many other similar things that pre-date the name **Jupyter**
615 664 itself.
616 665
617 666 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
618 667 handled by ``load_extension``.
619 668
620 669 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
621 670 other packages and no longer need to be inside IPython.
622 671
623 672
624 673 Documentation
625 674 -------------
626 675
627 676 The majority of our docstrings have now been reformatted and automatically fixed by
628 677 the experimental `Vélin <https://pypi.org/project/velin/>`_ project to conform
629 678 to numpydoc.
630 679
631 680 Type annotations
632 681 ----------------
633 682
634 683 While IPython itself is highly dynamic and can't be completely typed, many of
635 684 the functions now have type annotations, and part of the codebase is now checked
636 685 by mypy.
637 686
638 687
639 688 Featured changes
640 689 ----------------
641 690
642 691 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
643 692 Please note as well that many features have been added in the 7.x branch as well
644 693 (and hence why you want to read the 7.x what's new notes), in particular
645 694 features contributed by QuantStack (with respect to debugger protocol and Xeus
646 695 Python), as well as many debugger features that I was pleased to implement as
647 696 part of my work at QuanSight and sponsored by DE Shaw.
648 697
649 698 Traceback improvements
650 699 ~~~~~~~~~~~~~~~~~~~~~~
651 700
652 701 Previously, error tracebacks for errors happening in code cells were showing a
653 702 hash, the one used for compiling the Python AST::
654 703
655 704 In [1]: def foo():
656 705 ...: return 3 / 0
657 706 ...:
658 707
659 708 In [2]: foo()
660 709 ---------------------------------------------------------------------------
661 710 ZeroDivisionError Traceback (most recent call last)
662 711 <ipython-input-2-c19b6d9633cf> in <module>
663 712 ----> 1 foo()
664 713
665 714 <ipython-input-1-1595a74c32d5> in foo()
666 715 1 def foo():
667 716 ----> 2 return 3 / 0
668 717 3
669 718
670 719 ZeroDivisionError: division by zero
671 720
672 721 The error traceback is now correctly formatted, showing the cell number in which the error happened::
673 722
674 723 In [1]: def foo():
675 724 ...: return 3 / 0
676 725 ...:
677 726
678 727 Input In [2]: foo()
679 728 ---------------------------------------------------------------------------
680 729 ZeroDivisionError Traceback (most recent call last)
681 730 input In [2], in <module>
682 731 ----> 1 foo()
683 732
684 733 Input In [1], in foo()
685 734 1 def foo():
686 735 ----> 2 return 3 / 0
687 736
688 737 ZeroDivisionError: division by zero
689 738
690 739 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
691 740 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
692 741
693 742 For example in the following snippet::
694 743
695 744 def foo(i):
696 745 x = [[[0]]]
697 746 return x[0][i][0]
698 747
699 748
700 749 def bar():
701 750 return foo(0) + foo(
702 751 1
703 752 ) + foo(2)
704 753
705 754
706 755 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
707 756 and IPython 8.0 is capable of telling you where the index error occurs::
708 757
709 758
710 759 IndexError
711 760 Input In [2], in <module>
712 761 ----> 1 bar()
713 762 ^^^^^
714 763
715 764 Input In [1], in bar()
716 765 6 def bar():
717 766 ----> 7 return foo(0) + foo(
718 767 ^^^^
719 768 8 1
720 769 ^^^^^^^^
721 770 9 ) + foo(2)
722 771 ^^^^
723 772
724 773 Input In [1], in foo(i)
725 774 1 def foo(i):
726 775 2 x = [[[0]]]
727 776 ----> 3 return x[0][i][0]
728 777 ^^^^^^^
729 778
730 779 The corresponding locations marked here with ``^`` will show up highlighted in
731 780 the terminal and notebooks.
732 781
733 782 Finally, a colon ``::`` and line number is appended after a filename in
734 783 traceback::
735 784
736 785
737 786 ZeroDivisionError Traceback (most recent call last)
738 787 File ~/error.py:4, in <module>
739 788 1 def f():
740 789 2 1/0
741 790 ----> 4 f()
742 791
743 792 File ~/error.py:2, in f()
744 793 1 def f():
745 794 ----> 2 1/0
746 795
747 796 Many terminals and editors have integrations enabling you to directly jump to the
748 797 relevant file/line when this syntax is used, so this small addition may have a high
749 798 impact on productivity.
750 799
751 800
752 801 Autosuggestions
753 802 ~~~~~~~~~~~~~~~
754 803
755 804 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>`__.
756 805
757 806 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
758 807 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
759 808
760 809 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
761 810 or right arrow as described below.
762 811
763 812 1. Start ipython
764 813
765 814 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
766 815
767 816 2. Run ``print("hello")``
768 817
769 818 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
770 819
771 820 3. start typing ``print`` again to see the autosuggestion
772 821
773 822 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
774 823
775 824 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
776 825
777 826 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
778 827
779 828 You can also complete word by word:
780 829
781 830 1. Run ``def say_hello(): print("hello")``
782 831
783 832 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
784 833
785 834 2. Start typing the first letter if ``def`` to see the autosuggestion
786 835
787 836 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
788 837
789 838 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
790 839
791 840 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
792 841
793 842 Importantly, this feature does not interfere with tab completion:
794 843
795 844 1. After running ``def say_hello(): print("hello")``, press d
796 845
797 846 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
798 847
799 848 2. Press Tab to start tab completion
800 849
801 850 .. image:: ../_images/8.0/auto_suggest_d_completions.png
802 851
803 852 3A. Press Tab again to select the first option
804 853
805 854 .. image:: ../_images/8.0/auto_suggest_def_completions.png
806 855
807 856 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
808 857
809 858 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
810 859
811 860 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
812 861
813 862 .. image:: ../_images/8.0/auto_suggest_match_parens.png
814 863
815 864
816 865 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
817 866
818 867 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
819 868 - 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/>`__.
820 869
821 870
822 871 Show pinfo information in ipdb using "?" and "??"
823 872 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
824 873
825 874 In IPDB, it is now possible to show the information about an object using "?"
826 875 and "??", in much the same way that it can be done when using the IPython prompt::
827 876
828 877 ipdb> partial?
829 878 Init signature: partial(self, /, *args, **kwargs)
830 879 Docstring:
831 880 partial(func, *args, **keywords) - new function with partial application
832 881 of the given arguments and keywords.
833 882 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
834 883 Type: type
835 884 Subclasses:
836 885
837 886 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
838 887
839 888
840 889 Autoreload 3 feature
841 890 ~~~~~~~~~~~~~~~~~~~~
842 891
843 892 Example: When an IPython session is run with the 'autoreload' extension loaded,
844 893 you will now have the option '3' to select, which means the following:
845 894
846 895 1. replicate all functionality from option 2
847 896 2. autoload all new funcs/classes/enums/globals from the module when they are added
848 897 3. autoload all newly imported funcs/classes/enums/globals from external modules
849 898
850 899 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
851 900
852 901 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
853 902
854 903 Auto formatting with black in the CLI
855 904 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
856 905
857 906 This feature was present in 7.x, but disabled by default.
858 907
859 908 In 8.0, input was automatically reformatted with Black when black was installed.
860 909 This feature has been reverted for the time being.
861 910 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
862 911
863 912 History Range Glob feature
864 913 ~~~~~~~~~~~~~~~~~~~~~~~~~~
865 914
866 915 Previously, when using ``%history``, users could specify either
867 916 a range of sessions and lines, for example:
868 917
869 918 .. code-block:: python
870 919
871 920 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
872 921 # to the fifth line of 6 sessions ago.``
873 922
874 923 Or users could specify a glob pattern:
875 924
876 925 .. code-block:: python
877 926
878 927 -g <pattern> # glob ALL history for the specified pattern.
879 928
880 929 However users could *not* specify both.
881 930
882 931 If a user *did* specify both a range and a glob pattern,
883 932 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
884 933
885 934 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.
886 935
887 936 Don't start a multi-line cell with sunken parenthesis
888 937 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
889 938
890 939 From now on, IPython will not ask for the next line of input when given a single
891 940 line with more closing than opening brackets. For example, this means that if
892 941 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
893 942 the ``...:`` prompt continuation.
894 943
895 944 IPython shell for ipdb interact
896 945 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
897 946
898 947 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
899 948
900 949 Automatic Vi prompt stripping
901 950 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
902 951
903 952 When pasting code into IPython, it will strip the leading prompt characters if
904 953 there are any. For example, you can paste the following code into the console -
905 954 it will still work, even though each line is prefixed with prompts (``In``,
906 955 ``Out``)::
907 956
908 957 In [1]: 2 * 2 == 4
909 958 Out[1]: True
910 959
911 960 In [2]: print("This still works as pasted")
912 961
913 962
914 963 Previously, this was not the case for the Vi-mode prompts::
915 964
916 965 In [1]: [ins] In [13]: 2 * 2 == 4
917 966 ...: Out[13]: True
918 967 ...:
919 968 File "<ipython-input-1-727bb88eaf33>", line 1
920 969 [ins] In [13]: 2 * 2 == 4
921 970 ^
922 971 SyntaxError: invalid syntax
923 972
924 973 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
925 974 skipped just as the normal ``In`` would be.
926 975
927 976 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
928 977 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
929 978
930 979 Empty History Ranges
931 980 ~~~~~~~~~~~~~~~~~~~~
932 981
933 982 A number of magics that take history ranges can now be used with an empty
934 983 range. These magics are:
935 984
936 985 * ``%save``
937 986 * ``%load``
938 987 * ``%pastebin``
939 988 * ``%pycat``
940 989
941 990 Using them this way will make them take the history of the current session up
942 991 to the point of the magic call (such that the magic itself will not be
943 992 included).
944 993
945 994 Therefore it is now possible to save the whole history to a file using
946 995 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
947 996 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
948 997 ``%pastebin``, or view the whole thing syntax-highlighted with a single
949 998 ``%pycat``.
950 999
951 1000
952 1001 Windows timing implementation: Switch to process_time
953 1002 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
954 1003 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
955 1004 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
956 1005 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
957 1006
958 1007 Miscellaneous
959 1008 ~~~~~~~~~~~~~
960 1009 - Non-text formatters are not disabled in the terminal, which should simplify
961 1010 writing extensions displaying images or other mimetypes in supporting terminals.
962 1011 :ghpull:`12315`
963 1012 - It is now possible to automatically insert matching brackets in Terminal IPython using the
964 1013 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
965 1014 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
966 1015 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
967 1016 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
968 1017 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
969 1018 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
970 1019 - The debugger now has a persistent history, which should make it less
971 1020 annoying to retype commands :ghpull:`13246`
972 1021 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
973 1022 now warn users if they use one of those commands. :ghpull:`12954`
974 1023 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
975 1024
976 1025 Re-added support for XDG config directories
977 1026 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
978 1027
979 1028 XDG support through the years comes and goes. There is a tension between having
980 1029 an identical location for configuration in all platforms versus having simple instructions.
981 1030 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
982 1031 config files back into ``~/.ipython``. That migration code has now been removed.
983 1032 IPython now checks the XDG locations, so if you _manually_ move your config
984 1033 files to your preferred location, IPython will not move them back.
985 1034
986 1035
987 1036 Preparing for Python 3.10
988 1037 -------------------------
989 1038
990 1039 To prepare for Python 3.10, we have started working on removing reliance and
991 1040 any dependency that is not compatible with Python 3.10. This includes migrating our
992 1041 test suite to pytest and starting to remove nose. This also means that the
993 1042 ``iptest`` command is now gone and all testing is via pytest.
994 1043
995 1044 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
996 1045 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
997 1046 who did a fantastic job at updating our code base, migrating to pytest, pushing
998 1047 our coverage, and fixing a large number of bugs. I highly recommend contacting
999 1048 them if you need help with C++ and Python projects.
1000 1049
1001 1050 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+>`__
1002 1051
1003 1052 Removing support for older Python versions
1004 1053 ------------------------------------------
1005 1054
1006 1055
1007 1056 We are removing support for Python up through 3.7, allowing internal code to use the more
1008 1057 efficient ``pathlib`` and to make better use of type annotations.
1009 1058
1010 1059 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
1011 1060 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
1012 1061
1013 1062
1014 1063 We had about 34 PRs only to update some logic to update some functions from managing strings to
1015 1064 using Pathlib.
1016 1065
1017 1066 The completer has also seen significant updates and now makes use of newer Jedi APIs,
1018 1067 offering faster and more reliable tab completion.
1019 1068
1020 1069 Misc Statistics
1021 1070 ---------------
1022 1071
1023 1072 Here are some numbers::
1024 1073
1025 1074 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
1026 1075 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
1027 1076
1028 1077 $ git diff --stat 7.x...master | tail -1
1029 1078 340 files changed, 13399 insertions(+), 12421 deletions(-)
1030 1079
1031 1080 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
1032 1081 maintainers pushing buttons).::
1033 1082
1034 1083 $ git shortlog -s --no-merges 7.x...master | sort -nr
1035 1084 535 Matthias Bussonnier
1036 1085 86 Nikita Kniazev
1037 1086 69 Blazej Michalik
1038 1087 49 Samuel Gaist
1039 1088 27 Itamar Turner-Trauring
1040 1089 18 Spas Kalaydzhisyki
1041 1090 17 Thomas Kluyver
1042 1091 17 Quentin Peter
1043 1092 17 James Morris
1044 1093 17 Artur Svistunov
1045 1094 15 Bart Skowron
1046 1095 14 Alex Hall
1047 1096 13 rushabh-v
1048 1097 13 Terry Davis
1049 1098 13 Benjamin Ragan-Kelley
1050 1099 8 martinRenou
1051 1100 8 farisachugthai
1052 1101 7 dswij
1053 1102 7 Gal B
1054 1103 7 Corentin Cadiou
1055 1104 6 yuji96
1056 1105 6 Martin Skarzynski
1057 1106 6 Justin Palmer
1058 1107 6 Daniel Goldfarb
1059 1108 6 Ben Greiner
1060 1109 5 Sammy Al Hashemi
1061 1110 5 Paul Ivanov
1062 1111 5 Inception95
1063 1112 5 Eyenpi
1064 1113 5 Douglas Blank
1065 1114 5 Coco Mishra
1066 1115 5 Bibo Hao
1067 1116 5 André A. Gomes
1068 1117 5 Ahmed Fasih
1069 1118 4 takuya fujiwara
1070 1119 4 palewire
1071 1120 4 Thomas A Caswell
1072 1121 4 Talley Lambert
1073 1122 4 Scott Sanderson
1074 1123 4 Ram Rachum
1075 1124 4 Nick Muoh
1076 1125 4 Nathan Goldbaum
1077 1126 4 Mithil Poojary
1078 1127 4 Michael T
1079 1128 4 Jakub Klus
1080 1129 4 Ian Castleden
1081 1130 4 Eli Rykoff
1082 1131 4 Ashwin Vishnu
1083 1132 3 谭九鼎
1084 1133 3 sleeping
1085 1134 3 Sylvain Corlay
1086 1135 3 Peter Corke
1087 1136 3 Paul Bissex
1088 1137 3 Matthew Feickert
1089 1138 3 Fernando Perez
1090 1139 3 Eric Wieser
1091 1140 3 Daniel Mietchen
1092 1141 3 Aditya Sathe
1093 1142 3 007vedant
1094 1143 2 rchiodo
1095 1144 2 nicolaslazo
1096 1145 2 luttik
1097 1146 2 gorogoroumaru
1098 1147 2 foobarbyte
1099 1148 2 bar-hen
1100 1149 2 Theo Ouzhinski
1101 1150 2 Strawkage
1102 1151 2 Samreen Zarroug
1103 1152 2 Pete Blois
1104 1153 2 Meysam Azad
1105 1154 2 Matthieu Ancellin
1106 1155 2 Mark Schmitz
1107 1156 2 Maor Kleinberger
1108 1157 2 MRCWirtz
1109 1158 2 Lumir Balhar
1110 1159 2 Julien Rabinow
1111 1160 2 Juan Luis Cano Rodríguez
1112 1161 2 Joyce Er
1113 1162 2 Jakub
1114 1163 2 Faris A Chugthai
1115 1164 2 Ethan Madden
1116 1165 2 Dimitri Papadopoulos
1117 1166 2 Diego Fernandez
1118 1167 2 Daniel Shimon
1119 1168 2 Coco Bennett
1120 1169 2 Carlos Cordoba
1121 1170 2 Boyuan Liu
1122 1171 2 BaoGiang HoangVu
1123 1172 2 Augusto
1124 1173 2 Arthur Svistunov
1125 1174 2 Arthur Moreira
1126 1175 2 Ali Nabipour
1127 1176 2 Adam Hackbarth
1128 1177 1 richard
1129 1178 1 linar-jether
1130 1179 1 lbennett
1131 1180 1 juacrumar
1132 1181 1 gpotter2
1133 1182 1 digitalvirtuoso
1134 1183 1 dalthviz
1135 1184 1 Yonatan Goldschmidt
1136 1185 1 Tomasz Kłoczko
1137 1186 1 Tobias Bengfort
1138 1187 1 Timur Kushukov
1139 1188 1 Thomas
1140 1189 1 Snir Broshi
1141 1190 1 Shao Yang Hong
1142 1191 1 Sanjana-03
1143 1192 1 Romulo Filho
1144 1193 1 Rodolfo Carvalho
1145 1194 1 Richard Shadrach
1146 1195 1 Reilly Tucker Siemens
1147 1196 1 Rakessh Roshan
1148 1197 1 Piers Titus van der Torren
1149 1198 1 PhanatosZou
1150 1199 1 Pavel Safronov
1151 1200 1 Paulo S. Costa
1152 1201 1 Paul McCarthy
1153 1202 1 NotWearingPants
1154 1203 1 Naelson Douglas
1155 1204 1 Michael Tiemann
1156 1205 1 Matt Wozniski
1157 1206 1 Markus Wageringel
1158 1207 1 Marcus Wirtz
1159 1208 1 Marcio Mazza
1160 1209 1 Lumír 'Frenzy' Balhar
1161 1210 1 Lightyagami1
1162 1211 1 Leon Anavi
1163 1212 1 LeafyLi
1164 1213 1 L0uisJ0shua
1165 1214 1 Kyle Cutler
1166 1215 1 Krzysztof Cybulski
1167 1216 1 Kevin Kirsche
1168 1217 1 KIU Shueng Chuan
1169 1218 1 Jonathan Slenders
1170 1219 1 Jay Qi
1171 1220 1 Jake VanderPlas
1172 1221 1 Iwan Briquemont
1173 1222 1 Hussaina Begum Nandyala
1174 1223 1 Gordon Ball
1175 1224 1 Gabriel Simonetto
1176 1225 1 Frank Tobia
1177 1226 1 Erik
1178 1227 1 Elliott Sales de Andrade
1179 1228 1 Daniel Hahler
1180 1229 1 Dan Green-Leipciger
1181 1230 1 Dan Green
1182 1231 1 Damian Yurzola
1183 1232 1 Coon, Ethan T
1184 1233 1 Carol Willing
1185 1234 1 Brian Lee
1186 1235 1 Brendan Gerrity
1187 1236 1 Blake Griffin
1188 1237 1 Bastian Ebeling
1189 1238 1 Bartosz Telenczuk
1190 1239 1 Ankitsingh6299
1191 1240 1 Andrew Port
1192 1241 1 Andrew J. Hesford
1193 1242 1 Albert Zhang
1194 1243 1 Adam Johnson
1195 1244
1196 1245 This does not, of course, represent non-code contributions, for which we are also grateful.
1197 1246
1198 1247
1199 1248 API Changes using Frappuccino
1200 1249 -----------------------------
1201 1250
1202 1251 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
1203 1252
1204 1253
1205 1254 The following items are new in IPython 8.0 ::
1206 1255
1207 1256 + IPython.core.async_helpers.get_asyncio_loop()
1208 1257 + IPython.core.completer.Dict
1209 1258 + IPython.core.completer.Pattern
1210 1259 + IPython.core.completer.Sequence
1211 1260 + IPython.core.completer.__skip_doctest__
1212 1261 + IPython.core.debugger.Pdb.precmd(self, line)
1213 1262 + IPython.core.debugger.__skip_doctest__
1214 1263 + IPython.core.display.__getattr__(name)
1215 1264 + IPython.core.display.warn
1216 1265 + IPython.core.display_functions
1217 1266 + IPython.core.display_functions.DisplayHandle
1218 1267 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
1219 1268 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
1220 1269 + IPython.core.display_functions.__all__
1221 1270 + IPython.core.display_functions.__builtins__
1222 1271 + IPython.core.display_functions.__cached__
1223 1272 + IPython.core.display_functions.__doc__
1224 1273 + IPython.core.display_functions.__file__
1225 1274 + IPython.core.display_functions.__loader__
1226 1275 + IPython.core.display_functions.__name__
1227 1276 + IPython.core.display_functions.__package__
1228 1277 + IPython.core.display_functions.__spec__
1229 1278 + IPython.core.display_functions.b2a_hex
1230 1279 + IPython.core.display_functions.clear_output(wait=False)
1231 1280 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
1232 1281 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
1233 1282 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
1234 1283 + IPython.core.extensions.BUILTINS_EXTS
1235 1284 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
1236 1285 + IPython.core.interactiveshell.Callable
1237 1286 + IPython.core.interactiveshell.__annotations__
1238 1287 + IPython.core.ultratb.List
1239 1288 + IPython.core.ultratb.Tuple
1240 1289 + IPython.lib.pretty.CallExpression
1241 1290 + IPython.lib.pretty.CallExpression.factory(name)
1242 1291 + IPython.lib.pretty.RawStringLiteral
1243 1292 + IPython.lib.pretty.RawText
1244 1293 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
1245 1294 + IPython.terminal.embed.Set
1246 1295
1247 1296 The following items have been removed (or moved to superclass)::
1248 1297
1249 1298 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
1250 1299 - IPython.core.completer.Sentinel
1251 1300 - IPython.core.completer.skip_doctest
1252 1301 - IPython.core.debugger.Tracer
1253 1302 - IPython.core.display.DisplayHandle
1254 1303 - IPython.core.display.DisplayHandle.display
1255 1304 - IPython.core.display.DisplayHandle.update
1256 1305 - IPython.core.display.b2a_hex
1257 1306 - IPython.core.display.clear_output
1258 1307 - IPython.core.display.display
1259 1308 - IPython.core.display.publish_display_data
1260 1309 - IPython.core.display.update_display
1261 1310 - IPython.core.excolors.Deprec
1262 1311 - IPython.core.excolors.ExceptionColors
1263 1312 - IPython.core.history.warn
1264 1313 - IPython.core.hooks.late_startup_hook
1265 1314 - IPython.core.hooks.pre_run_code_hook
1266 1315 - IPython.core.hooks.shutdown_hook
1267 1316 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
1268 1317 - IPython.core.interactiveshell.InteractiveShell.init_readline
1269 1318 - IPython.core.interactiveshell.InteractiveShell.write
1270 1319 - IPython.core.interactiveshell.InteractiveShell.write_err
1271 1320 - IPython.core.interactiveshell.get_default_colors
1272 1321 - IPython.core.interactiveshell.removed_co_newlocals
1273 1322 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
1274 1323 - IPython.core.magics.script.PIPE
1275 1324 - IPython.core.prefilter.PrefilterManager.init_transformers
1276 1325 - IPython.core.release.classifiers
1277 1326 - IPython.core.release.description
1278 1327 - IPython.core.release.keywords
1279 1328 - IPython.core.release.long_description
1280 1329 - IPython.core.release.name
1281 1330 - IPython.core.release.platforms
1282 1331 - IPython.core.release.url
1283 1332 - IPython.core.ultratb.VerboseTB.format_records
1284 1333 - IPython.core.ultratb.find_recursion
1285 1334 - IPython.core.ultratb.findsource
1286 1335 - IPython.core.ultratb.fix_frame_records_filenames
1287 1336 - IPython.core.ultratb.inspect_error
1288 1337 - IPython.core.ultratb.is_recursion_error
1289 1338 - IPython.core.ultratb.with_patch_inspect
1290 1339 - IPython.external.__all__
1291 1340 - IPython.external.__builtins__
1292 1341 - IPython.external.__cached__
1293 1342 - IPython.external.__doc__
1294 1343 - IPython.external.__file__
1295 1344 - IPython.external.__loader__
1296 1345 - IPython.external.__name__
1297 1346 - IPython.external.__package__
1298 1347 - IPython.external.__path__
1299 1348 - IPython.external.__spec__
1300 1349 - IPython.kernel.KernelConnectionInfo
1301 1350 - IPython.kernel.__builtins__
1302 1351 - IPython.kernel.__cached__
1303 1352 - IPython.kernel.__warningregistry__
1304 1353 - IPython.kernel.pkg
1305 1354 - IPython.kernel.protocol_version
1306 1355 - IPython.kernel.protocol_version_info
1307 1356 - IPython.kernel.src
1308 1357 - IPython.kernel.version_info
1309 1358 - IPython.kernel.warn
1310 1359 - IPython.lib.backgroundjobs
1311 1360 - IPython.lib.backgroundjobs.BackgroundJobBase
1312 1361 - IPython.lib.backgroundjobs.BackgroundJobBase.run
1313 1362 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
1314 1363 - IPython.lib.backgroundjobs.BackgroundJobExpr
1315 1364 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
1316 1365 - IPython.lib.backgroundjobs.BackgroundJobFunc
1317 1366 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
1318 1367 - IPython.lib.backgroundjobs.BackgroundJobManager
1319 1368 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
1320 1369 - IPython.lib.backgroundjobs.BackgroundJobManager.new
1321 1370 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
1322 1371 - IPython.lib.backgroundjobs.BackgroundJobManager.result
1323 1372 - IPython.lib.backgroundjobs.BackgroundJobManager.status
1324 1373 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
1325 1374 - IPython.lib.backgroundjobs.__builtins__
1326 1375 - IPython.lib.backgroundjobs.__cached__
1327 1376 - IPython.lib.backgroundjobs.__doc__
1328 1377 - IPython.lib.backgroundjobs.__file__
1329 1378 - IPython.lib.backgroundjobs.__loader__
1330 1379 - IPython.lib.backgroundjobs.__name__
1331 1380 - IPython.lib.backgroundjobs.__package__
1332 1381 - IPython.lib.backgroundjobs.__spec__
1333 1382 - IPython.lib.kernel.__builtins__
1334 1383 - IPython.lib.kernel.__cached__
1335 1384 - IPython.lib.kernel.__doc__
1336 1385 - IPython.lib.kernel.__file__
1337 1386 - IPython.lib.kernel.__loader__
1338 1387 - IPython.lib.kernel.__name__
1339 1388 - IPython.lib.kernel.__package__
1340 1389 - IPython.lib.kernel.__spec__
1341 1390 - IPython.lib.kernel.__warningregistry__
1342 1391 - IPython.paths.fs_encoding
1343 1392 - IPython.terminal.debugger.DEFAULT_BUFFER
1344 1393 - IPython.terminal.debugger.cursor_in_leading_ws
1345 1394 - IPython.terminal.debugger.emacs_insert_mode
1346 1395 - IPython.terminal.debugger.has_selection
1347 1396 - IPython.terminal.debugger.vi_insert_mode
1348 1397 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
1349 1398 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
1350 1399 - IPython.testing.test
1351 1400 - IPython.utils.contexts.NoOpContext
1352 1401 - IPython.utils.io.IOStream
1353 1402 - IPython.utils.io.IOStream.close
1354 1403 - IPython.utils.io.IOStream.write
1355 1404 - IPython.utils.io.IOStream.writelines
1356 1405 - IPython.utils.io.__warningregistry__
1357 1406 - IPython.utils.io.atomic_writing
1358 1407 - IPython.utils.io.stderr
1359 1408 - IPython.utils.io.stdin
1360 1409 - IPython.utils.io.stdout
1361 1410 - IPython.utils.io.unicode_std_stream
1362 1411 - IPython.utils.path.get_ipython_cache_dir
1363 1412 - IPython.utils.path.get_ipython_dir
1364 1413 - IPython.utils.path.get_ipython_module_path
1365 1414 - IPython.utils.path.get_ipython_package_dir
1366 1415 - IPython.utils.path.locate_profile
1367 1416 - IPython.utils.path.unquote_filename
1368 1417 - IPython.utils.py3compat.PY2
1369 1418 - IPython.utils.py3compat.PY3
1370 1419 - IPython.utils.py3compat.buffer_to_bytes
1371 1420 - IPython.utils.py3compat.builtin_mod_name
1372 1421 - IPython.utils.py3compat.cast_bytes
1373 1422 - IPython.utils.py3compat.getcwd
1374 1423 - IPython.utils.py3compat.isidentifier
1375 1424 - IPython.utils.py3compat.u_format
1376 1425
1377 1426 The following signatures differ between 7.x and 8.0::
1378 1427
1379 1428 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
1380 1429 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
1381 1430
1382 1431 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
1383 1432 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
1384 1433
1385 1434 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
1386 1435 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
1387 1436
1388 1437 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
1389 1438 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
1390 1439
1391 1440 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
1392 1441 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
1393 1442
1394 1443 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
1395 1444 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
1396 1445
1397 1446 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
1398 1447 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
1399 1448
1400 1449 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
1401 1450 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
1402 1451
1403 1452 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
1404 1453 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
1405 1454
1406 1455 - IPython.terminal.embed.embed(**kwargs)
1407 1456 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
1408 1457
1409 1458 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
1410 1459 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
1411 1460
1412 1461 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
1413 1462 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
1414 1463
1415 1464 - IPython.utils.path.get_py_filename(name, force_win32='None')
1416 1465 + IPython.utils.path.get_py_filename(name)
1417 1466
1418 1467 The following are new attributes (that might be inherited)::
1419 1468
1420 1469 + IPython.core.completer.IPCompleter.unicode_names
1421 1470 + IPython.core.debugger.InterruptiblePdb.precmd
1422 1471 + IPython.core.debugger.Pdb.precmd
1423 1472 + IPython.core.ultratb.AutoFormattedTB.has_colors
1424 1473 + IPython.core.ultratb.ColorTB.has_colors
1425 1474 + IPython.core.ultratb.FormattedTB.has_colors
1426 1475 + IPython.core.ultratb.ListTB.has_colors
1427 1476 + IPython.core.ultratb.SyntaxTB.has_colors
1428 1477 + IPython.core.ultratb.TBTools.has_colors
1429 1478 + IPython.core.ultratb.VerboseTB.has_colors
1430 1479 + IPython.terminal.debugger.TerminalPdb.do_interact
1431 1480 + IPython.terminal.debugger.TerminalPdb.precmd
1432 1481
1433 1482 The following attribute/methods have been removed::
1434 1483
1435 1484 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
1436 1485 - IPython.core.ultratb.AutoFormattedTB.format_records
1437 1486 - IPython.core.ultratb.ColorTB.format_records
1438 1487 - IPython.core.ultratb.FormattedTB.format_records
1439 1488 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
1440 1489 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
1441 1490 - IPython.terminal.embed.InteractiveShellEmbed.write
1442 1491 - IPython.terminal.embed.InteractiveShellEmbed.write_err
1443 1492 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
1444 1493 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
1445 1494 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
1446 1495 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
1447 1496 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
1448 1497 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
1449 1498 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
1450 1499 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now