code: def filter_property_equal(
      artifacts,
      *,
      key: str,
      value: Union[int, float, str, bool, artifact.JsonValueType],
  ):
      """Returns artifacts with matching property values.
  
      Example usage:
  
      Consider artifacts [A, B, C] with bool property 'blessed' set to
      [True, True, False].
  
      filter_property_equal(
          [A, B, C],
          property_key='blessed',
          property_value=False,
      )
  
      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=False,
      )
  
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 12 for calling a global function with example usage: filter_property_equal(artifacts) and returns: ops