@@ -47,11 +47,87 @@ def test_group_betas(self):
47
47
48
48
for cluster_type in ClusterType .get_cluster_type_name ():
49
49
for detector_type in DetectorType .get_detector_type_name ():
50
- beta_clusters , name_clusters = group_betas (
51
- fake_names , fake_betas , cluster = cluster_type , detector = detector_type
50
+
51
+ # As some clustering algorithms require parameters, we need to provide them
52
+ # to avoid errors
53
+ if cluster_type == "KMeans" or cluster_type == "SpectralClustering" :
54
+ cluster_params = {"n_clusters" : 2 }
55
+ else :
56
+ cluster_params = {}
57
+
58
+ result = group_betas (
59
+ fake_names ,
60
+ fake_betas ,
61
+ cluster = cluster_type ,
62
+ detector = detector_type ,
63
+ cluster_params = cluster_params ,
52
64
)
53
65
66
+ if isinstance (result , str ):
67
+ self .fail (f"group_betas returned an error: { result } " )
68
+
69
+ beta_clusters , name_clusters = result
70
+
54
71
# verify correct output
55
72
self .assertIsInstance (beta_clusters , list )
56
73
self .assertIsInstance (name_clusters , list )
57
74
self .assertEqual (len (beta_clusters ), len (name_clusters ))
75
+
76
+
77
+ def test_group_betas_no_detector (self ):
78
+ """tests correct function of the group_betas function
79
+ in clustering_betas.py without an outlier detector"""
80
+
81
+ fake_names = np .array ([f"betas_{ i } " for i in range (25 )])
82
+ fake_cluster_0 = np .random .rand (12 , 3 ) + 5
83
+ fake_cluster_1 = np .random .rand (12 , 3 ) - 5
84
+ fake_betas = np .stack ([* fake_cluster_0 , * fake_cluster_1 , np .array ([0 , 0 , 0 ])])
85
+ expected_clusters = 2
86
+
87
+ # test with recommended settings
88
+ beta_clusters , name_clusters = group_betas (
89
+ fake_names ,
90
+ fake_betas ,
91
+ cluster = ClusterType .KMeans ,
92
+ cluster_params = {"n_clusters" : expected_clusters },
93
+ )
94
+
95
+ # verify correct type of output
96
+ self .assertIsInstance (beta_clusters , list )
97
+ self .assertIsInstance (name_clusters , list )
98
+
99
+ # verify that beta_clusters and name_clusters correspond to each other
100
+ self .assertEqual (len (beta_clusters ), len (name_clusters ))
101
+ # verify that beta_clusters contains as many clusters as searched for
102
+ self .assertEqual (len (beta_clusters ), expected_clusters )
103
+
104
+ # verify that entries correspond to each other
105
+ for c , cluster in enumerate (name_clusters ):
106
+ for e , entry in enumerate (cluster ):
107
+ index = np .where (fake_names == entry )[0 ]
108
+ self .assertTrue ((fake_betas [index ] - beta_clusters [c ][e ]).max () == 0 )
109
+
110
+ # verify different keyword combinations
111
+
112
+ for cluster_type in ClusterType .get_cluster_type_name ():
113
+
114
+ # As some clustering algorithms require parameters, we need to provide them
115
+ # to avoid errors
116
+ if cluster_type == "KMeans" or cluster_type == "SpectralClustering" :
117
+ cluster_params = {"n_clusters" : 2 }
118
+ else :
119
+ cluster_params = {}
120
+
121
+ result = group_betas (
122
+ fake_names , fake_betas , cluster = cluster_type , cluster_params = cluster_params
123
+ )
124
+
125
+ if isinstance (result , str ):
126
+ self .fail (f"group_betas returned an error: { result } " )
127
+
128
+ beta_clusters , name_clusters = result
129
+
130
+ # verify correct output
131
+ self .assertIsInstance (beta_clusters , list )
132
+ self .assertIsInstance (name_clusters , list )
133
+ self .assertEqual (len (beta_clusters ), len (name_clusters ))
0 commit comments