##// END OF EJS Templates
Update docs/source/whatsnew/version8.rst
Matthias Bussonnier -
Show More
@@ -1,897 +1,897 b''
1 1 ============
2 2 8.x Series
3 3 ============
4 4
5 5 IPython 8.0
6 6 -----------
7 7
8 8 IPython 8.0 is bringing a large number of new features and improvements to both the
9 9 user of the terminal and of the kernel via Jupyter. The removal of compatibility
10 10 with older version of Python is also the opportunity to do a couple of
11 11 performance improvement in particular with respect to startup time.
12 12 The 8.x branch started diverging from its predecessor around IPython 7.12
13 13 (January 2020).
14 14
15 15 This release contains 250+ pull requests, in addition to many of the features
16 16 and backports that have made it to the 7.x branch. Please see the
17 17 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
18 18
19 19 Please fell free to send pull requests to updates those notes after release,
20 20 I have likely forgotten a few things reviewing 250+ PRs.
21 21
22 22 Dependencies changes/downstream packaging
23 23 -----------------------------------------
24 24
25 25 Most of our building steps have been changed to be (mostly) declarative
26 26 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
27 27 looking for help to do so.
28 28
29 29 - minimum supported ``traitlets`` version is now 5+
30 30 - we now require ``stack_data``
31 31 - minimal Python is now 3.8
32 32 - ``nose`` is not a testing requirement anymore
33 33 - ``pytest`` replaces nose.
34 34 - ``iptest``/``iptest3`` cli entrypoints do not exists anymore.
35 35 - minimum officially support ``numpy`` version has been bumped, but this should
36 36 not have much effect on packaging.
37 37
38 38
39 39 Deprecation and removal
40 40 -----------------------
41 41
42 42 We removed almost all features, arguments, functions, and modules that were
43 43 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
44 44 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
45 45 The few remaining deprecated features we left have better deprecation warnings
46 46 or have been turned into explicit errors for better error messages.
47 47
48 48 I will use this occasion to add the following requests to anyone emitting a
49 49 deprecation warning:
50 50
51 51 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
52 52 caller context, and not the callee one.
53 53 - Please add **since which version** something is deprecated.
54 54
55 55 As a side note, it is much easier to conditionally compare version
56 56 numbers rather than using ``try/except`` when functionality changes with a version.
57 57
58 58 I won't list all the removed features here, but modules like ``IPython.kernel``,
59 59 which was just a shim module around ``ipykernel`` for the past 8 years, have been
60 60 removed, and so many other similar things that pre-date the name **Jupyter**
61 61 itself.
62 62
63 63 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
64 64 handled by ``load_extension``.
65 65
66 66 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
67 67 other packages and no longer need to be inside IPython.
68 68
69 69
70 70 Documentation
71 71 -------------
72 72
73 73 The majority of our docstrings have now been reformatted and automatically fixed by
74 74 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
75 75 to numpydoc.
76 76
77 77 Type annotations
78 78 ----------------
79 79
80 80 While IPython itself is highly dynamic and can't be completely typed, many of
81 81 the functions now have type annotations, and part of the codebase is now checked
82 82 by mypy.
83 83
84 84
85 85 Featured changes
86 86 ----------------
87 87
88 88 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
89 89 Please note as well that many features have been added in the 7.x branch as well
90 90 (and hence why you want to read the 7.x what's new notes), in particular
91 91 features contributed by QuantStack (with respect to debugger protocol and Xeus
92 92 Python), as well as many debugger features that I was pleased to implement as
93 93 part of my work at QuanSight and sponsored by DE Shaw.
94 94
95 95 Traceback improvements
96 96 ~~~~~~~~~~~~~~~~~~~~~~
97 97
98 98 Previously, error tracebacks for errors happening in code cells were showing a
99 99 hash, the one used for compiling the Python AST::
100 100
101 101 In [1]: def foo():
102 102 ...: return 3 / 0
103 103 ...:
104 104
105 105 In [2]: foo()
106 106 ---------------------------------------------------------------------------
107 107 ZeroDivisionError Traceback (most recent call last)
108 108 <ipython-input-2-c19b6d9633cf> in <module>
109 109 ----> 1 foo()
110 110
111 111 <ipython-input-1-1595a74c32d5> in foo()
112 112 1 def foo():
113 113 ----> 2 return 3 / 0
114 114 3
115 115
116 116 ZeroDivisionError: division by zero
117 117
118 118 The error traceback is now correctly formatted, showing the cell number in which the error happened::
119 119
120 120 In [1]: def foo():
121 121 ...: return 3 / 0
122 122 ...:
123 123
124 124 Input In [2]: foo()
125 125 ---------------------------------------------------------------------------
126 126 ZeroDivisionError Traceback (most recent call last)
127 127 input In [2], in <module>
128 128 ----> 1 foo()
129 129
130 130 Input In [1], in foo()
131 131 1 def foo():
132 132 ----> 2 return 3 / 0
133 133
134 134 ZeroDivisionError: division by zero
135 135
136 136 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
137 137 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
138 138
139 139 For example in the following snippet::
140 140
141 141 def foo(i):
142 142 x = [[[0]]]
143 143 return x[0][i][0]
144 144
145 145
146 146 def bar():
147 147 return foo(0) + foo(
148 148 1
149 149 ) + foo(2)
150 150
151 151
152 152 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
153 153 and IPython 8.0 is capable of telling you where the index error occurs::
154 154
155 155
156 156 IndexError
157 157 Input In [2], in <module>
158 158 ----> 1 bar()
159 159 ^^^^^
160 160
161 161 Input In [1], in bar()
162 162 6 def bar():
163 163 ----> 7 return foo(0) + foo(
164 164 ^^^^
165 165 8 1
166 166 ^^^^^^^^
167 167 9 ) + foo(2)
168 168 ^^^^
169 169
170 170 Input In [1], in foo(i)
171 171 1 def foo(i):
172 172 2 x = [[[0]]]
173 173 ----> 3 return x[0][i][0]
174 174 ^^^^^^^
175 175
176 176 The corresponding locations marked here with ``^`` will show up highlighted in
177 177 the terminal and notebooks.
178 178
179 179 Finally, a colon ``::`` and line number is appended after a filename in
180 180 traceback::
181 181
182 182
183 183 ZeroDivisionError Traceback (most recent call last)
184 184 File ~/error.py:4, in <module>
185 185 1 def f():
186 186 2 1/0
187 187 ----> 4 f()
188 188
189 189 File ~/error.py:2, in f()
190 190 1 def f():
191 191 ----> 2 1/0
192 192
193 193 Many terminals and editors have integrations enabling you to directly jump to the
194 194 relevant file/line when this syntax is used, so this small addition may have a high
195 195 impact on productivity.
196 196
197 197
198 198 Autosuggestions
199 ~~~~~~~~~~~~~~
199 ~~~~~~~~~~~~~~~
200 200
201 201 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>`__.
202 202
203 203 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
204 204 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
205 205
206 206 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
207 207 or right arrow as described below.
208 208
209 209 1. Start ipython
210 210
211 211 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
212 212
213 213 2. Run ``print("hello")``
214 214
215 215 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
216 216
217 217 3. start typing ``print`` again to see the autosuggestion
218 218
219 219 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
220 220
221 221 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
222 222
223 223 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
224 224
225 225 You can also complete word by word:
226 226
227 227 1. Run ``def say_hello(): print("hello")``
228 228
229 229 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
230 230
231 231 2. Start typing the first letter if ``def`` to see the autosuggestion
232 232
233 233 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
234 234
235 235 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
236 236
237 237 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
238 238
239 239 Importantly, this feature does not interfere with tab completion:
240 240
241 241 1. After running ``def say_hello(): print("hello")``, press d
242 242
243 243 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
244 244
245 245 2. Press Tab to start tab completion
246 246
247 247 .. image:: ../_images/8.0/auto_suggest_d_completions.png
248 248
249 249 3A. Press Tab again to select the first option
250 250
251 251 .. image:: ../_images/8.0/auto_suggest_def_completions.png
252 252
253 253 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
254 254
255 255 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
256 256
257 257 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
258 258
259 259 .. image:: ../_images/8.0/auto_suggest_match_parens.png
260 260
261 261
262 262 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
263 263
264 264 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
265 265 - 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/>`__.
266 266
267 267
268 268 Show pinfo information in ipdb using "?" and "??"
269 269 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
270 270
271 271 In IPDB, it is now possible to show the information about an object using "?"
272 272 and "??", in much the same way that it can be done when using the IPython prompt::
273 273
274 274 ipdb> partial?
275 275 Init signature: partial(self, /, *args, **kwargs)
276 276 Docstring:
277 277 partial(func, *args, **keywords) - new function with partial application
278 278 of the given arguments and keywords.
279 279 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
280 280 Type: type
281 281 Subclasses:
282 282
283 283 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
284 284
285 285
286 286 Autoreload 3 feature
287 287 ~~~~~~~~~~~~~~~~~~~~
288 288
289 289 Example: When an IPython session is run with the 'autoreload' extension loaded,
290 290 you will now have the option '3' to select, which means the following:
291 291
292 292 1. replicate all functionality from option 2
293 293 2. autoload all new funcs/classes/enums/globals from the module when they are added
294 294 3. autoload all newly imported funcs/classes/enums/globals from external modules
295 295
296 296 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
297 297
298 298 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
299 299
300 300 Auto formatting with black in the CLI
301 301 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
302 302
303 303 If ``black`` is installed in the same environment as IPython, terminal IPython
304 304 will now *by default* reformat the code in the CLI when possible. You can
305 305 disable this with ``--TerminalInteractiveShell.autoformatter=None``.
306 306
307 307 This feature was present in 7.x, but disabled by default.
308 308
309 309
310 310 History Range Glob feature
311 311 ~~~~~~~~~~~~~~~~~~~~~~~~~~
312 312
313 313 Previously, when using ``%history``, users could specify either
314 314 a range of sessions and lines, for example:
315 315
316 316 .. code-block:: python
317 317
318 318 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
319 319 # to the fifth line of 6 sessions ago.``
320 320
321 321 Or users could specify a glob pattern:
322 322
323 323 .. code-block:: python
324 324
325 325 -g <pattern> # glob ALL history for the specified pattern.
326 326
327 327 However users could *not* specify both.
328 328
329 329 If a user *did* specify both a range and a glob pattern,
330 330 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
331 331
332 332 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.
333 333
334 334 Don't start a multi-line cell with sunken parenthesis
335 335 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
336 336
337 337 From now on, IPython will not ask for the next line of input when given a single
338 338 line with more closing than opening brackets. For example, this means that if
339 339 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
340 340 the ``...:`` prompt continuation.
341 341
342 342 IPython shell for ipdb interact
343 343 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
344 344
345 345 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
346 346
347 347 Automatic Vi prompt stripping
348 348 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
349 349
350 350 When pasting code into IPython, it will strip the leading prompt characters if
351 351 there are any. For example, you can paste the following code into the console -
352 352 it will still work, even though each line is prefixed with prompts (`In`,
353 353 `Out`)::
354 354
355 355 In [1]: 2 * 2 == 4
356 356 Out[1]: True
357 357
358 358 In [2]: print("This still works as pasted")
359 359
360 360
361 361 Previously, this was not the case for the Vi-mode prompts::
362 362
363 363 In [1]: [ins] In [13]: 2 * 2 == 4
364 364 ...: Out[13]: True
365 365 ...:
366 366 File "<ipython-input-1-727bb88eaf33>", line 1
367 367 [ins] In [13]: 2 * 2 == 4
368 368 ^
369 369 SyntaxError: invalid syntax
370 370
371 371 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
372 372 skipped just as the normal ``In`` would be.
373 373
374 374 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
375 375 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
376 376
377 377 Empty History Ranges
378 378 ~~~~~~~~~~~~~~~~~~~~
379 379
380 380 A number of magics that take history ranges can now be used with an empty
381 381 range. These magics are:
382 382
383 383 * ``%save``
384 384 * ``%load``
385 385 * ``%pastebin``
386 386 * ``%pycat``
387 387
388 388 Using them this way will make them take the history of the current session up
389 389 to the point of the magic call (such that the magic itself will not be
390 390 included).
391 391
392 392 Therefore it is now possible to save the whole history to a file using
393 393 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
394 394 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
395 395 ``%pastebin``, or view the whole thing syntax-highlighted with a single
396 396 ``%pycat``.
397 397
398 398
399 399 Windows timing implementation: Switch to process_time
400 400 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
401 401 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
402 402 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
403 403 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
404 404
405 405 Miscellaneous
406 406 ~~~~~~~~~~~~~
407 407 - Non-text formatters are not disabled in the terminal, which should simplify
408 408 writing extensions displaying images or other mimetypes in supporting terminals.
409 409 :ghpull:`12315`
410 410 - It is now possible to automatically insert matching brackets in Terminal IPython using the
411 411 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
412 412 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
413 413 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
414 414 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
415 415 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
416 416 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
417 417 - The debugger now has a persistent history, which should make it less
418 418 annoying to retype commands :ghpull:`13246`
419 419 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
420 420 now warn users if they use one of those commands. :ghpull:`12954`
421 421 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
422 422
423 423 Re-added support for XDG config directories
424 424 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
425 425
426 426 XDG support through the years comes and goes. There is a tension between having
427 427 an identical location for configuration in all platforms versus having simple instructions.
428 428 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
429 429 config files back into ``~/.ipython``. That migration code has now been removed.
430 430 IPython now checks the XDG locations, so if you _manually_ move your config
431 431 files to your preferred location, IPython will not move them back.
432 432
433 433
434 434 Preparing for Python 3.10
435 435 -------------------------
436 436
437 437 To prepare for Python 3.10, we have started working on removing reliance and
438 438 any dependency that is not compatible with Python 3.10. This includes migrating our
439 439 test suite to pytest and starting to remove nose. This also means that the
440 440 ``iptest`` command is now gone and all testing is via pytest.
441 441
442 442 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
443 443 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
444 444 who did a fantastic job at updating our code base, migrating to pytest, pushing
445 445 our coverage, and fixing a large number of bugs. I highly recommend contacting
446 446 them if you need help with C++ and Python projects.
447 447
448 448 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+>`__
449 449
450 450 Removing support for older Python versions
451 451 ------------------------------------------
452 452
453 453
454 454 We are removing support for Python up through 3.7, allowing internal code to use the more
455 455 efficient ``pathlib`` and to make better use of type annotations.
456 456
457 457 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
458 458 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
459 459
460 460
461 461 We had about 34 PRs only to update some logic to update some functions from managing strings to
462 462 using Pathlib.
463 463
464 464 The completer has also seen significant updates and now makes use of newer Jedi APIs,
465 465 offering faster and more reliable tab completion.
466 466
467 467 Misc Statistics
468 468 ---------------
469 469
470 470 Here are some numbers::
471 471
472 472 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
473 473 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
474 474
475 475 $ git diff --stat 7.x...master | tail -1
476 476 340 files changed, 13399 insertions(+), 12421 deletions(-)
477 477
478 478 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
479 479 maintainers pushing buttons).::
480 480
481 481 $ git shortlog -s --no-merges 7.x...master | sort -nr
482 482 535 Matthias Bussonnier
483 483 86 Nikita Kniazev
484 484 69 Blazej Michalik
485 485 49 Samuel Gaist
486 486 27 Itamar Turner-Trauring
487 487 18 Spas Kalaydzhisyki
488 488 17 Thomas Kluyver
489 489 17 Quentin Peter
490 490 17 James Morris
491 491 17 Artur Svistunov
492 492 15 Bart Skowron
493 493 14 Alex Hall
494 494 13 rushabh-v
495 495 13 Terry Davis
496 496 13 Benjamin Ragan-Kelley
497 497 8 martinRenou
498 498 8 farisachugthai
499 499 7 dswij
500 500 7 Gal B
501 501 7 Corentin Cadiou
502 502 6 yuji96
503 503 6 Martin Skarzynski
504 504 6 Justin Palmer
505 505 6 Daniel Goldfarb
506 506 6 Ben Greiner
507 507 5 Sammy Al Hashemi
508 508 5 Paul Ivanov
509 509 5 Inception95
510 510 5 Eyenpi
511 511 5 Douglas Blank
512 512 5 Coco Mishra
513 513 5 Bibo Hao
514 514 5 AndrΓ© A. Gomes
515 515 5 Ahmed Fasih
516 516 4 takuya fujiwara
517 517 4 palewire
518 518 4 Thomas A Caswell
519 519 4 Talley Lambert
520 520 4 Scott Sanderson
521 521 4 Ram Rachum
522 522 4 Nick Muoh
523 523 4 Nathan Goldbaum
524 524 4 Mithil Poojary
525 525 4 Michael T
526 526 4 Jakub Klus
527 527 4 Ian Castleden
528 528 4 Eli Rykoff
529 529 4 Ashwin Vishnu
530 530 3 谭九鼎
531 531 3 sleeping
532 532 3 Sylvain Corlay
533 533 3 Peter Corke
534 534 3 Paul Bissex
535 535 3 Matthew Feickert
536 536 3 Fernando Perez
537 537 3 Eric Wieser
538 538 3 Daniel Mietchen
539 539 3 Aditya Sathe
540 540 3 007vedant
541 541 2 rchiodo
542 542 2 nicolaslazo
543 543 2 luttik
544 544 2 gorogoroumaru
545 545 2 foobarbyte
546 546 2 bar-hen
547 547 2 Theo Ouzhinski
548 548 2 Strawkage
549 549 2 Samreen Zarroug
550 550 2 Pete Blois
551 551 2 Meysam Azad
552 552 2 Matthieu Ancellin
553 553 2 Mark Schmitz
554 554 2 Maor Kleinberger
555 555 2 MRCWirtz
556 556 2 Lumir Balhar
557 557 2 Julien Rabinow
558 558 2 Juan Luis Cano RodrΓ­guez
559 559 2 Joyce Er
560 560 2 Jakub
561 561 2 Faris A Chugthai
562 562 2 Ethan Madden
563 563 2 Dimitri Papadopoulos
564 564 2 Diego Fernandez
565 565 2 Daniel Shimon
566 566 2 Coco Bennett
567 567 2 Carlos Cordoba
568 568 2 Boyuan Liu
569 569 2 BaoGiang HoangVu
570 570 2 Augusto
571 571 2 Arthur Svistunov
572 572 2 Arthur Moreira
573 573 2 Ali Nabipour
574 574 2 Adam Hackbarth
575 575 1 richard
576 576 1 linar-jether
577 577 1 lbennett
578 578 1 juacrumar
579 579 1 gpotter2
580 580 1 digitalvirtuoso
581 581 1 dalthviz
582 582 1 Yonatan Goldschmidt
583 583 1 Tomasz KΕ‚oczko
584 584 1 Tobias Bengfort
585 585 1 Timur Kushukov
586 586 1 Thomas
587 587 1 Snir Broshi
588 588 1 Shao Yang Hong
589 589 1 Sanjana-03
590 590 1 Romulo Filho
591 591 1 Rodolfo Carvalho
592 592 1 Richard Shadrach
593 593 1 Reilly Tucker Siemens
594 594 1 Rakessh Roshan
595 595 1 Piers Titus van der Torren
596 596 1 PhanatosZou
597 597 1 Pavel Safronov
598 598 1 Paulo S. Costa
599 599 1 Paul McCarthy
600 600 1 NotWearingPants
601 601 1 Naelson Douglas
602 602 1 Michael Tiemann
603 603 1 Matt Wozniski
604 604 1 Markus Wageringel
605 605 1 Marcus Wirtz
606 606 1 Marcio Mazza
607 607 1 LumΓ­r 'Frenzy' Balhar
608 608 1 Lightyagami1
609 609 1 Leon Anavi
610 610 1 LeafyLi
611 611 1 L0uisJ0shua
612 612 1 Kyle Cutler
613 613 1 Krzysztof Cybulski
614 614 1 Kevin Kirsche
615 615 1 KIU Shueng Chuan
616 616 1 Jonathan Slenders
617 617 1 Jay Qi
618 618 1 Jake VanderPlas
619 619 1 Iwan Briquemont
620 620 1 Hussaina Begum Nandyala
621 621 1 Gordon Ball
622 622 1 Gabriel Simonetto
623 623 1 Frank Tobia
624 624 1 Erik
625 625 1 Elliott Sales de Andrade
626 626 1 Daniel Hahler
627 627 1 Dan Green-Leipciger
628 628 1 Dan Green
629 629 1 Damian Yurzola
630 630 1 Coon, Ethan T
631 631 1 Carol Willing
632 632 1 Brian Lee
633 633 1 Brendan Gerrity
634 634 1 Blake Griffin
635 635 1 Bastian Ebeling
636 636 1 Bartosz Telenczuk
637 637 1 Ankitsingh6299
638 638 1 Andrew Port
639 639 1 Andrew J. Hesford
640 640 1 Albert Zhang
641 641 1 Adam Johnson
642 642
643 643 This does not, of course, represent non-code contributions, for which we are also grateful.
644 644
645 645
646 646 API Changes using Frappuccino
647 647 -----------------------------
648 648
649 649 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
650 650
651 651
652 652 The following items are new in IPython 8.0 ::
653 653
654 654 + IPython.core.async_helpers.get_asyncio_loop()
655 655 + IPython.core.completer.Dict
656 656 + IPython.core.completer.Pattern
657 657 + IPython.core.completer.Sequence
658 658 + IPython.core.completer.__skip_doctest__
659 659 + IPython.core.debugger.Pdb.precmd(self, line)
660 660 + IPython.core.debugger.__skip_doctest__
661 661 + IPython.core.display.__getattr__(name)
662 662 + IPython.core.display.warn
663 663 + IPython.core.display_functions
664 664 + IPython.core.display_functions.DisplayHandle
665 665 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
666 666 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
667 667 + IPython.core.display_functions.__all__
668 668 + IPython.core.display_functions.__builtins__
669 669 + IPython.core.display_functions.__cached__
670 670 + IPython.core.display_functions.__doc__
671 671 + IPython.core.display_functions.__file__
672 672 + IPython.core.display_functions.__loader__
673 673 + IPython.core.display_functions.__name__
674 674 + IPython.core.display_functions.__package__
675 675 + IPython.core.display_functions.__spec__
676 676 + IPython.core.display_functions.b2a_hex
677 677 + IPython.core.display_functions.clear_output(wait=False)
678 678 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
679 679 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
680 680 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
681 681 + IPython.core.extensions.BUILTINS_EXTS
682 682 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
683 683 + IPython.core.interactiveshell.Callable
684 684 + IPython.core.interactiveshell.__annotations__
685 685 + IPython.core.ultratb.List
686 686 + IPython.core.ultratb.Tuple
687 687 + IPython.lib.pretty.CallExpression
688 688 + IPython.lib.pretty.CallExpression.factory(name)
689 689 + IPython.lib.pretty.RawStringLiteral
690 690 + IPython.lib.pretty.RawText
691 691 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
692 692 + IPython.terminal.embed.Set
693 693
694 694 The following items have been removed (or moved to superclass)::
695 695
696 696 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
697 697 - IPython.core.completer.Sentinel
698 698 - IPython.core.completer.skip_doctest
699 699 - IPython.core.debugger.Tracer
700 700 - IPython.core.display.DisplayHandle
701 701 - IPython.core.display.DisplayHandle.display
702 702 - IPython.core.display.DisplayHandle.update
703 703 - IPython.core.display.b2a_hex
704 704 - IPython.core.display.clear_output
705 705 - IPython.core.display.display
706 706 - IPython.core.display.publish_display_data
707 707 - IPython.core.display.update_display
708 708 - IPython.core.excolors.Deprec
709 709 - IPython.core.excolors.ExceptionColors
710 710 - IPython.core.history.warn
711 711 - IPython.core.hooks.late_startup_hook
712 712 - IPython.core.hooks.pre_run_code_hook
713 713 - IPython.core.hooks.shutdown_hook
714 714 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
715 715 - IPython.core.interactiveshell.InteractiveShell.init_readline
716 716 - IPython.core.interactiveshell.InteractiveShell.write
717 717 - IPython.core.interactiveshell.InteractiveShell.write_err
718 718 - IPython.core.interactiveshell.get_default_colors
719 719 - IPython.core.interactiveshell.removed_co_newlocals
720 720 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
721 721 - IPython.core.magics.script.PIPE
722 722 - IPython.core.prefilter.PrefilterManager.init_transformers
723 723 - IPython.core.release.classifiers
724 724 - IPython.core.release.description
725 725 - IPython.core.release.keywords
726 726 - IPython.core.release.long_description
727 727 - IPython.core.release.name
728 728 - IPython.core.release.platforms
729 729 - IPython.core.release.url
730 730 - IPython.core.ultratb.VerboseTB.format_records
731 731 - IPython.core.ultratb.find_recursion
732 732 - IPython.core.ultratb.findsource
733 733 - IPython.core.ultratb.fix_frame_records_filenames
734 734 - IPython.core.ultratb.inspect_error
735 735 - IPython.core.ultratb.is_recursion_error
736 736 - IPython.core.ultratb.with_patch_inspect
737 737 - IPython.external.__all__
738 738 - IPython.external.__builtins__
739 739 - IPython.external.__cached__
740 740 - IPython.external.__doc__
741 741 - IPython.external.__file__
742 742 - IPython.external.__loader__
743 743 - IPython.external.__name__
744 744 - IPython.external.__package__
745 745 - IPython.external.__path__
746 746 - IPython.external.__spec__
747 747 - IPython.kernel.KernelConnectionInfo
748 748 - IPython.kernel.__builtins__
749 749 - IPython.kernel.__cached__
750 750 - IPython.kernel.__warningregistry__
751 751 - IPython.kernel.pkg
752 752 - IPython.kernel.protocol_version
753 753 - IPython.kernel.protocol_version_info
754 754 - IPython.kernel.src
755 755 - IPython.kernel.version_info
756 756 - IPython.kernel.warn
757 757 - IPython.lib.backgroundjobs
758 758 - IPython.lib.backgroundjobs.BackgroundJobBase
759 759 - IPython.lib.backgroundjobs.BackgroundJobBase.run
760 760 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
761 761 - IPython.lib.backgroundjobs.BackgroundJobExpr
762 762 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
763 763 - IPython.lib.backgroundjobs.BackgroundJobFunc
764 764 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
765 765 - IPython.lib.backgroundjobs.BackgroundJobManager
766 766 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
767 767 - IPython.lib.backgroundjobs.BackgroundJobManager.new
768 768 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
769 769 - IPython.lib.backgroundjobs.BackgroundJobManager.result
770 770 - IPython.lib.backgroundjobs.BackgroundJobManager.status
771 771 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
772 772 - IPython.lib.backgroundjobs.__builtins__
773 773 - IPython.lib.backgroundjobs.__cached__
774 774 - IPython.lib.backgroundjobs.__doc__
775 775 - IPython.lib.backgroundjobs.__file__
776 776 - IPython.lib.backgroundjobs.__loader__
777 777 - IPython.lib.backgroundjobs.__name__
778 778 - IPython.lib.backgroundjobs.__package__
779 779 - IPython.lib.backgroundjobs.__spec__
780 780 - IPython.lib.kernel.__builtins__
781 781 - IPython.lib.kernel.__cached__
782 782 - IPython.lib.kernel.__doc__
783 783 - IPython.lib.kernel.__file__
784 784 - IPython.lib.kernel.__loader__
785 785 - IPython.lib.kernel.__name__
786 786 - IPython.lib.kernel.__package__
787 787 - IPython.lib.kernel.__spec__
788 788 - IPython.lib.kernel.__warningregistry__
789 789 - IPython.paths.fs_encoding
790 790 - IPython.terminal.debugger.DEFAULT_BUFFER
791 791 - IPython.terminal.debugger.cursor_in_leading_ws
792 792 - IPython.terminal.debugger.emacs_insert_mode
793 793 - IPython.terminal.debugger.has_selection
794 794 - IPython.terminal.debugger.vi_insert_mode
795 795 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
796 796 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
797 797 - IPython.testing.test
798 798 - IPython.utils.contexts.NoOpContext
799 799 - IPython.utils.io.IOStream
800 800 - IPython.utils.io.IOStream.close
801 801 - IPython.utils.io.IOStream.write
802 802 - IPython.utils.io.IOStream.writelines
803 803 - IPython.utils.io.__warningregistry__
804 804 - IPython.utils.io.atomic_writing
805 805 - IPython.utils.io.stderr
806 806 - IPython.utils.io.stdin
807 807 - IPython.utils.io.stdout
808 808 - IPython.utils.io.unicode_std_stream
809 809 - IPython.utils.path.get_ipython_cache_dir
810 810 - IPython.utils.path.get_ipython_dir
811 811 - IPython.utils.path.get_ipython_module_path
812 812 - IPython.utils.path.get_ipython_package_dir
813 813 - IPython.utils.path.locate_profile
814 814 - IPython.utils.path.unquote_filename
815 815 - IPython.utils.py3compat.PY2
816 816 - IPython.utils.py3compat.PY3
817 817 - IPython.utils.py3compat.buffer_to_bytes
818 818 - IPython.utils.py3compat.builtin_mod_name
819 819 - IPython.utils.py3compat.cast_bytes
820 820 - IPython.utils.py3compat.getcwd
821 821 - IPython.utils.py3compat.isidentifier
822 822 - IPython.utils.py3compat.u_format
823 823
824 824 The following signatures differ between 7.x and 8.0::
825 825
826 826 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
827 827 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
828 828
829 829 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
830 830 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
831 831
832 832 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
833 833 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
834 834
835 835 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
836 836 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
837 837
838 838 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
839 839 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
840 840
841 841 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
842 842 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
843 843
844 844 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
845 845 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
846 846
847 847 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
848 848 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
849 849
850 850 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
851 851 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
852 852
853 853 - IPython.terminal.embed.embed(**kwargs)
854 854 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
855 855
856 856 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
857 857 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
858 858
859 859 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
860 860 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
861 861
862 862 - IPython.utils.path.get_py_filename(name, force_win32='None')
863 863 + IPython.utils.path.get_py_filename(name)
864 864
865 865 The following are new attributes (that might be inherited)::
866 866
867 867 + IPython.core.completer.IPCompleter.unicode_names
868 868 + IPython.core.debugger.InterruptiblePdb.precmd
869 869 + IPython.core.debugger.Pdb.precmd
870 870 + IPython.core.ultratb.AutoFormattedTB.has_colors
871 871 + IPython.core.ultratb.ColorTB.has_colors
872 872 + IPython.core.ultratb.FormattedTB.has_colors
873 873 + IPython.core.ultratb.ListTB.has_colors
874 874 + IPython.core.ultratb.SyntaxTB.has_colors
875 875 + IPython.core.ultratb.TBTools.has_colors
876 876 + IPython.core.ultratb.VerboseTB.has_colors
877 877 + IPython.terminal.debugger.TerminalPdb.do_interact
878 878 + IPython.terminal.debugger.TerminalPdb.precmd
879 879
880 880 The following attribute/methods have been removed::
881 881
882 882 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
883 883 - IPython.core.ultratb.AutoFormattedTB.format_records
884 884 - IPython.core.ultratb.ColorTB.format_records
885 885 - IPython.core.ultratb.FormattedTB.format_records
886 886 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
887 887 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
888 888 - IPython.terminal.embed.InteractiveShellEmbed.write
889 889 - IPython.terminal.embed.InteractiveShellEmbed.write_err
890 890 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
891 891 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
892 892 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
893 893 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
894 894 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
895 895 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
896 896 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
897 897 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
General Comments 0
You need to be logged in to leave comments. Login now