code: def binary_op(msg, x, y):
      if msg == "add":
          return x + y
      elif msg == "sub":
          return x - y
      elif msg == "mul":
          return x * y
      elif msg == "div":
          return x / y
      elif msg == "dot":
          return F.sum(x * y, -1, keepdims=True)
      elif msg == "copy_lhs":
          return x
      elif msg == "copy_rhs":
          return y
  
imports: import random
  import unittest
  import backend
  import dgl
  import numpy
  import pytest
  import torch
  from dgl.ops import gather_mm, gsddmm, gspmm, segment_reduce
  from utils import parametrize_idtype
  from utils.graph_cases import get_cases
label_desc: Use image node_id 2 for calling a global function with example usage: binary_op(msg, x, y) and returns: unknown, unknown, unknown, unknown, F, x, y