code: def _tile_head(cls, op: "HeadOptimizedDataSource"):
      tileds = cls._tile(op)
      chunks = tileds[0].chunks
  
      # execute first chunk
      yield chunks[:1]
  
      chunk_shape = chunks[0].shape
      if chunk_shape[0] == op.nrows:
          # the first chunk has enough data
          tileds[0]._nsplits = tuple((s,) for s in chunk_shape)
          chunks[0]._shape = chunk_shape
          tileds[0]._chunks = chunks[:1]
          tileds[0]._shape = chunk_shape
      else:
          for chunk in tileds[0].chunks:
              chunk.op.nrows = None
          # otherwise
          tiled = yield from recursive_tile(tileds[0].iloc[: op.nrows])
          tileds = [tiled]
      return tileds
  
imports: import asyncio
  import uuid
  from typing import List, Optional, Union
  import numpy
  from ...core import recursive_tile
  from ...core.context import get_context, Context
  from ...config import options
  from ...oscar import ActorNotExist
  from ...serialization.serializables import Int64Field, StringField
  from ...typing import TileableType, OperandType
  from ...utils import parse_readable_size
  from ..core import IndexValue, OutputType
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..utils import merge_index_value
label_desc: Use image node_id 3 for calling the HeadOptimizedDataSource obj's underlying member method code with example usage: obj._tile_head(cls, op) and returns: tileds