code: def test_tuple(self):
      # Simple tuple
      self.assertEqual(
          parse("(float32)", self.sym),
          ct.DataShape(ct.Tuple([ct.DataShape(ct.float32)])),
      )
      self.assertEqual(
          parse("(int16, int32)", self.sym),
          ct.DataShape(
              ct.Tuple([ct.DataShape(ct.int16), ct.DataShape(ct.int32)])
          ),
      )
      # A trailing comma is ok
      self.assertEqual(
          parse("(float32,)", self.sym),
          ct.DataShape(ct.Tuple([ct.DataShape(ct.float32)])),
      )
      self.assertEqual(
          parse("(int16, int32,)", self.sym),
          ct.DataShape(
              ct.Tuple([ct.DataShape(ct.int16), ct.DataShape(ct.int32)])
          ),
      )
  
imports: from __future__ import absolute_import, division, print_function
  import unittest
  import pytest
  from datashader import datashape
  from datashader.datashape.util.testing import assert_dshape_equal
  from datashader.datashape.parser import parse
  from datashader.datashape import coretypes
  from datashader.datashape import DataShapeSyntaxError
label_desc: Use image node_id 2 for calling the TestDataShapeParseTuple obj's underlying member method code with example usage: obj.test_tuple() without return types