import gradio as gr
import spaces
import torch

zero = torch.Tensor([0]).cuda()

one = torch.ones(2, 2, device='cuda')

two = torch.matmul(one, one).cuda()


def print_device():
    print('cuda avaliable: ' + str(torch.cuda.is_available()))
    print('zero device: ' + str(zero.device))
    print('one device: ' + str(one.device))
    print('two device: ' + str(two.device))


print_device()  # cpu


@spaces.GPU
def greet(n):
    print('on zero gpu')
    print_device()  # cuda
    return f"Hello {zero + n} Tensor"


gr.Interface(fn=greet, inputs=gr.Number(), outputs=gr.Text()).launch()