def _optimize(self, c): c_tket = pyzx_to_tk(c) cost = lambda c : c.n_gates_of_type(OpType.CX) comp = RepeatWithMetricPass(SequencePass([CommuteThroughMultis(), RemoveRedundancies()]), cost) comp.apply(c_tket) c_opt = tk_to_pyzx(c_tket) return c_opt
def test_sym_parameterised() -> None: circ = Circuit(3, name="test") circ.Z(1) alpha = fresh_symbol("alpha") circ.Rx(alpha, 0) with pytest.raises(Exception) as excinfo: _ = tk_to_pyzx(circ) assert "as it contains symbolic parameters." in str(excinfo.value)
def tket_pass_base(c, g, _pass): orig_tcount = c.tcount() orig_2qubitcount = c.twoqubitcount() c_tket = pyzx_to_tk(c) _pass.apply(c_tket) RebasePyZX().apply(c_tket) c_opt = tk_to_pyzx(c_tket) opt_tcount = c_opt.tcount() opt_2qubitcount = c_opt.twoqubitcount() # Quick and dirty. In theory, should depend on score function if orig_tcount == opt_tcount and orig_2qubitcount == opt_2qubitcount: return False, (c, g) return True, (c_opt, c_opt.to_graph())
def test_statevector() -> None: b = AerStateBackend() circ = Circuit(3, name="test") circ.H(2) circ.X(0) circ.H(0) circ.CX(0, 1) circ.CZ(1, 2) circ.Sdg(0) circ.Tdg(1) circ.Z(1) circ.T(2) circ.Rx(0.3333, 1) circ.Rz(0.3333, 1) zxcirc = tk_to_pyzx(circ) assert zxcirc.name == circ.name b.compile_circuit(circ) state = b.get_state(circ) circ2 = pyzx_to_tk(zxcirc) assert circ2.name == circ.name b.compile_circuit(circ2) state2 = b.get_state(circ2) assert np.allclose(state, state2, atol=1e-10)
def _optimize(self, c): c_tket = pyzx_to_tk(c) RemoveRedundancies().apply(c_tket) c_opt = tk_to_pyzx(c_tket) return c_opt
def test_invalid_gate() -> None: circ = Circuit(1, name="test") circ.measure_all() with pytest.raises(Exception) as excinfo: _ = tk_to_pyzx(circ) assert "as the gate type is unrecognised." in str(excinfo.value)