def test_connected_match_atoms_rad0_correct(self): from e3fp.fingerprint.fprinter import ShellsGenerator from e3fp.conformer.util import mol_from_sdf mol = mol_from_sdf(PLANAR_SDF_FILE) conf = mol.GetConformers()[0] atoms = list(range(3)) shells_gen = ShellsGenerator(conf, atoms, radius_multiplier=0.5, include_disconnected=True) match_atoms = shells_gen.get_match_atoms(0.) expect_match_atoms = {k: set() for k in atoms} self.assertDictEqual(match_atoms, expect_match_atoms)
def test_shells_generator_next_works_correctly(self): from e3fp.fingerprint.fprinter import ShellsGenerator from e3fp.conformer.util import mol_from_sdf mol = mol_from_sdf(PLANAR_SDF_FILE) conf = mol.GetConformers()[0] atoms = [x.GetIdx() for x in mol.GetAtoms()] shells_gen1 = ShellsGenerator(conf, atoms, radius_multiplier=0.5, include_disconnected=True) shells_gen2 = ShellsGenerator(conf, atoms, radius_multiplier=0.5, include_disconnected=True) self.assertDictEqual(next(shells_gen1), next(shells_gen2))
def test_connected_match_atoms_rad1_correct2(self): from e3fp.fingerprint.fprinter import ShellsGenerator from e3fp.conformer.util import mol_from_sdf mol = mol_from_sdf(PLANAR_SDF_FILE) conf = mol.GetConformers()[0] atoms = list(range(3)) for atom in atoms: conf.SetAtomPosition(atom, [0, 0, atom*.75]) shells_gen = ShellsGenerator(conf, atoms, radius_multiplier=0.5, include_disconnected=True) match_atoms = shells_gen.get_match_atoms(1.) expect_match_atoms = {0: {1}, 1: {0, 2}, 2: {1}} self.assertDictEqual(match_atoms, expect_match_atoms)
def test_generates_correct_disconnected_shells_level2(self): from e3fp.fingerprint.fprinter import ShellsGenerator from e3fp.fingerprint.structs import Shell from e3fp.conformer.util import mol_from_sdf mol = mol_from_sdf(PLANAR_SDF_FILE) conf = mol.GetConformers()[0] atoms = list(range(3)) for atom in atoms: conf.SetAtomPosition(atom, [0, 0, .45 * atom]) expected_shells_dict1 = { 0: Shell(0, {1}), 1: Shell(1, {0, 2}), 2: Shell(2, {1}) } expected_shells_dict2 = { 0: Shell(0, {expected_shells_dict1[1], expected_shells_dict1[2]}), 1: Shell(1, {expected_shells_dict1[0], expected_shells_dict1[2]}), 2: Shell(2, {expected_shells_dict1[0], expected_shells_dict1[1]}) } shells_gen = ShellsGenerator(conf, atoms, radius_multiplier=0.5, include_disconnected=True) for i in range(3): shells_dict = next(shells_gen) self.assertDictEqual(shells_dict, expected_shells_dict2)
def test_shells_generator_creation_success(self): from e3fp.fingerprint.fprinter import ShellsGenerator from e3fp.conformer.util import mol_from_sdf mol = mol_from_sdf(PLANAR_SDF_FILE) conf = mol.GetConformers()[0] atoms = [x.GetIdx() for x in mol.GetAtoms()] ShellsGenerator(conf, atoms, radius_multiplier=0.5, include_disconnected=True)
def test_generates_correct_disconnected_shells_level0(self): from e3fp.fingerprint.fprinter import ShellsGenerator from e3fp.fingerprint.structs import Shell from e3fp.conformer.util import mol_from_sdf mol = mol_from_sdf(PLANAR_SDF_FILE) conf = mol.GetConformers()[0] atoms = list(range(3)) expected_shells_dict = {0: Shell(0), 1: Shell(1), 2: Shell(2)} shells_gen = ShellsGenerator(conf, atoms) shells_dict = next(shells_gen) self.assertDictEqual(shells_dict, expected_shells_dict)
def test_disconnected_substructs_converge(self): from e3fp.fingerprint.fprinter import ShellsGenerator from e3fp.conformer.util import mol_from_sdf mol = mol_from_sdf(PLANAR_SDF_FILE) conf = mol.GetConformers()[0] atoms = list(range(3)) for atom in atoms: conf.SetAtomPosition(atom, [0, 0, .45*atom]) shells_gen = ShellsGenerator(conf, atoms, radius_multiplier=0.5, include_disconnected=True) for i in range(4): shells_dict = next(shells_gen) substructs_dict = {k: v.substruct for k, v in shells_dict.items()} next_shells_dict = next(shells_gen) next_substructs_dict = {k: v.substruct for k, v in next_shells_dict.items()} self.assertDictEqual(substructs_dict, next_substructs_dict)