code: def _traverse_parent_objs(self, p2cs, goobj_child, goids_seen):
          
          # Update public(go2obj p2cs), private(goids_seen)
          child_id = goobj_child.id
          # mark child as seen
          goids_seen.add(child_id)
          ##A self.go2obj[child_id] = goobj_child
          # Update goids_seen and go2obj with child alt_ids
          for goid_altid in goobj_child.alt_ids:
              goids_seen.add(goid_altid)
              ##A self.go2obj[goid_altid] = goobj_child
          # Loop through parents of child object
          for parent_obj in goobj_child.parents:
              parent_id = parent_obj.id
              p2cs[parent_id].add(child_id)
              # If parent has not been seen, traverse
              if parent_id not in goids_seen:
                  ##F self._traverse_parent_objs(p2cs, parent_obj, go2obj, goids_seen)
                  self._traverse_parent_objs(p2cs, parent_obj, goids_seen)
docs: Traverse from source GO up parents.