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