code: def test_save_and_load_pitch(self):
      pitch_name = "pitch_test"
      voiced_mask_name = "voiced_mask_test"
      voiced_prob_name = "voiced_prob_test"
      pitch_featurizer = PitchFeaturizer(
          pitch_name=pitch_name,
          voiced_mask_name=voiced_mask_name,
          voiced_prob_name=voiced_prob_name,
          hop_length=self.hop_len,
          sample_rate=self.sample_rate,
      )
  
      with self._create_test_dir() as test_dir:
          feature_dir = test_dir / "feature"
          pitch_featurizer.save(
              manifest_entry=self.manifest_entry,
              audio_dir=test_dir,
              feature_dir=feature_dir,
          )
          pitch_dict = pitch_featurizer.load(
              manifest_entry=self.manifest_entry,
              audio_dir=test_dir,
              feature_dir=feature_dir,
          )
  
      pitch = pitch_dict[pitch_name]
      voiced_mask = pitch_dict[voiced_mask_name]
      voiced_prob = pitch_dict[voiced_prob_name]
  
      assert len(pitch.shape) == 1
      assert pitch.shape[0] == self.spec_len
      assert pitch.dtype == torch.float32
  
      assert len(voiced_mask.shape) == 1
      assert voiced_mask.shape[0] == self.spec_len
      assert voiced_mask.dtype == torch.bool
  
      assert len(voiced_prob.shape) == 1
      assert voiced_prob.shape[0] == self.spec_len
      assert voiced_prob.dtype == torch.float32
  
imports: import contextlib
  import tempfile
  from pathlib import Path
  import numpy
  import pytest
  import soundfile
  import torch
  from nemo.collections.tts.parts.preprocessing.features import EnergyFeaturizer, MelSpectrogramFeaturizer, PitchFeaturizer
label_desc: Use image node_id 8 for calling the TestTTSFeatures obj's underlying member method code with example usage: obj.test_save_and_load_pitch() without return types