def vertex_classification(self, graph, vertices): vertices_tagged = {} for v in vertices: label = graph.vertex_label(vertex=v) vertices_tagged.setdefault(label, []).append(v) return vertices_tagged
def vertex_classification(self, graph, vertices): vertices_tagged = {} for v in vertices: label = graph.vertex_label( vertex = v ) vertices_tagged.setdefault( label, [] ).append( v ) return vertices_tagged
def bessonov_projection_bound(graph, partition): """ Simple upper bound by projecting back to factor graphs Vertices of the compatibility graph has to have properties 'first' and 'second' the vertex descriptors of the original graphs """ descriptors = reduce(operator.add, partition, []) properties = [graph.vertex_label(vertex=v) for v in descriptors] return min( len(set(v[0] for v in properties)), len(set(v[1] for v in properties)), )
def bessonov_projection_bound(graph, partition): """ Simple upper bound by projecting back to factor graphs Vertices of the compatibility graph has to have properties 'first' and 'second' the vertex descriptors of the original graphs """ descriptors = reduce( operator.add, partition, [] ) properties = [ graph.vertex_label( vertex = v ) for v in descriptors ] return min( len( set( v[0]for v in properties ) ), len( set( v[1] for v in properties ) ), )
def __call__(self, graph, partition): descriptors = reduce(operator.add, partition, []) properties = [graph.vertex_label(vertex=v) for v in descriptors] first_tagged = self.vertex_classification( graph=self.first, vertices=set(v[0] for v in properties), ) second_tagged = self.vertex_classification( graph=self.second, vertices=set(v[1] for v in properties), ) bound = 0 for v in set(first_tagged).intersection(second_tagged): bound += min(len(first_tagged[v]), len(second_tagged[v])) return bound
def __call__(self, graph, partition): descriptors = reduce( operator.add, partition, [] ) properties = [ graph.vertex_label( vertex = v ) for v in descriptors ] first_tagged = self.vertex_classification( graph = self.first, vertices = set( v[0] for v in properties ), ) second_tagged = self.vertex_classification( graph = self.second, vertices = set( v[1] for v in properties ), ) bound = 0 for v in set( first_tagged ).intersection( second_tagged ): bound += min( len( first_tagged[ v ] ), len( second_tagged[ v ] ) ) return bound