code: def sort_csc(
      row: Tensor,
      col: Tensor,
      src_node_time: OptTensor = None,
      edge_time: OptTensor = None,
  ) -> Tuple[Tensor, Tensor, Tensor]:
      if src_node_time is None and edge_time is None:
          col, perm = index_sort(col)
          return row[perm], col, perm
  
      elif edge_time is not None:
          assert src_node_time is None
          perm = lexsort([edge_time, col])
          return row[perm], col[perm], perm
  
      else:  # src_node_time is not None
          perm = lexsort([src_node_time[row], col])
          return row[perm], col[perm], perm
  
file_path: pytorch_geometric/torch_geometric/sampler/utils.py
imports: from typing import Any, Dict, List, Optional, Tuple, TypeVar, Union
  import torch
  from torch import Tensor
  from torch_geometric.data import Data, HeteroData
  from torch_geometric.data.storage import EdgeStorage
  from torch_geometric.typing import EdgeType, NodeType, OptTensor
  from torch_geometric.utils import coalesce, index_sort, lexsort
  from torch_geometric.utils.sparse import index2ptr
label_desc: Use image node_id 1 for calling a global function with example usage: sort_csc(row, col, src_node_time, edge_time) and returns: row,  col,  perm, row,  col,  perm, row,  col,  perm