def iterate(self, max_iter=150, n_rewightings=1):
        r"""Iterate

        This method calls update until either convergence criteria is met or
        the maximum number of iterations is reached

        Parameters
        ----------
        max_iter : int, optional
            Maximum number of iterations (default is 150)
        n_rewightings : int, optional
            Number of reweightings to perform (default is 1)

        """

        self._run_alg(max_iter)

        if not isinstance(self._reweight, type(None)):
            for k in range(n_rewightings):
                self._reweight.reweight(self._linear.op(self._x_new))
                self._run_alg(max_iter)

        # retrieve metrics results
        self.retrieve_outputs()
        # rename outputs as attributes
        self.x_final = self._x_new
        self.y_final = self._y_new