code: def tile(cls, op: "DataFrameValueCounts"):
      inp = op.input
      out = op.outputs[0]
  
      if len(inp.chunks) == 1:
          chunk_op = op.copy().reset_key()
          chunk_param = out.params
          chunk_param["index"] = (0,)
          chunk = chunk_op.new_chunk(inp.chunks, kws=[chunk_param])
  
          new_op = op.copy()
          param = out.params
          param["chunks"] = [chunk]
          param["nsplits"] = ((np.nan,),)
          return new_op.new_seriess(op.inputs, kws=[param])
  
      inp = Series(inp)
  
      if op.dropna:
          inp = inp.dropna()
  
      inp = inp.groupby(inp, sort=not _keep_original_order).count(
          method=op.method
      )
  
      if op.normalize:
          if op.convert_index_to_interval:
              if has_unknown_shape(op.input):
                  yield
              inp = inp.truediv(op.input.shape[0], axis=0)
          else:
              inp = inp.truediv(inp.sum(), axis=0)
  
      if op.sort:
          inp = inp.sort_values(
              ascending=op.ascending,
              kind="mergesort" if _keep_original_order else "quicksort",
          )
  
          if op.nrows:
              # set to sort_values
              inp.op.nrows = op.nrows
      elif op.nrows:
          inp = inp.iloc[: op.nrows]
  
      ret = yield from recursive_tile(inp)
  
      chunks = []
      for c in ret.chunks:
          chunk_op = DataFrameValueCounts(
              convert_index_to_interval=op.convert_index_to_interval,
              stage=OperandStage.map,
          )
          chunk_params = c.params
          if op.convert_index_to_interval:
              # convert index to IntervalDtype
              chunk_params["index_value"] = parse_index(
                  pd.IntervalIndex([]), c, store_data=False
              )
          chunks.append(chunk_op.new_chunk([c], kws=[chunk_params]))
  
      new_op = op.copy()
      params = out.params
      params["chunks"] = chunks
      params["nsplits"] = ret.nsplits
      return new_op.new_seriess(out.inputs, kws=[params])
  
file_path: mars/mars/dataframe/base/value_counts.py
imports: import numpy
  import pandas
  from ...None import opcodes
  from ...core import OutputType, recursive_tile
  from ...core.operand import OperandStage
  from ...serialization.serializables import KeyField, BoolField, Int64Field, StringField
  from ...utils import has_unknown_shape, pd_release_version
  from ..core import Series
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..utils import build_series, parse_index
label_desc: Use image node_id 4 for calling the DataFrameValueCounts obj's underlying member method code with example usage: obj.tile(cls, op) and returns: new_op, new_op