code: def testFlatExecutionInfoProvider_ExecProperty(self):
      m = module.DependencyModule()
      m.add_provider(
          di_providers.FlatExecutionInfoProvider(
              ["my_int", "my_string", "my_list"]
          )
      )
      m.provide_value(
          data_types.ExecutionInfo(
              exec_properties={
                  "my_int": 1,
                  "my_string": "hello",
                  "my_list": [1, 2, 3],
              }
          )
      )
  
      self.assertEqual(m.get("my_int", int), 1)
      self.assertEqual(m.get("my_string", str), "hello")
      self.assertEqual(m.get("my_list", list[int]), [1, 2, 3])
  
imports: from collections.abc import Sequence
  from typing import Optional
  import tensorflow
  from tfx.orchestration.portable import data_types
  from tfx.orchestration.portable.execution import di_providers
  from tfx.types import artifact
  from tfx.utils.di import errors
  from tfx.utils.di import module
label_desc: Use image node_id 3 for calling the ProvidersTest obj's underlying member method code with example usage: obj.testFlatExecutionInfoProvider_ExecProperty() without return types