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