def METHOD_NAME(
    self,
    rule_name: str,
    variables: Optional[ParameterContainer] = None,
    runtime_configuration: Optional[dict] = None,
) -> List[Domain]:
    """Obtains and returns Domain object, whose domain_kwargs consists of "column_list" (order-non-preserving).
    Args:
        rule_name: name of Rule object, for which "Domain" objects are obtained.
        variables: Optional variables to substitute when evaluating.
        runtime_configuration: Additional run-time settings (see "Validator.DEFAULT_RUNTIME_CONFIGURATION").
    Returns:
        List of domains that match the desired tolerance limits.
    """
    batch_ids: List[str] = self.get_batch_ids(variables=variables)  # type: ignore[assignment] # could be None
    validator: Validator = self.get_validator(variables=variables)  # type: ignore[assignment] # could be None
    effective_column_names: List[str] = self.get_effective_column_names(
        batch_ids=batch_ids,
        validator=validator,
        variables=variables,
    )
    if not (self.include_column_names and effective_column_names):
        raise gx_exceptions.ProfilerExecutionError(
            message=f'Error: "column_list" in {self.__class__.__name__} must not be empty.'
        )
    column_name: str
    semantic_types_by_column_name: Dict[str, SemanticDomainTypes] = {
        column_name: self.semantic_type_filter.table_column_name_to_inferred_semantic_domain_type_map[  # type: ignore[union-attr] # could be None
            column_name
        ]
        for column_name in effective_column_names
    }
    domains: List[Domain] = [
        Domain(
            domain_type=self.domain_type,
            domain_kwargs={
                "column_list": effective_column_names,
            },
            details={
                INFERRED_SEMANTIC_TYPE_KEY: semantic_types_by_column_name,
            },
            rule_name=rule_name,
        ),
    ]
    return domains