def test_sympy_condition_qasm(): # Measurements get prepended with "m_", so the condition needs to be too. assert cirq.SympyCondition(sympy.Eq(sympy.Symbol('a'), 2)).qasm == 'm_a==2' with pytest.raises( ValueError, match= 'QASM is defined only for SympyConditions of type key == constant' ): _ = cirq.SympyCondition(sympy.Symbol('a') != 2).qasm
def test_repeat_until_sympy(sim): q1, q2 = cirq.LineQubit.range(2) circuitop = cirq.CircuitOperation( cirq.FrozenCircuit(cirq.X(q2), cirq.measure(q2, key='b')), use_repetition_ids=False, repeat_until=cirq.SympyCondition(sympy.Eq(sympy.Symbol('a'), sympy.Symbol('b'))), ) c = cirq.Circuit(cirq.measure(q1, key='a'), circuitop) # Validate commutation assert len(c) == 2 assert cirq.control_keys(circuitop) == {cirq.MeasurementKey('a')} measurements = sim.run(c).records['b'][0] assert len(measurements) == 2 assert measurements[0] == (1,) assert measurements[1] == (0,)
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import re import pytest import sympy import cirq key_a = cirq.MeasurementKey.parse_serialized('0:a') key_b = cirq.MeasurementKey.parse_serialized('0:b') key_c = cirq.MeasurementKey.parse_serialized('0:c') init_key_condition = cirq.KeyCondition(key_a) init_sympy_condition = cirq.SympyCondition(sympy.Symbol('0:a') >= 1) def test_key_condition_with_keys(): c = init_key_condition.replace_key(key_a, key_b) assert c.key is key_b c = init_key_condition.replace_key(key_b, key_c) assert c.key is key_a def test_key_condition_str(): assert str(init_key_condition) == '0:a' assert str(cirq.KeyCondition(key_a, index=-2)) == '0:a[-2]' def test_key_condition_repr():