code: def test_equal_property_values_has_equal_property(self):
      artifacts = self.create_artifacts(n=3)
      with self.subTest(name="HasProperty"):
          results = self._equal_property_values(
              artifacts, property_key="num_steps", property_value=3
          )
          self.assertLen(results, 1)
          self.assertEqual(results[0].num_steps, 3)
      with self.subTest(name="MoreThanOneHasProperty"):
          new_artifact = DummyArtifact()
          new_artifact.num_steps = 3
          artifacts.append(new_artifact)
          results = self._equal_property_values(
              artifacts,
              property_key="num_steps",
              property_value=3,
              is_custom_property=True,
          )
          self.assertLen(results, 2)
          self.assertEqual(results[0].num_steps, results[1].num_steps)
  
file_path: tfx/tfx/dsl/input_resolution/ops/equal_property_values_op_test.py
imports: import tensorflow
  from tfx import v1
  from tfx.dsl.input_resolution.ops import ops
  from tfx.dsl.input_resolution.ops import test_utils
  from tfx.types import artifact
label_desc: Use image node_id 5 for calling the EqualPropertyValuesOpTest obj's underlying member method code with example usage: obj.test_equal_property_values_has_equal_property() without return types