Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-ipython for openSUSE:Factory 
checked in at 2021-03-16 15:42:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ipython (Old)
 and      /work/SRC/openSUSE:Factory/.python-ipython.new.2401 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-ipython"

Tue Mar 16 15:42:28 2021 rev:19 rq:878957 version:7.21.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ipython/python-ipython.changes    
2021-02-04 20:24:07.518830932 +0100
+++ /work/SRC/openSUSE:Factory/.python-ipython.new.2401/python-ipython.changes  
2021-03-16 15:43:42.156969796 +0100
@@ -1,0 +2,16 @@
+Sat Mar 13 13:06:24 UTC 2021 - Benjamin Greiner <[email protected]>
+
+- As of now, iptest still needs nose until the removal is complete
+  gh#ipython/ipython#12840
+
+-------------------------------------------------------------------
+Mon Mar  1 18:27:17 UTC 2021 - Matej Cepl <[email protected]>
+
+- Update to version 7.21.0:
+  - New "context" command in ipdb
+    It is now possible to change the number of lines shown in the
+    backtrace information in ipdb using "context" command.
+  - Compatibility with Xeus-Python for debugger protocol
+  - Misc docs fixes for compatibility and uniformity with Numpydoc.
+
+-------------------------------------------------------------------

Old:
----
  ipython-7.20.0.tar.gz

New:
----
  ipython-7.21.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-ipython.spec ++++++
--- /var/tmp/diff_new_pack.prvOvz/_old  2021-03-16 15:43:42.728970711 +0100
+++ /var/tmp/diff_new_pack.prvOvz/_new  2021-03-16 15:43:42.728970711 +0100
@@ -32,7 +32,7 @@
 
 %bcond_without  iptest
 Name:           python-ipython%{psuffix}
-Version:        7.20.0
+Version:        7.21.0
 Release:        0
 Summary:        Rich architecture for interactive computing with Python
 License:        BSD-3-Clause


++++++ ipython-7.20.0.tar.gz -> ipython-7.21.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/IPython/core/compilerop.py 
new/ipython-7.21.0/IPython/core/compilerop.py
--- old/ipython-7.20.0/IPython/core/compilerop.py       2020-10-28 
18:50:36.000000000 +0100
+++ new/ipython-7.21.0/IPython/core/compilerop.py       2021-02-26 
23:09:23.000000000 +0100
@@ -99,7 +99,7 @@
         Arguments are exactly the same as ast.parse (in the standard library),
         and are passed to the built-in compile function."""
         return compile(source, filename, symbol, self.flags | PyCF_ONLY_AST, 1)
-    
+
     def reset_compiler_flags(self):
         """Reset compiler flags to default state."""
         # This value is copied from codeop.Compile.__init__, so if that ever
@@ -112,25 +112,53 @@
         """
         return self.flags
 
-    def cache(self, code, number=0):
+    def get_code_name(self, raw_code, transformed_code, number):
+        """Compute filename given the code, and the cell number.
+
+        Parameters
+        ----------
+        raw_code : str
+          The raw cell code.
+        transformed_code : str
+          The executable Python source code to cache and compile.
+        number : int
+          A number which forms part of the code's name. Used for the execution
+          counter.
+
+        Returns
+        -------
+        The computed filename.
+        """
+        return code_name(transformed_code, number)
+
+    def cache(self, transformed_code, number=0, raw_code=None):
         """Make a name for a block of code, and cache the code.
 
         Parameters
         ----------
-        code : str
-          The Python source code to cache.
+        transformed_code : str
+          The executable Python source code to cache and compile.
         number : int
           A number which forms part of the code's name. Used for the execution
           counter.
+        raw_code : str
+          The raw code before transformation, if None, set to 
`transformed_code`.
 
         Returns
         -------
         The name of the cached code (as a string). Pass this as the filename
         argument to compilation, so that tracebacks are correctly hooked up.
         """
