def test_composite_oper(): """ Composite: Tests compositing unitaries and superoperators. """ U1 = rand_unitary(3) U2 = rand_unitary(5) S1 = to_super(U1) S2 = to_super(U2) S3 = rand_super(4) S4 = rand_super(7) assert_(composite(U1, U2) == tensor(U1, U2)) assert_(composite(S3, S4) == super_tensor(S3, S4)) assert_(composite(U1, S4) == super_tensor(S1, S4)) assert_(composite(S3, U2) == super_tensor(S3, S2))
def test_ChoiPreservesSelf(self): """ Superoperator: to_choi(q) returns q if q is already Choi. """ superop = rand_super() choi = to_choi(superop) assert_(choi is to_choi(choi))
def test_SuperPreservesSelf(self): """ Superoperator: to_super(q) returns q if q is already a supermatrix. """ superop = rand_super() assert_(superop is to_super(superop))
def test_random_iscptp(self): """ Superoperator: Randomly generated superoperators are correctly reported as cptp. """ superop = rand_super() assert_(superop.iscptp)
def test_SuperChoiChiSuper(self): """ Superoperator: Converting two-qubit superoperator through Choi and chi representations goes back to right superoperator. """ superoperator = super_tensor(rand_super(2), rand_super(2)) choi_matrix = to_choi(superoperator) chi_matrix = to_chi(choi_matrix) test_supe = to_super(chi_matrix) # Assert both that the result is close to expected, and has the right # type. assert_((test_supe - superoperator).norm() < tol) assert_(choi_matrix.type == "super" and choi_matrix.superrep == "choi") assert_(chi_matrix.type == "super" and chi_matrix.superrep == "chi") assert_(test_supe.type == "super" and test_supe.superrep == "super")
def test_ChoiKrausChoi(self): """ Superoperator: Convert superoperator to Choi matrix and back. """ superoperator = rand_super() choi_matrix = to_choi(superoperator) kraus_ops = to_kraus(choi_matrix) test_choi = kraus_to_choi(kraus_ops) # Assert both that the result is close to expected, and has the right # type. assert_((test_choi - choi_matrix).norm() < tol) assert_(choi_matrix.type == "super" and choi_matrix.superrep == "choi") assert_(test_choi.type == "super" and test_choi.superrep == "choi")
def test_SuperChoiSuper(self): """ Superoperator: Converting superoperator to Choi matrix and back. """ superoperator = rand_super() choi_matrix = to_choi(superoperator) test_supe = to_super(choi_matrix) # Assert both that the result is close to expected, and has the right # type. assert_((test_supe - superoperator).norm() < tol) assert_(choi_matrix.type == "super" and choi_matrix.superrep == "choi") assert_(test_supe.type == "super" and test_supe.superrep == "super")