def METHOD_NAME(tp: Any) -> Iterator[Type]:
    origin_locked = False
    for arg in get_args(tp):
        if arg is NONE_TYPE:
            continue
        if isinstance(arg, TypeVar):
            yield from _evaluate_typevar(arg)
        else:
            origin = get_origin(arg)
            if origin is list and not origin_locked:
                yield from _evaluate_list(arg)
                origin_locked = True
            elif origin is None and not is_from_typing(arg):
                yield arg
            else:
                raise TypeError()