code: def save_dataset_statistics(
      data_provider,
      file_path=None,
      batch_size=1,
      power_frame_size=256,
  ):
      """Calculate dataset stats and save in a pickle file.
  
      Calls out to postprocessing.compute_dataset_statistics.
  
      Args:
        data_provider: A DataProvider from ddsp.training.data.
        file_path: Path for saved pickle file of dataset statistics.
        batch_size: Iterate over dataset with this batch size.
        power_frame_size: Calculate power features on the fly with this frame size.
  
      Returns:
        Dictionary of dataset statistics. This is an overcomplete set of statistics,
        as there are now several different tone transfer implementations (js, colab,
        vst) that need different statistics for normalization.
      """
  
      ds_stats = (
          ddsp.training.postprocessing.compute_dataset_statistics(
              data_provider, batch_size, power_frame_size
          )
      )
  
      # Save.
      if file_path is not None:
          with tf.io.gfile.GFile(file_path, "wb") as f:
              pickle.dump(ds_stats, f)
          print(f"Done! Saved dataset statistics to: {file_path}")
  
      return ds_stats
  
file_path: ddsp/ddsp/colab/colab_utils.py
imports: import base64
  import io
  import pickle
  import ddsp
  import ddsp.training
  from google.colab import files
  from google.colab import output
  from IPython import display
  import note_seq
  import numpy
  from scipy.io import wavfile
  import tensorflow.compat.v2
label_desc: Use image node_id 5 for calling a global function with example usage: save_dataset_statistics(data_provider, file_path, batch_size, power_frame_size) and returns: ds_stats