class_docstr: Args:
      ids (sequence): the IDs of each element
      sources (numpy.ndarray): the ilocs of the source of each edge
      targets (numpy.ndarray): the ilocs of the target of each edge
      weight (numpy.ndarray): the weight of each edge
      type_info (list of tuple of type name, numpy array): the associated feature vectors of each type, where the size of the first dimension defines the elements of that type
      number_of_nodes (int): the total number of nodes in the graph
class_docstr_tok: ["Args",":","ids","(","sequence",")",":","the","IDs","of","each","element","sources","(","numpy.ndarray",")",":","the","ilocs","of","the","source","of","each","edge","targets","(","numpy.ndarray",")",":","the","ilocs","of","the","target","of","each","edge","weight","(","numpy.ndarray",")",":","the","weight","of","each","edge","type_info","(","list","of","tuple","of","type","name",",","numpy","array",")",":","the","associated","feature","vectors","of","each","type",",","where","the","size","of","the","first","dimension","defines","the","elements","of","that","type","number_of_nodes","(","int",")",":","the","total","number","of","nodes","in","the","graph"]
code: def _create_directed_adj_lists(self):
      # record the edge ilocs of incoming and outgoing edges
  
      def _to_dir_adj_list(arr):
          neigh_counts = np.bincount(
              arr, minlength=self.number_of_nodes
          )
          splits = np.zeros(
              len(neigh_counts) + 1, dtype=self._id_index.dtype
          )
          splits[1:] = np.cumsum(
              neigh_counts, dtype=self._id_index.dtype
          )
          flat = np.argsort(arr).astype(
              self._id_index.dtype, copy=False
          )
          return FlatAdjacencyList(flat, splits)
  
      return _to_dir_adj_list(self.targets), _to_dir_adj_list(
          self.sources
      )
  
imports: import itertools
  from collections import defaultdict
  import numpy
  import pandas
  import scipy.sparse
  from ..globalvar import SOURCE, TARGET, WEIGHT, TYPE_ATTR_NAME
  from .validation import require_dataframe_has_columns, comma_sep
label_desc: Use image node_id 3 for calling the EdgeData obj's underlying member method code with example usage: obj._create_directed_adj_lists() and returns: _to_dir_adj_list,  _to_dir_adj_list, FlatAdjacencyList