From f18415045c177f257084d164fb6b8f294afa7a00 Mon Sep 17 00:00:00 2001 From: Nour Yosri Date: Thu, 18 Jan 2024 15:37:51 -0800 Subject: [PATCH] convert SingleQubitCliffordGate to phasedXZ during serialization --- .../cirq_google/serialization/circuit_serializer.py | 4 +++- .../serialization/circuit_serializer_test.py | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/cirq-google/cirq_google/serialization/circuit_serializer.py b/cirq-google/cirq_google/serialization/circuit_serializer.py index 16fd0396755..ea4b52070a6 100644 --- a/cirq-google/cirq_google/serialization/circuit_serializer.py +++ b/cirq-google/cirq_google/serialization/circuit_serializer.py @@ -175,7 +175,9 @@ def _serialize_gate_op( out=msg.phasedxpowgate.exponent, arg_function_language=arg_function_language, ) - elif isinstance(gate, cirq.PhasedXZGate): + elif isinstance(gate, (cirq.PhasedXZGate, cirq.ops.SingleQubitCliffordGate)): + if isinstance(gate, cirq.ops.SingleQubitCliffordGate): + gate = gate.to_phased_xz_gate() arg_func_langs.float_arg_to_proto( gate.x_exponent, out=msg.phasedxzgate.x_exponent, diff --git a/cirq-google/cirq_google/serialization/circuit_serializer_test.py b/cirq-google/cirq_google/serialization/circuit_serializer_test.py index 107bf70004a..1e9a9e6d671 100644 --- a/cirq-google/cirq_google/serialization/circuit_serializer_test.py +++ b/cirq-google/cirq_google/serialization/circuit_serializer_test.py @@ -668,3 +668,16 @@ def test_measurement_gate_deserialize() -> None: msg = cg.CIRCUIT_SERIALIZER.serialize(circuit) assert cg.CIRCUIT_SERIALIZER.deserialize(msg) == circuit + + +def test_circuit_with_cliffords(): + q = cirq.NamedQubit('q') + circuit = cirq.Circuit( + g(q) for g in cirq.ops.SingleQubitCliffordGate.all_single_qubit_cliffords + ) + want = cirq.Circuit( + g.to_phased_xz_gate()(q) + for g in cirq.ops.SingleQubitCliffordGate.all_single_qubit_cliffords + ) + msg = cg.CIRCUIT_SERIALIZER.serialize(circuit) + assert cg.CIRCUIT_SERIALIZER.deserialize(msg) == want