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