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