def unwrap(data_type):
unwrapped_nullable = False<EOL>unwrapped_alias = False<EOL>while is_alias(data_type) or is_nullable_type(data_type):<EOL><INDENT>if is_nullable_type(data_type):<EOL><INDENT>unwrapped_nullable = True<EOL><DEDENT>if is_alias(data_type):<EOL><INDENT>unwrapped_alias = True<EOL><DEDENT>data_type = data_type.data_type<EOL><DEDENT>return data_type, unwrapped_nullable, unwrapped_alias<EOL>
Convenience method to unwrap all Aliases and Nullables from around a
DataType. This checks for nullable wrapping aliases, as well as aliases
wrapping nullables.

Args:
    data_type (DataType): The target to unwrap.

Return:
    Tuple[DataType, bool, bool]: The underlying data type; a bool that is
        set if a nullable was present; a bool that is set if an alias was
        present.