Ejemplo n.º 1
0
def test_circuit_op_to_proto_errors():
    serializer = cg.CircuitOpSerializer()
    to_serialize = cirq.CircuitOperation(default_circuit())

    constants = [
        v2.program_pb2.Constant(string_value=DEFAULT_TOKEN),
        v2.program_pb2.Constant(circuit_value=default_circuit_proto()),
    ]
    raw_constants = {
        DEFAULT_TOKEN: 0,
        default_circuit(): 1,
    }

    with pytest.raises(ValueError, match='CircuitOp serialization requires a constants list'):
        serializer.to_proto(to_serialize)

    with pytest.raises(ValueError, match='CircuitOp serialization requires a constants list'):
        serializer.to_proto(to_serialize, constants=constants)

    with pytest.raises(ValueError, match='CircuitOp serialization requires a constants list'):
        serializer.to_proto(to_serialize, raw_constants=raw_constants)

    with pytest.raises(ValueError, match='Serializer expected CircuitOperation'):
        serializer.to_proto(
            v2.program_pb2.Operation(), constants=constants, raw_constants=raw_constants
        )

    bad_raw_constants = {cirq.FrozenCircuit(): 0}
    with pytest.raises(ValueError, match='Encountered a circuit not in the constants table'):
        serializer.to_proto(to_serialize, constants=constants, raw_constants=bad_raw_constants)
Ejemplo n.º 2
0
def test_circuit_op_to_proto(repetitions):
    serializer = cg.CircuitOpSerializer()
    if isinstance(repetitions, int):
        repetition_ids = None
    else:
        repetition_ids = repetitions
        repetitions = len(repetition_ids)
    to_serialize = cirq.CircuitOperation(
        circuit=default_circuit(),
        qubit_map={cirq.GridQubit(1, 1): cirq.GridQubit(1, 2)},
        measurement_key_map={'m': 'results'},
        param_resolver={'k': 1.0},
        repetitions=repetitions,
        repetition_ids=repetition_ids,
    )

    constants = [
        v2.program_pb2.Constant(string_value=DEFAULT_TOKEN),
        v2.program_pb2.Constant(circuit_value=default_circuit_proto()),
    ]
    raw_constants = {
        DEFAULT_TOKEN: 0,
        default_circuit(): 1,
    }

    repetition_spec = v2.program_pb2.RepetitionSpecification()
    if repetition_ids is None:
        repetition_spec.repetition_count = repetitions
    else:
        for rep_id in repetition_ids:
            repetition_spec.repetition_ids.ids.append(rep_id)

    qubit_map = v2.program_pb2.QubitMapping()
    q_p1 = qubit_map.entries.add()
    q_p1.key.id = '1_1'
    q_p1.value.id = '1_2'

    measurement_key_map = v2.program_pb2.MeasurementKeyMapping()
    meas_p1 = measurement_key_map.entries.add()
    meas_p1.key.string_key = 'm'
    meas_p1.value.string_key = 'results'

    arg_map = v2.program_pb2.ArgMapping()
    arg_p1 = arg_map.entries.add()
    arg_p1.key.arg_value.string_value = 'k'
    arg_p1.value.arg_value.float_value = 1.0

    expected = v2.program_pb2.CircuitOperation(
        circuit_constant_index=1,
        repetition_specification=repetition_spec,
        qubit_map=qubit_map,
        measurement_key_map=measurement_key_map,
        arg_map=arg_map,
    )
    actual = serializer.to_proto(to_serialize,
                                 constants=constants,
                                 raw_constants=raw_constants)
    assert actual == expected
Ejemplo n.º 3
0
def test_circuit_op_to_proto_complex():
    serializer = cg.CircuitOpSerializer()
    to_serialize = cirq.CircuitOperation(
        circuit=default_circuit(),
        qubit_map={cirq.GridQubit(1, 1): cirq.GridQubit(1, 2)},
        measurement_key_map={'m': 'results'},
        param_resolver={'k': 1.0j},
        repetitions=10,
        repetition_ids=None,
    )
    constants = [
        v2.program_pb2.Constant(string_value=DEFAULT_TOKEN),
        v2.program_pb2.Constant(circuit_value=default_circuit_proto()),
    ]
    raw_constants = {DEFAULT_TOKEN: 0, default_circuit(): 1}
    with pytest.raises(ValueError, match='complex value'):
        serializer.to_proto(to_serialize, constants=constants, raw_constants=raw_constants)
Ejemplo n.º 4
0
        )
    ],
)

Y_DESERIALIZER = cg.GateOpDeserializer(
    serialized_gate_id='y_pow',
    gate_constructor=cirq.YPowGate,
    args=[
        cg.DeserializingArg(
            serialized_name='half_turns',
            constructor_arg_name='exponent',
        )
    ],
)

CIRCUIT_OP_SERIALIZER = cg.CircuitOpSerializer()
CIRCUIT_OP_DESERIALIZER = cg.CircuitOpDeserializer()

MY_GATE_SET = cg.SerializableGateSet(
    gate_set_name='my_gate_set',
    serializers=[X_SERIALIZER, CIRCUIT_OP_SERIALIZER],
    deserializers=[X_DESERIALIZER, CIRCUIT_OP_DESERIALIZER],
)


def test_deprecated_methods():
    with assert_deprecated('Use supported_internal_types', deadline='v0.13'):
        _ = MY_GATE_SET.supported_gate_types()

    with assert_deprecated('Use with_added_types', deadline='v0.13'):
        _ = MY_GATE_SET.with_added_gates()
Ejemplo n.º 5
0
def test_can_serialize_circuit_op():
    serializer = cg.CircuitOpSerializer()
    assert serializer.can_serialize_operation(
        cirq.CircuitOperation(default_circuit()))
    assert not serializer.can_serialize_operation(cirq.X(cirq.GridQubit(1, 1)))
Ejemplo n.º 6
0
def test_circuit_op_serializer_properties():
    serializer = cg.CircuitOpSerializer()
    assert serializer.internal_type == cirq.FrozenCircuit
    assert serializer.serialized_id == 'circuit'