-        name = code_name(code, number)
-        entry = (len(code), time.time(),
-                 [line+'\n' for line in code.splitlines()], name)
+        if raw_code is None:
+            raw_code = transformed_code
+
+        name = self.get_code_name(raw_code, transformed_code, number)
+        entry = (
+            len(transformed_code),
+            time.time(),
+            [line + "\n" for line in transformed_code.splitlines()],
+            name,
+        )
         linecache.cache[name] = entry
         linecache._ipython_cache[name] = entry
         return name
@@ -146,7 +174,7 @@
             yield
         finally:
             # turn off only the bits we turned on so that something like
-            # __future__ that set flags stays. 
+            # __future__ that set flags stays.
             self.flags &= ~turn_on_bits
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/IPython/core/completer.py 
new/ipython-7.21.0/IPython/core/completer.py
--- old/ipython-7.20.0/IPython/core/completer.py        2021-02-01 
20:12:26.000000000 +0100
+++ new/ipython-7.21.0/IPython/core/completer.py        2021-02-26 
23:09:23.000000000 +0100
@@ -193,7 +193,9 @@
 
     >>> completer.do_experimental_things() # raises.
 
-    .. note:: Unstable
+    .. note::
+
+        Unstable
 
         By using this context manager you agree that the API in use may change
         without warning, and that you won't complain if they do so.
@@ -348,7 +350,9 @@
     """
     Completion object used and return by IPython completers.
 
-    .. warning:: Unstable
+    .. warning::
+
+        Unstable
 
         This function is unstable, API may change without warning.
         It will also raise unless use in proper context manager.
@@ -411,7 +415,9 @@
     """
     Deduplicate a set of completions.
 
-    .. warning:: Unstable
+    .. warning::
+
+        Unstable
 
         This function is unstable, API may change without warning.
 
@@ -454,7 +460,9 @@
     """
     Rectify a set of completions to all have the same ``start`` and ``end``
 
-    .. warning:: Unstable
+    .. warning::
+
+        Unstable
 
         This function is unstable, API may change without warning.
         It will also raise unless use in proper context manager.
@@ -1776,7 +1784,9 @@
         """
         Returns an iterator over the possible completions
 
-        .. warning:: Unstable
+        .. warning::
+
+            Unstable
 
             This function is unstable, API may change without warning.
             It will also raise unless use in proper context manager.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/IPython/core/debugger.py 
new/ipython-7.21.0/IPython/core/debugger.py
--- old/ipython-7.20.0/IPython/core/debugger.py 2021-02-01 20:07:39.000000000 
+0100
+++ new/ipython-7.21.0/IPython/core/debugger.py 2021-02-26 23:09:23.000000000 
+0100
@@ -796,6 +796,20 @@
     do_d = do_down
     do_u = do_up
 
