def manipulate(self, leu, asn, matchings):

    ( leu_ca, leu_cb, leu_cg ) = self.build_leu( leu = leu )
    ( asn_ca, asn_cb, asn_cg ) = self.build_asn( asn = asn )

    callback = collector()

    import operator

    graph_structure_comparison.mcgregor_common_subgraphs_unique(
      graph1 = leu,
      graph2 = asn,
      vertex_equality = operator.eq,
      edge_equality = lambda l, r: abs( l - r ) <= 0.1,
      callback = callback,
      )
    self.assertEqual( len( callback.collected ), matchings )

    largest = max( callback.collected, key = len )
    self.assertEqual( len( largest ), 3 )
    self.assertEqual(
      sorted( [ ( leu.vertex_label( p[0] ), asn.vertex_label( p[1] ) ) for p in largest ] ),
      [ ( "C", "C" ), ( "C", "C" ), ( "CA", "CA" ) ],
      )
    self.assertEqual(
      set( largest ),
      set( [ ( leu_ca, asn_ca ), ( leu_cb, asn_cb ), ( leu_cg, asn_cg ) ] ),
      )
Пример #2
0
  def __init__(
    self,
    molecule1,
    molecule2,
    is_valid,
    maxsteps = 500,
    vertex_equality = None,
    edge_equality = None,
    ):

    if vertex_equality is None:
      import operator
      vertex_equality = operator.eq

    if edge_equality is None:
      import operator
      edge_equality = operator.eq

    self.molecule1 = molecule1.atom_for
    self.molecule2 = molecule2.atom_for
    self.is_valid = is_valid
    self.best = []
    self.steps = 0
    self.maxsteps = maxsteps

    from graph import graph_structure_comparison as gsc
    gsc.mcgregor_common_subgraphs_unique(
      graph1 = molecule1.graph,
      graph2 = molecule2.graph,
      vertex_equality = vertex_equality,
      edge_equality = edge_equality,
      callback = self,
      )
Пример #3
0
    def __init__(
        self,
        molecule1,
        molecule2,
        is_valid,
        maxsteps=500,
        vertex_equality=None,
        edge_equality=None,
    ):

        if vertex_equality is None:
            import operator
            vertex_equality = operator.eq

        if edge_equality is None:
            import operator
            edge_equality = operator.eq

        self.molecule1 = molecule1.atom_for
        self.molecule2 = molecule2.atom_for
        self.is_valid = is_valid
        self.best = []
        self.steps = 0
        self.maxsteps = maxsteps

        from graph import graph_structure_comparison as gsc
        gsc.mcgregor_common_subgraphs_unique(
            graph1=molecule1.graph,
            graph2=molecule2.graph,
            vertex_equality=vertex_equality,
            edge_equality=edge_equality,
            callback=self,
        )
Пример #4
0
    def manipulate(self, leu, asn, matchings):

        (leu_ca, leu_cb, leu_cg) = self.build_leu(leu=leu)
        (asn_ca, asn_cb, asn_cg) = self.build_asn(asn=asn)

        callback = collector()

        import operator

        graph_structure_comparison.mcgregor_common_subgraphs_unique(
            graph1=leu,
            graph2=asn,
            vertex_equality=operator.eq,
            edge_equality=lambda l, r: abs(l - r) <= 0.1,
            callback=callback,
        )
        self.assertEqual(len(callback.collected), matchings)

        largest = max(callback.collected, key=len)
        self.assertEqual(len(largest), 3)
        self.assertEqual(
            sorted([(leu.vertex_label(p[0]), asn.vertex_label(p[1]))
                    for p in largest]),
            [("C", "C"), ("C", "C"), ("CA", "CA")],
        )
        self.assertEqual(
            set(largest),
            set([(leu_ca, asn_ca), (leu_cb, asn_cb), (leu_cg, asn_cg)]),
        )