code: def ffill(df, axis=None, inplace=False, limit=None, downcast=None):
      """
      Synonym for :meth:`DataFrame.fillna` with ``method='ffill'``.
  
      Returns
      -------
      {klass} or None
          Object with missing values filled or None if ``inplace=True``.
      """
      return fillna(
          df,
          method="ffill",
          axis=axis,
          inplace=inplace,
          limit=limit,
          downcast=downcast,
      )
  
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 2 for calling a global function with example usage: ffill(df, axis, inplace, limit, downcast) and returns: fillna