code: def flex_arith_method_FRAME(op):
      op_name = op.__name__.strip("_")
  
      na_op = get_array_op(op)
      doc = make_flex_doc(op_name, "dataframe")
  
      @Appender(doc)
      def f(
          self,
          other,
          axis: Axis = "columns",
          level=None,
          fill_value=None,
      ):
          axis = self._get_axis_number(axis) if axis is not None else 1
          axis = cast(int, axis)
  
          if should_reindex_frame_op(
              self, other, op, axis, fill_value, level
          ):
              return frame_arith_method_with_reindex(self, other, op)
  
          if isinstance(other, ABCSeries) and fill_value is not None:
              # TODO: We could allow this in cases where we end up going
              #  through the DataFrame path
              raise NotImplementedError(
                  f"fill_value {fill_value} not supported."
              )
  
          other = maybe_prepare_scalar_for_op(other, self.shape)
          self, other = align_method_FRAME(
              self, other, axis, flex=True, level=level
          )
  
          if isinstance(other, ABCDataFrame):
              # Another DataFrame
              new_data = self._combine_frame(other, na_op, fill_value)
  
          elif isinstance(other, ABCSeries):
              new_data = self._dispatch_frame_op(other, op, axis=axis)
          else:
              # in this case we always have `np.ndim(other) == 0`
              if fill_value is not None:
                  self = self.fillna(fill_value)
  
              new_data = self._dispatch_frame_op(other, op)
  
          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 8 for calling a global function with example usage: flex_arith_method_FRAME(op) and returns: f, self, frame_arith_method_with_reindex