code: def atan2_gpu(ret: Buffer, a: Buffer, b: Buffer):
      assert (
          a.dtype == b.dtype and a.dtype == dtypes.float32
      ), "gpu function only supports float32"
      src = """
    __kernel void atan2_gpu(global float *c, global float *a, global float *b) {
      int idx = get_global_id(0);
      c[idx] = atan2(a[idx], b[idx]);
    }"""
      lib = Device[ret.device].compiler(src)
      CompiledASTRunner(
          None,
          "atan2_gpu",
          src,
          lib,
          Device[ret.device],
          global_size=[ret.size],
      ).build(Device[ret.device].runtime).exec([ret, a, b])
  
imports: import unittest
  import numpy
  from typing import Optional, Tuple
  from tinygrad.helpers import prod
  from tinygrad.dtype import dtypes
  from tinygrad.lazy import Buffer, create_lazybuffer
  from tinygrad.device import CompiledASTRunner, Device
  from tinygrad.shape.shapetracker import ShapeTracker
  from tinygrad.ops import LoadOps, BinaryOps
  from tinygrad.lazy import LazyBuffer
  from tinygrad.tensor import Function
  from tinygrad.tensor import Tensor
label_desc: Use image node_id 1 for calling a global function with example usage: atan2_gpu(ret, a, b) without return types