class_docstr: CIFAR10 data set from https://www.cs.toronto.edu/~kriz/cifar.html
  
  Arguments:
      path (str): Local path to copy data files.
      normalize (bool): Flag to normalize data.
      whiten (bool): Flag to apply whitening transform.
      pad_classes (bool): Flag to pad out class count to 16
                          for compatibility with conv layers on GPU.
docstr: Use train set statistics to apply the ZCA whitening transform to
  both train and test sets.
docstr_tok: ["Use","train","set","statistics","to","apply","the","ZCA","whitening","transform","to","both","train","and","test","sets","."]
code: def zca_whiten(train, test, cache=None):
      """
      Use train set statistics to apply the ZCA whitening transform to
      both train and test sets.
      """
      if cache and os.path.isfile(cache):
          with open(cache, "rb") as f:
              (meanX, W) = pickle_load(f)
      else:
          meanX, W = CIFAR10._compute_zca_transform(train)
          if cache:
              logger.info("Caching ZCA transform matrix")
              with open(cache, "wb") as f:
                  pickle.dump((meanX, W), f, 2)
  
      logger.info("Applying ZCA whitening transform")
      train_w = np.dot(train - meanX, W)
      test_w = np.dot(test - meanX, W)
  
      return train_w, test_w
  
imports: from __future__ import division
  from future import standard_library
  from builtins import str
  import gzip
  import logging
  import numpy
  import os
  import tarfile
  from neon.util.compat import pickle
  from neon.util.compat import pickle_load
  from neon.data.datasets import Dataset
  from neon.data.dataiterator import ArrayIterator
label_desc: Use image node_id 5 for calling the CIFAR10 obj's underlying member method code with example usage: obj.zca_whiten(train, test, cache) and returns: train_w,  test_w