Ejemplo n.º 1
0
    def testAddImplicitAtomsFromAtomType(self):
        """
        test Group.addImplicitAtomsFromAtomType() method
        """
        #basic test adding oDouble
        adjlist1 = """
1  *1 CO u0
            """

        adjlist2 = """
1  *1 CO u0 {2,D}
2     O  u0 {1,D}
            """

        group1 = Group().fromAdjacencyList(adjlist1)
        group2 = Group().fromAdjacencyList(adjlist2)

        newGroup = group1.addImplicitAtomsFromAtomType()
        self.assertTrue(group2.isIsomorphic(newGroup))
        #testing the allDouble match (more complicated
        adjlist3 = """
1  *1 Cdd u0
            """

        adjlist4 = """
1  *1 Cdd u0 {2,D} {3,D}
2     C   u0 {1,D}
3     C   u0 {1,D}
            """
        group3 = Group().fromAdjacencyList(adjlist3)
        group4 = Group().fromAdjacencyList(adjlist4)

        newGroup = group3.addImplicitAtomsFromAtomType()
        self.assertTrue(group4.isIsomorphic(newGroup))
        #test adding a triple bond
        adjlist5 = """
1  *1 Ct u0
            """

        adjlist6 = """
1  *1 Ct u0 {2,T}
2     C   u0 {1,T}
            """
        group5 = Group().fromAdjacencyList(adjlist5)
        group6 = Group().fromAdjacencyList(adjlist6)

        newGroup = group5.addImplicitAtomsFromAtomType()
        self.assertTrue(group6.isIsomorphic(newGroup))
        #test addition of lone pairs
        adjlist7 = """
1  *1 N1d u0
            """

        adjlist8 = """
1  *1 N1d u0 p2 {2,D}
2     C   u0 {1,D}
            """
        group7 = Group().fromAdjacencyList(adjlist7)
        group8 = Group().fromAdjacencyList(adjlist8)

        newGroup = group7.addImplicitAtomsFromAtomType()
        self.assertTrue(group8.isIsomorphic(newGroup))

        #test multiple implicit atoms at a time
        adjlist9 = """
1  *1 Cd u0 {2,S}
2     Ct u0 {1,S}
            """

        adjlist10 = """
1  *1 C u0 {2,S} {3,D}
2     Ct u0 {1,S} {4,T}
3     C  u0 {1,D}
4     C  u0 {2,T}
            """
        group9 = Group().fromAdjacencyList(adjlist9)
        group10 = Group().fromAdjacencyList(adjlist10)

        newGroup = group9.addImplicitAtomsFromAtomType()
        self.assertTrue(group10.isIsomorphic(newGroup))
Ejemplo n.º 2
0
    def testClassifyBenzeneCarbons(self):
        """
        Tests the method classifyingBenzeneCarbons
        """

        #This tests that we classify Cb atom types correctly
        adjlist1 = """
1  *1 Cb u0 {2,B}
2  *2 Cb u0 {1,B}
"""
        group1 = Group().fromAdjacencyList(adjlist1)

        (cbAtomList, cbfAtomList, cbfAtomList1, cbfAtomList2,
         connectedCbfs) = group1.classifyBenzeneCarbons()
        self.assertEquals(len(cbfAtomList), 0)
        for atom in group1.atoms:
            self.assertIn(atom, cbAtomList)

        #This tests that we classify Cbf atomtypes correctly
        adjlist2 = """
1 *1 Cbf u0
"""
        group2 = Group().fromAdjacencyList(adjlist2)
        (cbAtomList, cbfAtomList, cbfAtomList1, cbfAtomList2,
         connectedCbfs) = group2.classifyBenzeneCarbons()
        self.assertIn(group2.atoms[0], cbfAtomList)
        self.assertIn(group2.atoms[0], cbfAtomList1)

        #This tests that we can classify Cb atoms based on bonding and not just atomtype
        adjlist3 = """
1 *1 C u0 {2,B}
2 *2 C u0 {1,B} {3,B}
3 *3 C u0 {2,B}
"""
        group3 = Group().fromAdjacencyList(adjlist3)
        (cbAtomList, cbfAtomList, cbfAtomList1, cbfAtomList2,
         connectedCbfs) = group3.classifyBenzeneCarbons()
        for atom in group3.atoms:
            self.assertIn(atom, cbAtomList)

        #This tests that we can classify Cbf1 atoms based on bonding and not just atomtype
        adjlist4 = """
1 *1 C u0 {2,B} {3,B} {4,B}
2 *2 C u0 {1,B}
3 *3 C u0 {1,B}
4 *4 C u0 {1,B}
"""
        group4 = Group().fromAdjacencyList(adjlist4)
        (cbAtomList, cbfAtomList, cbfAtomList1, cbfAtomList2,
         connectedCbfs) = group4.classifyBenzeneCarbons()
        self.assertEquals(len(cbfAtomList), 1)
        self.assertEquals(len(cbfAtomList1), 1)

        #This tests that we can classify Cbf2 atoms. In the following partial group, we should have:
        #one Cbf2 atom, two Cbf1 atoms, and 5 Cb atoms
        adjlist5 = """
1 *1 C u0 {2,B} {3,B} {4,B}
2 *2 C u0 {1,B} {5,B} {6,B}
3 *3 C u0 {1,B} {7,B} {8,B}
4 *4 C u0 {1,B}
5 *5 C u0 {2,B}
6 *6 C u0 {2,B}
7 *7 C u0 {3,B}
8 *8 C u0 {3,B}
"""
        group5 = Group().fromAdjacencyList(adjlist5)
        (cbAtomList, cbfAtomList, cbfAtomList1, cbfAtomList2,
         connectedCbfs) = group5.classifyBenzeneCarbons()
        self.assertEquals(len(cbfAtomList1), 2)
        self.assertEquals(len(cbfAtomList2), 1)
        self.assertEquals(len(cbAtomList), 5)

        #Tests that we can classify connected Cbfs correctly. *1 should be connected to both *2 and *3
        atom1 = group5.getLabeledAtom("*1")
        atom2 = group5.getLabeledAtom("*2")
        atom3 = group5.getLabeledAtom("*3")
        self.assertIn(atom2, connectedCbfs[atom1])
        self.assertIn(atom3, connectedCbfs[atom1])
        self.assertIn(atom1, connectedCbfs[atom2])
        self.assertIn(atom1, connectedCbfs[atom3])
Ejemplo n.º 3
0
def create_group(element, u1, c1):
    adjlist = get_group_string(element, u1, c1)
    return Group().from_adjacency_list(adjlist), adjlist