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