# RUN: %PYTHON %s | FileCheck %s

import torch

from mpact.mpactbackend import mpact_jit, mpact_jit_compile, mpact_jit_run

from mpact.models.gcn import graphconv_4_4, gcn_4_16_4

net = graphconv_4_4()
net.eval()  # Switch to inference.

# Get random (but reproducible) matrices.
torch.manual_seed(0)
inp = torch.rand(4, 4)
adj_mat = torch.rand(4, 4).to_sparse()

#
# CHECK: pytorch
# CHECK:   tensor({{\[}}[4.4778, 4.4778, 4.4778, 4.4778],
# CHECK:                [5.7502, 5.7502, 5.7502, 5.7502],
# CHECK:                [4.6980, 4.6980, 4.6980, 4.6980],
# CHECK:                [3.6407, 3.6407, 3.6407, 3.6407]{{\]}})
# CHECK: mpact compile and run
# CHECK:   {{\[}}[4.477828  4.477828  4.477828  4.477828 ]
# CHECK:         [5.7501717 5.7501717 5.7501717 5.7501717]
# CHECK:         [4.697952  4.697952  4.697952  4.697952 ]
# CHECK:         [3.640687  3.640687  3.640687  3.640687 ]{{\]}}
# CHECK: mpact compile
# CHECK: mpact run
# CHECK:   {{\[}}[4.477828  4.477828  4.477828  4.477828 ]
# CHECK:         [5.7501717 5.7501717 5.7501717 5.7501717]
# CHECK:         [4.697952  4.697952  4.697952  4.697952 ]
# CHECK:         [3.640687  3.640687  3.640687  3.640687 ]{{\]}}
# CHECK: mpact compile opt=3
# CHECK: mpact run
# CHECK:   {{\[}}[4.477828  4.477828  4.477828  4.477828 ]
# CHECK:         [5.7501717 5.7501717 5.7501717 5.7501717]
# CHECK:         [4.697952  4.697952  4.697952  4.697952 ]
#
with torch.no_grad():
    # Run it with PyTorch.
    print("pytorch")
    res = net(inp, adj_mat)
    print(res)

    # Run it with MPACT (compile and run at once).
    print("mpact compile and run")
    res = mpact_jit(net, inp, adj_mat)
    print(res)

    # Run it with MPACT (with separate compile and run steps).
    print("mpact compile")
    invoker, fn = mpact_jit_compile(net, inp, adj_mat)
    print("mpact run")
    res = mpact_jit_run(invoker, fn, inp, adj_mat)
    print(res)

    # Run it with MPACT (with separate compile and run steps, given opt_level).
    print("mpact compile opt=3")
    invoker, fn = mpact_jit_compile(net, inp, adj_mat, opt_level=3)
    print("mpact run")
    res = mpact_jit_run(invoker, fn, inp, adj_mat)
    print(res)

net = gcn_4_16_4()
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])

#
# CHECK: pytorch gcn
# CHECK:   tensor({{\[}}[-1.3863, -1.3863, -1.3863, -1.3863],
# CHECK:                [-1.3863, -1.3863, -1.3863, -1.3863],
# CHECK:                [-1.3863, -1.3863, -1.3863, -1.3863],
# CHECK:                [-1.3863, -1.3863, -1.3863, -1.3863]])
# CHECK: mpact gcn
# CHECK:   {{\[}}[-1.3862944 -1.3862944 -1.3862944 -1.3862944]
# CHECK:         [-1.3862944 -1.3862944 -1.3862944 -1.3862944]
# CHECK:         [-1.3862944 -1.3862944 -1.3862944 -1.3862944]
# CHECK:         [-1.3862944 -1.3862944 -1.3862944 -1.3862944]{{\]}}
#
with torch.no_grad():
    # Run it with PyTorch.
    print("pytorch gcn")
    res = net(S, adj_mat)
    print(res)

    # Run it with MPACT.
    print("mpact gcn")
    res = mpact_jit(net, S, adj_mat)
    print(res)
