code: def execute(cls, ctx, op):
      inp = ctx[op.input.key]
      axis = op.axis
      win_type = op.win_type
      window = op.window
      if win_type == "freq":
          win_type = None
          window = pd.Timedelta(window)
  
      preds = [ctx[pred.key] for pred in op.preds]
      pred_size = sum(pred.shape[axis] for pred in preds)
      succs = [ctx[succ.key] for succ in op.succs]
      succ_size = sum(succ.shape[axis] for succ in succs)
  
      xdf = pd if isinstance(inp, (pd.DataFrame, pd.Series)) else cudf
  
      if pred_size > 0 or succ_size > 0:
          data = xdf.concat(preds + [inp] + succs, axis=axis)
      else:
          data = inp
  
          # fix for pandas 1.2.0
          # see: https://github.com/pandas-dev/pandas/issues/38908
          # df.rolling().aggregate('skew') modified original data
          # so we copy it first for skew only
          if (
              _with_pandas_issue_38908
              and op.func in ["skew", "kurt"]
              and op.outputs[0].index[0] == 0
          ):
              data = data.copy()
  
      r = data.rolling(
          window=window,
          min_periods=op.min_periods,
          center=op.center,
          win_type=win_type,
          on=op.on,
          axis=axis,
          closed=op.closed,
      )
      result = r.aggregate(op.func, *op.func_args, **op.func_kwargs)
  
      if pred_size > 0 or succ_size > 0:
          slc = [slice(None)] * result.ndim
          slc[axis] = slice(pred_size, result.shape[axis] - succ_size)
          result = result.iloc[tuple(slc)]
  
      ctx[op.outputs[0].key] = result
  
imports: import numpy
  import pandas
  from ....None import opcodes
  from ....core import recursive_tile
  from ....serialization.serializables import FieldTypes, AnyField, Int64Field, BoolField, StringField, Int32Field, KeyField, TupleField, DictField, ListField
  from ....utils import lazy_import, has_unknown_shape, pd_release_version, calc_nsplits
  from ...operands import DataFrameOperand, DataFrameOperandMixin
  from ...core import DATAFRAME_TYPE
  from ...utils import build_empty_df, build_empty_series, parse_index
label_desc: Use image node_id 21 for calling the DataFrameRollingAgg obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types