dmlc--dgl
6a91d18151
* Update * Update * Update * Fix * Update * Update * Update * Update * Update * Fix * Update * Update * Update * Fix * Update * Update * update * Update * Update * Update * Fix * Fix * Update * Update * Update * Update * lr_scheduler * Update * Update * Update * Update * Update * Update * Fix * Fix * Fix * Fix * Update * Update * Update * Update * Update * Fix * Update * Update * Update * Update * Fix * Update * Update * Update * Fix * Fix * Fix * Update * Update * Fix * Fix * Update * Update * Update * Update * Update * Update * update * CI * Update * Update * Update * Update * Update Co-authored-by: Minjie Wang <wmjlyjemaine@gmail.com>
241 行
6.4 KiB
Python
241 行
6.4 KiB
Python
import dgl
|
|
import pytest
|
|
import torch
|
|
from dglgo.model import *
|
|
from test_utils.graph_cases import get_cases
|
|
|
|
@pytest.mark.parametrize('g', get_cases(['has_scalar_e_feature']))
|
|
def test_gcn(g):
|
|
data_info = {
|
|
'num_nodes': g.num_nodes(),
|
|
'out_size': 7
|
|
}
|
|
node_feat = None
|
|
edge_feat = g.edata['scalar_w']
|
|
|
|
# node embedding + not use_edge_weight
|
|
model = GCN(data_info, embed_size=10, use_edge_weight=False)
|
|
model(g, node_feat)
|
|
|
|
# node embedding + use_edge_weight
|
|
model = GCN(data_info, embed_size=10, use_edge_weight=True)
|
|
model(g, node_feat, edge_feat)
|
|
|
|
data_info['in_size'] = g.ndata['h'].shape[-1]
|
|
node_feat = g.ndata['h']
|
|
|
|
# node feat + not use_edge_weight
|
|
model = GCN(data_info, embed_size=-1, use_edge_weight=False)
|
|
model(g, node_feat)
|
|
|
|
# node feat + use_edge_weight
|
|
model = GCN(data_info, embed_size=-1, use_edge_weight=True)
|
|
model(g, node_feat, edge_feat)
|
|
|
|
@pytest.mark.parametrize('g', get_cases(['block-bipartite']))
|
|
def test_gcn_block(g):
|
|
data_info = {
|
|
'in_size': 10,
|
|
'out_size': 7
|
|
}
|
|
|
|
blocks = [g]
|
|
node_feat = torch.randn(g.num_src_nodes(), data_info['in_size'])
|
|
edge_feat = torch.abs(torch.randn(g.num_edges()))
|
|
# not use_edge_weight
|
|
model = GCN(data_info, use_edge_weight=False)
|
|
model.forward_block(blocks, node_feat)
|
|
|
|
# use_edge_weight
|
|
model = GCN(data_info, use_edge_weight=True)
|
|
model.forward_block(blocks, node_feat, edge_feat)
|
|
|
|
@pytest.mark.parametrize('g', get_cases(['has_scalar_e_feature']))
|
|
def test_gat(g):
|
|
data_info = {
|
|
'num_nodes': g.num_nodes(),
|
|
'out_size': 7
|
|
}
|
|
node_feat = None
|
|
|
|
# node embedding
|
|
model = GAT(data_info, embed_size=10)
|
|
model(g, node_feat)
|
|
|
|
# node feat
|
|
data_info['in_size'] = g.ndata['h'].shape[-1]
|
|
node_feat = g.ndata['h']
|
|
model = GAT(data_info, embed_size=-1)
|
|
model(g, node_feat)
|
|
|
|
@pytest.mark.parametrize('g', get_cases(['block-bipartite']))
|
|
def test_gat_block(g):
|
|
data_info = {
|
|
'in_size': 10,
|
|
'out_size': 7
|
|
}
|
|
|
|
blocks = [g]
|
|
node_feat = torch.randn(g.num_src_nodes(), data_info['in_size'])
|
|
model = GAT(data_info, num_layers=1, heads=[8])
|
|
model.forward_block(blocks, node_feat)
|
|
|
|
@pytest.mark.parametrize('g', get_cases(['has_scalar_e_feature']))
|
|
def test_gin(g):
|
|
data_info = {
|
|
'num_nodes': g.num_nodes(),
|
|
'out_size': 7
|
|
}
|
|
node_feat = None
|
|
|
|
# node embedding
|
|
model = GIN(data_info, embed_size=10)
|
|
model(g, node_feat)
|
|
|
|
# node feat
|
|
data_info['in_size'] = g.ndata['h'].shape[-1]
|
|
node_feat = g.ndata['h']
|
|
model = GIN(data_info, embed_size=-1)
|
|
model(g, node_feat)
|
|
|
|
@pytest.mark.parametrize('g', get_cases(['has_scalar_e_feature']))
|
|
def test_sage(g):
|
|
data_info = {
|
|
'num_nodes': g.num_nodes(),
|
|
'out_size': 7
|
|
}
|
|
node_feat = None
|
|
edge_feat = g.edata['scalar_w']
|
|
|
|
# node embedding
|
|
model = GraphSAGE(data_info, embed_size=10)
|
|
model(g, node_feat)
|
|
model(g, node_feat, edge_feat)
|
|
|
|
# node feat
|
|
data_info['in_size'] = g.ndata['h'].shape[-1]
|
|
node_feat = g.ndata['h']
|
|
model = GraphSAGE(data_info, embed_size=-1)
|
|
model(g, node_feat)
|
|
model(g, node_feat, edge_feat)
|
|
|
|
@pytest.mark.parametrize('g', get_cases(['block-bipartite']))
|
|
def test_sage_block(g):
|
|
data_info = {
|
|
'in_size': 10,
|
|
'out_size': 7
|
|
}
|
|
|
|
blocks = [g]
|
|
node_feat = torch.randn(g.num_src_nodes(), data_info['in_size'])
|
|
edge_feat = torch.abs(torch.randn(g.num_edges()))
|
|
model = GraphSAGE(data_info, embed_size=-1)
|
|
model.forward_block(blocks, node_feat)
|
|
model.forward_block(blocks, node_feat, edge_feat)
|
|
|
|
@pytest.mark.parametrize('g', get_cases(['has_scalar_e_feature']))
|
|
def test_sgc(g):
|
|
data_info = {
|
|
'num_nodes': g.num_nodes(),
|
|
'out_size': 7
|
|
}
|
|
node_feat = None
|
|
|
|
# node embedding
|
|
model = SGC(data_info, embed_size=10)
|
|
model(g, node_feat)
|
|
|
|
# node feat
|
|
data_info['in_size'] = g.ndata['h'].shape[-1]
|
|
node_feat = g.ndata['h']
|
|
model = SGC(data_info, embed_size=-1)
|
|
model(g, node_feat)
|
|
|
|
def test_bilinear():
|
|
data_info = {
|
|
'in_size': 10,
|
|
'out_size': 1
|
|
}
|
|
model = BilinearPredictor(data_info)
|
|
num_pairs = 10
|
|
h_src = torch.randn(num_pairs, data_info['in_size'])
|
|
h_dst = torch.randn(num_pairs, data_info['in_size'])
|
|
model(h_src, h_dst)
|
|
|
|
def test_ele():
|
|
data_info = {
|
|
'in_size': 10,
|
|
'out_size': 1
|
|
}
|
|
model = ElementWiseProductPredictor(data_info)
|
|
num_pairs = 10
|
|
h_src = torch.randn(num_pairs, data_info['in_size'])
|
|
h_dst = torch.randn(num_pairs, data_info['in_size'])
|
|
model(h_src, h_dst)
|
|
|
|
@pytest.mark.parametrize('virtual_node', [True, False])
|
|
def test_ogbg_gin(virtual_node):
|
|
# Test for ogbg-mol datasets
|
|
data_info = {
|
|
'name': 'ogbg-molhiv',
|
|
'out_size': 1
|
|
}
|
|
model = OGBGGIN(data_info,
|
|
embed_size=10,
|
|
num_layers=2,
|
|
virtual_node=virtual_node)
|
|
num_nodes = 5
|
|
num_edges = 15
|
|
g1 = dgl.rand_graph(num_nodes, num_edges)
|
|
g2 = dgl.rand_graph(num_nodes, num_edges)
|
|
g = dgl.batch([g1, g2])
|
|
num_nodes = g.num_nodes()
|
|
num_edges = g.num_edges()
|
|
nfeat = torch.zeros(num_nodes, 9).long()
|
|
efeat = torch.zeros(num_edges, 3).long()
|
|
model(g, nfeat, efeat)
|
|
|
|
# Test for non-ogbg-mol datasets
|
|
data_info = {
|
|
'name': 'a_dataset',
|
|
'out_size': 1,
|
|
'node_feat_size': 15,
|
|
'edge_feat_size': 5
|
|
}
|
|
model = OGBGGIN(data_info,
|
|
embed_size=10,
|
|
num_layers=2,
|
|
virtual_node=virtual_node)
|
|
nfeat = torch.randn(num_nodes, data_info['node_feat_size'])
|
|
efeat = torch.randn(num_edges, data_info['edge_feat_size'])
|
|
model(g, nfeat, efeat)
|
|
|
|
def test_pna():
|
|
# Test for ogbg-mol datasets
|
|
data_info = {
|
|
'name': 'ogbg-molhiv',
|
|
'delta': 1,
|
|
'out_size': 1
|
|
}
|
|
model = PNA(data_info,
|
|
embed_size=10,
|
|
num_layers=2)
|
|
num_nodes = 5
|
|
num_edges = 15
|
|
g = dgl.rand_graph(num_nodes, num_edges)
|
|
nfeat = torch.zeros(num_nodes, 9).long()
|
|
model(g, nfeat)
|
|
|
|
# Test for non-ogbg-mol datasets
|
|
data_info = {
|
|
'name': 'a_dataset',
|
|
'node_feat_size': 15,
|
|
'delta': 1,
|
|
'out_size': 1
|
|
}
|
|
model = PNA(data_info,
|
|
embed_size=10,
|
|
num_layers=2)
|
|
nfeat = torch.randn(num_nodes, data_info['node_feat_size'])
|
|
model(g, nfeat)
|