class test_small(ConsistencyTests): def setUp(self): self.data = np.array([[0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,0], [1,1,1]]) self.bounds = 1.1 * np.ones(3) self.kdtree = PeriodicKDTree(self.bounds, self.data) self.n = self.kdtree.n self.m = self.kdtree.m self.x = np.random.randn(3) self.d = 0.5 self.k = 4 def test_nearest(self): assert_array_equal( self.kdtree.query((0,0,0.1), 1), (0.1,0)) def test_nearest_two(self): assert_array_almost_equal( self.kdtree.query((0,0,0.1), 2), ([0.1,np.sqrt(0.1**2 + 0.1**2)],[0,2]))
class test_small(ConsistencyTests): def setUp(self): self.data = np.array([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]) self.bounds = 1.1 * np.ones(3) self.kdtree = PeriodicKDTree(self.bounds, self.data) self.n = self.kdtree.n self.m = self.kdtree.m self.x = np.random.randn(3) self.d = 0.5 self.k = 4 def test_nearest(self): assert_array_equal(self.kdtree.query((0, 0, 0.1), 1), (0.1, 0)) def test_nearest_two(self): assert_array_almost_equal(self.kdtree.query((0, 0, 0.1), 2), ([0.1, np.sqrt(0.1**2 + 0.1**2)], [0, 2]))
class test_vectorization: def setUp(self): self.data = np.array([[0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,0], [1,1,1]]) self.bounds = 1.1 * np.ones(3) self.kdtree = PeriodicKDTree(self.bounds, self.data) def test_single_query(self): d, i = self.kdtree.query(np.array([0,0,0])) assert_(isinstance(d,float)) assert_(np.issubdtype(i, int)) def test_vectorized_query(self): d, i = self.kdtree.query(np.zeros((2,4,3))) assert_equal(np.shape(d),(2,4)) assert_equal(np.shape(i),(2,4)) def test_single_query_multiple_neighbors(self): s = 23 kk = 27*self.kdtree.n+s d, i = self.kdtree.query(np.array([0,0,0]),k=kk) assert_equal(np.shape(d),(kk,)) assert_equal(np.shape(i),(kk,)) assert_(np.all(~np.isfinite(d[-s:]))) assert_(np.all(i[-s:]==self.kdtree.n)) def test_vectorized_query_multiple_neighbors(self): s = 23 kk = 27*self.kdtree.n+s d, i = self.kdtree.query(np.zeros((2,4,3)),k=kk) assert_equal(np.shape(d),(2,4,kk)) assert_equal(np.shape(i),(2,4,kk)) assert_(np.all(~np.isfinite(d[:,:,-s:]))) assert_(np.all(i[:,:,-s:]==self.kdtree.n)) def test_single_query_all_neighbors(self): d, i = self.kdtree.query([0,0,0],k=None,distance_upper_bound=1.1) assert_(isinstance(d,list)) assert_(isinstance(i,list)) def test_vectorized_query_all_neighbors(self): d, i = self.kdtree.query(np.zeros((2,4,3)),k=None,distance_upper_bound=1.1) assert_equal(np.shape(d),(2,4)) assert_equal(np.shape(i),(2,4)) assert_(isinstance(d[0,0],list)) assert_(isinstance(i[0,0],list))
class test_vectorization: def setUp(self): self.data = np.array([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]) self.bounds = 1.1 * np.ones(3) self.kdtree = PeriodicKDTree(self.bounds, self.data) def test_single_query(self): d, i = self.kdtree.query(np.array([0, 0, 0])) assert_(isinstance(d, float)) assert_(np.issubdtype(i, int)) def test_vectorized_query(self): d, i = self.kdtree.query(np.zeros((2, 4, 3))) assert_equal(np.shape(d), (2, 4)) assert_equal(np.shape(i), (2, 4)) def test_single_query_multiple_neighbors(self): s = 23 kk = 27 * self.kdtree.n + s d, i = self.kdtree.query(np.array([0, 0, 0]), k=kk) assert_equal(np.shape(d), (kk, )) assert_equal(np.shape(i), (kk, )) assert_(np.all(~np.isfinite(d[-s:]))) assert_(np.all(i[-s:] == self.kdtree.n)) def test_vectorized_query_multiple_neighbors(self): s = 23 kk = 27 * self.kdtree.n + s d, i = self.kdtree.query(np.zeros((2, 4, 3)), k=kk) assert_equal(np.shape(d), (2, 4, kk)) assert_equal(np.shape(i), (2, 4, kk)) assert_(np.all(~np.isfinite(d[:, :, -s:]))) assert_(np.all(i[:, :, -s:] == self.kdtree.n)) def test_single_query_all_neighbors(self): d, i = self.kdtree.query([0, 0, 0], k=None, distance_upper_bound=1.1) assert_(isinstance(d, list)) assert_(isinstance(i, list)) def test_vectorized_query_all_neighbors(self): d, i = self.kdtree.query(np.zeros((2, 4, 3)), k=None, distance_upper_bound=1.1) assert_equal(np.shape(d), (2, 4)) assert_equal(np.shape(i), (2, 4)) assert_(isinstance(d[0, 0], list)) assert_(isinstance(i[0, 0], list))
data = np.concatenate( (np.random.randn(n // 2, m), np.random.randn(n - n // 2, m) + np.ones(m))) queries = np.concatenate( (np.random.randn(r // 2, m), np.random.randn(r - r // 2, m) + np.ones(m))) print "dimension %d, %d points" % (m, n) t = time.time() T1 = PeriodicKDTree(bounds, data) print "PeriodicKDTree constructed:\t%g" % (time.time() - t) t = time.time() T2 = PeriodicCKDTree(bounds, data) print "PeriodicCKDTree constructed:\t%g" % (time.time() - t) t = time.time() w = T1.query(queries) print "PeriodicKDTree %d lookups:\t%g" % (r, time.time() - t) del w t = time.time() w = T2.query(queries) print "PeriodicCKDTree %d lookups:\t%g" % (r, time.time() - t) del w T3 = PeriodicCKDTree(bounds, data, leafsize=n) t = time.time() w = T3.query(queries) print "flat PeriodicCKDTree %d lookups:\t%g" % (r, time.time() - t) del w t = time.time()
data = np.concatenate((np.random.randn(n//2,m), np.random.randn(n-n//2,m)+np.ones(m))) queries = np.concatenate((np.random.randn(r//2,m), np.random.randn(r-r//2,m)+np.ones(m))) print "dimension %d, %d points" % (m,n) t = time.time() T1 = PeriodicKDTree(bounds, data) print "PeriodicKDTree constructed:\t%g" % (time.time()-t) t = time.time() T2 = PeriodicCKDTree(bounds, data) print "PeriodicCKDTree constructed:\t%g" % (time.time()-t) t = time.time() w = T1.query(queries) print "PeriodicKDTree %d lookups:\t%g" % (r, time.time()-t) del w t = time.time() w = T2.query(queries) print "PeriodicCKDTree %d lookups:\t%g" % (r, time.time()-t) del w T3 = PeriodicCKDTree(bounds,data,leafsize=n) t = time.time() w = T3.query(queries) print "flat PeriodicCKDTree %d lookups:\t%g" % (r, time.time()-t) del w t = time.time()