class_docstr: Fits and applies PCA whitening
code: def apply(self, X: Union[np.ndarray, torch.Tensor]):
      input_is_numpy = False
      if not isinstance(X, torch.Tensor):
          X = torch.from_numpy(X)
          input_is_numpy = True
  
      X = X - self.mean
      num = torch.mm(self.DVt, X.transpose(0, 1)).transpose(0, 1)
      return num.numpy() if input_is_numpy else num
  
file_path: vissl/vissl/utils/pca.py
imports: import logging
  from typing import Union
  import numpy
  import torch
  from vissl.utils.io import load_file, save_file
label_desc: Use image node_id 4 for calling the PCA obj's underlying member method code with example usage: obj.apply(X) and returns: unknown