def get_input_features(self, mol): """get input features Args: mol (Mol): Returns: """ type_check_num_atoms(mol, self.max_atoms) num_atoms = mol.GetNumAtoms() # Construct the atom array and adjacency matrix. atom_array = construct_atomic_number_array(mol, out_size=self.out_size) adj_array = construct_adj_matrix(mol, out_size=self.out_size) # Adjust the adjacency matrix. degree_vec = numpy.sum(adj_array[:num_atoms], axis=1) degree_sqrt_inv = 1. / numpy.sqrt(degree_vec) adj_array[:num_atoms, :num_atoms] *= numpy.broadcast_to( degree_sqrt_inv[:, None], (num_atoms, num_atoms)) adj_array[:num_atoms, :num_atoms] *= numpy.broadcast_to( degree_sqrt_inv[None, :], (num_atoms, num_atoms)) return atom_array, adj_array
def get_input_features(self, mol): """get input features Args: mol (Mol): Returns: """ type_check_num_atoms(mol, self.max_atoms) num_atoms = mol.GetNumAtoms() # Construct the atom array and adjacency matrix. atom_array = construct_atomic_number_array(mol, out_size=self.out_size) adj_array = construct_adj_matrix(mol, out_size=self.out_size) # Adjust the adjacency matrix. degree_vec = numpy.sum(adj_array[:num_atoms], axis=1) degree_sqrt_inv = 1. / numpy.sqrt(degree_vec) adj_array[:num_atoms, :num_atoms] *= numpy.broadcast_to( degree_sqrt_inv[:, None], (num_atoms, num_atoms)) adj_array[:num_atoms, :num_atoms] *= numpy.broadcast_to( degree_sqrt_inv[None, :], (num_atoms, num_atoms)) super_node_x = construct_supernode_feature(mol, atom_array, adj_array, out_size=self.out_size_super) return atom_array, adj_array, super_node_x
def get_input_features(self, mol): """get input features Args: mol (Mol): Returns: atom_array = construct_atomic_number_array(mol, out_size=self.out_size) adj_array = construct_adj_matrix(mol, out_size=self.out_size) """ #mol_graph,featureでやってることを書く type_check_num_atoms(mol, self.max_atoms) smiles = Chem.MolToSmiles(mol) ecfp_array = array_rep_from_smiles(smiles, False) fcfp_array = array_rep_from_smiles(smiles, True) atom_array1 = ecfp_array['atom_features'].astype(np.float32) atom_array2 = fcfp_array['atom_features'].astype(np.float32) degree = construct_adj_matrix(mol, out_size=self.out_size) self.degree_num = [int(np.sum(x)) for x in degree] adj_array = ecfp_array['bond_features'] #import pdb;pdb.set_trace() return atom_array1, atom_array2, adj_array
def test_normal_padding(self, sample_molecule_2): adj = common.construct_adj_matrix(sample_molecule_2, 8) assert adj.shape == (8, 8) expect = numpy.array([ [1., 1., 0., 0., 0., 0., 0., 0.], [1., 1., 1., 0., 0., 0., 1., 0.], [0., 1., 1., 1., 0., 0., 0., 0.], [0., 0., 1., 1., 1., 0., 0., 0.], [0., 0., 0., 1., 1., 1., 0., 0.], [0., 0., 0., 0., 1., 1., 1., 0.], [0., 1., 0., 0., 0., 1., 1., 0.], [0., 0., 0., 0., 0., 0., 0., 0.] ], dtype=numpy.float32) numpy.testing.assert_equal(adj, expect)
def test_normal_no_self_connection(self, sample_molecule_2): adj = common.construct_adj_matrix(sample_molecule_2, self_connection=False) assert adj.shape == (7, 7) expect = numpy.array( [[0., 1., 0., 0., 0., 0., 0.], [1., 0., 1., 0., 0., 0., 1.], [0., 1., 0., 1., 0., 0., 0.], [0., 0., 1., 0., 1., 0., 0.], [0., 0., 0., 1., 0., 1., 0.], [0., 0., 0., 0., 1., 0., 1.], [0., 1., 0., 0., 0., 1., 0.]], dtype=numpy.float32) numpy.testing.assert_equal(adj, expect)
def get_input_features(self, mol): """get input features Args: mol (Mol): Returns: """ type_check_num_atoms(mol, self.max_atoms) atom_array = construct_atomic_number_array(mol, out_size=self.out_size) adj_array = construct_adj_matrix(mol, out_size=self.out_size) return atom_array, adj_array
def get_input_features(self, mol): """get input features Args: mol (Mol): Returns: """ type_check_num_atoms(mol, self.max_atoms) atom_array = construct_atomic_number_array(mol, out_size=self.out_size) adj_array = construct_adj_matrix(mol, out_size=self.out_size) return atom_array, adj_array
def test_normal(self, sample_molecule_2): adj = common.construct_adj_matrix(sample_molecule_2) assert adj.shape == (7, 7) expect = numpy.array( [[1., 1., 0., 0., 0., 0., 0., ], [1., 1., 1., 0., 0., 0., 1., ], [0., 1., 1., 1., 0., 0., 0., ], [0., 0., 1., 1., 1., 0., 0., ], [0., 0., 0., 1., 1., 1., 0., ], [0., 0., 0., 0., 1., 1., 1., ], [0., 1., 0., 0., 0., 1., 1., ]], dtype=numpy.float32) numpy.testing.assert_equal(adj, expect)
def test_construct_super_node_feature_adj_ndim2(sample_molecule): adj = common.construct_adj_matrix(sample_molecule) atom_array = common.construct_atomic_number_array(sample_molecule) s = common.construct_supernode_feature(sample_molecule, atom_array, adj) # print(s) assert s.shape == (MAX_ATOMIC_NUM * 2 + 4, ) assert s[0] == len(atom_array) assert s[1] == adj.sum() assert s[2] == 1 assert s[3] == 1 assert s[3 + 6] == 1 # C assert s[3 + 7] == 1 # N assert s[3 + 8] == 1 # O assert s[3 + MAX_ATOMIC_NUM] == 0 # other assert s[3 + MAX_ATOMIC_NUM + 6] == 2 / len(atom_array) assert s[3 + MAX_ATOMIC_NUM + 7] == 1 / len(atom_array) assert s[3 + MAX_ATOMIC_NUM + 8] == 1 / len(atom_array) assert s[3 + MAX_ATOMIC_NUM * 2] == 0
def get_input_features(self, mol): """get input features Args: mol (Mol): Returns: """ type_check_num_atoms(mol, self.max_atoms) atom_array = construct_atomic_number_array(mol, out_size=self.out_size) adj_array = construct_adj_matrix(mol, out_size=self.out_size) # adjust adjacent matrix degree_vec = numpy.sum(adj_array, axis=1) degree_vec = numpy.sqrt(degree_vec) adj_array *= numpy.broadcast_to(degree_vec[:, None], adj_array.shape) adj_array *= numpy.broadcast_to(degree_vec[None, :], adj_array.shape) return atom_array, adj_array
def test_normal_truncated(self, sample_molecule_2): with pytest.raises(ValueError): adj = common.construct_adj_matrix(sample_molecule_2, 6)
def test_normal_truncated(self, sample_molecule_2): with pytest.raises(ValueError): adj = common.construct_adj_matrix(sample_molecule_2, 6)