code: def get_edges_in_out_cluster(
      g: Plottable,
      node_id: Union[str, int],
      attribute: Union[str, int],
      column: Union[str, int],
      directed: bool = True,
  ):
      """Traverses children of `node_id` and separates them into incluster and outcluster sets depending if they have `attribute` in node DataFrame `column`
  
      :param g: graphistry instance
      :param node_id: `node` with `attribute` in `column`
      :param attribute: `attribute` to collapse in `column` over
      :param column: `column` to collapse over
      :param directed:
      """
      g2 = get_children(g, node_id, hops=1)
      e = get_edges_of_node(
          g, node_id, outgoing_edges=directed
      )  # False just includes the src node
      ndf, edf, src, dst, node = unpack(g2)
      tdf = ndf[ndf[column] == attribute]
      if not tdf.empty:
          # Get edges that are not in attribute (outside edges)
          outcluster = set(e.values).difference(set(tdf.node.values))
          # get edges that are internal to attribute, we will use these later to collapse those edges to supernode
          incluster = set(tdf.node.values).intersection(set(e.values))
          if VERBOSE:
              if len(outcluster):
                  logger.info(
                      f"{outcluster} are edges *not* in [[ {column}:{attribute} ]] for node {node_id}"
                  )
                  # get directionality
              if len(incluster):
                  logger.info(
                      f"{incluster} are edges in [[ {column}:{attribute} ]] for node {node_id}"
                  )
          return outcluster, incluster, tdf
      return None, None, None
  
imports: from typing import Union, Optional, List
  import copy, logging, pandas, numpy
  from graphistry.PlotterBase import Plottable
label_desc: Use image node_id 5 for calling a global function with example usage: get_edges_in_out_cluster(g, node_id, attribute, column, directed) and returns: None,  None,  None, outcluster,  incluster,  tdf