##// END OF EJS Templates
wn 7.16.2
Matthias Bussonnier -
Show More
@@ -1,1658 +1,1671 b''
1 1 ============
2 2 7.x Series
3 3 ============
4 4
5 5 .. _version 7.29:
6 6
7 7 IPython 7.29
8 8 ============
9 9
10 10
11 11 IPython 7.29 brings a couple of new functionalities to IPython and a number of bugfixes.
12 12 It is one of the largest recent release, relatively speaking, with close to 15 Pull Requests.
13 13
14 14
15 15 - fix an issue where base64 was returned instead of bytes when showing figures :ghpull:`13162`
16 16 - fix compatibility with PyQt6, PySide 6 :ghpull:`13172`. This may be of
17 17 interest if you are running on Apple Silicon as only qt6.2+ is natively
18 18 compatible.
19 19 - fix matplotlib qtagg eventloop :ghpull:`13179`
20 20 - Multiple docs fixes, typos, ... etc.
21 21 - Debugger will now exit by default on SigInt :ghpull:`13218`, this will be
22 22 useful in notebook/lab if you forgot to exit the debugger. "Interrupt Kernel"
23 23 will now exist the debugger.
24 24
25 25 It give Pdb the ability to skip code in decorators. If functions contain a
26 26 special value names ``__debuggerskip__ = True|False``, the function will not be
27 27 stepped into, and Pdb will step into lower frames only if the value is set to
28 28 ``False``. The exact behavior is still likely to have corner cases and will be
29 29 refined in subsequent releases. Feedback welcome. See the debugger module
30 30 documentation for more info. Thanks to the `D. E. Shaw
31 31 group <https://deshaw.com/>`__ for funding this feature.
32 32
33 33 The main branch of IPython is receiving a number of changes as we received a
34 34 `NumFOCUS SDG <https://numfocus.org/programs/small-development-grants>`__
35 35 ($4800), to help us finish replacing ``nose`` by ``pytest``, and make IPython
36 36 future proof with an 8.0 release.
37 37
38 38
39 39 Many thanks to all the contributors to this release. You can find all individual
40 40 contributions to this milestone `on github
41 41 <https://github.com/ipython/ipython/milestone/93>`__.
42 42
43 43 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
44 44 work on IPython and related libraries.
45 45
46 46
47 47 .. _version 7.28:
48 48
49 49 IPython 7.28
50 50 ============
51 51
52 52
53 53 IPython 7.28 is again a minor release that mostly bring bugfixes, and couple of
54 54 improvement. Many thanks to MrMino, who again did all the work this month, and
55 55 made a number of documentation improvements.
56 56
57 57 Here is a non-exhaustive list of changes,
58 58
59 59 Fixes:
60 60
61 61 - async with doesn't allow newlines :ghpull:`13090`
62 62 - Dynamically changing to vi mode via %config magic) :ghpull:`13091`
63 63
64 64 Virtualenv handling fixes:
65 65
66 66 - init_virtualenv now uses Pathlib :ghpull:`12548`
67 67 - Fix Improper path comparison of virtualenv directories :ghpull:`13140`
68 68 - Fix virtual environment user warning for lower case pathes :ghpull:`13094`
69 69 - Adapt to all sorts of drive names for cygwin :ghpull:`13153`
70 70
71 71 New Features:
72 72
73 73 - enable autoplay in embed YouTube player :ghpull:`13133`
74 74
75 75 Documentation:
76 76
77 77 - Fix formatting for the core.interactiveshell documentation :ghpull:`13118`
78 78 - Fix broken ipyparallel's refs :ghpull:`13138`
79 79 - Improve formatting of %time documentation :ghpull:`13125`
80 80 - Reword the YouTubeVideo autoplay WN :ghpull:`13147`
81 81
82 82
83 83 Highlighted features
84 84 --------------------
85 85
86 86
87 87 ``YouTubeVideo`` autoplay and the ability to add extra attributes to ``IFrame``
88 88 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
89 89
90 90 You can add any extra attributes to the ``<iframe>`` tag using the new
91 91 ``extras`` argument in the ``IFrame`` class. For example::
92 92
93 93 In [1]: from IPython.display import IFrame
94 94
95 95 In [2]: IFrame(src="src", width=300, height=300, extras=['loading="eager"'])
96 96
97 97 The above cells will result in the following HTML code being displayed in a
98 98 notebook::
99 99
100 100 <iframe
101 101 width="300"
102 102 height="300"
103 103 src="src"
104 104 frameborder="0"
105 105 allowfullscreen
106 106 loading="eager"
107 107 ></iframe>
108 108
109 109 Related to the above, the ``YouTubeVideo`` class now takes an
110 110 ``allow_autoplay`` flag, which sets up the iframe of the embedded YouTube video
111 111 such that it allows autoplay.
112 112
113 113 .. note::
114 114 Whether this works depends on the autoplay policy of the browser rendering
115 115 the HTML allowing it. It also could get blocked by some browser extensions.
116 116
117 117 Try it out!
118 118 ::
119 119
120 120 In [1]: from IPython.display import YouTubeVideo
121 121
122 122 In [2]: YouTubeVideo("dQw4w9WgXcQ", allow_autoplay=True)
123 123
124 124
125 125
126 126 Thanks
127 127 ------
128 128
129 129 Many thanks to all the contributors to this release. You can find all individual
130 130 contributions to this milestone `on github
131 131 <https://github.com/ipython/ipython/milestone/92>`__.
132 132
133 133 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
134 134 work on IPython and related libraries.
135 135
136 136
137 137 .. _version 7.27:
138 138
139 139 IPython 7.27
140 140 ============
141 141
142 142 IPython 7.27 is a minor release that fixes a couple of issues and compatibility.
143 143
144 144 - Add support for GTK4 :ghpull:`131011`
145 145 - Add support for Qt6 :ghpull:`13085`
146 146 - Fix an issue with pip magic on windows :ghpull:`13093`
147 147
148 148 Thanks
149 149 ------
150 150
151 151 Many thanks to all the contributors to this release. You can find all individual
152 152 contributions to this milestone `on github
153 153 <https://github.com/ipython/ipython/milestone/91>`__.
154 154
155 155 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
156 156 work on IPython and related libraries.
157 157
158 158 .. _version 7.26:
159 159
160 160 IPython 7.26
161 161 ============
162 162
163 163 IPython 7.26 is a minor release that fixes a couple of issues, updates in API
164 164 and Copyright/Licenses issues around various part of the codebase.
165 165
166 166 We'll highlight `this issue <https://github.com/ipython/ipython/issues/13039>`
167 167 pointing out we were including and refereeing to code from Stack Overflow which
168 168 was CC-BY-SA, hence incompatible with the BSD license of IPython. This lead us
169 169 to a rewriting of the corresponding logic which in our case was done in a more
170 170 efficient way (in our case we were searching string prefixes instead of full
171 171 strings).
172 172
173 173 You will notice also a number of documentation improvements and cleanup.
174 174
175 175 Of particular interest are the following Pull-requests:
176 176
177 177
178 178 - The IPython directive now uses Sphinx logging for warnings. :ghpull:`13030`.
179 179 - Add expiry days option to pastebin magic and change http protocol to https.
180 180 :ghpull:`13056`
181 181 - Make Ipython.utils.timing work with jupyterlite :ghpull:`13050`.
182 182
183 183 Pastebin magic expiry days option
184 184 ---------------------------------
185 185
186 186 The Pastebin magic now has ``-e`` option to determine
187 187 the number of days for paste expiration. For example
188 188 the paste that created with ``%pastebin -e 20 1`` magic will
189 189 be available for next 20 days.
190 190
191 191
192 192
193 193
194 194
195 195 Thanks
196 196 ------
197 197
198 198 Many thanks to all the contributors to this release and in particular MrMino who
199 199 is doing most of the work those days. You can find all individual contributions
200 200 to this milestone `on github <https://github.com/ipython/ipython/milestone/90>`__.
201 201
202 202 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
203 203 work on IPython and related libraries.
204 204
205 205
206 206 .. _version 7.25:
207 207
208 208 IPython 7.25
209 209 ============
210 210
211 211 IPython 7.25 is a minor release that contains a single bugfix, which is highly
212 212 recommended for all users of ipdb, ipython debugger %debug magic and similar.
213 213
214 214 Issuing commands like ``where`` from within the debugger would reset the
215 215 local variables changes made by the user. It is interesting to look at the root
216 216 cause of the issue as accessing an attribute (``frame.f_locals``) would trigger
217 217 this side effects.
218 218
219 219 Thanks in particular to the patience from the reporters at D.E. Shaw for their
220 220 initial bug report that was due to a similar coding oversight in an extension,
221 221 and who took time to debug and narrow down the problem.
222 222
223 223 Thanks
224 224 ------
225 225
226 226 Many thanks to all the contributors to this release you can find all individual
227 227 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/89>`__.
228 228
229 229 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
230 230 work on IPython and related libraries.
231 231
232 232
233 233 .. _version 7.24:
234 234
235 235 IPython 7.24
236 236 ============
237 237
238 238 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
239 239 typical updates:
240 240
241 241 Misc
242 242 ----
243 243
244 244
245 245 - Fix an issue where ``%recall`` would both succeeded and print an error message
246 246 it failed. :ghpull:`12952`
247 247 - Drop support for NumPy 1.16 – practically has no effect beyond indicating in
248 248 package metadata that we do not support it. :ghpull:`12937`
249 249
250 250 Debugger improvements
251 251 ---------------------
252 252
253 253 The debugger (and ``%debug`` magic) have been improved and can skip or hide frames
254 254 originating from files that are not writable to the user, as these are less
255 255 likely to be the source of errors, or be part of system files this can be a useful
256 256 addition when debugging long errors.
257 257
258 258 In addition to the global ``skip_hidden True|False`` command, the debugger has
259 259 gained finer grained control of predicates as to whether to a frame should be
260 260 considered hidden. So far 3 predicates are available :
261 261
262 262 - ``tbhide``: frames containing the local variable ``__tracebackhide__`` set to
263 263 True.
264 264 - ``readonly``: frames originating from readonly files, set to False.
265 265 - ``ipython_internal``: frames that are likely to be from IPython internal
266 266 code, set to True.
267 267
268 268 You can toggle individual predicates during a session with
269 269
270 270 .. code-block::
271 271
272 272 ipdb> skip_predicates readonly True
273 273
274 274 Read-only files will now be considered hidden frames.
275 275
276 276
277 277 You can call ``skip_predicates`` without arguments to see the states of current
278 278 predicates:
279 279
280 280 .. code-block::
281 281
282 282 ipdb> skip_predicates
283 283 current predicates:
284 284 tbhide : True
285 285 readonly : False
286 286 ipython_internal : True
287 287
288 288 If all predicates are set to ``False``, ``skip_hidden`` will practically have
289 289 no effect. We attempt to warn you when all predicates are False.
290 290
291 291 Note that the ``readonly`` predicate may increase disk access as we check for
292 292 file access permission for all frames on many command invocation, but is usually
293 293 cached by operating systems. Let us know if you encounter any issues.
294 294
295 295 As the IPython debugger does not use the traitlets infrastructure for
296 296 configuration, by editing your ``.pdbrc`` files and appending commands you would
297 297 like to be executed just before entering the interactive prompt. For example:
298 298
299 299
300 300 .. code::
301 301
302 302 # file : ~/.pdbrc
303 303 skip_predicates readonly True
304 304 skip_predicates tbhide False
305 305
306 306 Will hide read only frames by default and show frames marked with
307 307 ``__tracebackhide__``.
308 308
309 309
310 310
311 311
312 312 Thanks
313 313 ------
314 314
315 315 Many thanks to all the contributors to this release you can find all individual
316 316 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/87>`__.
317 317
318 318 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
319 319 work on IPython and related libraries, in particular above mentioned
320 320 improvements to the debugger.
321 321
322 322
323 323
324 324
325 325 .. _version 7.23:
326 326
327 327 IPython 7.23 and 7.23.1
328 328 =======================
329 329
330 330
331 331 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
332 332 typical updates:
333 333
334 334 - We moved to GitHub actions away from Travis-CI, the transition may not be
335 335 100% complete (not testing on nightly anymore), but as we ran out of
336 336 Travis-Ci hours on the IPython organisation that was a necessary step.
337 337 :ghpull:`12900`.
338 338
339 339 - We have a new dependency: ``matplotlib-inline``, which try to extract
340 340 matplotlib inline backend specific behavior. It is available on PyPI and
341 341 conda-forge thus should not be a problem to upgrade to this version. If you
342 342 are a package maintainer that might be an extra dependency to package first.
343 343 :ghpull:`12817` (IPython 7.23.1 fix a typo that made this change fail)
344 344
345 345 In the addition/new feature category, ``display()`` now have a ``clear=True``
346 346 option to clear the display if any further outputs arrives, allowing users to
347 347 avoid having to use ``clear_output()`` directly. :ghpull:`12823`.
348 348
349 349 In bug fixes category, this release fix an issue when printing tracebacks
350 350 containing Unicode characters :ghpull:`12758`.
351 351
352 352 In code cleanup category :ghpull:`12932` remove usage of some deprecated
353 353 functionality for compatibility with Python 3.10.
354 354
355 355
356 356
357 357 Thanks
358 358 ------
359 359
360 360 Many thanks to all the contributors to this release you can find all individual
361 361 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/86>`__.
362 362 In particular MrMino for responding to almost all new issues, and triaging many
363 363 of the old ones, as well as takluyver, minrk, willingc for reacting quikly when
364 364 we ran out of CI Hours.
365 365
366 366 Thanks as well to organisations, QuantStack (martinRenou and SylvainCorlay) for
367 367 extracting matplotlib inline backend into its own package, and the `D. E. Shaw group
368 368 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
369 369
370 370
371 371 .. _version 7.22:
372 372
373 373 IPython 7.22
374 374 ============
375 375
376 376 Second release of IPython for 2021, mostly containing bug fixes. Here is a quick
377 377 rundown of the few changes.
378 378
379 379 - Fix some ``sys.excepthook`` shenanigan when embedding with qt, recommended if
380 380 you – for example – use `napari <https://napari.org>`__. :ghpull:`12842`.
381 381 - Fix bug when using the new ipdb ``%context`` magic :ghpull:`12844`
382 382 - Couples of deprecation cleanup :ghpull:`12868`
383 383 - Update for new dpast.com api if you use the ``%pastbin`` magic. :ghpull:`12712`
384 384 - Remove support for numpy before 1.16. :ghpull:`12836`
385 385
386 386
387 387 Thanks
388 388 ------
389 389
390 390 We have a new team member that you should see more often on the IPython
391 391 repository, BΕ‚aΕΌej Michalik (@MrMino) have been doing regular contributions to
392 392 IPython, and spent time replying to many issues and guiding new users to the
393 393 codebase; they now have triage permissions to the IPython repository and we'll
394 394 work toward giving them more permission in the future.
395 395
396 396 Many thanks to all the contributors to this release you can find all individual
397 397 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/84>`__.
398 398
399 399 Thanks as well to organisations, QuantStack for working on debugger
400 400 compatibility for Xeus_python, and the `D. E. Shaw group
401 401 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
402 402
403 403 .. _version 721:
404 404
405 405 IPython 7.21
406 406 ============
407 407
408 408 IPython 7.21 is the first release we have back on schedule of one release every
409 409 month; it contains a number of minor fixes and improvements, notably, the new
410 410 context command for ipdb
411 411
412 412
413 413 New "context" command in ipdb
414 414 -----------------------------
415 415
416 416 It is now possible to change the number of lines shown in the backtrace
417 417 information in ipdb using "context" command. :ghpull:`12826`
418 418
419 419 (thanks @MrMino, there are other improvement from them on master).
420 420
421 421 Other notable changes in IPython 7.21
422 422 -------------------------------------
423 423
424 424 - Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`.
425 425 - Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
426 426 - Misc docs fixes for compatibility and uniformity with Numpydoc.
427 427 :ghpull:`12824`
428 428
429 429
430 430 Thanks
431 431 ------
432 432
433 433 Many thanks to all the contributors to this release you can find all individual
434 434 contribution to this milestone `on github <https://github.com/ipython/ipython/milestone/83>`__.
435 435
436 436
437 437 .. _version 720:
438 438
439 439 IPython 7.20
440 440 ============
441 441
442 442 IPython 7.20 is the accumulation of 3 month of work on IPython, spacing between
443 443 IPython release have been increased from the usual once a month for various
444 444 reason.
445 445
446 446 - Mainly as I'm too busy and the effectively sole maintainer, and
447 447 - Second because not much changes happened before mid December.
448 448
449 449 The main driver for this release was the new version of Jedi 0.18 breaking API;
450 450 which was taken care of in the master branch early in 2020 but not in 7.x as I
451 451 though that by now 8.0 would be out.
452 452
453 453 The inclusion of a resolver in pip did not help and actually made things worse.
454 454 If usually I would have simply pinned Jedi to ``<0.18``; this is not a solution
455 455 anymore as now pip is free to install Jedi 0.18, and downgrade IPython.
456 456
457 457 I'll do my best to keep the regular release, but as the 8.0-dev branch and 7.x
458 458 are starting to diverge this is becoming difficult in particular with my limited
459 459 time, so if you have any cycles to spare I'll appreciate your help to respond to
460 460 issues and pushing 8.0 forward.
461 461
462 462 Here are thus some of the changes for IPython 7.20.
463 463
464 464 - Support for PyQt5 >= 5.11 :ghpull:`12715`
465 465 - ``%reset`` remove imports more agressively :ghpull:`12718`
466 466 - fix the ``%conda`` magic :ghpull:`12739`
467 467 - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793`
468 468
469 469
470 470 .. _version 719:
471 471
472 472 IPython 7.19
473 473 ============
474 474
475 475 IPython 7.19 accumulative two month of works, bug fixes and improvements, there
476 476 was exceptionally no release last month.
477 477
478 478 - Fix to restore the ability to specify more than one extension using command
479 479 line flags when using traitlets 5.0 :ghpull:`12543`
480 480 - Docs docs formatting that make the install commands work on zsh
481 481 :ghpull:`12587`
482 482 - Always display the last frame in tracebacks even if hidden with
483 483 ``__tracebackhide__`` :ghpull:`12601`
484 484 - Avoid an issue where a callback can be registered multiple times.
485 485 :ghpull:`12625`
486 486 - Avoid an issue in debugger mode where frames changes could be lost.
487 487 :ghpull:`12627`
488 488
489 489 - Never hide the frames that invoke a debugger, even if marked as hidden by
490 490 ``__tracebackhide__`` :ghpull:`12631`
491 491 - Fix calling the debugger in a recursive manner :ghpull:`12659`
492 492
493 493
494 494 A number of code changes have landed on master and we are getting close to
495 495 enough new features and codebase improvement that a 8.0 start to make sens.
496 496 For downstream packages, please start working on migrating downstream testing
497 497 away from iptest and using pytest, as nose will not work on Python 3.10 and we
498 498 will likely start removing it as a dependency for testing.
499 499
500 500 .. _version 718:
501 501
502 502 IPython 7.18
503 503 ============
504 504
505 505 IPython 7.18 is a minor release that mostly contains bugfixes.
506 506
507 507 - ``CRLF`` is now handled by magics my default; solving some issues due to copy
508 508 pasting on windows. :ghpull:`12475`
509 509
510 510 - Requiring pexpect ``>=4.3`` as we are Python 3.7+ only and earlier version of
511 511 pexpect will be incompatible. :ghpull:`12510`
512 512
513 513 - Minimum jedi version is now 0.16. :ghpull:`12488`
514 514
515 515
516 516
517 517 .. _version 717:
518 518
519 519 IPython 7.17
520 520 ============
521 521
522 522 IPython 7.17 brings a couple of new improvements to API and a couple of user
523 523 facing changes to make the terminal experience more user friendly.
524 524
525 525 :ghpull:`12407` introduces the ability to pass extra argument to the IPython
526 526 debugger class; this is to help a new project from ``kmaork``
527 527 (https://github.com/kmaork/madbg) to feature a fully remote debugger.
528 528
529 529 :ghpull:`12410` finally remove support for 3.6, while the codebase is still
530 530 technically compatible; IPython will not install on Python 3.6.
531 531
532 532 lots of work on the debugger and hidden frames from ``@impact27`` in
533 533 :ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
534 534 :ghpull:`12453` which make the debug magic more robust at handling spaces.
535 535
536 536 Biggest API addition is code transformation which is done before code execution;
537 537 IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
538 538 stripping...etc). Transformers are usually called many time; typically:
539 539
540 540 - When trying to figure out whether the code is complete and valid (should we
541 541 insert a new line or execute ?)
542 542 - During actual code execution pass before giving the code to Python's
543 543 ``exec``.
544 544
545 545 This lead to issues when transformer might have had side effects; or do external
546 546 queries. Starting with IPython 7.17 you can expect your transformer to be called
547 547 less time.
548 548
549 549 Input transformers are now called only once in the execution path of
550 550 `InteractiveShell`, allowing to register transformer that potentially have side
551 551 effects (note that this is not recommended). Internal methods `should_run_async`, and
552 552 `run_cell_async` now take a recommended optional `transformed_cell`, and
553 553 `preprocessing_exc_tuple` parameters that will become mandatory at some point in
554 554 the future; that is to say cells need to be explicitly transformed to be valid
555 555 Python syntax ahead of trying to run them. :ghpull:`12440`;
556 556
557 557 ``input_transformers`` can now also have an attribute ``has_side_effects`` set
558 558 to `True`, when this attribute is present; this will prevent the transformers
559 559 from being ran when IPython is trying to guess whether the user input is
560 560 complete. Note that this may means you will need to explicitly execute in some
561 561 case where your transformations are now not ran; but will not affect users with
562 562 no custom extensions.
563 563
564 564
565 565 API Changes
566 566 -----------
567 567
568 568 Change of API and exposed objects automatically detected using `frappuccino
569 569 <https://pypi.org/project/frappuccino/>`_
570 570
571 571
572 572 The following items are new since 7.16.0::
573 573
574 574 + IPython.core.interactiveshell.InteractiveShell.get_local_scope(self, stack_depth)
575 575
576 576 The following signatures differ since 7.16.0::
577 577
578 578 - IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True)
579 579 + IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True, *, transformed_cell=None, preprocessing_exc_tuple=None)
580 580
581 581 - IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell)
582 582 + IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell, *, transformed_cell=None, preprocessing_exc_tuple=None)
583 583
584 584 - IPython.terminal.debugger.TerminalPdb.pt_init(self)
585 585 + IPython.terminal.debugger.TerminalPdb.pt_init(self, pt_session_options=None)
586 586
587 587 This method was added::
588 588
589 589 + IPython.core.interactiveshell.InteractiveShell.get_local_scope
590 590
591 591 Which is now also present on subclasses::
592 592
593 593 + IPython.terminal.embed.InteractiveShellEmbed.get_local_scope
594 594 + IPython.terminal.interactiveshell.TerminalInteractiveShell.get_local_scope
595 595
596 596
597 597 .. _version 716:
598 598
599 IPython 7.16.1, 7.16.2
600 ======================
601
602 IPython 7.16.1 was release immediately after 7.16.0 to fix a conda packaging issue.
603 The source is identical to 7.16.0 but the file permissions in the tar are different.
604
605 IPython 7.16.2 pins jedi dependency to "<=0.17.2" which should prevent some
606 issues for users still on python 3.6. This may not be sufficient as pip may
607 still allow to downgrade IPython.
608
609 Compatibility with Jedi > 0.17.2 was not added as this would have meant bumping
610 the minimal version to >0.16.
611
599 612 IPython 7.16
600 613 ============
601 614
602 615
603 616 The default traceback mode will now skip frames that are marked with
604 617 ``__tracebackhide__ = True`` and show how many traceback frames have been
605 618 skipped. This can be toggled by using :magic:`xmode` with the ``--show`` or
606 619 ``--hide`` attribute. It will have no effect on non verbose traceback modes.
607 620
608 621 The ipython debugger also now understands ``__tracebackhide__`` as well and will
609 622 skip hidden frames when displaying. Movement up and down the stack will skip the
610 623 hidden frames and will show how many frames were hidden. Internal IPython frames
611 624 are also now hidden by default. The behavior can be changed with the
612 625 ``skip_hidden`` while in the debugger, command and accepts "yes", "no", "true"
613 626 and "false" case insensitive parameters.
614 627
615 628
616 629 Misc Noticeable changes:
617 630 ------------------------
618 631
619 632 - Exceptions are now (re)raised when running notebooks via the :magic:`%run`, helping to catch issues in workflows and
620 633 pipelines. :ghpull:`12301`
621 634 - Fix inputhook for qt 5.15.0 :ghpull:`12355`
622 635 - Fix wx inputhook :ghpull:`12375`
623 636 - Add handling for malformed pathext env var (Windows) :ghpull:`12367`
624 637 - use $SHELL in system_piped :ghpull:`12360` for uniform behavior with
625 638 ipykernel.
626 639
627 640 Reproducible Build
628 641 ------------------
629 642
630 643 IPython 7.15 reproducible build did not work, so we try again this month
631 644 :ghpull:`12358`.
632 645
633 646
634 647 API Changes
635 648 -----------
636 649
637 650 Change of API and exposed objects automatically detected using `frappuccino
638 651 <https://pypi.org/project/frappuccino/>`_ (still in beta):
639 652
640 653
641 654 The following items are new and mostly related to understanding ``__tracebackhide__``::
642 655
643 656 + IPython.core.debugger.Pdb.do_down(self, arg)
644 657 + IPython.core.debugger.Pdb.do_skip_hidden(self, arg)
645 658 + IPython.core.debugger.Pdb.do_up(self, arg)
646 659 + IPython.core.debugger.Pdb.hidden_frames(self, stack)
647 660 + IPython.core.debugger.Pdb.stop_here(self, frame)
648 661
649 662
650 663 The following items have been removed::
651 664
652 665 - IPython.core.debugger.Pdb.new_do_down
653 666 - IPython.core.debugger.Pdb.new_do_up
654 667
655 668 Those were implementation details.
656 669
657 670
658 671 .. _version 715:
659 672
660 673 IPython 7.15
661 674 ============
662 675
663 676 IPython 7.15 brings a number of bug fixes and user facing improvements.
664 677
665 678 Misc Noticeable changes:
666 679 ------------------------
667 680
668 681 - Long completion name have better elision in terminal :ghpull:`12284`
669 682 - I've started to test on Python 3.9 :ghpull:`12307` and fix some errors.
670 683 - Hi DPI scaling of figures when using qt eventloop :ghpull:`12314`
671 684 - Document the ability to have systemwide configuration for IPython.
672 685 :ghpull:`12328`
673 686 - Fix issues with input autoformatting :ghpull:`12336`
674 687 - ``IPython.core.debugger.Pdb`` is now interruptible (:ghpull:`12168`, in 7.14
675 688 but forgotten in release notes)
676 689 - Video HTML attributes (:ghpull:`12212`, in 7.14 but forgotten in release
677 690 notes)
678 691
679 692 Reproducible Build
680 693 ------------------
681 694
682 695 Starting with IPython 7.15, I am attempting to provide reproducible builds,
683 696 that is to say you should be able from the source tree to generate an sdist
684 697 and wheel that are identical byte for byte with the publish version on PyPI.
685 698
686 699 I've only tested on a couple of machines so far and the process is relatively
687 700 straightforward, so this mean that IPython not only have a deterministic build
688 701 process, but also I have either removed, or put under control all effects of
689 702 the build environments on the final artifact. I encourage you to attempt the
690 703 build process on your machine as documented in :ref:`core_developer_guide`
691 704 and let me know if you do not obtain an identical artifact.
692 705
693 706 While reproducible builds is critical to check that the supply chain of (open
694 707 source) software has not been compromised, it can also help to speedup many
695 708 of the build processes in large environment (conda, apt...) by allowing
696 709 better caching of intermediate build steps.
697 710
698 711 Learn more on `<https://reproducible-builds.org/>`_. `Reflections on trusting
699 712 trust <https://dl.acm.org/doi/10.1145/358198.358210>`_ is also one of the
700 713 cornerstone and recommended reads on this subject.
701 714
702 715 .. note::
703 716
704 717 The build commit from which the sdist is generated is also `signed
705 718 <https://en.wikipedia.org/wiki/Digital_signature>`_, so you should be able to
706 719 check it has not been compromised, and the git repository is a `merkle-tree
707 720 <https://en.wikipedia.org/wiki/Merkle_tree>`_, you can check the consistency
708 721 with `git-fsck <https://git-scm.com/docs/git-fsck>`_ which you likely `want
709 722 to enable by default
710 723 <https://gist.github.com/mbbx6spp/14b86437e794bffb4120>`_.
711 724
712 725 NEP29: Last version to support Python 3.6
713 726 -----------------------------------------
714 727
715 728 IPython 7.15 will be the Last IPython version to officially support Python
716 729 3.6, as stated by `NumPy Enhancement Proposal 29
717 730 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_. Starting with
718 731 next minor version of IPython I may stop testing on Python 3.6 and may stop
719 732 publishing release artifacts that install on Python 3.6
720 733
721 734 Highlighted features
722 735 --------------------
723 736
724 737 Highlighted features are not new, but seem to not be widely known, this
725 738 section will help you discover in more narrative form what you can do with
726 739 IPython.
727 740
728 741 Increase Tab Completion Menu Height
729 742 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
730 743
731 744 In terminal IPython it is possible to increase the hight of the tab-completion
732 745 menu. To do so set the value of
733 746 :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more
734 747 space at the bottom of the screen for various kind of menus in IPython including
735 748 tab completion and searching in history.
736 749
737 750 Autoformat Code in the terminal
738 751 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
739 752
740 753 If you have a preferred code formatter, you can configure IPython to
741 754 reformat your code. Set the value of
742 755 :configtrait:`TerminalInteractiveShell.autoformatter` to for example ``'black'``
743 756 and IPython will auto format your code when possible.
744 757
745 758
746 759 .. _version 714:
747 760
748 761 IPython 7.14
749 762 ============
750 763
751 764 IPython 7.14 is a minor release that fix a couple of bugs and prepare
752 765 compatibility with new or future versions of some libraries.
753 766
754 767 Important changes:
755 768 ------------------
756 769
757 770 - Fix compatibility with Sphinx 3+ :ghpull:`12235`
758 771 - Remove deprecated matplotlib parameter usage, compatibility with matplotlib
759 772 3.3+ :`122250`
760 773
761 774 Misc Changes
762 775 ------------
763 776
764 777 - set ``.py`` extension when editing current buffer in vi/emacs. :ghpull:`12167`
765 778 - support for unicode identifiers in ``?``/``??`` :ghpull:`12208`
766 779 - add extra options to the ``Video`` Rich objects :ghpull:`12212`
767 780 - add pretty-printing to ``SimpleNamespace`` :ghpull:`12230`
768 781
769 782 IPython.core.debugger.Pdb is now interruptible
770 783 ----------------------------------------------
771 784
772 785 A ``KeyboardInterrupt`` will now interrupt IPython's extended debugger, in order to make Jupyter able to interrupt it. (:ghpull:`12168`)
773 786
774 787 Video HTML attributes
775 788 ---------------------
776 789
777 790 Add an option to `IPython.display.Video` to change the attributes of the HTML display of the video (:ghpull:`12212`)
778 791
779 792
780 793 Pending deprecated imports
781 794 --------------------------
782 795
783 796 Many object present in ``IPython.core.display`` are there for internal use only,
784 797 and should already been imported from ``IPython.display`` by users and external
785 798 libraries. Trying to import those from ``IPython.core.display`` is still possible
786 799 but will trigger a
787 800 deprecation warning in later versions of IPython and will become errors in the
788 801 future.
789 802
790 803 This will simplify compatibility with other Python kernels (like Xeus-Python),
791 804 and simplify code base.
792 805
793 806
794 807
795 808
796 809 .. _version 713:
797 810
798 811 IPython 7.13
799 812 ============
800 813
801 814 IPython 7.13 is the final release of the 7.x branch since master is diverging
802 815 toward an 8.0. Exiting new features have already been merged in 8.0 and will
803 816 not be available on the 7.x branch. All the changes below have been backported
804 817 from the master branch.
805 818
806 819
807 820 - Fix inability to run PDB when inside an event loop :ghpull:`12141`
808 821 - Fix ability to interrupt some processes on windows :ghpull:`12137`
809 822 - Fix debugger shortcuts :ghpull:`12132`
810 823 - improve tab completion when inside a string by removing irrelevant elements :ghpull:`12128`
811 824 - Fix display of filename tab completion when the path is long :ghpull:`12122`
812 825 - Many removal of Python 2 specific code path :ghpull:`12110`
813 826 - displaying wav files do not require NumPy anymore, and is 5x to 30x faster :ghpull:`12113`
814 827
815 828 See the list of all closed issues and pull request on `github
816 829 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A7.13>`_.
817 830
818 831 .. _version 712:
819 832
820 833 IPython 7.12
821 834 ============
822 835
823 836 IPython 7.12 is a minor update that mostly brings code cleanup, removal of
824 837 longtime deprecated function and a couple update to documentation cleanup as well.
825 838
826 839 Notable changes are the following:
827 840
828 841 - Exit non-zero when ipython is given a file path to run that doesn't exist :ghpull:`12074`
829 842 - Test PR on ARM64 with Travis-CI :ghpull:`12073`
830 843 - Update CI to work with latest Pytest :ghpull:`12086`
831 844 - Add infrastructure to run ipykernel eventloop via trio :ghpull:`12097`
832 845 - Support git blame ignore revs :ghpull:`12091`
833 846 - Start multi-line ``__repr__`` s on their own line :ghpull:`12099`
834 847
835 848 .. _version 7111:
836 849
837 850 IPython 7.11.1
838 851 ==============
839 852
840 853 A couple of deprecated functions (no-op) have been reintroduces in py3compat as
841 854 Cython was still relying on them, and will be removed in a couple of versions.
842 855
843 856 .. _version 711:
844 857
845 858 IPython 7.11
846 859 ============
847 860
848 861 IPython 7.11 received a couple of compatibility fixes and code cleanup.
849 862
850 863 A number of function in the ``py3compat`` have been removed; a number of types
851 864 in the IPython code base are now non-ambiguous and now always ``unicode``
852 865 instead of ``Union[Unicode,bytes]``; many of the relevant code path have thus
853 866 been simplified/cleaned and types annotation added.
854 867
855 868 IPython support several verbosity level from exceptions. ``xmode plain`` now
856 869 support chained exceptions. :ghpull:`11999`
857 870
858 871 We are starting to remove ``shell=True`` in some usages of subprocess. While not directly
859 872 a security issue (as IPython is made to run arbitrary code anyway) it is not good
860 873 practice and we'd like to show the example. :ghissue:`12023`. This discussion
861 874 was started by ``@mschwager`` thanks to a new auditing tool they are working on
862 875 with duo-labs (`dlint <https://github.com/duo-labs/dlint>`_).
863 876
864 877 Work around some bugs in Python 3.9 tokenizer :ghpull:`12057`
865 878
866 879 IPython will now print its version after a crash. :ghpull:`11986`
867 880
868 881 This is likely the last release from the 7.x series that will see new feature.
869 882 The master branch will soon accept large code changes and thrilling new
870 883 features; the 7.x branch will only start to accept critical bug fixes, and
871 884 update dependencies.
872 885
873 886 .. _version 7102:
874 887
875 888 IPython 7.10.2
876 889 ==============
877 890
878 891 IPython 7.10.2 fix a couple of extra incompatibility between IPython, ipdb,
879 892 asyncio and Prompt Toolkit 3.
880 893
881 894 .. _version 7101:
882 895
883 896 IPython 7.10.1
884 897 ==============
885 898
886 899 IPython 7.10.1 fix a couple of incompatibilities with Prompt toolkit 3 (please
887 900 update Prompt toolkit to 3.0.2 at least), and fixes some interaction with
888 901 headless IPython.
889 902
890 903 .. _version 7100:
891 904
892 905 IPython 7.10.0
893 906 ==============
894 907
895 908 IPython 7.10 is the first double digit minor release in the last decade, and
896 909 first since the release of IPython 1.0, previous double digit minor release was
897 910 in August 2009.
898 911
899 912 We've been trying to give you regular release on the last Friday of every month
900 913 for a guaranty of rapid access to bug fixes and new features.
901 914
902 915 Unlike the previous first few releases that have seen only a couple of code
903 916 changes, 7.10 bring a number of changes, new features and bugfixes.
904 917
905 918 Stop Support for Python 3.5 – Adopt NEP 29
906 919 ------------------------------------------
907 920
908 921 IPython has decided to follow the informational `NEP 29
909 922 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_ which layout a clear
910 923 policy as to which version of (C)Python and NumPy are supported.
911 924
912 925 We thus dropped support for Python 3.5, and cleaned up a number of code path
913 926 that were Python-version dependant. If you are on 3.5 or earlier pip should
914 927 automatically give you the latest compatible version of IPython so you do not
915 928 need to pin to a given version.
916 929
917 930 Support for Prompt Toolkit 3.0
918 931 ------------------------------
919 932
920 933 Prompt Toolkit 3.0 was release a week before IPython 7.10 and introduces a few
921 934 breaking changes. We believe IPython 7.10 should be compatible with both Prompt
922 935 Toolkit 2.x and 3.x, though it has not been extensively tested with 3.x so
923 936 please report any issues.
924 937
925 938
926 939 Prompt Rendering Performance improvements
927 940 -----------------------------------------
928 941
929 942 Pull Request :ghpull:`11933` introduced an optimisation in the prompt rendering
930 943 logic that should decrease the resource usage of IPython when using the
931 944 _default_ configuration but could potentially introduce a regression of
932 945 functionalities if you are using a custom prompt.
933 946
934 947 We know assume if you haven't changed the default keybindings that the prompt
935 948 **will not change** during the duration of your input – which is for example
936 949 not true when using vi insert mode that switches between `[ins]` and `[nor]`
937 950 for the current mode.
938 951
939 952 If you are experiencing any issue let us know.
940 953
941 954 Code autoformatting
942 955 -------------------
943 956
944 957 The IPython terminal can now auto format your code just before entering a new
945 958 line or executing a command. To do so use the
946 959 ``--TerminalInteractiveShell.autoformatter`` option and set it to ``'black'``;
947 960 if black is installed IPython will use black to format your code when possible.
948 961
949 962 IPython cannot always properly format your code; in particular it will
950 963 auto formatting with *black* will only work if:
951 964
952 965 - Your code does not contains magics or special python syntax.
953 966
954 967 - There is no code after your cursor.
955 968
956 969 The Black API is also still in motion; so this may not work with all versions of
957 970 black.
958 971
959 972 It should be possible to register custom formatter, though the API is till in
960 973 flux.
961 974
962 975 Arbitrary Mimetypes Handing in Terminal (Aka inline images in terminal)
963 976 -----------------------------------------------------------------------
964 977
965 978 When using IPython terminal it is now possible to register function to handle
966 979 arbitrary mimetypes. While rendering non-text based representation was possible in
967 980 many jupyter frontend; it was not possible in terminal IPython, as usually
968 981 terminal are limited to displaying text. As many terminal these days provide
969 982 escape sequences to display non-text; bringing this loved feature to IPython CLI
970 983 made a lot of sens. This functionality will not only allow inline images; but
971 984 allow opening of external program; for example ``mplayer`` to "display" sound
972 985 files.
973 986
974 987 So far only the hooks necessary for this are in place, but no default mime
975 988 renderers added; so inline images will only be available via extensions. We will
976 989 progressively enable these features by default in the next few releases, and
977 990 contribution is welcomed.
978 991
979 992 We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more
980 993 informations.
981 994
982 995 This is originally based on work form in :ghpull:`10610` from @stephanh42
983 996 started over two years ago, and still a lot need to be done.
984 997
985 998 MISC
986 999 ----
987 1000
988 1001 - Completions can define their own ordering :ghpull:`11855`
989 1002 - Enable Plotting in the same cell than the one that import matplotlib
990 1003 :ghpull:`11916`
991 1004 - Allow to store and restore multiple variables at once :ghpull:`11930`
992 1005
993 1006 You can see `all pull-requests <https://github.com/ipython/ipython/pulls?q=is%3Apr+milestone%3A7.10+is%3Aclosed>`_ for this release.
994 1007
995 1008 API Changes
996 1009 -----------
997 1010
998 1011 Change of API and exposed objects automatically detected using `frappuccino <https://pypi.org/project/frappuccino/>`_ (still in beta):
999 1012
1000 1013 The following items are new in IPython 7.10::
1001 1014
1002 1015 + IPython.terminal.shortcuts.reformat_text_before_cursor(buffer, document, shell)
1003 1016 + IPython.terminal.interactiveshell.PTK3
1004 1017 + IPython.terminal.interactiveshell.black_reformat_handler(text_before_cursor)
1005 1018 + IPython.terminal.prompts.RichPromptDisplayHook.write_format_data(self, format_dict, md_dict='None')
1006 1019
1007 1020 The following items have been removed in 7.10::
1008 1021
1009 1022 - IPython.lib.pretty.DICT_IS_ORDERED
1010 1023
1011 1024 The following signatures differ between versions::
1012 1025
1013 1026 - IPython.extensions.storemagic.restore_aliases(ip)
1014 1027 + IPython.extensions.storemagic.restore_aliases(ip, alias='None')
1015 1028
1016 1029 Special Thanks
1017 1030 --------------
1018 1031
1019 1032 - @stephanh42 who started the work on inline images in terminal 2 years ago
1020 1033 - @augustogoulart who spent a lot of time triaging issues and responding to
1021 1034 users.
1022 1035 - @con-f-use who is my (@Carreau) first sponsor on GitHub, as a reminder if you
1023 1036 like IPython, Jupyter and many other library of the SciPy stack you can
1024 1037 donate to numfocus.org non profit
1025 1038
1026 1039 .. _version 790:
1027 1040
1028 1041 IPython 7.9.0
1029 1042 =============
1030 1043
1031 1044 IPython 7.9 is a small release with a couple of improvement and bug fixes.
1032 1045
1033 1046 - Xterm terminal title should be restored on exit :ghpull:`11910`
1034 1047 - special variables ``_``,``__``, ``___`` are not set anymore when cache size
1035 1048 is 0 or less. :ghpull:`11877`
1036 1049 - Autoreload should have regained some speed by using a new heuristic logic to
1037 1050 find all objects needing reload. This should avoid large objects traversal
1038 1051 like pandas dataframes. :ghpull:`11876`
1039 1052 - Get ready for Python 4. :ghpull:`11874`
1040 1053 - `%env` Magic now has heuristic to hide potentially sensitive values :ghpull:`11896`
1041 1054
1042 1055 This is a small release despite a number of Pull Request Pending that need to
1043 1056 be reviewed/worked on. Many of the core developers have been busy outside of
1044 1057 IPython/Jupyter and we thanks all contributor for their patience; we'll work on
1045 1058 these as soon as we have time.
1046 1059
1047 1060
1048 1061 .. _version780:
1049 1062
1050 1063 IPython 7.8.0
1051 1064 =============
1052 1065
1053 1066 IPython 7.8.0 contain a few bugfix and 2 new APIs:
1054 1067
1055 1068 - Enable changing the font color for LaTeX rendering :ghpull:`11840`
1056 1069 - and Re-Expose some PDB API (see below)
1057 1070
1058 1071 Expose Pdb API
1059 1072 --------------
1060 1073
1061 1074 Expose the built-in ``pdb.Pdb`` API. ``Pdb`` constructor arguments are generically
1062 1075 exposed, regardless of python version.
1063 1076 Newly exposed arguments:
1064 1077
1065 1078 - ``skip`` - Python 3.1+
1066 1079 - ``nosiginnt`` - Python 3.2+
1067 1080 - ``readrc`` - Python 3.6+
1068 1081
1069 1082 Try it out::
1070 1083
1071 1084 from IPython.terminal.debugger import TerminalPdb
1072 1085 pdb = TerminalPdb(skip=["skipthismodule"])
1073 1086
1074 1087
1075 1088 See :ghpull:`11840`
1076 1089
1077 1090 .. _version770:
1078 1091
1079 1092 IPython 7.7.0
1080 1093 =============
1081 1094
1082 1095 IPython 7.7.0 contain multiple bug fixes and documentation updates; Here are a
1083 1096 few of the outstanding issue fixed:
1084 1097
1085 1098 - Fix a bug introduced in 7.6 where the ``%matplotlib`` magic would fail on
1086 1099 previously acceptable arguments :ghpull:`11814`.
1087 1100 - Fix the manage location on freebsd :ghpull:`11808`.
1088 1101 - Fix error message about aliases after ``%reset`` call in ipykernel
1089 1102 :ghpull:`11806`
1090 1103 - Fix Duplication completions in emacs :ghpull:`11803`
1091 1104
1092 1105 We are planning to adopt `NEP29 <https://github.com/numpy/numpy/pull/14086>`_
1093 1106 (still currently in draft) which may make this minor version of IPython the
1094 1107 last one to support Python 3.5 and will make the code base more aggressive
1095 1108 toward removing compatibility with older versions of Python.
1096 1109
1097 1110 GitHub now support to give only "Triage" permissions to users; if you'd like to
1098 1111 help close stale issues and labels issues please reach to us with your GitHub
1099 1112 Username and we'll add you to the triage team. It is a great way to start
1100 1113 contributing and a path toward getting commit rights.
1101 1114
1102 1115 .. _version761:
1103 1116
1104 1117 IPython 7.6.1
1105 1118 =============
1106 1119
1107 1120 IPython 7.6.1 contain a critical bugfix in the ``%timeit`` magic, which would
1108 1121 crash on some inputs as a side effect of :ghpull:`11716`. See :ghpull:`11812`
1109 1122
1110 1123
1111 1124 .. _whatsnew760:
1112 1125
1113 1126 IPython 7.6.0
1114 1127 =============
1115 1128
1116 1129 IPython 7.6.0 contains a couple of bug fixes and number of small features
1117 1130 additions as well as some compatibility with the current development version of
1118 1131 Python 3.8.
1119 1132
1120 1133 - Add a ``-l`` option to :magic:`psearch` to list the available search
1121 1134 types. :ghpull:`11672`
1122 1135 - Support ``PathLike`` for ``DisplayObject`` and ``Image``. :ghpull:`11764`
1123 1136 - Configurability of timeout in the test suite for slow platforms.
1124 1137 :ghpull:`11756`
1125 1138 - Accept any casing for matplotlib backend. :ghpull:`121748`
1126 1139 - Properly skip test that requires numpy to be installed :ghpull:`11723`
1127 1140 - More support for Python 3.8 and positional only arguments (pep570)
1128 1141 :ghpull:`11720`
1129 1142 - Unicode names for the completion are loaded lazily on first use which
1130 1143 should decrease startup time. :ghpull:`11693`
1131 1144 - Autoreload now update the types of reloaded objects; this for example allow
1132 1145 pickling of reloaded objects. :ghpull:`11644`
1133 1146 - Fix a bug where ``%%time`` magic would suppress cell output. :ghpull:`11716`
1134 1147
1135 1148
1136 1149 Prepare migration to pytest (instead of nose) for testing
1137 1150 ---------------------------------------------------------
1138 1151
1139 1152 Most of the work between 7.5 and 7.6 was to prepare the migration from our
1140 1153 testing framework to pytest. Most of the test suite should now work by simply
1141 1154 issuing ``pytest`` from the root of the repository.
1142 1155
1143 1156 The migration to pytest is just at its beginning. Many of our test still rely
1144 1157 on IPython-specific plugins for nose using pytest (doctest using IPython syntax
1145 1158 is one example of this where test appear as "passing", while no code has been
1146 1159 ran). Many test also need to be updated like ``yield-test`` to be properly
1147 1160 parametrized tests.
1148 1161
1149 1162 Migration to pytest allowed me to discover a number of issues in our test
1150 1163 suite; which was hiding a number of subtle issues – or not actually running
1151 1164 some of the tests in our test suite – I have thus corrected many of those; like
1152 1165 improperly closed resources; or used of deprecated features. I also made use of
1153 1166 the ``pytest --durations=...`` to find some of our slowest test and speed them
1154 1167 up (our test suite can now be up to 10% faster). Pytest as also a variety of
1155 1168 plugins and flags which will make the code quality of IPython and the testing
1156 1169 experience better.
1157 1170
1158 1171 Misc
1159 1172 ----
1160 1173
1161 1174 We skipped the release of 7.6 at the end of May, but will attempt to get back
1162 1175 on schedule. We are starting to think about making introducing backward
1163 1176 incompatible change and start the 8.0 series.
1164 1177
1165 1178 Special Thanks to Gabriel (@gpotter2 on GitHub), who among other took care many
1166 1179 of the remaining task for 7.4 and 7.5, like updating the website.
1167 1180
1168 1181 .. _whatsnew750:
1169 1182
1170 1183 IPython 7.5.0
1171 1184 =============
1172 1185
1173 1186 IPython 7.5.0 consist mostly of bug-fixes, and documentation updates, with one
1174 1187 minor new feature. The `Audio` display element can now be assigned an element
1175 1188 id when displayed in browser. See :ghpull:`11670`
1176 1189
1177 1190 The major outstanding bug fix correct a change of behavior that was introduce
1178 1191 in 7.4.0 where some cell magics would not be able to access or modify global
1179 1192 scope when using the ``@needs_local_scope`` decorator. This was typically
1180 1193 encountered with the ``%%time`` and ``%%timeit`` magics. See :ghissue:`11659`
1181 1194 and :ghpull:`11698`.
1182 1195
1183 1196 .. _whatsnew740:
1184 1197
1185 1198 IPython 7.4.0
1186 1199 =============
1187 1200
1188 1201 Unicode name completions
1189 1202 ------------------------
1190 1203
1191 1204 Previously, we provided completion for a unicode name with its relative symbol.
1192 1205 With this, now IPython provides complete suggestions to unicode name symbols.
1193 1206
1194 1207 As on the PR, if user types ``\LAT<tab>``, IPython provides a list of
1195 1208 possible completions. In this case, it would be something like::
1196 1209
1197 1210 'LATIN CAPITAL LETTER A',
1198 1211 'LATIN CAPITAL LETTER B',
1199 1212 'LATIN CAPITAL LETTER C',
1200 1213 'LATIN CAPITAL LETTER D',
1201 1214 ....
1202 1215
1203 1216 This help to type unicode character that do not have short latex aliases, and
1204 1217 have long unicode names. for example ``Ν°``, ``\GREEK CAPITAL LETTER HETA``.
1205 1218
1206 1219 This feature was contributed by Luciana Marques :ghpull:`11583`.
1207 1220
1208 1221 Make audio normalization optional
1209 1222 ---------------------------------
1210 1223
1211 1224 Added 'normalize' argument to `IPython.display.Audio`. This argument applies
1212 1225 when audio data is given as an array of samples. The default of `normalize=True`
1213 1226 preserves prior behavior of normalizing the audio to the maximum possible range.
1214 1227 Setting to `False` disables normalization.
1215 1228
1216 1229
1217 1230 Miscellaneous
1218 1231 -------------
1219 1232
1220 1233 - Fix improper acceptation of ``return`` outside of functions. :ghpull:`11641`.
1221 1234 - Fixed PyQt 5.11 backwards incompatibility causing sip import failure.
1222 1235 :ghpull:`11613`.
1223 1236 - Fix Bug where ``type?`` would crash IPython. :ghpull:`1608`.
1224 1237 - Allow to apply ``@needs_local_scope`` to cell magics for convenience.
1225 1238 :ghpull:`11542`.
1226 1239
1227 1240 .. _whatsnew730:
1228 1241
1229 1242 IPython 7.3.0
1230 1243 =============
1231 1244
1232 1245 .. _whatsnew720:
1233 1246
1234 1247 IPython 7.3.0 bring several bug fixes and small improvements that you will
1235 1248 described bellow.
1236 1249
1237 1250 The biggest change to this release is the implementation of the ``%conda`` and
1238 1251 ``%pip`` magics, that will attempt to install packages in the **current
1239 1252 environment**. You may still need to restart your interpreter or kernel for the
1240 1253 change to be taken into account, but it should simplify installation of packages
1241 1254 into remote environment. Installing using pip/conda from the command line is
1242 1255 still the prefer method.
1243 1256
1244 1257 The ``%pip`` magic was already present, but was only printing a warning; now it
1245 1258 will actually forward commands to pip.
1246 1259
1247 1260 Misc bug fixes and improvements:
1248 1261
1249 1262 - Compatibility with Python 3.8.
1250 1263 - Do not expand shell variable in execution magics, and added the
1251 1264 ``no_var_expand`` decorator for magic requiring a similar functionality
1252 1265 :ghpull:`11516`
1253 1266 - Add ``%pip`` and ``%conda`` magic :ghpull:`11524`
1254 1267 - Re-initialize posix aliases after a ``%reset`` :ghpull:`11528`
1255 1268 - Allow the IPython command line to run ``*.ipynb`` files :ghpull:`11529`
1256 1269
1257 1270 IPython 7.2.0
1258 1271 =============
1259 1272
1260 1273 IPython 7.2.0 brings minor bugfixes, improvements, and new configuration options:
1261 1274
1262 1275 - Fix a bug preventing PySide2 GUI integration from working :ghpull:`11464`
1263 1276 - Run CI on Mac OS ! :ghpull:`11471`
1264 1277 - Fix IPython "Demo" mode. :ghpull:`11498`
1265 1278 - Fix ``%run`` magic with path in name :ghpull:`11499`
1266 1279 - Fix: add CWD to sys.path *after* stdlib :ghpull:`11502`
1267 1280 - Better rendering of signatures, especially long ones. :ghpull:`11505`
1268 1281 - Re-enable jedi by default if it's installed :ghpull:`11506`
1269 1282 - Add New ``minimal`` exception reporting mode (useful for educational purpose). See :ghpull:`11509`
1270 1283
1271 1284
1272 1285 Added ability to show subclasses when using pinfo and other utilities
1273 1286 ---------------------------------------------------------------------
1274 1287
1275 1288 When using ``?``/``??`` on a class, IPython will now list the first 10 subclasses.
1276 1289
1277 1290 Special Thanks to Chris Mentzel of the Moore Foundation for this feature. Chris
1278 1291 is one of the people who played a critical role in IPython/Jupyter getting
1279 1292 funding.
1280 1293
1281 1294 We are grateful for all the help Chris has given us over the years,
1282 1295 and we're now proud to have code contributed by Chris in IPython.
1283 1296
1284 1297 OSMagics.cd_force_quiet configuration option
1285 1298 --------------------------------------------
1286 1299
1287 1300 You can set this option to force the %cd magic to behave as if ``-q`` was passed:
1288 1301 ::
1289 1302
1290 1303 In [1]: cd /
1291 1304 /
1292 1305
1293 1306 In [2]: %config OSMagics.cd_force_quiet = True
1294 1307
1295 1308 In [3]: cd /tmp
1296 1309
1297 1310 In [4]:
1298 1311
1299 1312 See :ghpull:`11491`
1300 1313
1301 1314 In vi editing mode, whether the prompt includes the current vi mode can now be configured
1302 1315 -----------------------------------------------------------------------------------------
1303 1316
1304 1317 Set the ``TerminalInteractiveShell.prompt_includes_vi_mode`` to a boolean value
1305 1318 (default: True) to control this feature. See :ghpull:`11492`
1306 1319
1307 1320 .. _whatsnew710:
1308 1321
1309 1322 IPython 7.1.0
1310 1323 =============
1311 1324
1312 1325 IPython 7.1.0 is the first minor release after 7.0.0 and mostly brings fixes to
1313 1326 new features, internal refactoring, and fixes for regressions that happened during the 6.x->7.x
1314 1327 transition. It also brings **Compatibility with Python 3.7.1**, as we're
1315 1328 unwillingly relying on a bug in CPython.
1316 1329
1317 1330 New Core Dev:
1318 1331
1319 1332 - We welcome Jonathan Slenders to the commiters. Jonathan has done a fantastic
1320 1333 work on prompt_toolkit, and we'd like to recognise his impact by giving him
1321 1334 commit rights. :ghissue:`11397`
1322 1335
1323 1336 Notable Changes
1324 1337
1325 1338 - Major update of "latex to unicode" tab completion map (see below)
1326 1339
1327 1340 Notable New Features:
1328 1341
1329 1342 - Restore functionality and documentation of the **sphinx directive**, which
1330 1343 is now stricter (fail on error by daefault), has new configuration options,
1331 1344 has a brand new documentation page :ref:`ipython_directive` (which needs
1332 1345 some cleanup). It is also now *tested* so we hope to have less regressions.
1333 1346 :ghpull:`11402`
1334 1347
1335 1348 - ``IPython.display.Video`` now supports ``width`` and ``height`` arguments,
1336 1349 allowing a custom width and height to be set instead of using the video's
1337 1350 width and height. :ghpull:`11353`
1338 1351
1339 1352 - Warn when using ``HTML('<iframe>')`` instead of ``IFrame`` :ghpull:`11350`
1340 1353
1341 1354 - Allow Dynamic switching of editing mode between vi/emacs and show
1342 1355 normal/input mode in prompt when using vi. :ghpull:`11390`. Use ``%config
1343 1356 TerminalInteractiveShell.editing_mode = 'vi'`` or ``%config
1344 1357 TerminalInteractiveShell.editing_mode = 'emacs'`` to dynamically switch
1345 1358 between modes.
1346 1359
1347 1360
1348 1361 Notable Fixes:
1349 1362
1350 1363 - Fix entering of **multi-line blocks in terminal** IPython, and various
1351 1364 crashes in the new input transformation machinery :ghpull:`11354`,
1352 1365 :ghpull:`11356`, :ghpull:`11358`. These also fix a **Compatibility bug
1353 1366 with Python 3.7.1**.
1354 1367
1355 1368 - Fix moving through generator stack in ipdb :ghpull:`11266`
1356 1369
1357 1370 - %Magic command arguments now support quoting. :ghpull:`11330`
1358 1371
1359 1372 - Re-add ``rprint`` and ``rprinte`` aliases. :ghpull:`11331`
1360 1373
1361 1374 - Remove implicit dependency on ``ipython_genutils`` :ghpull:`11317`
1362 1375
1363 1376 - Make ``nonlocal`` raise ``SyntaxError`` instead of silently failing in async
1364 1377 mode. :ghpull:`11382`
1365 1378
1366 1379 - Fix mishandling of magics and ``= !`` assignment just after a dedent in
1367 1380 nested code blocks :ghpull:`11418`
1368 1381
1369 1382 - Fix instructions for custom shortcuts :ghpull:`11426`
1370 1383
1371 1384
1372 1385 Notable Internals improvements:
1373 1386
1374 1387 - Use of ``os.scandir`` (Python 3 only) to speed up some file system operations.
1375 1388 :ghpull:`11365`
1376 1389
1377 1390 - use ``perf_counter`` instead of ``clock`` for more precise
1378 1391 timing results with ``%time`` :ghpull:`11376`
1379 1392
1380 1393 Many thanks to all the contributors and in particular to ``bartskowron`` and
1381 1394 ``tonyfast`` who handled some pretty complicated bugs in the input machinery. We
1382 1395 had a number of first time contributors and maybe hacktoberfest participants that
1383 1396 made significant contributions and helped us free some time to focus on more
1384 1397 complicated bugs.
1385 1398
1386 1399 You
1387 1400 can see all the closed issues and Merged PR, new features and fixes `here
1388 1401 <https://github.com/ipython/ipython/issues?utf8=%E2%9C%93&q=+is%3Aclosed+milestone%3A7.1+>`_.
1389 1402
1390 1403 Unicode Completion update
1391 1404 -------------------------
1392 1405
1393 1406 In IPython 7.1 the Unicode completion map has been updated and synchronized with
1394 1407 the Julia language.
1395 1408
1396 1409 Added and removed character characters:
1397 1410
1398 1411 ``\jmath`` (``Θ·``), ``\\underleftrightarrow`` (U+034D, combining) have been
1399 1412 added, while ``\\textasciicaron`` have been removed
1400 1413
1401 1414 Some sequences have seen their prefix removed:
1402 1415
1403 1416 - 6 characters ``\text...<tab>`` should now be inputed with ``\...<tab>`` directly,
1404 1417 - 45 characters ``\Elz...<tab>`` should now be inputed with ``\...<tab>`` directly,
1405 1418 - 65 characters ``\B...<tab>`` should now be inputed with ``\...<tab>`` directly,
1406 1419 - 450 characters ``\m...<tab>`` should now be inputed with ``\...<tab>`` directly,
1407 1420
1408 1421 Some sequences have seen their prefix shortened:
1409 1422
1410 1423 - 5 characters ``\mitBbb...<tab>`` should now be inputed with ``\bbi...<tab>`` directly,
1411 1424 - 52 characters ``\mit...<tab>`` should now be inputed with ``\i...<tab>`` directly,
1412 1425 - 216 characters ``\mbfit...<tab>`` should now be inputed with ``\bi...<tab>`` directly,
1413 1426 - 222 characters ``\mbf...<tab>`` should now be inputed with ``\b...<tab>`` directly,
1414 1427
1415 1428 A couple of characters had their sequence simplified:
1416 1429
1417 1430 - ``Γ°``, type ``\dh<tab>``, instead of ``\eth<tab>``
1418 1431 - ``Δ§``, type ``\hbar<tab>``, instead of ``\Elzxh<tab>``
1419 1432 - ``ΙΈ``, type ``\ltphi<tab>``, instead of ``\textphi<tab>``
1420 1433 - ``Ο΄``, type ``\varTheta<tab>``, instead of ``\textTheta<tab>``
1421 1434 - ``ℇ``, type ``\eulermascheroni<tab>``, instead of ``\Eulerconst<tab>``
1422 1435 - ``β„Ž``, type ``\planck<tab>``, instead of ``\Planckconst<tab>``
1423 1436
1424 1437 - U+0336 (COMBINING LONG STROKE OVERLAY), type ``\strike<tab>``, instead of ``\Elzbar<tab>``.
1425 1438
1426 1439 A couple of sequences have been updated:
1427 1440
1428 1441 - ``\varepsilon`` now gives ``Ι›`` (GREEK SMALL LETTER EPSILON) instead of ``Ξ΅`` (GREEK LUNATE EPSILON SYMBOL),
1429 1442 - ``\underbar`` now gives U+0331 (COMBINING MACRON BELOW) instead of U+0332 (COMBINING LOW LINE).
1430 1443
1431 1444
1432 1445 .. _whatsnew700:
1433 1446
1434 1447 IPython 7.0.0
1435 1448 =============
1436 1449
1437 1450 Released Thursday September 27th, 2018
1438 1451
1439 1452 IPython 7 includes major feature improvements.
1440 1453 This is also the second major version of IPython to support only
1441 1454 Python 3 – starting at Python 3.4. Python 2 is still community-supported
1442 1455 on the bugfix only 5.x branch, but we remind you that Python 2 "end of life"
1443 1456 is on Jan 1st 2020.
1444 1457
1445 1458 We were able to backport bug fixes to the 5.x branch thanks to our backport bot which
1446 1459 backported more than `70 Pull-Requests
1447 1460 <https://github.com/ipython/ipython/pulls?page=3&q=is%3Apr+sort%3Aupdated-desc+author%3Aapp%2Fmeeseeksdev++5.x&utf8=%E2%9C%93>`_, but there are still many PRs that required manual work. This is an area of the project where you can easily contribute by looking for `PRs that still need manual backport <https://github.com/ipython/ipython/issues?q=label%3A%22Still+Needs+Manual+Backport%22+is%3Aclosed+sort%3Aupdated-desc>`_
1448 1461
1449 1462 The IPython 6.x branch will likely not see any further release unless critical
1450 1463 bugs are found.
1451 1464
1452 1465 Make sure you have pip > 9.0 before upgrading. You should be able to update by running:
1453 1466
1454 1467 .. code::
1455 1468
1456 1469 pip install ipython --upgrade
1457 1470
1458 1471 .. only:: ipydev
1459 1472
1460 1473 If you are trying to install or update an ``alpha``, ``beta``, or ``rc``
1461 1474 version, use pip ``--pre`` flag.
1462 1475
1463 1476 .. code::
1464 1477
1465 1478 pip install ipython --upgrade --pre
1466 1479
1467 1480
1468 1481 Or, if you have conda installed:
1469 1482
1470 1483 .. code::
1471 1484
1472 1485 conda install ipython
1473 1486
1474 1487
1475 1488
1476 1489 Prompt Toolkit 2.0
1477 1490 ------------------
1478 1491
1479 1492 IPython 7.0+ now uses ``prompt_toolkit 2.0``. If you still need to use an earlier
1480 1493 ``prompt_toolkit`` version, you may need to pin IPython to ``<7.0``.
1481 1494
1482 1495 Autowait: Asynchronous REPL
1483 1496 ---------------------------
1484 1497
1485 1498 Staring with IPython 7.0 on Python 3.6+, IPython can automatically ``await``
1486 1499 top level code. You should not need to access an event loop or runner
1487 1500 yourself. To learn more, read the :ref:`autoawait` section of our docs, see
1488 1501 :ghpull:`11265`, or try the following code::
1489 1502
1490 1503 Python 3.6.0
1491 1504 Type 'copyright', 'credits' or 'license' for more information
1492 1505 IPython 7.0.0 -- An enhanced Interactive Python. Type '?' for help.
1493 1506
1494 1507 In [1]: import aiohttp
1495 1508 ...: result = aiohttp.get('https://api.github.com')
1496 1509
1497 1510 In [2]: response = await result
1498 1511 <pause for a few 100s ms>
1499 1512
1500 1513 In [3]: await response.json()
1501 1514 Out[3]:
1502 1515 {'authorizations_url': 'https://api.github.com/authorizations',
1503 1516 'code_search_url': 'https://api.github.com/search/code?q={query}{&page,per_page,sort,order}',
1504 1517 ...
1505 1518 }
1506 1519
1507 1520 .. note::
1508 1521
1509 1522 Async integration is experimental code, behavior may change or be removed
1510 1523 between Python and IPython versions without warnings.
1511 1524
1512 1525 Integration is by default with `asyncio`, but other libraries can be configured --
1513 1526 like ``curio`` or ``trio`` -- to improve concurrency in the REPL::
1514 1527
1515 1528 In [1]: %autoawait trio
1516 1529
1517 1530 In [2]: import trio
1518 1531
1519 1532 In [3]: async def child(i):
1520 1533 ...: print(" child %s goes to sleep"%i)
1521 1534 ...: await trio.sleep(2)
1522 1535 ...: print(" child %s wakes up"%i)
1523 1536
1524 1537 In [4]: print('parent start')
1525 1538 ...: async with trio.open_nursery() as n:
1526 1539 ...: for i in range(3):
1527 1540 ...: n.spawn(child, i)
1528 1541 ...: print('parent end')
1529 1542 parent start
1530 1543 child 2 goes to sleep
1531 1544 child 0 goes to sleep
1532 1545 child 1 goes to sleep
1533 1546 <about 2 seconds pause>
1534 1547 child 2 wakes up
1535 1548 child 1 wakes up
1536 1549 child 0 wakes up
1537 1550 parent end
1538 1551
1539 1552 See :ref:`autoawait` for more information.
1540 1553
1541 1554
1542 1555 Asynchronous code in a Notebook interface or any other frontend using the
1543 1556 Jupyter Protocol will require further updates to the IPykernel package.
1544 1557
1545 1558 Non-Asynchronous code
1546 1559 ~~~~~~~~~~~~~~~~~~~~~
1547 1560
1548 1561 As the internal API of IPython is now asynchronous, IPython needs to run under
1549 1562 an event loop. In order to allow many workflows, (like using the :magic:`%run`
1550 1563 magic, or copy-pasting code that explicitly starts/stop event loop), when
1551 1564 top-level code is detected as not being asynchronous, IPython code is advanced
1552 1565 via a pseudo-synchronous runner, and may not advance pending tasks.
1553 1566
1554 1567 Change to Nested Embed
1555 1568 ~~~~~~~~~~~~~~~~~~~~~~
1556 1569
1557 1570 The introduction of the ability to run async code had some effect on the
1558 1571 ``IPython.embed()`` API. By default, embed will not allow you to run asynchronous
1559 1572 code unless an event loop is specified.
1560 1573
1561 1574 Effects on Magics
1562 1575 ~~~~~~~~~~~~~~~~~
1563 1576
1564 1577 Some magics will not work with async until they're updated.
1565 1578 Contributions welcome.
1566 1579
1567 1580 Expected Future changes
1568 1581 ~~~~~~~~~~~~~~~~~~~~~~~
1569 1582
1570 1583 We expect more internal but public IPython functions to become ``async``, and
1571 1584 will likely end up having a persistent event loop while IPython is running.
1572 1585
1573 1586 Thanks
1574 1587 ~~~~~~
1575 1588
1576 1589 This release took more than a year in the making.
1577 1590 The code was rebased a number of
1578 1591 times; leading to commit authorship that may have been lost in the final
1579 1592 Pull-Request. Huge thanks to many people for contribution, discussion, code,
1580 1593 documentation, use-cases: dalejung, danielballan, ellisonbg, fperez, gnestor,
1581 1594 minrk, njsmith, pganssle, tacaswell, takluyver , vidartf ... And many others.
1582 1595
1583 1596
1584 1597 Autoreload Improvement
1585 1598 ----------------------
1586 1599
1587 1600 The magic :magic:`%autoreload 2 <autoreload>` now captures new methods added to
1588 1601 classes. Earlier, only methods existing as of the initial import were being
1589 1602 tracked and updated.
1590 1603
1591 1604 This new feature helps dual environment development - Jupyter+IDE - where the
1592 1605 code gradually moves from notebook cells to package files as it gets
1593 1606 structured.
1594 1607
1595 1608 **Example**: An instance of the class ``MyClass`` will be able to access the
1596 1609 method ``cube()`` after it is uncommented and the file ``file1.py`` is saved on
1597 1610 disk.
1598 1611
1599 1612
1600 1613 .. code::
1601 1614
1602 1615 # notebook
1603 1616
1604 1617 from mymodule import MyClass
1605 1618 first = MyClass(5)
1606 1619
1607 1620 .. code::
1608 1621
1609 1622 # mymodule/file1.py
1610 1623
1611 1624 class MyClass:
1612 1625
1613 1626 def __init__(self, a=10):
1614 1627 self.a = a
1615 1628
1616 1629 def square(self):
1617 1630 print('compute square')
1618 1631 return self.a*self.a
1619 1632
1620 1633 # def cube(self):
1621 1634 # print('compute cube')
1622 1635 # return self.a*self.a*self.a
1623 1636
1624 1637
1625 1638
1626 1639
1627 1640 Misc
1628 1641 ----
1629 1642
1630 1643 The autoindent feature that was deprecated in 5.x was re-enabled and
1631 1644 un-deprecated in :ghpull:`11257`
1632 1645
1633 1646 Make :magic:`%run -n -i ... <run>` work correctly. Earlier, if :magic:`%run` was
1634 1647 passed both arguments, ``-n`` would be silently ignored. See :ghpull:`10308`
1635 1648
1636 1649
1637 1650 The :cellmagic:`%%script` (as well as :cellmagic:`%%bash`,
1638 1651 :cellmagic:`%%ruby`... ) cell magics now raise by default if the return code of
1639 1652 the given code is non-zero (thus halting execution of further cells in a
1640 1653 notebook). The behavior can be disable by passing the ``--no-raise-error`` flag.
1641 1654
1642 1655
1643 1656 Deprecations
1644 1657 ------------
1645 1658
1646 1659 A couple of unused functions and methods have been deprecated and will be removed
1647 1660 in future versions:
1648 1661
1649 1662 - ``IPython.utils.io.raw_print_err``
1650 1663 - ``IPython.utils.io.raw_print``
1651 1664
1652 1665
1653 1666 Backwards incompatible changes
1654 1667 ------------------------------
1655 1668
1656 1669 * The API for transforming input before it is parsed as Python code has been
1657 1670 completely redesigned: any custom input transformations will need to be
1658 1671 rewritten. See :doc:`/config/inputtransforms` for details of the new API.
General Comments 0
You need to be logged in to leave comments. Login now