Source code for spikelab.spike_sorting.backends

"""Spike sorter backend registry.

Maps sorter names to their backend classes. Backends are imported
lazily to avoid requiring all sorter dependencies at import time.
"""

# Registry: sorter name → (module_path, class_name)
_BACKEND_REGISTRY = {
    "kilosort2": (".kilosort2", "Kilosort2Backend"),
    "kilosort4": (".kilosort4", "Kilosort4Backend"),
    "rt_sort": (".rt_sort", "RTSortBackend"),
}


[docs] def get_backend_class(sorter_name): """Look up and import the backend class for a sorter name. Parameters: sorter_name (str): Registered sorter name (e.g. ``"kilosort2"``). Returns: cls: The ``SorterBackend`` subclass. Raises: ValueError: If the sorter name is not registered. """ if sorter_name not in _BACKEND_REGISTRY: available = ", ".join(sorted(_BACKEND_REGISTRY.keys())) raise ValueError( f"Unknown sorter '{sorter_name}'. " f"Available sorters: {available}" ) module_path, class_name = _BACKEND_REGISTRY[sorter_name] import importlib mod = importlib.import_module(module_path, package=__name__) return getattr(mod, class_name)
[docs] def list_sorters(): """Return the list of registered sorter names. Returns: sorters (list of str): Available sorter names. """ return sorted(_BACKEND_REGISTRY.keys())