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