code: def test_hetero_conv_with_dot_syntax_node_types():
      data = HeteroData()
      data["src.paper"].x = torch.randn(50, 32)
      data["author"].x = torch.randn(30, 64)
      edge_index = get_random_edge_index(50, 50, 200)
      data["src.paper", "src.paper"].edge_index = edge_index
      data["src.paper", "author"].edge_index = get_random_edge_index(
          50, 30, 100
      )
      data["author", "src.paper"].edge_index = get_random_edge_index(
          30, 50, 100
      )
      data["src.paper", "src.paper"].edge_weight = torch.rand(200)
  
      conv = HeteroConv(
          {
              ("src.paper", "to", "src.paper"): GCNConv(-1, 64),
              ("author", "to", "src.paper"): SAGEConv((-1, -1), 64),
              ("src.paper", "to", "author"): GATConv(
                  (-1, -1), 64, add_self_loops=False
              ),
          }
      )
  
      assert len(list(conv.parameters())) > 0
      assert str(conv) == "HeteroConv(num_relations=3)"
  
      out_dict = conv(
          data.x_dict,
          data.edge_index_dict,
          edge_weight_dict=data.edge_weight_dict,
      )
  
      assert len(out_dict) == 2
      assert out_dict["src.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 5 for calling a global function with example usage: test_hetero_conv_with_dot_syntax_node_types() without return types