code: def testUnbatchDatasetWithStrings(self):
      data = tuple([math_ops.range(10) for _ in range(3)])
      data = dataset_ops.Dataset.from_tensor_slices(data)
      data = data.map(lambda x, y, z: (x, string_ops.as_string(y), z))
      expected_types = (dtypes.int32, dtypes.string, dtypes.int32)
      data = data.batch(2)
      self.assertEqual(
          expected_types, dataset_ops.get_legacy_output_types(data)
      )
      data = data.unbatch()
      self.assertEqual(
          expected_types, dataset_ops.get_legacy_output_types(data)
      )
  
      self.assertDatasetProduces(
          data, [(i, compat.as_bytes(str(i)), i) for i in range(10)]
      )
  
imports: from absl.testing import parameterized
  import numpy
  from tensorflow.python.data.kernel_tests import checkpoint_test_base
  from tensorflow.python.data.kernel_tests import test_base
  from tensorflow.python.data.ops import dataset_ops
  from tensorflow.python.data.ops import options
  from tensorflow.python.framework import combinations
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import errors
  from tensorflow.python.framework import sparse_tensor
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops import string_ops
  from tensorflow.python.ops.ragged import ragged_factory_ops
  from tensorflow.python.platform import test
  from tensorflow.python.util import compat
label_desc: Use image node_id 4 for calling the UnbatchTest obj's underlying member method code with example usage: obj.testUnbatchDatasetWithStrings() without return types