docstr: Recursively build a set of all coparents of a particular node in the graph
code: def collect_coparents(fx_graph, node_name, all_coparents):
      """Recursively build a set of all coparents of a particular node in the graph"""
  
      # find all coparents of the requested node
      coparents = set()
      children = fx_graph.get(node_name).get("real_children")
      for child in children:
          parents = fx_graph.get(child).get("real_parents")
          for parent in parents:
              coparents.add(parent)
  
              # coparents are used to restrict what nodes can be permuted along C, so we need to track if the current parents also pass their K permutations up
              if fx_graph[parent]["K_passthru"]:
                  grandparents = fx_graph[parent]["real_parents"]
                  for grandparent in grandparents:
                      coparents = coparents.union(
                          Permutation.collect_coparents(
                              fx_graph, grandparent, coparents
                          )
                      )
  
      # separate the new coparents, since we'll need to process them recursively
      new_coparents = coparents.difference(all_coparents)
      # update the final list with just the new elements
      all_coparents.update(new_coparents)
  
      for new_coparent in new_coparents:
          all_coparents = Permutation.collect_coparents(
              fx_graph, new_coparent, all_coparents
          )
  
      return all_coparents
  
imports: import os
  import torch
  import json
  import string
  import time
  import numpy
  import sys
  import builtins
  import io
label_desc: Use image node_id 29 for calling the Permutation obj's underlying member method code with example usage: obj.collect_coparents(fx_graph, node_name, all_coparents) and returns: all_coparents