code: def testVectorStrings(self, dtype, pos, unit):
      test_string = {
          "BYTE": [b"Hello", b"World"],
          "UTF8_CHAR": [
              x.encode("utf-8") for x in ["H\xc3llo", "W\U0001f604rld"]
          ],
      }[unit]
      expected_value = {
          "BYTE": [b"ell", b"orl"],
          "UTF8_CHAR": [
              x.encode("utf-8") for x in ["\xc3ll", "\U0001f604rl"]
          ],
      }[unit]
      position = np.array(pos, dtype)
      length = np.array(3, dtype)
      substr_op = string_ops.substr(
          test_string, position, length, unit=unit
      )
      with self.cached_session():
          substr = self.evaluate(substr_op)
          self.assertAllEqual(substr, expected_value)
  
imports: from absl.testing import parameterized
  import numpy
  from tensorflow.python.framework import errors_impl
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import string_ops
  from tensorflow.python.platform import test
label_desc: Use image node_id 3 for calling the SubstrOpTest obj's underlying member method code with example usage: obj.testVectorStrings(dtype, pos, unit) without return types