def test_pauli_rewire() -> None: term = sZ(0) * sX(1) term = term.on(5, 4) assert term.qubits == (4, 5) assert term == sZ(5) * sX(4) term = term.rewire({5: "a", 4: "b"}) assert term.qubits == ("a", "b") assert term == sZ("a") * sX("b") with pytest.raises(ValueError): term.on(1, 2, 3, 4)
def test_product(): p = qf.pauli_product(sX(0), sY(0)) assert p == sZ(0, 1j) p = qf.pauli_product(sY(0), sX(0)) assert p == sZ(0, -1j) p = qf.pauli_product(sX(0), sY(1)) assert p == qf.Pauli.term([0, 1], 'XY', 1) p = qf.pauli_product(sX(0), sY(1), sY(0)) assert p == qf.Pauli.term([0, 1], 'ZY', 1j) p = qf.pauli_product(sY(0), sX(0), sY(1)) assert p == qf.Pauli.term([0, 1], 'ZY', -1j)
def test_product() -> None: p = qf.pauli_product(sX(0), sY(0)) assert p == sZ(0, 1j) p = qf.pauli_product(sY(0), sX(0)) assert p == sZ(0, -1j) p = qf.pauli_product(sX(0), sY(1)) assert p == qf.Pauli.term([0, 1], "XY", 1) p = qf.pauli_product(sX(0), sY(1), sY(0)) assert p == qf.Pauli.term([0, 1], "ZY", 1j) p = qf.pauli_product(sY(0), sX(0), sY(1)) assert p == qf.Pauli.term([0, 1], "ZY", -1j)
def test_get_qubits(): term = sZ(0) * sX(1) assert term.qubits == [0, 1] sum_term = qf.Pauli.term([0], 'X', 0.5) \ + 0.5j * qf.Pauli.term([10], 'Y') * qf.Pauli.term([0], 'Y', 0.5j) assert sum_term.qubits == [0, 10]
def test_check_commutation(): term1 = sX(0) * sX(1) term2 = sY(0) * sY(1) term3 = sY(0) * sZ(2) assert qf.paulis_commute(term2, term3) assert qf.paulis_commute(term2, term3) assert not qf.paulis_commute(term1, term3)
def test_commuting_sets(): term1 = sX(0) * sX(1) term2 = sY(0) * sY(1) term3 = sY(0) * sZ(2) ps = term1 + term2 + term3 pcs = qf.pauli_commuting_sets(ps) assert len(pcs) == 2 pcs = qf.pauli_commuting_sets(term1) assert len(pcs) == 1
def test_get_qubits() -> None: term = sZ(0) * sX(1) assert term.qubits == (0, 1) term += sY(10) + sX(2) + sY(2) assert term.qubits == (0, 1, 2, 10) sum_term = qf.Pauli.term( [0], "X", 0.5) + 0.5j * qf.Pauli.term([10], "Y") * qf.Pauli.term([0], "Y", 0.5j) assert sum_term.qubits == (0, 10)
def test_paulisum_iteration(): term_list = [sX(2), sZ(4)] ps = sum(term_list) for ii, term in enumerate(ps): assert term_list[ii].terms[0] == term
def test_neg(): ps = sY(0) - sX(0) ps -= sZ(1) ps = ps - 3 ps = 3 + ps
def test_dont_simplify(): t1 = sZ(0) * sZ(1) t2 = sZ(2) * sZ(3) assert (t1 + t2) != 2 * sZ(0) * sZ(1)
def test_simplify(): t1 = sZ(0) * sZ(1) t2 = sZ(0) * sZ(1) assert (t1 + t2) == 2 * sZ(0) * sZ(1)
def test_mul(): # TODO CHECK ALL PAULI MULTIPLICATIONS HERE assert sX(0) * sY(0) == sZ(0, 1j)
def test_neg() -> None: ps = sY(0) - sX(0) ps -= sZ(1) ps = ps - 3 _ = 3 + ps