Пример #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
Пример #3
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_tensor = construct_discrete_edge_matrix(mol,
                                                 out_size=self.out_size)
     return relGCN_pre((atom_array, adj_tensor), out_size=self.out_size)
    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)
        return atom_array
Пример #5
0
    def get_input_features(self, mol):
        """get input features

        Args:
            mol (Mol): Molecule input

        Returns:

        """
        type_check_num_atoms(mol, self.max_atoms)
        atom_array = construct_atomic_number_array(mol, out_size=self.out_size)
        adj_array = construct_discrete_edge_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)
        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
Пример #7
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)
        print ("atom_array : ", atom_array)
        adj_array = construct_adj_matrix(mol, out_size=self.out_size)
        print ("adj_array : ", adj_array)
        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)
        dist_array = construct_distance_matrix(mol,
                                               out_size=self.out_size,
                                               contain_Hs=self.add_Hs)
        return atom_array, dist_array
Пример #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
Пример #11
0
    def get_input_features(self, mol):
        """get input features for WeaveNet

        WeaveNetPreprocessor automatically add `H` to `mol`

        Args:
            mol (Mol):

        """
        type_check_num_atoms(mol, self.max_atoms)
        if self.use_fixed_atom_feature:
            # original paper feature extraction
            atom_array = construct_atom_feature(mol, self.add_Hs,
                                                self.max_atoms, self.atom_list,
                                                self.include_unknown_atom)
        else:
            # embed id of atomic numbers
            atom_array = construct_atomic_number_array(mol, self.max_atoms)
        pair_feature = construct_pair_feature(mol,
                                              num_max_atoms=self.max_atoms)
        return atom_array, pair_feature
    def get_input_features(self, mol):
        """get input features for WeaveNet

        WeaveNetPreprocessor automatically add `H` to `mol`

        Args:
            mol (Mol):

        """
        type_check_num_atoms(mol, self.max_atoms)
        if self.use_fixed_atom_feature:
            # original paper feature extraction
            atom_array = construct_atom_feature(mol, self.add_Hs,
                                                self.max_atoms, self.atom_list,
                                                self.include_unknown_atom)
        else:
            # embed id of atomic numbers
            atom_array = construct_atomic_number_array(mol, self.max_atoms)
        pair_feature = construct_pair_feature(mol,
                                              num_max_atoms=self.max_atoms)
        return atom_array, pair_feature
Пример #13
0
def test_construct_super_node_feature_adj_ndim3(sample_molecule):
    adj = common.construct_discrete_edge_matrix(sample_molecule)
    atom_array = common.construct_atomic_number_array(sample_molecule)
    s = common.construct_supernode_feature(sample_molecule, atom_array, adj)
    assert s.shape == (MAX_ATOMIC_NUM * 2 + 10, )
    assert s[0] == len(atom_array)
    assert s[1] == adj.sum()
    assert s[2] == 1
    assert s[3] == 1
    assert s[4] == 0
    assert s[5] == 0
    assert pytest.approx(s[6], 1 * 2 / adj.sum())  # symmetric
    assert pytest.approx(s[7], 2 * 2 / adj.sum())  # symmetric
    assert s[8] == 0
    assert s[9] == 0
    assert s[9 + 6] == 1  # C
    assert s[9 + 6] == 1  # N
    assert s[9 + 7] == 1  # O
    assert s[9 + MAX_ATOMIC_NUM] == 0  # other
    assert s[9 + MAX_ATOMIC_NUM + 6] == 2 / len(atom_array)
    assert s[9 + MAX_ATOMIC_NUM + 7] == 1 / len(atom_array)
    assert s[9 + MAX_ATOMIC_NUM + 8] == 1 / len(atom_array)
    assert s[9 + MAX_ATOMIC_NUM * 2] == 0
Пример #14
0
    def test_padding(self, sample_molecule):
        actual = common.construct_atomic_number_array(sample_molecule, 5)

        assert actual.shape == (5,)
        expect = numpy.array([6, 7, 6, 8, 0], dtype=numpy.int32)
        numpy.testing.assert_equal(actual, expect)
 def get_input_features(self, mol):
     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 construct_atom_id_array(mol, out_size=-1):
     atomic_num_array = construct_atomic_number_array(mol, out_size)
     atom_id_array = np.zeros(atomic_num_array.shape, dtype=np.float32)
     for i in range(atomic_num_array.shape[0]):
         atom_id_array[i] = id_to_atomic_num.index(atomic_num_array[i])
     return atom_id_array
Пример #17
0
    def test_padding(self, sample_molecule):
        actual = common.construct_atomic_number_array(sample_molecule, 5)

        assert actual.shape == (5, )
        expect = numpy.array([6, 7, 6, 8, 0], dtype=numpy.int32)
        numpy.testing.assert_equal(actual, expect)
Пример #18
0
 def test_normal_truncated(self, sample_molecule):
     with pytest.raises(ValueError):
         adj = common.construct_atomic_number_array(sample_molecule,
                                                    3)  # NOQA
Пример #19
0
 def test_normal_truncated(self, sample_molecule):
     with pytest.raises(ValueError):
         adj = common.construct_atomic_number_array(sample_molecule, 3)  # NOQA