code: def testBuildInputArtifactSpec(self):
      spec = compiler_utils.build_input_artifact_spec(
          channel.Channel(type=standard_artifacts.Model)
      )
      expected_spec = text_format.Parse(
          r'artifact_type { instance_schema: "title: tfx.Model\ntype: object\n" }',
          pipeline_pb2.ComponentInputsSpec.ArtifactSpec(),
      )
      self.assertProtoEquals(spec, expected_spec)
  
      # Test artifact type with properties
      spec = compiler_utils.build_input_artifact_spec(
          channel.Channel(type=standard_artifacts.Examples)
      )
      expected_spec = text_format.Parse(
          """
          artifact_type {
            instance_schema: "title: tfx.Examples\\ntype: object\\nproperties:\\n  span:\\n    type: integer\\n    description: Span for an artifact.\\n  version:\\n    type: integer\\n    description: Version for an artifact.\\n  split_names:\\n    type: string\\n    description: JSON-encoded list of splits for an artifact. Empty string means artifact has no split.\\n"
          }
          """,
          pipeline_pb2.ComponentInputsSpec.ArtifactSpec(),
      )
      self.assertProtoEquals(spec, expected_spec)
  
imports: import os
  from absl.testing import parameterized
  from kfp.pipeline_spec import pipeline_spec_pb2
  import tensorflow
  from tfx.dsl.io import fileio
  from tfx.orchestration import data_types
  from tfx.orchestration.kubeflow.v2 import compiler_utils
  from tfx.types import artifact
  from tfx.types import channel
  from tfx.types import channel_utils
  from tfx.types import standard_artifacts
  from tfx.types.experimental import simple_artifacts
  import yaml
  from google.protobuf import text_format
label_desc: Use image node_id 10 for calling the CompilerUtilsTest obj's underlying member method code with example usage: obj.testBuildInputArtifactSpec() without return types