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