def test_classical_control(): q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit( cirq.H(q0), cirq.measure(q0, key='m'), cirq.X(q1).with_classical_controls('m') ) cirq.testing.assert_same_circuits(cirq.align_left(circuit), circuit) cirq.testing.assert_same_circuits(cirq.align_right(circuit), circuit)
def test_align_basic_no_context(): q1 = cirq.NamedQubit('q1') q2 = cirq.NamedQubit('q2') c = cirq.Circuit( [ cirq.Moment([cirq.X(q1)]), cirq.Moment([cirq.Y(q1), cirq.X(q2)]), cirq.Moment([cirq.X(q1)]), ] ) cirq.testing.assert_same_circuits( cirq.align_left(c), cirq.Circuit( cirq.Moment([cirq.X(q1), cirq.X(q2)]), cirq.Moment([cirq.Y(q1)]), cirq.Moment([cirq.X(q1)]), ), ) cirq.testing.assert_same_circuits( cirq.align_right(c), cirq.Circuit( cirq.Moment([cirq.X(q1)]), cirq.Moment([cirq.Y(q1)]), cirq.Moment([cirq.X(q1), cirq.X(q2)]), ), )
def test_align_right_deep(): q1, q2 = cirq.LineQubit.range(2) c_nested = cirq.FrozenCircuit( cirq.Moment([cirq.X(q1)]), cirq.Moment([cirq.Y(q1), cirq.X(q2).with_tags("nocompile")]), cirq.Moment([cirq.X(q2)]), cirq.Moment([cirq.Y(q1)]), cirq.measure(q1, key='a'), cirq.Z(q2).with_classical_controls('a'), ) c_nested_aligned = cirq.FrozenCircuit( cirq.Moment([cirq.X(q1), cirq.X(q2).with_tags("nocompile")]), [cirq.Y(q1), cirq.Y(q1)], cirq.Moment(cirq.measure(q1, key='a'), cirq.X(q2)), cirq.Z(q2).with_classical_controls('a'), ) c_orig = cirq.Circuit( c_nested, cirq.CircuitOperation(c_nested).repeat(6).with_tags("nocompile"), c_nested, cirq.CircuitOperation(c_nested).repeat(5).with_tags("preserve_tag"), ) c_expected = cirq.Circuit( c_nested_aligned, cirq.CircuitOperation(c_nested).repeat(6).with_tags("nocompile"), cirq.Moment(), c_nested_aligned, cirq.CircuitOperation(c_nested_aligned).repeat(5).with_tags("preserve_tag"), ) context = cirq.TransformerContext(tags_to_ignore=["nocompile"], deep=True) cirq.testing.assert_same_circuits(cirq.align_right(c_orig, context=context), c_expected)
def test_align_right_no_compile_context(): q1 = cirq.NamedQubit('q1') q2 = cirq.NamedQubit('q2') cirq.testing.assert_same_circuits( cirq.align_right( cirq.Circuit( [ cirq.Moment([cirq.X(q1)]), cirq.Moment([cirq.Y(q1), cirq.X(q2).with_tags("nocompile")]), cirq.Moment([cirq.X(q1), cirq.Y(q2)]), cirq.Moment([cirq.Y(q1)]), cirq.measure(*[q1, q2], key='a'), ] ), context=cirq.TransformerContext(tags_to_ignore=["nocompile"]), ), cirq.Circuit( [ cirq.Moment([cirq.X(q1)]), cirq.Moment([cirq.Y(q1), cirq.X(q2).with_tags("nocompile")]), cirq.Moment([cirq.X(q1)]), cirq.Moment([cirq.Y(q1), cirq.Y(q2)]), cirq.measure(*[q1, q2], key='a'), ] ), )