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))
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)