Exemple #1
0
class MoleculeTest(unittest.TestCase):
    def setUp(self):
        self.mol = molecule.Molecule()
        self.atomC = Atom("C")
        self.atomN = Atom("N")
        self.atomN.add_connected(self.atomC)

        self.atomO = Atom("O")

    def test_add(self):
        mol = self.mol

        mol.add_atom(self.atomC)
        mol.add_atom(self.atomN)

        self.assertTrue(mol.atoms == [self.atomC, self.atomN]
                        or mol.atoms == [self.atomN, self.atomC])

        mol.add_atom(
            self.atomC
        )  #nothing should happen, since this atom is already in the molecule)
        self.assertTrue(mol.atoms == [self.atomC, self.atomN]
                        or mol.atoms == [self.atomN, self.atomC])

    # Integrity test, actually testing molecule_splitter
    def test_get_groups(self):
        mol = self.mol
        mol.add_atom(self.atomC)
        mol.add_atom(self.atomN)

        result = mol.get_groups()
        expected = {"CH3NH2": 1}
        self.assertEqual(result, expected)
Exemple #2
0
    def setUp(self):
        self.mol = molecule.Molecule()
        self.atomC = Atom("C")
        self.atomN = Atom("N")
        self.atomN.add_connected(self.atomC)

        self.atomO = Atom("O")
 def setUp(self):
     # construct propenamine
     self.atomC1 = Atom("C")
     self.atomC2 = Atom("C")
     self.atomC3 = Atom("C")
     self.atomN = Atom("N")
     self.atomO = Atom("O")
class MoleculeTest(unittest.TestCase):
    
    def setUp(self):
        self.mol = molecule.Molecule()
        self.atomC = Atom("C")
        self.atomN = Atom("N")
        self.atomN.add_connected(self.atomC)
        
        self.atomO = Atom("O")

    def test_add(self):
        mol = self.mol
        
        mol.add_atom(self.atomC)
        mol.add_atom(self.atomN)
        
        self.assertTrue(mol.atoms == [self.atomC, self.atomN] or mol.atoms == [self.atomN, self.atomC])
        
        mol.add_atom(self.atomC) #nothing should happen, since this atom is already in the molecule)
        self.assertTrue(mol.atoms == [self.atomC, self.atomN] or mol.atoms == [self.atomN, self.atomC])
    
    # Integrity test, actually testing molecule_splitter
    def test_get_groups(self):
        mol = self.mol
        mol.add_atom(self.atomC)
        mol.add_atom(self.atomN)
        
        result = mol.get_groups()
        expected = {"CH3NH2" : 1}
        self.assertEqual(result, expected)
Exemple #5
0
 def setUp(self):
     # construct propenamine
     self.atomC1 = Atom("C")
     self.atomC2 = Atom("C")
     self.atomC3 = Atom("C")
     self.atomN = Atom("N")
     self.atomO = Atom("O")
Exemple #6
0
 def test_match_atom_to_node(self):
     result = (molecule_splitter._match_atom_to_node(
         self.atomC1, ("ext-atom", ("atom", "C"), [("hydrogen", 4)])))
     expected = (True, None)
     self.assertEqual(result, expected)
     self.atomC1.add_connected(Atom("Cl"))
     self.atomC1.add_connected(Atom("Cl"))
     result = (molecule_splitter._match_atom_to_node(
         self.atomC1, ("ext-atom", ("atom", "C"), [("hydrogen", 2),
                                                   ("halogen", "Cl", 2)])))
     expected = (True, None)
     self.assertEqual(result, expected)
Exemple #7
0
    def test_split2(self):
        # construct cyclobutane
        atomC = Atom("C")
        atomC.add_connected(self.atomC1)
        self.atomC1.add_connected(self.atomC2)
        self.atomC2.add_connected(self.atomC3)
        self.atomC3.add_connected(atomC)
        mol = stub_mol([self.atomC1, atomC, self.atomC2, self.atomC3])

        result = molecule_splitter.split(mol)
        expected = {"CH2": 4}
        self.assertEqual(result, expected)
    def test_split2(self):
        # construct cyclobutane
        atomC = Atom("C")
        atomC.add_connected(self.atomC1)
        self.atomC1.add_connected(self.atomC2)
        self.atomC2.add_connected(self.atomC3)
        self.atomC3.add_connected(atomC)
        mol = stub_mol([self.atomC1, atomC, self.atomC2, self.atomC3])

        result = molecule_splitter.split(mol)
        expected = {"CH2": 4}
        self.assertEqual(result, expected)
 def setUp(self):
     self.mol = molecule.Molecule()
     self.atomC = Atom("C")
     self.atomN = Atom("N")
     self.atomN.add_connected(self.atomC)
     
     self.atomO = Atom("O")
Exemple #10
0
 def setUp(self):
     self.atomC1 = Atom("C")
     self.atomC2 = Atom("C")
     self.atomC3 = Atom("C")
     self.atomO = Atom("O")
     self.atomN = Atom("N")
