code: def _get_groupby_inputs(cls, groupby, groupby_params):
      inputs = [groupby]
      chunk_inputs = list(groupby.chunks)
      if isinstance(groupby_params["by"], list):
          for chunk_v, v in zip(
              groupby_params["by"], groupby.op.groupby_params["by"]
          ):
              if isinstance(v, ENTITY_TYPE):
                  inputs.append(v)
                  chunk_inputs.append(chunk_v)
      return inputs, chunk_inputs
  
imports: from collections import OrderedDict
  from functools import reduce
  import numpy
  import pandas
  from ..core import FuseChunkData, FuseChunk, ENTITY_TYPE, OutputType
  from ..core.operand import Operand, TileableOperandMixin, Fuse, ShuffleProxy, FuseChunkMixin
  from ..tensor.core import TENSOR_TYPE
  from ..tensor.datasource import tensor
  from ..tensor.operands import TensorOperandMixin
  from ..utils import calc_nsplits
  from .core import DATAFRAME_CHUNK_TYPE, SERIES_CHUNK_TYPE, INDEX_CHUNK_TYPE, DATAFRAME_TYPE, SERIES_TYPE, INDEX_TYPE, DATAFRAME_GROUPBY_TYPE, SERIES_GROUPBY_TYPE, CATEGORICAL_TYPE
  from .utils import parse_index
label_desc: Use image node_id 13 for calling the DataFrameOperandMixin obj's underlying member method code with example usage: obj._get_groupby_inputs(cls, groupby, groupby_params) and returns: inputs,  chunk_inputs