def METHOD_NAME(
    self,
    semantic_types: Optional[
        Union[str, SemanticDomainTypes, List[Union[str, SemanticDomainTypes]]]
    ] = None,
) -> List[SemanticDomainTypes]:
    if semantic_types is None:
        return []
    if isinstance(semantic_types, SemanticDomainTypes):
        return [semantic_types]
    if isinstance(semantic_types, str):
        return [SemanticDomainTypes(semantic_types.lower())]
    if isinstance(semantic_types, list):
        semantic_type: Union[str, SemanticDomainTypes]
        if _is_sequence_of(semantic_types, SemanticDomainTypes):
            return [semantic_type for semantic_type in semantic_types]
        if _is_sequence_of(semantic_types, str):
            return [
                SemanticDomainTypes(semantic_type.lower())
                for semantic_type in semantic_types
            ]
        raise ValueError(
            "All elements in semantic_types list must be either of str or SemanticDomainTypes type."
        )
    raise ValueError("Unrecognized semantic_types directive.")