code: def test_expect_types(self):
      @expect_types(a=int, b=int)
      def foo(a, b, c):
          return a, b, c
  
      self.assertEqual(foo(1, 2, 3), (1, 2, 3))
      self.assertEqual(foo(1, 2, c=3), (1, 2, 3))
      self.assertEqual(foo(1, b=2, c=3), (1, 2, 3))
      self.assertEqual(foo(1, 2, c="3"), (1, 2, "3"))
  
      for not_int in (str, float):
          with self.assertRaises(TypeError) as e:
              foo(not_int(1), 2, 3)
          self.assertEqual(
              e.exception.args[0],
              "{qualname}() expected a value of type "
              "int for argument 'a', but got {t} instead.".format(
                  qualname=qualname(foo),
                  t=not_int.__name__,
              ),
          )
          with self.assertRaises(TypeError):
              foo(1, not_int(2), 3)
          with self.assertRaises(TypeError):
              foo(not_int(1), not_int(2), 3)
  
imports: from operator import attrgetter
  from types import FunctionType
  from unittest import TestCase
  from nose_parameterized import parameterized
  from numpy import arange, array, dtype
  import pytz
  from six import PY3
  from zipline.utils.preprocess import call, preprocess
  from zipline.utils.input_validation import expect_dimensions, ensure_timezone, expect_element, expect_dtypes, expect_types, optional, optionally
label_desc: Use image node_id 9 for calling the PreprocessTestCase obj's underlying member method code with example usage: obj.test_expect_types() and returns: a,  b,  c