docs: def _update_x_transforms(self):
          """
          Compute a new set of x-transform functions phik.
  
          phik(xk) = theta(y) - sum of phii(xi) over i!=k
  
          This is the first of the eponymous conditional expectations. The conditional
          expectations are computed using the SuperSmoother.
          """
          # start by subtracting all transforms
          theta_minus_phis = self.y_transform - numpy.sum(self.x_transforms, axis=0)
  
          # add one transform at a time so as to exclude it from the subtracted sum
          for xtransform_index in range(len(self.x_transforms)):
              xtransform = self.x_transforms[xtransform_index]
              sorted_data_indices = self._xi_sorted[xtransform_index]
              xk_sorted = sort_vector(self.x[xtransform_index], sorted_data_indices)
              xtransform_sorted = sort_vector(xtransform, sorted_data_indices)
              theta_minus_phis_sorted = sort_vector(theta_minus_phis, sorted_data_indices)
  
              # minimize sums by just adding in the phik where i!=k here.
              to_smooth = theta_minus_phis_sorted + xtransform_sorted
  
              smoother = perform_smooth(xk_sorted, to_smooth, smoother_cls=self._smoother_cls)
              updated_x_transform_smooth = smoother.smooth_result
              updated_x_transform_smooth -= numpy.mean(updated_x_transform_smooth)
  
              # store updated transform in the order of the original data
              unsorted_xt = unsort_vector(updated_x_transform_smooth, sorted_data_indices)
              self.x_transforms[xtransform_index] = unsorted_xt
  
              # update main expession with new smooth. This was done in the original FORTRAN
              tmp_unsorted = unsort_vector(to_smooth, sorted_data_indices)
              theta_minus_phis = tmp_unsorted - unsorted_xt