コード例 #1
0
 def test_compress_form(self):
     p = MPS_rand_state(20, 20)
     p.compress('left')
     assert p.count_canonized() == (19, 0)
     p.compress('right')
     assert p.count_canonized() == (0, 19)
     p.compress(7)
     assert p.count_canonized() == (7, 12)
     p = MPS_rand_state(20, 20)
     p.compress('flat', absorb='left')
     assert p.count_canonized() == (0, 0)
コード例 #2
0
    def test_gate2split(self):
        psi = MPS_rand_state(10, 3)
        psi2 = psi.copy()
        G = qu.eye(2) & qu.eye(2)
        psi.gate2split(G, (2, 3), cutoff=0)
        assert psi.bond_size(2, 3) == 6
        assert psi.H @ psi2 == pytest.approx(1.0)

        # check a unitary application
        G = qu.rand_uni(2**2)
        psi.gate2split(G, (7, 8))
        psi.compress()
        assert psi.bond_size(2, 3) == 3
        assert psi.bond_size(7, 8) > 3
        assert psi.H @ psi == pytest.approx(1.0)
        assert abs(psi2.H @ psi) < 1.0

        # check matches dense application of gate
        psid = psi2.to_dense()
        Gd = qu.ikron(G, [2] * 10, (7, 8))
        assert psi.to_dense().H @ (Gd @ psid) == pytest.approx(1.0)