def compile(pattern, namespaces=None, flags=0, **kwargs):  # noqa: A001
    """Compile CSS pattern."""

    if namespaces is not None:
        namespaces = ct.Namespaces(**namespaces)

    custom = kwargs.get('custom')
    if custom is not None:
        custom = ct.CustomSelectors(**custom)

    if isinstance(pattern, SoupSieve):
        if flags:
            raise ValueError("Cannot process 'flags' argument on a compiled selector list")
        elif namespaces is not None:
            raise ValueError("Cannot process 'namespaces' argument on a compiled selector list")
        elif custom is not None:
            raise ValueError("Cannot process 'custom' argument on a compiled selector list")
        return pattern

    return cp._cached_css_compile(pattern, namespaces, custom, flags)
Compile CSS pattern.