Exemple #11
0
class AuxiliaryFuncTest(unittest.TestCase):
    def setUp(self):
        self.atomC1 = Atom("C")
        self.atomC2 = Atom("C")
        self.atomC3 = Atom("C")
        self.atomO = Atom("O")
        self.atomN = Atom("N")

    def test_match_atom_to_node(self):
        result = (molecule_splitter._match_atom_to_node(
            self.atomC1, ("ext-atom", ("atom", "C"), [("hydrogen", 4)])))
        expected = (True, None)
        self.assertEqual(result, expected)
        self.atomC1.add_connected(Atom("Cl"))
        self.atomC1.add_connected(Atom("Cl"))
        result = (molecule_splitter._match_atom_to_node(
            self.atomC1, ("ext-atom", ("atom", "C"), [("hydrogen", 2),
                                                      ("halogen", "Cl", 2)])))
        expected = (True, None)
        self.assertEqual(result, expected)

    def test_crawl(self):
        self.atomC1.add_connected(self.atomC2, 2)
        result = molecule_splitter._crawl(
            self.atomC1,
            ("node", ("ext-atom", ("atom", "C"), [("hydrogen", 2)]),
             ("next", 2, ("node", ("ext-atom",
                                   ("atom", "C"), [("hydrogen", 2)]), None))),
            [])
        expected = [self.atomC1, self.atomC2]
        expected_alt = [self.atomC2, self.atomC1]
        self.assertTrue(result == expected or result == expected_alt)

    def test_crawl_2(self):
        self.atomC1.add_connected(self.atomO, 2)
        self.atomC1.add_connected(self.atomN)
        result = molecule_splitter._crawl(
            self.atomC1,
            ("node", ("ext-atom", ("atom", "C"), [("next", 2,
                                                   ("node",
                                                    ("atom", "O"), None))]),
             ("next", 1,
              ("node", ("ext-atom",
                        ("atom", "N"), [("hydrogen", 2)]), None)), None), [])
        expected = list(
            itertools.permutations([self.atomC1, self.atomN, self.atomO]))
        self.assertIn(tuple(result), expected)

    def test_look_for_group(self):
        self.atomN.add_connected(self.atomC3)
        self.atomC3.add_connected(self.atomC2)
        self.atomC2.add_connected(self.atomC1, 2)

        result = molecule_splitter._look_for_group(
            "CH2=CH", [self.atomC1, self.atomC2, self.atomC3, self.atomN], {
                "C": [0, 1, 2],
                "N": 3
            })
        expected = [[0, 1]]
        self.assertEqual(result, expected)

        result = molecule_splitter._look_for_group(
            "CH2NH2", [self.atomC1, self.atomC2, self.atomC3, self.atomN], {
                "C": [0, 1, 2],
                "N": 3
            })
        expected = [[2, 3]]
        self.assertEqual(result, expected)

    def test_look_for_group1(self):
        self.atomC1.add_connected(self.atomC2)
        self.atomC1.add_connected(self.atomC3)
        self.atomC1.add_connected(self.atomN)
        self.atomC1.add_connected(self.atomO)

        result = molecule_splitter._look_for_group(
            "CH0", [self.atomC1, self.atomC2, self.atomC3, self.atomN], {
                "C": [0, 1, 2],
                "N": 3
            })
        expected = [[0]]

        self.assertEqual(result, expected)
Exemple #12
0
class SplitterTest(unittest.TestCase):
    def setUp(self):
        # construct propenamine
        self.atomC1 = Atom("C")
        self.atomC2 = Atom("C")
        self.atomC3 = Atom("C")
        self.atomN = Atom("N")
        self.atomO = Atom("O")

    def test_split(self):
        self.atomN.add_connected(self.atomC3)
        self.atomC3.add_connected(self.atomC2)
        self.atomC2.add_connected(self.atomC1, 2)
        mol = stub_mol([self.atomC1, self.atomC2, self.atomC3, self.atomN])
        result = molecule_splitter.split(mol)
        expected = {"CH2=CH": 1, "CH2NH2": 1}
        self.assertEqual(result, expected)

    def test_split1(self):
        # construct propan-2-ole
        self.atomC1.add_connected(self.atomO)
        self.atomC1.add_connected(self.atomC2)
        self.atomC1.add_connected(self.atomC3)
        mol = stub_mol([self.atomC1, self.atomC2, self.atomC3, self.atomO])

        result = molecule_splitter.split(mol)
        expected = {"CH3": 2, "CH": 1, "OH": 1}
        self.assertEqual(result, expected)

    def test_split2(self):
        # construct cyclobutane
        atomC = Atom("C")
        atomC.add_connected(self.atomC1)
        self.atomC1.add_connected(self.atomC2)
        self.atomC2.add_connected(self.atomC3)
        self.atomC3.add_connected(atomC)
        mol = stub_mol([self.atomC1, atomC, self.atomC2, self.atomC3])

        result = molecule_splitter.split(mol)
        expected = {"CH2": 4}
        self.assertEqual(result, expected)
 def setUp(self):
     self.atomC1 = Atom("C")
     self.atomC2 = Atom("C")
     self.atomC3 = Atom("C")
     self.atomO = Atom("O")
     self.atomN = Atom("N")
