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