Ejemplo n.º 1
0
 def test_has_model(self) -> None:
     itq = ItqFunctor()
     # with no vector/rotation set, should return false.
     self.assertFalse(itq.has_model())
     # If only one of the two is None, then false should be returned.
     itq.mean_vec = 'mean vec'
     itq.rotation = None
     self.assertFalse(itq.has_model())
     itq.mean_vec = None
     itq.rotation = 'rotation'
     self.assertFalse(itq.has_model())
     # If both are not None, return true.
     itq.mean_vec = 'mean vec'
     itq.rotation = 'rotation'
     self.assertTrue(itq.has_model())
Ejemplo n.º 2
0
    def test_get_hash(self) -> None:
        fit_descriptors = []
        for i in range(5):
            d = DescriptorMemoryElement('test', i)
            d.set_vector([-2. + i, -2. + i])
            fit_descriptors.append(d)

        # The following "rotation" matrix should cause any 2-feature descriptor
        # to the right of the line ``y = -x`` to be True, and to the left as
        # False. If on the line, should be True.
        itq = ItqFunctor(bit_length=1, random_seed=0)
        itq.mean_vec = numpy.array([0., 0.])
        itq.rotation = numpy.array([[1. / sqrt(2)], [1. / sqrt(2)]])

        numpy.testing.assert_array_equal(itq.get_hash(numpy.array([1, 1])),
                                         [True])
        numpy.testing.assert_array_equal(itq.get_hash(numpy.array([-1, -1])),
                                         [False])

        numpy.testing.assert_array_equal(itq.get_hash(numpy.array([-1, 1])),
                                         [True])
        numpy.testing.assert_array_equal(
            itq.get_hash(numpy.array([-1.001, 1])), [False])
        numpy.testing.assert_array_equal(
            itq.get_hash(numpy.array([-1, 1.001])), [True])

        numpy.testing.assert_array_equal(itq.get_hash(numpy.array([1, -1])),
                                         [True])
        numpy.testing.assert_array_equal(
            itq.get_hash(numpy.array([1, -1.001])), [False])
        numpy.testing.assert_array_equal(
            itq.get_hash(numpy.array([1.001, -1])), [True])
Ejemplo n.º 3
0
    def test_save_model_with_writable_caches(self) -> None:
        # If one or both cache elements are read-only, no saving.
        expected_mean_vec = numpy.array([1, 2, 3])
        expected_rotation = numpy.eye(3)

        expected_mean_vec_bio = BytesIO()
        # noinspection PyTypeChecker
        numpy.save(expected_mean_vec_bio, expected_mean_vec)
        expected_mean_vec_bytes = expected_mean_vec_bio.getvalue()

        expected_rotation_bio = BytesIO()
        # noinspection PyTypeChecker
        numpy.save(expected_rotation_bio, expected_rotation)
        expected_rotation_bytes = expected_rotation_bio.getvalue()

        itq = ItqFunctor()
        itq.mean_vec = expected_mean_vec
        itq.rotation = expected_rotation
        itq.mean_vec_cache_elem = DataMemoryElement(readonly=False)
        itq.rotation_cache_elem = DataMemoryElement(readonly=False)

        itq.save_model()
        self.assertEqual(itq.mean_vec_cache_elem.get_bytes(),
                         expected_mean_vec_bytes)
        self.assertEqual(itq.rotation_cache_elem.get_bytes(),
                         expected_rotation_bytes)
Ejemplo n.º 4
0
    def test_save_model_with_read_only_cache(self) -> None:
        # If one or both cache elements are read-only, no saving.
        expected_mean_vec = numpy.array([1, 2, 3])
        expected_rotation = numpy.eye(3)

        itq = ItqFunctor()
        itq.mean_vec = expected_mean_vec
        itq.rotation = expected_rotation

        # read-only mean-vec cache
        itq.mean_vec_cache_elem = DataMemoryElement(readonly=True)
        itq.rotation_cache_elem = DataMemoryElement(readonly=False)
        itq.save_model()
        self.assertEqual(itq.mean_vec_cache_elem.get_bytes(), b'')
        self.assertEqual(itq.rotation_cache_elem.get_bytes(), b'')

        # read-only rotation cache
        itq.mean_vec_cache_elem = DataMemoryElement(readonly=False)
        itq.rotation_cache_elem = DataMemoryElement(readonly=True)
        itq.save_model()
        self.assertEqual(itq.mean_vec_cache_elem.get_bytes(), b'')
        self.assertEqual(itq.rotation_cache_elem.get_bytes(), b'')

        # Both read-only
        itq.mean_vec_cache_elem = DataMemoryElement(readonly=True)
        itq.rotation_cache_elem = DataMemoryElement(readonly=True)
        itq.save_model()
        self.assertEqual(itq.mean_vec_cache_elem.get_bytes(), b'')
        self.assertEqual(itq.rotation_cache_elem.get_bytes(), b'')
Ejemplo n.º 5
0
 def test_fit_has_model(self) -> None:
     # When trying to run fit where there is already a mean vector and
     # rotation set.
     itq = ItqFunctor()
     itq.mean_vec = 'sim vec'
     itq.rotation = 'sim rot'
     self.assertRaisesRegex(RuntimeError,
                            "Model components have already been loaded.",
                            itq.fit, [])
Ejemplo n.º 6
0
    def test_save_model_no_caches(self) -> None:
        expected_mean_vec = numpy.array([1, 2, 3])
        expected_rotation = numpy.eye(3)

        # Cache variables should remain None after save.
        itq = ItqFunctor()
        itq.mean_vec = expected_mean_vec
        itq.rotation = expected_rotation
        itq.save_model()
        self.assertIsNone(itq.mean_vec_cache_elem)
        self.assertIsNone(itq.mean_vec_cache_elem)