Example #1
0
    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
Example #2
0
  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
Example #3
0
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)),
    )
Example #4
0
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 ) ),
    )
Example #5
0
    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
Example #6
0
  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