code: def topological_sort(graph, depth_first=False):
      """Returns a depth first sorted order if depth_first is True"""
      import networkx as nx
  
      nodesort = list(nx.topological_sort(graph))
      if not depth_first:
          return nodesort, None
      logger.debug("Performing depth first search")
      nodes = []
      groups = []
      group = 0
      G = nx.Graph()
      G.add_nodes_from(graph.nodes())
      G.add_edges_from(graph.edges())
      components = nx.connected_components(G)
      for desc in components:
          group += 1
          indices = []
          for node in desc:
              indices.append(nodesort.index(node))
          nodes.extend(
              np.array(nodesort)[
                  np.array(indices)[np.argsort(indices)]
              ].tolist()
          )
          for node in desc:
              nodesort.remove(node)
          groups.extend([group] * len(desc))
      return nodes, groups
  
imports: import os
  import sys
  import pickle
  from collections import defaultdict
  import re
  from copy import deepcopy
  from glob import glob
  from pathlib import Path
  from traceback import format_exception
  from hashlib import sha1
  from functools import reduce
  import numpy
  from ...None import logging, config
  from ...utils.filemanip import indirectory, relpath, fname_presuffix, ensure_list, get_related_files, save_json, savepkl, loadpkl, write_rst_header, write_rst_dict, write_rst_list
  from ...utils.misc import str2bool
  from ...utils.functions import create_function_from_source
  from ...interfaces.base.traits_extension import rebase_path_traits, resolve_path_traits, OutputMultiPath, isdefined, Undefined
  from ...interfaces.base.support import Bunch, InterfaceResult
  from ...interfaces.base import CommandLine
  from ...interfaces.utility import IdentityInterface
  from ...utils.provenance import ProvStore, pm, nipype_ns, get_id
  from inspect import signature
label_desc: Use image node_id 47 for calling a global function with example usage: topological_sort(graph, depth_first) and returns: nodes,  groups, nodesort,  None