code: def test_gatv2conv_edge_feats(
      bias,
      bipartite,
      concat,
      max_in_degree,
      num_heads,
      to_block,
      use_edge_feats,
  ):
      torch.manual_seed(12345)
      g = create_graph1().to("cuda")
  
      if to_block:
          g = dgl.to_block(g)
  
      if bipartite:
          in_feats = (10, 3)
          nfeat = (
              torch.rand(g.num_src_nodes(), in_feats[0]).cuda(),
              torch.rand(g.num_dst_nodes(), in_feats[1]).cuda(),
          )
      else:
          in_feats = 10
          nfeat = torch.rand(g.num_src_nodes(), in_feats).cuda()
      out_feats = 2
  
      if use_edge_feats:
          edge_feats = 3
          efeat = torch.rand(g.num_edges(), edge_feats).cuda()
      else:
          edge_feats = None
          efeat = None
  
      conv = CuGraphGATv2Conv(
          in_feats,
          out_feats,
          num_heads,
          concat=concat,
          edge_feats=edge_feats,
          bias=bias,
          allow_zero_in_degree=True,
      ).cuda()
      out = conv(g, nfeat, efeat=efeat, max_in_degree=max_in_degree)
  
      grad_out = torch.rand_like(out)
      out.backward(grad_out)
  
imports: import pytest
  from cugraph_dgl.nn.conv.base import SparseGraph
  from cugraph_dgl.nn import GATv2Conv
  from .common import create_graph1
label_desc: Use image node_id 2 for calling a global function with example usage: test_gatv2conv_edge_feats(bias, bipartite, concat, max_in_degree, num_heads, to_block, use_edge_feats) without return types