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