code: def execute(cls, ctx, op):
      if getattr(cls, "_func_name", None) is not None:
          if len(op.inputs) == 2:
              df, other = ctx[op.inputs[0].key], ctx[op.inputs[1].key]
              if isinstance(
                  op.inputs[0], SERIES_CHUNK_TYPE
              ) and isinstance(op.inputs[1], DATAFRAME_CHUNK_TYPE):
                  df, other = other, df
                  func_name = getattr(cls, "_rfunc_name")
              else:
                  func_name = getattr(cls, "_func_name")
          elif pd.api.types.is_scalar(op.lhs) or isinstance(
              op.lhs, np.ndarray
          ):
              df = ctx[op.rhs.key]
              other = op.lhs
              func_name = getattr(cls, "_rfunc_name")
          else:
              df = ctx[op.lhs.key]
              other = op.rhs
              func_name = getattr(cls, "_func_name")
          if df.ndim == 2:
              kw = dict(axis=op.axis)
          else:
              kw = dict()
          if op.fill_value is not None:
              # comparison function like eq does not have `fill_value`
              kw["fill_value"] = op.fill_value
          if op.level is not None:
              # logical function like and may don't have `level` (for Series type)
              kw["level"] = op.level
          if hasattr(other, "ndim") and other.ndim == 0:
              other = other.item()
          ctx[op.outputs[0].key] = getattr(df, func_name)(other, **kw)
      else:
          inputs_iter = iter(op.inputs)
          if not pd.api.types.is_scalar(op.lhs):
              lhs = ctx[next(inputs_iter).key]
          else:
              lhs = op.lhs
          if not pd.api.types.is_scalar(op.rhs):
              rhs = ctx[next(inputs_iter).key]
          else:
              rhs = op.rhs
          ctx[op.outputs[0].key] = cls._operator(lhs, rhs)
  
imports: import itertools
  import copy
  from functools import reduce
  import numpy
  import pandas
  from ...core import ENTITY_TYPE, CHUNK_TYPE, recursive_tile
  from ...serialization.serializables import AnyField
  from ...tensor.core import TENSOR_TYPE, TENSOR_CHUNK_TYPE, ChunkData, Chunk
  from ...utils import classproperty, get_dtype
  from ..align import align_series_series, align_dataframe_series, align_dataframe_dataframe
  from ..core import DATAFRAME_TYPE, SERIES_TYPE, DATAFRAME_CHUNK_TYPE, SERIES_CHUNK_TYPE, is_chunk_meta_lazy
  from ..operands import DataFrameOperandMixin, DataFrameOperand
  from ..ufunc.tensor import TensorUfuncMixin
  from ..utils import parse_index, infer_dtypes, infer_dtype, infer_index_value, build_empty_df
label_desc: Use image node_id 8 for calling the DataFrameBinOpMixin obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types