class TestRegSpaceClustering(unittest.TestCase): @classmethod def setUpClass(cls): super(TestRegSpaceClustering, cls).setUpClass() np.random.seed(0) def setUp(self): self.dmin = 0.3 self.clustering = RegularSpaceClustering(dmin=self.dmin) self.clustering.data_producer = RandomDataSource() #self.pr = cProfile.Profile() #self.pr.enable() #print "*" * 80 def tearDown(self): pass # from pstats import Stats # p = Stats(self.pr) # p.strip_dirs() # # p.sort_stats('cumtime') # p.print_stats() # # print "*" * 80 def testAlgo(self): self.clustering.parametrize() assert self.clustering.dtrajs[0].dtype == int # assert distance for each centroid is at least dmin for c in itertools.combinations(self.clustering.clustercenters, 2): if np.allclose(c[0], c[1]): # skip equal pairs continue dist = np.linalg.norm(c[0] - c[1], 2) self.assertGreaterEqual(dist, self.dmin, "centroid pair\n%s\n%s\n has smaller" " distance than dmin(%f): %f" % (c[0], c[1], self.dmin, dist)) def testAssignment(self): self.clustering.parametrize() assert len(self.clustering.clustercenters) > 1 # num states == num _clustercenters? self.assertEqual(len(np.unique(self.clustering.dtrajs)), len( self.clustering.clustercenters), "number of unique states in dtrajs" " should be equal.") def testSpreadData(self): self.clustering.data_producer = RandomDataSource(a=-2, b=2) self.clustering.dmin = 2 self.clustering.parametrize()
class TestRegSpaceClustering(unittest.TestCase): @classmethod def setUpClass(cls): super(TestRegSpaceClustering, cls).setUpClass() np.random.seed(0) def setUp(self): self.dmin = 0.3 self.clustering = RegularSpaceClustering(dmin=self.dmin) self.clustering.data_producer = RandomDataSource() def testAlgo(self): self.clustering.parametrize() # correct type of dtrajs assert types.is_int_array(self.clustering.dtrajs[0]) # assert distance for each centroid is at least dmin for c in itertools.combinations(self.clustering.clustercenters, 2): if np.allclose(c[0], c[1]): # skip equal pairs continue dist = np.linalg.norm(c[0] - c[1], 2) self.assertGreaterEqual( dist, self.dmin, "centroid pair\n%s\n%s\n has smaller" " distance than dmin(%f): %f" % (c[0], c[1], self.dmin, dist)) def testAssignment(self): self.clustering.parametrize() assert len(self.clustering.clustercenters) > 1 # num states == num _clustercenters? self.assertEqual( len(np.unique(self.clustering.dtrajs)), len(self.clustering.clustercenters), "number of unique states in dtrajs" " should be equal.") data_to_cluster = np.random.random((1000, 3)) self.clustering.assign(data_to_cluster, stride=1) def testSpreadData(self): self.clustering.data_producer = RandomDataSource(a=-2, b=2) self.clustering.dmin = 2 self.clustering.parametrize() def test1d_data(self): data = np.random.random(100) cluster_regspace(data, dmin=0.3)
class TestRegSpaceClustering(unittest.TestCase): @classmethod def setUpClass(cls): super(TestRegSpaceClustering, cls).setUpClass() np.random.seed(0) def setUp(self): self.dmin = 0.3 self.clustering = RegularSpaceClustering(dmin=self.dmin) self.clustering.data_producer = RandomDataSource() def testAlgo(self): self.clustering.parametrize() # correct type of dtrajs assert types.is_int_array(self.clustering.dtrajs[0]) # assert distance for each centroid is at least dmin for c in itertools.combinations(self.clustering.clustercenters, 2): if np.allclose(c[0], c[1]): # skip equal pairs continue dist = np.linalg.norm(c[0] - c[1], 2) self.assertGreaterEqual(dist, self.dmin, "centroid pair\n%s\n%s\n has smaller" " distance than dmin(%f): %f" % (c[0], c[1], self.dmin, dist)) def testAssignment(self): self.clustering.parametrize() assert len(self.clustering.clustercenters) > 1 # num states == num _clustercenters? self.assertEqual(len(np.unique(self.clustering.dtrajs)), len( self.clustering.clustercenters), "number of unique states in dtrajs" " should be equal.") data_to_cluster = np.random.random((1000, 3)) self.clustering.assign(data_to_cluster, stride=1) def testSpreadData(self): self.clustering.data_producer = RandomDataSource(a=-2, b=2) self.clustering.dmin = 2 self.clustering.parametrize() def test1d_data(self): data = np.random.random(100) cluster_regspace(data, dmin=0.3)
class TestRegSpaceClustering(unittest.TestCase): @classmethod def setUpClass(cls): super(TestRegSpaceClustering, cls).setUpClass() def setUp(self): self.dmin = 0.3 self.clustering = RegularSpaceClustering(dmin=self.dmin) self.clustering.data_producer = RandomDataSource() def test_algorithm(self): self.clustering.parametrize() # correct type of dtrajs assert types.is_int_vector(self.clustering.dtrajs[0]) # assert distance for each centroid is at least dmin for c in itertools.combinations(self.clustering.clustercenters, 2): if np.allclose(c[0], c[1]): # skip equal pairs continue dist = np.linalg.norm(c[0] - c[1], 2) self.assertGreaterEqual(dist, self.dmin, "centroid pair\n%s\n%s\n has smaller" " distance than dmin(%f): %f" % (c[0], c[1], self.dmin, dist)) def test_assignment(self): self.clustering.parametrize() assert len(self.clustering.clustercenters) > 1 # num states == num _clustercenters? self.assertEqual(len(np.unique(self.clustering.dtrajs)), len( self.clustering.clustercenters), "number of unique states in dtrajs" " should be equal.") data_to_cluster = np.random.random((1000, 3)) self.clustering.assign(data_to_cluster, stride=1) def test_spread_data(self): self.clustering.data_producer = RandomDataSource(a=-2, b=2) self.clustering.dmin = 2 self.clustering.parametrize() def test1d_data(self): data = np.random.random(100) cluster_regspace(data, dmin=0.3) def test_non_existent_metric(self): self.clustering.data_producer = RandomDataSource(a=-2, b=2) self.clustering.dmin = 2 self.clustering.metric = "non_existent_metric" with self.assertRaises(ValueError): self.clustering.parametrize() def test_minRMSD_metric(self): self.clustering.data_producer = RandomDataSource(a=-2, b=2) self.clustering.dmin = 2 self.clustering.metric = "minRMSD" self.clustering.parametrize() data_to_cluster = np.random.random((1000, 3)) self.clustering.assign(data_to_cluster, stride=1) def test_too_small_dmin_should_warn(self): self.clustering.dmin = 1e-8 max_centers = 50 self.clustering.max_centers = max_centers import warnings with warnings.catch_warnings(record=True) as w: # Cause all warnings to always be triggered. warnings.simplefilter("always") # Trigger a warning. self.clustering.parametrize() assert w assert len(w) == 1 assert len(self.clustering.clustercenters) == max_centers # assign data out = self.clustering.get_output() assert len(out) == self.clustering.number_of_trajectories() assert len(out[0]) == self.clustering.trajectory_lengths()[0]