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