class AuxiliaryFuncTest(unittest.TestCase):
    def setUp(self):
        self.atomC1 = Atom("C")
        self.atomC2 = Atom("C")
        self.atomC3 = Atom("C")
        self.atomO = Atom("O")
        self.atomN = Atom("N")

    def test_match_atom_to_node(self):
        result = molecule_splitter._match_atom_to_node(self.atomC1, ("ext-atom", ("atom", "C"), [("hydrogen", 4)]))
        expected = (True, None)
        self.assertEqual(result, expected)
        self.atomC1.add_connected(Atom("Cl"))
        self.atomC1.add_connected(Atom("Cl"))
        result = molecule_splitter._match_atom_to_node(
            self.atomC1, ("ext-atom", ("atom", "C"), [("hydrogen", 2), ("halogen", "Cl", 2)])
        )
        expected = (True, None)
        self.assertEqual(result, expected)

    def test_crawl(self):
        self.atomC1.add_connected(self.atomC2, 2)
        result = molecule_splitter._crawl(
            self.atomC1,
            (
                "node",
                ("ext-atom", ("atom", "C"), [("hydrogen", 2)]),
                ("next", 2, ("node", ("ext-atom", ("atom", "C"), [("hydrogen", 2)]), None)),
            ),
            [],
        )
        expected = [self.atomC1, self.atomC2]
        expected_alt = [self.atomC2, self.atomC1]
        self.assertTrue(result == expected or result == expected_alt)

    def test_crawl_2(self):
        self.atomC1.add_connected(self.atomO, 2)
        self.atomC1.add_connected(self.atomN)
        result = molecule_splitter._crawl(
            self.atomC1,
            (
                "node",
                ("ext-atom", ("atom", "C"), [("next", 2, ("node", ("atom", "O"), None))]),
                ("next", 1, ("node", ("ext-atom", ("atom", "N"), [("hydrogen", 2)]), None)),
                None,
            ),
            [],
        )
        expected = list(itertools.permutations([self.atomC1, self.atomN, self.atomO]))
        self.assertIn(tuple(result), expected)

    def test_look_for_group(self):
        self.atomN.add_connected(self.atomC3)
        self.atomC3.add_connected(self.atomC2)
        self.atomC2.add_connected(self.atomC1, 2)

        result = molecule_splitter._look_for_group(
            "CH2=CH", [self.atomC1, self.atomC2, self.atomC3, self.atomN], {"C": [0, 1, 2], "N": 3}
        )
        expected = [[0, 1]]
        self.assertEqual(result, expected)

        result = molecule_splitter._look_for_group(
            "CH2NH2", [self.atomC1, self.atomC2, self.atomC3, self.atomN], {"C": [0, 1, 2], "N": 3}
        )
        expected = [[2, 3]]
        self.assertEqual(result, expected)

    def test_look_for_group1(self):
        self.atomC1.add_connected(self.atomC2)
        self.atomC1.add_connected(self.atomC3)
        self.atomC1.add_connected(self.atomN)
        self.atomC1.add_connected(self.atomO)

        result = molecule_splitter._look_for_group(
            "CH0", [self.atomC1, self.atomC2, self.atomC3, self.atomN], {"C": [0, 1, 2], "N": 3}
        )
        expected = [[0]]

        self.assertEqual(result, expected)
class SplitterTest(unittest.TestCase):
    def setUp(self):
        # construct propenamine
        self.atomC1 = Atom("C")
        self.atomC2 = Atom("C")
        self.atomC3 = Atom("C")
        self.atomN = Atom("N")
        self.atomO = Atom("O")

    def test_split(self):
        self.atomN.add_connected(self.atomC3)
        self.atomC3.add_connected(self.atomC2)
        self.atomC2.add_connected(self.atomC1, 2)
        mol = stub_mol([self.atomC1, self.atomC2, self.atomC3, self.atomN])
        result = molecule_splitter.split(mol)
        expected = {"CH2=CH": 1, "CH2NH2": 1}
        self.assertEqual(result, expected)

    def test_split1(self):
        # construct propan-2-ole
        self.atomC1.add_connected(self.atomO)
        self.atomC1.add_connected(self.atomC2)
        self.atomC1.add_connected(self.atomC3)
        mol = stub_mol([self.atomC1, self.atomC2, self.atomC3, self.atomO])

        result = molecule_splitter.split(mol)
        expected = {"CH3": 2, "CH": 1, "OH": 1}
        self.assertEqual(result, expected)

    def test_split2(self):
        # construct cyclobutane
        atomC = Atom("C")
        atomC.add_connected(self.atomC1)
        self.atomC1.add_connected(self.atomC2)
        self.atomC2.add_connected(self.atomC3)
        self.atomC3.add_connected(atomC)
        mol = stub_mol([self.atomC1, atomC, self.atomC2, self.atomC3])

        result = molecule_splitter.split(mol)
        expected = {"CH2": 4}
        self.assertEqual(result, expected)