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