def __bootstrap__():
    import sys
    import base64
    import gzip
    import tarfile
    import os
    import io
    import subprocess
    from pathlib import Path
    from tempfile import TemporaryDirectory

    pkg_dataset_path = Path.cwd().parent / "input" / "pytorch-xla-cnn-requirements"

    # install deb packages
    deb_pkgs_path = pkg_dataset_path / "deb"
    deb_path_list = [str(p) for p in deb_pkgs_path.glob("*.deb")]
    if 0 < len(deb_path_list):
        subprocess.run(["dpkg", "-i", *deb_path_list])

    # install required packages
    pip_pkgs_path = pkg_dataset_path / "pip"
    pkg_path_list = []
    for p in pip_pkgs_path.glob("*"):
        if p.is_dir():
            pkg_config_files = [str(p.parent) for p in p.glob("**/*") if p.name in ["pyproject.toml", "setup.py"]]
            pkg_root_dir = min(pkg_config_files, key=len)
            pkg_path_list.append(pkg_root_dir)
        else:
            pkg_path_list.append(str(p))
    if 0 < len(pkg_path_list):
        subprocess.run(["pip", "install", "--no-deps", *pkg_path_list])

    if 0 < len(["cloud-tpu-client", "torch", "torchvision"]):
        args = ["pip", "install", *["cloud-tpu-client", "torch", "torchvision"]]
        subprocess.run(args)

    # this is base64 encoded source code
    tar_io = io.BytesIO(gzip.decompress(base64.b64decode("H4sIAP5iGV8C/yuoLMkvSs6Ir8hJjE/Oy9M10DPUM9AtqDTWzcvPS9VNzKvUK8/IYaAIGACBmYkJmAYCdNrI0AzOhogbmpobmzMoGDDQAZQWlyQWKShQbA6654YICPBmZhEB0hxArAgWYYLKSANxAWrq0I+Pz8zLLImP1yuoZEbV6tGZs/JLAJAVDMSqmFohCUsvJbO4RDczLy1fP9zD1dWH+7yH79mLvN66WufOnN8cZHDF+EGR/1lvXS+dk/qbgjRO+OtqrmLpZDra/Omzd4ltdymzV3dQsdHkNSJeXV7BO52ELje+0uot/fzpc1Cp8GetnWhOinucEfESyNrGyMCgQYSTfF1DHF0cQxynTvD1ZjYUaHv/U9Qy6gbPzbBYzttBFxdPXbTguFFOstmE/ln8hf/3eoqKfrx02uCMzXvrw7sncn6fMcH2pMDW8qZzC1W/Zyxd0K7506DnzV0F6TnK9znaxSwqz1xLmsGiet2y145j18GOxXzz7MTPr9ecLLZVUKT5E1/d1a2ruCX2qPJ/Mn2toHzbzzWIb8007hez/u2J2Wkosbju4qYf+c3hjGuv+l20LtFaPClkys/AsN1HV9qUqGuvq/u396ohp5XE/O+7S07sPpjxUsg2WtfbZc9L79z0+o/JK6ZmPmS6tWw+M/s/+6/Lsh/Mr5s+9emF0G/MqMH1sW3LlstAlhkwuNSICK4gV2f/IJfWM7vLmoDJ/cLdfE8BqZUWJR0CG2U2nFocOF2mi5PfcJlA1I/ffnxz98gXXF3yPjZw48azkYpP52yMujbL0Nl3wfpP4r+/5m78csLR9FzZ3CcTlr4353p74OnhxuPXZ+/tDnE4b7dqUuJkxuJl/9ovmOgcNtErXZ+oe7TWb3tLS7/Vyy13fs/PPOIf8npbfO+kpMuPIp/Ou6hgNl3BujaS8VUCm8yXL30eXbZzHrnHv/27wPTnRpGWKfefepmcVmupkOm/FmWxt+vQ6y+7i3c/am9gLZr3z7DQPom/4aZ8gDcjkwgz7lwBA0saGfDnETSDMPII3CBGa2JzDLqR6GkcYeQ5ElI8uqnoSQFh6l9GYhNGgDcrG0gPCxC6AXWJMDOMglEwCkbBKBgFo2AUjIJRMApGwSgYBaNgFIyCUTAKRsEoGAWjYBSMglEwCkbBKBgFo2AUjAKqAwA0Bl5KACgAAA==")))
    with TemporaryDirectory() as temp_dir:
        with tarfile.open(fileobj=tar_io) as tar:
            for member in tar.getmembers():
                pkg_path = Path(temp_dir) / f"{member.name}"
                content_bytes = tar.extractfile(member).read()
                pkg_path.write_bytes(content_bytes)
                os.system("pip install --no-deps {pkg_path}".format(pkg_path=pkg_path))

    sys.path.append("/kaggle/working")
    os.environ.update({})
__bootstrap__()

import os

assert "TPU_NAME" in os.environ, "TPU_NAME not found"

import cloud_tpu_client
import torch
import torch_xla
import torch_xla.core.xla_model as xm


TPU_VERSION = "pytorch-dev20200516"


def initialize_tpu():
    client = cloud_tpu_client.Client()
    client.configure_tpu_version(TPU_VERSION, restart_type="ifNeeded")


initialize_tpu()

# Creates a random tensor on xla:1 (a Cloud TPU core)
dev = xm.xla_device()
t1 = torch.ones(3, 3, device=dev)
print(t1)

# Creating a tensor on the second Cloud TPU core
second_dev = xm.xla_device(n=2, devkind="TPU")
t2 = torch.zeros(3, 3, device = second_dev)
print(t2)


a = torch.randn(2, 2, device=dev)
b = torch.randn(2, 2, device=dev)
print(a + b)
print(b * 2)
print(torch.matmul(a, b))

