Source code for bocoel.factories.indices

# Copyright (c) RenChu Wang - All Rights Reserved

from typing import Any

from bocoel import FaissIndex, HnswlibIndex, Index, PolarIndex, WhiteningIndex
from bocoel.common import ItemNotFound, StrEnum


[docs] class IndexName(StrEnum): """ The names of the indices. """ FAISS = "FAISS" "Corresponds to `FaissIndex`." HNSWLIB = "HNSWLIB" "Corresponds to `HnswlibIndex`." POLAR = "POLAR" "Corresponds to `PolarIndex`." WHITENING = "WHITENING" "Corresponds to `WhiteningIndex`."
[docs] def index_class(name: str | IndexName, /) -> type[Index]: """ Get the index class for the given name. Parameters: name: The name of the index. """ name = IndexName.lookup(name) match name: case IndexName.FAISS: return FaissIndex case IndexName.HNSWLIB: return HnswlibIndex case IndexName.POLAR: return PolarIndex case IndexName.WHITENING: return WhiteningIndex case _: raise ValueError(f"Unknown index name: {name}")
def index_set_backends(kwargs: dict[str, Any], /) -> dict[str, Any]: """ Sets the backend variable to the desired class in `kwargs`. Parameters: kwargs: The keyword arguments to map. Returns: The mapped keyword arguments. """ mapped = {**kwargs} for key, value in kwargs.items(): try: if isinstance(value, str): idx = IndexName.lookup(value) mapped[key] = index_class(idx) except ItemNotFound: pass return mapped