Beispiel #1
0
    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
Beispiel #3
0
    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
Beispiel #4
0
    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)
Beispiel #5
0
    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
Beispiel #8
0
    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)
Beispiel #9
0
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
Beispiel #11
0
 def test_normal_truncated(self, sample_molecule_2):
     with pytest.raises(ValueError):
         adj = common.construct_adj_matrix(sample_molecule_2, 6)
Beispiel #12
0
 def test_normal_truncated(self, sample_molecule_2):
     with pytest.raises(ValueError):
         adj = common.construct_adj_matrix(sample_molecule_2, 6)