code: def test_hetero_conv_self_loop_error():
      HeteroConv({("a", "to", "a"): MessagePassingLoops()})
      with pytest.raises(ValueError, match="incorrect message passing"):
          HeteroConv({("a", "to", "b"): MessagePassingLoops()})
  
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 4 for calling a global function with example usage: test_hetero_conv_self_loop_error() without return types