"""Factory to create a refinement interface glugin."""
import logging
from typing import Any, Callable, Protocol
from .refinement_interface import RefinementInterface
logger = logging.getLogger(__name__)
creation_funcs: dict[str, Callable[..., RefinementInterface]] = {}
[docs]def register(name: str, creator_fn: Callable[..., RefinementInterface]) -> None:
    """Register a new refinement interface."""
    creation_funcs[name] = creator_fn
    logger.debug(f"Registered refinement interface {name!r}.") 
[docs]def unregister(name: str) -> None:
    """Unregister a plugin type."""
    creation_funcs.pop(name, None)
    logger.debug(f"Unregistered refinement interface {name!r}.") 
[docs]def create(arguments: dict[str, Any]) -> RefinementInterface:
    """Create a plugin of a specific type, given JSON data."""
    args_copy = arguments.copy()
    name = args_copy.pop("name")
    try:
        creator_funcs = creation_funcs[name]
    except KeyError:
        raise ValueError(f"Unknown refinement interface {name!r}") from None
    logger.debug(f"Creating refinement interface {name!r}.")
    return creator_funcs(**args_copy)