code: def _call(self, x1, x2):
      self._check_inputs(x1, x2)
      if isinstance(x1, DATAFRAME_TYPE) or isinstance(
          x2, DATAFRAME_TYPE
      ):
          df1, df2 = (
              (x1, x2) if isinstance(x1, DATAFRAME_TYPE) else (x2, x1)
          )
          kw = self._calc_properties(df1, df2, axis=self.axis)
          if not pd.api.types.is_scalar(df2):
              return self.new_dataframe([x1, x2], **kw)
          else:
              return self.new_dataframe([df1], **kw)
      if isinstance(x1, SERIES_TYPE) or isinstance(x2, SERIES_TYPE):
          s1, s2 = (x1, x2) if isinstance(x1, SERIES_TYPE) else (x2, x1)
          kw = self._calc_properties(s1, s2)
          if not pd.api.types.is_scalar(s2):
              return self.new_series([x1, x2], **kw)
          else:
              return self.new_series([s1], **kw)
      raise NotImplementedError(
          "Only support add dataframe, series or scalar for now"
      )
  
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 13 for calling the DataFrameBinOpMixin obj's underlying member method code with example usage: obj._call(x1, x2) and returns: self, self, self, self