def test_composes_max_array(self):
        val1 = self.number_of_levels_large - 1
        val2 = self.number_of_levels_large - 1

        composer = WordsComposer(2, 2, self.number_of_levels_large)
        result = composer.compose(np.array([val1, val2]))

        assert np.array_equal(result, [val1 + self.number_of_levels_large * val2])
    def test_composes_multiple_words(self):
        value1 = 1
        value2a = 0
        value2b = 2
        value3 = 3

        composer = WordsComposer(6, 2, self.number_of_levels)
        result = composer.compose(np.array([value1, value1, value2a, value2b, value3, value3]))

        assert np.array_equal(result, [value1 + self.number_of_levels * value1,
                                       value2a + self.number_of_levels * value2b,
                                       value3 + self.number_of_levels * value3,
                                       ])
Exemple #3
0
class SearchTermsCreator:
    _key_template = "word_{:04d}"

    def __init__(self, descriptor_shape):
        self.quantizer = Quantizer(config_descriptors.NUMBER_OF_LEVELS)
        self.words_composer = WordsComposer(
            np.prod(descriptor_shape), config_descriptors.LENGTH_OF_WORD,
            config_descriptors.NUMBER_OF_LEVELS)

    def get_dictionary_of_words(self,
                                descriptor: Descriptor) -> Dict[str, int]:
        quantized_vector = self.quantizer.quantize_vector(descriptor.vector)
        composed_values = self.words_composer.compose(quantized_vector)
        return {
            self._key_template.format(index): int(value)
            for index, value in enumerate(composed_values)
        }
 def test_fails_on_overflow(self):
     with pytest.raises(WordsComposerException):
         WordsComposer(1, 64, 2)  # 2**64 is too much
 def test_fails_on_too_small_shape(self):
     with pytest.raises(WordsComposerException):
         WordsComposer(1, 2, 3).compose(np.array([0]))
 def test_composes_zero_array(self):
     composer = WordsComposer(2, 2, self.number_of_levels)
     result = composer.compose(np.array([0, 0]))
     assert np.array_equal(result, [0])
Exemple #7
0
 def __init__(self, descriptor_shape):
     self.quantizer = Quantizer(config_descriptors.NUMBER_OF_LEVELS)
     self.words_composer = WordsComposer(
         np.prod(descriptor_shape), config_descriptors.LENGTH_OF_WORD,
         config_descriptors.NUMBER_OF_LEVELS)