code: def filter_custom_property_equal(
      artifacts,
      *,
      key: str,
      value: Union[int, float, str, bool, artifact.JsonValueType],
  ):
      """Returns artifacts with matching custom property values.
  
      Example usage:
  
      Consider artifact [A, B, C] with int custom property 'purity' set to
      [1, 1, 2].
  
      filter_custom_property_equal(
          [A, B, C],
          property_key='purity',
          property_value=2,
      )
  
      will return [C].
  
      Args:
        artifacts: The list of artifacts to filter.
        key: The property key to match by.
        value: The expected property value to match by.
  
      Returns:
        Artifact(s) with matching custom property (or property) values.
      """
      return ops.EqualPropertyValues(
          artifacts,
          property_key=key,
          property_value=value,
          is_custom_property=True,
      )
  
imports: from typing import Optional, Sequence, Union
  from absl import logging
  from tfx.dsl.input_resolution import resolver_function
  from tfx.dsl.input_resolution.ops import ops
  from tfx.types import artifact
  from tfx.types import channel
label_desc: Use image node_id 13 for calling a global function with example usage: filter_custom_property_equal(artifacts) and returns: ops