예제 #1
0
    def test_cut_rgroup_filename(self):
        filename = create_test_filename(self, "rgroups.txt")
        with open(filename, "w") as f:
            f.write("*O\n" "*N\n")

        reader, records = fragment(SPACE_SMI, "--cut-rgroup-file", filename)

        record = records[0]
        self.assertEqual(record.normalized_smiles, "Oc1ccccc1O")
        self.assertEqual(len(record.fragments), 3)
        variable_smiles_set = set(frag.variable_smiles
                                  for frag in record.fragments)
        self.assertEqual(variable_smiles_set,
                         set(("*O", "*c1ccccc1O", "*c1ccccc1*")))

        record = records[1]
        self.assertEqual(record.normalized_smiles, "Cc1ccccc1N")
        self.assertEqual(len(record.fragments), 2)
        variable_smiles_set = set(frag.variable_smiles
                                  for frag in record.fragments)
        self.assertEqual(variable_smiles_set, set(("*N", "*c1ccccc1C")))

        record = records[2]
        self.assertEqual(record.normalized_smiles, "Cc1ccc(S)cc1N")
        self.assertEqual(len(record.fragments), 2)
        variable_smiles_set = set(frag.variable_smiles
                                  for frag in record.fragments)
        self.assertEqual(variable_smiles_set, set(("*N", "*c1cc(S)ccc1C")))
예제 #2
0
 def test_different_whitespace(self):
     filename = support.create_test_filename(self, "rgroups.txt")
     with open(filename, "w") as outfile:
         outfile.write("*Cl\tchlorine\n" "*Br bromine\n" "*F  and more\n")
     stdout, stderr = run(["rgroup2smarts", filename])
     self.assertEqual(stderr, "")
     self.assertEqual(stdout, "*-!@[$([ClH0v1]),$([BrH0v1]),$([FH0v1])]\n")
예제 #3
0
 def test_output_gz(self):
     filename = create_test_filename(self, "transform.out.gz")
     transform("--smiles", "c1cccnc1O", "--output", filename)
     with gzip.open(filename) as infile:
         table = parse_table(infile.read().decode("ascii"))
     self.assertEqual(len(table), 4)
     self.assertIn("MP_count", table[0])
     self.assertIn("MW_count", table[0])
예제 #4
0
 def test_file_does_not_exist(self):
     filename = support.create_test_filename(self, "rgroups.dat")
     stdout, stderr = run_failure(["rgroup2smarts", filename])
     stderr = fix_stderr(self, stderr, filename)
     self.assertEqual(
         stderr,
         "Cannot open input file: [Errno 2] No such file or directory: frags.smi\n"
     )
예제 #5
0
    def test_empty_file_not_allowed(self):
        filename = support.create_test_filename(self, "rgroups.dat")
        with open(filename, "w") as f:
            f.close()

        stdout, stderr = run_failure(["rgroup2smarts", filename])
        stderr = fix_stderr(self, stderr, filename)
        self.assertEqual(
            stderr,
            "Cannot make a SMARTS: no SMILES strings found in frags.smi\n")
예제 #6
0
    def test_blank_line_not_allowed(self):
        filename = support.create_test_filename(self, "rgroups.dat")
        with open(filename, "w") as f:
            f.write("*C\n\n*N\n")

        stdout, stderr = run_failure(["rgroup2smarts", filename])
        stderr = fix_stderr(self, stderr, filename)
        self.assertEqual(
            stderr,
            "Cannot parse input file: no SMILES found at frags.smi, line 2\n")
예제 #7
0
    def test_initial_whitespace_not_allowed(self):
        filename = support.create_test_filename(self, "rgroups.dat")
        with open(filename, "w") as f:
            f.write("*C\n *N\n")

        stdout, stderr = run_failure(["rgroup2smarts", filename])
        stderr = fix_stderr(self, stderr, filename)
        self.assertEqual(
            stderr,
            "Cannot parse input file: expected SMILES at start of line at frags.smi, line 2\n"
        )
예제 #8
0
    def _test_merged(self, check):
        filename = support.create_test_filename(self, "groups.txt")

        for inputs, output in merged_test_cases:
            with open(filename, "w") as f:
                for smiles in inputs:
                    f.write(smiles + "\n")

            args = ["rgroup2smarts", filename]
            if check:
                args.append("--check")
            stdout, stderr = run(args)
            self.assertEqual(stdout, output + "\n", repr(inputs))
