code: def _make_clusters(self, matrix, num_clusters_per_roi, metric):
          
  
          from scipy.cluster.hierarchy import fclusterdata
  
          # maxclust needed to ensure t is interpreted as # clusters in heirarchical clustering
          group_ids = fclusterdata(matrix, metric=metric, t=num_clusters_per_roi,
                                   criterion='maxclust')
          group_set = np.unique(group_ids)
          clusters = [
              self._summary_func(matrix[group_ids == group, :], axis=0, keepdims=True)
              for group in group_set]
  
          return np.vstack(clusters).squeeze()
docs: clusters a given matrix by into specified number of clusters according to given metric