code: def test_binary_operator_sub(self):
      # Positive
      pdf = pd.DataFrame({"a": [2], "b": [1]})
      psdf = ps.from_pandas(pdf)
  
      self.assert_eq(psdf["a"] - psdf["b"], pdf["a"] - pdf["b"])
  
      # Negative
      psdf = ps.DataFrame({"a": ["x"], "b": [1]})
      ks_err_msg = "Subtraction can not be applied to given types"
      self.assertRaisesRegex(
          TypeError, ks_err_msg, lambda: psdf["b"] - psdf["a"]
      )
      self.assertRaisesRegex(
          TypeError, ks_err_msg, lambda: psdf["b"] - "literal"
      )
      self.assertRaisesRegex(
          TypeError, ks_err_msg, lambda: "literal" - psdf["b"]
      )
  
      ks_err_msg = "Subtraction can not be applied to strings"
      self.assertRaisesRegex(
          TypeError, ks_err_msg, lambda: psdf["a"] - psdf["b"]
      )
      self.assertRaisesRegex(
          TypeError, ks_err_msg, lambda: 1 - psdf["a"]
      )
      self.assertRaisesRegex(
          TypeError, ks_err_msg, lambda: psdf["a"] - 1
      )
  
      psdf = ps.DataFrame({"a": ["x"], "b": ["y"]})
      self.assertRaisesRegex(
          TypeError, ks_err_msg, lambda: psdf["a"] - psdf["b"]
      )
  
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 4 for calling the FrameBinaryOpsMixin obj's underlying member method code with example usage: obj.test_binary_operator_sub() without return types