예제 #9
0
    def test_bad_smiles(self):
        filename = support.create_test_filename(self, "rgroups.dat")
        args = ["rgroup2smarts", filename]

        for smiles_list, errmsg in _bad_smiles_inputs:
            with open(filename, "w") as outfile:
                for smiles in smiles_list.split():
                    outfile.write(smiles + "\n")

            stdout, stderr = run_failure(args)
            stderr = fix_stderr(self, stderr, filename)
            errmsg = errmsg.replace("--cut-rgroup SMILES #",
                                    "frags.smi, line ")
            self.assertEqual(stderr, errmsg)
예제 #10
0
    def _test_explain(self, check):
        filename = support.create_test_filename(self, "fra\tgs.smi")
        with open(filename, "w") as f:
            f.write("c1ccccc1*\nO*\n")
        args = ["rgroup2smarts", "--explain", filename]
        if check:
            args.append("--check")
        stdout, stderr = run(args, True)
        self.assertEqual(
            stdout,
            "*-!@[$([cH0v4]1:[cHv4]:[cHv4]:[cHv4]:[cHv4]:[cHv4]:1),$([OHv2])]\n"
        )

        return fix_stderr(self, stderr, filename)
예제 #11
0
    def _test_single(self, check):
        filename = support.create_test_filename(self, "rgroups.txt")

        for inputs, _ in merged_test_cases:
            expected_output_lines = []
            with open(filename, "w") as f:
                for smiles in inputs:
                    f.write(smiles + "\n")
                    output = simple_test_cases[smiles]
                    expected_output_lines.append(output + "\n")
            expected_output = "".join(expected_output_lines)

            args = ["rgroup2smarts", "--single", filename]
            if check:
                args.append("--check")
            stdout, stderr = run(args)
            self.assertEqual(stdout, expected_output, repr(inputs))
예제 #12
0
    def test_save_details(self):
        prefix = create_test_filename(self, "predict_details")
        result = predict("--smiles", "c1cccnc1O", "--reference", "Clc1ccccn1",
                         "--property", "MW", "--save-details", "--prefix",
                         prefix)
        self.assertEqual(result, ("-18.5", None))

        rules_table, pairs_table = read_details(prefix)
        self.assertEqual(rules_table.get_column("from_smiles"),
                         ["[*:1]Cl", "[*:1]Cl"])
        self.assertEqual(rules_table.get_column("to_smiles"),
                         ["[*:1]O", "[*:1]O"])

        self.assertEqual(pairs_table.get_column("radius"), ["0", "1"])
        self.assertEqual(pairs_table.get_column("lhs_public_id"),
                         ["2-chlorophenol", "2-chlorophenol"])
        self.assertEqual(pairs_table.get_column("rhs_public_id"),
                         ["catechol", "catechol"])
예제 #13
0
    def test_cut_rgroup_filename(self):
        filename = create_test_filename(self, "rgroups.txt")
        with open(filename, "w") as f:
            f.write("*O\n" "*N\n")

        result = smifrag("Cc1cc(O)ccc1N", "--cut-rgroup-file", filename)
        self.assertEqual(
            result,
            [[
                '1', 'N', '1', '1', '*O', '0', '8', '1', '*c1ccc(N)c(C)c1',
                'Cc1ccccc1N'
            ],
             ['1', 'N', '8', '1', '*c1ccc(N)c(C)c1', '0', '1', '1', '*O', 'O'],
             [
                 '2', 'N', '7', '12', '*c1ccc(*)c(C)c1', '10', '2', '12',
                 '*N.*O', '-'
             ],
             [
                 '1', 'N', '1', '1', '*N', '0', '8', '1', '*c1ccc(O)cc1C',
                 'Cc1cccc(O)c1'
             ],
             ['1', 'N', '8', '1', '*c1ccc(O)cc1C', '0', '1', '1', '*N', 'N']])
예제 #14
0
 def _get_options(self, *args):
     mmpdb_filename = create_test_filename(self, "default.mmpdb")
     index(mmpdb_filename, *args)
     db = dbutils.open_database(mmpdb_filename)
     dataset = db.get_dataset()
     return dataset, json.loads(dataset.index_options_str)
예제 #15
0
 def test_missing_rgroup_filename(self):
     filename = create_test_filename(self, "rgroups.txt")
     stderr = smifrag_fail("Nc1ccccc1O", "--cut-rgroup-file", filename)
     self.assertIn("Cannot use --cut-rgroup-file", stderr)
     self.assertIn(repr(filename), stderr)
     self.assertIn("No such file or directory", stderr)