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