'Resume type inference partially to deduce the return type.
Note: No side-effect to `self`.
Returns the inferred return type or None if it cannot deduce the return
type.'

def return_types_from_partial(self):

    cloned = self.copy(skip_recursion=True)
    cloned.build_constraint()
    cloned.propagate(raise_errors=False)
    rettypes = set()
    for retvar in cloned._get_return_vars():
        if (retvar.name in cloned.typevars):
            typevar = cloned.typevars[retvar.name]
            if (typevar and typevar.defined):
                rettypes.add(typevar.getone())
    if (not rettypes):
        return
    return cloned._unify_return_types(rettypes)
