def METHOD_NAME(self, eppci: ExtendedPPCI, with_ortools=True, **kwargs):
    if "estimator" in kwargs and kwargs["estimator"].lower() != "lav":  # pragma: no cover
        self.logger.warning("LP Algorithm supports only LAV Estimator!! Set to LAV!!")
    # matrix calculation object
    sem = BaseAlgebra(eppci)
    current_error, cur_it = 100., 0
    E = eppci.E
    while current_error > self.tolerance and cur_it < self.max_iterations:
        self.logger.debug("Starting iteration {:d}".format(1 + cur_it))
        try:
            # residual r
            r = sem.create_rx(E)
            # jacobian matrix H
            H = sem.create_hx_jacobian(E)
            # state vector difference d_E
            # d_E = G_m^-1 * (H' * R^-1 * r)
            d_E = self._solve_lp(H, E, r, with_ortools=with_ortools)
            E += d_E
            eppci.update_E(E)
            # prepare next iteration
            cur_it += 1
            current_error = np.max(np.abs(d_E))
            self.logger.debug("Current error: {:.7f}".format(current_error))
        except np.linalg.linalg.LinAlgError:  # pragma: no cover
            self.logger.error("A problem appeared while using the linear algebra methods."
                              "Check and change the measurement set.")
            return False
    # check if the estimation is successfull
    self.check_result(current_error, cur_it)
    return eppci