class_docstr: An subtask graph builder which build subtask graph for chunk graph based on passed band_resource.
  
  If push shuffle is used, this builder will validate predecessors orders consistency of ShuffleProxy between
  chunk graph and generated subtask graph.
code: def _gen_input_chunks(
      self,
      inp_chunks: List[ChunkType],
      chunk_to_fetch_chunk: Dict[ChunkType, ChunkType],
  ) -> List[ChunkType]:
      # gen fetch chunks for input chunks
      inp_fetch_chunks = []
      for inp_chunk in inp_chunks:
          if inp_chunk in chunk_to_fetch_chunk:
              inp_fetch_chunks.append(chunk_to_fetch_chunk[inp_chunk])
          elif isinstance(inp_chunk.op, Fetch):
              chunk_to_fetch_chunk[inp_chunk] = inp_chunk
              inp_fetch_chunks.append(inp_chunk)
          elif isinstance(inp_chunk.op, ShuffleProxy):
              n_reducers = inp_chunk.op.n_reducers
              fetch_chunk = build_fetch_shuffle(
                  inp_chunk,
                  n_reducers=n_reducers,
                  shuffle_fetch_type=self._shuffle_fetch_type,
              ).data
              chunk_to_fetch_chunk[inp_chunk] = fetch_chunk
              inp_fetch_chunks.append(fetch_chunk)
          else:
              fetch_chunk = build_fetch(inp_chunk).data
              chunk_to_fetch_chunk[inp_chunk] = fetch_chunk
              inp_fetch_chunks.append(fetch_chunk)
  
      return inp_fetch_chunks
  
imports: import itertools
  import logging
  from collections import deque, defaultdict
  from typing import Dict, List, Tuple, Type, Union
  from ....config import Config
  from ....core import ChunkGraph, ChunkType, enter_mode, DAG
  from ....core.operand import Fetch, VirtualOperand, LogicKeyGenerator, MapReduceOperand, OperandStage, ShuffleProxy, ShuffleFetchType
  from ....lib.ordered_set import OrderedSet
  from ....resource import Resource
  from ....typing import BandType, OperandType
  from ....utils import build_fetch, build_fetch_shuffle, tokenize
  from ...subtask import SubtaskGraph, Subtask
  from ..core import Task, new_task_id, MapReduceInfo
  from .assigner import AbstractGraphAssigner, GraphAssigner
  from .fusion import Coloring
label_desc: Use image node_id 4 for calling the GraphAnalyzer obj's underlying member method code with example usage: obj._gen_input_chunks(inp_chunks, chunk_to_fetch_chunk) and returns: inp_fetch_chunks