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