MCPcopy Create free account
hub / github.com/NineAbyss/ZeroG / kHopSubgraphDataset

Class kHopSubgraphDataset

code/SubgraphDataset.py:51–102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49
50
51class kHopSubgraphDataset(Dataset):
52 def __init__(self, data, num_hops=1, max_nodes=100, dataset_name="Cora", transform=None, pre_transform=None):
53 super(kHopSubgraphDataset, self).__init__(None, transform, pre_transform)
54 self.data = data
55 self.num_hops = num_hops
56 self.unique_classes = data.y.unique()
57 self.k_over_2 = math.ceil(len(self.unique_classes)/2)
58 if dataset_name == "Citeseer":
59 self.k_over_2 = 2
60 elif dataset_name == "Arxiv":
61 self.k_over_2 = 5
62 # elif dataset_name == "tech":
63 # self.k_over_2 = 2
64 # elif dataset_name == "home":
65 # self.k_over_2 = 3
66
67
68 self.max_nodes = max_nodes
69 self.dataset_name = dataset_name
70 self.subgraphs = self._create_subgraphs()
71
72 def _create_subgraphs(self):
73 subgraphs = []
74 for idx in tqdm(range(self.data.num_nodes)):
75
76 subgraph_node_idx, subgraph_edge_index, mapping, edge_mask = k_hop_subgraph(
77 node_idx=idx,
78 num_hops=self.num_hops,
79 edge_index=self.data.edge_index,
80 relabel_nodes=True,
81 num_nodes=self.data.num_nodes
82 )
83
84 unique_classes_in_subgraph = np.unique(self.data.y[subgraph_node_idx].cpu().numpy())
85 if len(unique_classes_in_subgraph) >= self.k_over_2 and len(subgraph_node_idx) <= self.max_nodes:
86 sub_data = Data(edge_index=subgraph_edge_index)
87 sub_data.y = self.data.y[subgraph_node_idx]
88 sub_data.raw_text = [self.data.raw_texts[i] for i in subgraph_node_idx.tolist()]
89 sub_data.label_text = self.data.label_text
90 sub_data.adjacency_matrix = to_dense_adj(subgraph_edge_index, max_num_nodes=mapping.size(0))[0]
91 sub_data.dataset_name = self.dataset_name
92 subgraphs.append(sub_data)
93 return subgraphs
94
95 def len(self):
96 return len(self.subgraphs)
97
98 def get(self, idx):
99 return self.subgraphs[idx]
100
101 def __getitem__(self, idx):
102 return self.get(idx)
103
104# class kHopSubgraphDataset(Dataset):
105# def __init__(self, data, num_hops=1, max_nodes=100, dataset_name="Cora", min_classes=None, transform=None, pre_transform=None):

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected