コード例 #1
0
def test_simulated_backend_descriptive_name():
    p = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow')
    assert str(p) == 'rainbow-simulator'
    assert isinstance(p.get_sampler(), cirq.Simulator)

    p = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow',
                                                   noise_strength=1e-3)
    assert str(p) == 'rainbow-depol(1.000e-03)'
    assert isinstance(p.get_sampler(), cirq.DensityMatrixSimulator)

    p = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow',
                                                   noise_strength=float('inf'))
    assert str(p) == 'rainbow-zeros'
    assert isinstance(p.get_sampler(), cirq.ZerosSampler)
コード例 #2
0
def test_quantum_runtime_configuration_serialization(tmpdir):
    rt_config = cg.QuantumRuntimeConfiguration(
        processor_record=cg.SimulatedProcessorWithLocalDeviceRecord('rainbow'),
        run_id='unit-test',
    )
    cg_assert_equivalent_repr(rt_config)
    _assert_json_roundtrip(rt_config, tmpdir)
コード例 #3
0
def test_execute(tmpdir, run_id_in):
    rt_config = cg.QuantumRuntimeConfiguration(
        processor_record=cg.SimulatedProcessorWithLocalDeviceRecord('rainbow'),
        run_id=run_id_in,
        qubit_placer=cg.NaiveQubitPlacer(),
    )
    executable_group = cg.QuantumExecutableGroup(_get_quantum_executables())
    returned_exegroup_result = cg.execute(rt_config=rt_config,
                                          executable_group=executable_group,
                                          base_data_dir=tmpdir)
    run_id = returned_exegroup_result.shared_runtime_info.run_id
    if run_id_in is not None:
        assert run_id_in == run_id
    else:
        assert isinstance(uuid.UUID(run_id), uuid.UUID)

    manual_exegroup_result = _load_result_by_hand(tmpdir, run_id)
    egr_record: cg.ExecutableGroupResultFilesystemRecord = cirq.read_json_gzip(
        f'{tmpdir}/{run_id}/ExecutableGroupResultFilesystemRecord.json.gz')
    exegroup_result: cg.ExecutableGroupResult = egr_record.load(
        base_data_dir=tmpdir)
    helper_loaded_result = cg.ExecutableGroupResultFilesystemRecord.from_json(
        run_id=run_id, base_data_dir=tmpdir).load(base_data_dir=tmpdir)

    # TODO(gh-4699): Don't null-out device once it's serializable.
    assert isinstance(returned_exegroup_result.shared_runtime_info.device,
                      cirq.Device)
    returned_exegroup_result.shared_runtime_info.device = None

    assert returned_exegroup_result == exegroup_result
    assert manual_exegroup_result == exegroup_result
    assert helper_loaded_result == exegroup_result
コード例 #4
0
def rt_config(request):
    if request.param == 'minimal':
        return cg.QuantumRuntimeConfiguration(
            processor_record=cg.SimulatedProcessorWithLocalDeviceRecord('rainbow')
        )

    elif request.param == 'full':
        return cg.QuantumRuntimeConfiguration(
            processor_record=cg.SimulatedProcessorWithLocalDeviceRecord('rainbow'),
            run_id='unit-test',
            random_seed=52,
            qubit_placer=cg.RandomDevicePlacer(),
            target_gateset=cirq.CZTargetGateset(),
        )

    raise ValueError(f"Unknown flavor {request}")  # coverage: ignore
コード例 #5
0
ファイル: processor_record_test.py プロジェクト: daxfohl/Cirq
def test_simulated_backend_with_local_device():
    proc_rec = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow')
    assert isinstance(proc_rec.get_processor(), cg.engine.AbstractProcessor)
    assert proc_rec.processor_id == 'rainbow'
    assert str(proc_rec) == 'rainbow-simulator'

    cirq.testing.assert_equivalent_repr(proc_rec,
                                        global_vals={'cirq_google': cg})
コード例 #6
0
def test_engine_result():
    proc_rec = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow')

    proc = proc_rec.get_processor()
    samp = proc_rec.get_sampler()

    circ = cirq.Circuit(cirq.measure(cirq.GridQubit(5, 4)))

    res1 = proc.run(circ)
    assert isinstance(res1, cg.EngineResult)
    res2 = samp.run(circ)
    assert isinstance(res2, cg.EngineResult)
コード例 #7
0
def test_quantum_runtime_configuration():
    rt_config = cg.QuantumRuntimeConfiguration(
        processor_record=cg.SimulatedProcessorWithLocalDeviceRecord('rainbow'),
        run_id='unit-test',
    )

    sampler = rt_config.processor_record.get_sampler()
    result = sampler.run(
        cirq.Circuit(cirq.measure(cirq.GridQubit(5, 3), key='z')))
    assert isinstance(result, cirq.Result)

    assert isinstance(rt_config.processor_record.get_device(), cirq.Device)
コード例 #8
0
def test_simulated_backend_descriptive_name():
    p = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow')
    assert str(p) == 'rainbow-simulator'
    assert isinstance(p.get_sampler(), cg.engine.ProcessorSampler)

    # The actual simulator hiding behind the indirection is
    # p.get_sampler() -> ProcessorSampler
    # p.get_sampler().processor._sampler -> Validating Sampler
    # p.get_sampler().processor._sampler._sampler -> The actual simulator
    assert isinstance(p.get_sampler().processor._sampler._sampler,
                      cirq.Simulator)

    p = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow',
                                                   noise_strength=1e-3)
    assert str(p) == 'rainbow-depol(1.000e-03)'
    assert isinstance(p.get_sampler().processor._sampler._sampler,
                      cirq.DensityMatrixSimulator)

    p = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow',
                                                   noise_strength=float('inf'))
    assert str(p) == 'rainbow-zeros'
    assert isinstance(p.get_sampler().processor._sampler._sampler,
                      cirq.ZerosSampler)
