code: def test_confusion_analysis_errors(
      self, input_example, expected_error_regex
  ):
      with self.assertRaisesRegex(ValueError, expected_error_regex):
          # Use the direct runner here to get exception propagation.
          with beam.Pipeline() as p:
              baseline_examples = p | "Create Base" >> beam.Create(
                  [input_example]
              )
              test_examples = p | "Create Test" >> beam.Create(
                  [input_example]
              )
              _ = (
                  (baseline_examples, test_examples)
                  | feature_skew_detector.DetectFeatureSkewImpl(
                      ["id"],
                      confusion_configs=[
                          feature_skew_detector.ConfusionConfig(
                              name="val"
                          ),
                      ],
                  )
              )[feature_skew_detector.CONFUSION_KEY]
  
imports: import traceback
  from absl.testing import absltest
  from absl.testing import parameterized
  import apache_beam
  from apache_beam.testing import util
  import tensorflow
  from tensorflow_data_validation.utils import beam_runner_util
  from tensorflow_data_validation.skew import feature_skew_detector
  from tensorflow_data_validation.skew.protos import feature_skew_results_pb2
  from tensorflow_data_validation.utils import test_util
  from google.protobuf import text_format
label_desc: Use image node_id 14 for calling the FeatureSkewDetectorTest obj's underlying member method code with example usage: obj.test_confusion_analysis_errors(input_example, expected_error_regex) without return types