code: def testHasChangeThreshold(self):
      eval_config = text_format.Parse(
          """
        metrics_specs {
          metrics {
            class_name: "MeanLabel"
            threshold {
              change_threshold {
                direction: HIGHER_IS_BETTER
                absolute { value: 0.1 }
              }
            }
          }
        }
      """,
          config_pb2.EvalConfig(),
      )
  
      self.assertTrue(config_util.has_change_threshold(eval_config))
  
      eval_config = text_format.Parse(
          """
        metrics_specs {
          thresholds {
            key: "my_metric"
            value {
              change_threshold {
                direction: HIGHER_IS_BETTER
                absolute { value: 0.1 }
              }
            }
          }
        }
      """,
          config_pb2.EvalConfig(),
      )
  
      self.assertTrue(config_util.has_change_threshold(eval_config))
  
      eval_config = text_format.Parse(
          """
        metrics_specs {
          metrics {
            class_name: "MeanLabel"
            threshold {
              value_threshold {
                lower_bound { value: 0.9 }
              }
            }
          }
        }
      """,
          config_pb2.EvalConfig(),
      )
  
      self.assertFalse(config_util.has_change_threshold(eval_config))
  
file_path: model-analysis/tensorflow_model_analysis/utils/config_util_test.py
imports: import tensorflow
  from tensorflow_model_analysis.proto import config_pb2
  from tensorflow_model_analysis.utils import config_util
  from google.protobuf import text_format
label_desc: Use image node_id 11 for calling the ConfigTest obj's underlying member method code with example usage: obj.testHasChangeThreshold() without return types