code: def test_binary_operators(self):
      pdf = pd.DataFrame(
          {"A": [0, 2, 4], "B": [4, 2, 0], "X": [-1, 10, 0]},
          index=np.random.rand(3),
      )
      psdf = ps.from_pandas(pdf)
  
      self.assert_eq(psdf + psdf.copy(), pdf + pdf.copy())
      self.assert_eq(
          psdf + psdf.loc[:, ["A", "B"]], pdf + pdf.loc[:, ["A", "B"]]
      )
      self.assert_eq(
          psdf.loc[:, ["A", "B"]] + psdf, pdf.loc[:, ["A", "B"]] + pdf
      )
  
      self.assertRaisesRegex(
          ValueError,
          "it comes from a different dataframe",
          lambda: ps.range(10).add(ps.range(10)),
      )
  
      self.assertRaisesRegex(
          TypeError,
          "add with a sequence is currently not supported",
          lambda: ps.range(10).add(ps.range(10).id),
      )
  
      psdf_other = psdf.copy()
      psdf_other.columns = pd.MultiIndex.from_tuples(
          [("A", "Z"), ("B", "X"), ("C", "C")]
      )
      self.assertRaisesRegex(
          ValueError,
          "cannot join with no overlapping index names",
          lambda: psdf.add(psdf_other),
      )
  
imports: import unittest
  import numpy
  import pandas
  from pyspark import pandas
  from pyspark.testing.pandasutils import ComparisonTestBase
  from pyspark.testing.sqlutils import SQLTestUtils
label_desc: Use image node_id 2 for calling the FrameBinaryOpsMixin obj's underlying member method code with example usage: obj.test_binary_operators() without return types