def test_PauliGate() -> None: pauli0 = 0.5 * np.pi * qf.sX(0) * qf.sX(1) alpha = 0.4 circ = qf.PauliGate(pauli0, alpha) coords = qf.canonical_coords(circ.asgate()) assert np.isclose(coords[0], 0.4) pauli1 = np.pi * qf.sX(0) * qf.sX(1) * qf.sY(2) * qf.sZ(3) _ = qf.PauliGate(pauli1, alpha) top2 = nx.star_graph(4) pauli2 = 0.5 * np.pi * qf.sX(1) * qf.sY(2) * qf.sZ(3) _ = qf.PauliGate(pauli2, alpha).decompose(top2) alpha = 0.2 top3 = nx.star_graph(4) pauli3 = 0.5 * np.pi * qf.sX(1) * qf.sX(2) circ3 = qf.Circuit(qf.PauliGate(pauli3, alpha).decompose(top3)) assert qf.circuits_close(circ3, qf.Circuit([qf.I(0), qf.XX(alpha, 1, 2)])) qf.PauliGate(qf.sI(0), alpha).decompose(top2) with pytest.raises(ValueError): pauli4 = 0.5j * np.pi * qf.sX(1) * qf.sX(2) _ = qf.Circuit(qf.PauliGate(pauli4, alpha).decompose(top3)) top4 = nx.DiGraph() nx.add_path(top4, [3, 2, 1, 0]) _ = qf.Circuit(qf.PauliGate(pauli3, alpha).decompose(top4))
def test_PauliGate_more() -> None: alphas = [0.1, 2.0, -3.14, -0.4] paulis = [ qf.sZ(0) + 1, qf.sY(0), qf.sX(0), 0.5 * np.pi * qf.sZ(0) * qf.sZ(1), 0.5 * np.pi * qf.sX(0) * qf.sZ(1), ] for alpha in alphas: for pauli in paulis: circ = qf.PauliGate(pauli, alpha) qbs = circ.qubits str(pauli) op = pauli.asoperator(qbs) U = scipy.linalg.expm(-1.0j * alpha * op) gate = qf.Unitary(U, qbs) assert qf.gates_close(gate, circ.asgate()) pauli = qf.sX(0) + qf.sZ(0) with pytest.raises(ValueError): qf.Circuit(qf.PauliGate(pauli, 0.2).decompose())
def test_sum(): x = qf.sX(1) y = qf.sY(2, 2.0) s = qf.pauli_sum(x, y) assert ((((1, 'X'),), (1+0j)), (((2, 'Y'),), (2+0j))) == s.terms s2 = qf.pauli_sum(x, x) assert ((((1, 'X'),), (2+0j)),) == s2.terms s3 = qf.pauli_sum(x, x, y) s4 = qf.pauli_sum(y, x, x) assert s3 == s4 assert ((((1, 'X'),), (2+0j)), (((2, 'Y'),), (2+0j))) == s3.terms qf.pauli_sum(x, x, x)
def test_sum() -> None: x = qf.sX(1) y = qf.sY(2, 2.0) s = qf.pauli_sum(x, y) assert s == qf.Pauli(([1], "X", 1.0), ([2], "Y", 2.0)) s2 = qf.pauli_sum(x, x) assert s2 == qf.Pauli(([1], "X", 2)) s3 = qf.pauli_sum(x, x, y) s4 = qf.pauli_sum(y, x, x) assert s3 == s4 assert s3 == qf.Pauli(([1], "X", 2), ([2], "Y", 2)) qf.pauli_sum(x, x, x)
def test_sigmas(): assert qf.sX(0).terms == ((((0, 'X'),), (1+0j)),) assert qf.sY(1, 2.).terms == ((((1, 'Y'),), (2+0j)),) assert qf.sZ(2).terms == ((((2, 'Z'),), (1+0j)),)
def test_sigmas() -> None: assert qf.sX(0).terms == (((0, ), "X", 1), ) assert qf.sY(1).terms == (((1, ), "Y", 1), ) assert qf.sZ(2).terms == (((2, ), "Z", 1), )