docs: def _apply_projection(self, Av):
          r'''Computes :math:`\langle C,M_lAM_rV_n\rangle` efficiently with a
          three-term recurrence.'''
          PAv, UAp = self.projection.apply_complement(Av, return_Ya=True)
          self._UAps.append(UAp)
          c = UAp.copy()
          rhos = self.rhos
          if self.iter > 0:
              c -= (1 + rhos[-1]/rhos[-2])*self._UAps[-2]
          if self.iter > 1:
              c += rhos[-2]/rhos[-3]*self._UAps[-3]
          c *= ((-1)**self.iter) / numpy.sqrt(rhos[-1])
          if self.iter > 0:
              c -= numpy.sqrt(rhos[-2]/rhos[-1]) * self.C[:, [-1]]
          self.C = numpy.c_[self.C, c]
          return PAv