code: def get_new_node_name(
      ndf: pd.DataFrame, parent: Union[str, int], child: Union[str, int]
  ) -> str:
      """If child in cluster group, melts name, else makes new parent_name from parent, child
  
      :param ndf: node DataFrame
      :param parent: `node` with `attribute` in `column`
      :param child: `node` with `attribute` in `column`
  
      :returns new_parent_name
      """
      # THIS IS IMPORTANT FUNCTION -- it is where we wrap the parent/child in WRAP
      # if child in cluster group, we melt it
      ckey = in_cluster_store_keys(ndf, child)
      pkey = in_cluster_store_keys(ndf, parent)
      # new_parent_name = wrap_key(parent)
      if ckey and pkey:
          new_parent_name = melt(ndf, child)
          new_parent_name = f"{new_parent_name} {wrap_key(parent)}"
  
      else:  # if not, then append child to parent as the start of a new cluster group
          new_parent_name = melt(ndf, parent)
          new_parent_name = f"{new_parent_name} {wrap_key(child)}"
      if VERBOSE:
          logger.info(
              f"Renaming (parent:{parent}:{pkey}, child:{child}:{ckey})  ->  {new_parent_name}"
          )
      return reduce_key(new_parent_name)
  
imports: from typing import Union, Optional, List
  import copy, logging, pandas, numpy
  from graphistry.PlotterBase import Plottable
label_desc: Use image node_id 13 for calling a global function with example usage: get_new_node_name(ndf, parent, child) and returns: reduce_key