class_docstr: A class to normalize data.
class_docstr_tok: ["A","class","to","normalize","data","."]
docstr: Computes and saves normalizer.
docstr_tok: ["Computes","and","saves","normalizer","."]
code: def save(self, data):
      """Computes and saves normalizer."""
      if self.exists():
          logging.info(
              "Skip save() as %s already exists", self._done_path
          )
          return
      data_np = self._run_data(data)
      normalizer = self.compute(data_np)
      logging.info("Save normalizer to %s", self._path)
      bytes_io = io.BytesIO()
      np.savez(bytes_io, normalizer=normalizer)
      if not tf.gfile.Exists(self._work_dir):
          tf.gfile.MakeDirs(self._work_dir)
      with tf.gfile.Open(self._path, "wb") as f:
          f.write(bytes_io.getvalue())
      with tf.gfile.Open(self._done_path, "w") as f:
          f.write("")
      return normalizer
  
imports: import io
  import os
  from absl import logging
  import numpy
  import tensorflow.compat.v1
label_desc: Use image node_id 5 for calling the DataNormalizer obj's underlying member method code with example usage: obj.save(data) and returns: normalizer