code: def _inplace_fuse_subgraphs(
      dsk, keys, dependencies, fused_trees, rename_keys
  ):
      """Subroutine of fuse.Mutates dsk, depenencies, and fused_trees inplace."""
      # locate all members of linear chains
      child2parent = {}
      unfusible = set()
      for parent in dsk:
          deps = dependencies[parent]
          has_many_children = len(deps) > 1
          for child in deps:
              if keys is not None and child in keys:
                  unfusible.add(child)
              elif child in child2parent:
                  del child2parent[child]
                  unfusible.add(child)
              elif has_many_children:
                  unfusible.add(child)
              elif child not in unfusible:
                  child2parent[child] = parent
  
      # construct the chains from ancestor to descendant
      chains = []
      parent2child = {v: k for k, v in child2parent.items()}
      while child2parent:
          child, parent = child2parent.popitem()
          chain = [child, parent]
          while parent in child2parent:
              parent = child2parent.pop(parent)
              del parent2child[parent]
              chain.append(parent)
          chain.reverse()
          while child in parent2child:
              child = parent2child.pop(child)
              del child2parent[child]
              chain.append(child)
          # Skip chains with < 2 executable tasks
          ntasks = 0
          for key in chain:
              ntasks += istask(dsk[key])
              if ntasks > 1:
                  chains.append(chain)
                  break
  
      # Mutate dsk fusing chains into subgraphs
      for chain in chains:
          subgraph = {k: dsk[k] for k in chain}
          outkey = chain[0]
  
          # Update dependencies and graph
          inkeys_set = dependencies[outkey] = dependencies[chain[-1]]
          for k in chain[1:]:
              del dependencies[k]
              del dsk[k]
  
          # Create new task
          inkeys = tuple(inkeys_set)
          dsk[outkey] = (
              SubgraphCallable(subgraph, outkey, inkeys),
          ) + inkeys
  
          # Mutate `fused_trees` if key renaming is needed (renaming done in fuse)
          if rename_keys:
              chain2 = []
              for k in chain:
                  subchain = fused_trees.pop(k, False)
                  if subchain:
                      chain2.extend(subchain)
                  else:
                      chain2.append(k)
              fused_trees[outkey] = chain2
  
imports: import math
  import numbers
  from enum import Enum
  from flash.core.serve.dag.task import flatten, get, get_dependencies, ishashable, istask, reverse_dict, subs, toposort
  from flash.core.serve.dag.utils import key_split
  from flash.core.utilities.imports import _TOPIC_SERVE_AVAILABLE
label_desc: Use image node_id 11 for calling a global function with example usage: _inplace_fuse_subgraphs(dsk, keys, dependencies, fused_trees, rename_keys) without return types