|  | # RUN: %PYTHON %s | FileCheck %s | 
|  |  | 
|  | import torch | 
|  | import numpy as np | 
|  |  | 
|  | from mpact.mpactbackend import mpact_jit | 
|  |  | 
|  | from mpact.models.gat import gat_4_64_8_3 | 
|  |  | 
|  | net = gat_4_64_8_3() | 
|  | net.eval()  # Switch to inference. | 
|  |  | 
|  | # Sparse input. | 
|  | idx = torch.tensor([[0, 0, 1, 2], [0, 2, 3, 1]], dtype=torch.int64) | 
|  | val = torch.tensor([14.0, 3.0, -8.0, 11.0], dtype=torch.float32) | 
|  | S = torch.sparse_coo_tensor(idx, val, size=[4, 4]) | 
|  |  | 
|  | # Construct adjacency matrix. | 
|  | V = 4 | 
|  | edges = np.array([[0, 1], [0, 2], [1, 2], [1, 3], [2, 3]], dtype=np.int32) | 
|  | E = edges.shape[0] | 
|  | adj_mat = torch.sparse_coo_tensor(edges.T, torch.ones(E), (V, V), dtype=torch.int64) | 
|  | adj_mat = ( | 
|  | torch.eye(V) + adj_mat | 
|  | )  # Add self-loops to the adjacency matrix (becomes dense) | 
|  |  | 
|  |  | 
|  | # | 
|  | # CHECK: pytorch gat | 
|  | # CHECK:   tensor({{\[}}[-1.0986, -1.0986, -1.0986], | 
|  | # CHECK:                [-1.0986, -1.0986, -1.0986], | 
|  | # CHECK:                [-1.0986, -1.0986, -1.0986], | 
|  | # CHECK:                [-1.0986, -1.0986, -1.0986]{{\]}} | 
|  | # CHECK: mpact gat | 
|  | # CHECK:   {{\[}}[-1.0986123 -1.0986123 -1.0986123] | 
|  | # CHECK:         [-1.0986123 -1.0986123 -1.0986123] | 
|  | # CHECK:         [-1.0986123 -1.0986123 -1.0986123] | 
|  | # CHECK:         [-1.0986123 -1.0986123 -1.0986123]{{\]}} | 
|  | # | 
|  | with torch.no_grad(): | 
|  | # Run it with PyTorch. | 
|  | print("pytorch gat") | 
|  | res = net(S, adj_mat) | 
|  | print(res) | 
|  |  | 
|  | # Run it with MPACT. | 
|  | print("mpact gat") | 
|  | res = mpact_jit(net, S, adj_mat) | 
|  | print(res) |