code: def _tile_directional_series(cls, op):
      in_series = op.inputs[0]
      series = op.outputs[0]
      forward = op.method == "ffill"
  
      # map to get individual results and summaries
      summary_chunks = np.empty(in_series.chunk_shape, dtype=object)
      for c in in_series.chunks:
          new_chunk_op = op.copy().reset_key()
          new_chunk_op.stage = OperandStage.map
          summary_chunks[c.index] = new_chunk_op.new_chunk(
              [c], shape=(1,), dtype=series.dtype
          )
  
      # combine summaries into results
      output_chunks = [
          cls._build_combine(
              op, in_series.chunks, summary_chunks, i, forward
          )
          for i in range(len(in_series.chunks))
      ]
      new_op = op.copy().reset_key()
      return new_op.new_tileables(
          op.inputs,
          shape=in_series.shape,
          nsplits=in_series.nsplits,
          chunks=output_chunks,
          dtype=series.dtype,
          index_value=series.index_value,
      )
  
imports: import itertools
  import numpy
  import pandas
  from ...None import opcodes
  from ...config import options
  from ...core import ENTITY_TYPE, Entity, OutputType, get_output_types
  from ...core.operand import OperandStage
  from ...serialization.serializables import StringField, AnyField, BoolField, Int64Field
  from ..align import align_dataframe_dataframe, align_dataframe_series, align_series_series
  from ..core import DATAFRAME_TYPE, SERIES_TYPE
  from ..operands import DataFrameOperandMixin, DataFrameOperand
  from ..utils import validate_axis
label_desc: Use image node_id 17 for calling the FillNA obj's underlying member method code with example usage: obj._tile_directional_series(cls, op) and returns: new_op