예제 #1
0
def test_svds(dtype, R, R1, num_charges):
    np.random.seed(10)
    D = 30
    charges = [
        BaseCharge(np.random.randint(-5, 6, (D, num_charges)),
                   charge_types=[U1Charge] * num_charges) for n in range(R)
    ]
    flows = [True] * R
    A = BlockSparseTensor.random(
        [Index(charges[n], flows[n]) for n in range(R)], dtype=dtype)

    u, s, v, _ = decompositions.svd(bs, A, R1)
    u_dense, s_dense, v_dense, _ = np_decompositions.svd(np, A.todense(), R1)
    res1 = bs.tensordot(bs.tensordot(u, bs.diag(s), 1), v, 1)
    res2 = np.tensordot(np.tensordot(u_dense, np.diag(s_dense), 1), v_dense, 1)
    np.testing.assert_almost_equal(res1.todense(), res2)
def test_outer_product(R1, R2, dtype, num_charges):
    np.random.seed(10)
    backend = symmetric_backend.SymmetricBackend()
    a = get_tensor(R1, num_charges, dtype)
    b = get_tensor(R2, num_charges, dtype)
    actual = backend.outer_product(a, b)
    expected = tensordot(a, b, 0)
    np.testing.assert_allclose(expected.data, actual.data)
    assert np.all([
        charge_equal(expected._charges[n], actual._charges[n])
        for n in range(len(actual._charges))
    ])
def test_tensordot(R1, R2, cont, dtype, num_charges):
    np.random.seed(10)
    backend = symmetric_backend.SymmetricBackend()
    a, b, indsa, indsb = get_contractable_tensors(R1, R2, cont, dtype,
                                                  num_charges)
    actual = backend.tensordot(a, b, (indsa, indsb))
    expected = tensordot(a, b, (indsa, indsb))
    np.testing.assert_allclose(expected.data, actual.data)
    assert np.all([
        charge_equal(expected._charges[n], actual._charges[n])
        for n in range(len(actual._charges))
    ])
def test_qr_decomposition(dtype, R, R1):
    np.random.seed(10)
    D = 30
    charges = [U1Charge.random(-5, 5, D) for n in range(R)]
    flows = [True] * R
    A = BlockSparseTensor.random(
        [Index(charges[n], flows[n]) for n in range(R)], dtype=dtype)

    q, r = decompositions.qr_decomposition(bs, A, R1)
    res = bs.tensordot(q, r, 1)
    q_dense, r_dense = np_decompositions.qr_decomposition(np, A.todense(), R1)
    res2 = np.tensordot(q_dense, r_dense, 1)
    np.testing.assert_almost_equal(res.todense(), res2)
예제 #5
0
def test_rq(dtype, R, R1, num_charges):
    np.random.seed(10)
    D = 30
    charges = [
        BaseCharge(np.random.randint(-5, 6, (D, num_charges)),
                   charge_types=[U1Charge] * num_charges) for n in range(R)
    ]

    flows = [True] * R
    A = BlockSparseTensor.random(
        [Index(charges[n], flows[n]) for n in range(R)], dtype=dtype)

    r, q = decompositions.rq(bs, A, R1)
    res = bs.tensordot(r, q, 1)
    r_dense, q_dense = np_decompositions.rq(np, A.todense(), R1, False)
    res2 = np.tensordot(r_dense, q_dense, 1)
    np.testing.assert_almost_equal(res.todense(), res2)