def test_batch_run_context_to_proto(pass_out: bool) -> None: msg = v2.batch_pb2.BatchRunContext() if pass_out else None out = v2.batch_run_context_to_proto([], out=msg) if pass_out: assert out is msg assert len(out.run_contexts) == 0 msg = v2.batch_pb2.BatchRunContext() if pass_out else None out = v2.batch_run_context_to_proto([(None, 10)], out=msg) if pass_out: assert out is msg assert len(out.run_contexts) == 1 sweep_message = out.run_contexts[0].parameter_sweeps[0] assert v2.sweep_from_proto(sweep_message.sweep) == cirq.UnitSweep assert sweep_message.repetitions == 10 sweep = cirq.Linspace('a', 0, 1, 21) msg = v2.batch_pb2.BatchRunContext() if pass_out else None out = v2.batch_run_context_to_proto([(None, 10), (sweep, 100)], out=msg) if pass_out: assert out is msg assert len(out.run_contexts) == 2 sweep_message0 = out.run_contexts[0].parameter_sweeps[0] assert v2.sweep_from_proto(sweep_message0.sweep) == cirq.UnitSweep assert sweep_message0.repetitions == 10 sweep_message1 = out.run_contexts[1].parameter_sweeps[0] assert v2.sweep_from_proto(sweep_message1.sweep) == sweep assert sweep_message1.repetitions == 100
def test_run_context_to_proto(pass_out: bool) -> None: msg = v2.run_context_pb2.RunContext() if pass_out else None out = v2.run_context_to_proto(None, 10, out=msg) if pass_out: assert out is msg assert len(out.parameter_sweeps) == 1 assert v2.sweep_from_proto(out.parameter_sweeps[0].sweep) == cirq.UnitSweep assert out.parameter_sweeps[0].repetitions == 10 sweep = cirq.Linspace('a', 0, 1, 21) msg = v2.run_context_pb2.RunContext() if pass_out else None out = v2.run_context_to_proto(sweep, 100, out=msg) if pass_out: assert out is msg assert len(out.parameter_sweeps) == 1 assert v2.sweep_from_proto(out.parameter_sweeps[0].sweep) == sweep assert out.parameter_sweeps[0].repetitions == 100
def _deserialize_run_context( run_context: quantum.types.any_pb2.Any, ) -> Tuple[int, List[cirq.Sweep]]: import cirq_google.engine.engine as engine_base run_context_type = run_context.type_url[len(engine_base.TYPE_PREFIX):] if (run_context_type == 'cirq.google.api.v1.RunContext' or run_context_type == 'cirq.api.google.v1.RunContext'): raise ValueError('deserializing a v1 RunContext is not supported') if (run_context_type == 'cirq.google.api.v2.RunContext' or run_context_type == 'cirq.api.google.v2.RunContext'): v2_run_context = v2.run_context_pb2.RunContext.FromString( run_context.value) return v2_run_context.parameter_sweeps[0].repetitions, [ v2.sweep_from_proto(s.sweep) for s in v2_run_context.parameter_sweeps ] raise ValueError(f'unsupported run_context type: {run_context_type}')
def test_sweep_to_proto_roundtrip(sweep): msg = v2.sweep_to_proto(sweep) deserialized = v2.sweep_from_proto(msg) assert deserialized == sweep
def test_sweep_from_proto_single_sweep_type_not_set(): proto = v2.run_context_pb2.Sweep() proto.single_sweep.parameter_key = 'foo' with pytest.raises(ValueError, match='single sweep type not set'): v2.sweep_from_proto(proto)
def test_sweep_from_proto_sweep_function_not_set(): proto = v2.run_context_pb2.Sweep() proto.sweep_function.sweeps.add() with pytest.raises(ValueError, match='invalid sweep function type'): v2.sweep_from_proto(proto)