code: def test_random_link_split():
      assert str(RandomLinkSplit()) == (
          "RandomLinkSplit(" "num_val=0.1, num_test=0.2)"
      )
  
      edge_index = torch.tensor(
          [
              [0, 1, 1, 2, 2, 3, 3, 4, 4, 5],
              [1, 0, 2, 1, 3, 2, 4, 3, 5, 4],
          ]
      )
      edge_attr = torch.randn(edge_index.size(1), 3)
  
      data = Data(
          edge_index=edge_index, edge_attr=edge_attr, num_nodes=100
      )
  
      # No test split:
      transform = RandomLinkSplit(
          num_val=2, num_test=0, is_undirected=True
      )
      train_data, val_data, test_data = transform(data)
  
      assert len(train_data) == 5
      assert train_data.num_nodes == 100
      assert train_data.edge_index.size() == (2, 6)
      assert train_data.edge_attr.size() == (6, 3)
      assert train_data.edge_label_index.size(1) == 6
      assert train_data.edge_label.size(0) == 6
  
      assert len(val_data) == 5
      assert val_data.num_nodes == 100
      assert val_data.edge_index.size() == (2, 6)
      assert val_data.edge_attr.size() == (6, 3)
      assert val_data.edge_label_index.size(1) == 4
      assert val_data.edge_label.size(0) == 4
  
      assert len(test_data) == 5
      assert test_data.num_nodes == 100
      assert test_data.edge_index.size() == (2, 10)
      assert test_data.edge_attr.size() == (10, 3)
      assert test_data.edge_label_index.size() == (2, 0)
      assert test_data.edge_label.size() == (0,)
  
      # Percentage split:
      transform = RandomLinkSplit(
          num_val=0.2,
          num_test=0.2,
          neg_sampling_ratio=2.0,
          is_undirected=False,
      )
      train_data, val_data, test_data = transform(data)
  
      assert len(train_data) == 5
      assert train_data.num_nodes == 100
      assert train_data.edge_index.size() == (2, 6)
      assert train_data.edge_attr.size() == (6, 3)
      assert train_data.edge_label_index.size(1) == 18
      assert train_data.edge_label.size(0) == 18
  
      assert len(val_data) == 5
      assert val_data.num_nodes == 100
      assert val_data.edge_index.size() == (2, 6)
      assert val_data.edge_attr.size() == (6, 3)
      assert val_data.edge_label_index.size(1) == 6
      assert val_data.edge_label.size(0) == 6
  
      assert len(test_data) == 5
      assert test_data.num_nodes == 100
      assert test_data.edge_index.size() == (2, 8)
      assert test_data.edge_attr.size() == (8, 3)
      assert test_data.edge_label_index.size(1) == 6
      assert test_data.edge_label.size(0) == 6
  
      # Disjoint training split:
      transform = RandomLinkSplit(
          num_val=0.2,
          num_test=0.2,
          is_undirected=False,
          disjoint_train_ratio=0.5,
      )
      train_data, val_data, test_data = transform(data)
  
      assert len(train_data) == 5
      assert train_data.num_nodes == 100
      assert train_data.edge_index.size() == (2, 3)
      assert train_data.edge_attr.size() == (3, 3)
      assert train_data.edge_label_index.size(1) == 6
      assert train_data.edge_label.size(0) == 6
  
file_path: pytorch_geometric/test/transforms/test_random_link_split.py
imports: import pytest
  import torch
  from torch_geometric.data import Data, HeteroData
  from torch_geometric.testing import get_random_edge_index, onlyFullTest, onlyOnline
  from torch_geometric.transforms import RandomLinkSplit
  from torch_geometric.utils import is_undirected, to_undirected
label_desc: Use image node_id 1 for calling a global function with example usage: test_random_link_split() without return types