def test_estimate_rank_lo(self, dtype, k_start, use_qb):
        X = rand_tn1d_sect(30, 10, dtype=dtype)

        Ue, se, VHe = qu.svd(X.A)
        actual_rank = sum(se > se[0] * 1e-3)

        k = qu.estimate_rank(X, 1e-3, k_start=k_start,
                             use_qb=use_qb, use_sli=False)
        assert_allclose(k, actual_rank, rtol=0.3 if use_qb else 0.5)

        assert qu.estimate_rank(X, 1e-3, k_start=k_start, k_max=8) == 8
    def test_estimate_rank(self, dtype, shape, k_start, use_qb):
        rnk = 100
        X = rand_rank(*shape, rnk, dtype=dtype)

        Ue, se, VHe = qu.svd(X)
        assert_allclose(se[rnk:], 0.0, atol=1e-5)

        k = qu.estimate_rank(X, 1e-3, k_start=k_start,
                             use_qb=use_qb, use_sli=False)
        assert_allclose(k, 100, rtol=0.3)

        assert qu.estimate_rank(X, 1e-3, k_start=k_start, k_max=50) == 50