code: def testEncodeWithKeys(self):
      my_channel = Channel(type=_MyType)
      channel_future = my_channel.future()[0].value
      actual_pb = channel_utils.encode_placeholder_with_channels(
          channel_future, lambda c: c.type_name
      )
      expected_pb = text_format.Parse(
          """
        operator {
          artifact_value_op {
            expression {
              operator {
                index_op {
                  expression {
                    placeholder {
                      key: "MyTypeName"
                    }
                  }
                }
              }
            }
          }
        }
      """,
          placeholder_pb2.PlaceholderExpression(),
      )
      self.assertProtoEquals(actual_pb, expected_pb)
  
imports: import os
  from typing import Type, TypeVar
  from absl.testing import parameterized
  import tensorflow
  from tfx.dsl.placeholder import placeholder
  from tfx.proto.orchestration import placeholder_pb2
  from tfx.types import channel_utils
  from tfx.types import standard_artifacts
  from tfx.types.artifact import Artifact
  from tfx.types.artifact import Property
  from tfx.types.artifact import PropertyType
  from tfx.types.channel import Channel
  from google.protobuf import message
  from google.protobuf import text_format
label_desc: Use image node_id 4 for calling the ChannelWrappedPlaceholderTest obj's underlying member method code with example usage: obj.testEncodeWithKeys() without return types