def infer_constraints_for_callable( callee: CallableType, arg_types: Sequence[Optional[Type]], arg_kinds: List[ArgKind], formal_to_actual: List[List[int]], context: 'ArgumentInferContext') -> List[Constraint]: """Infer type variable constraints for a callable and actual arguments. Return a list of constraints. """ constraints: List[Constraint] = [] mapper = ArgTypeExpander(context) for i, actuals in enumerate(formal_to_actual): for actual in actuals: actual_arg_type = arg_types[actual] if actual_arg_type is None: continue actual_type = mapper.expand_actual_type(actual_arg_type, arg_kinds[actual], callee.arg_names[i], callee.arg_kinds[i]) c = infer_constraints(callee.arg_types[i], actual_type, SUPERTYPE_OF) constraints.extend(c) return constraints
def infer_constraints_for_callable( callee: CallableType, arg_types: Sequence[Optional[Type]], arg_kinds: List[int], formal_to_actual: List[List[int]]) -> List[Constraint]: """Infer type variable constraints for a callable and actual arguments. Return a list of constraints. """ constraints = [] # type: List[Constraint] mapper = ArgTypeExpander() for i, actuals in enumerate(formal_to_actual): for actual in actuals: actual_arg_type = arg_types[actual] if actual_arg_type is None: continue actual_type = mapper.expand_actual_type(actual_arg_type, arg_kinds[actual], callee.arg_names[i], callee.arg_kinds[i]) c = infer_constraints(callee.arg_types[i], actual_type, SUPERTYPE_OF) constraints.extend(c) return constraints