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