Пример #1
0
    def testIsInCycle(self):

        # ethane
        molecule = Molecule().fromSMILES('CC')
        for atom in molecule.atoms:
            self.assertFalse(molecule.isAtomInCycle(atom))
        for atom1 in molecule.bonds:
            for atom2 in molecule.bonds[atom1]:
                self.assertFalse(molecule.isBondInCycle(atom1, atom2))

        # cyclohexane
        molecule = Molecule().fromInChI('InChI=1/C6H12/c1-2-4-6-5-3-1/h1-6H2')
        for atom in molecule.atoms:
            if atom.isHydrogen():
                self.assertFalse(molecule.isAtomInCycle(atom))
            elif atom.isCarbon():
                self.assertTrue(molecule.isAtomInCycle(atom))
        for atom1 in molecule.bonds:
            for atom2 in molecule.bonds[atom1]:
                if atom1.isCarbon() and atom2.isCarbon():
                    self.assertTrue(molecule.isBondInCycle(atom1, atom2))
                else:
                    self.assertFalse(molecule.isBondInCycle(atom1, atom2))
Пример #2
0
    def testAtomSymmetryNumber(self):

        testSet = [
            ['C', 12],
            ['[CH3]', 6],
            ['CC', 9],
            ['CCC', 18],
            ['CC(C)C', 81],
        ]
        failMessage = ''

        for SMILES, symmetry in testSet:
            molecule = Molecule().fromSMILES(SMILES)
            molecule.makeHydrogensExplicit()
            symmetryNumber = 1
            for atom in molecule.atoms:
                if not molecule.isAtomInCycle(atom):
                    symmetryNumber *= molecule.calculateAtomSymmetryNumber(atom)
            if symmetryNumber != symmetry:
                failMessage += 'Expected symmetry number of %i for %s, got %i\n' % (symmetry, SMILES, symmetryNumber)
        self.assertEqual(failMessage, '', failMessage)