def test_matched_and_h_stripping(self): bond_topology = str_to_bond_topology(''' atoms: ATOM_O atoms: ATOM_H atoms: ATOM_H bonds { atom_b: 1 bond_type: BOND_SINGLE } bonds { atom_b: 2 bond_type: BOND_SINGLE } smiles: "O" ''') result, with_h, without_h = smu_utils_lib.bond_topology_smiles_comparison( bond_topology) self.assertEqual(smu_utils_lib.SmilesCompareResult.MATCH, result) self.assertEqual('[H]O[H]', with_h) self.assertEqual('O', without_h) # Also directly test compute_smiles_for_bond_topology self.assertEqual( '[H]O[H]', smu_utils_lib.compute_smiles_for_bond_topology( bond_topology, include_hs=True)) self.assertEqual( 'O', smu_utils_lib.compute_smiles_for_bond_topology( bond_topology, include_hs=False))
def test_mismatch(self): bond_topology = str_to_bond_topology(''' atoms: ATOM_O atoms: ATOM_O bonds { atom_b: 1 bond_type: BOND_DOUBLE } smiles: "BlahBlahBlah" ''') result, with_h, without_h = smu_utils_lib.bond_topology_smiles_comparison( bond_topology) self.assertEqual(smu_utils_lib.SmilesCompareResult.MISMATCH, result) self.assertEqual('O=O', with_h) self.assertEqual('O=O', without_h)
def _compare_smiles(self, conformer): if len(conformer.bond_topologies) != 1: raise ValueError( 'compare_smiles expects 1 bond topology; for CID {} got {}'. format(conformer.conformer_id, len(conformer.bond_topologies))) result, smiles_with_h, smiles_without_h = ( smu_utils_lib.bond_topology_smiles_comparison( conformer.bond_topologies[0])) if result != smu_utils_lib.SmilesCompareResult.MATCH: yield beam.pvalue.TaggedOutput( UpdateConformerFn.OUTPUT_TAG_SMILES_MISMATCH, (conformer.conformer_id, result, conformer.bond_topologies[0].smiles, smiles_with_h, smiles_without_h)) conformer.bond_topologies[0].smiles = smiles_without_h
def _compare_smiles(self, molecule): if len(molecule.bond_topologies) != 1: raise ValueError( 'compare_smiles expects 1 bond topology; for CID {} got {}'.format( molecule.molecule_id, len(molecule.bond_topologies))) result, smiles_with_h, smiles_without_h = ( smu_utils_lib.bond_topology_smiles_comparison( molecule.bond_topologies[0])) if result != smu_utils_lib.SmilesCompareResult.MATCH: yield beam.pvalue.TaggedOutput( UpdateMoleculeFn.OUTPUT_TAG_SMILES_MISMATCH, (molecule.molecule_id, result, molecule.bond_topologies[0].smiles, smiles_with_h, smiles_without_h)) molecule.properties.smiles_openbabel = ( molecule.bond_topologies[0].smiles) molecule.bond_topologies[0].smiles = smiles_without_h
def test_missing(self): bond_topology = str_to_bond_topology(''' atoms: ATOM_O atoms: ATOM_O bonds { atom_b: 1 bond_type: BOND_DOUBLE } ''') result, with_h, without_h = smu_utils_lib.bond_topology_smiles_comparison( bond_topology) self.assertEqual(smu_utils_lib.SmilesCompareResult.MISSING, result) self.assertEqual('O=O', with_h) self.assertEqual('O=O', without_h) # Also directly test compute_smiles_for_bond_topology self.assertEqual( 'O=O', smu_utils_lib.compute_smiles_for_bond_topology( bond_topology, include_hs=True))