docs: def compute(self):
          """Perform the smoothing operations."""
          self._compute_window_size()
          smooth = []
          residual = []
  
          x, y = self.x, self.y
  
          # step through x and y data with a window window_size wide.
          self._update_values_in_window()
          self._update_mean_in_window()
          self._update_variance_in_window()
          for i, (xi, yi) in enumerate(zip(x, y)):
              if ((i - self._neighbors_on_each_side) > 0.0 and
                      (i + self._neighbors_on_each_side) < len(x)):
                  self._advance_window()
              smooth_here = self._compute_smooth_during_construction(xi)
              residual_here = self._compute_cross_validated_residual_here(xi, yi, smooth_here)
              smooth.append(smooth_here)
              residual.append(residual_here)
  
          self._store_unsorted_results(smooth, residual)