# ---------------------------------------------------------------------------
# SingletonMeta  (abstract_utilities.SingletonMeta)
# ---------------------------------------------------------------------------
import threading as _threading  # noqa: E402


class SingletonMeta(type):
    """Thread-safe singleton metaclass: one instance per class."""

    _instances: dict = {}
    _lock = _threading.Lock()

    def __call__(cls, *args, **kwargs):
        with cls._lock:
            if cls not in cls._instances:
                cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]
