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