def _rewrite_to_tuple(self, union): """Union[Tuple[V, ..., V], Tuple[V, ..., V], ...] -> Tuple[V, ...]""" value_type = None for t in union.__args__: if not is_generic_of(t, Tuple): return None value_type = value_type or t.__args__[0] if not all(vt is value_type for vt in t.__args__): return None return Tuple[value_type, ...]
def rewrite_Union(self, union): key_type = None value_types = [] for e in union.__args__: if not is_generic_of(e, Dict): return union key_type = key_type or e.__args__[0] if key_type != e.__args__[0]: return union value_types.extend(e.__args__[1:]) return Dict[key_type, Union[tuple(value_types)]]