def test_forward_cpu_graph_invariant(gwm, data): permutation_index = numpy.random.permutation(atom_size) gwm.reset_state() embed_atom_data, new_embed_atom_data, supernode = data[:3] h_actual, g_actual = gwm(embed_atom_data, new_embed_atom_data, supernode) permute_embed_atom_data = permute_node(embed_atom_data, permutation_index, axis=1) permute_new_embed_atom_data = permute_node(new_embed_atom_data, permutation_index, axis=1) gwm.reset_state() permute_h_actual, permute_g_actual = gwm(permute_embed_atom_data, permute_new_embed_atom_data, supernode) numpy.testing.assert_allclose(permute_node(h_actual.data, permutation_index, axis=1), permute_h_actual.data, rtol=1e-5, atol=1e-5) numpy.testing.assert_allclose(g_actual.data, permute_g_actual.data, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(readout, data): atom_data, atom_data0 = data[:2] y_actual = cuda.to_cpu(readout(atom_data, atom_data0).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_atom_data0 = permute_node(atom_data0, permutation_index, axis=1) permute_y_actual = cuda.to_cpu(readout( permute_atom_data, permute_atom_data0).data) numpy.testing.assert_allclose( y_actual, permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(update, data): atom_data, dist_data = data[:2] y_actual = cuda.to_cpu(update(atom_data, dist_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_dist_data = permute_adj(dist_data, permutation_index) permute_y_actual = cuda.to_cpu(update( permute_atom_data, permute_dist_data).data) numpy.testing.assert_allclose( permute_node(y_actual, permutation_index, axis=1), permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(update, data): atom_data, adj_data = data[:2] y_actual = cuda.to_cpu(update(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( update(permute_atom_data, permute_adj_data).data) numpy.testing.assert_allclose( permute_node(y_actual, permutation_index, axis=1), permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(update, data): # type: (GINUpdate, Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]) -> None # NOQA atom_data, adj_data = data[:2] y_actual = cuda.to_cpu(update(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( update(permute_atom_data, permute_adj_data).data) numpy.testing.assert_allclose(permute_node(y_actual, permutation_index, axis=1), permute_y_actual, rtol=1e-3, atol=1e-3)
def test_forward_cpu_graph_invariant(readouts, data): atom_data = data[0] permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) for readout in readouts: y_actual = cuda.to_cpu(readout(atom_data).data) permute_y_actual = cuda.to_cpu(readout(permute_atom_data).data) numpy.testing.assert_allclose( y_actual, permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(update, data): atom_data, adj_data, deg_conds = data[:3] y_actual = cuda.to_cpu(update(atom_data, adj_data, deg_conds).data) permutation_index = numpy.random.permutation(atom_size) # atom_data: (batch_size, atom_size, hidden_channels) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_adj_data = permute_adj(adj_data, permutation_index) # deg_conds: (num_degree_type, batch_size, atom_size, hidden_channels) permute_deg_conds = permute_node(deg_conds, permutation_index, axis=2) permute_y_actual = cuda.to_cpu( update(permute_atom_data, permute_adj_data, permute_deg_conds).data) numpy.testing.assert_allclose(permute_node(y_actual, permutation_index, axis=1), permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(model, data): atom_data, adj_data = data[0], data[1] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu(model( permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-5, atol=1e-6)
def test_foward_cpu_graph_invariant(readout, data): # type: (MPNNReadout, Tuple[numpy.ndarray, numpy.ndarray]) -> None atom_data = data[0] y_actual = cuda.to_cpu(readout(atom_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_y_actual = cuda.to_cpu(readout(permute_atom_data).data) numpy.testing.assert_allclose( y_actual, permute_y_actual, rtol=1e-5, atol=1e-5)
def test_foward_cpu_graph_invariant(readout, data): # type: (MPNNReadout, Tuple[numpy.ndarray, numpy.ndarray]) -> None atom_data = data[0] y_actual = cuda.to_cpu(readout(atom_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_y_actual = cuda.to_cpu(readout(permute_atom_data).data) numpy.testing.assert_allclose( y_actual, permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(model, data): atom_data, adj_data = data[0], data[1] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-5, atol=1e-6)
def test_forward_cpu_graph_invariant(model, data): # type: (GraphConvPredictor, Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]) -> None # NOQA atom_data, adj_data = data[:2] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(model, data): # type: (GraphConvPredictor, Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]) -> None # NOQA atom_data, adj_data = data[:2] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(model, data): # This RSGCN uses dropout, so we need to forward with test mode # to remove stochastic calculation. atom_data, adj_data = data[0], data[1] with chainer.using_config('train', False): y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) with chainer.using_config('train', False): permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1.e-4, atol=1.e-5)
def test_forward_cpu_graph_invariant(model, data): # This RSGCN uses dropout, so we need to forward with test mode # to remove stochastic calculation. atom_data, adj_data = data[0], data[1] with chainer.using_config('train', False): y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) with chainer.using_config('train', False): permute_y_actual = cuda.to_cpu(model( permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1.e-4, atol=1.e-5)
def test_forward_cpu_graph_invariant(model, data): # type: (MPNN, Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]) -> None if model.message_func == 'edgenet': return # Because EdgeNet uses NN for expanding edge vector dimension, # graph invariant is not ensured. atom_data, adj_data = data[0], data[1] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-3, atol=1e-3)
def test_forward_cpu_graph_invariant(model, data): # type: (MPNN, Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]) -> None if model.message_func == 'edgenet': return # Because EdgeNet uses NN for expanding edge vector dimension, # graph invariant is not ensured. atom_data, adj_data = data[0], data[1] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-3, atol=1e-3)
def _test_forward_cpu_graph_invariant( model, atom_data, adj_data, node_permute_axis=-1): y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=node_permute_axis) permute_adj_data = adj_data.reshape( batch_size, atom_size, atom_size, pair_feature_dim ).astype(numpy.float32) permute_adj_data = permute_adj( permute_adj_data, permutation_index, axis=[1, 2]) permute_adj_data = permute_adj_data.reshape( batch_size, atom_size * atom_size, pair_feature_dim ).astype(numpy.float32) permute_y_actual = cuda.to_cpu(model( permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1.e-4, atol=1.e-6)
def _test_forward_cpu_graph_invariant(model, atom_data, adj_data, node_permute_axis=-1): y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=node_permute_axis) permute_adj_data = adj_data.reshape(batch_size, atom_size, atom_size, pair_feature_dim).astype(numpy.float32) permute_adj_data = permute_adj(permute_adj_data, permutation_index, axis=[1, 2]) permute_adj_data = permute_adj_data.reshape( batch_size, atom_size * atom_size, pair_feature_dim).astype(numpy.float32) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1.e-4, atol=1.e-6)