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