def METHOD_NAME(self):
    n = 5
    _A = np.eye(n) + 0.01 * util.randn([n, n])
    A = linop.MatMul([n, 1], _A)
    x = util.randn([n, 1])
    y = A(x)
    x_lstsq = np.linalg.lstsq(_A, y, rcond=-1)[0]
    p = 1 / (np.sum(abs(_A) ** 2, axis=0).reshape([n, 1]))
    P = linop.Multiply([n, 1], p)
    x_rec = app.LinearLeastSquares(A, y, show_pbar=False).run()
    npt.assert_allclose(x_rec, x_lstsq, atol=1e-3)
    alpha = 1 / app.MaxEig(P * A.H * A, show_pbar=False).run()
    x_rec = app.LinearLeastSquares(
        A,
        y,
        solver="GradientMethod",
        alpha=alpha,
        max_power_iter=100,
        max_iter=1000,
        show_pbar=False,
    ).run()
    npt.assert_allclose(x_rec, x_lstsq, atol=1e-3)
    tau = p
    x_rec = app.LinearLeastSquares(
        A,
        y,
        solver="PrimalDualHybridGradient",
        max_iter=1000,
        tau=tau,
        show_pbar=False,
    ).run()
    npt.assert_allclose(x_rec, x_lstsq, atol=1e-3)