code: def validate_output_shapes(
      self, audio_features, expected_feature_lengths
  ):
      for feat, expected_len in expected_feature_lengths.items():
          arr = audio_features[feat]
          try:
              self.assertLen(arr, expected_len)
          except AssertionError as e:
              raise AssertionError("%s feature: %s" % (e, feat)) from e
          self.assertTrue(np.all(np.isfinite(arr)))
  
imports: from unittest import mock
  from absl.testing import parameterized
  import ddsp
  from ddsp.test_util import gen_np_batched_sinusoids
  from ddsp.test_util import gen_np_sinusoid
  import ddsp.training.metrics
  import numpy
  import tensorflow.compat.v2
label_desc: Use image node_id 3 for calling the ComputeAudioFeaturesTest obj's underlying member method code with example usage: obj.validate_output_shapes(audio_features, expected_feature_lengths) without return types