Esempio n. 1
0
  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))
Esempio n. 2
0
  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)
Esempio n. 3
0
    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
Esempio n. 4
0
  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
Esempio n. 5
0
  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))