In [ ]:
from rmgpy.data.base import Database, Entry
from rmgpy.species import Species
from rmgpy.molecule import Molecule, Group

from IPython.display import display

In [ ]:
grp = Group().fromAdjacencyList("""
1  C u0 p0 c0 {3,S} {6,S} {7,S} {8,S}
2  C u0 p0 c0 {4,S} {5,D} {6,S}
3  C u0 p0 c0 {1,S} {4,D} {9,S}
4  C u0 p0 c0 {2,S} {3,D} {10,S}
5  C u0 p0 c0 {2,D} {11,S} {12,S}
6  C u0 p1 c0 {1,S} {2,S}
7  H u0 p0 c0 {1,S}
8  H u0 p0 c0 {1,S}
9  H u0 p0 c0 {3,S}
10 H u0 p0 c0 {4,S}
11 H u0 p0 c0 {5,S}
12 H u0 p0 c0 {5,S}
""")

template = Group().fromAdjacencyList("""
1 *4 [CS,CO,Cd] u0 {2,D} {4,S}
2 *3 [CS,CO,Cd] u0 {1,D} {5,S}
3 *1 C          u0 {4,S} {5,S}
4 *5 Cs         u0 p[1,2,3,4] {1,S} {3,S}
5 *2 C          u0 {2,S} {3,S}
""")

In [ ]:
grp.isSubgraphIsomorphic(template)

In [ ]:
parent = Group().fromAdjacencyList("""
1  *1  R!H u1 {2,[S,D,T,B]}
2  *4  R!H ux {1,[S,D,T,B]} {3,[S,D,T,B]}
3  *6  R!H ux {2,[S,D,T,B]} {4,[S,D,T,B]}
4  *7  R!H ux {3,[S,D,T,B]} {5,[S,D,T,B]}
5  *8  R!H ux {4,[S,D,T,B]} {6,[S,D,T,B]}
6  *9  R!H ux {5,[S,D,T,B]} {7,[S,D,T,B]}
7  *10 R!H ux {6,[S,D,T,B]} {8,[S,D,T,B]}
8  *5  R!H ux {7,[S,D,T,B]} {9,[S,D,T,B]}
9  *2  R!H u0 {8,[S,D,T,B]} {10,[D,T,B]}
10 *3  R!H u0 c0 {9,[D,T,B]}
""")

child = Group().fromAdjacencyList("""
1  *3  R!H u0 c0 r1 {2,[D,T]} {8,[S,D,T,B]}
2  *2  R!H u0 r1 {1,[D,T]} {3,[S,D,T,B]}
3  *5  R!H ux r1 {2,[S,D,T,B]} {4,[S,D,T,B]}
4  *10 R!H ux r1 {3,[S,D,T,B]} {5,[S,D,T,B]}
5  *9  R!H ux r1 {4,[S,D,T,B]} {6,[S,D,T,B]}
6  *8  R!H ux r1 {5,[S,D,T,B]} {7,[S,D,T,B]}
7  *7  R!H ux r1 {6,[S,D,T,B]} {8,[S,D,T,B]}
8  *6  R!H ux r1 {1,[S,D,T,B]} {7,[S,D,T,B]} {9,[S,D,T,B]}
9  *4  R!H ux {8,[S,D,T,B]} {10,[S,D,T,B]}
10 *1  R!H u1 r0 {9,[S,D,T,B]}
""")

print Database().matchNodeToStructure(Entry(item=parent), child, atoms=child.getLabeledAtoms(), strict=True)
print Database().matchNodeToStructure(Entry(item=child), parent, atoms=child.getLabeledAtoms(), strict=True)

In [ ]:
child.isSubgraphIsomorphic(parent)

In [ ]: