##// END OF EJS Templates
misc headers fixes and whatsnew 8.30 (#14588)
M Bussonnier -
r28966:0bbf70c5 merge
parent child Browse files
Show More
@@ -1,2442 +1,2483
1 1 ============
2 2 8.x Series
3 3 ============
4 .. _version 8.30:
5
6 IPython 8.30
7 ============
8
9 Small release for this end of november;
10
11 - :ghpull:`14579` improve the documentatation for cutom IPython formatters, and how
12 you can register formatters for custo mime types.
13 - :ghpull:`14580` fix a bug in which commands that were not assigned a shortcut
14 could not be assigned one.
15 - :ghpull:`12690` fix a bug in which a single ``/`` on an empty line would not be
16 an error. This is due to the ``autocall`` behavior that we are thinking of
17 deprecating.
18
19 The rest of the PRs are mostly maintenance and documentation improvements.
20
21 As usual you can find the full list of PRs on GitHub under `the 8.30
22 <https://github.com/ipython/ipython/milestone/137?closed=1>`__ milestone.
23
24
25 For something completely different
26 ----------------------------------
27
28 `Ada Lovelace <https://en.wikipedia.org/wiki/Ada_Lovelace>`__ is considered the
29 first computer programmer. In the 1840s, she wrote what is recognized as the
30 first algorithm intended to be processed by a machine - Charles Babbage's
31 proposed Analytical Engine. Her notes included what would today be called a
32 computer program, making her the first programmer in history. She also uniquely
33 understood that computers could go beyond mere calculation and could be used to
34 create music or art - a visionary insight that was far ahead of her time.
35 Despite living in an era when women had limited access to scientific education,
36 she made groundbreaking contributions that laid the foundation for modern
37 computing.
38
39 Thanks
40 ------
41
42 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
43 work on IPython and related libraries.
44
4 45
5 46 .. _version 8.29:
6 47
7 48 IPython 8.29
8 49 ============
9 50
10 51 Medium release for this end of october;
11 52
12 53 - Misc Python 3.13 compatibility :ghpull:`14536`, :ghpull:`14559`
13 54 - Add a ``uv`` line magic :ghpull:`14537`
14 55 - Add support for WEBP to ``IPython.display.Image``. :ghpull:`14526`
15 56 - And many more bugfixes and quality of life improvements.
16 57
17 58 As usual you can find the full list of PRs on GitHub under `the 8.29
18 59 <https://github.com/ipython/ipython/milestone/136?closed=1>`__ milestone.
19 60
20 61 Preparing for 9.0
21 62 -----------------
22 63
23 64 IPython 3.13 was released earlier this month, and this means that according to
24 65 `Spec-0 <https://scientific-python.org/specs/spec-0000/>`__, support for 3.10
25 66 will end soon.
26 67
27 68 There have been many minor version of IPython 8.x, so it is likely that one of
28 69 the next version will simply bump to 9.0 and remove a lot of code mark as
29 70 deprecated, and documentation/examples not relevant for terminal IPython.
30 71
31 72 The frequency of release and my time reviewing will also likely decrease more
32 73 than it has already.
33 74
34 75
35 76 For something completely different
36 77 ----------------------------------
37 78
38 79 `Rosalind Franklin <https://en.wikipedia.org/wiki/Rosalind_Franklin>`__ made
39 80 some of the biggest contribution to the discovery of the helix structure of DNA.
40 81 Unfortunately her work was `not recognized
41 82 <https://www.nature.com/scitable/topicpage/rosalind-franklin-a-crucial-contribution-6538012/>`__
42 83
43 84 Thanks
44 85 ------
45 86
46 87 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
47 88 work on IPython and related libraries.
48 89
49 90 .. _version 8.28:
50 91
51 92 IPython 8.28
52 93 ============
53 94
54 95 Slight delay of this September release as I was busy at Pydata Paris last week.
55 96 Not many user visible changes for this release, a couple of bug fixes and
56 97 workaround:
57 98
58 99 - :ghpull:`14480` AssertionError: assert _xterm_term_title_saved in WSL – It is
59 100 unclear why the terminal title is not saved in WSL, if you've WSL experience
60 101 we'd love your feedback and help to not just ignore an error
61 102 - :ghpull:`14510` Fix use of pyside6 >= 6.7.0
62 103 - :ghpull:`14518` Make values public (_tb_highlight & _tb_highlight_style)
63 104 - :ghpull:`14515` Use environment variable to identify conda / mamba
64 105
65 106
66 107 As usual you can find the full list of PRs on GitHub under `the 8.28
67 108 <https://github.com/ipython/ipython/milestone/135?closed=1>`__ milestone.
68 109
69 110 For something completely different
70 111 ----------------------------------
71 112
72 113 One of the first works of Science Fiction (`Frankenstein
73 114 <https://en.wikipedia.org/wiki/Frankenstein>`__), was written by `Mary Shelley
74 115 <https://en.wikipedia.org/wiki/Mary_Shelley>`__ when she was 18, before being
75 116 published in London on 1 January 1818 when she was 20. This is often overlooked,
76 117 and the role of founders of science fiction attribute to Edgar Allan Poe and
77 118 Jules Verne despite being published later.
78 119
79 120 Thanks
80 121 ------
81 122
82 123 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
83 124 work on IPython and related libraries.
84 125
85 126
86 127 .. _version 8.27:
87 128
88 129 IPython 8.27
89 130 ============
90 131
91 132 New release of IPython after a month off (not enough changes). We can see a few
92 133 important changes for this release.
93 134
94 135 - autocall was being call getitem, :ghpull:`14486`
95 136 - Only copy files in startup dir if we just created it. :ghpull:`14497`
96 137 - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this
97 138 the first IPython release officially compatible with Python 3.13; you will
98 139 need the most recent ``executing`` and ``stack_data``, we won't pin to avoid
99 140 forcing user of older Python version to upgrade.
100 141
101 142
102 143 As usual you can find the full list of PRs on GitHub under `the 8.27
103 144 <https://github.com/ipython/ipython/milestone/134?closed=1>`__ milestone.
104 145
105 146 Thanks
106 147 ------
107 148
108 149 Many thanks to `@Kleirre <https://github.com/Kleirre>`__ our June intern for
109 150 doing her first contribution to open source, doing the releases notes and
110 151 release. I guess you didn't even notice it was not me who released :-). I wish
111 152 her all the best in her future endeavor and look forward for her work in
112 153 astrophysics.
113 154
114 155 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
115 156 work on IPython and related libraries.
116 157
117 158 .. _version 8.26:
118 159
119 160 IPython 8.26
120 161 ============
121 162
122 163 Hey, the release of IPython for this month is here! (I know you were waiting for it)
123 164
124 165 - :ghpull:`14453` bugfix for call to structured_traceback
125 166
126 167 - :ghpull:`14466` fixed honoring custom repr for NamedTuple if assigned by partialmethod
127 168
128 169 - :ghpull:`14451` Convert matplotlib gui name in enable_gui
129 170
130 171 As usual you can find the full list of PRs on GitHub under `the 8.26
131 172 <https://github.com/ipython/ipython/milestone/133?closed=1>`__ milestone.
132 173
133 174 Thanks
134 175 ------
135 176
136 177 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
137 178 work on IPython and related libraries.
138 179
139 180
140 181 .. _version 8.25:
141 182
142 183 IPython 8.25
143 184 ============
144 185
145 186 Mostly internal changes for this end of may release of IPython.
146 187
147 188 We'll count about a dozen PRs for this moth, with small bugfixes related to
148 189 matplotlib fixes.
149 190
150 191 Of notable interest,
151 192
152 193 - :ghpull:`14426` replaces the unicode micro symbol with greek letter mu,
153 194 visually identical but should fix nfkc normalisations issues.
154 195
155 196 - :ghpull:`14444` introduces ``intersphinx_registry`` as a new dependency
156 197 which is recommended only to build documentation.
157 198
158 199 As usual you can find the full list of PRs on GitHub under `the 8.25
159 200 <https://github.com/ipython/ipython/milestone/132?closed=1>`__ milestone.
160 201
161 202 Thanks
162 203 ------
163 204
164 205 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
165 206 work on IPython and related libraries.
166 207
167 208
168 209 .. _version 8.24:
169 210
170 211 IPython 8.24
171 212 ============
172 213
173 214 Back on regular release schedule, as usual month releases are relatively tiny.
174 215
175 216 The biggest change is the move of the matplotlib backend handling from IPython
176 217 to matplotlib. :ghpull:`14371` :ghpull:`14403`.
177 218
178 219 We will note:
179 220
180 221 - pytest 8 compatibility :ghpull:`14413`
181 222 - ``typing-extension`` now needs 4.6 or newer. It was already the case, but not
182 223 explicated. :ghpull:`14380`
183 224 - Attempt to speed running code under debugger in some cases. :ghpull:`14386`
184 225 :ghpull:`14418`.
185 226 - Multiple fixes to documentation for ipyparallel, simple_prompt and emacs
186 227 :ghpull:`14384` :ghpull:`14404` :ghpull:`14407`
187 228 - Maintenance and cleanup of debugger :ghpull:`14387` :ghpull:`14393`
188 229
189 230 As usual you can find the full list of PRs on GitHub under `the 8.24
190 231 <https://github.com/ipython/ipython/milestone/131?closed=1>`__ milestone.
191 232
192 233 Thanks
193 234 ------
194 235
195 236 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
196 237 work on IPython and related libraries.
197 238
198 239
199 240 .. _version 8.23:
200 241
201 242 IPython 8.23
202 243 ============
203 244
204 245 Super tiny release of IPython on Sunday – a bit later than usual, which is also
205 246 `πŸ³οΈβ€βš§οΈ International Transgender Day of VisibilityπŸ³οΈβ€βš§οΈ
206 247 <https://en.wikipedia.org/wiki/International_Transgender_Day_of_Visibility>`_ –
207 248 so a though for you on this day, you matter and you are valid [1]_.
208 249
209 250 This is a minuscule release with only 5 Pull requests.
210 251
211 252 Main change is :ghpull:`14357` which improve inference from return type
212 253 annotations in completer and the introduction of the optional target
213 254 ``ipython[matplotlib]`` to explicitly request the matplotlib optional
214 255 dependencies.
215 256
216 257 As usual you can find the full list of PRs on GitHub under `the 8.23
217 258 <https://github.com/ipython/ipython/milestone/130?closed=1>`__ milestone.
218 259
219 260 Thanks
220 261 ------
221 262
222 263 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
223 264 work on IPython and related libraries.
224 265
225 266
226 267 .. _version 8.22:
227 268
228 269 IPython 8.22, 8.22.1 and 8.22.2
229 270 ===============================
230 271
231 272 Quick release of IPython for this short month of February, with quite a bit of
232 273 activity with more than 15 PRs.
233 274
234 275 I am not going to details all the changes, but among other we have :
235 276
236 277 - More compatibility with emscripten :ghpull:`14316`, :ghpull:`14318`,
237 278 - Test more downstream project to avoid breakage :ghpull:`14317`
238 279 - Fix recently introduced bug with the ``store`` magic.
239 280 - Fix issues with multiple call to ``matplotlib.pyplot.switch_backend``
240 281 - Fix crashing IPython when some tracebacks encounter dynamically evaluated
241 282 code.
242 283
243 284 IPython 8.22.1 increase the minimal traitlets version, and 8.22.2 fix a critical
244 285 bug on emscripten preventing to use some magics like ``%matplotlib`` on
245 286 jupyter-light.
246 287
247 288 API changes
248 289 -----------
249 290
250 291 One of the largest change is the update the mimehooks and inspector API, see
251 292 :ghpull:`14342`. It should be backward compatible, but many hooks now receive a
252 293 single object with many fields allowing us flexibility to update the API later.
253 294
254 295
255 296 Packaging changes
256 297 -----------------
257 298
258 299 Thanks to `@mkoppe <https://github.com/mkoeppe>`__, we are slowly getting rid of
259 300 setup.py finally migrating to ``pyproject.toml``. There is still quite a bit of
260 301 work, and please open an issue if you encounter any problem.
261 302
262 303
263 304 Deprecation
264 305 -----------
265 306
266 307 A number of unused functions have been marked deprecated or pending deprecation.
267 308 Please let us know if you encounter any of those deprecation messages for us to
268 309 adjust the removal timeline.
269 310
270 311
271 312 Thanks
272 313 ------
273 314
274 315 Many thanks to `@mkoppe <https://github.com/mkoeppe>`__ and `@krassowski
275 316 <https://github.com/krassowski>`__ for their multiple contributions and codebase
276 317 cleanup.
277 318
278 319 As usual you can find the full list of PRs on GitHub under `the 8.22
279 320 <https://github.com/ipython/ipython/milestone/129?closed=1>`__ milestone.
280 321
281 322 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
282 323 work on IPython and related libraries.
283 324
284 325
285 326 .. _version 8.21:
286 327
287 328 IPython 8.21
288 ------------
329 ============
289 330
290 331 More substantial release of IPython slightly out of schedule as it was not
291 332 possible for me to make a release last Friday.
292 333
293 334 Few new features are present, but the codebase has been cleaned, and a couple
294 335 of API are _considered_ for deprecation. They are not deprecated yet, but as
295 336 they do not seem to be quite used, they may emit a warning, in which case please
296 337 comment on the relevant issue to inform me of _which_ project use those feature
297 338 and how you use them. Depending on the feedback I might change the timeline for
298 339 deprecation.
299 340
300 341 This release saw 14 PRs, with more outside contribution than usual,
301 342 I'll note in particular PRs related to making IPython work on emscripten.
302 343
303 344 I also want to point that we are _trying_ to keep compatibility with Python 3.13,
304 345 but it's a cat and mouse game. Plus I am low on time, so I would appreciate any
305 346 help with that.
306 347
307 348 Deprecations
308 ~~~~~~~~~~~~
349 ------------
309 350
310 351 - :ghpull:`14307` Pending Deprecation of
311 352 ``ColorSchemeTable.set_active_scheme(...)``'s ``case_sensitive`` Parameter.
312 353 - :ghpull:`14305` Pending Deprecation of constructing ``ColorScheme`` via
313 354 ``kwargs``, in favor passing a single dict.
314 355
315 356
316 357 Fixes
317 ~~~~~
358 -----
318 359
319 360 - :ghpull:`14284` TerminalIPythonApp's would warn that ``auto_create`` option is not
320 361 recognized.
321 362 - :ghpull:`14286` Fix a crash with ``NotOneValueFound`` when rendering complex
322 363 tracebacks.
323 364
324 365 - :ghpull:`14287` Partial Python 3.13 compatibility
325 366 - :ghpull:`14290` Docs/Typos.
326 367
327 368 Changes
328 369 ~~~~~~~
329 370
330 371 - :ghpull:`14289` ``ipdb.set_trace()`` now accepts ``header=`` for better
331 372 compatibility with ``pdb.set_trace()``
332 373
333 374 - :ghpull:`14300` and :ghpull:`14301` Add hooking ability to produce
334 375 mimebundle.
335 376
336 377 We'll outline :ghpull:`14300`, it is now possible to extend the ``?/??``
337 378 operator to return more mimetypes to render richer help in frontends that
338 379 support it. In particular you could send a json representation of the help that
339 380 could be displayed in a customizable way.
340 381
341 382 Miscellaneous
342 ~~~~~~~~~~~~~
383 -------------
343 384
344 385 - :ghpull:`14291` Misc Refactor of Color handling
345 386 - :ghpull:`14295` Misc test skip on problematic Pypy versions.
346 387
347 388
348 389 Thanks
349 390 ~~~~~~
350 391
351 392 Special thanks to all our contributors, and to the Pypy team that was extremely
352 393 reactive in helping to investigate a fixing a rare unicode+windows bug.
353 394
354 395 As usual you can find the full list of PRs on GitHub under `the 8.21
355 396 <https://github.com/ipython/ipython/milestone/128?closed=1>`__ milestone.
356 397
357 398 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
358 399 work on IPython and related libraries.
359 400
360 401
361 402 .. _version 8.20:
362 403
363 404 IPython 8.20
364 ------------
405 ============
365 406
366 407 Quick IPython release in this beginning of 2024, barely 2 weeks after the previous
367 408 release.
368 409
369 410 This is mostly to fix a backward compatibility issue, I would have done a patch
370 411 release earlier if I could. As a few other cleanup are also part of this
371 412 release, this will get a minor version bump.
372 413
373 414
374 415 The crux of this release is :ghpull:`14274` (Inspect continuation prompt
375 416 signature and pass only viable arguments), the rest of the changes are mostly
376 417 type annotation, and a few compatibility issues with Python 3.13 that are
377 418 getting addressed.
378 419
379 420 Python 3.13 compatibility is still not complete (help welcomed).
380 421
381 422 As usual you can find the full list of PRs on GitHub under `the 8.20
382 423 <https://github.com/ipython/ipython/milestone/127?closed=1>`__ milestone.
383 424
384 425 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
385 426 work on IPython and related libraries.
386 427
387 428
388 429 .. _version 8.19:
389 430
390 431 IPython 8.19
391 ------------
432 ============
392 433
393 434 New release of IPython a bit before the end of the month, and end of the year.
394 435
395 436 Mostly cleanup and deprecation, due to upstream deprecation and removal.
396 437
397 438 Remove of Python 3.9 support
398 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
439 ----------------------------
399 440
400 441 A bit later than originally plan, IPython 8.19 does not support Python 3.9
401 442 anymore, as well as the few conditional code that were executing only on Python
402 443 3.9. :ghpull:`14254`
403 444
404 445 We used the opportunity to deprecate ``IPython.utils.tz`` :ghpull:`14256`, due
405 446 to upstream deprecation of some timezone utilities. It will be removed at a later
406 447 date.
407 448
408 449 We now also run CI on Python 3.12 (what I likely should have done before), but
409 450 running on too many Python version uses a lot of CI time.
410 451
411 452 Absolute and relative Line Numbers in Prompts
412 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
453 ---------------------------------------------
413 454
414 455 Thanks to the contribution of ``cohml``, IPython CLI now support absolute and
415 456 relative line numbers in both vi and emacs prompt, use for example
416 457 ``c.TerminalInteractiveShell.prompt_line_number_format='{line: 4d}/{rel_line:+03d} | '``
417 458 configuration option to display both in a custom format.
418 459
419 460 Miscellaneous
420 ~~~~~~~~~~~~~
461 -------------
421 462
422 463 In addition to various bugfixes, I unpinned pytest, let me know if there are any
423 464 issues and we'll re-pin.
424 465
425 466 See you in 2024
426 ~~~~~~~~~~~~~~~
467 ---------------
427 468
428 469 As usual you can find the full list of PRs on GitHub under `the 8.19
429 470 <https://github.com/ipython/ipython/milestone/126?closed=1>`__ milestone.
430 471
431 472 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
432 473 work on IPython and related libraries.
433 474
434 475 .. _version 8.18:
435 476
436 477 IPython 8.18 and 8.18.1
437 -----------------------
478 =======================
438 479
439 480 8.18.1 is identical to 8.18 but pin ``prompt_toolkit`` to greater than ``3.0.41``
440 481
441 482 Small release of IPython that fixes a small number of inconveniences.
442 483
443 484 - :ghpull:`14251` Fix a memory leak in qt event loop integration by setting
444 485 the Loop parent to None.
445 486 - :ghpull:`14252` Pickleshare was made an optional dependency in 8.17, this
446 487 leads to warnings in some installations when using modules completions. The
447 488 warning has been silenced.
448 489 - :ghpull:`14241` Update event loop code for compatibility with more recent
449 490 ``prompt_toolkit`` due to deprecations in Python 3.12.
450 491 - :ghpull:`14245` Fix doc example on Pygments styles
451 492 - :ghpull:`14238` Remove dependency on app_nope, this is actually only a
452 493 dependency of IPykernel.
453 494
454 495 As usual you can find the full list of PRs on GitHub under `the 8.18
455 496 <https://github.com/ipython/ipython/milestone/125?closed=1>`__ milestone.
456 497
457 498 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
458 499 work on IPython and related libraries.
459 500
460 501 .. _version 8.17.1:
461 502 .. _version 8.17:
462 503
463 504 IPython 8.17, 8.17.1
464 --------------------
505 ====================
465 506
466 507 Medium-sized release of IPython that includes some cleanup (backcall, python2 leftovers)
467 508 and some refactoring improvements (typing, pathlib) and a fix on completion.
468 509
469 510 - :ghpull:`14216` remove backcall dependency
470 511 - :ghpull:`14217` make pickleshare dependency optional
471 512 - :ghpull:`14185` support completion based on type annotations of calls
472 513
473 514 Reverted in 8.17.1:
474 515
475 516 - :ghpull:`14190` remove support for python 2 in lexers (reverted in 8.17.1 as it is imported by qtconsole/spyder)
476 517
477 518
478 519 Mamba and Micromamba magic commands
479 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
520 ------------------------------------
480 521
481 522 In addition to the ``%conda`` magic command for calling ``conda`` in IPython,
482 523 the ``%mamba`` and ``%micromamba`` magic commands now
483 524 call ``mamba`` and ``micromamba`` if they are on ``sys.path``.
484 525
485 526 .. code::
486 527
487 528 %mamba install pkgname
488 529 %micromamba install pkgname
489 530 %conda install pkgname
490 531 %pip install pkgname
491 532
492 533 %mamba --help
493 534 %micromamba --help
494 535 %conda --help
495 536 %pip --help # works w/ JupyterLite
496 537 !pip --help
497 538
498 539
499 540 :ghpull:`14191`
500 541
501 542 ----
502 543
503 544 As usual you can find the full list of PRs on GitHub under `the 8.17
504 545 <https://github.com/ipython/ipython/milestone/123?closed=1>`__ milestone.
505 546
506 547 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
507 548 work on IPython and related libraries.
508 549
509 550 .. _version 8.16:
510 551 .. _version 8.16.1:
511 552
512 553 IPython 8.16, 8.16.1
513 --------------------
554 ====================
514 555
515 556 Small double release of IPython (with the 8.12.3 release notes just below).
516 557 Mostly bug fixes and cleanups, and type annotations. Of interest for users:
517 558
518 559 - :ghpull:`14153` Fix a bug of the new iPdb chained traceback where some
519 560 Exception would not have any traceback. (see upstream fix in CPython for more
520 561 details).
521 562 - :ghpull:`14168` Fix case with spurious message about event loops when using
522 563 matplotlib.
523 564
524 565 This PR is in 8.16.0 but reverted in 8.16.1, we'll rework the fix for 8.17
525 566
526 567 - :ghpull:`14163` Fix an error where semicolon would not suppress output.
527 568
528 569 As usual you can find the full list of PRs on GitHub under `the 8.16
529 570 <https://github.com/ipython/ipython/milestone/121?closed=1>`__ and `8.16.1 milestone
530 571 <https://github.com/ipython/ipython/milestone/124?closed=1>`__.
531 572
532 573 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
533 574 work on IPython and related libraries.
534 575
535 576 .. _version 8.12.3:
536 577
537 578 IPython 8.12.3
538 --------------
579 ==============
539 580
540 581 Tiny release of 8.12.3 that backport a small number of fixes for users still
541 582 using Python 3.8.
542 583
543 584 - :ghpull:`14080` add passthrough filter shortcuts
544 585 - :ghpull:`14169` Fix `InteractiveShellEmbed`
545 586
546 587 .. _version 8.15:
547 588
548 589 IPython 8.15
549 ------------
590 ============
550 591
551 592 Medium release of IPython after a couple of month hiatus, and a bit
552 593 off-schedule.
553 594
554 595 Among other, IPython 8.15:
555 596
556 597 - Improve compatibility with future version of Python 3.12/3.13
557 598 :ghpull:`14107`, :ghpull:`14139`,
558 599 - Improve support for ``ExceptionGroups``, :ghpull:`14108`
559 600 - Fix hangs in ``%gui osx``, :ghpull:`14125`
560 601 - Fix memory lead with ``%reset``, :ghpull:`14133`
561 602 - Unstable config option to modify traceback highlighting that is sometime hard
562 603 to read :ghpull:`14138`
563 604 - Support ``.`` in ``ipdb`` as an argument to the ``list`` command
564 605 :ghpull:`14121`
565 606 - Workroud ``parso`` showing warning message when the default logger level is
566 607 changed :ghpull:`14119`
567 608 - Fix multiple issues with matplotlib interactive mode, qt5/qt6 :ghpull:`14128`
568 609
569 610 Support for PEP-678 Exception Notes
570 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
611 -----------------------------------
571 612
572 613 Ultratb now shows :pep:`678` notes, improving your debugging experience on
573 614 Python 3.11+ or with libraries such as Pytest and Hypothesis.
574 615
575 616 Native fallback for displaying ExceptionGroup
576 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
617 ---------------------------------------------
577 618 ExceptionGroups are now displayed with ``traceback.print_exc``, as a temporary fix until UltraTB properly supports displaying child exceptions.
578 619
579 620
580 621 We have two larger features:
581 622
582 623 AST-based macros
583 ~~~~~~~~~~~~~~~~
624 ----------------
584 625
585 626 :ghpull:`14100` introduce a new and efficient way to modify each execution block
586 627 (cell) using an template-ast-based transform. Unlike IPython pre and post code
587 628 execution hooks, this actually transform the code that is execute with as
588 629 minimal as possible overhead. While it was already technically possible to
589 630 register ast transformers for IPython this was far from evident.
590 631
591 632 This should make it trivial to hook into IPython to implement custom hooks, that
592 633 for example time or profile your code, catch exceptions to provide error
593 634 messages for students or do any other kind of transformations.
594 635
595 636 In addition to programmatic API there is also a magic to quickly register
596 637 hooks::
597 638
598 639 In [1]: %%code_wrap before_after
599 640 ...: print('before')
600 641 ...: __code__
601 642 ...: print('after')
602 643 ...: __ret__
603 644
604 645 This mean that for any subsequent execution code will be executed.
605 646 You can modify the above to print the date, compute the execution time,
606 647 retry the code in a for loop....
607 648
608 649
609 650 Allow IPdb/Pdb to move between chained exceptions
610 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
651 -------------------------------------------------
611 652
612 653 The main change is the addition of the ability to move between chained
613 654 exceptions when using IPdb, this feature was also contributed to upstream Pdb
614 655 and is thus native to CPython in Python 3.13+ Though ipdb should support this
615 656 feature in older version of Python. I invite you to look at the `CPython changes
616 657 and docs <https://github.com/python/cpython/pull/106676>`__ for more details.
617 658
618 659 In short, once in post-mortem debugger (``%debug``), you can use the ipdb
619 660 ``exceptions`` command to switch exceptions, for example:
620 661
621 662 .. code-block:: ipython
622 663
623 664 In [1]: def foo(x):
624 665 ...: try:
625 666 ...: bar(x)
626 667 ...: except Exception as e:
627 668 ...: raise ValueError("foo (): bar failed") from e
628 669 ...:
629 670 ...: def bar(x):
630 671 ...: 1 / X
631 672 ...:
632 673
633 674 In [2]: foo(0)
634 675 ---------------------------------------------------------------------------
635 676 NameError Traceback (most recent call last)
636 677 Cell In[1], line 3, in foo(x)
637 678 2 try:
638 679 ----> 3 bar(x)
639 680 4 except Exception as e:
640 681
641 682 Cell In[1], line 9, in bar(x)
642 683 8 def bar(x):
643 684 ----> 9 1 / X
644 685
645 686 NameError: name 'X' is not defined
646 687
647 688 The above exception was the direct cause of the following exception:
648 689
649 690 ValueError Traceback (most recent call last)
650 691 Cell In[2], line 1
651 692 ----> 1 foo(0)
652 693
653 694 Cell In[1], line 5, in foo(x)
654 695 3 bar(x)
655 696 4 except Exception as e:
656 697 ----> 5 raise ValueError("foo (): bar failed") from e
657 698
658 699 ValueError: foo (): bar failed
659 700
660 701 In [3]: %debug
661 702 > <ipython-input-1-b0bbdc271ffb>(5)foo()
662 703 3 bar(x)
663 704 4 except Exception as e:
664 705 ----> 5 raise ValueError("foo (): bar failed") from e
665 706
666 707 In previous ipdb you could not go into the bar error, now from within pdb you
667 708 can use ``exceptions``:
668 709
669 710 .. code-block:: ipython
670 711
671 712 ipdb> exceptions
672 713 0 NameError("name 'X' is not defined")
673 714 > 1 ValueError('foo (): bar failed')
674 715
675 716 ipdb> exceptions 0
676 717 > <ipython-input-1-b0bbdc271ffb>(9)bar()
677 718 6
678 719 7
679 720 8 def bar(x):
680 721 ----> 9 1 / X
681 722 10
682 723
683 724 ipdb>
684 725
685 726 In particular I want to thank the `D.E. Shaw group <https://www.deshaw.com/>`__
686 727 for suggesting and funding the two largest feature as well as many bug fixes of
687 728 this release.
688 729
689 730 As usual you can find the full list of PRs on GitHub under `the 8.15 milestone
690 731 <https://github.com/ipython/ipython/milestone/120?closed=1>`__.
691 732
692 733
693 734
694 735 .. _version 8.14:
695 736
696 737 IPython 8.14
697 ------------
738 ============
698 739
699 740 Small release of IPython.
700 741
701 742 - :ghpull:`14080` fixes some shortcuts issues.
702 743 - :ghpull:`14056` Add option to ``%autoreload`` to hide errors when reloading code. This will be the default for spyder
703 744 user is my understanding.
704 745 - :ghpull:`14039` (and :ghpull:`14040`) to show exception notes in tracebacks.
705 746
706 747 - :ghpull:`14076` Add option to EventManager to prevent printing
707 748
708 749
709 750 SPEC 0 and SPEC 4
710 ~~~~~~~~~~~~~~~~~
751 -----------------
711 752
712 753 You've heard about the NEPs, (NumPy enhancement Proposal), having a NEP for something non-numpy specific was sometime confusing.
713 754 Long live the `SPECs <https://scientific-python.org/specs/>`_.
714 755
715 756 We are now trying to follow SPEC 0 (aka old NEP 29) for support of upstream libraries.
716 757
717 758 We also now try to follow SPEC 4 (test and publish nightly on a centralized nightly repository).
718 759 We encourage you to do so as well in order to report breakage, and contribute to the SPEC process !
719 760
720 761
721 762 Python 3.12 compatibility ?
722 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
763 ---------------------------
723 764
724 765 Python 3.12 changed its tokenizer to have better support for f-strings and allow arbitrary expression.
725 766 This is a great new feature and performance improvement in Python 3.12.
726 767
727 768 Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will
728 769 break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guaranteed.
729 770 It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell
730 771 escape (``! ....``), ..., as well as how to do it if we can.
731 772
732 773 In addition even if we there is technical feasibility to do so, it is no clear we have the resources to do it.
733 774 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
734 775 features are critical.
735 776
736 777 We are not going to pin IPython to Python ``<3.12`` as otherwise on install pip would downgrade/resolve to IPython 8.13,
737 778 so if you plan to update to Python 3.12 after its release, we encourage for extra care.
738 779
739 780
740 781 .. _version 8.13.1:
741 782 .. _version 8.13.2:
742 783 .. _version 8.12.2:
743 784
744 785 IPython 8.13.1, 8.13.2 and 8.12.2
745 ---------------------------------
786 =================================
746 787
747 788 3 quick in succession patch release of IPython in addition to IPython 8.13.0
748 789 having been yanked.
749 790
750 791 IPython 8.13.0 was improperly tagged as still compatible with Python 3.8, and
751 792 still had some mention of compatibility with 3.8. IPython 8.13.1 is identical to
752 793 8.13 but with the exception of being correctly tagged. This release and yank was
753 794 mostly done to fix CI.
754 795
755 796 IPython 8.12.2 and 8.13.2 contain UI fixes, with respect to right arrow not
756 797 working in some case in the terminal, and 8.12.2 contain also a requested
757 798 backport of :ghpull:`14029` (Allow safe access to the ``__getattribute__``
758 799 method of modules) for tab completion.
759 800
760 801 .. _version 8.13:
761 802
762 803 IPython 8.13
763 ------------
804 ============
764 805
765 806 As usual for the end of the month, minor release of IPython. This release is
766 807 significant in that it not only has a number of bugfixes, but also drop support
767 808 for Python 3.8 as per NEP 29 (:ghpull:`14023`).
768 809
769 810 All the critical bugfixes have been backported onto the 8.12.1 release (see
770 811 below). In addition to that went into 8.12.1 you'll find:
771 812
772 813 - Pretty representation for ``Counter`` has been fixed to match the Python one
773 814 and be in decreasing order. :ghpull:`14032`
774 815 - Module completion is better when jedi is disabled :ghpull:`14029`.
775 816 - Improvement of ``%%bash`` magic that would get stuck :ghpull:`14019`
776 817
777 818
778 819 We hope you enjoy this release an will maybe see you at JupyterCon in less than
779 820 two weeks.
780 821
781 822 As usual you can find the full list of PRs on GitHub under `the 8.13 milestone
782 823 <https://github.com/ipython/ipython/milestone/115?closed=1>`__.
783 824
784 825 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
785 826 work on IPython and related libraries.
786 827
787 828
788 829 .. _version 8.12.1:
789 830
790 831 IPython 8.12.1
791 --------------
832 ==============
792 833
793 834 This is the twin release of IPython 8.13 that contain only critical UI and bug
794 835 fixes. The next minor version of IPython has dropped support for Python 3.8 – as
795 836 per Nep 29 and this IPython 8.12.x will now only receive bugfixes.
796 837
797 838
798 839 - :ghpull:`14004` Fix a bug introduced in IPython 8.12 that crash when
799 840 inspecting some docstrings.
800 841 - :ghpull:`14010` Fix fast traceback code that was not working in some case.
801 842 - :ghpull:`14014` Fix ``%page`` magic broken in some case.
802 843 - :ghpull:`14026`, :ghpull:`14027` Tweak default shortcut with respect to
803 844 autosuggestions.
804 845 - :ghpull:`14033` add back the ability to use ``.get()`` on OInfo object for
805 846 backward compatibility with h5py (this will be re-deprecated later, and h5py
806 847 will also get a fix).
807 848
808 849 As usual you can find the full list of PRs on GitHub under `the 8.12.1 milestone
809 850 <https://github.com/ipython/ipython/milestone/116?closed=1>`__.
810 851
811 852 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
812 853 work on IPython and related libraries.
813 854
814 855 .. _version 8.12.0:
815 856
816 857 IPython 8.12
817 ------------
858 ============
818 859
819 860 Hopefully slightly early release for IPython 8.12. Last Thursday of the month,
820 861 even if I guess it's likely already Friday somewhere in the pacific ocean.
821 862
822 863 A number of PRs and bug fixes this month with close to 20 PRs merged !
823 864
824 865
825 866 The IPython repo reached :ghpull:`14000` !! Actually the PR that create those exact release
826 867 note is :ghpull:`14000`. Ok, more issues and PR is not always better, and I'd
827 868 love to have more time to close issues and Pull Requests.
828 869
829 870 Let's note that in less than 2 month JupyterCon is back, in Paris please visit
830 871 `jupytercon.com <https://jupytercon.com>`__, and looking forward to see you
831 872 there.
832 873
833 874 Packagers should take note that ``typing_extension`` is now a mandatory dependency
834 875 for Python versions ``<3.10``.
835 876
836 877
837 878
838 879 Let's note also that according to `NEP29
839 880 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, It is soon time to
840 881 stop support for Python 3.8 that will be release more than 3 and 1/2 years ago::
841 882
842 883 On Apr 14, 2023 drop support for Python 3.8 (initially released on Oct 14, 2019)
843 884
844 885 Thus I am likely to stop advertising support for Python 3.8 in the next
845 886 release at the end of April.
846 887
847 888
848 889 Here are some miscellaneous updates of interest:
849 890
850 891 - :ghpull:`13957` brings updates to the Qt integration, particularly for Qt6.
851 892 - :ghpull:`13960` fixes the %debug magic command to give access to the local
852 893 scope.
853 894 - :ghpull:`13964` fixes some crashes with the new fast traceback code. Note that
854 895 there are still some issues with the fast traceback code, and I a, likely
855 896 to fix and tweak behavior.
856 897 - :ghpull:`13973` We are slowly migrating IPython internals to use proper type
857 898 objects/dataclasses instead of dictionaries to allow static typing checks.
858 899 These are technically public API and could lead to breakage, so please let us
859 900 know if that's the case and I'll mitigate.
860 901 - :ghpull:`13990`, :ghpull:`13991`, :ghpull:`13994` all improve keybinding and
861 902 shortcut configurability.
862 903
863 904 As usual you can find the full list of PRs on GitHub under `the 8.12 milestone
864 905 <https://github.com/ipython/ipython/milestone/114?closed=1>`__.
865 906
866 907 We want to thank the D.E. Shaw group for requesting and sponsoring the work on
867 908 the following big feature. We had productive discussions on how to best expose
868 909 this feature
869 910
870 911 Dynamic documentation dispatch
871 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
912 ------------------------------
872 913
873 914 We are experimenting with dynamic documentation dispatch for object attribute.
874 915 See :ghissue:`13860`. The goal is to allow object to define documentation for
875 916 their attributes, properties, even when those are dynamically defined with
876 917 `__getattr__`.
877 918
878 919 In particular when those objects are base types it can be useful to show the
879 920 documentation
880 921
881 922
882 923 .. code-block:: ipython
883 924
884 925
885 926 In [1]: class User:
886 927 ...:
887 928 ...: __custom_documentations__ = {
888 929 ...: "first": "The first name of the user.",
889 930 ...: "last": "The last name of the user.",
890 931 ...: }
891 932 ...:
892 933 ...: first:str
893 934 ...: last:str
894 935 ...:
895 936 ...: def __init__(self, first, last):
896 937 ...: self.first = first
897 938 ...: self.last = last
898 939 ...:
899 940 ...: @property
900 941 ...: def full(self):
901 942 ...: """`self.first` and `self.last` joined by a space."""
902 943 ...: return self.first + " " + self.last
903 944 ...:
904 945 ...:
905 946 ...: user = Person('Jane', 'Doe')
906 947
907 948 In [2]: user.first?
908 949 Type: str
909 950 String form: Jane
910 951 Length: 4
911 952 Docstring: the first name of a the person object, a str
912 953 Class docstring:
913 954 ....
914 955
915 956 In [3]: user.last?
916 957 Type: str
917 958 String form: Doe
918 959 Length: 3
919 960 Docstring: the last name, also a str
920 961 ...
921 962
922 963
923 964 We can see here the symmetry with IPython looking for the docstring on the
924 965 properties:
925 966
926 967 .. code-block:: ipython
927 968
928 969
929 970 In [4]: user.full?
930 971 HERE
931 972 Type: property
932 973 String form: <property object at 0x102bb15d0>
933 974 Docstring: first and last join by a space
934 975
935 976
936 977 Note that while in the above example we use a static dictionary, libraries may
937 978 decide to use a custom object that define ``__getitem__``, we caution against
938 979 using objects that would trigger computation to show documentation, but it is
939 980 sometime preferable for highly dynamic code that for example export ans API as
940 981 object.
941 982
942 983
943 984
944 985 .. _version 8.11.0:
945 986
946 987 IPython 8.11
947 ------------
988 ============
948 989
949 990 Back on almost regular monthly schedule for IPython with end-of-month
950 991 really-late-Friday release to make sure some bugs are properly fixed.
951 992 Small addition of with a few new features, bugfix and UX improvements.
952 993
953 994 This is a non-exhaustive list, but among other you will find:
954 995
955 996 Faster Traceback Highlighting
956 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
997 -----------------------------
957 998
958 999 Resurrection of pre-IPython-8 traceback highlighting code.
959 1000
960 1001 Really long and complicated files were slow to highlight in traceback with
961 1002 IPython 8 despite upstream improvement that make many case better. Therefore
962 1003 starting with IPython 8.11 when one of the highlighted file is more than 10 000
963 1004 line long by default, we'll fallback to a faster path that does not have all the
964 1005 features of highlighting failing AST nodes.
965 1006
966 1007 This can be configures by setting the value of
967 1008 ``IPython.code.ultratb.FAST_THRESHOLD`` to an arbitrary low or large value.
968 1009
969 1010
970 1011 Autoreload verbosity
971 ~~~~~~~~~~~~~~~~~~~~
1012 --------------------
972 1013
973 1014 We introduce more descriptive names for the ``%autoreload`` parameter:
974 1015
975 1016 - ``%autoreload now`` (also ``%autoreload``) - perform autoreload immediately.
976 1017 - ``%autoreload off`` (also ``%autoreload 0``) - turn off autoreload.
977 1018 - ``%autoreload explicit`` (also ``%autoreload 1``) - turn on autoreload only for modules
978 1019 whitelisted by ``%aimport`` statements.
979 1020 - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those
980 1021 blacklisted by ``%aimport`` statements.
981 1022 - ``%autoreload complete`` (also ``%autoreload 3``) - all the features of ``all`` but also adding new
982 1023 objects from the imported modules (see
983 1024 IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects).
984 1025
985 1026 The original designations (e.g. "2") still work, and these new ones are case-insensitive.
986 1027
987 1028 Additionally, the option ``--print`` or ``-p`` can be added to the line to print the names of
988 1029 modules being reloaded. Similarly, ``--log`` or ``-l`` will output the names to the logger at INFO
989 1030 level. Both can be used simultaneously.
990 1031
991 1032 The parsing logic for ``%aimport`` is now improved such that modules can be whitelisted and
992 1033 blacklisted in the same line, e.g. it's now possible to call ``%aimport os, -math`` to include
993 1034 ``os`` for ``%autoreload explicit`` and exclude ``math`` for modes ``all`` and ``complete``.
994 1035
995 1036 Terminal shortcuts customization
996 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1037 --------------------------------
997 1038
998 1039 Previously modifying shortcuts was only possible by hooking into startup files
999 1040 and practically limited to adding new shortcuts or removing all shortcuts bound
1000 1041 to a specific key. This release enables users to override existing terminal
1001 1042 shortcuts, disable them or add new keybindings.
1002 1043
1003 1044 For example, to set the :kbd:`right` to accept a single character of auto-suggestion
1004 1045 you could use::
1005 1046
1006 1047 my_shortcuts = [
1007 1048 {
1008 1049 "command": "IPython:auto_suggest.accept_character",
1009 1050 "new_keys": ["right"]
1010 1051 }
1011 1052 ]
1012 1053 %config TerminalInteractiveShell.shortcuts = my_shortcuts
1013 1054
1014 1055 You can learn more in :std:configtrait:`TerminalInteractiveShell.shortcuts`
1015 1056 configuration reference.
1016 1057
1017 1058 Miscellaneous
1018 ~~~~~~~~~~~~~
1059 -------------
1019 1060
1020 1061 - ``%gui`` should now support PySide6. :ghpull:`13864`
1021 1062 - Cli shortcuts can now be configured :ghpull:`13928`, see above.
1022 1063 (note that there might be an issue with prompt_toolkit 3.0.37 and shortcut configuration).
1023 1064
1024 1065 - Capture output should now respect ``;`` semicolon to suppress output.
1025 1066 :ghpull:`13940`
1026 1067 - Base64 encoded images (in jupyter frontend), will not have trailing newlines.
1027 1068 :ghpull:`13941`
1028 1069
1029 1070 As usual you can find the full list of PRs on GitHub under `the 8.11 milestone
1030 1071 <https://github.com/ipython/ipython/milestone/113?closed=1>`__.
1031 1072
1032 1073 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1033 1074 work on IPython and related libraries.
1034 1075
1035 1076 .. _version 8.10.0:
1036 1077
1037 1078 IPython 8.10
1038 ------------
1079 ============
1039 1080
1040 1081 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
1041 1082 This is a really low severity CVE that you most likely are not affected by unless:
1042 1083
1043 1084 - You are on windows.
1044 1085 - You have a custom build of Python without ``_ctypes``
1045 1086 - You cd or start IPython or Jupyter in untrusted directory which names may be
1046 1087 valid shell commands.
1047 1088
1048 1089 You can read more on `the advisory
1049 1090 <https://github.com/ipython/ipython/security/advisories/GHSA-29gw-9793-fvw7>`__.
1050 1091
1051 1092 In addition to fixing this CVE we also fix a couple of outstanding bugs and issues.
1052 1093
1053 1094 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
1054 1095 <https://github.com/ipython/ipython/milestone/112?closed=1>`__.
1055 1096
1056 1097 In Particular:
1057 1098
1058 1099 - bump minimum numpy to `>=1.21` version following NEP29. :ghpull:`13930`
1059 1100 - fix for compatibility with MyPy 1.0. :ghpull:`13933`
1060 1101 - fix nbgrader stalling when IPython's ``showtraceback`` function is
1061 1102 monkeypatched. :ghpull:`13934`
1062 1103
1063 1104
1064 1105
1065 1106 As this release also contains those minimal changes in addition to fixing the
1066 1107 CVE I decided to bump the minor version anyway.
1067 1108
1068 1109 This will not affect the normal release schedule, so IPython 8.11 is due in
1069 1110 about 2 weeks.
1070 1111
1071 1112 .. _version 8.9.0:
1072 1113
1073 1114 IPython 8.9.0
1074 -------------
1115 =============
1075 1116
1076 1117 Second release of IPython in 2023, last Friday of the month, we are back on
1077 1118 track. This is a small release with a few bug-fixes, and improvements, mostly
1078 1119 with respect to terminal shortcuts.
1079 1120
1080 1121
1081 1122 The biggest improvement for 8.9 is a drastic amelioration of the
1082 1123 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
1083 active contributor `@krassowski <https://github.com/krassowski>`.
1124 active contributor `@krassowski <https://github.com/krassowski>`__.
1084 1125
1085 1126 - ``right`` accepts a single character from suggestion
1086 1127 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
1087 1128 precedence and need to be disabled to make this work)
1088 1129 - ``backspace`` deletes a character and resumes hinting autosuggestions
1089 1130 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
1090 1131 - ``backspace`` deletes a character and resumes hinting autosuggestions
1091 1132 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
1092 1133 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
1093 1134
1094 1135 This is best described by the Gif posted by `@krassowski
1095 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
1136 <https://github.com/krassowski>`__, and in the PR itself :ghpull:`13888`.
1096 1137
1097 1138 .. image:: ../_images/autosuggest.gif
1098 1139
1099 1140 Please report any feedback in order for us to improve the user experience.
1100 1141 In particular we are also working on making the shortcuts configurable.
1101 1142
1102 1143 If you are interested in better terminal shortcuts, I also invite you to
1103 1144 participate in issue `13879
1104 1145 <https://github.com/ipython/ipython/issues/13879>`__.
1105 1146
1106 1147
1107 1148 As we follow `NEP29
1108 1149 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
1109 1150 IPython will officially stop supporting numpy 1.20, and will stop supporting
1110 1151 Python 3.8 after April release.
1111 1152
1112 1153 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
1113 1154 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
1114 1155
1115 1156
1116 1157 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1117 1158 work on IPython and related libraries.
1118 1159
1119 1160 .. _version 8.8.0:
1120 1161
1121 1162 IPython 8.8.0
1122 -------------
1163 =============
1123 1164
1124 1165 First release of IPython in 2023 as there was no release at the end of
1125 1166 December.
1126 1167
1127 1168 This is an unusually big release (relatively speaking) with more than 15 Pull
1128 1169 Requests merged.
1129 1170
1130 1171 Of particular interest are:
1131 1172
1132 1173 - :ghpull:`13852` that replaces the greedy completer and improves
1133 1174 completion, in particular for dictionary keys.
1134 1175 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
1135 1176 bundled in wheels.
1136 1177 - :ghpull:`13869` that implements tab completions for IPython options in the
1137 1178 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
1138 1179 believe this also needs a recent version of Traitlets.
1139 1180 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
1140 1181 configurable.
1141 1182 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
1142 1183 entry points that would be included in the wheel would be the one of the
1143 1184 Python version that was used to build the ``whl`` file.
1144 1185
1145 1186 In no particular order, the rest of the changes update the test suite to be
1146 1187 compatible with Pygments 2.14, various docfixes, testing on more recent python
1147 1188 versions and various updates.
1148 1189
1149 1190 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
1150 1191 <https://github.com/ipython/ipython/milestone/110>`__.
1151 1192
1152 1193 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
1153 1194 merging contributions.
1154 1195
1155 1196 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1156 1197 work on IPython and related libraries.
1157 1198
1158 1199 .. _version 8.7.0:
1159 1200
1160 1201 IPython 8.7.0
1161 -------------
1202 =============
1162 1203
1163 1204
1164 1205 Small release of IPython with a couple of bug fixes and new features for this
1165 1206 month. Next month is the end of year, it is unclear if there will be a release
1166 1207 close to the new year's eve, or if the next release will be at the end of January.
1167 1208
1168 1209 Here are a few of the relevant fixes,
1169 1210 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
1170 1211 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
1171 1212
1172 1213
1173 1214 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
1174 1215 - IPython shipped with the ``py.typed`` marker now, and we are progressively
1175 1216 adding more types. :ghpull:`13831`
1176 1217 - :ghpull:`13817` add configuration of code blacks formatting.
1177 1218
1178 1219
1179 1220 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1180 1221 work on IPython and related libraries.
1181 1222
1182 1223
1183 1224 .. _version 8.6.0:
1184 1225
1185 1226 IPython 8.6.0
1186 -------------
1227 =============
1187 1228
1188 1229 Back to a more regular release schedule (at least I try), as Friday is
1189 1230 already over by more than 24h hours. This is a slightly bigger release with a
1190 1231 few new features that contain no less than 25 PRs.
1191 1232
1192 1233 We'll notably found a couple of non negligible changes:
1193 1234
1194 1235 The ``install_ext`` and related functions have been removed after being
1195 1236 deprecated for years. You can use pip to install extensions. ``pip`` did not
1196 1237 exist when ``install_ext`` was introduced. You can still load local extensions
1197 1238 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
1198 1239
1199 1240 IPython now has extra entry points that use the major *and minor* version of
1200 1241 python. For some of you this means that you can do a quick ``ipython3.10`` to
1201 1242 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
1202 1243 as your main Python. :ghpull:`13743`
1203 1244
1204 1245 The completer matcher API has been improved. See :ghpull:`13745`. This should
1205 1246 improve the type inference and improve dict keys completions in many use case.
1206 1247 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
1207 1248 it.
1208 1249
1209 1250 The color of error nodes in tracebacks can now be customized. See
1210 1251 :ghpull:`13756`. This is a private attribute until someone finds the time to
1211 1252 properly add a configuration option. Note that with Python 3.11 that also shows
1212 1253 the relevant nodes in traceback, it would be good to leverage this information
1213 1254 (plus the "did you mean" info added on attribute errors). But that's likely work
1214 1255 I won't have time to do before long, so contributions welcome.
1215 1256
1216 1257 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
1217 1258
1218 1259
1219 1260 The ``open()`` function present in the user namespace by default will now refuse
1220 1261 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
1221 1262 This mostly occurs in teaching context when incorrect values get passed around.
1222 1263
1223 1264
1224 1265 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
1225 1266 objects inside arrays. That is to say, the following now works::
1226 1267
1227 1268
1228 1269 >>> def my_func(*arg, **kwargs):pass
1229 1270 >>> container = [my_func]
1230 1271 >>> container[0]?
1231 1272
1232 1273
1233 1274 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
1234 1275 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
1235 1276 group for the request and sponsoring the work.
1236 1277
1237 1278
1238 1279 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
1239 1280 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
1240 1281
1241 1282 Thanks to all hacktoberfest contributors, please contribute to
1242 1283 `closember.org <https://closember.org/>`__.
1243 1284
1244 1285 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1245 1286 work on IPython and related libraries.
1246 1287
1247 1288 .. _version 8.5.0:
1248 1289
1249 1290 IPython 8.5.0
1250 -------------
1291 =============
1251 1292
1252 1293 First release since a couple of month due to various reasons and timing preventing
1253 1294 me for sticking to the usual monthly release the last Friday of each month. This
1254 1295 is of non negligible size as it has more than two dozen PRs with various fixes
1255 1296 an bug fixes.
1256 1297
1257 1298 Many thanks to everybody who contributed PRs for your patience in review and
1258 1299 merges.
1259 1300
1260 1301 Here is a non-exhaustive list of changes that have been implemented for IPython
1261 1302 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
1262 1303 8.5 milestone
1263 1304 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
1264 1305
1265 1306 - Added a shortcut for accepting auto suggestion. The End key shortcut for
1266 1307 accepting auto-suggestion This binding works in Vi mode too, provided
1267 1308 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
1268 1309 ``True`` :ghpull:`13566`.
1269 1310
1270 1311 - No popup in window for latex generation when generating latex (e.g. via
1271 1312 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
1272 1313
1273 1314 - Fixed error raised when attempting to tab-complete an input string with
1274 1315 consecutive periods or forward slashes (such as "file:///var/log/...").
1275 1316 :ghpull:`13675`
1276 1317
1277 1318 - Relative filenames in Latex rendering :
1278 1319 The `latex_to_png_dvipng` command internally generates input and output file
1279 1320 arguments to `latex` and `dvipis`. These arguments are now generated as
1280 1321 relative files to the current working directory instead of absolute file
1281 1322 paths. This solves a problem where the current working directory contains
1282 1323 characters that are not handled properly by `latex` and `dvips`. There are
1283 1324 no changes to the user API. :ghpull:`13680`
1284 1325
1285 1326 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
1286 1327 restructured text documents executed with the ipython-sphinx extension
1287 1328 skipped any lines of code containing python decorators. :ghpull:`13612`
1288 1329
1289 1330 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
1290 1331 - Fix paste magic on wayland. :ghpull:`13671`
1291 1332 - show maxlen in deque's repr. :ghpull:`13648`
1292 1333
1293 1334 Restore line numbers for Input
1294 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1335 ------------------------------
1295 1336
1296 1337 Line number information in tracebacks from input are restored.
1297 1338 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
1298 1339
1299 1340 So, instead of::
1300 1341
1301 1342 ---------------------------------------------------------------------------
1302 1343 ZeroDivisionError Traceback (most recent call last)
1303 1344 Input In [3], in <cell line: 1>()
1304 1345 ----> 1 myfunc(2)
1305 1346
1306 1347 Input In [2], in myfunc(z)
1307 1348 1 def myfunc(z):
1308 1349 ----> 2 foo.boo(z-1)
1309 1350
1310 1351 File ~/code/python/ipython/foo.py:3, in boo(x)
1311 1352 2 def boo(x):
1312 1353 ----> 3 return 1/(1-x)
1313 1354
1314 1355 ZeroDivisionError: division by zero
1315 1356
1316 1357 The error traceback now looks like::
1317 1358
1318 1359 ---------------------------------------------------------------------------
1319 1360 ZeroDivisionError Traceback (most recent call last)
1320 1361 Cell In [3], line 1
1321 1362 ----> 1 myfunc(2)
1322 1363
1323 1364 Cell In [2], line 2, in myfunc(z)
1324 1365 1 def myfunc(z):
1325 1366 ----> 2 foo.boo(z-1)
1326 1367
1327 1368 File ~/code/python/ipython/foo.py:3, in boo(x)
1328 1369 2 def boo(x):
1329 1370 ----> 3 return 1/(1-x)
1330 1371
1331 1372 ZeroDivisionError: division by zero
1332 1373
1333 1374 or, with xmode=Plain::
1334 1375
1335 1376 Traceback (most recent call last):
1336 1377 Cell In [12], line 1
1337 1378 myfunc(2)
1338 1379 Cell In [6], line 2 in myfunc
1339 1380 foo.boo(z-1)
1340 1381 File ~/code/python/ipython/foo.py:3 in boo
1341 1382 return 1/(1-x)
1342 1383 ZeroDivisionError: division by zero
1343 1384
1344 1385 :ghpull:`13560`
1345 1386
1346 1387 New setting to silence warning if working inside a virtual environment
1347 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1388 ----------------------------------------------------------------------
1348 1389
1349 1390 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
1350 1391
1351 1392 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
1352 1393
1353 1394 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
1354 1395
1355 1396 :ghpull:`13706`
1356 1397
1357 1398 -------
1358 1399
1359 1400 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1360 1401 work on IPython and related libraries.
1361 1402
1362 1403
1363 1404 .. _version 8.4.0:
1364 1405
1365 1406 IPython 8.4.0
1366 -------------
1407 =============
1367 1408
1368 1409 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
1369 1410 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
1370 1411
1371 1412 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1372 1413 work on IPython and related libraries.
1373 1414
1374 1415
1375 1416 .. _version 8.3.0:
1376 1417
1377 1418 IPython 8.3.0
1378 -------------
1419 =============
1379 1420
1380 1421 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
1381 1422 ``set_next_input`` as most frontend allow proper multiline editing and it was
1382 1423 causing issues for many users of multi-cell frontends. This has been backported to 7.33
1383 1424
1384 1425
1385 1426 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
1386 1427 the info object when frontend provides it. This has been backported to 7.33
1387 1428
1388 1429 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
1389 1430 auto-suggestion.
1390 1431
1391 1432 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
1392 1433
1393 1434 .. _version 8.2.0:
1394 1435
1395 1436 IPython 8.2.0
1396 -------------
1437 =============
1397 1438
1398 1439 IPython 8.2 mostly bring bugfixes to IPython.
1399 1440
1400 1441 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
1401 1442 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
1402 1443 - History is now pulled from the sqitel database and not from in-memory.
1403 1444 In particular when using the ``%paste`` magic, the content of the pasted text will
1404 1445 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
1405 1446 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
1406 1447 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
1407 1448
1408 1449
1409 1450 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
1410 1451 random, and would appreciate help if you find a reproducible minimal case. I've
1411 1452 tried to make various changes to the codebase to mitigate it, but a proper fix
1412 1453 will be difficult without understanding the cause.
1413 1454
1414 1455
1415 1456 All the issues on pull-requests for this release can be found in the `8.2
1416 1457 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
1417 1458 documentation only PR can be found as part of the `7.33 milestone
1418 1459 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
1419 1460
1420 1461 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1421 1462 work on IPython and related libraries.
1422 1463
1423 1464 .. _version 8.1.1:
1424 1465
1425 1466 IPython 8.1.1
1426 -------------
1467 =============
1427 1468
1428 1469 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
1429 1470
1430 1471 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
1431 1472 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
1432 1473
1433 1474 .. _version 8.1:
1434 1475
1435 1476 IPython 8.1.0
1436 -------------
1477 =============
1437 1478
1438 1479 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
1439 1480 updates a few behaviors that were problematic with the 8.0 as with many new major
1440 1481 release.
1441 1482
1442 1483 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
1443 1484 features listed in :ref:`version 7.32`.
1444 1485
1445 1486 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
1446 1487 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
1447 1488 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
1448 1489 is now explicit in ``setup.cfg``/``setup.py``
1449 1490 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
1450 1491 - Multi-line edit executes too early with await. :ghpull:`13424`
1451 1492
1452 1493 - ``black`` is back as an optional dependency, and autoformatting disabled by
1453 1494 default until some fixes are implemented (black improperly reformat magics).
1454 1495 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
1455 1496 reformatter has been added :ghpull:`13528` . You can use
1456 1497 ``TerminalInteractiveShell.autoformatter="black"``,
1457 1498 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formatting
1458 1499 with black, or switch to yapf.
1459 1500
1460 1501 - Fix and issue where ``display`` was not defined.
1461 1502
1462 1503 - Auto suggestions are now configurable. Currently only
1463 1504 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
1464 1505 welcomed. :ghpull:`13475`
1465 1506
1466 1507 - multiple packaging/testing improvement to simplify downstream packaging
1467 1508 (xfail with reasons, try to not access network...).
1468 1509
1469 1510 - Update deprecation. ``InteractiveShell.magic`` internal method has been
1470 1511 deprecated for many years but did not emit a warning until now.
1471 1512
1472 1513 - internal ``appended_to_syspath`` context manager has been deprecated.
1473 1514
1474 1515 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
1475 1516
1476 1517 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
1477 1518
1478 1519 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
1479 1520
1480 1521 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
1481 1522 removed.
1482 1523
1483 1524 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
1484 1525
1485 1526
1486 1527 We want to remind users that IPython is part of the Jupyter organisations, and
1487 1528 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
1488 1529 Abuse and non-respectful comments on discussion will not be tolerated.
1489 1530
1490 1531 Many thanks to all the contributors to this release, many of the above fixed issues and
1491 1532 new features were done by first time contributors, showing there is still
1492 1533 plenty of easy contribution possible in IPython
1493 1534 . You can find all individual contributions
1494 1535 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
1495 1536
1496 1537 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1497 1538 work on IPython and related libraries. In particular the Lazy autoloading of
1498 1539 magics that you will find described in the 7.32 release notes.
1499 1540
1500 1541
1501 1542 .. _version 8.0.1:
1502 1543
1503 1544 IPython 8.0.1 (CVE-2022-21699)
1504 ------------------------------
1545 ==============================
1505 1546
1506 1547 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
1507 1548 values in order to prevent potential Execution with Unnecessary Privileges.
1508 1549
1509 1550 Almost all version of IPython looks for configuration and profiles in current
1510 1551 working directory. Since IPython was developed before pip and environments
1511 1552 existed it was used a convenient way to load code/packages in a project
1512 1553 dependent way.
1513 1554
1514 1555 In 2022, it is not necessary anymore, and can lead to confusing behavior where
1515 1556 for example cloning a repository and starting IPython or loading a notebook from
1516 1557 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
1517 1558 code execution.
1518 1559
1519 1560
1520 1561 I did not find any standard way for packaged to advertise CVEs they fix, I'm
1521 1562 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
1522 1563 list the CVEs that should have been fixed. This attribute is informational only
1523 1564 as if a executable has a flaw, this value can always be changed by an attacker.
1524 1565
1525 1566 .. code::
1526 1567
1527 1568 In [1]: import IPython
1528 1569
1529 1570 In [2]: IPython.__patched_cves__
1530 1571 Out[2]: {'CVE-2022-21699'}
1531 1572
1532 1573 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
1533 1574 Out[3]: True
1534 1575
1535 1576 Thus starting with this version:
1536 1577
1537 1578 - The current working directory is not searched anymore for profiles or
1538 1579 configurations files.
1539 1580 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
1540 1581 the list of fixed CVE. This is informational only.
1541 1582
1542 1583 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
1543 1584
1544 1585
1545 1586 .. _version 8.0:
1546 1587
1547 1588 IPython 8.0
1548 -----------
1589 ===========
1549 1590
1550 1591 IPython 8.0 is bringing a large number of new features and improvements to both the
1551 1592 user of the terminal and of the kernel via Jupyter. The removal of compatibility
1552 1593 with an older version of Python is also the opportunity to do a couple of
1553 1594 performance improvements in particular with respect to startup time.
1554 1595 The 8.x branch started diverging from its predecessor around IPython 7.12
1555 1596 (January 2020).
1556 1597
1557 1598 This release contains 250+ pull requests, in addition to many of the features
1558 1599 and backports that have made it to the 7.x branch. Please see the
1559 1600 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
1560 1601
1561 1602 Please feel free to send pull requests to update those notes after release,
1562 1603 I have likely forgotten a few things reviewing 250+ PRs.
1563 1604
1564 1605 Dependencies changes/downstream packaging
1565 1606 -----------------------------------------
1566 1607
1567 1608 Most of our building steps have been changed to be (mostly) declarative
1568 1609 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
1569 1610 looking for help to do so.
1570 1611
1571 1612 - minimum supported ``traitlets`` version is now 5+
1572 1613 - we now require ``stack_data``
1573 1614 - minimal Python is now 3.8
1574 1615 - ``nose`` is not a testing requirement anymore
1575 1616 - ``pytest`` replaces nose.
1576 1617 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
1577 1618 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
1578 1619 not have much effect on packaging.
1579 1620
1580 1621
1581 1622 Deprecation and removal
1582 1623 -----------------------
1583 1624
1584 1625 We removed almost all features, arguments, functions, and modules that were
1585 1626 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
1586 1627 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
1587 1628 The few remaining deprecated features we left have better deprecation warnings
1588 1629 or have been turned into explicit errors for better error messages.
1589 1630
1590 1631 I will use this occasion to add the following requests to anyone emitting a
1591 1632 deprecation warning:
1592 1633
1593 1634 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
1594 1635 caller context, and not the callee one.
1595 1636 - Please add **since which version** something is deprecated.
1596 1637
1597 1638 As a side note, it is much easier to conditionally compare version
1598 1639 numbers rather than using ``try/except`` when functionality changes with a version.
1599 1640
1600 1641 I won't list all the removed features here, but modules like ``IPython.kernel``,
1601 1642 which was just a shim module around ``ipykernel`` for the past 8 years, have been
1602 1643 removed, and so many other similar things that pre-date the name **Jupyter**
1603 1644 itself.
1604 1645
1605 1646 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
1606 1647 handled by ``load_extension``.
1607 1648
1608 1649 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
1609 1650 other packages and no longer need to be inside IPython.
1610 1651
1611 1652
1612 1653 Documentation
1613 1654 -------------
1614 1655
1615 1656 The majority of our docstrings have now been reformatted and automatically fixed by
1616 1657 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
1617 1658 to numpydoc.
1618 1659
1619 1660 Type annotations
1620 1661 ----------------
1621 1662
1622 1663 While IPython itself is highly dynamic and can't be completely typed, many of
1623 1664 the functions now have type annotations, and part of the codebase is now checked
1624 1665 by mypy.
1625 1666
1626 1667
1627 1668 Featured changes
1628 1669 ----------------
1629 1670
1630 1671 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
1631 1672 Please note as well that many features have been added in the 7.x branch as well
1632 1673 (and hence why you want to read the 7.x what's new notes), in particular
1633 1674 features contributed by QuantStack (with respect to debugger protocol and Xeus
1634 1675 Python), as well as many debugger features that I was pleased to implement as
1635 1676 part of my work at QuanSight and sponsored by DE Shaw.
1636 1677
1637 1678 Traceback improvements
1638 1679 ~~~~~~~~~~~~~~~~~~~~~~
1639 1680
1640 1681 Previously, error tracebacks for errors happening in code cells were showing a
1641 1682 hash, the one used for compiling the Python AST::
1642 1683
1643 1684 In [1]: def foo():
1644 1685 ...: return 3 / 0
1645 1686 ...:
1646 1687
1647 1688 In [2]: foo()
1648 1689 ---------------------------------------------------------------------------
1649 1690 ZeroDivisionError Traceback (most recent call last)
1650 1691 <ipython-input-2-c19b6d9633cf> in <module>
1651 1692 ----> 1 foo()
1652 1693
1653 1694 <ipython-input-1-1595a74c32d5> in foo()
1654 1695 1 def foo():
1655 1696 ----> 2 return 3 / 0
1656 1697 3
1657 1698
1658 1699 ZeroDivisionError: division by zero
1659 1700
1660 1701 The error traceback is now correctly formatted, showing the cell number in which the error happened::
1661 1702
1662 1703 In [1]: def foo():
1663 1704 ...: return 3 / 0
1664 1705 ...:
1665 1706
1666 1707 Input In [2]: foo()
1667 1708 ---------------------------------------------------------------------------
1668 1709 ZeroDivisionError Traceback (most recent call last)
1669 1710 input In [2], in <module>
1670 1711 ----> 1 foo()
1671 1712
1672 1713 Input In [1], in foo()
1673 1714 1 def foo():
1674 1715 ----> 2 return 3 / 0
1675 1716
1676 1717 ZeroDivisionError: division by zero
1677 1718
1678 1719 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
1679 1720 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
1680 1721
1681 1722 For example in the following snippet::
1682 1723
1683 1724 def foo(i):
1684 1725 x = [[[0]]]
1685 1726 return x[0][i][0]
1686 1727
1687 1728
1688 1729 def bar():
1689 1730 return foo(0) + foo(
1690 1731 1
1691 1732 ) + foo(2)
1692 1733
1693 1734
1694 1735 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
1695 1736 and IPython 8.0 is capable of telling you where the index error occurs::
1696 1737
1697 1738
1698 1739 IndexError
1699 1740 Input In [2], in <module>
1700 1741 ----> 1 bar()
1701 1742 ^^^^^
1702 1743
1703 1744 Input In [1], in bar()
1704 1745 6 def bar():
1705 1746 ----> 7 return foo(0) + foo(
1706 1747 ^^^^
1707 1748 8 1
1708 1749 ^^^^^^^^
1709 1750 9 ) + foo(2)
1710 1751 ^^^^
1711 1752
1712 1753 Input In [1], in foo(i)
1713 1754 1 def foo(i):
1714 1755 2 x = [[[0]]]
1715 1756 ----> 3 return x[0][i][0]
1716 1757 ^^^^^^^
1717 1758
1718 1759 The corresponding locations marked here with ``^`` will show up highlighted in
1719 1760 the terminal and notebooks.
1720 1761
1721 1762 Finally, a colon ``::`` and line number is appended after a filename in
1722 1763 traceback::
1723 1764
1724 1765
1725 1766 ZeroDivisionError Traceback (most recent call last)
1726 1767 File ~/error.py:4, in <module>
1727 1768 1 def f():
1728 1769 2 1/0
1729 1770 ----> 4 f()
1730 1771
1731 1772 File ~/error.py:2, in f()
1732 1773 1 def f():
1733 1774 ----> 2 1/0
1734 1775
1735 1776 Many terminals and editors have integrations enabling you to directly jump to the
1736 1777 relevant file/line when this syntax is used, so this small addition may have a high
1737 1778 impact on productivity.
1738 1779
1739 1780
1740 1781 Autosuggestions
1741 1782 ~~~~~~~~~~~~~~~
1742 1783
1743 1784 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>`__.
1744 1785
1745 1786 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
1746 1787 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
1747 1788
1748 1789 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
1749 1790 or right arrow as described below.
1750 1791
1751 1792 1. Start ipython
1752 1793
1753 1794 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
1754 1795
1755 1796 2. Run ``print("hello")``
1756 1797
1757 1798 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
1758 1799
1759 1800 3. start typing ``print`` again to see the autosuggestion
1760 1801
1761 1802 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
1762 1803
1763 1804 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
1764 1805
1765 1806 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
1766 1807
1767 1808 You can also complete word by word:
1768 1809
1769 1810 1. Run ``def say_hello(): print("hello")``
1770 1811
1771 1812 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
1772 1813
1773 1814 2. Start typing the first letter if ``def`` to see the autosuggestion
1774 1815
1775 1816 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1776 1817
1777 1818 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
1778 1819
1779 1820 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1780 1821
1781 1822 Importantly, this feature does not interfere with tab completion:
1782 1823
1783 1824 1. After running ``def say_hello(): print("hello")``, press d
1784 1825
1785 1826 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1786 1827
1787 1828 2. Press Tab to start tab completion
1788 1829
1789 1830 .. image:: ../_images/8.0/auto_suggest_d_completions.png
1790 1831
1791 1832 3A. Press Tab again to select the first option
1792 1833
1793 1834 .. image:: ../_images/8.0/auto_suggest_def_completions.png
1794 1835
1795 1836 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
1796 1837
1797 1838 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1798 1839
1799 1840 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
1800 1841
1801 1842 .. image:: ../_images/8.0/auto_suggest_match_parens.png
1802 1843
1803 1844
1804 1845 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
1805 1846
1806 1847 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
1807 1848 - 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/>`__.
1808 1849
1809 1850
1810 1851 Show pinfo information in ipdb using "?" and "??"
1811 1852 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1812 1853
1813 1854 In IPDB, it is now possible to show the information about an object using "?"
1814 1855 and "??", in much the same way that it can be done when using the IPython prompt::
1815 1856
1816 1857 ipdb> partial?
1817 1858 Init signature: partial(self, /, *args, **kwargs)
1818 1859 Docstring:
1819 1860 partial(func, *args, **keywords) - new function with partial application
1820 1861 of the given arguments and keywords.
1821 1862 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
1822 1863 Type: type
1823 1864 Subclasses:
1824 1865
1825 1866 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
1826 1867
1827 1868
1828 1869 Autoreload 3 feature
1829 1870 ~~~~~~~~~~~~~~~~~~~~
1830 1871
1831 1872 Example: When an IPython session is run with the 'autoreload' extension loaded,
1832 1873 you will now have the option '3' to select, which means the following:
1833 1874
1834 1875 1. replicate all functionality from option 2
1835 1876 2. autoload all new funcs/classes/enums/globals from the module when they are added
1836 1877 3. autoload all newly imported funcs/classes/enums/globals from external modules
1837 1878
1838 1879 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
1839 1880
1840 1881 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
1841 1882
1842 1883 Auto formatting with black in the CLI
1843 1884 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1844 1885
1845 1886 This feature was present in 7.x, but disabled by default.
1846 1887
1847 1888 In 8.0, input was automatically reformatted with Black when black was installed.
1848 1889 This feature has been reverted for the time being.
1849 1890 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
1850 1891
1851 1892 History Range Glob feature
1852 1893 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1853 1894
1854 1895 Previously, when using ``%history``, users could specify either
1855 1896 a range of sessions and lines, for example:
1856 1897
1857 1898 .. code-block:: python
1858 1899
1859 1900 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
1860 1901 # to the fifth line of 6 sessions ago.``
1861 1902
1862 1903 Or users could specify a glob pattern:
1863 1904
1864 1905 .. code-block:: python
1865 1906
1866 1907 -g <pattern> # glob ALL history for the specified pattern.
1867 1908
1868 1909 However users could *not* specify both.
1869 1910
1870 1911 If a user *did* specify both a range and a glob pattern,
1871 1912 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
1872 1913
1873 1914 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.
1874 1915
1875 1916 Don't start a multi-line cell with sunken parenthesis
1876 1917 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1877 1918
1878 1919 From now on, IPython will not ask for the next line of input when given a single
1879 1920 line with more closing than opening brackets. For example, this means that if
1880 1921 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
1881 1922 the ``...:`` prompt continuation.
1882 1923
1883 1924 IPython shell for ipdb interact
1884 1925 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1885 1926
1886 1927 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
1887 1928
1888 1929 Automatic Vi prompt stripping
1889 1930 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1890 1931
1891 1932 When pasting code into IPython, it will strip the leading prompt characters if
1892 1933 there are any. For example, you can paste the following code into the console -
1893 1934 it will still work, even though each line is prefixed with prompts (``In``,
1894 1935 ``Out``)::
1895 1936
1896 1937 In [1]: 2 * 2 == 4
1897 1938 Out[1]: True
1898 1939
1899 1940 In [2]: print("This still works as pasted")
1900 1941
1901 1942
1902 1943 Previously, this was not the case for the Vi-mode prompts::
1903 1944
1904 1945 In [1]: [ins] In [13]: 2 * 2 == 4
1905 1946 ...: Out[13]: True
1906 1947 ...:
1907 1948 File "<ipython-input-1-727bb88eaf33>", line 1
1908 1949 [ins] In [13]: 2 * 2 == 4
1909 1950 ^
1910 1951 SyntaxError: invalid syntax
1911 1952
1912 1953 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
1913 1954 skipped just as the normal ``In`` would be.
1914 1955
1915 1956 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
1916 1957 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
1917 1958
1918 1959 Empty History Ranges
1919 1960 ~~~~~~~~~~~~~~~~~~~~
1920 1961
1921 1962 A number of magics that take history ranges can now be used with an empty
1922 1963 range. These magics are:
1923 1964
1924 1965 * ``%save``
1925 1966 * ``%load``
1926 1967 * ``%pastebin``
1927 1968 * ``%pycat``
1928 1969
1929 1970 Using them this way will make them take the history of the current session up
1930 1971 to the point of the magic call (such that the magic itself will not be
1931 1972 included).
1932 1973
1933 1974 Therefore it is now possible to save the whole history to a file using
1934 1975 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
1935 1976 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
1936 1977 ``%pastebin``, or view the whole thing syntax-highlighted with a single
1937 1978 ``%pycat``.
1938 1979
1939 1980
1940 1981 Windows timing implementation: Switch to process_time
1941 1982 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1942 1983 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
1943 1984 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
1944 1985 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
1945 1986
1946 1987 Miscellaneous
1947 1988 ~~~~~~~~~~~~~
1948 1989 - Non-text formatters are not disabled in the terminal, which should simplify
1949 1990 writing extensions displaying images or other mimetypes in supporting terminals.
1950 1991 :ghpull:`12315`
1951 1992 - It is now possible to automatically insert matching brackets in Terminal IPython using the
1952 1993 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
1953 1994 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
1954 1995 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
1955 1996 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
1956 1997 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
1957 1998 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
1958 1999 - The debugger now has a persistent history, which should make it less
1959 2000 annoying to retype commands :ghpull:`13246`
1960 2001 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
1961 2002 now warn users if they use one of those commands. :ghpull:`12954`
1962 2003 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
1963 2004
1964 2005 Re-added support for XDG config directories
1965 2006 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1966 2007
1967 2008 XDG support through the years comes and goes. There is a tension between having
1968 2009 an identical location for configuration in all platforms versus having simple instructions.
1969 2010 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
1970 2011 config files back into ``~/.ipython``. That migration code has now been removed.
1971 2012 IPython now checks the XDG locations, so if you _manually_ move your config
1972 2013 files to your preferred location, IPython will not move them back.
1973 2014
1974 2015
1975 2016 Preparing for Python 3.10
1976 2017 -------------------------
1977 2018
1978 2019 To prepare for Python 3.10, we have started working on removing reliance and
1979 2020 any dependency that is not compatible with Python 3.10. This includes migrating our
1980 2021 test suite to pytest and starting to remove nose. This also means that the
1981 2022 ``iptest`` command is now gone and all testing is via pytest.
1982 2023
1983 2024 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
1984 2025 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
1985 2026 who did a fantastic job at updating our code base, migrating to pytest, pushing
1986 2027 our coverage, and fixing a large number of bugs. I highly recommend contacting
1987 2028 them if you need help with C++ and Python projects.
1988 2029
1989 2030 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+>`__
1990 2031
1991 2032 Removing support for older Python versions
1992 2033 ------------------------------------------
1993 2034
1994 2035
1995 2036 We are removing support for Python up through 3.7, allowing internal code to use the more
1996 2037 efficient ``pathlib`` and to make better use of type annotations.
1997 2038
1998 2039 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
1999 2040 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
2000 2041
2001 2042
2002 2043 We had about 34 PRs only to update some logic to update some functions from managing strings to
2003 2044 using Pathlib.
2004 2045
2005 2046 The completer has also seen significant updates and now makes use of newer Jedi APIs,
2006 2047 offering faster and more reliable tab completion.
2007 2048
2008 2049 Misc Statistics
2009 2050 ---------------
2010 2051
2011 2052 Here are some numbers::
2012 2053
2013 2054 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
2014 2055 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
2015 2056
2016 2057 $ git diff --stat 7.x...master | tail -1
2017 2058 340 files changed, 13399 insertions(+), 12421 deletions(-)
2018 2059
2019 2060 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
2020 2061 maintainers pushing buttons).::
2021 2062
2022 2063 $ git shortlog -s --no-merges 7.x...master | sort -nr
2023 2064 535 Matthias Bussonnier
2024 2065 86 Nikita Kniazev
2025 2066 69 Blazej Michalik
2026 2067 49 Samuel Gaist
2027 2068 27 Itamar Turner-Trauring
2028 2069 18 Spas Kalaydzhisyki
2029 2070 17 Thomas Kluyver
2030 2071 17 Quentin Peter
2031 2072 17 James Morris
2032 2073 17 Artur Svistunov
2033 2074 15 Bart Skowron
2034 2075 14 Alex Hall
2035 2076 13 rushabh-v
2036 2077 13 Terry Davis
2037 2078 13 Benjamin Ragan-Kelley
2038 2079 8 martinRenou
2039 2080 8 farisachugthai
2040 2081 7 dswij
2041 2082 7 Gal B
2042 2083 7 Corentin Cadiou
2043 2084 6 yuji96
2044 2085 6 Martin Skarzynski
2045 2086 6 Justin Palmer
2046 2087 6 Daniel Goldfarb
2047 2088 6 Ben Greiner
2048 2089 5 Sammy Al Hashemi
2049 2090 5 Paul Ivanov
2050 2091 5 Inception95
2051 2092 5 Eyenpi
2052 2093 5 Douglas Blank
2053 2094 5 Coco Mishra
2054 2095 5 Bibo Hao
2055 2096 5 AndrΓ© A. Gomes
2056 2097 5 Ahmed Fasih
2057 2098 4 takuya fujiwara
2058 2099 4 palewire
2059 2100 4 Thomas A Caswell
2060 2101 4 Talley Lambert
2061 2102 4 Scott Sanderson
2062 2103 4 Ram Rachum
2063 2104 4 Nick Muoh
2064 2105 4 Nathan Goldbaum
2065 2106 4 Mithil Poojary
2066 2107 4 Michael T
2067 2108 4 Jakub Klus
2068 2109 4 Ian Castleden
2069 2110 4 Eli Rykoff
2070 2111 4 Ashwin Vishnu
2071 2112 3 谭九鼎
2072 2113 3 sleeping
2073 2114 3 Sylvain Corlay
2074 2115 3 Peter Corke
2075 2116 3 Paul Bissex
2076 2117 3 Matthew Feickert
2077 2118 3 Fernando Perez
2078 2119 3 Eric Wieser
2079 2120 3 Daniel Mietchen
2080 2121 3 Aditya Sathe
2081 2122 3 007vedant
2082 2123 2 rchiodo
2083 2124 2 nicolaslazo
2084 2125 2 luttik
2085 2126 2 gorogoroumaru
2086 2127 2 foobarbyte
2087 2128 2 bar-hen
2088 2129 2 Theo Ouzhinski
2089 2130 2 Strawkage
2090 2131 2 Samreen Zarroug
2091 2132 2 Pete Blois
2092 2133 2 Meysam Azad
2093 2134 2 Matthieu Ancellin
2094 2135 2 Mark Schmitz
2095 2136 2 Maor Kleinberger
2096 2137 2 MRCWirtz
2097 2138 2 Lumir Balhar
2098 2139 2 Julien Rabinow
2099 2140 2 Juan Luis Cano RodrΓ­guez
2100 2141 2 Joyce Er
2101 2142 2 Jakub
2102 2143 2 Faris A Chugthai
2103 2144 2 Ethan Madden
2104 2145 2 Dimitri Papadopoulos
2105 2146 2 Diego Fernandez
2106 2147 2 Daniel Shimon
2107 2148 2 Coco Bennett
2108 2149 2 Carlos Cordoba
2109 2150 2 Boyuan Liu
2110 2151 2 BaoGiang HoangVu
2111 2152 2 Augusto
2112 2153 2 Arthur Svistunov
2113 2154 2 Arthur Moreira
2114 2155 2 Ali Nabipour
2115 2156 2 Adam Hackbarth
2116 2157 1 richard
2117 2158 1 linar-jether
2118 2159 1 lbennett
2119 2160 1 juacrumar
2120 2161 1 gpotter2
2121 2162 1 digitalvirtuoso
2122 2163 1 dalthviz
2123 2164 1 Yonatan Goldschmidt
2124 2165 1 Tomasz KΕ‚oczko
2125 2166 1 Tobias Bengfort
2126 2167 1 Timur Kushukov
2127 2168 1 Thomas
2128 2169 1 Snir Broshi
2129 2170 1 Shao Yang Hong
2130 2171 1 Sanjana-03
2131 2172 1 Romulo Filho
2132 2173 1 Rodolfo Carvalho
2133 2174 1 Richard Shadrach
2134 2175 1 Reilly Tucker Siemens
2135 2176 1 Rakessh Roshan
2136 2177 1 Piers Titus van der Torren
2137 2178 1 PhanatosZou
2138 2179 1 Pavel Safronov
2139 2180 1 Paulo S. Costa
2140 2181 1 Paul McCarthy
2141 2182 1 NotWearingPants
2142 2183 1 Naelson Douglas
2143 2184 1 Michael Tiemann
2144 2185 1 Matt Wozniski
2145 2186 1 Markus Wageringel
2146 2187 1 Marcus Wirtz
2147 2188 1 Marcio Mazza
2148 2189 1 LumΓ­r 'Frenzy' Balhar
2149 2190 1 Lightyagami1
2150 2191 1 Leon Anavi
2151 2192 1 LeafyLi
2152 2193 1 L0uisJ0shua
2153 2194 1 Kyle Cutler
2154 2195 1 Krzysztof Cybulski
2155 2196 1 Kevin Kirsche
2156 2197 1 KIU Shueng Chuan
2157 2198 1 Jonathan Slenders
2158 2199 1 Jay Qi
2159 2200 1 Jake VanderPlas
2160 2201 1 Iwan Briquemont
2161 2202 1 Hussaina Begum Nandyala
2162 2203 1 Gordon Ball
2163 2204 1 Gabriel Simonetto
2164 2205 1 Frank Tobia
2165 2206 1 Erik
2166 2207 1 Elliott Sales de Andrade
2167 2208 1 Daniel Hahler
2168 2209 1 Dan Green-Leipciger
2169 2210 1 Dan Green
2170 2211 1 Damian Yurzola
2171 2212 1 Coon, Ethan T
2172 2213 1 Carol Willing
2173 2214 1 Brian Lee
2174 2215 1 Brendan Gerrity
2175 2216 1 Blake Griffin
2176 2217 1 Bastian Ebeling
2177 2218 1 Bartosz Telenczuk
2178 2219 1 Ankitsingh6299
2179 2220 1 Andrew Port
2180 2221 1 Andrew J. Hesford
2181 2222 1 Albert Zhang
2182 2223 1 Adam Johnson
2183 2224
2184 2225 This does not, of course, represent non-code contributions, for which we are also grateful.
2185 2226
2186 2227
2187 2228 API Changes using Frappuccino
2188 2229 -----------------------------
2189 2230
2190 2231 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
2191 2232
2192 2233
2193 2234 The following items are new in IPython 8.0 ::
2194 2235
2195 2236 + IPython.core.async_helpers.get_asyncio_loop()
2196 2237 + IPython.core.completer.Dict
2197 2238 + IPython.core.completer.Pattern
2198 2239 + IPython.core.completer.Sequence
2199 2240 + IPython.core.completer.__skip_doctest__
2200 2241 + IPython.core.debugger.Pdb.precmd(self, line)
2201 2242 + IPython.core.debugger.__skip_doctest__
2202 2243 + IPython.core.display.__getattr__(name)
2203 2244 + IPython.core.display.warn
2204 2245 + IPython.core.display_functions
2205 2246 + IPython.core.display_functions.DisplayHandle
2206 2247 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
2207 2248 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
2208 2249 + IPython.core.display_functions.__all__
2209 2250 + IPython.core.display_functions.__builtins__
2210 2251 + IPython.core.display_functions.__cached__
2211 2252 + IPython.core.display_functions.__doc__
2212 2253 + IPython.core.display_functions.__file__
2213 2254 + IPython.core.display_functions.__loader__
2214 2255 + IPython.core.display_functions.__name__
2215 2256 + IPython.core.display_functions.__package__
2216 2257 + IPython.core.display_functions.__spec__
2217 2258 + IPython.core.display_functions.b2a_hex
2218 2259 + IPython.core.display_functions.clear_output(wait=False)
2219 2260 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
2220 2261 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
2221 2262 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
2222 2263 + IPython.core.extensions.BUILTINS_EXTS
2223 2264 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
2224 2265 + IPython.core.interactiveshell.Callable
2225 2266 + IPython.core.interactiveshell.__annotations__
2226 2267 + IPython.core.ultratb.List
2227 2268 + IPython.core.ultratb.Tuple
2228 2269 + IPython.lib.pretty.CallExpression
2229 2270 + IPython.lib.pretty.CallExpression.factory(name)
2230 2271 + IPython.lib.pretty.RawStringLiteral
2231 2272 + IPython.lib.pretty.RawText
2232 2273 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
2233 2274 + IPython.terminal.embed.Set
2234 2275
2235 2276 The following items have been removed (or moved to superclass)::
2236 2277
2237 2278 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
2238 2279 - IPython.core.completer.Sentinel
2239 2280 - IPython.core.completer.skip_doctest
2240 2281 - IPython.core.debugger.Tracer
2241 2282 - IPython.core.display.DisplayHandle
2242 2283 - IPython.core.display.DisplayHandle.display
2243 2284 - IPython.core.display.DisplayHandle.update
2244 2285 - IPython.core.display.b2a_hex
2245 2286 - IPython.core.display.clear_output
2246 2287 - IPython.core.display.display
2247 2288 - IPython.core.display.publish_display_data
2248 2289 - IPython.core.display.update_display
2249 2290 - IPython.core.excolors.Deprec
2250 2291 - IPython.core.excolors.ExceptionColors
2251 2292 - IPython.core.history.warn
2252 2293 - IPython.core.hooks.late_startup_hook
2253 2294 - IPython.core.hooks.pre_run_code_hook
2254 2295 - IPython.core.hooks.shutdown_hook
2255 2296 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
2256 2297 - IPython.core.interactiveshell.InteractiveShell.init_readline
2257 2298 - IPython.core.interactiveshell.InteractiveShell.write
2258 2299 - IPython.core.interactiveshell.InteractiveShell.write_err
2259 2300 - IPython.core.interactiveshell.get_default_colors
2260 2301 - IPython.core.interactiveshell.removed_co_newlocals
2261 2302 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
2262 2303 - IPython.core.magics.script.PIPE
2263 2304 - IPython.core.prefilter.PrefilterManager.init_transformers
2264 2305 - IPython.core.release.classifiers
2265 2306 - IPython.core.release.description
2266 2307 - IPython.core.release.keywords
2267 2308 - IPython.core.release.long_description
2268 2309 - IPython.core.release.name
2269 2310 - IPython.core.release.platforms
2270 2311 - IPython.core.release.url
2271 2312 - IPython.core.ultratb.VerboseTB.format_records
2272 2313 - IPython.core.ultratb.find_recursion
2273 2314 - IPython.core.ultratb.findsource
2274 2315 - IPython.core.ultratb.fix_frame_records_filenames
2275 2316 - IPython.core.ultratb.inspect_error
2276 2317 - IPython.core.ultratb.is_recursion_error
2277 2318 - IPython.core.ultratb.with_patch_inspect
2278 2319 - IPython.external.__all__
2279 2320 - IPython.external.__builtins__
2280 2321 - IPython.external.__cached__
2281 2322 - IPython.external.__doc__
2282 2323 - IPython.external.__file__
2283 2324 - IPython.external.__loader__
2284 2325 - IPython.external.__name__
2285 2326 - IPython.external.__package__
2286 2327 - IPython.external.__path__
2287 2328 - IPython.external.__spec__
2288 2329 - IPython.kernel.KernelConnectionInfo
2289 2330 - IPython.kernel.__builtins__
2290 2331 - IPython.kernel.__cached__
2291 2332 - IPython.kernel.__warningregistry__
2292 2333 - IPython.kernel.pkg
2293 2334 - IPython.kernel.protocol_version
2294 2335 - IPython.kernel.protocol_version_info
2295 2336 - IPython.kernel.src
2296 2337 - IPython.kernel.version_info
2297 2338 - IPython.kernel.warn
2298 2339 - IPython.lib.backgroundjobs
2299 2340 - IPython.lib.backgroundjobs.BackgroundJobBase
2300 2341 - IPython.lib.backgroundjobs.BackgroundJobBase.run
2301 2342 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
2302 2343 - IPython.lib.backgroundjobs.BackgroundJobExpr
2303 2344 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
2304 2345 - IPython.lib.backgroundjobs.BackgroundJobFunc
2305 2346 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
2306 2347 - IPython.lib.backgroundjobs.BackgroundJobManager
2307 2348 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
2308 2349 - IPython.lib.backgroundjobs.BackgroundJobManager.new
2309 2350 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
2310 2351 - IPython.lib.backgroundjobs.BackgroundJobManager.result
2311 2352 - IPython.lib.backgroundjobs.BackgroundJobManager.status
2312 2353 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
2313 2354 - IPython.lib.backgroundjobs.__builtins__
2314 2355 - IPython.lib.backgroundjobs.__cached__
2315 2356 - IPython.lib.backgroundjobs.__doc__
2316 2357 - IPython.lib.backgroundjobs.__file__
2317 2358 - IPython.lib.backgroundjobs.__loader__
2318 2359 - IPython.lib.backgroundjobs.__name__
2319 2360 - IPython.lib.backgroundjobs.__package__
2320 2361 - IPython.lib.backgroundjobs.__spec__
2321 2362 - IPython.lib.kernel.__builtins__
2322 2363 - IPython.lib.kernel.__cached__
2323 2364 - IPython.lib.kernel.__doc__
2324 2365 - IPython.lib.kernel.__file__
2325 2366 - IPython.lib.kernel.__loader__
2326 2367 - IPython.lib.kernel.__name__
2327 2368 - IPython.lib.kernel.__package__
2328 2369 - IPython.lib.kernel.__spec__
2329 2370 - IPython.lib.kernel.__warningregistry__
2330 2371 - IPython.paths.fs_encoding
2331 2372 - IPython.terminal.debugger.DEFAULT_BUFFER
2332 2373 - IPython.terminal.debugger.cursor_in_leading_ws
2333 2374 - IPython.terminal.debugger.emacs_insert_mode
2334 2375 - IPython.terminal.debugger.has_selection
2335 2376 - IPython.terminal.debugger.vi_insert_mode
2336 2377 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
2337 2378 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
2338 2379 - IPython.testing.test
2339 2380 - IPython.utils.contexts.NoOpContext
2340 2381 - IPython.utils.io.IOStream
2341 2382 - IPython.utils.io.IOStream.close
2342 2383 - IPython.utils.io.IOStream.write
2343 2384 - IPython.utils.io.IOStream.writelines
2344 2385 - IPython.utils.io.__warningregistry__
2345 2386 - IPython.utils.io.atomic_writing
2346 2387 - IPython.utils.io.stderr
2347 2388 - IPython.utils.io.stdin
2348 2389 - IPython.utils.io.stdout
2349 2390 - IPython.utils.io.unicode_std_stream
2350 2391 - IPython.utils.path.get_ipython_cache_dir
2351 2392 - IPython.utils.path.get_ipython_dir
2352 2393 - IPython.utils.path.get_ipython_module_path
2353 2394 - IPython.utils.path.get_ipython_package_dir
2354 2395 - IPython.utils.path.locate_profile
2355 2396 - IPython.utils.path.unquote_filename
2356 2397 - IPython.utils.py3compat.PY2
2357 2398 - IPython.utils.py3compat.PY3
2358 2399 - IPython.utils.py3compat.buffer_to_bytes
2359 2400 - IPython.utils.py3compat.builtin_mod_name
2360 2401 - IPython.utils.py3compat.cast_bytes
2361 2402 - IPython.utils.py3compat.getcwd
2362 2403 - IPython.utils.py3compat.isidentifier
2363 2404 - IPython.utils.py3compat.u_format
2364 2405
2365 2406 The following signatures differ between 7.x and 8.0::
2366 2407
2367 2408 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
2368 2409 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
2369 2410
2370 2411 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
2371 2412 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
2372 2413
2373 2414 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
2374 2415 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
2375 2416
2376 2417 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
2377 2418 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
2378 2419
2379 2420 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
2380 2421 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
2381 2422
2382 2423 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
2383 2424 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
2384 2425
2385 2426 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
2386 2427 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
2387 2428
2388 2429 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
2389 2430 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
2390 2431
2391 2432 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
2392 2433 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
2393 2434
2394 2435 - IPython.terminal.embed.embed(**kwargs)
2395 2436 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
2396 2437
2397 2438 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
2398 2439 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
2399 2440
2400 2441 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
2401 2442 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
2402 2443
2403 2444 - IPython.utils.path.get_py_filename(name, force_win32='None')
2404 2445 + IPython.utils.path.get_py_filename(name)
2405 2446
2406 2447 The following are new attributes (that might be inherited)::
2407 2448
2408 2449 + IPython.core.completer.IPCompleter.unicode_names
2409 2450 + IPython.core.debugger.InterruptiblePdb.precmd
2410 2451 + IPython.core.debugger.Pdb.precmd
2411 2452 + IPython.core.ultratb.AutoFormattedTB.has_colors
2412 2453 + IPython.core.ultratb.ColorTB.has_colors
2413 2454 + IPython.core.ultratb.FormattedTB.has_colors
2414 2455 + IPython.core.ultratb.ListTB.has_colors
2415 2456 + IPython.core.ultratb.SyntaxTB.has_colors
2416 2457 + IPython.core.ultratb.TBTools.has_colors
2417 2458 + IPython.core.ultratb.VerboseTB.has_colors
2418 2459 + IPython.terminal.debugger.TerminalPdb.do_interact
2419 2460 + IPython.terminal.debugger.TerminalPdb.precmd
2420 2461
2421 2462 The following attribute/methods have been removed::
2422 2463
2423 2464 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
2424 2465 - IPython.core.ultratb.AutoFormattedTB.format_records
2425 2466 - IPython.core.ultratb.ColorTB.format_records
2426 2467 - IPython.core.ultratb.FormattedTB.format_records
2427 2468 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
2428 2469 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
2429 2470 - IPython.terminal.embed.InteractiveShellEmbed.write
2430 2471 - IPython.terminal.embed.InteractiveShellEmbed.write_err
2431 2472 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
2432 2473 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
2433 2474 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
2434 2475 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
2435 2476 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
2436 2477 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
2437 2478 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
2438 2479 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
2439 2480
2440 2481 ------
2441 2482
2442 2483 .. [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