Ejemplo n.º 1
0
    def calculate_children(evaluator, children):
        """
        Calculate a list of children with operators.
        """
        iterator = iter(children)
        types = evaluator.eval_element(next(iterator))
        for operator in iterator:
            try:# PATCH: Catches StopIteration error
                right = next(iterator)
                if tree.is_node(operator, 'comp_op'):  # not in / is not
                    operator = ' '.join(str(c.value) for c in operator.children)

                # handle lazy evaluation of and/or here.
                if operator in ('and', 'or'):
                    left_bools = set([left.py__bool__() for left in types])
                    if left_bools == set([True]):
                        if operator == 'and':
                            types = evaluator.eval_element(right)
                    elif left_bools == set([False]):
                        if operator != 'and':
                            types = evaluator.eval_element(right)
                    # Otherwise continue, because of uncertainty.
                else:
                    types = calculate(evaluator, types, operator,
                                      evaluator.eval_element(right))
            except StopIteration:
                debug.warning('calculate_children StopIteration %s', types)
        debug.dbg('calculate_children types %s', types)
        return types
Ejemplo n.º 2
0
        def calculate_children(evaluator, children):
            """
            Calculate a list of children with operators.
            """
            iterator = iter(children)
            types = evaluator.eval_element(next(iterator))
            for operator in iterator:
                try:  # PATCH: Catches StopIteration error
                    right = next(iterator)
                    if tree.is_node(operator, 'comp_op'):  # not in / is not
                        operator = ' '.join(str(c.value) for c in
                                            operator.children)

                    # handle lazy evaluation of and/or here.
                    if operator in ('and', 'or'):
                        left_bools = set([left.py__bool__() for left in types])
                        if left_bools == set([True]):
                            if operator == 'and':
                                types = evaluator.eval_element(right)
                        elif left_bools == set([False]):
                            if operator != 'and':
                                types = evaluator.eval_element(right)
                        # Otherwise continue, because of uncertainty.
                    else:
                        types = calculate(evaluator, types, operator,
                                          evaluator.eval_element(right))
                except StopIteration:
                    debug.warning('calculate_children StopIteration %s', types)
            debug.dbg('calculate_children types %s', types)
            return types
Ejemplo n.º 3
0
 def _execute_function(self, params):
     from spyder.utils.introspection import numpy_docstr
     if self.type != 'funcdef':
         return
     types = set([])
     types |= set(numpy_docstr.find_return_types(self.parent_context,
                                                 self))
     debug.dbg('docstrings type return: %s in %s', types, self)
     for name in self._parse_function_doc()[1].split():
         try:
             bltn_obj = getattr(_builtins, name)
         except AttributeError:
             continue
         else:
             if bltn_obj is None:
                 # We want to evaluate everything except None.
                 continue
             bltn_obj = create(self.evaluator, bltn_obj)
             types |= set(self.evaluator.execute(bltn_obj, params))
     for result in types:
         yield result
Ejemplo n.º 4
0
 def _execute_function(self, params):
     from spyder.utils.introspection import numpy_docstr
     if self.type != 'funcdef':
         return
     types = set([])
     types |= set(numpy_docstr.find_return_types(self.parent_context,
                                                 self))
     debug.dbg('docstrings type return: %s in %s', types, self)
     for name in self._parse_function_doc()[1].split():
         try:
             bltn_obj = getattr(_builtins, name)
         except AttributeError:
             continue
         else:
             if bltn_obj is None:
                 # We want to evaluate everything except None.
                 continue
             bltn_obj = create(self.evaluator, bltn_obj)
             types |= set(self.evaluator.execute(bltn_obj, params))
     for result in types:
         yield result
Ejemplo n.º 5
0
 def _execute_function(self, evaluator, params):
     if self.type != 'funcdef':
         return
     # patching docstrings here
     from spyder.utils.introspection import docstrings
     types = docstrings.find_return_types(evaluator, self)
     if types:
         for result in types:
             debug.dbg('docstrings type return: %s in %s', result, self)
             yield result
     # end patch
     for name in self._parse_function_doc()[1].split():
         try:
             bltn_obj = _create_from_name(builtin, builtin, name)
         except AttributeError:
             continue
         else:
             if isinstance(bltn_obj, CompiledObject) and bltn_obj.obj is None:
                 # We want everything except None.
                 continue
             for result in evaluator.execute(bltn_obj, params):
                 yield result
Ejemplo n.º 6
0
 def _execute_function(self, evaluator, params):
     if self.type != 'funcdef':
         return
     # patching docstrings here
     from spyder.utils.introspection import numpy_docstr
     types = numpy_docstr.find_return_types(evaluator, self)
     if types:
         for result in types:
             debug.dbg('docstrings type return: %s in %s', result, self)
             yield result
     # end patch
     for name in self._parse_function_doc()[1].split():
         try:
             bltn_obj = _create_from_name(builtin, builtin, name)
         except AttributeError:
             continue
         else:
             if (isinstance(bltn_obj, CompiledObject) and
                     bltn_obj.obj is None):
                 # We want everything except None.
                 continue
             for result in evaluator.execute(bltn_obj, params):
                 yield result