| # 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) |