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