-
Notifications
You must be signed in to change notification settings - Fork 3.9k
-
I'm working with Heterogeneous Graphs for Link prediction using different customized datasets. In the current problem/dataset, I want to know if I reached some limitations on the Link pred capabilities or if it's just my lack of knowledge of PyG. I started to work with PyG last year and still consider myself a noob. Any help is welcome. The problemBasically, I want to get 2 disjoint feature-less graphs, create a set of links between them, and check the capability of the GNN to predict these links. The dataMy custom graph is built and the GNN is used following the steps: 1 - Get the graph A (8 different node types and 13 different edge types) After the data creation, I'm running the validate without errors, so I don't have a problem with the data. What I've triedMy first attempt was to try to adapt the MovieLens example, using the same model and almost the same structure just excluding the feature embedding layers since I don't have node features). My guess is that SageConv layer is the best model to deal with my task, and it's the easy one to find out good examples for Link Prediction. It gave me the error My questions1 - Am I in the right direction trying to use SageConv to deal with this kind of problem? My model codePretty the same of MovieLens class GNN(torch.nn.Module):
def __init__(self, hidden_channels):
super().__init__()
self.conv1 = SAGEConv(hidden_channels, hidden_channels)
self.conv2 = SAGEConv(hidden_channels, hidden_channels)
def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
# A 2-layer GNN computation graph.
# `ReLU` is the non-lineary function used in-between.
x = self.conv1(x, edge_index).relu()
x = self.conv2(x, edge_index)
return x
class Classifier(torch.nn.Module):
def forward(self, x_i: Tensor, x_j: Tensor) -> Tensor:
# Convert node embeddings to edge-level representations:
edge_feat_a = x_i[edge_label_index[0]]
edge_feat_b = x_j[edge_label_index[1]]
# Apply dot-product to get a prediction per supervision edge:
return (edge_feat_a * edge_feat_b ).sum(dim=-1)
class Model(torch.nn.Module):
def __init__(self, hidden_channels):
super().__init__()
# initial embeddings
self.x_i_emb = torch.nn.Embedding(
graph["a"].num_nodes, hidden_channels)
self.x_j_emb = torch.nn.Embedding(
graph["b"].num_nodes, hidden_channels)
# Instantiate homogeneous GNN:
self.gnn = GNN(hidden_channels)
# Convert GNN model into a heterogeneous variant:
self.gnn = to_hetero(self.gnn, metadata=graph.metadata())
self.classifier = Classifier()
def forward(self, data) -> Tensor:
x_dict = {
"a": self.x_i_emb(data["a"].node_id),
"b": self.x_j_emb(data["b"].node_id),
}
# `x_dict` holds feature matrices of all node types
# `edge_index_dict` holds all edge indices of all edge types
x_dict = self.gnn(x_dict, data.edge_index_dict)
pred = self.classifier(
x_dict["a"],
x_dict["b"],
data['a', 'to', 'b'].edge_label_index,
)
return pred |
Beta Was this translation helpful? Give feedback.
All reactions
Replies: 1 comment · 6 replies
-
I think the issue is within your usage of |
Beta Was this translation helpful? Give feedback.
All reactions
-
Actually, after I posted the message, I replaced the update step (I was not sure, but I thought it was the only step I was not sure about. Thanks for confirming it; I feel I'm improving my knowledge on PyG or, at least, on how to use it less wrongly😊). However, I still get the message Do you know how can I investigate this error further? It's not so easy for me to understand where the problem is. My (new and without using update) graph creation process is inspired by the one I found on this project since my original data is also an XML file. Still, instead of using the networkx, I'm adding my nodes and edges into Python dictionaries and calling the following function to get my HeteroData. def get_hetero_graph(self):
self.data = HeteroData()
# Convert nodes to PyTorch tensors and set HeteroData
for node_type, node_list in self.nodes.items():
self.data[node_type].num_nodes = len(node_list)
self.data[node_type].node_id = torch.Tensor([item['id'] for item in node_list]).long()
# convert edges to PyTorch tensors
for edge_type, edge_list in self.edge_index.items():
src_name, rel_name, tgt_name = edge_type.split('|') # dict keys are in form of 'node_type_1|name_of_relation|node_type_2'
self.data[src_name, rel_name, tgt_name].edge_index = torch.tensor(edge_list, dtype=torch.long).t().contiguous()
#TODO: Attributes not needed for the first experiments, since the graph nodes will be featureless
# if consider_attributtes:
# # convert attributtes to PyTorch tensors
return self.data So, instead of getting the two Graphs (A and B) based on two XML files and merging them, I'm iterating over both XMLs and adding info into the dictionaries ( Do you see any apparent mistake with this approach? Thanks for the help |
Beta Was this translation helpful? Give feedback.
All reactions
-
Mh, do you have a minimal example to reproduce? I am not totally sure how to investigate this without it. The error is sadly pretty meaningless :( |
Beta Was this translation helpful? Give feedback.
All reactions
-
Thanks for your response. Indeed, I should have provided a minimal example before. I tried to omit the data preparation (irrelevant) and copy the node IDs directly to the code (with fewer nodes than my real data). #PyG
import torch
from torch_geometric.data import HeteroData
import torch_geometric.transforms as T
from torch_geometric.nn import SAGEConv
from torch import Tensor
from torch_geometric.nn import to_hetero
import torch
class TestPyG():
def __init__(self):
self.data = HeteroData()
self.nodes = {}
self.edge_index = {}
def get_hetero_graph(self):
self.nodes = {
'SRC-Data': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}],
'SRC-Region': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}, {'id': 9}, {'id': 10}, {'id': 11}, {'id': 12}, {'id': 13}, {'id': 14}, {'id': 15}, {'id': 16}, {'id': 17}, {'id': 18}, {'id': 19}, {'id': 20}, {'id': 21}, {'id': 22}, {'id': 23}, {'id': 24}, {'id': 25}, {'id': 26}, {'id': 27}, {'id': 28}, {'id': 29}, {'id': 30}, {'id': 31}, {'id': 32}, {'id': 33}, {'id': 34}, {'id': 35}, {'id': 36}, {'id': 37}, {'id': 38}, {'id': 39}, {'id': 40}, {'id': 41}, {'id': 42}, {'id': 43}],
'SRC-E': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}, {'id': 9}, {'id': 10}, {'id': 11}, {'id': 12}, {'id': 13}, {'id': 14}, {'id': 15}, {'id': 16}, {'id': 17}, {'id': 18}, {'id': 19}, {'id': 20}, {'id': 21}, {'id': 22}, {'id': 23}, {'id': 24}, {'id': 25}, {'id': 26}, {'id': 27}, {'id': 28}, {'id': 29}, {'id': 30}, {'id': 31}, {'id': 32}, {'id': 33}, {'id': 34}, {'id': 35}, {'id': 36}, {'id': 37}, {'id': 38}, {'id': 39}, {'id': 40}, {'id': 41}, {'id': 42}, {'id': 43}],
'SRC-A': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}, {'id': 9}, {'id': 10}, {'id': 11}, {'id': 12}, {'id': 13}, {'id': 14}, {'id': 15}, {'id': 16}, {'id': 17}, {'id': 18}, {'id': 19}, {'id': 20}, {'id': 21}, {'id': 22}, {'id': 23}, {'id': 24}, {'id': 25}, {'id': 26}, {'id': 27}, {'id': 28}, {'id': 29}, {'id': 30}, {'id': 31}, {'id': 32}, {'id': 33}, {'id': 34}, {'id': 35}, {'id': 36}, {'id': 37}, {'id': 38}, {'id': 39}, {'id': 40}, {'id': 41}, {'id': 42}, {'id': 43}, {'id': 44}, {'id': 45}, {'id': 46}, {'id': 47}, {'id': 48}, {'id': 49}, {'id': 50}, {'id': 51}, {'id': 52}, {'id': 53}, {'id': 54}, {'id': 55}, {'id': 56}, {'id': 57}, {'id': 58}, {'id': 59}, {'id': 60}, {'id': 61}, {'id': 62}, {'id': 63}, {'id': 64}, {'id': 65}, {'id': 66}, {'id': 67}, {'id': 68}, {'id': 69}, {'id': 70}, {'id': 71}, {'id': 72}, {'id': 73}, {'id': 74}, {'id': 75}, {'id': 76}, {'id': 77}, {'id': 78}, {'id': 79}, {'id': 80}, {'id': 81}, {'id': 82}, {'id': 83}, {'id': 84}, {'id': 85}, {'id': 86}, {'id': 87}, {'id': 88}, {'id': 89}, {'id': 90}, {'id': 91}, {'id': 92}, {'id': 93}, {'id': 94}, {'id': 95}, {'id': 96}, {'id': 97}, {'id': 98}, {'id': 99}, {'id': 100}, {'id': 101}, {'id': 102}, {'id': 103}, {'id': 104}, {'id': 105}, {'id': 106}, {'id': 107}, {'id': 108}, {'id': 109}, {'id': 110}, {'id': 111}, {'id': 112}, {'id': 113}, {'id': 114}, {'id': 115}, {'id': 116}, {'id': 117}, {'id': 118}, {'id': 119}, {'id': 120}, {'id': 121}, {'id': 122}, {'id': 123}, {'id': 124}, {'id': 125}, {'id': 126}, {'id': 127}, {'id': 128}, {'id': 129}, {'id': 130}, {'id': 131}, {'id': 132}, {'id': 133}, {'id': 134}, {'id': 135}, {'id': 136}, {'id': 137}, {'id': 138}, {'id': 139}, {'id': 140}, {'id': 141}],
'SRC-C': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}, {'id': 9}, {'id': 10}, {'id': 11}, {'id': 12}, {'id': 13}, {'id': 14}, {'id': 15}, {'id': 16}, {'id': 17}, {'id': 18}, {'id': 19}, {'id': 20}, {'id': 21}, {'id': 22}, {'id': 23}, {'id': 24}, {'id': 25}, {'id': 26}, {'id': 27}, {'id': 28}, {'id': 29}, {'id': 30}, {'id': 31}, {'id': 32}, {'id': 33}, {'id': 34}, {'id': 35}, {'id': 36}, {'id': 37}, {'id': 38}, {'id': 39}, {'id': 40}, {'id': 41}, {'id': 42}, {'id': 43}, {'id': 44}, {'id': 45}, {'id': 46}, {'id': 47}, {'id': 48}, {'id': 49}, {'id': 50}, {'id': 51}, {'id': 52}, {'id': 53}, {'id': 54}, {'id': 55}, {'id': 56}, {'id': 57}, {'id': 58}, {'id': 59}, {'id': 60}, {'id': 61}, {'id': 62}, {'id': 63}, {'id': 64}, {'id': 65}, {'id': 66}, {'id': 67}, {'id': 68}, {'id': 69}, {'id': 70}, {'id': 71}, {'id': 72}, {'id': 73}, {'id': 74}, {'id': 75}, {'id': 76}, {'id': 77}, {'id': 78}, {'id': 79}, {'id': 80}, {'id': 81}, {'id': 82}, {'id': 83}, {'id': 84}, {'id': 85}, {'id': 86}, {'id': 87}, {'id': 88}, {'id': 89}, {'id': 90}, {'id': 91}, {'id': 92}, {'id': 93}, {'id': 94}, {'id': 95}, {'id': 96}, {'id': 97}, {'id': 98}, {'id': 99}, {'id': 100}, {'id': 101}],
'SRC-T': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}, {'id': 9}, {'id': 10}, {'id': 11}, {'id': 12}, {'id': 13}, {'id': 14}, {'id': 15}, {'id': 16}, {'id': 17}, {'id': 18}, {'id': 19}, {'id': 20}, {'id': 21}, {'id': 22}, {'id': 23}, {'id': 24}, {'id': 25}, {'id': 26}, {'id': 27}, {'id': 28}, {'id': 29}, {'id': 30}, {'id': 31}, {'id': 32}, {'id': 33}, {'id': 34}, {'id': 35}, {'id': 36}, {'id': 37}, {'id': 38}, {'id': 39}, {'id': 40}, {'id': 41}, {'id': 42}, {'id': 43}, {'id': 44}, {'id': 45}, {'id': 46}, {'id': 47}, {'id': 48}, {'id': 49}, {'id': 50}, {'id': 51}, {'id': 52}, {'id': 53}, {'id': 54}, {'id': 55}, {'id': 56}, {'id': 57}, {'id': 58}, {'id': 59}, {'id': 60}, {'id': 61}, {'id': 62}, {'id': 63}, {'id': 64}, {'id': 65}, {'id': 66}, {'id': 67}, {'id': 68}, {'id': 69}, {'id': 70}, {'id': 71}, {'id': 72}, {'id': 73}, {'id': 74}, {'id': 75}, {'id': 76}, {'id': 77}, {'id': 78}, {'id': 79}, {'id': 80}, {'id': 81}, {'id': 82}, {'id': 83}, {'id': 84}, {'id': 85}, {'id': 86}, {'id': 87}, {'id': 88}, {'id': 89}, {'id': 90}, {'id': 91}, {'id': 92}, {'id': 93}, {'id': 94}, {'id': 95}, {'id': 96}, {'id': 97}, {'id': 98}, {'id': 99}, {'id': 100}, {'id': 101}, {'id': 102}, {'id': 103}, {'id': 104}, {'id': 105}, {'id': 106}, {'id': 107}, {'id': 108}, {'id': 109}, {'id': 110}, {'id': 111}, {'id': 112}, {'id': 113}, {'id': 114}, {'id': 115}, {'id': 116}, {'id': 117}, {'id': 118}, {'id': 119}, {'id': 120}, {'id': 121}, {'id': 122}, {'id': 123}, {'id': 124}, {'id': 125}, {'id': 126}, {'id': 127}, {'id': 128}, {'id': 129}, {'id': 130}, {'id': 131}, {'id': 132}, {'id': 133}, {'id': 134}, {'id': 135}, {'id': 136}, {'id': 137}, {'id': 138}, {'id': 139}, {'id': 140}, {'id': 141}, {'id': 142}, {'id': 143}, {'id': 144}, {'id': 145}, {'id': 146}, {'id': 147}, {'id': 148}, {'id': 149}, {'id': 150}, {'id': 151}, {'id': 152}, {'id': 153}, {'id': 154}, {'id': 155}, {'id': 156}, {'id': 157}, {'id': 158}, {'id': 159}, {'id': 160}, {'id': 161}, {'id': 162}, {'id': 163}, {'id': 164}, {'id': 165}, {'id': 166}, {'id': 167}, {'id': 168}, {'id': 169}, {'id': 170}, {'id': 171}, {'id': 172}, {'id': 173}, {'id': 174}, {'id': 175}, {'id': 176}, {'id': 177}, {'id': 178}, {'id': 179}, {'id': 180}, {'id': 181}, {'id': 182}, {'id': 183}, {'id': 184}, {'id': 185}, {'id': 186}, {'id': 187}, {'id': 188}, {'id': 189}, {'id': 190}, {'id': 191}, {'id': 192}, {'id': 193}, {'id': 194}, {'id': 195}, {'id': 196}, {'id': 197}, {'id': 198}, {'id': 199}, {'id': 200}, {'id': 201}, {'id': 202}, {'id': 203}, {'id': 204}, {'id': 205}, {'id': 206}, {'id': 207}, {'id': 208}, {'id': 209}, {'id': 210}, {'id': 211}, {'id': 212}, {'id': 213}, {'id': 214}, {'id': 215}, {'id': 216}, {'id': 217}, {'id': 218}, {'id': 219}, {'id': 220}, {'id': 221}, {'id': 222}, {'id': 223}, {'id': 224}, {'id': 225}, {'id': 226}, {'id': 227}, {'id': 228}, {'id': 229}, {'id': 230}, {'id': 231}, {'id': 232}, {'id': 233}, {'id': 234}, {'id': 235}, {'id': 236}, {'id': 237}, {'id': 238}, {'id': 239}, {'id': 240}, {'id': 241}, {'id': 242}, {'id': 243}, {'id': 244}, {'id': 245}, {'id': 246}, {'id': 247}, {'id': 248}, {'id': 249}, {'id': 250}, {'id': 251}, {'id': 252}, {'id': 253}, {'id': 254}, {'id': 255}, {'id': 256}, {'id': 257}, {'id': 258}, {'id': 259}, {'id': 260}, {'id': 261}, {'id': 262}, {'id': 263}, {'id': 264}, {'id': 265}, {'id': 266}, {'id': 267}, {'id': 268}, {'id': 269}, {'id': 270}, {'id': 271}, {'id': 272}, {'id': 273}, {'id': 274}, {'id': 275}, {'id': 276}, {'id': 277}, {'id': 278}, {'id': 279}, {'id': 280}, {'id': 281}, {'id': 282}, {'id': 283}, {'id': 284}, {'id': 285}, {'id': 286}, {'id': 287}, {'id': 288}, {'id': 289}, {'id': 290}, {'id': 291}, {'id': 292}, {'id': 293}, {'id': 294}, {'id': 295}, {'id': 296}, {'id': 297}, {'id': 298}, {'id': 299}, {'id': 300}, {'id': 301}, {'id': 302}, {'id': 303}, {'id': 304}, {'id': 305}, {'id': 306}, {'id': 307}, {'id': 308}, {'id': 309}, {'id': 310}, {'id': 311}, {'id': 312}, {'id': 313}, {'id': 314}, {'id': 315}, {'id': 316}, {'id': 317}, {'id': 318}, {'id': 319}, {'id': 320}, {'id': 321}, {'id': 322}, {'id': 323}, {'id': 324}, {'id': 325}, {'id': 326}, {'id': 327}, {'id': 328}, {'id': 329}, {'id': 330}, {'id': 331}, {'id': 332}, {'id': 333}, {'id': 334}, {'id': 335}, {'id': 336}, {'id': 337}, {'id': 338}, {'id': 339}, {'id': 340}, {'id': 341}, {'id': 342}, {'id': 343}, {'id': 344}, {'id': 345}, {'id': 346}, {'id': 347}, {'id': 348}, {'id': 349}, {'id': 350}, {'id': 351}, {'id': 352}, {'id': 353}, {'id': 354}, {'id': 355}, {'id': 356}, {'id': 357}, {'id': 358}, {'id': 359}, {'id': 360}, {'id': 361}, {'id': 362}, {'id': 363}, {'id': 364}, {'id': 365}, {'id': 366}, {'id': 367}, {'id': 368}, {'id': 369}, {'id': 370}, {'id': 371}, {'id': 372}, {'id': 373}, {'id': 374}, {'id': 375}, {'id': 376}, {'id': 377}, {'id': 378}, {'id': 379}, {'id': 380}, {'id': 381}, {'id': 382}, {'id': 383}, {'id': 384}, {'id': 385}, {'id': 386}, {'id': 387}, {'id': 388}, {'id': 389}, {'id': 390}, {'id': 391}, {'id': 392}, {'id': 393}, {'id': 394}, {'id': 395}, {'id': 396}, {'id': 397}, {'id': 398}, {'id': 399}, {'id': 400}, {'id': 401}, {'id': 402}, {'id': 403}, {'id': 404}, {'id': 405}, {'id': 406}, {'id': 407}, {'id': 408}, {'id': 409}, {'id': 410}, {'id': 411}, {'id': 412}, {'id': 413}, {'id': 414}, {'id': 415}, {'id': 416}, {'id': 417}, {'id': 418}, {'id': 419}, {'id': 420}, {'id': 421}, {'id': 422}, {'id': 423}, {'id': 424}, {'id': 425}, {'id': 426}, {'id': 427}, {'id': 428}, {'id': 429}, {'id': 430}, {'id': 431}, {'id': 432}, {'id': 433}, {'id': 434}, {'id': 435}, {'id': 436}, {'id': 437}, {'id': 438}, {'id': 439}, {'id': 440}, {'id': 441}, {'id': 442}, {'id': 443}, {'id': 444}, {'id': 445}, {'id': 446}, {'id': 447}, {'id': 448}, {'id': 449}, {'id': 450}, {'id': 451}, {'id': 452}, {'id': 453}, {'id': 454}, {'id': 455}, {'id': 456}, {'id': 457}, {'id': 458}, {'id': 459}, {'id': 460}, {'id': 461}, {'id': 462}, {'id': 463}, {'id': 464}, {'id': 465}, {'id': 466}, {'id': 467}, {'id': 468}, {'id': 469}, {'id': 470}, {'id': 471}, {'id': 472}, {'id': 473}, {'id': 474}, {'id': 475}, {'id': 476}, {'id': 477}, {'id': 478}, {'id': 479}, {'id': 480}, {'id': 481}, {'id': 482}, {'id': 483}, {'id': 484}, {'id': 485}, {'id': 486}, {'id': 487}, {'id': 488}, {'id': 489}, {'id': 490}, {'id': 491}, {'id': 492}, {'id': 493}, {'id': 494}, {'id': 495}, {'id': 496}, {'id': 497}, {'id': 498}, {'id': 499}, {'id': 500}, {'id': 501}, {'id': 502}, {'id': 503}, {'id': 504}, {'id': 505}, {'id': 506}, {'id': 507}, {'id': 508}, {'id': 509}, {'id': 510}, {'id': 511}, {'id': 512}, {'id': 513}, {'id': 514}, {'id': 515}, {'id': 516}, {'id': 517}, {'id': 518}, {'id': 519}, {'id': 520}, {'id': 521}, {'id': 522}, {'id': 523}, {'id': 524}, {'id': 525}, {'id': 526}, {'id': 527}, {'id': 528}, {'id': 529}, {'id': 530}, {'id': 531}, {'id': 532}, {'id': 533}, {'id': 534}, {'id': 535}, {'id': 536}, {'id': 537}, {'id': 538}, {'id': 539}, {'id': 540}, {'id': 541}, {'id': 542}, {'id': 543}, {'id': 544}, {'id': 545}, {'id': 546}, {'id': 547}, {'id': 548}, {'id': 549}, {'id': 550}, {'id': 551}, {'id': 552}, {'id': 553}, {'id': 554}, {'id': 555}, {'id': 556}, {'id': 557}, {'id': 558}, {'id': 559}, {'id': 560}, {'id': 561}, {'id': 562}, {'id': 563}, {'id': 564}, {'id': 565}, {'id': 566}, {'id': 567}, {'id': 568}],
'TGT-T': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}, {'id': 9}, {'id': 10}, {'id': 11}, {'id': 12}, {'id': 13}, {'id': 14}, {'id': 15}, {'id': 16}, {'id': 17}, {'id': 18}, {'id': 19}, {'id': 20}, {'id': 21}, {'id': 22}, {'id': 23}, {'id': 24}, {'id': 25}, {'id': 26}, {'id': 27}, {'id': 28}, {'id': 29}, {'id': 30}, {'id': 31}, {'id': 32}, {'id': 33}, {'id': 34}, {'id': 35}, {'id': 36}, {'id': 37}, {'id': 38}, {'id': 39}, {'id': 40}, {'id': 41}, {'id': 42}, {'id': 43}, {'id': 44}, {'id': 45}, {'id': 46}, {'id': 47}, {'id': 48}, {'id': 49}, {'id': 50}, {'id': 51}, {'id': 52}, {'id': 53}, {'id': 54}, {'id': 55}, {'id': 56}, {'id': 57}, {'id': 58}, {'id': 59}, {'id': 60}, {'id': 61}, {'id': 62}, {'id': 63}, {'id': 64}, {'id': 65}, {'id': 66}, {'id': 67}, {'id': 68}, {'id': 69}, {'id': 70}, {'id': 71}, {'id': 72}, {'id': 73}, {'id': 74}, {'id': 75}, {'id': 76}, {'id': 77}, {'id': 78}, {'id': 79}, {'id': 80}, {'id': 81}, {'id': 82}, {'id': 83}, {'id': 84}, {'id': 85}, {'id': 86}, {'id': 87}, {'id': 88}, {'id': 89}, {'id': 90}, {'id': 91}, {'id': 92}, {'id': 93}, {'id': 94}, {'id': 95}, {'id': 96}, {'id': 97}, {'id': 98}, {'id': 99}, {'id': 100}, {'id': 101}, {'id': 102}, {'id': 103}, {'id': 104}, {'id': 105}, {'id': 106}, {'id': 107}, {'id': 108}, {'id': 109}, {'id': 110}, {'id': 111}, {'id': 112}, {'id': 113}, {'id': 114}, {'id': 115}, {'id': 116}, {'id': 117}, {'id': 118}, {'id': 119}, {'id': 120}, {'id': 121}, {'id': 122}, {'id': 123}, {'id': 124}, {'id': 125}, {'id': 126}, {'id': 127}, {'id': 128}, {'id': 129}, {'id': 130}, {'id': 131}, {'id': 132}, {'id': 133}, {'id': 134}, {'id': 135}, {'id': 136}, {'id': 137}, {'id': 138}, {'id': 139}, {'id': 140}, {'id': 141}, {'id': 142}, {'id': 143}, {'id': 144}, {'id': 145}, {'id': 146}, {'id': 147}, {'id': 148}, {'id': 149}, {'id': 150}, {'id': 151}, {'id': 152}, {'id': 153}, {'id': 154}, {'id': 155}, {'id': 156}, {'id': 157}, {'id': 158}, {'id': 159}, {'id': 160}, {'id': 161}, {'id': 162}, {'id': 163}, {'id': 164}, {'id': 165}, {'id': 166}, {'id': 167}, {'id': 168}, {'id': 169}, {'id': 170}, {'id': 171}, {'id': 172}, {'id': 173}, {'id': 174}, {'id': 175}, {'id': 176}, {'id': 177}, {'id': 178}, {'id': 179}, {'id': 180}, {'id': 181}, {'id': 182}, {'id': 183}, {'id': 184}, {'id': 185}, {'id': 186}, {'id': 187}, {'id': 188}, {'id': 189}, {'id': 190}, {'id': 191}, {'id': 192}, {'id': 193}, {'id': 194}, {'id': 195}, {'id': 196}, {'id': 197}, {'id': 198}, {'id': 199}, {'id': 200}, {'id': 201}, {'id': 202}, {'id': 203}, {'id': 204}, {'id': 205}, {'id': 206}, {'id': 207}, {'id': 208}, {'id': 209}, {'id': 210}, {'id': 211}, {'id': 212}, {'id': 213}, {'id': 214}, {'id': 215}, {'id': 216}, {'id': 217}, {'id': 218}, {'id': 219}, {'id': 220}, {'id': 221}, {'id': 222}, {'id': 223}, {'id': 224}, {'id': 225}, {'id': 226}, {'id': 227}, {'id': 228}, {'id': 229}, {'id': 230}, {'id': 231}, {'id': 232}, {'id': 233}, {'id': 234}, {'id': 235}, {'id': 236}, {'id': 237}, {'id': 238}, {'id': 239}, {'id': 240}, {'id': 241}, {'id': 242}, {'id': 243}, {'id': 244}, {'id': 245}, {'id': 246}, {'id': 247}, {'id': 248}, {'id': 249}, {'id': 250}, {'id': 251}, {'id': 252}, {'id': 253}, {'id': 254}, {'id': 255}, {'id': 256}, {'id': 257}, {'id': 258}, {'id': 259}, {'id': 260}, {'id': 261}, {'id': 262}, {'id': 263}, {'id': 264}, {'id': 265}, {'id': 266}, {'id': 267}, {'id': 268}, {'id': 269}, {'id': 270}, {'id': 271}, {'id': 272}, {'id': 273}, {'id': 274}, {'id': 275}, {'id': 276}, {'id': 277}, {'id': 278}, {'id': 279}, {'id': 280}, {'id': 281}, {'id': 282}, {'id': 283}, {'id': 284}, {'id': 285}, {'id': 286}, {'id': 287}, {'id': 288}, {'id': 289}, {'id': 290}, {'id': 291}, {'id': 292}, {'id': 293}, {'id': 294}, {'id': 295}, {'id': 296}, {'id': 297}, {'id': 298}, {'id': 299}, {'id': 300}, {'id': 301}, {'id': 302}, {'id': 303}, {'id': 304}, {'id': 305}, {'id': 306}, {'id': 307}, {'id': 308}, {'id': 309}, {'id': 310}, {'id': 311}, {'id': 312}, {'id': 313}, {'id': 314}, {'id': 315}, {'id': 316}, {'id': 317}, {'id': 318}, {'id': 319}, {'id': 320}, {'id': 321}, {'id': 322}, {'id': 323}, {'id': 324}, {'id': 325}, {'id': 326}, {'id': 327}, {'id': 328}, {'id': 329}, {'id': 330}, {'id': 331}, {'id': 332}, {'id': 333}, {'id': 334}, {'id': 335}, {'id': 336}, {'id': 337}, {'id': 338}, {'id': 339}, {'id': 340}, {'id': 341}, {'id': 342}, {'id': 343}, {'id': 344}, {'id': 345}, {'id': 346}, {'id': 347}, {'id': 348}, {'id': 349}, {'id': 350}, {'id': 351}, {'id': 352}, {'id': 353}, {'id': 354}, {'id': 355}, {'id': 356}, {'id': 357}, {'id': 358}, {'id': 359}, {'id': 360}, {'id': 361}, {'id': 362}, {'id': 363}, {'id': 364}, {'id': 365}, {'id': 366}, {'id': 367}, {'id': 368}, {'id': 369}, {'id': 370}, {'id': 371}, {'id': 372}, {'id': 373}, {'id': 374}, {'id': 375}, {'id': 376}, {'id': 377}, {'id': 378}, {'id': 379}, {'id': 380}, {'id': 381}, {'id': 382}, {'id': 383}, {'id': 384}, {'id': 385}, {'id': 386}, {'id': 387}, {'id': 388}, {'id': 389}, {'id': 390}, {'id': 391}, {'id': 392}, {'id': 393}, {'id': 394}, {'id': 395}, {'id': 396}, {'id': 397}, {'id': 398}, {'id': 399}, {'id': 400}, {'id': 401}, {'id': 402}, {'id': 403}, {'id': 404}, {'id': 405}, {'id': 406}, {'id': 407}, {'id': 408}, {'id': 409}, {'id': 410}, {'id': 411}, {'id': 412}, {'id': 413}, {'id': 414}, {'id': 415}, {'id': 416}, {'id': 417}, {'id': 418}, {'id': 419}, {'id': 420}, {'id': 421}, {'id': 422}, {'id': 423}, {'id': 424}, {'id': 425}, {'id': 426}, {'id': 427}, {'id': 428}, {'id': 429}, {'id': 430}, {'id': 431}, {'id': 432}, {'id': 433}, {'id': 434}, {'id': 435}, {'id': 436}, {'id': 437}, {'id': 438}, {'id': 439}, {'id': 440}, {'id': 441}, {'id': 442}, {'id': 443}, {'id': 444}, {'id': 445}, {'id': 446}, {'id': 447}, {'id': 448}, {'id': 449}, {'id': 450}, {'id': 451}, {'id': 452}, {'id': 453}, {'id': 454}, {'id': 455}, {'id': 456}, {'id': 457}, {'id': 458}, {'id': 459}, {'id': 460}, {'id': 461}, {'id': 462}, {'id': 463}, {'id': 464}, {'id': 465}, {'id': 466}, {'id': 467}, {'id': 468}, {'id': 469}, {'id': 470}, {'id': 471}, {'id': 472}, {'id': 473}, {'id': 474}, {'id': 475}, {'id': 476}, {'id': 477}, {'id': 478}, {'id': 479}, {'id': 480}, {'id': 481}, {'id': 482}, {'id': 483}, {'id': 484}, {'id': 485}, {'id': 486}, {'id': 487}, {'id': 488}, {'id': 489}, {'id': 490}, {'id': 491}, {'id': 492}, {'id': 493}, {'id': 494}, {'id': 495}, {'id': 496}, {'id': 497}, {'id': 498}, {'id': 499}, {'id': 500}, {'id': 501}, {'id': 502}, {'id': 503}, {'id': 504}, {'id': 505}, {'id': 506}, {'id': 507}, {'id': 508}, {'id': 509}, {'id': 510}, {'id': 511}, {'id': 512}, {'id': 513}, {'id': 514}, {'id': 515}, {'id': 516}, {'id': 517}, {'id': 518}, {'id': 519}, {'id': 520}, {'id': 521}, {'id': 522}, {'id': 523}, {'id': 524}, {'id': 525}, {'id': 526}, {'id': 527}, {'id': 528}, {'id': 529}, {'id': 530}, {'id': 531}, {'id': 532}, {'id': 533}, {'id': 534}, {'id': 535}, {'id': 536}, {'id': 537}, {'id': 538}, {'id': 539}, {'id': 540}, {'id': 541}, {'id': 542}, {'id': 543}, {'id': 544}, {'id': 545}, {'id': 546}, {'id': 547}, {'id': 548}, {'id': 549}, {'id': 550}, {'id': 551}, {'id': 552}, {'id': 553}, {'id': 554}, {'id': 555}, {'id': 556}, {'id': 557}, {'id': 558}, {'id': 559}, {'id': 560}, {'id': 561}, {'id': 562}, {'id': 563}, {'id': 564}, {'id': 565}, {'id': 566}, {'id': 567}, {'id': 568}],
'TGT-B': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}, {'id': 9}, {'id': 10}, {'id': 11}, {'id': 12}, {'id': 13}, {'id': 14}, {'id': 15}, {'id': 16}, {'id': 17}, {'id': 18}, {'id': 19}, {'id': 20}, {'id': 21}, {'id': 22}, {'id': 23}, {'id': 24}, {'id': 25}, {'id': 26}, {'id': 27}, {'id': 28}, {'id': 29}, {'id': 30}, {'id': 31}, {'id': 32}, {'id': 33}, {'id': 34}, {'id': 35}, {'id': 36}, {'id': 37}, {'id': 38}, {'id': 39}, {'id': 40}, {'id': 41}, {'id': 42}, {'id': 43}, {'id': 44}, {'id': 45}, {'id': 46}, {'id': 47}, {'id': 48}, {'id': 49}, {'id': 50}, {'id': 51}, {'id': 52}, {'id': 53}, {'id': 54}, {'id': 55}, {'id': 56}, {'id': 57}, {'id': 58}, {'id': 59}, {'id': 60}, {'id': 61}, {'id': 62}, {'id': 63}, {'id': 64}, {'id': 65}, {'id': 66}, {'id': 67}, {'id': 68}, {'id': 69}, {'id': 70}, {'id': 71}, {'id': 72}, {'id': 73}, {'id': 74}, {'id': 75}, {'id': 76}, {'id': 77}, {'id': 78}, {'id': 79}, {'id': 80}, {'id': 81}, {'id': 82}, {'id': 83}, {'id': 84}, {'id': 85}, {'id': 86}, {'id': 87}, {'id': 88}, {'id': 89}, {'id': 90}, {'id': 91}, {'id': 92}, {'id': 93}, {'id': 94}, {'id': 95}, {'id': 96}, {'id': 97}, {'id': 98}, {'id': 99}, {'id': 100}, {'id': 101}, {'id': 102}, {'id': 103}, {'id': 104}, {'id': 105}, {'id': 106}, {'id': 107}, {'id': 108}, {'id': 109}, {'id': 110}, {'id': 111}, {'id': 112}, {'id': 113}, {'id': 114}, {'id': 115}, {'id': 116}, {'id': 117}, {'id': 118}, {'id': 119}, {'id': 120}, {'id': 121}, {'id': 122}, {'id': 123}, {'id': 124}, {'id': 125}, {'id': 126}, {'id': 127}, {'id': 128}, {'id': 129}, {'id': 130}, {'id': 131}, {'id': 132}, {'id': 133}, {'id': 134}, {'id': 135}, {'id': 136}, {'id': 137}, {'id': 138}, {'id': 139}, {'id': 140}, {'id': 141}, {'id': 142}, {'id': 143}, {'id': 144}, {'id': 145}, {'id': 146}, {'id': 147}, {'id': 148}, {'id': 149}, {'id': 150}, {'id': 151}, {'id': 152}, {'id': 153}, {'id': 154}, {'id': 155}, {'id': 156}, {'id': 157}, {'id': 158}, {'id': 159}, {'id': 160}, {'id': 161}, {'id': 162}, {'id': 163}, {'id': 164}, {'id': 165}, {'id': 166}, {'id': 167}, {'id': 168}, {'id': 169}, {'id': 170}, {'id': 171}, {'id': 172}, {'id': 173}, {'id': 174}, {'id': 175}, {'id': 176}, {'id': 177}, {'id': 178}, {'id': 179}, {'id': 180}, {'id': 181}, {'id': 182}, {'id': 183}, {'id': 184}, {'id': 185}, {'id': 186}, {'id': 187}, {'id': 188}, {'id': 189}, {'id': 190}, {'id': 191}, {'id': 192}, {'id': 193}, {'id': 194}, {'id': 195}, {'id': 196}, {'id': 197}, {'id': 198}, {'id': 199}, {'id': 200}, {'id': 201}, {'id': 202}, {'id': 203}, {'id': 204}, {'id': 205}, {'id': 206}, {'id': 207}, {'id': 208}, {'id': 209}, {'id': 210}, {'id': 211}, {'id': 212}, {'id': 213}, {'id': 214}, {'id': 215}, {'id': 216}, {'id': 217}, {'id': 218}, {'id': 219}, {'id': 220}, {'id': 221}, {'id': 222}, {'id': 223}, {'id': 224}, {'id': 225}, {'id': 226}, {'id': 227}, {'id': 228}, {'id': 229}, {'id': 230}, {'id': 231}, {'id': 232}, {'id': 233}, {'id': 234}, {'id': 235}, {'id': 236}, {'id': 237}, {'id': 238}, {'id': 239}, {'id': 240}, {'id': 241}, {'id': 242}, {'id': 243}, {'id': 244}, {'id': 245}, {'id': 246}, {'id': 247}, {'id': 248}, {'id': 249}, {'id': 250}, {'id': 251}, {'id': 252}, {'id': 253}, {'id': 254}, {'id': 255}, {'id': 256}, {'id': 257}, {'id': 258}, {'id': 259}, {'id': 260}, {'id': 261}, {'id': 262}, {'id': 263}, {'id': 264}, {'id': 265}, {'id': 266}, {'id': 267}, {'id': 268}, {'id': 269}, {'id': 270}, {'id': 271}, {'id': 272}, {'id': 273}, {'id': 274}, {'id': 275}, {'id': 276}, {'id': 277}, {'id': 278}, {'id': 279}, {'id': 280}, {'id': 281}, {'id': 282}, {'id': 283}, {'id': 284}, {'id': 285}, {'id': 286}, {'id': 287}, {'id': 288}, {'id': 289}],
'TGT-Start': [{'id': 0}, {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}],
'SRC-Exit': [{'id': 0}, {'id': 1}]
}
self.edge_index = {
'SRC-Data|regions|SRC-Region': [[0, 0], [1, 1], [2, 5], [3, 8], [4, 13], [5, 16], [6, 24], [7, 28], [8, 36]],
'SRC-Region|react|SRC-E': [[0, 0], [1, 1], [2, 2], [4, 3], [3, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9], [10, 10], [11, 11], [12, 12], [13, 13], [14, 14], [15, 15], [16, 16], [17, 17], [18, 18], [19, 19], [20, 20], [21, 21], [22, 22], [23, 23], [24, 24], [25, 25], [27, 26], [26, 27], [28, 28], [29, 29], [31, 30], [32, 31], [33, 32], [34, 33], [35, 34], [30, 35], [36, 36], [37, 37], [38, 38], [39, 39], [40, 40], [41, 41], [42, 42], [43, 43]],
'SRC-Region|react|SRC-A': [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [0, 10], [1, 11], [1, 12], [2, 13], [2, 14], [2, 15], [2, 16], [2, 17], [4, 18], [4, 19], [3, 20], [3, 21], [3, 22], [3, 23], [3, 24], [3, 25], [3, 26], [5, 27], [5, 28], [6, 29], [6, 30], [6, 31], [6, 32], [6, 33], [6, 34], [7, 35], [7, 36], [7, 37], [7, 38], [8, 39], [8, 40], [8, 41], [8, 42], [8, 43], [8, 44], [8, 45], [8, 46], [8, 47], [8, 48], [8, 49], [8, 50], [8, 51], [9, 52], [10, 53], [11, 54], [12, 55], [13, 56], [13, 57], [14, 58], [14, 59], [14, 60], [14, 61], [14, 62], [15, 63], [15, 64], [15, 65], [15, 66], [15, 67], [15, 68], [16, 69], [16, 70], [17, 71], [17, 72], [17, 73], [17, 74], [18, 75], [18, 76], [18, 77], [18, 78], [18, 79], [19, 80], [19, 81], [20, 82], [21, 83], [22, 84], [23, 85], [24, 86], [24, 87], [25, 88], [25, 89], [25, 90], [25, 91], [25, 92], [25, 93], [27, 94], [27, 95], [26, 96], [26, 97], [26, 98], [26, 99], [28, 100], [28, 101], [29, 102], [29, 103], [29, 104], [29, 105], [29, 106], [31, 107], [31, 108], [32, 109], [32, 110], [32, 111], [33, 112], [33, 113], [33, 114], [34, 115], [34, 116], [34, 117], [35, 118], [35, 119], [35, 120], [30, 121], [30, 122], [30, 123], [30, 124], [36, 125], [36, 126], [36, 127], [36, 128], [36, 129], [36, 130], [37, 131], [38, 132], [39, 133], [40, 134], [41, 135], [41, 136], [41, 137], [42, 139], [42, 138], [43, 140], [43, 141]],
'SRC-Region|react|SRC-C': [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [0, 10], [0, 11], [0, 12], [0, 13], [0, 14], [0, 15], [2, 16], [2, 17], [2, 18], [2, 19], [2, 20], [2, 21], [2, 22], [2, 23], [3, 24], [3, 25], [3, 26], [3, 27], [3, 28], [3, 29], [3, 30], [6, 31], [6, 32], [6, 33], [6, 34], [6, 35], [6, 36], [6, 37], [6, 38], [7, 39], [7, 40], [7, 41], [7, 42], [7, 43], [7, 44], [7, 45], [7, 46], [8, 47], [8, 48], [9, 49], [9, 50], [10, 51], [10, 52], [11, 53], [11, 54], [12, 55], [12, 56], [14, 57], [14, 58], [14, 59], [14, 60], [14, 61], [14, 62], [15, 63], [15, 64], [15, 65], [15, 66], [15, 67], [15, 68], [15, 69], [15, 70], [15, 71], [17, 72], [17, 73], [17, 74], [17, 75], [17, 76], [19, 77], [20, 78], [20, 79], [21, 80], [21, 81], [22, 82], [22, 83], [23, 84], [23, 85], [25, 86], [25, 87], [25, 88], [25, 89], [25, 90], [25, 91], [25, 92], [25, 93], [27, 94], [26, 95], [26, 96], [26, 97], [26, 98], [26, 99], [31, 100], [30, 101]],
'SRC-E|noinclude|SRC-T': [[0, 0], [1, 68], [2, 71], [3, 101], [4, 119], [5, 129], [6, 132], [7, 172], [8, 204], [9, 241], [10, 248], [11, 255], [12, 262], [13, 269], [14, 272], [15, 299], [16, 326], [17, 343], [18, 346], [19, 356], [20, 361], [21, 364], [22, 372], [23, 380], [24, 386], [25, 388], [26, 430], [27, 445], [28, 446], [29, 449], [30, 461], [31, 462], [32, 471], [33, 480], [34, 489], [35, 498], [36, 511], [37, 521], [38, 527], [39, 533], [40, 539], [41, 551], [42, 557], [43, 565]],
'SRC-A|include|SRC-T': [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [0, 10], [0, 11], [0, 12], [1, 13], [1, 15], [1, 16], [1, 17], [1, 18], [2, 21], [2, 22], [2, 23], [2, 24], [2, 25], [3, 27], [3, 29], [3, 30], [3, 31], [3, 32], [4, 34], [4, 36], [4, 37], [4, 38], [4, 39], [5, 43], [5, 45], [5, 46], [6, 44], [6, 47], [6, 48], [7, 50], [7, 51], [7, 52], [7, 53], [7, 54], [8, 49], [8, 57], [8, 58], [8, 59], [8, 60], [9, 63], [10, 64], [11, 67], [11, 68], [12, 69], [13, 70], [13, 71], [14, 72], [14, 73], [14, 74], [14, 75], [14, 76], [15, 78], [15, 80], [15, 81], [15, 82], [15, 83], [16, 84], [16, 87], [16, 88], [16, 89], [16, 90], [17, 93], [17, 94], [17, 95], [17, 96], [17, 97], [18, 100], [18, 101], [19, 102], [20, 103], [20, 104], [20, 105], [20, 106], [20, 107], [21, 111], [21, 112], [21, 113], [21, 114], [21, 115], [22, 121], [23, 124], [24, 119], [25, 109], [26, 116], [27, 129], [27, 130], [28, 131], [29, 132], [29, 133], [29, 134], [29, 135], [30, 136], [30, 137], [30, 138], [30, 139], [30, 140], [30, 141], [31, 142], [31, 145], [31, 146], [31, 147], [31, 148], [31, 149], [32, 151], [32, 153], [32, 154], [32, 155], [32, 156], [32, 157], [33, 159], [33, 161], [33, 162], [33, 163], [33, 164], [33, 165], [34, 166], [34, 169], [34, 170], [34, 171], [35, 173], [35, 175], [35, 176], [35, 177], [35, 178], [35, 179], [35, 180], [36, 174], [36, 183], [36, 184], [36, 185], [36, 186], [36, 187], [36, 188], [36, 189], [37, 196], [37, 197], [37, 198], [37, 199], [38, 195], [38, 200], [38, 201], [38, 202], [38, 203], [39, 204], [39, 205], [39, 206], [39, 207], [39, 208], [39, 209], [39, 210], [39, 211], [39, 212], [39, 213], [40, 214], [40, 216], [41, 217], [41, 218], [42, 219], [42, 220], [43, 221], [43, 222], [44, 215], [44, 223], [44, 224], [44, 225], [44, 226], [45, 230], [45, 231], [45, 232], [45, 233], [46, 228], [47, 235], [48, 229], [48, 237], [49, 238], [50, 236], [50, 239], [51, 240], [52, 241], [52, 242], [52, 243], [52, 244], [52, 245], [53, 248], [53, 249], [53, 250], [53, 251], [53, 252], [54, 255], [54, 256], [54, 257], [54, 258], [54, 259], [55, 262], [55, 263], [55, 264], [55, 265], [55, 266], [56, 269], [56, 270], [57, 271], [58, 272], [58, 273], [59, 274], [59, 276], [59, 277], [59, 278], [59, 279], [60, 282], [60, 283], [60, 284], [60, 285], [60, 286], [61, 290], [61, 291], [61, 292], [62, 287], [62, 293], [62, 294], [62, 295], [62, 296], [63, 300], [63, 301], [63, 302], [63, 303], [63, 304], [63, 305], [64, 308], [64, 309], [64, 310], [64, 311], [64, 312], [64, 313], [65, 316], [66, 317], [67, 322], [67, 323], [68, 324], [68, 325], [69, 327], [70, 326], [70, 328], [71, 329], [71, 330], [71, 331], [71, 332], [72, 336], [72, 337], [72, 338], [72, 339], [73, 344], [73, 345], [74, 333], [74, 342], [75, 346], [75, 347], [76, 348], [77, 349], [78, 350], [79, 351], [80, 352], [80, 353], [81, 354], [81, 355], [82, 357], [82, 358], [82, 359], [82, 360], [82, 361], [83, 364], [83, 365], [83, 366], [83, 367], [83, 368], [84, 371], [84, 372], [84, 373], [84, 374], [84, 375], [85, 378], [85, 379], [85, 380], [85, 381], [85, 382], [86, 385], [86, 386], [87, 387], [88, 388], [88, 389], [89, 390], [89, 391], [90, 392], [90, 393], [90, 394], [90, 395], [90, 396], [90, 397], [91, 399], [91, 401], [91, 402], [91, 403], [91, 404], [91, 405], [92, 408], [92, 409], [92, 410], [92, 411], [92, 412], [92, 413], [93, 414], [93, 417], [93, 418], [93, 419], [93, 420], [93, 421], [94, 424], [94, 425], [94, 426], [95, 427], [95, 428], [95, 429], [96, 431], [96, 432], [96, 433], [96, 434], [97, 437], [97, 438], [97, 439], [97, 440], [98, 443], [99, 444], [100, 446], [100, 447], [101, 448], [102, 449], [102, 450], [103, 451], [104, 452], [105, 453], [106, 454], [107, 455], [107, 456], [107, 457], [108, 458], [108, 459], [108, 460], [109, 462], [109, 463], [109, 464], [109, 465], [109, 466], [110, 467], [110, 469], [111, 468], [111, 470], [112, 471], [112, 472], [112, 473], [112, 474], [112, 475], [113, 476], [113, 478], [114, 477], [114, 479], [115, 480], [115, 481], [115, 482], [115, 483], [115, 484], [116, 485], [116, 487], [117, 486], [117, 488], [118, 489], [118, 490], [118, 491], [118, 492], [118, 493], [119, 494], [119, 496], [120, 495], [120, 497], [121, 500], [121, 501], [121, 502], [121, 503], [121, 504], [122, 499], [122, 505], [122, 506], [122, 508], [122, 509], [123, 510], [124, 507], [125, 511], [125, 512], [125, 513], [125, 514], [125, 515], [126, 517], [127, 519], [128, 518], [129, 520], [130, 516], [131, 521], [131, 522], [131, 523], [131, 524], [131, 525], [131, 526], [132, 527], [132, 528], [132, 529], [132, 530], [132, 531], [132, 532], [133, 533], [133, 534], [133, 535], [133, 536], [133, 537], [133, 538], [134, 539], [134, 540], [134, 541], [134, 542], [134, 543], [134, 544], [135, 545], [135, 546], [135, 547], [135, 548], [136, 551], [137, 552], [137, 553], [137, 554], [137, 555], [137, 556], [139, 550], [139, 557], [139, 558], [139, 559], [139, 560], [138, 549], [138, 561], [138, 562], [138, 563], [140, 564], [140, 565], [140, 566], [141, 567], [141, 568]],
'SRC-A|noinclude|SRC-T': [[0, 13], [0, 14], [1, 19], [1, 20], [1, 2], [1, 21], [2, 26], [2, 27], [2, 8], [2, 28], [3, 33], [3, 34], [3, 35], [3, 7], [4, 40], [4, 41], [4, 3], [4, 42], [5, 46], [5, 47], [5, 11], [5, 4], [6, 45], [6, 48], [6, 1], [6, 10], [7, 55], [7, 56], [7, 12], [8, 61], [8, 62], [8, 5], [9, 9], [10, 6], [11, 69], [12, 67], [13, 72], [14, 77], [14, 78], [14, 79], [15, 84], [15, 85], [15, 86], [16, 91], [16, 92], [16, 93], [17, 70], [17, 98], [17, 99], [18, 102], [19, 100], [20, 108], [20, 109], [20, 110], [21, 116], [21, 117], [21, 118], [22, 127], [23, 128], [24, 120], [25, 125], [26, 126], [28, 130], [29, 134], [29, 136], [29, 135], [29, 131], [30, 142], [30, 143], [30, 144], [30, 141], [31, 150], [31, 151], [31, 152], [31, 149], [32, 158], [32, 155], [32, 159], [32, 160], [33, 166], [33, 167], [33, 168], [33, 165], [34, 169], [34, 170], [34, 171], [34, 133], [35, 175], [35, 181], [35, 182], [35, 178], [36, 190], [36, 184], [36, 188], [36, 191], [36, 192], [37, 197], [37, 198], [37, 199], [38, 201], [38, 202], [38, 203], [39, 214], [39, 215], [40, 217], [40, 216], [41, 218], [41, 219], [42, 221], [42, 220], [43, 205], [43, 222], [44, 223], [44, 227], [44, 206], [44, 228], [44, 229], [45, 207], [45, 232], [45, 234], [45, 235], [45, 236], [46, 208], [47, 209], [48, 210], [48, 238], [48, 237], [49, 233], [49, 211], [50, 239], [50, 212], [50, 240], [51, 213], [51, 226], [52, 246], [52, 247], [53, 253], [53, 254], [54, 260], [54, 261], [55, 267], [55, 268], [56, 271], [57, 270], [58, 274], [58, 275], [59, 280], [59, 281], [59, 282], [60, 287], [60, 288], [60, 289], [61, 290], [61, 273], [61, 292], [62, 297], [62, 291], [62, 298], [63, 306], [63, 307], [63, 304], [64, 314], [64, 315], [64, 313], [67, 310], [68, 302], [69, 328], [70, 327], [71, 333], [71, 334], [71, 335], [72, 340], [72, 341], [72, 342], [75, 348], [76, 349], [77, 350], [78, 351], [79, 347], [80, 354], [81, 352], [82, 362], [82, 363], [83, 369], [83, 370], [84, 376], [84, 377], [85, 383], [85, 384], [87, 385], [88, 390], [88, 387], [89, 391], [89, 392], [90, 393], [90, 398], [90, 399], [90, 400], [91, 401], [91, 406], [91, 407], [91, 408], [92, 414], [92, 415], [92, 416], [92, 413], [93, 389], [93, 422], [93, 418], [93, 423], [94, 427], [94, 426], [95, 424], [95, 429], [96, 435], [96, 436], [97, 441], [97, 442], [100, 448], [101, 447], [102, 451], [103, 452], [104, 453], [105, 454], [106, 450], [107, 458], [107, 456], [108, 457], [108, 460], [109, 463], [109, 464], [109, 467], [109, 468], [110, 465], [110, 469], [111, 470], [111, 466], [112, 472], [112, 476], [112, 475], [112, 477], [113, 473], [113, 478], [114, 474], [114, 479], [115, 481], [115, 482], [115, 485], [115, 486], [116, 487], [116, 483], [117, 484], [117, 488], [118, 494], [118, 491], [118, 492], [118, 495], [119, 490], [119, 496], [120, 497], [120, 493], [121, 501], [121, 504], [121, 505], [121, 506], [121, 507], [122, 510], [122, 508], [122, 509], [122, 502], [122, 503], [125, 516], [125, 512], [125, 517], [125, 515], [126, 518], [127, 520], [128, 519], [129, 514], [130, 513], [131, 522], [131, 523], [131, 524], [131, 525], [131, 526], [132, 528], [132, 529], [132, 530], [132, 531], [132, 532], [133, 534], [133, 535], [133, 536], [133, 537], [133, 538], [134, 540], [134, 541], [134, 542], [134, 543], [134, 544], [135, 549], [135, 546], [135, 547], [135, 550], [136, 548], [136, 545], [137, 554], [137, 555], [137, 556], [139, 561], [139, 552], [139, 559], [139, 562], [138, 553], [138, 558], [138, 563], [138, 560], [140, 564], [140, 567], [140, 566], [141, 568]],
'SRC-C|include|SRC-T': [[0, 41], [1, 20], [2, 19], [3, 28], [4, 26], [5, 35], [6, 33], [7, 40], [8, 42], [9, 14], [10, 56], [11, 61], [12, 55], [13, 65], [14, 62], [15, 66], [16, 91], [17, 92], [18, 85], [19, 86], [20, 79], [21, 77], [22, 98], [23, 99], [24, 120], [25, 108], [26, 117], [27, 125], [28, 126], [29, 122], [30, 123], [31, 143], [32, 144], [33, 150], [34, 152], [35, 158], [36, 160], [37, 167], [38, 168], [39, 172], [40, 182], [41, 192], [42, 181], [43, 190], [44, 191], [45, 193], [46, 194], [47, 227], [48, 234], [49, 246], [50, 247], [51, 253], [52, 254], [53, 260], [54, 261], [55, 267], [56, 268], [57, 281], [58, 280], [59, 288], [60, 289], [61, 298], [62, 297], [63, 299], [64, 306], [65, 315], [66, 318], [67, 319], [68, 307], [69, 314], [70, 320], [71, 321], [72, 343], [73, 334], [74, 335], [75, 340], [76, 341], [77, 356], [78, 362], [79, 363], [80, 369], [81, 370], [82, 376], [83, 377], [84, 384], [85, 383], [86, 423], [87, 422], [88, 416], [89, 415], [90, 398], [91, 407], [92, 406], [93, 400], [94, 430], [95, 435], [96, 441], [97, 436], [98, 442], [99, 445], [100, 461], [101, 498]],
'SRC-C|noinclude|SRC-T': [[0, 43], [0, 44], [1, 17], [1, 18], [2, 15], [2, 16], [3, 22], [3, 25], [4, 23], [4, 24], [5, 31], [5, 32], [6, 29], [6, 30], [7, 36], [7, 38], [8, 37], [8, 39], [9, 49], [9, 50], [10, 57], [10, 60], [11, 53], [11, 54], [12, 63], [12, 65], [13, 51], [13, 52], [14, 66], [14, 64], [15, 58], [15, 59], [16, 87], [16, 89], [17, 88], [17, 90], [18, 80], [18, 81], [19, 83], [19, 82], [20, 74], [20, 75], [21, 73], [21, 76], [22, 94], [22, 95], [23, 96], [23, 97], [24, 103], [24, 111], [25, 121], [25, 122], [26, 123], [26, 124], [27, 112], [27, 113], [28, 104], [28, 106], [29, 107], [29, 105], [30, 115], [30, 114], [31, 139], [31, 138], [32, 137], [32, 140], [33, 145], [33, 147], [34, 146], [34, 148], [35, 157], [35, 156], [36, 153], [36, 154], [37, 161], [37, 162], [38, 164], [38, 163], [39, 173], [39, 174], [40, 183], [40, 187], [41, 176], [41, 179], [42, 193], [42, 180], [43, 185], [43, 194], [44, 186], [44, 195], [45, 196], [45, 177], [46, 200], [46, 189], [47, 230], [47, 231], [48, 225], [48, 224], [49, 242], [49, 243], [50, 244], [50, 245], [51, 250], [51, 249], [52, 251], [52, 252], [53, 256], [53, 257], [54, 258], [54, 259], [55, 265], [55, 266], [56, 263], [56, 264], [57, 278], [57, 279], [58, 276], [58, 277], [59, 284], [59, 285], [60, 283], [60, 286], [61, 294], [61, 296], [62, 293], [62, 295], [63, 305], [63, 311], [64, 300], [64, 316], [65, 308], [65, 317], [66, 309], [66, 312], [67, 303], [67, 301], [68, 320], [68, 318], [69, 319], [69, 321], [70, 322], [70, 323], [71, 324], [71, 325], [72, 330], [72, 336], [73, 344], [73, 331], [74, 338], [74, 337], [75, 329], [75, 332], [76, 345], [76, 339], [77, 355], [77, 353], [78, 358], [78, 360], [79, 357], [79, 359], [80, 365], [80, 366], [81, 368], [81, 367], [82, 371], [82, 373], [83, 374], [83, 375], [84, 381], [84, 382], [85, 378], [85, 379], [86, 417], [86, 419], [87, 420], [87, 421], [88, 409], [88, 412], [89, 410], [89, 411], [90, 394], [90, 396], [91, 402], [91, 405], [92, 404], [92, 403], [93, 395], [93, 397], [94, 428], [94, 425], [95, 437], [95, 440], [96, 431], [96, 432], [97, 433], [97, 443], [98, 444], [98, 439], [99, 438], [99, 434], [100, 459], [100, 455], [101, 499], [101, 500]],
'SRC-T|target|SRC-A': [[0, 0], [13, 1], [2, 0], [21, 2], [27, 3], [8, 0], [34, 4], [7, 0], [3, 0], [43, 5], [44, 6], [46, 5], [47, 6], [11, 0], [4, 0], [45, 5], [48, 6], [1, 0], [10, 0], [17, 1], [18, 1], [15, 1], [16, 1], [22, 2], [25, 2], [23, 2], [24, 2], [31, 3], [32, 3], [29, 3], [30, 3], [36, 4], [38, 4], [37, 4], [39, 4], [49, 8], [50, 7], [12, 0], [5, 0], [57, 8], [60, 8], [53, 7], [54, 7], [9, 0], [6, 0], [63, 9], [51, 7], [52, 7], [64, 10], [58, 8], [59, 8], [69, 12], [72, 14], [102, 19], [100, 18], [101, 18], [78, 15], [84, 16], [93, 17], [70, 13], [71, 13], [87, 16], [89, 16], [88, 16], [90, 16], [80, 15], [81, 15], [83, 15], [82, 15], [74, 14], [75, 14], [73, 14], [76, 14], [94, 17], [95, 17], [96, 17], [97, 17], [67, 11], [109, 25], [116, 26], [119, 24], [103, 20], [111, 21], [121, 22], [124, 23], [112, 21], [113, 21], [104, 20], [106, 20], [107, 20], [105, 20], [115, 21], [114, 21], [68, 11], [132, 29], [134, 29], [136, 30], [135, 29], [131, 28], [142, 31], [141, 30], [151, 32], [149, 31], [155, 32], [159, 33], [166, 34], [165, 33], [169, 34], [170, 34], [171, 34], [133, 29], [139, 30], [138, 30], [137, 30], [140, 30], [145, 31], [147, 31], [146, 31], [148, 31], [157, 32], [156, 32], [153, 32], [154, 32], [161, 33], [162, 33], [164, 33], [163, 33], [129, 27], [130, 27], [173, 35], [174, 36], [175, 35], [178, 35], [184, 36], [188, 36], [183, 36], [187, 36], [176, 35], [179, 35], [180, 35], [185, 36], [186, 36], [195, 38], [197, 37], [198, 37], [199, 37], [196, 37], [177, 35], [201, 38], [202, 38], [203, 38], [200, 38], [189, 36], [204, 39], [214, 40], [215, 44], [217, 41], [216, 40], [241, 52], [242, 52], [243, 52], [244, 52], [245, 52], [218, 41], [219, 42], [248, 53], [250, 53], [249, 53], [251, 53], [252, 53], [221, 43], [220, 42], [255, 54], [256, 54], [257, 54], [258, 54], [259, 54], [205, 39], [222, 43], [262, 55], [265, 55], [266, 55], [263, 55], [264, 55], [223, 44], [206, 39], [228, 46], [229, 48], [230, 45], [231, 45], [207, 39], [232, 45], [235, 47], [236, 50], [225, 44], [224, 44], [208, 39], [209, 39], [210, 39], [238, 49], [237, 48], [233, 45], [211, 39], [239, 50], [212, 39], [240, 51], [213, 39], [226, 44], [269, 56], [271, 57], [272, 58], [274, 59], [282, 60], [287, 62], [290, 61], [273, 58], [292, 61], [291, 61], [278, 59], [279, 59], [276, 59], [277, 59], [284, 60], [285, 60], [283, 60], [286, 60], [294, 62], [296, 62], [293, 62], [295, 62], [270, 56], [304, 63], [313, 64], [305, 63], [311, 64], [300, 63], [316, 65], [308, 64], [317, 66], [309, 64], [312, 64], [303, 63], [301, 63], [310, 64], [302, 63], [322, 67], [323, 67], [324, 68], [325, 68], [326, 70], [328, 70], [333, 74], [342, 74], [330, 71], [336, 72], [344, 73], [331, 71], [338, 72], [337, 72], [329, 71], [332, 71], [345, 73], [339, 72], [327, 69], [348, 76], [354, 81], [352, 80], [355, 81], [353, 80], [349, 77], [361, 82], [358, 82], [360, 82], [357, 82], [359, 82], [346, 75], [350, 78], [364, 83], [365, 83], [366, 83], [368, 83], [367, 83], [351, 79], [372, 84], [371, 84], [373, 84], [374, 84], [375, 84], [347, 75], [380, 85], [381, 85], [382, 85], [378, 85], [379, 85], [390, 89], [387, 87], [391, 89], [392, 90], [427, 95], [426, 94], [424, 94], [429, 95], [428, 95], [425, 94], [393, 90], [399, 91], [401, 91], [408, 92], [414, 93], [413, 92], [389, 88], [418, 93], [388, 88], [417, 93], [419, 93], [420, 93], [421, 93], [409, 92], [412, 92], [410, 92], [411, 92], [394, 90], [396, 90], [402, 91], [405, 91], [404, 91], [403, 91], [395, 90], [397, 90], [385, 86], [437, 97], [440, 97], [431, 96], [432, 96], [433, 96], [443, 98], [444, 99], [439, 97], [438, 97], [434, 96], [386, 86], [446, 100], [448, 101], [451, 103], [458, 108], [456, 107], [457, 107], [460, 108], [459, 108], [455, 107], [449, 102], [452, 104], [462, 109], [463, 109], [464, 109], [467, 110], [468, 111], [465, 109], [469, 110], [470, 111], [466, 109], [453, 105], [471, 112], [472, 112], [476, 113], [475, 112], [477, 114], [473, 112], [478, 113], [474, 112], [479, 114], [454, 106], [480, 115], [481, 115], [482, 115], [485, 116], [486, 117], [487, 116], [483, 115], [484, 115], [488, 117], [450, 102], [489, 118], [494, 119], [491, 118], [492, 118], [495, 120], [490, 118], [496, 119], [497, 120], [493, 118], [447, 100], [499, 122], [500, 121], [501, 121], [504, 121], [505, 122], [506, 122], [507, 124], [510, 123], [508, 122], [509, 122], [502, 121], [503, 121], [516, 130], [512, 125], [517, 126], [515, 125], [511, 125], [518, 128], [521, 131], [522, 131], [523, 131], [524, 131], [525, 131], [526, 131], [520, 129], [527, 132], [528, 132], [529, 132], [530, 132], [531, 132], [532, 132], [519, 127], [533, 133], [534, 133], [535, 133], [536, 133], [537, 133], [538, 133], [514, 125], [539, 134], [540, 134], [541, 134], [542, 134], [543, 134], [544, 134], [513, 125], [549, 138], [546, 135], [547, 135], [550, 139], [548, 135], [545, 135], [557, 139], [561, 138], [552, 137], [559, 139], [562, 138], [553, 137], [558, 139], [563, 138], [560, 139], [564, 140], [567, 141], [566, 140], [565, 140], [568, 141], [551, 136], [554, 137], [555, 137], [556, 137]],
'SRC-T|try|SRC-E': [[0, 0], [101, 3], [71, 2], [119, 4], [68, 1], [132, 6], [129, 5], [172, 7], [204, 8], [241, 9], [248, 10], [255, 11], [262, 12], [269, 13], [272, 14], [299, 15], [326, 16], [343, 17], [356, 19], [361, 20], [346, 18], [364, 21], [372, 22], [380, 23], [430, 26], [388, 25], [445, 27], [386, 24], [446, 28], [461, 30], [449, 29], [462, 31], [471, 32], [480, 33], [489, 34], [498, 35], [511, 36], [521, 37], [527, 38], [533, 39], [539, 40], [557, 42], [565, 43], [551, 41]],
'SRC-T|try|SRC-A': [[13, 0], [14, 0], [19, 1], [20, 1], [2, 1], [21, 1], [26, 2], [27, 2], [8, 2], [28, 2], [33, 3], [34, 3], [35, 3], [7, 3], [40, 4], [41, 4], [3, 4], [42, 4], [46, 5], [47, 5], [11, 5], [4, 5], [45, 6], [48, 6], [1, 6], [10, 6], [55, 7], [56, 7], [12, 7], [61, 8], [62, 8], [5, 8], [9, 9], [6, 10], [69, 11], [72, 13], [102, 18], [100, 19], [77, 14], [78, 14], [79, 14], [84, 15], [85, 15], [86, 15], [91, 16], [92, 16], [93, 16], [70, 17], [98, 17], [99, 17], [67, 12], [108, 20], [109, 20], [110, 20], [116, 21], [117, 21], [118, 21], [127, 22], [128, 23], [120, 24], [125, 25], [126, 26], [134, 29], [136, 29], [135, 29], [131, 29], [142, 30], [143, 30], [144, 30], [141, 30], [150, 31], [151, 31], [152, 31], [149, 31], [158, 32], [155, 32], [159, 32], [160, 32], [166, 33], [167, 33], [168, 33], [165, 33], [169, 34], [170, 34], [171, 34], [133, 34], [130, 28], [175, 35], [181, 35], [182, 35], [178, 35], [190, 36], [184, 36], [188, 36], [191, 36], [192, 36], [197, 37], [198, 37], [199, 37], [201, 38], [202, 38], [203, 38], [214, 39], [215, 39], [217, 40], [216, 40], [246, 52], [247, 52], [218, 41], [219, 41], [253, 53], [254, 53], [221, 42], [220, 42], [260, 54], [261, 54], [205, 43], [222, 43], [267, 55], [268, 55], [223, 44], [227, 44], [206, 44], [228, 44], [229, 44], [207, 45], [232, 45], [234, 45], [235, 45], [236, 45], [208, 46], [209, 47], [210, 48], [238, 48], [237, 48], [233, 49], [211, 49], [239, 50], [212, 50], [240, 50], [213, 51], [226, 51], [271, 56], [274, 58], [275, 58], [280, 59], [281, 59], [282, 59], [287, 60], [288, 60], [289, 60], [290, 61], [273, 61], [292, 61], [297, 62], [291, 62], [298, 62], [270, 57], [306, 63], [307, 63], [304, 63], [314, 64], [315, 64], [313, 64], [310, 67], [302, 68], [328, 69], [333, 71], [334, 71], [335, 71], [340, 72], [341, 72], [342, 72], [327, 70], [348, 75], [354, 80], [352, 81], [349, 76], [362, 82], [363, 82], [350, 77], [369, 83], [370, 83], [351, 78], [376, 84], [377, 84], [347, 79], [383, 85], [384, 85], [390, 88], [387, 88], [391, 89], [392, 89], [427, 94], [426, 94], [424, 95], [429, 95], [393, 90], [398, 90], [399, 90], [400, 90], [401, 91], [406, 91], [407, 91], [408, 91], [414, 92], [415, 92], [416, 92], [413, 92], [389, 93], [422, 93], [418, 93], [423, 93], [385, 87], [435, 96], [436, 96], [441, 97], [442, 97], [448, 100], [451, 102], [458, 107], [456, 107], [457, 108], [460, 108], [452, 103], [463, 109], [464, 109], [467, 109], [468, 109], [465, 110], [469, 110], [470, 111], [466, 111], [453, 104], [472, 112], [476, 112], [475, 112], [477, 112], [473, 113], [478, 113], [474, 114], [479, 114], [454, 105], [481, 115], [482, 115], [485, 115], [486, 115], [487, 116], [483, 116], [484, 117], [488, 117], [450, 106], [494, 118], [491, 118], [492, 118], [495, 118], [490, 119], [496, 119], [497, 120], [493, 120], [447, 101], [501, 121], [504, 121], [505, 121], [506, 121], [507, 121], [510, 122], [508, 122], [509, 122], [502, 122], [503, 122], [516, 125], [512, 125], [517, 125], [515, 125], [518, 126], [522, 131], [523, 131], [524, 131], [525, 131], [526, 131], [520, 127], [528, 132], [529, 132], [530, 132], [531, 132], [532, 132], [519, 128], [534, 133], [535, 133], [536, 133], [537, 133], [538, 133], [514, 129], [540, 134], [541, 134], [542, 134], [543, 134], [544, 134], [513, 130], [549, 135], [546, 135], [547, 135], [550, 135], [548, 136], [545, 136], [561, 139], [552, 139], [559, 139], [562, 139], [553, 138], [558, 138], [563, 138], [560, 138], [564, 140], [567, 140], [566, 140], [568, 141], [554, 137], [555, 137], [556, 137]],
'SRC-T|target|SRC-C': [[14, 9], [19, 2], [20, 1], [26, 4], [28, 3], [33, 6], [35, 5], [40, 7], [41, 0], [42, 8], [55, 12], [56, 10], [61, 11], [62, 14], [65, 13], [66, 15], [77, 21], [79, 20], [85, 18], [86, 19], [91, 16], [92, 17], [98, 22], [99, 23], [108, 25], [117, 26], [122, 29], [123, 30], [120, 24], [125, 27], [126, 28], [143, 31], [144, 32], [150, 33], [152, 34], [158, 35], [160, 36], [167, 37], [168, 38], [172, 39], [181, 42], [182, 40], [190, 43], [191, 44], [192, 41], [193, 45], [194, 46], [246, 49], [247, 50], [253, 51], [254, 52], [260, 53], [261, 54], [267, 55], [268, 56], [227, 47], [234, 48], [280, 58], [281, 57], [288, 59], [289, 60], [297, 62], [298, 61], [299, 63], [306, 64], [307, 68], [314, 69], [315, 65], [320, 70], [318, 66], [319, 67], [321, 71], [334, 73], [335, 74], [340, 75], [341, 76], [343, 72], [356, 77], [362, 78], [363, 79], [369, 80], [370, 81], [376, 82], [377, 83], [383, 85], [384, 84], [430, 94], [398, 90], [400, 93], [406, 92], [407, 91], [415, 89], [416, 88], [422, 87], [423, 86], [435, 95], [436, 97], [441, 96], [442, 98], [445, 99], [461, 100], [498, 101]],
'SRC-T|try|SRC-C': [[43, 0], [44, 0], [17, 1], [18, 1], [15, 2], [16, 2], [22, 3], [25, 3], [23, 4], [24, 4], [31, 5], [32, 5], [29, 6], [30, 6], [36, 7], [38, 7], [37, 8], [39, 8], [49, 9], [50, 9], [57, 10], [60, 10], [53, 11], [54, 11], [63, 12], [65, 12], [51, 13], [52, 13], [66, 14], [64, 14], [58, 15], [59, 15], [87, 16], [89, 16], [88, 17], [90, 17], [80, 18], [81, 18], [83, 19], [82, 19], [74, 20], [75, 20], [73, 21], [76, 21], [94, 22], [95, 22], [96, 23], [97, 23], [103, 24], [111, 24], [121, 25], [122, 25], [123, 26], [124, 26], [112, 27], [113, 27], [104, 28], [106, 28], [107, 29], [105, 29], [115, 30], [114, 30], [139, 31], [138, 31], [137, 32], [140, 32], [145, 33], [147, 33], [146, 34], [148, 34], [157, 35], [156, 35], [153, 36], [154, 36], [161, 37], [162, 37], [164, 38], [163, 38], [173, 39], [174, 39], [183, 40], [187, 40], [176, 41], [179, 41], [193, 42], [180, 42], [185, 43], [194, 43], [186, 44], [195, 44], [196, 45], [177, 45], [200, 46], [189, 46], [242, 49], [243, 49], [244, 50], [245, 50], [250, 51], [249, 51], [251, 52], [252, 52], [256, 53], [257, 53], [258, 54], [259, 54], [265, 55], [266, 55], [263, 56], [264, 56], [230, 47], [231, 47], [225, 48], [224, 48], [278, 57], [279, 57], [276, 58], [277, 58], [284, 59], [285, 59], [283, 60], [286, 60], [294, 61], [296, 61], [293, 62], [295, 62], [305, 63], [311, 63], [300, 64], [316, 64], [308, 65], [317, 65], [309, 66], [312, 66], [303, 67], [301, 67], [320, 68], [318, 68], [319, 69], [321, 69], [322, 70], [323, 70], [324, 71], [325, 71], [330, 72], [336, 72], [344, 73], [331, 73], [338, 74], [337, 74], [329, 75], [332, 75], [345, 76], [339, 76], [355, 77], [353, 77], [358, 78], [360, 78], [357, 79], [359, 79], [365, 80], [366, 80], [368, 81], [367, 81], [371, 82], [373, 82], [374, 83], [375, 83], [381, 84], [382, 84], [378, 85], [379, 85], [428, 94], [425, 94], [417, 86], [419, 86], [420, 87], [421, 87], [409, 88], [412, 88], [410, 89], [411, 89], [394, 90], [396, 90], [402, 91], [405, 91], [404, 92], [403, 92], [395, 93], [397, 93], [437, 95], [440, 95], [431, 96], [432, 96], [433, 97], [443, 97], [444, 98], [439, 98], [438, 99], [434, 99], [459, 100], [455, 100], [499, 101], [500, 101]],
'TGT-T|try|TGT-B': [[0, 0], [1, 1], [2, 1], [3, 2], [4, 2], [5, 2], [6, 2], [7, 6], [8, 6], [9, 6], [10, 6], [11, 8], [12, 8], [13, 8], [14, 8], [15, 11], [16, 11], [17, 11], [18, 11], [19, 14], [20, 14], [21, 16], [22, 16], [23, 16], [24, 16], [25, 17], [26, 17], [27, 17], [28, 17], [29, 5], [30, 5], [31, 4], [32, 4], [33, 9], [34, 9], [35, 7], [36, 7], [37, 12], [38, 12], [39, 10], [40, 10], [41, 13], [42, 13], [43, 15], [44, 15], [45, 3], [46, 3], [47, 19], [48, 19], [49, 19], [50, 18], [51, 18], [52, 18], [53, 21], [54, 21], [55, 22], [56, 22], [57, 24], [58, 25], [59, 20], [60, 20], [61, 26], [62, 26], [63, 23], [64, 23], [65, 27], [66, 27], [67, 28], [68, 30], [69, 32], [70, 33], [71, 34], [72, 31], [73, 31], [74, 31], [75, 36], [76, 36], [77, 36], [78, 38], [79, 38], [80, 38], [81, 43], [82, 43], [83, 43], [84, 46], [85, 41], [86, 41], [87, 42], [88, 42], [89, 39], [90, 39], [91, 40], [92, 40], [93, 37], [94, 37], [95, 35], [96, 35], [97, 44], [98, 44], [99, 45], [100, 45], [101, 29], [102, 47], [103, 47], [104, 47], [105, 51], [106, 51], [107, 51], [108, 54], [109, 56], [110, 56], [111, 48], [112, 48], [113, 53], [114, 53], [115, 61], [116, 61], [117, 62], [118, 62], [119, 58], [120, 58], [121, 59], [122, 59], [123, 57], [124, 60], [125, 55], [126, 49], [127, 52], [128, 63], [129, 64], [130, 65], [131, 65], [132, 65], [133, 65], [134, 66], [135, 66], [136, 66], [137, 66], [138, 68], [139, 68], [140, 68], [141, 68], [142, 72], [143, 72], [144, 72], [145, 72], [146, 75], [147, 75], [148, 75], [149, 75], [150, 77], [151, 77], [152, 77], [153, 77], [154, 69], [155, 69], [156, 70], [157, 70], [158, 71], [159, 71], [160, 73], [161, 73], [162, 74], [163, 74], [164, 76], [165, 76], [166, 78], [167, 78], [168, 79], [169, 79], [170, 80], [171, 67], [172, 82], [173, 83], [174, 83], [175, 84], [176, 84], [177, 84], [178, 84], [179, 85], [180, 85], [181, 85], [182, 85], [183, 85], [184, 87], [185, 87], [186, 90], [187, 90], [188, 86], [189, 86], [190, 88], [191, 88], [192, 89], [193, 89], [194, 94], [195, 94], [196, 94], [197, 91], [198, 91], [199, 93], [200, 93], [201, 93], [202, 92], [203, 92], [204, 95], [205, 96], [206, 96], [207, 97], [208, 97], [209, 100], [210, 100], [211, 103], [212, 101], [213, 101], [214, 102], [215, 102], [216, 99], [217, 99], [218, 105], [219, 106], [220, 106], [221, 107], [222, 107], [223, 108], [224, 108], [225, 104], [226, 104], [227, 110], [228, 111], [229, 111], [230, 112], [231, 112], [232, 113], [233, 113], [234, 109], [235, 109], [236, 114], [237, 115], [238, 115], [239, 116], [240, 116], [241, 117], [242, 117], [243, 98], [244, 98], [245, 98], [246, 98], [247, 98], [248, 118], [249, 118], [250, 121], [251, 121], [252, 121], [253, 121], [254, 121], [255, 122], [256, 122], [257, 119], [258, 123], [259, 120], [260, 120], [261, 120], [262, 125], [263, 125], [264, 124], [265, 124], [266, 124], [267, 126], [268, 126], [269, 127], [270, 128], [271, 130], [272, 131], [273, 131], [274, 132], [275, 132], [276, 132], [277, 136], [278, 136], [279, 136], [280, 140], [281, 140], [282, 140], [283, 137], [284, 137], [285, 137], [286, 135], [287, 135], [288, 134], [289, 134], [290, 138], [291, 138], [292, 139], [293, 139], [294, 142], [295, 142], [296, 141], [297, 141], [298, 129], [299, 143], [300, 145], [301, 145], [302, 145], [303, 148], [304, 148], [305, 148], [306, 144], [307, 144], [308, 146], [309, 146], [310, 150], [311, 150], [312, 153], [313, 153], [314, 154], [315, 154], [316, 147], [317, 147], [318, 149], [319, 149], [320, 157], [321, 158], [322, 155], [323, 155], [324, 156], [325, 156], [326, 159], [327, 161], [328, 162], [329, 162], [330, 162], [331, 166], [332, 166], [333, 166], [334, 169], [335, 169], [336, 170], [337, 164], [338, 164], [339, 165], [340, 165], [341, 167], [342, 167], [343, 168], [344, 168], [345, 160], [346, 172], [347, 174], [348, 175], [349, 176], [350, 176], [351, 177], [352, 173], [353, 179], [354, 179], [355, 182], [356, 180], [357, 180], [358, 181], [359, 181], [360, 183], [361, 178], [362, 185], [363, 185], [364, 188], [365, 186], [366, 186], [367, 187], [368, 187], [369, 184], [370, 190], [371, 190], [372, 193], [373, 191], [374, 191], [375, 192], [376, 192], [377, 189], [378, 194], [379, 194], [380, 197], [381, 196], [382, 196], [383, 195], [384, 195], [385, 198], [386, 198], [387, 199], [388, 199], [389, 202], [390, 202], [391, 203], [392, 203], [393, 204], [394, 204], [395, 205], [396, 201], [397, 201], [398, 201], [399, 201], [400, 207], [401, 207], [402, 207], [403, 207], [404, 211], [405, 211], [406, 211], [407, 211], [408, 212], [409, 212], [410, 212], [411, 212], [412, 217], [413, 216], [414, 216], [415, 215], [416, 215], [417, 214], [418, 214], [419, 213], [420, 213], [421, 206], [422, 206], [423, 210], [424, 210], [425, 209], [426, 209], [427, 208], [428, 208], [429, 200], [430, 219], [431, 219], [432, 222], [433, 222], [434, 220], [435, 220], [436, 223], [437, 223], [438, 221], [439, 221], [440, 224], [441, 224], [442, 227], [443, 227], [444, 228], [445, 229], [446, 230], [447, 231], [448, 233], [449, 235], [450, 235], [451, 236], [452, 236], [453, 237], [454, 238], [455, 238], [456, 239], [457, 234], [458, 241], [459, 242], [460, 242], [461, 242], [462, 242], [463, 243], [464, 243], [465, 244], [466, 244], [467, 240], [468, 246], [469, 247], [470, 247], [471, 247], [472, 247], [473, 248], [474, 248], [475, 249], [476, 249], [477, 245], [478, 251], [479, 252], [480, 252], [481, 252], [482, 252], [483, 253], [484, 253], [485, 254], [486, 254], [487, 250], [488, 255], [489, 256], [490, 256], [491, 256], [492, 256], [493, 257], [494, 257], [495, 258], [496, 258], [497, 232], [498, 259], [499, 260], [500, 260], [501, 262], [502, 262], [503, 262], [504, 262], [505, 262], [506, 261], [507, 261], [508, 261], [509, 261], [510, 261], [511, 265], [512, 265], [513, 265], [514, 265], [515, 268], [516, 267], [517, 270], [518, 271], [519, 271], [520, 271], [521, 271], [522, 271], [523, 272], [524, 274], [525, 275], [526, 275], [527, 275], [528, 275], [529, 275], [530, 269], [531, 276], [532, 277], [533, 277], [534, 277], [535, 277], [536, 277], [537, 273], [538, 278], [539, 279], [540, 279], [541, 279], [542, 279], [543, 279], [544, 266], [545, 280], [546, 280], [547, 280], [548, 280], [549, 283], [550, 283], [551, 284], [552, 282], [553, 282], [554, 282], [555, 282], [556, 281], [557, 281], [558, 281], [559, 281], [560, 286], [561, 286], [562, 286], [563, 288], [564, 287], [565, 289], [566, 285], [567, 285], [568, 285]],
'TGT-T|target|TGT-B': [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 1], [6, 6], [7, 7], [8, 8], [9, 1], [10, 9], [11, 10], [12, 11], [13, 12], [14, 1], [15, 13], [16, 14], [17, 1], [18, 15], [19, 16], [20, 17], [21, 16], [22, 17], [23, 1], [24, 1], [25, 16], [26, 17], [27, 1], [28, 1], [29, 2], [30, 2], [31, 2], [32, 2], [33, 6], [34, 6], [35, 6], [36, 6], [37, 8], [38, 8], [39, 8], [40, 8], [41, 11], [42, 11], [43, 11], [44, 11], [45, 18], [46, 19], [47, 20], [48, 21], [49, 1], [50, 22], [51, 23], [52, 1], [53, 18], [54, 18], [55, 19], [56, 19], [57, 1], [58, 1], [59, 24], [60, 26], [61, 19], [62, 19], [63, 27], [64, 25], [65, 18], [66, 18], [67, 29], [68, 31], [69, 33], [70, 32], [71, 32], [72, 35], [73, 36], [74, 37], [75, 38], [76, 39], [77, 40], [78, 41], [79, 42], [80, 43], [81, 30], [82, 44], [83, 45], [84, 30], [85, 38], [86, 38], [87, 38], [88, 38], [89, 36], [90, 36], [91, 36], [92, 36], [93, 31], [94, 31], [95, 31], [96, 31], [97, 43], [98, 43], [99, 43], [100, 43], [101, 28], [102, 48], [103, 49], [104, 50], [105, 52], [106, 53], [107, 50], [108, 55], [109, 47], [110, 51], [111, 57], [112, 58], [113, 59], [114, 60], [115, 51], [116, 51], [117, 47], [118, 47], [119, 47], [120, 47], [121, 51], [122, 51], [123, 50], [124, 50], [125, 56], [126, 61], [127, 62], [128, 28], [129, 65], [130, 65], [131, 66], [132, 65], [133, 67], [134, 68], [135, 69], [136, 70], [137, 66], [138, 71], [139, 72], [140, 73], [141, 68], [142, 74], [143, 72], [144, 75], [145, 76], [146, 77], [147, 78], [148, 79], [149, 75], [150, 77], [151, 77], [152, 77], [153, 65], [154, 66], [155, 66], [156, 66], [157, 66], [158, 68], [159, 68], [160, 68], [161, 68], [162, 72], [163, 72], [164, 72], [165, 72], [166, 75], [167, 75], [168, 75], [169, 75], [170, 81], [171, 81], [172, 83], [173, 84], [174, 85], [175, 84], [176, 86], [177, 87], [178, 84], [179, 88], [180, 85], [181, 85], [182, 89], [183, 90], [184, 85], [185, 85], [186, 84], [187, 84], [188, 91], [189, 84], [190, 85], [191, 92], [192, 85], [193, 93], [194, 94], [195, 94], [196, 94], [197, 94], [198, 84], [199, 93], [200, 93], [201, 93], [202, 93], [203, 85], [204, 96], [205, 97], [206, 98], [207, 99], [208, 97], [209, 101], [210, 102], [211, 100], [212, 100], [213, 100], [214, 100], [215, 100], [216, 99], [217, 104], [218, 106], [219, 107], [220, 108], [221, 106], [222, 106], [223, 106], [224, 106], [225, 109], [226, 104], [227, 111], [228, 112], [229, 113], [230, 111], [231, 111], [232, 111], [233, 111], [234, 96], [235, 109], [236, 115], [237, 116], [238, 117], [239, 115], [240, 115], [241, 115], [242, 115], [243, 98], [244, 118], [245, 96], [246, 119], [247, 120], [248, 121], [249, 121], [250, 96], [251, 121], [252, 122], [253, 123], [254, 124], [255, 98], [256, 98], [257, 96], [258, 96], [259, 96], [260, 125], [261, 120], [262, 121], [263, 96], [264, 124], [265, 96], [266, 126], [267, 96], [268, 98], [269, 128], [270, 129], [271, 131], [272, 132], [273, 133], [274, 134], [275, 135], [276, 136], [277, 137], [278, 138], [279, 139], [280, 140], [281, 131], [282, 140], [283, 141], [284, 140], [285, 142], [286, 132], [287, 132], [288, 132], [289, 132], [290, 136], [291, 136], [292, 136], [293, 136], [294, 137], [295, 137], [296, 137], [297, 137], [298, 128], [299, 144], [300, 146], [301, 147], [302, 145], [303, 149], [304, 150], [305, 148], [306, 145], [307, 148], [308, 145], [309, 151], [310, 148], [311, 152], [312, 148], [313, 148], [314, 145], [315, 145], [316, 155], [317, 153], [318, 154], [319, 156], [320, 148], [321, 145], [322, 157], [323, 157], [324, 158], [325, 158], [326, 160], [327, 160], [328, 163], [329, 164], [330, 165], [331, 167], [332, 168], [333, 163], [334, 162], [335, 166], [336, 169], [337, 171], [338, 162], [339, 166], [340, 166], [341, 162], [342, 162], [343, 171], [344, 166], [345, 161], [346, 173], [347, 175], [348, 174], [349, 175], [350, 174], [351, 176], [352, 178], [353, 180], [354, 181], [355, 179], [356, 179], [357, 179], [358, 179], [359, 179], [360, 172], [361, 184], [362, 186], [363, 187], [364, 185], [365, 185], [366, 185], [367, 185], [368, 185], [369, 189], [370, 191], [371, 192], [372, 190], [373, 190], [374, 190], [375, 190], [376, 190], [377, 172], [378, 195], [379, 196], [380, 194], [381, 194], [382, 194], [383, 194], [384, 194], [385, 199], [386, 200], [387, 199], [388, 201], [389, 203], [390, 202], [391, 202], [392, 203], [393, 203], [394, 202], [395, 204], [396, 201], [397, 206], [398, 207], [399, 208], [400, 207], [401, 209], [402, 210], [403, 211], [404, 212], [405, 213], [406, 214], [407, 211], [408, 198], [409, 215], [410, 212], [411, 216], [412, 198], [413, 212], [414, 212], [415, 212], [416, 212], [417, 211], [418, 211], [419, 211], [420, 211], [421, 201], [422, 201], [423, 207], [424, 207], [425, 207], [426, 207], [427, 201], [428, 201], [429, 218], [430, 220], [431, 221], [432, 223], [433, 224], [434, 222], [435, 222], [436, 219], [437, 219], [438, 219], [439, 225], [440, 226], [441, 222], [442, 222], [443, 219], [444, 227], [445, 218], [446, 231], [447, 232], [448, 234], [449, 236], [450, 235], [451, 235], [452, 236], [453, 238], [454, 236], [455, 235], [456, 233], [457, 240], [458, 242], [459, 242], [460, 242], [461, 243], [462, 244], [463, 242], [464, 243], [465, 244], [466, 242], [467, 245], [468, 247], [469, 247], [470, 248], [471, 247], [472, 249], [473, 247], [474, 248], [475, 247], [476, 249], [477, 250], [478, 252], [479, 252], [480, 252], [481, 253], [482, 254], [483, 253], [484, 252], [485, 252], [486, 254], [487, 233], [488, 256], [489, 257], [490, 256], [491, 256], [492, 258], [493, 256], [494, 257], [495, 258], [496, 256], [497, 231], [498, 260], [499, 261], [500, 262], [501, 262], [502, 262], [503, 261], [504, 261], [505, 263], [506, 264], [507, 261], [508, 261], [509, 262], [510, 262], [511, 266], [512, 265], [513, 267], [514, 265], [515, 265], [516, 269], [517, 271], [518, 271], [519, 271], [520, 271], [521, 271], [522, 271], [523, 273], [524, 275], [525, 275], [526, 275], [527, 275], [528, 275], [529, 275], [530, 272], [531, 277], [532, 277], [533, 277], [534, 277], [535, 277], [536, 277], [537, 265], [538, 279], [539, 279], [540, 279], [541, 279], [542, 279], [543, 279], [544, 265], [545, 281], [546, 280], [547, 280], [548, 282], [549, 280], [550, 280], [551, 282], [552, 281], [553, 285], [554, 282], [555, 281], [556, 285], [557, 282], [558, 281], [559, 282], [560, 286], [561, 287], [562, 286], [563, 286], [564, 287], [565, 283], [566, 285], [567, 285], [568, 285]],
'TGT-Start|top|TGT-B': [[0, 0], [0, 1], [0, 2], [0, 6], [0, 8], [0, 11], [0, 14], [0, 16], [0, 17], [0, 5], [0, 4], [0, 9], [0, 7], [0, 12], [0, 10], [0, 13], [0, 15], [0, 3], [0, 19], [0, 18], [0, 21], [0, 22], [0, 24], [0, 25], [0, 20], [0, 26], [0, 23], [0, 27], [1, 28], [1, 29], [1, 63], [2, 81], [2, 80], [2, 67], [3, 95], [3, 96], [3, 97], [3, 99], [3, 104], [3, 109], [3, 98], [3, 118], [3, 121], [3, 122], [3, 119], [3, 123], [3, 120], [3, 125], [3, 124], [3, 126], [4, 127], [4, 128], [4, 129], [5, 159], [5, 161], [5, 160], [6, 218], [6, 200], [6, 229], [7, 230], [7, 231], [7, 232], [8, 265], [8, 268], [8, 267], [8, 272], [8, 269], [8, 273], [8, 266]],
'TGT-B|contains|TGT-Start': [[0, 0], [1, 0], [2, 0], [6, 0], [8, 0], [11, 0], [14, 0], [16, 0], [17, 0], [5, 0], [4, 0], [9, 0], [7, 0], [12, 0], [10, 0], [13, 0], [15, 0], [3, 0], [19, 0], [18, 0], [21, 0], [22, 0], [24, 0], [25, 0], [20, 0], [26, 0], [23, 0], [27, 0], [28, 1], [29, 1], [63, 1], [81, 2], [80, 2], [67, 2], [95, 3], [96, 3], [97, 3], [99, 3], [104, 3], [109, 3], [98, 3], [118, 3], [121, 3], [122, 3], [119, 3], [123, 3], [120, 3], [125, 3], [124, 3], [126, 3], [127, 4], [128, 4], [129, 4], [159, 5], [161, 5], [160, 5], [218, 6], [200, 6], [229, 6], [230, 7], [231, 7], [232, 7], [265, 8], [268, 8], [267, 8], [272, 8], [269, 8], [273, 8], [266, 8]],
'TGT-B|number|TGT-T': [[0, 0], [1, 1], [1, 2], [2, 3], [2, 4], [2, 5], [2, 6], [6, 7], [6, 8], [6, 9], [6, 10], [8, 11], [8, 12], [8, 13], [8, 14], [11, 15], [11, 16], [11, 17], [11, 18], [14, 19], [14, 20], [16, 21], [16, 22], [16, 23], [16, 24], [17, 25], [17, 26], [17, 27], [17, 28], [5, 29], [5, 30], [4, 31], [4, 32], [9, 33], [9, 34], [7, 35], [7, 36], [12, 37], [12, 38], [10, 39], [10, 40], [13, 41], [13, 42], [15, 43], [15, 44], [3, 45], [3, 46], [19, 47], [19, 48], [19, 49], [18, 50], [18, 51], [18, 52], [21, 53], [21, 54], [22, 55], [22, 56], [24, 57], [25, 58], [20, 59], [20, 60], [26, 61], [26, 62], [23, 63], [23, 64], [27, 65], [27, 66], [30, 68], [32, 69], [33, 70], [34, 71], [31, 72], [31, 73], [31, 74], [36, 75], [36, 76], [36, 77], [38, 78], [38, 79], [38, 80], [43, 81], [43, 82], [43, 83], [46, 84], [41, 85], [41, 86], [42, 87], [42, 88], [39, 89], [39, 90], [40, 91], [40, 92], [37, 93], [37, 94], [35, 95], [35, 96], [44, 97], [44, 98], [45, 99], [45, 100], [47, 102], [47, 103], [47, 104], [51, 105], [51, 106], [51, 107], [54, 108], [56, 109], [56, 110], [48, 111], [48, 112], [53, 113], [53, 114], [61, 115], [61, 116], [62, 117], [62, 118], [58, 119], [58, 120], [59, 121], [59, 122], [57, 123], [60, 124], [55, 125], [49, 126], [52, 127], [28, 67], [29, 101], [63, 128], [64, 129], [65, 130], [65, 131], [65, 132], [65, 133], [66, 134], [66, 135], [66, 136], [66, 137], [68, 138], [68, 139], [68, 140], [68, 141], [72, 142], [72, 143], [72, 144], [72, 145], [75, 146], [75, 147], [75, 148], [75, 149], [77, 150], [77, 151], [77, 152], [77, 153], [69, 154], [69, 155], [70, 156], [70, 157], [71, 158], [71, 159], [73, 160], [73, 161], [74, 162], [74, 163], [76, 164], [76, 165], [78, 166], [78, 167], [79, 168], [79, 169], [82, 172], [83, 173], [83, 174], [84, 175], [84, 176], [84, 177], [84, 178], [85, 179], [85, 180], [85, 181], [85, 182], [85, 183], [87, 184], [87, 185], [90, 186], [90, 187], [86, 188], [86, 189], [88, 190], [88, 191], [89, 192], [89, 193], [94, 194], [94, 195], [94, 196], [91, 197], [91, 198], [93, 199], [93, 200], [93, 201], [92, 202], [92, 203], [80, 170], [67, 171], [100, 209], [100, 210], [103, 211], [101, 212], [101, 213], [102, 214], [102, 215], [105, 218], [106, 219], [106, 220], [107, 221], [107, 222], [108, 223], [108, 224], [110, 227], [111, 228], [111, 229], [112, 230], [112, 231], [113, 232], [113, 233], [114, 236], [115, 237], [115, 238], [116, 239], [116, 240], [117, 241], [117, 242], [95, 204], [96, 205], [96, 206], [97, 207], [97, 208], [99, 216], [99, 217], [104, 225], [104, 226], [109, 234], [109, 235], [98, 243], [98, 244], [98, 245], [98, 246], [98, 247], [118, 248], [118, 249], [121, 250], [121, 251], [121, 252], [121, 253], [121, 254], [122, 255], [122, 256], [119, 257], [123, 258], [120, 259], [120, 260], [120, 261], [125, 262], [125, 263], [124, 264], [124, 265], [124, 266], [126, 267], [126, 268], [130, 271], [131, 272], [131, 273], [132, 274], [132, 275], [132, 276], [136, 277], [136, 278], [136, 279], [140, 280], [140, 281], [140, 282], [137, 283], [137, 284], [137, 285], [135, 286], [135, 287], [134, 288], [134, 289], [138, 290], [138, 291], [139, 292], [139, 293], [142, 294], [142, 295], [141, 296], [141, 297], [143, 299], [145, 300], [145, 301], [145, 302], [148, 303], [148, 304], [148, 305], [144, 306], [144, 307], [146, 308], [146, 309], [150, 310], [150, 311], [153, 312], [153, 313], [154, 314], [154, 315], [147, 316], [147, 317], [149, 318], [149, 319], [157, 320], [158, 321], [155, 322], [155, 323], [156, 324], [156, 325], [127, 269], [128, 270], [129, 298], [162, 328], [162, 329], [162, 330], [166, 331], [166, 332], [166, 333], [169, 334], [169, 335], [170, 336], [164, 337], [164, 338], [165, 339], [165, 340], [167, 341], [167, 342], [168, 343], [168, 344], [172, 346], [174, 347], [175, 348], [176, 349], [176, 350], [177, 351], [173, 352], [179, 353], [179, 354], [182, 355], [180, 356], [180, 357], [181, 358], [181, 359], [183, 360], [178, 361], [185, 362], [185, 363], [188, 364], [186, 365], [186, 366], [187, 367], [187, 368], [184, 369], [190, 370], [190, 371], [193, 372], [191, 373], [191, 374], [192, 375], [192, 376], [189, 377], [194, 378], [194, 379], [197, 380], [196, 381], [196, 382], [195, 383], [195, 384], [159, 326], [161, 327], [160, 345], [198, 385], [198, 386], [199, 387], [199, 388], [202, 389], [202, 390], [203, 391], [203, 392], [204, 393], [204, 394], [205, 395], [201, 396], [201, 397], [201, 398], [201, 399], [207, 400], [207, 401], [207, 402], [207, 403], [211, 404], [211, 405], [211, 406], [211, 407], [212, 408], [212, 409], [212, 410], [212, 411], [217, 412], [216, 413], [216, 414], [215, 415], [215, 416], [214, 417], [214, 418], [213, 419], [213, 420], [206, 421], [206, 422], [210, 423], [210, 424], [209, 425], [209, 426], [208, 427], [208, 428], [219, 430], [219, 431], [222, 432], [222, 433], [220, 434], [220, 435], [223, 436], [223, 437], [221, 438], [221, 439], [224, 440], [224, 441], [227, 442], [227, 443], [228, 444], [200, 429], [229, 445], [233, 448], [235, 449], [235, 450], [236, 451], [236, 452], [237, 453], [238, 454], [238, 455], [239, 456], [234, 457], [241, 458], [242, 459], [242, 460], [242, 461], [242, 462], [243, 463], [243, 464], [244, 465], [244, 466], [240, 467], [246, 468], [247, 469], [247, 470], [247, 471], [247, 472], [248, 473], [248, 474], [249, 475], [249, 476], [245, 477], [251, 478], [252, 479], [252, 480], [252, 481], [252, 482], [253, 483], [253, 484], [254, 485], [254, 486], [250, 487], [255, 488], [256, 489], [256, 490], [256, 491], [256, 492], [257, 493], [257, 494], [258, 495], [258, 496], [259, 498], [260, 499], [260, 500], [262, 501], [262, 502], [262, 503], [262, 504], [262, 505], [261, 506], [261, 507], [261, 508], [261, 509], [261, 510], [230, 446], [231, 447], [232, 497], [270, 517], [271, 518], [271, 519], [271, 520], [271, 521], [271, 522], [274, 524], [275, 525], [275, 526], [275, 527], [275, 528], [275, 529], [276, 531], [277, 532], [277, 533], [277, 534], [277, 535], [277, 536], [278, 538], [279, 539], [279, 540], [279, 541], [279, 542], [279, 543], [280, 545], [280, 546], [280, 547], [280, 548], [283, 549], [283, 550], [284, 551], [282, 552], [282, 553], [282, 554], [282, 555], [281, 556], [281, 557], [281, 558], [281, 559], [286, 560], [286, 561], [286, 562], [288, 563], [287, 564], [289, 565], [285, 566], [285, 567], [285, 568], [265, 511], [265, 512], [265, 513], [265, 514], [268, 515], [267, 516], [272, 523], [269, 530], [273, 537], [266, 544]],
'TGT-B|nonumber|TGT-T': [[1, 0], [1, 5], [1, 9], [1, 14], [1, 17], [1, 23], [1, 24], [1, 27], [1, 28], [1, 49], [1, 52], [1, 57], [1, 58], [2, 1], [2, 29], [2, 30], [2, 31], [2, 32], [6, 6], [6, 33], [6, 34], [6, 35], [6, 36], [8, 8], [8, 37], [8, 38], [8, 39], [8, 40], [11, 12], [11, 41], [11, 42], [11, 43], [11, 44], [14, 16], [16, 19], [16, 21], [16, 25], [17, 20], [17, 22], [17, 26], [5, 4], [4, 3], [9, 10], [7, 7], [12, 13], [10, 11], [13, 15], [15, 18], [3, 2], [19, 46], [19, 55], [19, 56], [19, 61], [19, 62], [18, 45], [18, 53], [18, 54], [18, 65], [18, 66], [21, 48], [22, 50], [24, 59], [25, 64], [20, 47], [26, 60], [23, 51], [27, 63], [30, 81], [30, 84], [32, 70], [32, 71], [33, 69], [31, 68], [31, 93], [31, 94], [31, 95], [31, 96], [36, 73], [36, 89], [36, 90], [36, 91], [36, 92], [38, 75], [38, 85], [38, 86], [38, 87], [38, 88], [43, 80], [43, 97], [43, 98], [43, 99], [43, 100], [41, 78], [42, 79], [39, 76], [40, 77], [37, 74], [35, 72], [44, 82], [45, 83], [47, 109], [47, 117], [47, 118], [47, 119], [47, 120], [51, 110], [51, 115], [51, 116], [51, 121], [51, 122], [56, 125], [48, 102], [53, 106], [61, 126], [62, 127], [58, 112], [59, 113], [50, 104], [50, 107], [50, 123], [50, 124], [57, 111], [60, 114], [55, 108], [49, 103], [52, 105], [28, 101], [28, 128], [29, 67], [65, 129], [65, 130], [65, 132], [65, 153], [66, 131], [66, 137], [66, 154], [66, 155], [66, 156], [66, 157], [68, 134], [68, 141], [68, 158], [68, 159], [68, 160], [68, 161], [72, 139], [72, 143], [72, 162], [72, 163], [72, 164], [72, 165], [75, 144], [75, 149], [75, 166], [75, 167], [75, 168], [75, 169], [77, 146], [77, 150], [77, 151], [77, 152], [69, 135], [70, 136], [71, 138], [73, 140], [74, 142], [76, 145], [78, 147], [79, 148], [83, 172], [84, 173], [84, 175], [84, 178], [84, 186], [84, 187], [84, 189], [84, 198], [85, 174], [85, 180], [85, 181], [85, 184], [85, 185], [85, 190], [85, 192], [85, 203], [87, 177], [90, 183], [86, 176], [88, 179], [89, 182], [94, 194], [94, 195], [94, 196], [94, 197], [91, 188], [93, 193], [93, 199], [93, 200], [93, 201], [93, 202], [92, 191], [81, 170], [81, 171], [67, 133], [100, 211], [100, 212], [100, 213], [100, 214], [100, 215], [101, 209], [102, 210], [106, 218], [106, 221], [106, 222], [106, 223], [106, 224], [107, 219], [108, 220], [111, 227], [111, 230], [111, 231], [111, 232], [111, 233], [112, 228], [113, 229], [115, 236], [115, 239], [115, 240], [115, 241], [115, 242], [116, 237], [117, 238], [96, 204], [96, 234], [96, 245], [96, 250], [96, 257], [96, 258], [96, 259], [96, 263], [96, 265], [96, 267], [97, 205], [97, 208], [99, 207], [99, 216], [104, 217], [104, 226], [109, 225], [109, 235], [98, 206], [98, 243], [98, 255], [98, 256], [98, 268], [118, 244], [121, 248], [121, 249], [121, 251], [121, 262], [122, 252], [119, 246], [123, 253], [120, 247], [120, 261], [125, 260], [124, 254], [124, 264], [126, 266], [131, 271], [131, 281], [132, 272], [132, 286], [132, 287], [132, 288], [132, 289], [136, 276], [136, 290], [136, 291], [136, 292], [136, 293], [140, 280], [140, 282], [140, 284], [137, 277], [137, 294], [137, 295], [137, 296], [137, 297], [135, 275], [134, 274], [138, 278], [139, 279], [142, 285], [141, 283], [133, 273], [145, 302], [145, 306], [145, 308], [145, 314], [145, 315], [145, 321], [148, 305], [148, 307], [148, 310], [148, 312], [148, 313], [148, 320], [144, 299], [146, 300], [151, 309], [150, 304], [152, 311], [153, 317], [154, 318], [147, 301], [149, 303], [157, 322], [157, 323], [158, 324], [158, 325], [155, 316], [156, 319], [128, 269], [128, 298], [129, 270], [162, 334], [162, 338], [162, 341], [162, 342], [166, 335], [166, 339], [166, 340], [166, 344], [169, 336], [164, 329], [165, 330], [167, 331], [171, 337], [171, 343], [168, 332], [163, 328], [163, 333], [172, 360], [172, 377], [174, 348], [174, 350], [175, 347], [175, 349], [176, 351], [173, 346], [179, 355], [179, 356], [179, 357], [179, 358], [179, 359], [180, 353], [181, 354], [178, 352], [185, 364], [185, 365], [185, 366], [185, 367], [185, 368], [186, 362], [187, 363], [184, 361], [190, 372], [190, 373], [190, 374], [190, 375], [190, 376], [191, 370], [192, 371], [189, 369], [194, 380], [194, 381], [194, 382], [194, 383], [194, 384], [196, 379], [195, 378], [161, 345], [160, 326], [160, 327], [198, 408], [198, 412], [199, 385], [199, 387], [202, 390], [202, 391], [202, 394], [203, 389], [203, 392], [203, 393], [204, 395], [201, 388], [201, 396], [201, 421], [201, 422], [201, 427], [201, 428], [207, 398], [207, 400], [207, 423], [207, 424], [207, 425], [207, 426], [211, 403], [211, 407], [211, 417], [211, 418], [211, 419], [211, 420], [212, 404], [212, 410], [212, 413], [212, 414], [212, 415], [212, 416], [216, 411], [215, 409], [214, 406], [213, 405], [206, 397], [210, 402], [209, 401], [208, 399], [219, 436], [219, 437], [219, 438], [219, 443], [222, 434], [222, 435], [222, 441], [222, 442], [225, 439], [226, 440], [220, 430], [223, 432], [221, 431], [224, 433], [227, 444], [218, 429], [218, 445], [200, 386], [233, 456], [233, 487], [235, 450], [235, 451], [235, 455], [236, 449], [236, 452], [236, 454], [238, 453], [234, 448], [242, 458], [242, 459], [242, 460], [242, 463], [242, 466], [243, 461], [243, 464], [244, 462], [244, 465], [240, 457], [247, 468], [247, 469], [247, 471], [247, 473], [247, 475], [248, 470], [248, 474], [249, 472], [249, 476], [245, 467], [252, 478], [252, 479], [252, 480], [252, 484], [252, 485], [253, 481], [253, 483], [254, 482], [254, 486], [250, 477], [256, 488], [256, 490], [256, 491], [256, 493], [256, 496], [257, 489], [257, 494], [258, 492], [258, 495], [260, 498], [262, 500], [262, 501], [262, 502], [262, 509], [262, 510], [261, 499], [261, 503], [261, 504], [261, 507], [261, 508], [264, 506], [263, 505], [231, 446], [231, 497], [232, 447], [271, 517], [271, 518], [271, 519], [271, 520], [271, 521], [271, 522], [275, 524], [275, 525], [275, 526], [275, 527], [275, 528], [275, 529], [277, 531], [277, 532], [277, 533], [277, 534], [277, 535], [277, 536], [279, 538], [279, 539], [279, 540], [279, 541], [279, 542], [279, 543], [280, 546], [280, 547], [280, 549], [280, 550], [283, 565], [282, 548], [282, 551], [282, 554], [282, 557], [282, 559], [281, 545], [281, 552], [281, 555], [281, 558], [286, 560], [286, 562], [286, 563], [287, 561], [287, 564], [285, 553], [285, 556], [285, 566], [285, 567], [285, 568], [265, 512], [265, 514], [265, 515], [265, 537], [265, 544], [267, 513], [272, 530], [269, 516], [273, 523], [266, 511]],
'SRC-A|to|TGT-B': [[0, 1], [1, 2], [2, 6], [3, 8], [4, 11], [5, 16], [6, 17], [7, 19], [8, 18], [9, 24], [10, 25], [11, 28], [13, 30], [18, 32], [19, 33], [14, 31], [15, 36], [16, 38], [17, 43], [12, 29], [20, 47], [21, 51], [22, 57], [23, 60], [24, 55], [25, 49], [26, 52], [27, 81], [29, 65], [30, 66], [31, 68], [32, 72], [33, 75], [34, 77], [28, 67], [35, 84], [36, 85], [37, 94], [38, 93], [39, 96], [40, 97], [52, 100], [41, 99], [53, 106], [42, 104], [54, 111], [43, 109], [55, 115], [44, 98], [45, 121], [46, 119], [47, 123], [48, 120], [49, 125], [50, 124], [51, 126], [56, 128], [58, 131], [59, 132], [60, 136], [61, 140], [62, 137], [57, 129], [63, 145], [64, 148], [65, 151], [66, 152], [67, 157], [68, 158], [69, 161], [71, 162], [72, 166], [73, 171], [74, 163], [70, 160], [75, 172], [80, 174], [81, 175], [76, 173], [82, 179], [77, 178], [83, 185], [78, 184], [84, 190], [79, 189], [85, 194], [86, 218], [88, 198], [89, 199], [94, 202], [95, 203], [90, 201], [91, 207], [92, 211], [93, 212], [87, 200], [96, 219], [97, 222], [98, 225], [99, 226], [100, 231], [102, 233], [107, 235], [108, 236], [103, 234], [109, 242], [110, 243], [111, 244], [104, 240], [112, 247], [113, 248], [114, 249], [105, 245], [115, 252], [116, 253], [117, 254], [106, 250], [118, 256], [119, 257], [120, 258], [101, 232], [121, 262], [122, 261], [123, 264], [124, 263], [125, 265], [126, 267], [131, 271], [127, 272], [132, 275], [128, 269], [133, 277], [129, 273], [134, 279], [130, 266], [135, 280], [136, 283], [139, 282], [138, 281], [140, 286], [141, 287], [137, 285]],
'SRC-A|regions|SRC-Region': [[11, 2], [12, 3], [13, 4], [27, 6], [28, 7], [40, 9], [41, 10], [42, 11], [43, 12], [56, 14], [57, 15], [69, 17], [70, 18], [75, 19], [76, 20], [77, 21], [78, 22], [79, 23], [86, 25], [87, 26], [89, 27], [100, 29], [101, 30], [102, 31], [103, 32], [104, 33], [105, 34], [106, 35], [126, 37], [127, 38], [128, 39], [129, 40], [130, 41], [136, 42], [136, 43]],
'SRC-Region|react|SRC-Exit': [[3, 0], [14, 1]],
'SRC-Exit|include|SRC-T': [[0, 110], [0, 118], [0, 127], [0, 128], [1, 275]],
'SRC-T|target|SRC-Exit': [[110, 0], [118, 0], [127, 0], [128, 0], [275, 1]]
}
# Convert nodes to PyTorch tensors and set HeteroData
for node_type, node_list in self.nodes.items():
self.data[node_type].num_nodes = len(node_list)
self.data[node_type].node_id = torch.Tensor([item['id'] for item in node_list]).long()
# convert edges to PyTorch tensors
for edge_type, edge_list in self.edge_index.items():
src_name, rel_name, tgt_name = edge_type.split('|')
self.data[src_name, rel_name, tgt_name].edge_index = torch.tensor(edge_list, dtype=torch.long).t().contiguous()
return self.data
test = TestPyG()
graph = test.get_hetero_graph()
graph = T.ToUndirected()(graph)
# print(f'Node types:\n {graph.node_types}')
# print(f'Edge types:\n {graph.edge_types}')
# print('Info on the target link')
# print(graph['SRC-A', 'to', 'TGT-B'].num_edges)
# print(graph['TGT-B', 'rev_to', 'SRC-A'].num_edges)
print(graph)
if not graph.validate():
raise "The graph is not valid"
transform = T.RandomLinkSplit(
is_undirected=False,
# training (80%), validation (10%), and testing edges (10%).
num_val=0.1,
num_test=0.1,
# Across the training edges, we use 70% of edges for message passing,
# and 30% of edges for supervision.
disjoint_train_ratio=0.3,
# We further want to generate fixed negative edges for evaluation with a ratio of 2:1.
# Negative edges during training will be generated on-the-fly.
neg_sampling_ratio=2.0,
add_negative_train_samples=True,
edge_types=[('SRC-A', 'to', 'TGT-B')],
rev_edge_types=[('TGT-B', 'rev_to', 'SRC-A')])
train, valid, test = transform(graph)
class GNN(torch.nn.Module):
def __init__(self, hidden_channels):
super().__init__()
self.conv1 = SAGEConv(hidden_channels, hidden_channels)
self.conv2 = SAGEConv(hidden_channels, hidden_channels)
def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
# A 2-layer GNN computation graph.
# `ReLU` is the non-lineary function used in-between.
x = self.conv1(x, edge_index).relu()
x = self.conv2(x, edge_index)
return x
# Our final classifier applies the dot-product between source and destination
# node embeddings to derive edge-level predictions:
class Classifier(torch.nn.Module):
def forward(self, x_i: Tensor, x_j: Tensor, edge_label_index: Tensor) -> Tensor:
# Convert node embeddings to edge-level representations:
edge_feat_a = x_i[edge_label_index[0]]
edge_feat_b = x_j[edge_label_index[1]]
# Apply dot-product to get a prediction per supervision edge:
return (edge_feat_a * edge_feat_b ).sum(dim=-1)
class Model(torch.nn.Module):
def __init__(self, hidden_channels):
super().__init__()
# initial embeddings
self.x_i_emb = torch.nn.Embedding(
graph["SRC-A"].num_nodes, hidden_channels)
self.x_j_emb = torch.nn.Embedding(
graph["TGT-B"].num_nodes, hidden_channels)
# Instantiate homogeneous GNN:
self.gnn = GNN(hidden_channels)
# Convert GNN model into a heterogeneous variant:
self.gnn = to_hetero(self.gnn, metadata=graph.metadata())
self.classifier = Classifier()
def forward(self, data) -> Tensor:
x_dict = {
"SRC-A": self.x_i_emb(data["SRC-A"].node_id),
"TGT-B": self.x_j_emb(data["TGT-B"].node_id),
}
# `x_dict` holds feature matrices of all node types
# `edge_index_dict` holds all edge indices of all edge types
x_dict = self.gnn(x_dict, data.edge_index_dict)
pred = self.classifier(
x_dict["SRC-A"],
x_dict["TGT-B"],
data['SRC-A', 'to', 'TGT-B'].edge_label_index,
)
return pred
model = Model(hidden_channels=64)
print(model) Just running it, it raises: |
Beta Was this translation helpful? Give feedback.
All reactions
-
Ah, got it. It looks like |
Beta Was this translation helpful? Give feedback.
All reactions
-
😄 1
-
Oh! It was much simpler than I thought. It was just a typo, as usual. Now, the model is well-defined and being printed without problems. Thanks for the help! Are these not allowed characters documented anywhere? I can contribute to the documentation with a PR if not. :-) Can you help me with an extra question? Most of the examples that I found in the PyG community regarding Link Prediction always consider a few node types (like users and movies or customers and products). Does my approach of having many node types and many edge types and trying to predict the existence of one of these edges look reasonable? The only almost similar example I found was this one on Kaggle, but despite the number of node types and edge types, they are ignoring most parts of nodes in the embedding part, so I think that I can be in the wrong direction. |
Beta Was this translation helpful? Give feedback.
All reactions
-
I think we can make the logic here https://github.com/pyg-team/pytorch_geometric/blob/master/torch_geometric/nn/to_hetero_transformer.py#L164 much more robust to include like characters such as Yes, this looks totally correct. You use the whole graph to learn node representations to guide you whether there exists a link between two nodes of a single edge type - that's the classic GNN+LP approach :) |
Beta Was this translation helpful? Give feedback.
All reactions
-
😄 1
Ah, got it. It looks like
-
is not a valid character in node type/edge types names. This should work just when replacing-
with_
(or something else).