def update_molecule(mol, to_single_bonds=False): """ Returns a copy of the current molecule with updated atomTypes if to_single_bonds is True, the returned mol contains only single bonds. This is useful for isomorphism comparison """ new_mol = Molecule() try: atoms = mol.atoms except AttributeError: return None atom_mapping = dict() for atom1 in atoms: new_atom = new_mol.addAtom(Atom(atom1.element)) atom_mapping[atom1] = new_atom for atom1 in atoms: for atom2 in atom1.bonds.keys(): bond_order = 1.0 if to_single_bonds else atom1.bonds[ atom2].getOrderNum() bond = Bond(atom_mapping[atom1], atom_mapping[atom2], bond_order) new_mol.addBond(bond) try: new_mol.updateAtomTypes() except AtomTypeError: pass new_mol.multiplicity = mol.multiplicity return new_mol