code: def test_hetero_conv_with_custom_conv():
      data = HeteroData()
      data["paper"].x = torch.randn(50, 32)
      data["paper"].y = torch.randn(50, 3)
      data["paper"].z = torch.randn(50, 3)
      data["author"].x = torch.randn(30, 64)
      data["author"].y = torch.randn(30, 3)
      data["author"].z = torch.randn(30, 3)
      data["paper", "paper"].edge_index = get_random_edge_index(
          50, 50, 200
      )
      data["paper", "author"].edge_index = get_random_edge_index(
          50, 30, 100
      )
      data["author", "paper"].edge_index = get_random_edge_index(
          30, 50, 100
      )
  
      conv = HeteroConv(
          {key: CustomConv(64) for key in data.edge_types}
      )
      # Test node `args_dict` and `kwargs_dict` with `y_dict` and `z_dict`:
      out_dict = conv(
          data.x_dict,
          data.edge_index_dict,
          data.y_dict,
          z_dict=data.z_dict,
      )
      assert len(out_dict) == 2
      assert out_dict["paper"].size() == (50, 64)
      assert out_dict["author"].size() == (30, 64)
  
imports: import random
  import pytest
  import torch
  from torch_geometric.data import HeteroData
  from torch_geometric.datasets import FakeHeteroDataset
  from torch_geometric.nn import GATConv, GCN2Conv, GCNConv, HeteroConv, Linear, MessagePassing, SAGEConv
  from torch_geometric.profile import benchmark
  from torch_geometric.testing import get_random_edge_index, onlyLinux, withCUDA, withPackage
label_desc: Use image node_id 3 for calling a global function with example usage: test_hetero_conv_with_custom_conv() without return types