+    def do_context(self, context):
+        """context number_of_lines
+        Set the number of lines of source code to show when displaying
+        stacktrace information.
+        """
+        try:
+            new_context = int(context)
+            if new_context <= 0:
+                raise ValueError()
+        except ValueError:
+            self.error("The 'context' command requires a positive integer 
argument.")
+        self.context = new_context
+
+
 class InterruptiblePdb(Pdb):
     """Version of debugger where KeyboardInterrupt exits the debugger 
altogether."""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/IPython/core/display.py 
new/ipython-7.21.0/IPython/core/display.py
--- old/ipython-7.20.0/IPython/core/display.py  2021-02-01 20:07:39.000000000 
+0100
+++ new/ipython-7.21.0/IPython/core/display.py  2021-02-26 23:09:23.000000000 
+0100
@@ -1340,19 +1340,19 @@
         ----------
         data : unicode, str or bytes
             The raw video data or a URL or filename to load the data from.
-            Raw data will require passing `embed=True`.
+            Raw data will require passing ``embed=True``.
         url : unicode
-            A URL for the video. If you specify `url=`,
+            A URL for the video. If you specify ``url=``,
             the image data will not be embedded.
         filename : unicode
             Path to a local file containing the video.
-            Will be interpreted as a local URL unless `embed=True`.
+            Will be interpreted as a local URL unless ``embed=True``.
         embed : bool
             Should the video be embedded using a data URI (True) or be
             loaded using a <video> tag (False).
 
             Since videos are large, embedding them should be avoided, if 
possible.
-            You must confirm embedding as your intention by passing 
`embed=True`.
+            You must confirm embedding as your intention by passing 
``embed=True``.
 
             Local files can be displayed with URLs without embedding the 
content, via::
 
@@ -1368,10 +1368,10 @@
             Height in pixels to which to constrain the video in html.
             If not supplied, defaults to the height of the video.
         html_attributes : str
-            Attributes for the HTML `<video>` block.
-            Default: `"controls"` to get video controls.
-            Other examples: `"controls muted"` for muted video with controls,
-            `"loop autoplay"` for looping autoplaying video without controls.
+            Attributes for the HTML ``<video>`` block.
+            Default: ``"controls"`` to get video controls.
+            Other examples: ``"controls muted"`` for muted video with controls,
+            ``"loop autoplay"`` for looping autoplaying video without controls.
 
         Examples
         --------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/IPython/core/interactiveshell.py 
new/ipython-7.21.0/IPython/core/interactiveshell.py
--- old/ipython-7.20.0/IPython/core/interactiveshell.py 2021-02-01 
20:12:26.000000000 +0100
+++ new/ipython-7.21.0/IPython/core/interactiveshell.py 2021-02-26 
23:09:23.000000000 +0100
@@ -340,7 +340,7 @@
     """An enhanced, interactive shell for Python."""
 
     _instance = None
-    
+
     ast_transformers = List([], help=
         """
         A list of ast.NodeTransformer subclass instances, which will be applied
@@ -407,7 +407,7 @@
         Enable magic commands to be called without the leading %.
         """
     ).tag(config=True)
-    
+
     banner1 = Unicode(default_banner,
         help="""The part of the banner to be printed before the profile"""
     ).tag(config=True)
@@ -443,7 +443,8 @@
     display_formatter = Instance(DisplayFormatter, allow_none=True)
     displayhook_class = Type(DisplayHook)
     display_pub_class = Type(DisplayPublisher)
-    
+    compiler_class = Type(CachingCompiler)
+
     sphinxify_docstring = Bool(False, help=
         """
         Enables rich html representation of docstrings. (This requires the
@@ -534,7 +535,7 @@
     ).tag(config=True)
 
     # deprecated prompt traits:
-    
+
     prompt_in1 = Unicode('In [\\#]: ',
         help="Deprecated since IPython 4.0 and ignored since 5.0, set 
TerminalInteractiveShell.prompts object directly."
     ).tag(config=True)
@@ -547,14 +548,14 @@
     prompts_pad_left = Bool(True,
         help="Deprecated since IPython 4.0 and ignored since 5.0, set 
TerminalInteractiveShell.prompts object directly."
     ).tag(config=True)
-    
+
     @observe('prompt_in1', 'prompt_in2', 'prompt_out', 'prompt_pad_left')
     def _prompt_trait_changed(self, change):
         name = change['name']
         warn("InteractiveShell.{name} is deprecated since IPython 4.0"
              " and ignored since 5.0, set TerminalInteractiveShell.prompts"
              " object directly.".format(name=name))
-        
+
         # protect against weird cases where self.config may not exist:
 
     show_rewritten_input = Bool(True,
@@ -638,7 +639,7 @@
         self.init_profile_dir(profile_dir)
         self.init_instance_attrs()
         self.init_environment()
-        
+
         # Check if we're in a virtualenv, and set up sys.path.
         self.init_virtualenv()
 
@@ -748,7 +749,7 @@
         self.more = False
 
         # command compiler
-        self.compile = CachingCompiler()
+        self.compile = self.compiler_class()
 
         # Make an empty namespace, which extension writers can rely on both
         # existing and NEVER being used by ipython itself.  This gives them a
@@ -975,7 +976,7 @@
     #-------------------------------------------------------------------------
     # Things related to the banner
     #-------------------------------------------------------------------------
-    
+
     @property
     def banner(self):
         banner = self.banner1
@@ -989,7 +990,7 @@
         if banner is None:
             banner = self.banner
         sys.stdout.write(banner)
-    
+
     #-------------------------------------------------------------------------
     # Things related to hooks
     #-------------------------------------------------------------------------
@@ -1006,10 +1007,10 @@
             # default hooks have priority 100, i.e. low; user hooks should have
             # 0-100 priority
             self.set_hook(hook_name,getattr(hooks,hook_name), 100, 
_warn_deprecated=False)
-        
+
         if self.display_page:
             self.set_hook('show_in_pager', page.as_hook(page.display_page), 90)
-    
+
     def set_hook(self,name,hook, priority=50, str_key=None, re_key=None,
                  _warn_deprecated=True):
         """set_hook(name,hook) -> sets an internal IPython hook.
@@ -1073,7 +1074,7 @@
         warn("ip.register_post_execute is deprecated, use "
              "ip.events.register('post_run_cell', func) instead.", 
stacklevel=2)
         self.events.register('post_run_cell', func)
-    
+
     def _clear_warning_registry(self):
         # clear the warning registry, so that different code blocks with
         # overlapping line number ranges don't cause spurious suppression of
@@ -1115,12 +1116,12 @@
         else:
             main_mod.__dict__.clear()
             main_mod.__name__ = modname
-        
+
         main_mod.__file__ = filename
         # It seems pydoc (and perhaps others) needs any module instance to
         # implement a __nonzero__ method
         main_mod.__nonzero__ = lambda : True
-        
+
         return main_mod
 
     def clear_main_mod_cache(self):
@@ -1273,7 +1274,7 @@
                          'user_local':self.user_ns,
                          'builtin':builtin_mod.__dict__
                          }
-    
+
     @property
     def user_global_ns(self):
         return self.user_module.__dict__
@@ -1306,17 +1307,17 @@
             user_ns.setdefault("__name__", "__main__")
             user_module = DummyMod()
             user_module.__dict__ = user_ns
-            
+
         if user_module is None:
             user_module = types.ModuleType("__main__",
                 doc="Automatically created module for IPython interactive 
environment")
-        
+
         # We must ensure that __builtin__ (without the final 's') is always
         # available and pointing to the __builtin__ *module*.  For more 
details:
         # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
         user_module.__dict__.setdefault('__builtin__', builtin_mod)
         user_module.__dict__.setdefault('__builtins__', builtin_mod)
-        
+
         if user_ns is None:
             user_ns = user_module.__dict__
 
@@ -1372,7 +1373,7 @@
         # For more details:
         # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
         ns = {}
-        
+
         # make global variables for user access to the histories
         ns['_ih'] = self.history_manager.input_hist_parsed
         ns['_oh'] = self.history_manager.output_hist
@@ -1385,7 +1386,7 @@
 
         # Store myself as the public api!!!
         ns['get_ipython'] = self.get_ipython
-        
+
         ns['exit'] = self.exiter
         ns['quit'] = self.exiter
 
@@ -1399,7 +1400,7 @@
 
         # Finally, update the real user's namespace
         self.user_ns.update(ns)
-    
+
     @property
     def all_ns_refs(self):
         """Get a list of references to all the namespace dictionaries in which
@@ -1425,7 +1426,7 @@
         # Reset last execution result
         self.last_execution_succeeded = True
         self.last_execution_result = None
-        
+
         # Flush cached output items
         if self.displayhook.do_full_cache:
             self.displayhook.flush()
@@ -1490,7 +1491,7 @@
             raise ValueError("Refusing to delete %s" % varname)
 
         ns_refs = self.all_ns_refs
-        
+
         if by_name:                    # Delete by name
             for ns in ns_refs:
                 try:
@@ -1765,8 +1766,14 @@
             if meth == 'pdoc':
                 pmethod(info.obj, oname, formatter)
             elif meth == 'pinfo':
-                pmethod(info.obj, oname, formatter, info, 
-                        enable_html_pager=self.enable_html_pager, **kw)
+                pmethod(
+                    info.obj,
+                    oname,
+                    formatter,
+                    info,
+                    enable_html_pager=self.enable_html_pager,
+                    **kw
+                )
             else:
                 pmethod(info.obj, oname)
         else:
@@ -1890,7 +1897,7 @@
             print('Exception type :', etype)
             print('Exception value:', value)
             print('Traceback      :', tb)
-        
+
         def validate_stb(stb):
             """validate structured traceback return type
             
@@ -1919,7 +1926,7 @@
         else:
             def wrapped(self,etype,value,tb,tb_offset=None):
                 """wrap CustomTB handler, to protect IPython from user code
-                
+
                 This makes it harder (but not impossible) for custom exception
                 handlers to crash IPython.
                 """
@@ -1968,10 +1975,10 @@
 
     def _get_exc_info(self, exc_tuple=None):
         """get exc_info from a given tuple, sys.exc_info() or sys.last_type 
etc.
-        
+
         Ensures sys.last_type,value,traceback hold the exc_info we found,
         from whichever source.
-        
+
         raises ValueError if none of these contain any information
         """
         if exc_tuple is None:
@@ -1983,10 +1990,10 @@
             if hasattr(sys, 'last_type'):
                 etype, value, tb = sys.last_type, sys.last_value, \
                                    sys.last_traceback
-        
+
         if etype is None:
             raise ValueError("No exception to find")
-        
+
         # Now store the exception info in sys.last_type etc.
         # WARNING: these variables are somewhat deprecated and not
         # necessarily safe to use in a threaded environment, but tools
@@ -1995,16 +2002,16 @@
         sys.last_type = etype
         sys.last_value = value
         sys.last_traceback = tb
-        
+
         return etype, value, tb
-    
+
     def show_usage_error(self, exc):
         """Show a short message for UsageErrors
-        
+
         These are special exceptions that shouldn't show a traceback.
         """
         print("UsageError: %s" % exc, file=sys.stderr)
-    
+
     def get_exception_only(self, exc_tuple=None):
         """
         Return as a string (ending with a newline) the exception that
@@ -2118,7 +2125,7 @@
 
     def init_readline(self):
         """DEPRECATED
-        
+
         Moved to terminal subclass, here only to simplify the init logic."""
         # Set a number of methods that depend on readline to be no-op
         warnings.warn('`init_readline` is no-op since IPython 5.0 and is 
Deprecated',
@@ -2285,12 +2292,13 @@
         # should be split into a prompt manager and displayhook. We probably
         # even need a centralize colors management object.
         self.run_line_magic('colors', self.colors)
-    
+
     # Defined here so that it's included in the documentation
     @functools.wraps(magic.MagicsManager.register_function)
     def register_magic_function(self, func, magic_kind='line', 
magic_name=None):
-        self.magics_manager.register_function(func, 
-                                  magic_kind=magic_kind, magic_name=magic_name)
+        self.magics_manager.register_function(
+            func, magic_kind=magic_kind, magic_name=magic_name
+        )
 
     def run_line_magic(self, magic_name, line, _stack_depth=1):
         """Execute the given line magic.
@@ -2525,7 +2533,7 @@
                 ec = 130
             if ec > 128:
                 ec = -(ec - 128)
-        
+
         # We explicitly do NOT return the subprocess status code, because
         # a non-None value would trigger :func:`sys.displayhook` calls.
         # Instead, we store the exit_code in user_ns.  Note the semantics
@@ -2588,7 +2596,7 @@
     def init_payload(self):
         self.payload_manager = PayloadManager(parent=self)
         self.configurables.append(self.payload_manager)
-    
+
     #-------------------------------------------------------------------------
     # Things related to the prefilter
     #-------------------------------------------------------------------------
@@ -2628,13 +2636,13 @@
 
     def _user_obj_error(self):
         """return simple exception dict
-        
+
         for use in user_expressions
         """
-        
+
         etype, evalue, tb = self._get_exc_info()
         stb = self.InteractiveTB.get_exception_only(etype, evalue)
-        
+
         exc_info = {
             u'status' : 'error',
             u'traceback' : stb,
@@ -2643,13 +2651,13 @@
         }
 
         return exc_info
-    
+
     def _format_user_obj(self, obj):
         """format a user object to display dict
-        
+
         for use in user_expressions
         """
-        
+
         data, md = self.display_formatter.format(obj)
         value = {
             'status' : 'ok',
@@ -2657,7 +2665,7 @@
             'metadata' : md,
         }
         return value
-    
+
     def user_expressions(self, expressions):
         """Evaluate a dict of expressions in the user's namespace.
 
@@ -2676,7 +2684,7 @@
         out = {}
         user_ns = self.user_ns
         global_ns = self.user_global_ns
-        
+
         for key, expr in expressions.items():
             try:
                 value = self._format_user_obj(eval(expr, global_ns, user_ns))
@@ -3092,12 +3100,14 @@
         # Our own compiler remembers the __future__ environment. If we want to
         # run code with a separate __future__ environment, use the default
         # compiler
-        compiler = self.compile if shell_futures else CachingCompiler()
+        compiler = self.compile if shell_futures else self.compiler_class()
 
         _run_async = False
 
         with self.builtin_trap:
-            cell_name = self.compile.cache(cell, self.execution_count)
+            cell_name = self.compile.cache(
+                cell, self.execution_count, raw_code=raw_cell
+            )
 
             with self.display_trap:
                 # Compile to bytecode
@@ -3203,13 +3213,13 @@
 
     def transform_ast(self, node):
         """Apply the AST transformations from self.ast_transformers
-        
+
         Parameters
         ----------
         node : ast.Node
           The root node to be transformed. Typically called with the ast.Module
           produced by parsing user input.
-        
+
         Returns
         -------
         An ast.Node corresponding to the node it was called with. Note that it
@@ -3256,7 +3266,7 @@
           Experimental value: 'async' Will try to run top level interactive
           async/await code in default runner, this will not respect the
           interactivity setting and will only run the last node if it is an
-          expression. 
+          expression.
 
         compiler : callable
           A function with the same interface as the built-in compile(), to turn
@@ -3477,17 +3487,17 @@
 
     def enable_gui(self, gui=None):
         raise NotImplementedError('Implement enable_gui in a subclass')
-    
+
     def enable_matplotlib(self, gui=None):
         """Enable interactive matplotlib and inline figure support.
-        
+
         This takes the following steps:
-        
+
         1. select the appropriate eventloop and matplotlib backend
         2. set up matplotlib for interactive use with that backend
         3. configure formatters for inline figure display
         4. enable the selected gui eventloop
-        
+
         Parameters
         ----------
         gui : optional, string
@@ -3501,7 +3511,7 @@
         """
         from IPython.core import pylabtools as pt
         gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
-    
+
         if gui != 'inline':
             # If we have our first gui selection, store it
             if self.pylab_gui_select is None:
@@ -3511,16 +3521,16 @@
                 print('Warning: Cannot change to a different GUI toolkit: %s.'
                         ' Using %s instead.' % (gui, self.pylab_gui_select))
                 gui, backend = pt.find_gui_and_backend(self.pylab_gui_select)
-        
+
         pt.activate_matplotlib(backend)
         pt.configure_inline_support(self, backend)
-        
+
         # Now we must activate the gui pylab wants to use, and fix %run to take
         # plot updates into account
         self.enable_gui(gui)
         self.magics_manager.registry['ExecutionMagics'].default_runner = \
             pt.mpl_runner(self.safe_execfile)
-        
+
         return gui, backend
 
     def enable_pylab(self, gui=None, import_all=True, welcome_message=False):
@@ -3530,7 +3540,7 @@
         namespace all of numpy and pylab, and configures IPython to correctly
         interact with the GUI event loop.  The GUI backend to be used can be
         optionally selected with the optional ``gui`` argument.
-        
+
         This method only adds preloading the namespace to 
InteractiveShell.enable_matplotlib.
 
         Parameters
@@ -3550,9 +3560,9 @@
           This argument is ignored, no welcome message will be displayed.
         """
         from IPython.core.pylabtools import import_pylab
-        
+
         gui, backend = self.enable_matplotlib(gui)
-        
+
         # We want to prevent the loading of pylab to pollute the user's
         # namespace as shown by the %who* magics, so we execute the activation
         # code in an empty namespace, and we update *both* user_ns and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/IPython/core/release.py 
new/ipython-7.21.0/IPython/core/release.py
--- old/ipython-7.20.0/IPython/core/release.py  2021-02-01 20:15:15.000000000 
+0100
+++ new/ipython-7.21.0/IPython/core/release.py  2021-02-26 23:10:26.000000000 
+0100
@@ -20,7 +20,7 @@
 # release.  'dev' as a _version_extra string means this is a development
 # version
 _version_major = 7
-_version_minor = 20
+_version_minor = 21
 _version_patch = 0
 _version_extra = '.dev'
 # _version_extra = 'b1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/IPython/terminal/pt_inputhooks/osx.py 
new/ipython-7.21.0/IPython/terminal/pt_inputhooks/osx.py
--- old/ipython-7.20.0/IPython/terminal/pt_inputhooks/osx.py    2019-12-24 
19:21:30.000000000 +0100
+++ new/ipython-7.21.0/IPython/terminal/pt_inputhooks/osx.py    2021-02-26 
23:09:23.000000000 +0100
@@ -41,7 +41,7 @@
 
 CFFileDescriptorCreate = CoreFoundation.CFFileDescriptorCreate
 CFFileDescriptorCreate.restype = void_p
-CFFileDescriptorCreate.argtypes = [void_p, ctypes.c_int, ctypes.c_bool, void_p]
+CFFileDescriptorCreate.argtypes = [void_p, ctypes.c_int, ctypes.c_bool, 
void_p, void_p]
 
 CFFileDescriptorGetNativeDescriptor = 
CoreFoundation.CFFileDescriptorGetNativeDescriptor
 CFFileDescriptorGetNativeDescriptor.restype = ctypes.c_int
@@ -77,24 +77,42 @@
 
 def _NSApp():
     """Return the global NSApplication instance (NSApp)"""
+    objc.objc_msgSend.argtypes = [void_p, void_p]
     return msg(C('NSApplication'), n('sharedApplication'))
 
 
 def _wake(NSApp):
     """Wake the Application"""
-    event = msg(C('NSEvent'),
-        n('otherEventWithType:location:modifierFlags:'
-          'timestamp:windowNumber:context:subtype:data1:data2:'),
-        15, # Type
-        0, # location
-        0, # flags
-        0, # timestamp
-        0, # window
-        None, # context
-        0, # subtype
-        0, # data1
-        0, # data2
+    objc.objc_msgSend.argtypes = [
+        void_p,
+        void_p,
+        void_p,
+        void_p,
+        void_p,
+        void_p,
+        void_p,
+        void_p,
+        void_p,
+        void_p,
+        void_p,
+    ]
+    event = msg(
+        C("NSEvent"),
+        n(
+            "otherEventWithType:location:modifierFlags:"
+            "timestamp:windowNumber:context:subtype:data1:data2:"
+        ),
+        15,  # Type
+        0,  # location
+        0,  # flags
+        0,  # timestamp
+        0,  # window
+        None,  # context
+        0,  # subtype
+        0,  # data1
+        0,  # data2
     )
+    objc.objc_msgSend.argtypes = [void_p, void_p, void_p, void_p]
     msg(NSApp, n('postEvent:atStart:'), void_p(event), True)
 
 
@@ -106,6 +124,7 @@
     CFFileDescriptorInvalidate(fdref)
     CFRelease(fdref)
     NSApp = _NSApp()
+    objc.objc_msgSend.argtypes = [void_p, void_p, void_p]
     msg(NSApp, n('stop:'), NSApp)
     _wake(NSApp)
 
@@ -128,6 +147,7 @@
     """Inputhook for Cocoa (NSApp)"""
     NSApp = _NSApp()
     _stop_on_read(context.fileno())
+    objc.objc_msgSend.argtypes = [void_p, void_p]
     msg(NSApp, n('run'))
     if not _triggered.is_set():
         # app closed without firing callback,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/IPython/utils/_sysinfo.py 
new/ipython-7.21.0/IPython/utils/_sysinfo.py
--- old/ipython-7.20.0/IPython/utils/_sysinfo.py        2021-02-01 
20:15:15.000000000 +0100
+++ new/ipython-7.21.0/IPython/utils/_sysinfo.py        2021-02-26 
23:10:26.000000000 +0100
@@ -1,2 +1,2 @@
 # GENERATED BY setup.py
-commit = u"ebfd01dae"
+commit = u"0dcb1debc"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/PKG-INFO new/ipython-7.21.0/PKG-INFO
--- old/ipython-7.20.0/PKG-INFO 2021-02-01 20:15:15.000000000 +0100
+++ new/ipython-7.21.0/PKG-INFO 2021-02-26 23:10:26.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: ipython
-Version: 7.20.0
+Version: 7.21.0
 Summary: IPython: Productive Interactive Computing
 Home-page: https://ipython.org
 Author: The IPython Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/docs/source/whatsnew/development.rst 
new/ipython-7.21.0/docs/source/whatsnew/development.rst
--- old/ipython-7.20.0/docs/source/whatsnew/development.rst     2021-02-01 
20:07:39.000000000 +0100
+++ new/ipython-7.21.0/docs/source/whatsnew/development.rst     2021-02-26 
23:09:23.000000000 +0100
@@ -24,6 +24,24 @@
 
 
 
+
+Show pinfo information in ipdb using "?" and "??"
+-------------------------------------------------
+
+In IPDB, it is now possible to show the information about an object using "?"
+and "??", in much the same way it can be done when using the IPython prompt::
+
+    ipdb> partial?
+    Init signature: partial(self, /, *args, **kwargs)
+    Docstring:
+    partial(func, *args, **keywords) - new function with partial application
+    of the given arguments and keywords.
+    File:           ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
+    Type:           type
+    Subclasses:
+
+Previously, "pinfo" or "pinfo2" command had to be used for this purpose.
+
 .. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT.
 
 As a reminder, IPython master has diverged from the 7.x branch, thus master may
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-7.20.0/docs/source/whatsnew/version7.rst 
new/ipython-7.21.0/docs/source/whatsnew/version7.rst
--- old/ipython-7.20.0/docs/source/whatsnew/version7.rst        2021-02-01 
20:12:26.000000000 +0100
+++ new/ipython-7.21.0/docs/source/whatsnew/version7.rst        2021-02-26 
23:09:23.000000000 +0100
@@ -2,6 +2,40 @@
  7.x Series
 ============
 
+.. _version 721:
+
+IPython 7.21
+============
+
+IPython 7.21 is the first release we have back on schedule of one release every
+month; it contains a number of minor fixes and improvements, notably, the new
+context command for ipdb
+
+
+New "context" command in ipdb
+-----------------------------
+
+It is now possible to change the number of lines shown in the backtrace
+information in ipdb using "context" command. :ghpull:`12826`
+
+(thanks @MrMino, there are other improvement from them on master).
+
+Other notable changes in IPython 7.21
+-------------------------------------
+
+- Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`. 
+- Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
+- Misc docs fixes for compatibility and uniformity with Numpydoc.
+  :ghpull:`12824`
+
+
+Thanks
+------
+
+Many thanks to all the contributors to this release you can find all individual
+contribution to this milestone `on github 
<https://github.com/ipython/ipython/milestone/83>`_.
+
+
 .. _version 720:
 
 IPython 7.20

Reply via email to