def test_table_caching(self): fd, tmp_cache = tempfile.mkstemp() os.close(fd) os.remove(tmp_cache) try: i = MemoryDescriptorIndex(tmp_cache) descrs = [random_descriptor() for _ in xrange(3)] expected_cache = dict((r.uuid(), r) for r in descrs) # cache should not exist yet ntools.assert_false(os.path.isfile(tmp_cache)) # Should write file and should be a dictionary of 3 # elements i.add_many_descriptors(descrs) ntools.assert_true(os.path.isfile(tmp_cache)) with open(tmp_cache) as f: ntools.assert_equal(cPickle.load(f), expected_cache) # Changing the internal table (remove, add) it should reflect in # cache new_d = random_descriptor() i.add_descriptor(new_d) expected_cache[new_d.uuid()] = new_d with open(tmp_cache) as f: ntools.assert_equal(cPickle.load(f), expected_cache) rm_d = expected_cache.values()[0] i.remove_descriptor(rm_d.uuid()) del expected_cache[rm_d.uuid()] with open(tmp_cache) as f: ntools.assert_equal(cPickle.load(f), expected_cache) finally: os.remove(tmp_cache)
def test_added_descriptor_table_caching(self): cache_elem = DataMemoryElement(readonly=False) descrs = [random_descriptor() for _ in range(3)] expected_table = dict((r.uuid(), r) for r in descrs) i = MemoryDescriptorIndex(cache_elem) ntools.assert_true(cache_elem.is_empty()) # Should add descriptors to table, caching to writable element. i.add_many_descriptors(descrs) ntools.assert_false(cache_elem.is_empty()) ntools.assert_equal(pickle.loads(i.cache_element.get_bytes()), expected_table) # Changing the internal table (remove, add) it should reflect in # cache new_d = random_descriptor() expected_table[new_d.uuid()] = new_d i.add_descriptor(new_d) ntools.assert_equal(pickle.loads(i.cache_element.get_bytes()), expected_table) rm_d = expected_table.values()[0] del expected_table[rm_d.uuid()] i.remove_descriptor(rm_d.uuid()) ntools.assert_equal(pickle.loads(i.cache_element.get_bytes()), expected_table)
def test_added_descriptor_table_caching(self): cache_elem = DataMemoryElement(readonly=False) descrs = [random_descriptor() for _ in range(3)] expected_table = dict((r.uuid(), r) for r in descrs) i = MemoryDescriptorIndex(cache_elem) self.assertTrue(cache_elem.is_empty()) # Should add descriptors to table, caching to writable element. i.add_many_descriptors(descrs) self.assertFalse(cache_elem.is_empty()) self.assertEqual(pickle.loads(i.cache_element.get_bytes()), expected_table) # Changing the internal table (remove, add) it should reflect in # cache new_d = random_descriptor() expected_table[new_d.uuid()] = new_d i.add_descriptor(new_d) self.assertEqual(pickle.loads(i.cache_element.get_bytes()), expected_table) rm_d = list(expected_table.values())[0] del expected_table[rm_d.uuid()] i.remove_descriptor(rm_d.uuid()) self.assertEqual(pickle.loads(i.cache_element.get_bytes()), expected_table)
def test_add_descriptor(self): index = MemoryDescriptorIndex() d1 = random_descriptor() index.add_descriptor(d1) ntools.assert_equal(index._table[d1.uuid()], d1) d2 = random_descriptor() index.add_descriptor(d2) ntools.assert_equal(index._table[d2.uuid()], d2)
def test_add_descriptor(self): index = MemoryDescriptorIndex() d1 = random_descriptor() index.add_descriptor(d1) ntools.assert_equal(index._table[d1.uuid()], d1) d2 = random_descriptor() index.add_descriptor(d2) ntools.assert_equal(index._table[d2.uuid()], d2)
def test_count(self): index = MemoryDescriptorIndex() ntools.assert_equal(index.count(), 0) d1 = random_descriptor() index.add_descriptor(d1) ntools.assert_equal(index.count(), 1) d2 = random_descriptor() index.add_descriptor(d2) ntools.assert_equal(index.count(), 2)
def test_count(self): index = MemoryDescriptorIndex() ntools.assert_equal(index.count(), 0) d1 = random_descriptor() index.add_descriptor(d1) ntools.assert_equal(index.count(), 1) d2 = random_descriptor() index.add_descriptor(d2) ntools.assert_equal(index.count(), 2)
def test_count(self): index = MemoryDescriptorIndex() ntools.assert_equal(index.count(), 0) d1 = random_descriptor() index.add_descriptor(d1) ntools.assert_equal(index.count(), 1) d2, d3, d4 = random_descriptor(), random_descriptor( ), random_descriptor() index.add_many_descriptors([d2, d3, d4]) ntools.assert_equal(index.count(), 4) d5 = random_descriptor() index.add_descriptor(d5) ntools.assert_equal(index.count(), 5)
def test_count(self): index = MemoryDescriptorIndex() self.assertEqual(index.count(), 0) d1 = random_descriptor() index.add_descriptor(d1) self.assertEqual(index.count(), 1) d2, d3, d4 = (random_descriptor(), random_descriptor(), random_descriptor()) index.add_many_descriptors([d2, d3, d4]) self.assertEqual(index.count(), 4) d5 = random_descriptor() index.add_descriptor(d5) self.assertEqual(index.count(), 5)
def test_clustering_equal_descriptors(self): # Test that clusters of descriptor of size n-features are correctly # clustered together. print("Creating dummy descriptors") n_features = 8 n_descriptors = 20 index = MemoryDescriptorIndex() c = 0 for i in range(n_features): v = numpy.ndarray((8,)) v[...] = 0 v[i] = 1 for j in range(n_descriptors): d = DescriptorMemoryElement('test', c) d.set_vector(v) index.add_descriptor(d) c += 1 print("Creating test MBKM") mbkm = MiniBatchKMeans(n_features, batch_size=12, verbose=True, compute_labels=False, random_state=0) # Initial fit with half of index d_classes = mb_kmeans_build_apply(index, mbkm, n_descriptors) # There should be 20 descriptors per class for c in d_classes: self.assertEqual( len(d_classes[c]), n_descriptors, "Cluster %s did not have expected number of descriptors " "(%d != %d)" % (c, n_descriptors, len(d_classes[c])) ) # Each descriptor in each cluster should be equal to the other # descriptors in that cluster uuids = list(d_classes[c]) v = index[uuids[0]].vector() for uuid in uuids[1:]: v2 = index[uuid].vector() numpy.testing.assert_array_equal(v, v2, "vector in cluster %d did not " "match other vectors " "(%s != %s)" % (c, v, v2))
def test_clustering_equal_descriptors(self): # Test that clusters of descriptor of size n-features are correctly # clustered together. print "Creating dummy descriptors" n_features = 8 n_descriptors = 20 index = MemoryDescriptorIndex() c = 0 for i in range(n_features): v = numpy.ndarray(8) v[...] = 0 v[i] = 1 for j in range(n_descriptors): d = DescriptorMemoryElement('test', c) d.set_vector(v) index.add_descriptor(d) c += 1 print "Creating test MBKM" mbkm = MiniBatchKMeans(n_features, batch_size=12, verbose=True, compute_labels=False, random_state=0) # Initial fit with half of index d_classes = mb_kmeans_build_apply(index, mbkm, n_descriptors) # There should be 20 descriptors per class for c in d_classes: nose.tools.assert_equal( len(d_classes[c]), n_descriptors, "Cluster %s did not have expected number of descriptors " "(%d != %d)" % (c, n_descriptors, len(d_classes[c]))) # Each descriptor in each cluster should be equal to the other # descriptors in that cluster uuids = list(d_classes[c]) v = index[uuids[0]].vector() for uuid in uuids[1:]: v2 = index[uuid].vector() numpy.testing.assert_array_equal( v, v2, "vector in cluster %d did not " "match other vectors " "(%s != %s)" % (c, v, v2))
def test_count(self): index = MemoryDescriptorIndex() self.assertEqual(index.count(), 0) d1 = random_descriptor() index.add_descriptor(d1) self.assertEqual(index.count(), 1) d2, d3, d4 = (random_descriptor(), random_descriptor(), random_descriptor()) index.add_many_descriptors([d2, d3, d4]) self.assertEqual(index.count(), 4) d5 = random_descriptor() index.add_descriptor(d5) self.assertEqual(index.count(), 5)
def test_table_caching(self): fd, tmp_cache = tempfile.mkstemp() os.close(fd) os.remove(tmp_cache) try: i = MemoryDescriptorIndex(tmp_cache) descrs = [random_descriptor() for _ in xrange(3)] expected_cache = dict((r.uuid(), r) for r in descrs) # cache should not exist yet ntools.assert_false(os.path.isfile(tmp_cache)) # Should write file and should be a dictionary of 3 # elements i.add_many_descriptors(descrs) ntools.assert_true(os.path.isfile(tmp_cache)) with open(tmp_cache) as f: ntools.assert_equal(cPickle.load(f), expected_cache) # Changing the internal table (remove, add) it should reflect in # cache new_d = random_descriptor() i.add_descriptor(new_d) expected_cache[new_d.uuid()] = new_d with open(tmp_cache) as f: ntools.assert_equal(cPickle.load(f), expected_cache) rm_d = expected_cache.values()[0] i.remove_descriptor(rm_d.uuid()) del expected_cache[rm_d.uuid()] with open(tmp_cache) as f: ntools.assert_equal(cPickle.load(f), expected_cache) finally: os.remove(tmp_cache)