      @staticmethod
      def temporally_smooth(landmarks):
          """ apply temporal filtering on the 2D points """
          filter_half_length = 2
          temporal_filter = np.ones((1, 1, 2 * filter_half_length + 1))
          temporal_filter = temporal_filter / temporal_filter.sum()
  
 
</s> remove         temporal_filter = np.ones((1, 1, 2*filter_half_length+1))
 </s> add         temporal_filter = np.ones((1, 1, 2 * filter_half_length + 1)) </s> remove         return self.normalized_to_original(landmarks_norm_rec,
                                           self.normalized["scale_factors"],
                                           self.normalized["mean_coords"])
 </s> add         retval = self.normalized_to_original(landmarks_norm_rec,
                                             self.normalized["scale_factors"],
                                             self.normalized["mean_coords"])

        logger.debug("Spatially Filtered: %s", retval)
        return retval </s> remove         start_tileblock = np.tile(landmarks[:, :, 0][:, :, np.newaxis],
                                  [1, 1, filter_half_length])
        end_tileblock = np.tile(landmarks[:, :, -1][:, :, np.newaxis],
                                [1, 1, filter_half_length])
        landmarks_padded = np.dstack((start_tileblock,
                                      landmarks,
                                      end_tileblock))
        return signal.convolve(landmarks_padded, temporal_filter,
                               mode='valid', method='fft')
 </s> add         start_tileblock = np.tile(landmarks[:, :, 0][:, :, np.newaxis], [1, 1, filter_half_length])
        end_tileblock = np.tile(landmarks[:, :, -1][:, :, np.newaxis], [1, 1, filter_half_length])
        landmarks_padded = np.dstack((start_tileblock, landmarks, end_tileblock))

        retval = signal.convolve(landmarks_padded, temporal_filter, mode='valid', method='fft')
        logger.debug("Temporally Smoothed: %s", retval)
        return retval </s> remove         normalized_shapes_tbl = np.reshape(landmarks_norm,
                                           [68*2, landmarks_norm.shape[2]]).T
        self.shapes_model = decomposition.PCA(
            n_components=num_components,
            whiten=True,
            random_state=1).fit(normalized_shapes_tbl)
 </s> add         normalized_shapes_tbl = np.reshape(landmarks_norm, [68*2, landmarks_norm.shape[2]]).T
        self.shapes_model = decomposition.PCA(n_components=num_components,
                                              whiten=True,
                                              random_state=1).fit(normalized_shapes_tbl)
        logger.debug("Temporally Smooth")
      @staticmethod
      def temporally_smooth(landmarks):
          """ apply temporal filtering on the 2D points """
        logger.debug("Temporally Smooth")
          filter_half_length = 2
          temporal_filter = np.ones((1, 1, 2 * filter_half_length + 1))
          temporal_filter = temporal_filter / temporal_filter.sum()
  
keep keep add keep keep keep keep
 Add Face Hashes to Alignments (#550)

* Convert main scripts to use face hashes

* Alignment tool: Use hashes, add logging, add face rename function

* More logging. Update Manual tool to work with hashing 
tools/lib_alignments/jobs.py