code: def flex_comp_method_FRAME(op):
      op_name = op.__name__.strip("_")
  
      doc = _flex_comp_doc_FRAME.format(
          op_name=op_name, desc=_op_descriptions[op_name]["desc"]
      )
  
      @Appender(doc)
      def f(self, other, axis: Axis = "columns", level=None):
          axis = self._get_axis_number(axis) if axis is not None else 1
  
          self, other = align_method_FRAME(
              self, other, axis, flex=True, level=level
          )
  
          new_data = self._dispatch_frame_op(other, op, axis=axis)
          return self._construct_result(new_data)
  
      f.__name__ = op_name
  
      return f
  
imports: from __future__ import annotations
  import operator
  from typing import TYPE_CHECKING, cast
  import numpy
  from pandas._libs.ops_dispatch import maybe_dispatch_ufunc_to_dunder_op
  from pandas._typing import Axis, AxisInt, Level
  from pandas.util._decorators import Appender
  from pandas.core.dtypes.common import is_array_like, is_list_like
  from pandas.core.dtypes.generic import ABCDataFrame, ABCSeries
  from pandas.core.dtypes.missing import isna
  from pandas.core import algorithms, roperator
  from pandas.core.ops.array_ops import arithmetic_op, comp_method_OBJECT_ARRAY, comparison_op, get_array_op, logical_op, maybe_prepare_scalar_for_op
  from pandas.core.ops.common import get_op_result_name, unpack_zerodim_and_defer
  from pandas.core.ops.docstrings import _flex_comp_doc_FRAME, _op_descriptions, make_flex_doc
  from pandas.core.ops.invalid import invalid_comparison
  from pandas.core.ops.mask_ops import kleene_and, kleene_or, kleene_xor
  from pandas.core.ops.methods import add_flex_arithmetic_methods
  from pandas.core.roperator import radd, rand_, rdiv, rdivmod, rfloordiv, rmod, rmul, ror_, rpow, rsub, rtruediv, rxor
label_desc: Use image node_id 9 for calling a global function with example usage: flex_comp_method_FRAME(op) and returns: f, self