def infer(self): """ Created to be used by inheritance. """ inference_state = self.inference_state is_coroutine = self.tree_node.parent.type in ('async_stmt', 'async_funcdef') from jedi.inference.gradual.base import GenericClass if is_coroutine: if self.is_generator(): async_generator_classes = inference_state.typing_module \ .py__getattribute__('AsyncGenerator') yield_values = self.merge_yield_values(is_async=True) # The contravariant doesn't seem to be defined. generics = (yield_values.py__class__(), NO_VALUES) return ValueSet( GenericClass(c, TupleGenericManager(generics)) for c in async_generator_classes ).execute_annotation() else: async_classes = inference_state.typing_module.py__getattribute__('Coroutine') return_values = self.get_return_values() # Only the first generic is relevant. generics = (return_values.py__class__(), NO_VALUES, NO_VALUES) return ValueSet( GenericClass(c, TupleGenericManager(generics)) for c in async_classes ).execute_annotation() else: if self.is_generator(): return ValueSet([iterable.Generator(inference_state, self)]) else: return self.get_return_values()
def infer(self): """ Created to be used by inheritance. """ inference_state = self.inference_state is_coroutine = self.tree_node.parent.type in ('async_stmt', 'async_funcdef') is_generator = bool(get_yield_exprs(inference_state, self.tree_node)) from jedi.inference.gradual.typing import GenericClass if is_coroutine: if is_generator: if inference_state.environment.version_info < (3, 6): return NO_VALUES async_generator_classes = inference_state.typing_module \ .py__getattribute__('AsyncGenerator') yield_values = self.merge_yield_values(is_async=True) # The contravariant doesn't seem to be defined. generics = (yield_values.py__class__(), NO_VALUES) return ValueSet( # In Python 3.6 AsyncGenerator is still a class. GenericClass(c, generics) for c in async_generator_classes).execute_annotation() else: if inference_state.environment.version_info < (3, 5): return NO_VALUES async_classes = inference_state.typing_module.py__getattribute__( 'Coroutine') return_values = self.get_return_values() # Only the first generic is relevant. generics = (return_values.py__class__(), NO_VALUES, NO_VALUES) return ValueSet( GenericClass(c, generics) for c in async_classes).execute_annotation() else: if is_generator: return ValueSet([iterable.Generator(inference_state, self)]) else: return self.get_return_values()