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")))
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")
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])
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" )
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")
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")
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" )
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))
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)
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)
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))
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"])
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']])
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)
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)