##// END OF EJS Templates
what's new 8.9
Matthias Bussonnier -
Show More
@@ -1,1351 +1,1372 b''
1 1 ============
2 2 8.x Series
3 3 ============
4 4
5 5 .. _version 8.9.0:
6 6
7 7 IPython 8.9.0
8 8 -------------
9 9
10 Second release of IPython in 2023, last Friday of the month, we are back on
11 track. This is a small release with a few bug-fixes, and improvements, mostly
12 with respect to terminal shortcuts.
13
10 14
11 15 The biggest improvement for 8.9 is a drastic amelioration if the
12 auto-suggestions sponsored by D.E. Shaw and implmented by the more and more
16 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
13 17 active contributor `@krassowski <https://github.com/krassowski>`.
14 18
15 19 - ``right`` accepts a single character from suggestion
16 20 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
17 21 precedence and need to be disabled to make this work)
18 22 - ``backspace`` deletes a character and resumes hinting autosuggestions
19 23 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
20 24 - ``backspace`` deletes a character and resumes hinting autosuggestions
21 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
25 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
22 26 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
23 27
24 This is best described by the Gif posted by @krassowski, and in the PR itself
25 :ghpull:`13888`.
28 This is best described by the Gif posted by `@krassowski
29 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
26 30
27 31 .. image:: ../_images/autosuggest.gif
28 32
29 Please report any feedback in order for us to improve the user experience.
33 Please report any feedback in order for us to improve the user experience.
30 34 In particular we are also working on making the shortcuts configurable.
31 35
36 If you are interested into better terminal shortcut, I also invite you to
37 participate in issue `13879
38 <https://github.com/ipython/ipython/issues/13879>`__.
39
40
41 As we follow `NEP29
42 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
43 IPython will officially stop supporting numpy 1.20, and will stop supporting
44 Python 3.8 after April release.
45
46 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
47 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
48
49
50 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
51 work on IPython and related libraries.
52
32 53 .. _version 8.8.0:
33 54
34 55 IPython 8.8.0
35 56 -------------
36 57
37 58 First release of IPython in 2023 as there was no release at the end of
38 59 December.
39 60
40 61 This is an unusually big release (relatively speaking) with more than 15 Pull
41 62 Requests merge.
42 63
43 64 Of particular interest are:
44 65
45 66 - :ghpull:`13852` that replace the greedy completer and improve
46 67 completion, in particular for dictionary keys.
47 68 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
48 69 bundled in wheels.
49 70 - :ghpull:`13869` that implements tab completions for IPython options in the
50 71 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
51 72 believe this also needs a recent version of Traitlets.
52 73 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
53 74 configurable.
54 75 - :ghpull:`13880` that remove minor-version entrypoints as the minor version
55 76 entry points that would be included in the wheel would be the one of the
56 77 Python version that was used to build the ``whl`` file.
57 78
58 79 In no particular order, the rest of the changes update the test suite to be
59 80 compatible with Pygments 2.14, various docfixes, testing on more recent python
60 81 versions and various updates.
61 82
62 83 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
63 84 <https://github.com/ipython/ipython/milestone/110>`__.
64 85
65 86 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
66 87 merging contributions.
67 88
68 89 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
69 90 work on IPython and related libraries.
70 91
71 92 .. _version 8.7.0:
72 93
73 94 IPython 8.7.0
74 95 -------------
75 96
76 97
77 98 Small release of IPython with a couple of bug fixes and new features for this
78 99 month. Next month is end of year, it is unclear if there will be a release close
79 100 the new year's eve, or if the next release will be at end of January.
80 101
81 102 Here are a few of the relevant fixes,
82 103 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
83 104 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
84 105
85 106
86 107 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
87 108 - IPython shipped with the ``py.typed`` marker now, and we are progressively
88 109 adding more types. :ghpull:`13831`
89 110 - :ghpull:`13817` add configuration of code blacks formatting.
90 111
91 112
92 113 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
93 114 work on IPython and related libraries.
94 115
95 116
96 117 .. _version 8.6.0:
97 118
98 119 IPython 8.6.0
99 120 -------------
100 121
101 122 Back to a more regular release schedule (at least I try), as Friday is
102 123 already over by more than 24h hours. This is a slightly bigger release with a
103 124 few new features that contain no less then 25 PRs.
104 125
105 126 We'll notably found a couple of non negligible changes:
106 127
107 128 The ``install_ext`` and related functions have been removed after being
108 129 deprecated for years. You can use pip to install extensions. ``pip`` did not
109 130 exists when ``install_ext`` was introduced. You can still load local extensions
110 131 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
111 132
112 133 IPython now have extra entry points that that the major *and minor* version of
113 134 python. For some of you this mean that you can do a quick ``ipython3.10`` to
114 135 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
115 136 as your main Python. :ghpull:`13743`
116 137
117 138 The completer matcher API have been improved. See :ghpull:`13745`. This should
118 139 improve the type inference and improve dict keys completions in many use case.
119 140 Tanks ``@krassowski`` for all the works, and the D.E. Shaw group for sponsoring
120 141 it.
121 142
122 143 The color of error nodes in tracebacks can now be customized. See
123 144 :ghpull:`13756`. This is a private attribute until someone find the time to
124 145 properly add a configuration option. Note that with Python 3.11 that also show
125 146 the relevant nodes in traceback, it would be good to leverage this informations
126 147 (plus the "did you mean" info added on attribute errors). But that's likely work
127 148 I won't have time to do before long, so contributions welcome.
128 149
129 150 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
130 151
131 152
132 153 The ``open()`` function present in the user namespace by default will now refuse
133 154 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
134 155 This mostly occurs in teaching context when incorrect values get passed around.
135 156
136 157
137 158 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
138 159 objects insides arrays. That is to say, the following now works::
139 160
140 161
141 162 >>> def my_func(*arg, **kwargs):pass
142 163 >>> container = [my_func]
143 164 >>> container[0]?
144 165
145 166
146 167 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
147 168 method. So don't put side effects in your ``getitems``. Thanks the D.E. Shaw
148 169 group for the request and sponsoring the work.
149 170
150 171
151 172 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
152 173 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
153 174
154 175 Thanks to all hacktoberfest contributors, please contribute to
155 176 `closember.org <https://closember.org/>`__.
156 177
157 178 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
158 179 work on IPython and related libraries.
159 180
160 181 .. _version 8.5.0:
161 182
162 183 IPython 8.5.0
163 184 -------------
164 185
165 186 First release since a couple of month due to various reasons and timing preventing
166 187 me for sticking to the usual monthly release the last Friday of each month. This
167 188 is of non negligible size as it has more than two dozen PRs with various fixes
168 189 an bug fixes.
169 190
170 191 Many thanks to everybody who contributed PRs for your patience in review and
171 192 merges.
172 193
173 194 Here is a non exhaustive list of changes that have been implemented for IPython
174 195 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
175 196 8.5 milestone
176 197 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
177 198
178 199 - Added shortcut for accepting auto suggestion. The End key shortcut for
179 200 accepting auto-suggestion This binding works in Vi mode too, provided
180 201 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
181 202 ``True`` :ghpull:`13566`.
182 203
183 204 - No popup in window for latex generation w hen generating latex (e.g. via
184 205 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
185 206
186 207 - Fixed error raised when attempting to tab-complete an input string with
187 208 consecutive periods or forward slashes (such as "file:///var/log/...").
188 209 :ghpull:`13675`
189 210
190 211 - Relative filenames in Latex rendering :
191 212 The `latex_to_png_dvipng` command internally generates input and output file
192 213 arguments to `latex` and `dvipis`. These arguments are now generated as
193 214 relative files to the current working directory instead of absolute file
194 215 paths. This solves a problem where the current working directory contains
195 216 characters that are not handled properly by `latex` and `dvips`. There are
196 217 no changes to the user API. :ghpull:`13680`
197 218
198 219 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
199 220 restructured text documents executed with the ipython-sphinx extension
200 221 skipped any lines of code containing python decorators. :ghpull:`13612`
201 222
202 223 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
203 224 - Fix paste magic on wayland. :ghpull:`13671`
204 225 - show maxlen in deque's repr. :ghpull:`13648`
205 226
206 227 Restore line numbers for Input
207 228 ------------------------------
208 229
209 230 Line number information in tracebacks from input are restored.
210 231 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
211 232
212 233 So, instead of::
213 234
214 235 ---------------------------------------------------------------------------
215 236 ZeroDivisionError Traceback (most recent call last)
216 237 Input In [3], in <cell line: 1>()
217 238 ----> 1 myfunc(2)
218 239
219 240 Input In [2], in myfunc(z)
220 241 1 def myfunc(z):
221 242 ----> 2 foo.boo(z-1)
222 243
223 244 File ~/code/python/ipython/foo.py:3, in boo(x)
224 245 2 def boo(x):
225 246 ----> 3 return 1/(1-x)
226 247
227 248 ZeroDivisionError: division by zero
228 249
229 250 The error traceback now looks like::
230 251
231 252 ---------------------------------------------------------------------------
232 253 ZeroDivisionError Traceback (most recent call last)
233 254 Cell In [3], line 1
234 255 ----> 1 myfunc(2)
235 256
236 257 Cell In [2], line 2, in myfunc(z)
237 258 1 def myfunc(z):
238 259 ----> 2 foo.boo(z-1)
239 260
240 261 File ~/code/python/ipython/foo.py:3, in boo(x)
241 262 2 def boo(x):
242 263 ----> 3 return 1/(1-x)
243 264
244 265 ZeroDivisionError: division by zero
245 266
246 267 or, with xmode=Plain::
247 268
248 269 Traceback (most recent call last):
249 270 Cell In [12], line 1
250 271 myfunc(2)
251 272 Cell In [6], line 2 in myfunc
252 273 foo.boo(z-1)
253 274 File ~/code/python/ipython/foo.py:3 in boo
254 275 return 1/(1-x)
255 276 ZeroDivisionError: division by zero
256 277
257 278 :ghpull:`13560`
258 279
259 280 New setting to silence warning if working inside a virtual environment
260 281 ----------------------------------------------------------------------
261 282
262 283 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
263 284
264 285 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
265 286
266 287 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
267 288
268 289 :ghpull:`13706`
269 290
270 291 -------
271 292
272 293 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
273 294 work on IPython and related libraries.
274 295
275 296
276 297 .. _version 8.4.0:
277 298
278 299 IPython 8.4.0
279 300 -------------
280 301
281 302 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
282 303 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
283 304
284 305 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
285 306 work on IPython and related libraries.
286 307
287 308
288 309 .. _version 8.3.0:
289 310
290 311 IPython 8.3.0
291 312 -------------
292 313
293 314 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
294 315 ``set_next_input`` as most frontend allow proper multiline editing and it was
295 316 causing issues for many users of multi-cell frontends. This has been backported to 7.33
296 317
297 318
298 319 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
299 320 the info object when frontend provide it. This has been backported to 7.33
300 321
301 322 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
302 323 auto-suggestion.
303 324
304 325 - :ghpull:`13657` fix issue where history from different sessions would be mixed.
305 326
306 327 .. _version 8.2.0:
307 328
308 329 IPython 8.2.0
309 330 -------------
310 331
311 332 IPython 8.2 mostly bring bugfixes to IPython.
312 333
313 334 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
314 335 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
315 336 - History is now pulled from the sqitel database and not from in-memory.
316 337 In particular when using the ``%paste`` magic, the content of the pasted text will
317 338 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
318 339 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
319 340 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
320 341
321 342
322 343 I am still trying to fix and investigate :ghissue:`13598`, which seem to be
323 344 random, and would appreciate help if you find reproducible minimal case. I've
324 345 tried to make various changes to the codebase to mitigate it, but a proper fix
325 346 will be difficult without understanding the cause.
326 347
327 348
328 349 All the issues on pull-requests for this release can be found in the `8.2
329 350 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
330 351 documentation only PR can be found as part of the `7.33 milestone
331 352 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
332 353
333 354 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
334 355 work on IPython and related libraries.
335 356
336 357 .. _version 8.1.1:
337 358
338 359 IPython 8.1.1
339 360 -------------
340 361
341 362 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
342 363
343 364 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
344 365 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
345 366
346 367 .. _version 8.1:
347 368
348 369 IPython 8.1.0
349 370 -------------
350 371
351 372 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
352 373 Update a few behavior that were problematic with the 8.0 as with many new major
353 374 release.
354 375
355 376 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
356 377 features listed in :ref:`version 7.32`.
357 378
358 379 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
359 380 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
360 381 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
361 382 is now explicit in ``setup.cfg``/``setup.py``
362 383 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
363 384 - Multi-line edit executes too early with await. :ghpull:`13424`
364 385
365 386 - ``black`` is back as an optional dependency, and autoformatting disabled by
366 387 default until some fixes are implemented (black improperly reformat magics).
367 388 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
368 389 reformatter has been added :ghpull:`13528` . You can use
369 390 ``TerminalInteractiveShell.autoformatter="black"``,
370 391 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formating
371 392 with black, or switch to yapf.
372 393
373 394 - Fix and issue where ``display`` was not defined.
374 395
375 396 - Auto suggestions are now configurable. Currently only
376 397 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
377 398 welcomed. :ghpull:`13475`
378 399
379 400 - multiple packaging/testing improvement to simplify downstream packaging
380 401 (xfail with reasons, try to not access network...).
381 402
382 403 - Update deprecation. ``InteractiveShell.magic`` internal method has been
383 404 deprecated for many years but did not emit a warning until now.
384 405
385 406 - internal ``appended_to_syspath`` context manager has been deprecated.
386 407
387 408 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
388 409
389 410 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
390 411
391 412 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
392 413
393 414 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
394 415 removed.
395 416
396 417 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
397 418
398 419
399 420 We want to remind users that IPython is part of the Jupyter organisations, and
400 421 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
401 422 Abuse and non-respectful comments on discussion will not be tolerated.
402 423
403 424 Many thanks to all the contributors to this release, many of the above fixed issue and
404 425 new features where done by first time contributors, showing there is still
405 426 plenty of easy contribution possible in IPython
406 427 . You can find all individual contributions
407 428 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
408 429
409 430 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
410 431 work on IPython and related libraries. In particular the Lazy autoloading of
411 432 magics that you will find described in the 7.32 release notes.
412 433
413 434
414 435 .. _version 8.0.1:
415 436
416 437 IPython 8.0.1 (CVE-2022-21699)
417 438 ------------------------------
418 439
419 440 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
420 441 values in order to prevent potential Execution with Unnecessary Privileges.
421 442
422 443 Almost all version of IPython looks for configuration and profiles in current
423 444 working directory. Since IPython was developed before pip and environments
424 445 existed it was used a convenient way to load code/packages in a project
425 446 dependant way.
426 447
427 448 In 2022, it is not necessary anymore, and can lead to confusing behavior where
428 449 for example cloning a repository and starting IPython or loading a notebook from
429 450 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
430 451 code execution.
431 452
432 453
433 454 I did not find any standard way for packaged to advertise CVEs they fix, I'm
434 455 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
435 456 list the CVEs that should have been fixed. This attribute is informational only
436 457 as if a executable has a flaw, this value can always be changed by an attacker.
437 458
438 459 .. code::
439 460
440 461 In [1]: import IPython
441 462
442 463 In [2]: IPython.__patched_cves__
443 464 Out[2]: {'CVE-2022-21699'}
444 465
445 466 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
446 467 Out[3]: True
447 468
448 469 Thus starting with this version:
449 470
450 471 - The current working directory is not searched anymore for profiles or
451 472 configurations files.
452 473 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
453 474 the list of fixed CVE. This is informational only.
454 475
455 476 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
456 477
457 478
458 479 .. _version 8.0:
459 480
460 481 IPython 8.0
461 482 -----------
462 483
463 484 IPython 8.0 is bringing a large number of new features and improvements to both the
464 485 user of the terminal and of the kernel via Jupyter. The removal of compatibility
465 486 with older version of Python is also the opportunity to do a couple of
466 487 performance improvements in particular with respect to startup time.
467 488 The 8.x branch started diverging from its predecessor around IPython 7.12
468 489 (January 2020).
469 490
470 491 This release contains 250+ pull requests, in addition to many of the features
471 492 and backports that have made it to the 7.x branch. Please see the
472 493 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
473 494
474 495 Please feel free to send pull requests to updates those notes after release,
475 496 I have likely forgotten a few things reviewing 250+ PRs.
476 497
477 498 Dependencies changes/downstream packaging
478 499 -----------------------------------------
479 500
480 501 Most of our building steps have been changed to be (mostly) declarative
481 502 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
482 503 looking for help to do so.
483 504
484 505 - minimum supported ``traitlets`` version is now 5+
485 506 - we now require ``stack_data``
486 507 - minimal Python is now 3.8
487 508 - ``nose`` is not a testing requirement anymore
488 509 - ``pytest`` replaces nose.
489 510 - ``iptest``/``iptest3`` cli entrypoints do not exists anymore.
490 511 - minimum officially support ``numpy`` version has been bumped, but this should
491 512 not have much effect on packaging.
492 513
493 514
494 515 Deprecation and removal
495 516 -----------------------
496 517
497 518 We removed almost all features, arguments, functions, and modules that were
498 519 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
499 520 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
500 521 The few remaining deprecated features we left have better deprecation warnings
501 522 or have been turned into explicit errors for better error messages.
502 523
503 524 I will use this occasion to add the following requests to anyone emitting a
504 525 deprecation warning:
505 526
506 527 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
507 528 caller context, and not the callee one.
508 529 - Please add **since which version** something is deprecated.
509 530
510 531 As a side note, it is much easier to conditionally compare version
511 532 numbers rather than using ``try/except`` when functionality changes with a version.
512 533
513 534 I won't list all the removed features here, but modules like ``IPython.kernel``,
514 535 which was just a shim module around ``ipykernel`` for the past 8 years, have been
515 536 removed, and so many other similar things that pre-date the name **Jupyter**
516 537 itself.
517 538
518 539 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
519 540 handled by ``load_extension``.
520 541
521 542 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
522 543 other packages and no longer need to be inside IPython.
523 544
524 545
525 546 Documentation
526 547 -------------
527 548
528 549 The majority of our docstrings have now been reformatted and automatically fixed by
529 550 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
530 551 to numpydoc.
531 552
532 553 Type annotations
533 554 ----------------
534 555
535 556 While IPython itself is highly dynamic and can't be completely typed, many of
536 557 the functions now have type annotations, and part of the codebase is now checked
537 558 by mypy.
538 559
539 560
540 561 Featured changes
541 562 ----------------
542 563
543 564 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
544 565 Please note as well that many features have been added in the 7.x branch as well
545 566 (and hence why you want to read the 7.x what's new notes), in particular
546 567 features contributed by QuantStack (with respect to debugger protocol and Xeus
547 568 Python), as well as many debugger features that I was pleased to implement as
548 569 part of my work at QuanSight and sponsored by DE Shaw.
549 570
550 571 Traceback improvements
551 572 ~~~~~~~~~~~~~~~~~~~~~~
552 573
553 574 Previously, error tracebacks for errors happening in code cells were showing a
554 575 hash, the one used for compiling the Python AST::
555 576
556 577 In [1]: def foo():
557 578 ...: return 3 / 0
558 579 ...:
559 580
560 581 In [2]: foo()
561 582 ---------------------------------------------------------------------------
562 583 ZeroDivisionError Traceback (most recent call last)
563 584 <ipython-input-2-c19b6d9633cf> in <module>
564 585 ----> 1 foo()
565 586
566 587 <ipython-input-1-1595a74c32d5> in foo()
567 588 1 def foo():
568 589 ----> 2 return 3 / 0
569 590 3
570 591
571 592 ZeroDivisionError: division by zero
572 593
573 594 The error traceback is now correctly formatted, showing the cell number in which the error happened::
574 595
575 596 In [1]: def foo():
576 597 ...: return 3 / 0
577 598 ...:
578 599
579 600 Input In [2]: foo()
580 601 ---------------------------------------------------------------------------
581 602 ZeroDivisionError Traceback (most recent call last)
582 603 input In [2], in <module>
583 604 ----> 1 foo()
584 605
585 606 Input In [1], in foo()
586 607 1 def foo():
587 608 ----> 2 return 3 / 0
588 609
589 610 ZeroDivisionError: division by zero
590 611
591 612 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
592 613 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
593 614
594 615 For example in the following snippet::
595 616
596 617 def foo(i):
597 618 x = [[[0]]]
598 619 return x[0][i][0]
599 620
600 621
601 622 def bar():
602 623 return foo(0) + foo(
603 624 1
604 625 ) + foo(2)
605 626
606 627
607 628 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
608 629 and IPython 8.0 is capable of telling you where the index error occurs::
609 630
610 631
611 632 IndexError
612 633 Input In [2], in <module>
613 634 ----> 1 bar()
614 635 ^^^^^
615 636
616 637 Input In [1], in bar()
617 638 6 def bar():
618 639 ----> 7 return foo(0) + foo(
619 640 ^^^^
620 641 8 1
621 642 ^^^^^^^^
622 643 9 ) + foo(2)
623 644 ^^^^
624 645
625 646 Input In [1], in foo(i)
626 647 1 def foo(i):
627 648 2 x = [[[0]]]
628 649 ----> 3 return x[0][i][0]
629 650 ^^^^^^^
630 651
631 652 The corresponding locations marked here with ``^`` will show up highlighted in
632 653 the terminal and notebooks.
633 654
634 655 Finally, a colon ``::`` and line number is appended after a filename in
635 656 traceback::
636 657
637 658
638 659 ZeroDivisionError Traceback (most recent call last)
639 660 File ~/error.py:4, in <module>
640 661 1 def f():
641 662 2 1/0
642 663 ----> 4 f()
643 664
644 665 File ~/error.py:2, in f()
645 666 1 def f():
646 667 ----> 2 1/0
647 668
648 669 Many terminals and editors have integrations enabling you to directly jump to the
649 670 relevant file/line when this syntax is used, so this small addition may have a high
650 671 impact on productivity.
651 672
652 673
653 674 Autosuggestions
654 675 ~~~~~~~~~~~~~~~
655 676
656 677 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>`__.
657 678
658 679 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
659 680 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
660 681
661 682 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
662 683 or right arrow as described below.
663 684
664 685 1. Start ipython
665 686
666 687 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
667 688
668 689 2. Run ``print("hello")``
669 690
670 691 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
671 692
672 693 3. start typing ``print`` again to see the autosuggestion
673 694
674 695 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
675 696
676 697 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
677 698
678 699 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
679 700
680 701 You can also complete word by word:
681 702
682 703 1. Run ``def say_hello(): print("hello")``
683 704
684 705 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
685 706
686 707 2. Start typing the first letter if ``def`` to see the autosuggestion
687 708
688 709 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
689 710
690 711 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
691 712
692 713 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
693 714
694 715 Importantly, this feature does not interfere with tab completion:
695 716
696 717 1. After running ``def say_hello(): print("hello")``, press d
697 718
698 719 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
699 720
700 721 2. Press Tab to start tab completion
701 722
702 723 .. image:: ../_images/8.0/auto_suggest_d_completions.png
703 724
704 725 3A. Press Tab again to select the first option
705 726
706 727 .. image:: ../_images/8.0/auto_suggest_def_completions.png
707 728
708 729 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
709 730
710 731 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
711 732
712 733 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
713 734
714 735 .. image:: ../_images/8.0/auto_suggest_match_parens.png
715 736
716 737
717 738 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
718 739
719 740 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
720 741 - 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/>`__.
721 742
722 743
723 744 Show pinfo information in ipdb using "?" and "??"
724 745 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
725 746
726 747 In IPDB, it is now possible to show the information about an object using "?"
727 748 and "??", in much the same way that it can be done when using the IPython prompt::
728 749
729 750 ipdb> partial?
730 751 Init signature: partial(self, /, *args, **kwargs)
731 752 Docstring:
732 753 partial(func, *args, **keywords) - new function with partial application
733 754 of the given arguments and keywords.
734 755 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
735 756 Type: type
736 757 Subclasses:
737 758
738 759 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
739 760
740 761
741 762 Autoreload 3 feature
742 763 ~~~~~~~~~~~~~~~~~~~~
743 764
744 765 Example: When an IPython session is run with the 'autoreload' extension loaded,
745 766 you will now have the option '3' to select, which means the following:
746 767
747 768 1. replicate all functionality from option 2
748 769 2. autoload all new funcs/classes/enums/globals from the module when they are added
749 770 3. autoload all newly imported funcs/classes/enums/globals from external modules
750 771
751 772 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
752 773
753 774 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
754 775
755 776 Auto formatting with black in the CLI
756 777 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
757 778
758 779 This feature was present in 7.x, but disabled by default.
759 780
760 781 In 8.0, input was automatically reformatted with Black when black was installed.
761 782 This feature has been reverted for the time being.
762 783 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
763 784
764 785 History Range Glob feature
765 786 ~~~~~~~~~~~~~~~~~~~~~~~~~~
766 787
767 788 Previously, when using ``%history``, users could specify either
768 789 a range of sessions and lines, for example:
769 790
770 791 .. code-block:: python
771 792
772 793 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
773 794 # to the fifth line of 6 sessions ago.``
774 795
775 796 Or users could specify a glob pattern:
776 797
777 798 .. code-block:: python
778 799
779 800 -g <pattern> # glob ALL history for the specified pattern.
780 801
781 802 However users could *not* specify both.
782 803
783 804 If a user *did* specify both a range and a glob pattern,
784 805 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
785 806
786 807 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.
787 808
788 809 Don't start a multi-line cell with sunken parenthesis
789 810 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
790 811
791 812 From now on, IPython will not ask for the next line of input when given a single
792 813 line with more closing than opening brackets. For example, this means that if
793 814 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
794 815 the ``...:`` prompt continuation.
795 816
796 817 IPython shell for ipdb interact
797 818 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
798 819
799 820 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
800 821
801 822 Automatic Vi prompt stripping
802 823 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
803 824
804 825 When pasting code into IPython, it will strip the leading prompt characters if
805 826 there are any. For example, you can paste the following code into the console -
806 827 it will still work, even though each line is prefixed with prompts (``In``,
807 828 ``Out``)::
808 829
809 830 In [1]: 2 * 2 == 4
810 831 Out[1]: True
811 832
812 833 In [2]: print("This still works as pasted")
813 834
814 835
815 836 Previously, this was not the case for the Vi-mode prompts::
816 837
817 838 In [1]: [ins] In [13]: 2 * 2 == 4
818 839 ...: Out[13]: True
819 840 ...:
820 841 File "<ipython-input-1-727bb88eaf33>", line 1
821 842 [ins] In [13]: 2 * 2 == 4
822 843 ^
823 844 SyntaxError: invalid syntax
824 845
825 846 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
826 847 skipped just as the normal ``In`` would be.
827 848
828 849 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
829 850 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
830 851
831 852 Empty History Ranges
832 853 ~~~~~~~~~~~~~~~~~~~~
833 854
834 855 A number of magics that take history ranges can now be used with an empty
835 856 range. These magics are:
836 857
837 858 * ``%save``
838 859 * ``%load``
839 860 * ``%pastebin``
840 861 * ``%pycat``
841 862
842 863 Using them this way will make them take the history of the current session up
843 864 to the point of the magic call (such that the magic itself will not be
844 865 included).
845 866
846 867 Therefore it is now possible to save the whole history to a file using
847 868 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
848 869 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
849 870 ``%pastebin``, or view the whole thing syntax-highlighted with a single
850 871 ``%pycat``.
851 872
852 873
853 874 Windows timing implementation: Switch to process_time
854 875 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
855 876 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
856 877 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
857 878 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
858 879
859 880 Miscellaneous
860 881 ~~~~~~~~~~~~~
861 882 - Non-text formatters are not disabled in the terminal, which should simplify
862 883 writing extensions displaying images or other mimetypes in supporting terminals.
863 884 :ghpull:`12315`
864 885 - It is now possible to automatically insert matching brackets in Terminal IPython using the
865 886 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
866 887 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
867 888 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
868 889 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
869 890 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
870 891 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
871 892 - The debugger now has a persistent history, which should make it less
872 893 annoying to retype commands :ghpull:`13246`
873 894 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
874 895 now warn users if they use one of those commands. :ghpull:`12954`
875 896 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
876 897
877 898 Re-added support for XDG config directories
878 899 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
879 900
880 901 XDG support through the years comes and goes. There is a tension between having
881 902 an identical location for configuration in all platforms versus having simple instructions.
882 903 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
883 904 config files back into ``~/.ipython``. That migration code has now been removed.
884 905 IPython now checks the XDG locations, so if you _manually_ move your config
885 906 files to your preferred location, IPython will not move them back.
886 907
887 908
888 909 Preparing for Python 3.10
889 910 -------------------------
890 911
891 912 To prepare for Python 3.10, we have started working on removing reliance and
892 913 any dependency that is not compatible with Python 3.10. This includes migrating our
893 914 test suite to pytest and starting to remove nose. This also means that the
894 915 ``iptest`` command is now gone and all testing is via pytest.
895 916
896 917 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
897 918 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
898 919 who did a fantastic job at updating our code base, migrating to pytest, pushing
899 920 our coverage, and fixing a large number of bugs. I highly recommend contacting
900 921 them if you need help with C++ and Python projects.
901 922
902 923 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+>`__
903 924
904 925 Removing support for older Python versions
905 926 ------------------------------------------
906 927
907 928
908 929 We are removing support for Python up through 3.7, allowing internal code to use the more
909 930 efficient ``pathlib`` and to make better use of type annotations.
910 931
911 932 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
912 933 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
913 934
914 935
915 936 We had about 34 PRs only to update some logic to update some functions from managing strings to
916 937 using Pathlib.
917 938
918 939 The completer has also seen significant updates and now makes use of newer Jedi APIs,
919 940 offering faster and more reliable tab completion.
920 941
921 942 Misc Statistics
922 943 ---------------
923 944
924 945 Here are some numbers::
925 946
926 947 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
927 948 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
928 949
929 950 $ git diff --stat 7.x...master | tail -1
930 951 340 files changed, 13399 insertions(+), 12421 deletions(-)
931 952
932 953 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
933 954 maintainers pushing buttons).::
934 955
935 956 $ git shortlog -s --no-merges 7.x...master | sort -nr
936 957 535 Matthias Bussonnier
937 958 86 Nikita Kniazev
938 959 69 Blazej Michalik
939 960 49 Samuel Gaist
940 961 27 Itamar Turner-Trauring
941 962 18 Spas Kalaydzhisyki
942 963 17 Thomas Kluyver
943 964 17 Quentin Peter
944 965 17 James Morris
945 966 17 Artur Svistunov
946 967 15 Bart Skowron
947 968 14 Alex Hall
948 969 13 rushabh-v
949 970 13 Terry Davis
950 971 13 Benjamin Ragan-Kelley
951 972 8 martinRenou
952 973 8 farisachugthai
953 974 7 dswij
954 975 7 Gal B
955 976 7 Corentin Cadiou
956 977 6 yuji96
957 978 6 Martin Skarzynski
958 979 6 Justin Palmer
959 980 6 Daniel Goldfarb
960 981 6 Ben Greiner
961 982 5 Sammy Al Hashemi
962 983 5 Paul Ivanov
963 984 5 Inception95
964 985 5 Eyenpi
965 986 5 Douglas Blank
966 987 5 Coco Mishra
967 988 5 Bibo Hao
968 989 5 AndrΓ© A. Gomes
969 990 5 Ahmed Fasih
970 991 4 takuya fujiwara
971 992 4 palewire
972 993 4 Thomas A Caswell
973 994 4 Talley Lambert
974 995 4 Scott Sanderson
975 996 4 Ram Rachum
976 997 4 Nick Muoh
977 998 4 Nathan Goldbaum
978 999 4 Mithil Poojary
979 1000 4 Michael T
980 1001 4 Jakub Klus
981 1002 4 Ian Castleden
982 1003 4 Eli Rykoff
983 1004 4 Ashwin Vishnu
984 1005 3 谭九鼎
985 1006 3 sleeping
986 1007 3 Sylvain Corlay
987 1008 3 Peter Corke
988 1009 3 Paul Bissex
989 1010 3 Matthew Feickert
990 1011 3 Fernando Perez
991 1012 3 Eric Wieser
992 1013 3 Daniel Mietchen
993 1014 3 Aditya Sathe
994 1015 3 007vedant
995 1016 2 rchiodo
996 1017 2 nicolaslazo
997 1018 2 luttik
998 1019 2 gorogoroumaru
999 1020 2 foobarbyte
1000 1021 2 bar-hen
1001 1022 2 Theo Ouzhinski
1002 1023 2 Strawkage
1003 1024 2 Samreen Zarroug
1004 1025 2 Pete Blois
1005 1026 2 Meysam Azad
1006 1027 2 Matthieu Ancellin
1007 1028 2 Mark Schmitz
1008 1029 2 Maor Kleinberger
1009 1030 2 MRCWirtz
1010 1031 2 Lumir Balhar
1011 1032 2 Julien Rabinow
1012 1033 2 Juan Luis Cano RodrΓ­guez
1013 1034 2 Joyce Er
1014 1035 2 Jakub
1015 1036 2 Faris A Chugthai
1016 1037 2 Ethan Madden
1017 1038 2 Dimitri Papadopoulos
1018 1039 2 Diego Fernandez
1019 1040 2 Daniel Shimon
1020 1041 2 Coco Bennett
1021 1042 2 Carlos Cordoba
1022 1043 2 Boyuan Liu
1023 1044 2 BaoGiang HoangVu
1024 1045 2 Augusto
1025 1046 2 Arthur Svistunov
1026 1047 2 Arthur Moreira
1027 1048 2 Ali Nabipour
1028 1049 2 Adam Hackbarth
1029 1050 1 richard
1030 1051 1 linar-jether
1031 1052 1 lbennett
1032 1053 1 juacrumar
1033 1054 1 gpotter2
1034 1055 1 digitalvirtuoso
1035 1056 1 dalthviz
1036 1057 1 Yonatan Goldschmidt
1037 1058 1 Tomasz KΕ‚oczko
1038 1059 1 Tobias Bengfort
1039 1060 1 Timur Kushukov
1040 1061 1 Thomas
1041 1062 1 Snir Broshi
1042 1063 1 Shao Yang Hong
1043 1064 1 Sanjana-03
1044 1065 1 Romulo Filho
1045 1066 1 Rodolfo Carvalho
1046 1067 1 Richard Shadrach
1047 1068 1 Reilly Tucker Siemens
1048 1069 1 Rakessh Roshan
1049 1070 1 Piers Titus van der Torren
1050 1071 1 PhanatosZou
1051 1072 1 Pavel Safronov
1052 1073 1 Paulo S. Costa
1053 1074 1 Paul McCarthy
1054 1075 1 NotWearingPants
1055 1076 1 Naelson Douglas
1056 1077 1 Michael Tiemann
1057 1078 1 Matt Wozniski
1058 1079 1 Markus Wageringel
1059 1080 1 Marcus Wirtz
1060 1081 1 Marcio Mazza
1061 1082 1 LumΓ­r 'Frenzy' Balhar
1062 1083 1 Lightyagami1
1063 1084 1 Leon Anavi
1064 1085 1 LeafyLi
1065 1086 1 L0uisJ0shua
1066 1087 1 Kyle Cutler
1067 1088 1 Krzysztof Cybulski
1068 1089 1 Kevin Kirsche
1069 1090 1 KIU Shueng Chuan
1070 1091 1 Jonathan Slenders
1071 1092 1 Jay Qi
1072 1093 1 Jake VanderPlas
1073 1094 1 Iwan Briquemont
1074 1095 1 Hussaina Begum Nandyala
1075 1096 1 Gordon Ball
1076 1097 1 Gabriel Simonetto
1077 1098 1 Frank Tobia
1078 1099 1 Erik
1079 1100 1 Elliott Sales de Andrade
1080 1101 1 Daniel Hahler
1081 1102 1 Dan Green-Leipciger
1082 1103 1 Dan Green
1083 1104 1 Damian Yurzola
1084 1105 1 Coon, Ethan T
1085 1106 1 Carol Willing
1086 1107 1 Brian Lee
1087 1108 1 Brendan Gerrity
1088 1109 1 Blake Griffin
1089 1110 1 Bastian Ebeling
1090 1111 1 Bartosz Telenczuk
1091 1112 1 Ankitsingh6299
1092 1113 1 Andrew Port
1093 1114 1 Andrew J. Hesford
1094 1115 1 Albert Zhang
1095 1116 1 Adam Johnson
1096 1117
1097 1118 This does not, of course, represent non-code contributions, for which we are also grateful.
1098 1119
1099 1120
1100 1121 API Changes using Frappuccino
1101 1122 -----------------------------
1102 1123
1103 1124 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
1104 1125
1105 1126
1106 1127 The following items are new in IPython 8.0 ::
1107 1128
1108 1129 + IPython.core.async_helpers.get_asyncio_loop()
1109 1130 + IPython.core.completer.Dict
1110 1131 + IPython.core.completer.Pattern
1111 1132 + IPython.core.completer.Sequence
1112 1133 + IPython.core.completer.__skip_doctest__
1113 1134 + IPython.core.debugger.Pdb.precmd(self, line)
1114 1135 + IPython.core.debugger.__skip_doctest__
1115 1136 + IPython.core.display.__getattr__(name)
1116 1137 + IPython.core.display.warn
1117 1138 + IPython.core.display_functions
1118 1139 + IPython.core.display_functions.DisplayHandle
1119 1140 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
1120 1141 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
1121 1142 + IPython.core.display_functions.__all__
1122 1143 + IPython.core.display_functions.__builtins__
1123 1144 + IPython.core.display_functions.__cached__
1124 1145 + IPython.core.display_functions.__doc__
1125 1146 + IPython.core.display_functions.__file__
1126 1147 + IPython.core.display_functions.__loader__
1127 1148 + IPython.core.display_functions.__name__
1128 1149 + IPython.core.display_functions.__package__
1129 1150 + IPython.core.display_functions.__spec__
1130 1151 + IPython.core.display_functions.b2a_hex
1131 1152 + IPython.core.display_functions.clear_output(wait=False)
1132 1153 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
1133 1154 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
1134 1155 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
1135 1156 + IPython.core.extensions.BUILTINS_EXTS
1136 1157 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
1137 1158 + IPython.core.interactiveshell.Callable
1138 1159 + IPython.core.interactiveshell.__annotations__
1139 1160 + IPython.core.ultratb.List
1140 1161 + IPython.core.ultratb.Tuple
1141 1162 + IPython.lib.pretty.CallExpression
1142 1163 + IPython.lib.pretty.CallExpression.factory(name)
1143 1164 + IPython.lib.pretty.RawStringLiteral
1144 1165 + IPython.lib.pretty.RawText
1145 1166 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
1146 1167 + IPython.terminal.embed.Set
1147 1168
1148 1169 The following items have been removed (or moved to superclass)::
1149 1170
1150 1171 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
1151 1172 - IPython.core.completer.Sentinel
1152 1173 - IPython.core.completer.skip_doctest
1153 1174 - IPython.core.debugger.Tracer
1154 1175 - IPython.core.display.DisplayHandle
1155 1176 - IPython.core.display.DisplayHandle.display
1156 1177 - IPython.core.display.DisplayHandle.update
1157 1178 - IPython.core.display.b2a_hex
1158 1179 - IPython.core.display.clear_output
1159 1180 - IPython.core.display.display
1160 1181 - IPython.core.display.publish_display_data
1161 1182 - IPython.core.display.update_display
1162 1183 - IPython.core.excolors.Deprec
1163 1184 - IPython.core.excolors.ExceptionColors
1164 1185 - IPython.core.history.warn
1165 1186 - IPython.core.hooks.late_startup_hook
1166 1187 - IPython.core.hooks.pre_run_code_hook
1167 1188 - IPython.core.hooks.shutdown_hook
1168 1189 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
1169 1190 - IPython.core.interactiveshell.InteractiveShell.init_readline
1170 1191 - IPython.core.interactiveshell.InteractiveShell.write
1171 1192 - IPython.core.interactiveshell.InteractiveShell.write_err
1172 1193 - IPython.core.interactiveshell.get_default_colors
1173 1194 - IPython.core.interactiveshell.removed_co_newlocals
1174 1195 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
1175 1196 - IPython.core.magics.script.PIPE
1176 1197 - IPython.core.prefilter.PrefilterManager.init_transformers
1177 1198 - IPython.core.release.classifiers
1178 1199 - IPython.core.release.description
1179 1200 - IPython.core.release.keywords
1180 1201 - IPython.core.release.long_description
1181 1202 - IPython.core.release.name
1182 1203 - IPython.core.release.platforms
1183 1204 - IPython.core.release.url
1184 1205 - IPython.core.ultratb.VerboseTB.format_records
1185 1206 - IPython.core.ultratb.find_recursion
1186 1207 - IPython.core.ultratb.findsource
1187 1208 - IPython.core.ultratb.fix_frame_records_filenames
1188 1209 - IPython.core.ultratb.inspect_error
1189 1210 - IPython.core.ultratb.is_recursion_error
1190 1211 - IPython.core.ultratb.with_patch_inspect
1191 1212 - IPython.external.__all__
1192 1213 - IPython.external.__builtins__
1193 1214 - IPython.external.__cached__
1194 1215 - IPython.external.__doc__
1195 1216 - IPython.external.__file__
1196 1217 - IPython.external.__loader__
1197 1218 - IPython.external.__name__
1198 1219 - IPython.external.__package__
1199 1220 - IPython.external.__path__
1200 1221 - IPython.external.__spec__
1201 1222 - IPython.kernel.KernelConnectionInfo
1202 1223 - IPython.kernel.__builtins__
1203 1224 - IPython.kernel.__cached__
1204 1225 - IPython.kernel.__warningregistry__
1205 1226 - IPython.kernel.pkg
1206 1227 - IPython.kernel.protocol_version
1207 1228 - IPython.kernel.protocol_version_info
1208 1229 - IPython.kernel.src
1209 1230 - IPython.kernel.version_info
1210 1231 - IPython.kernel.warn
1211 1232 - IPython.lib.backgroundjobs
1212 1233 - IPython.lib.backgroundjobs.BackgroundJobBase
1213 1234 - IPython.lib.backgroundjobs.BackgroundJobBase.run
1214 1235 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
1215 1236 - IPython.lib.backgroundjobs.BackgroundJobExpr
1216 1237 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
1217 1238 - IPython.lib.backgroundjobs.BackgroundJobFunc
1218 1239 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
1219 1240 - IPython.lib.backgroundjobs.BackgroundJobManager
1220 1241 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
1221 1242 - IPython.lib.backgroundjobs.BackgroundJobManager.new
1222 1243 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
1223 1244 - IPython.lib.backgroundjobs.BackgroundJobManager.result
1224 1245 - IPython.lib.backgroundjobs.BackgroundJobManager.status
1225 1246 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
1226 1247 - IPython.lib.backgroundjobs.__builtins__
1227 1248 - IPython.lib.backgroundjobs.__cached__
1228 1249 - IPython.lib.backgroundjobs.__doc__
1229 1250 - IPython.lib.backgroundjobs.__file__
1230 1251 - IPython.lib.backgroundjobs.__loader__
1231 1252 - IPython.lib.backgroundjobs.__name__
1232 1253 - IPython.lib.backgroundjobs.__package__
1233 1254 - IPython.lib.backgroundjobs.__spec__
1234 1255 - IPython.lib.kernel.__builtins__
1235 1256 - IPython.lib.kernel.__cached__
1236 1257 - IPython.lib.kernel.__doc__
1237 1258 - IPython.lib.kernel.__file__
1238 1259 - IPython.lib.kernel.__loader__
1239 1260 - IPython.lib.kernel.__name__
1240 1261 - IPython.lib.kernel.__package__
1241 1262 - IPython.lib.kernel.__spec__
1242 1263 - IPython.lib.kernel.__warningregistry__
1243 1264 - IPython.paths.fs_encoding
1244 1265 - IPython.terminal.debugger.DEFAULT_BUFFER
1245 1266 - IPython.terminal.debugger.cursor_in_leading_ws
1246 1267 - IPython.terminal.debugger.emacs_insert_mode
1247 1268 - IPython.terminal.debugger.has_selection
1248 1269 - IPython.terminal.debugger.vi_insert_mode
1249 1270 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
1250 1271 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
1251 1272 - IPython.testing.test
1252 1273 - IPython.utils.contexts.NoOpContext
1253 1274 - IPython.utils.io.IOStream
1254 1275 - IPython.utils.io.IOStream.close
1255 1276 - IPython.utils.io.IOStream.write
1256 1277 - IPython.utils.io.IOStream.writelines
1257 1278 - IPython.utils.io.__warningregistry__
1258 1279 - IPython.utils.io.atomic_writing
1259 1280 - IPython.utils.io.stderr
1260 1281 - IPython.utils.io.stdin
1261 1282 - IPython.utils.io.stdout
1262 1283 - IPython.utils.io.unicode_std_stream
1263 1284 - IPython.utils.path.get_ipython_cache_dir
1264 1285 - IPython.utils.path.get_ipython_dir
1265 1286 - IPython.utils.path.get_ipython_module_path
1266 1287 - IPython.utils.path.get_ipython_package_dir
1267 1288 - IPython.utils.path.locate_profile
1268 1289 - IPython.utils.path.unquote_filename
1269 1290 - IPython.utils.py3compat.PY2
1270 1291 - IPython.utils.py3compat.PY3
1271 1292 - IPython.utils.py3compat.buffer_to_bytes
1272 1293 - IPython.utils.py3compat.builtin_mod_name
1273 1294 - IPython.utils.py3compat.cast_bytes
1274 1295 - IPython.utils.py3compat.getcwd
1275 1296 - IPython.utils.py3compat.isidentifier
1276 1297 - IPython.utils.py3compat.u_format
1277 1298
1278 1299 The following signatures differ between 7.x and 8.0::
1279 1300
1280 1301 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
1281 1302 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
1282 1303
1283 1304 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
1284 1305 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
1285 1306
1286 1307 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
1287 1308 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
1288 1309
1289 1310 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
1290 1311 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
1291 1312
1292 1313 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
1293 1314 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
1294 1315
1295 1316 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
1296 1317 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
1297 1318
1298 1319 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
1299 1320 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
1300 1321
1301 1322 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
1302 1323 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
1303 1324
1304 1325 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
1305 1326 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
1306 1327
1307 1328 - IPython.terminal.embed.embed(**kwargs)
1308 1329 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
1309 1330
1310 1331 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
1311 1332 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
1312 1333
1313 1334 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
1314 1335 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
1315 1336
1316 1337 - IPython.utils.path.get_py_filename(name, force_win32='None')
1317 1338 + IPython.utils.path.get_py_filename(name)
1318 1339
1319 1340 The following are new attributes (that might be inherited)::
1320 1341
1321 1342 + IPython.core.completer.IPCompleter.unicode_names
1322 1343 + IPython.core.debugger.InterruptiblePdb.precmd
1323 1344 + IPython.core.debugger.Pdb.precmd
1324 1345 + IPython.core.ultratb.AutoFormattedTB.has_colors
1325 1346 + IPython.core.ultratb.ColorTB.has_colors
1326 1347 + IPython.core.ultratb.FormattedTB.has_colors
1327 1348 + IPython.core.ultratb.ListTB.has_colors
1328 1349 + IPython.core.ultratb.SyntaxTB.has_colors
1329 1350 + IPython.core.ultratb.TBTools.has_colors
1330 1351 + IPython.core.ultratb.VerboseTB.has_colors
1331 1352 + IPython.terminal.debugger.TerminalPdb.do_interact
1332 1353 + IPython.terminal.debugger.TerminalPdb.precmd
1333 1354
1334 1355 The following attribute/methods have been removed::
1335 1356
1336 1357 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
1337 1358 - IPython.core.ultratb.AutoFormattedTB.format_records
1338 1359 - IPython.core.ultratb.ColorTB.format_records
1339 1360 - IPython.core.ultratb.FormattedTB.format_records
1340 1361 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
1341 1362 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
1342 1363 - IPython.terminal.embed.InteractiveShellEmbed.write
1343 1364 - IPython.terminal.embed.InteractiveShellEmbed.write_err
1344 1365 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
1345 1366 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
1346 1367 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
1347 1368 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
1348 1369 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
1349 1370 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
1350 1371 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
1351 1372 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
General Comments 0
You need to be logged in to leave comments. Login now