docs: def read_node_label_matrix(file_path, separator, numbering="matlab"):
      """
      Reads node-label pairs in csv format and returns a list of tuples and a node-label matrix.
  
      Inputs:  - file_path: The path where the node-label matrix is stored.
               - separator: The delimiter among values (e.g. ",", "\t", " ")
               - number_of_nodes: The number of nodes of the full graph. It is possible that not all nodes are labelled.
               - numbering: Array numbering style: * "matlab"
                                                   * "c"
  
      Outputs: - node_label_matrix: The node-label associations in a NumPy array of tuples format.
               - number_of_categories: The number of categories/classes the nodes may belong to.
               - labelled_node_indices: A NumPy array containing the labelled node indices.
      """
      # Open file
      file_row_generator = get_file_row_generator(file_path, separator)
  
      file_row = next(file_row_generator)
      number_of_rows = file_row[1]
      number_of_categories = int(file_row[3])
  
      # Initialize lists for row and column sparse matrix arguments
      row = list()
      col = list()
      append_row = row.append
      append_col = col.append
  
      # Populate the arrays
      for file_row in file_row_generator:
          node = np.int64(file_row[0])
          label = np.int64(file_row[1])
  
          # Add label
          append_row(node)
          append_col(label)
  
      labelled_node_indices = np.array(list(set(row)))
  
      row = np.array(row, dtype=np.int64)
      col = np.array(col, dtype=np.int64)
      data = np.ones_like(row, dtype=np.float64)
  
      if numbering == "matlab":
          row -= 1
          col -= 1
          labelled_node_indices -= 1
      elif numbering == "c":
          pass
      else:
          print("Invalid numbering style.")
          raise RuntimeError
  
      # Form sparse adjacency matrix
      node_label_matrix = spsp.coo_matrix((data, (row, col)), shape=(number_of_rows, number_of_categories))
      node_label_matrix = node_label_matrix.tocsr()
  
      return node_label_matrix, number_of_categories, labelled_node_indices