Source code for smqtk.algorithms.relevancy_index

import abc

from smqtk.algorithms import SmqtkAlgorithm

class NoIndexError (Exception):
    When a RelevancyIndex does not yet have a index built yet when one is

[docs]class RelevancyIndex (SmqtkAlgorithm): """ Abstract class for IQR index implementations. Similar to a traditional nearest-neighbors algorithm, An IQR index provides a specialized nearest-neighbors interface that can take multiple examples of positively and negatively relevant exemplars in order to produce a [0, 1] ranking of the indexed elements by determined relevancy. """ def __len__(self): return self.count()
[docs] @abc.abstractmethod def count(self): """ :return: Number of elements in this index. :rtype: int """
[docs] @abc.abstractmethod def build_index(self, descriptors): """ Build the index based on the given iterable of descriptor elements. Subsequent calls to this method should rebuild the index, not add to it. :raises ValueError: No data available in the given iterable. :param descriptors: Iterable of descriptor elements to build index over. :type descriptors: collections.Iterable[smqtk.representation.DescriptorElement] """
[docs] @abc.abstractmethod def rank(self, pos, neg): """ Rank the currently indexed elements given ``pos`` positive and ``neg`` negative exemplar descriptor elements. :param pos: Iterable of positive exemplar DescriptorElement instances. This may be optional for some implementations. :type pos: collections.Iterable[smqtk.representation.DescriptorElement] :param neg: Iterable of negative exemplar DescriptorElement instances. This may be optional for some implementations. :type neg: collections.Iterable[smqtk.representation.DescriptorElement] :raises NoIndexError: If index ranking is requested without an index to rank. :return: Map of indexed descriptor elements to a rank value between [0, 1] (inclusive) range, where a 1.0 means most relevant and 0.0 meaning least relevant. :rtype: dict[smqtk.representation.DescriptorElement, float] """