def replace_alias_tvars(self, tp: Type, vars: List[str], subs: List[Type], newline: int, newcolumn: int) -> Type: """Replace type variables in a generic type alias tp with substitutions subs resetting context. Length of subs should be already checked. """ typ_args = get_typ_args(tp) new_args = typ_args[:] for i, arg in enumerate(typ_args): tvar = self.get_tvar_name(arg) if tvar and tvar in vars: # Perform actual substitution... new_args[i] = subs[vars.index(tvar)] else: # ...recursively, if needed. new_args[i] = self.replace_alias_tvars(arg, vars, subs, newline, newcolumn) return set_typ_args(tp, new_args, newline, newcolumn)