コード例 #9
0
def test_hardcoded_qubit_placer():

    rainbow_record = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow')
    rainbow_device = rainbow_record.get_device()
    rainbow_graph = rainbow_device.metadata.nx_graph
    hardcoded = cg.HardcodedQubitPlacer(_all_offset_placements(rainbow_graph))

    topo = cirq.TiltedSquareLattice(3, 2)
    circuit = cirq.experiments.random_rotations_between_grid_interaction_layers_circuit(
        qubits=sorted(topo.nodes_as_gridqubits()), depth=4)
    shared_rt_info = cg.SharedRuntimeInfo(run_id='example',
                                          device=rainbow_device)

    rs = np.random.RandomState(10)
    placed_c, placement = hardcoded.place_circuit(
        circuit, problem_topology=topo, shared_rt_info=shared_rt_info, rs=rs)
    cirq.is_valid_placement(rainbow_graph, topo.graph, placement)
    assert isinstance(placed_c, cirq.FrozenCircuit)
コード例 #10
0
def test_executable_group_result(tmpdir):
    egr = cg.ExecutableGroupResult(
        runtime_configuration=cg.QuantumRuntimeConfiguration(
            processor_record=cg.SimulatedProcessorWithLocalDeviceRecord(
                'rainbow'),
            run_id='unit-test',
        ),
        shared_runtime_info=cg.SharedRuntimeInfo(run_id='my run'),
        executable_results=[
            cg.ExecutableResult(
                spec=_get_example_spec(name=f'test-spec-{i}'),
                runtime_info=cg.RuntimeInfo(execution_index=i),
                raw_data=cirq.ResultDict(
                    params=cirq.ParamResolver(),
                    measurements={'z': np.ones((1_000, 4))}),
            ) for i in range(3)
        ],
    )
コード例 #11
0
def test_filesystem_saver(tmpdir):
    run_id = 'asdf'
    fs_saver = _FilesystemSaver(base_data_dir=tmpdir, run_id=run_id)

    rt_config = cg.QuantumRuntimeConfiguration(
        processor_record=cg.SimulatedProcessorWithLocalDeviceRecord('rainbow'), run_id=run_id
    )
    shared_rt_info = cg.SharedRuntimeInfo(run_id=run_id)
    fs_saver.initialize(rt_config, shared_rt_info=shared_rt_info)

    # Test 1: assert fs_saver.initialize() has worked.
    rt_config2 = cirq.read_json_gzip(f'{tmpdir}/{run_id}/QuantumRuntimeConfiguration.json.gz')
    shared_rt_info2 = cirq.read_json_gzip(f'{tmpdir}/{run_id}/SharedRuntimeInfo.json.gz')
    assert rt_config == rt_config2
    assert shared_rt_info == shared_rt_info2

    # Test 2: assert `consume_result()` works.
    # you shouldn't actually mutate run_id in the shared runtime info, but we want to test
    # updating the shared rt info object:
    shared_rt_info.run_id = 'updated_run_id'
    exe_result = cg.ExecutableResult(
        spec=None,
        runtime_info=cg.RuntimeInfo(execution_index=0),
        raw_data=cirq.ResultDict(
            params=cirq.ParamResolver({}), measurements={'z': np.ones((100, 5))}
        ),
    )
    fs_saver.consume_result(exe_result=exe_result, shared_rt_info=shared_rt_info)

    shared_rt_info3 = cirq.read_json_gzip(f'{tmpdir}/{run_id}/SharedRuntimeInfo.json.gz')
    exe_result3 = cirq.read_json_gzip(f'{tmpdir}/{run_id}/ExecutableResult.0.json.gz')
    assert shared_rt_info == shared_rt_info3
    assert exe_result == exe_result3

    # Test 3: assert loading egr_record works.
    egr_record: cg.ExecutableGroupResultFilesystemRecord = cirq.read_json_gzip(
        f'{fs_saver.data_dir}/ExecutableGroupResultFilesystemRecord.json.gz'
    )
    assert egr_record == fs_saver.egr_record
    exegroup_result: cg.ExecutableGroupResult = egr_record.load(base_data_dir=tmpdir)
    assert exegroup_result.shared_runtime_info == shared_rt_info
    assert exegroup_result.runtime_configuration == rt_config
    assert exegroup_result.executable_results[0] == exe_result
コード例 #12
0
ファイル: processor_record_test.py プロジェクト: daxfohl/Cirq
def test_sampler_equality():
    p = cg.SimulatedProcessorWithLocalDeviceRecord('rainbow')
    assert p.get_sampler().__class__ == p.get_processor().get_sampler(
    ).__class__
コード例 #13
0
ファイル: processor_record_test.py プロジェクト: daxfohl/Cirq
def test_simulated_backend_with_bad_local_device():
    proc_rec = cg.SimulatedProcessorWithLocalDeviceRecord('my_processor')
    with pytest.raises(KeyError):
        proc_rec.get_device()