code: def test_sage_conv_bi(idtype, g, aggre_type, out_dim):
      g = g.astype(idtype).to(F.ctx())
      dst_dim = 5 if aggre_type != "gcn" else 10
      sage = nn.SAGEConv((10, dst_dim), out_dim, aggre_type)
      feat = (
          F.randn((g.number_of_src_nodes(), 10)),
          F.randn((g.number_of_dst_nodes(), dst_dim)),
      )
      h = sage(g, feat)
      assert h.shape[-1] == out_dim
      assert h.shape[0] == g.number_of_dst_nodes()
  
imports: from copy import deepcopy
  import backend
  import dgl
  import dgl.function
  import dgl.nn.tensorflow
  import networkx
  import numpy
  import pytest
  import scipy
  import tensorflow
  from tensorflow.keras import layers
  from utils import parametrize_idtype
  from utils.graph_cases import get_cases, random_bipartite, random_dglgraph, random_graph
label_desc: Use image node_id 11 for calling a global function with example usage: test_sage_conv_bi(idtype, g, aggre_type, out_dim) without return types