import torch
import numpy as np
import time

from mpact.mpactbackend import mpact_jit_compile, mpact_jit_run
from mpact_benchmark.utils.tensor_generator import generate_tensor


def runbench_eager(tag, sp, net, x, num_iters=1000):
    net(x)  # warmup
    checksum = 0
    start = time.time()
    for i in range(num_iters):
        res = net(x).item()
        checksum = checksum + res
    end = time.time()
    time_ms = (end - start) * 1000 / num_iters
    print("%s : %.2f : %8.4f ms. : checksum=%d" % (tag, sp, time_ms, checksum))


def runbench_mpact(tag, sp, net, x, num_iters=1000):
    invoker, fn = mpact_jit_compile(net, x)
    mpact_jit_run(invoker, fn, x)  # warmup
    checksum = 0
    start = time.time()
    for i in range(num_iters):
        res = mpact_jit_run(invoker, fn, x)
        checksum = checksum + res
    end = time.time()
    time_ms = (end - start) * 1000 / num_iters
    print("%s : %.2f : %8.4f ms. : checksum=%d" % (tag, sp, time_ms, checksum))


class SqSumNet(torch.nn.Module):
    def forward(self, x):
        # TODO: make this work too: return (x ** 2).sum()
        return (x * x).sum()


net = SqSumNet()
h = 1024 * 4
w = 1024 * 4

for d in range(0, 101, 10):
    sparsity = 1.0 - (d / 100.0)
    x = generate_tensor(
        seed=0, shape=(h, w), sparsity=sparsity, dtype=np.float32, drange=(1.0, 1.0)
    )

    # Note, we don't have binary-valued sparse tensors in PyTorch
    # so we are using csr. For now, we have to hack the
    #    "explicitVal=1.0:f32"
    # into the MLIR sparse tensor type to make optimize it fully.
    s = x.to_sparse_csr()

    runbench_eager("PyTorch (dense) ", sparsity, net, x)
    runbench_mpact("MPACT   (dense) ", sparsity, net, x)
    runbench_eager("PyTorch (sparse)", sparsity, net, s)
    runbench_mpact("MPACT   (sparse)", sparsity, net, s)
