code: def test_validate_and_update_models_and_configs(
      self, eval_shared_models, cf_configs, expected_exception_regex
  ):
      with self.assertRaisesRegex(ValueError, expected_exception_regex):
          (
              counterfactual_predictions_extractor._validate_and_update_models_and_configs(
                  eval_shared_models, cf_configs
              )
          )
  
imports: import os
  import tempfile
  from absl.testing import parameterized
  import apache_beam
  from apache_beam.testing import util
  import numpy
  import tensorflow
  from tensorflow_model_analysis import constants
  from tensorflow_model_analysis.api import model_eval_lib
  from tensorflow_model_analysis.api import types
  from tensorflow_model_analysis.eval_saved_model import testutil
  from tensorflow_model_analysis.extractors import counterfactual_predictions_extractor
  from tensorflow_model_analysis.extractors import features_extractor
  from tensorflow_model_analysis.proto import config_pb2
  from tfx_bsl.tfxio import tensor_adapter
  from tfx_bsl.tfxio import test_util
  from google.protobuf import text_format
  from tensorflow_metadata.proto.v0 import schema_pb2
label_desc: Use image node_id 2 for calling the CounterfactualPredictionsExtactorTest obj's underlying member method code with example usage: obj.test_validate_and_update_models_and_configs(eval_shared_models, cf_configs, expected_exception_regex) without return types