Beispiel #1
0
def test_random_device_placer_bad_device():
    topo = cirq.LineTopology(8)
    qubits = cirq.LineQubit.range(8)
    circuit = cirq.testing.random_circuit(qubits, n_moments=8, op_density=1.0, random_state=52)
    qp = cg.RandomDevicePlacer()
    with pytest.raises(ValueError, match=r'.*shared_rt_info\.device.*'):
        qp.place_circuit(
            circuit,
            problem_topology=topo,
            shared_rt_info=cg.SharedRuntimeInfo(run_id='1'),
            rs=np.random.RandomState(1),
        )
def test_quantum_runtime_configuration_qubit_placer(rt_config):
    device = rt_config.processor_record.get_device()
    c, _ = rt_config.qubit_placer.place_circuit(
        cirq.Circuit(cirq.measure(cirq.LineQubit(0), cirq.LineQubit(1), key='z')),
        problem_topology=cirq.LineTopology(n_nodes=2),
        shared_rt_info=cg.SharedRuntimeInfo(run_id=rt_config.run_id, device=device),
        rs=np.random.RandomState(rt_config.random_seed),
    )
    if isinstance(rt_config.qubit_placer, cg.NaiveQubitPlacer):
        assert all(isinstance(q, cirq.LineQubit) for q in c.all_qubits())
    else:
        assert all(isinstance(q, cirq.GridQubit) for q in c.all_qubits())
Beispiel #3
0
def test_random_device_placer_small_device():
    topo = cirq.TiltedSquareLattice(3, 3)
    qubits = sorted(topo.nodes_to_gridqubits().values())
    circuit = cirq.experiments.random_rotations_between_grid_interaction_layers_circuit(
        qubits, depth=8, two_qubit_op_factory=lambda a, b, _: cirq.SQRT_ISWAP(a, b)
    )
    qp = cg.RandomDevicePlacer()
    with pytest.raises(cg.CouldNotPlaceError):
        qp.place_circuit(
            circuit,
            problem_topology=topo,
            shared_rt_info=cg.SharedRuntimeInfo(run_id='1', device=cg.Foxtail),
            rs=np.random.RandomState(1),
        )
Beispiel #4
0
def test_executable_group_result(tmpdir):
    egr = cg.ExecutableGroupResult(
        runtime_configuration=cg.QuantumRuntimeConfiguration(
            processor=_MockEngineProcessor(),
            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.Result(params=cirq.ParamResolver(),
                                     measurements={'z': np.ones((1_000, 4))}),
            ) for i in range(3)
        ],
    )
Beispiel #5
0
def test_filesystem_saver(tmpdir, patch_cirq_default_resolvers):
    assert patch_cirq_default_resolvers
    run_id = 'asdf'
    fs_saver = _FilesystemSaver(base_data_dir=tmpdir, run_id=run_id)

    rt_config = cg.QuantumRuntimeConfiguration(
        processor=_MockEngineProcessor(), 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.Result(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
Beispiel #6
0
def test_random_device_placer_line():
    topo = cirq.LineTopology(8)
    qubits = cirq.LineQubit.range(8)
    circuit = cirq.testing.random_circuit(qubits, n_moments=8, op_density=1.0, random_state=52)

    qp = cg.RandomDevicePlacer()
    circuit2, mapping = qp.place_circuit(
        circuit,
        problem_topology=topo,
        shared_rt_info=cg.SharedRuntimeInfo(run_id='1', device=cg.Sycamore23),
        rs=np.random.RandomState(1),
    )
    assert circuit is not circuit2
    assert circuit != circuit2
    assert all(q in cg.Sycamore23.qubit_set() for q in circuit2.all_qubits())
    for k, v in mapping.items():
        assert k != v
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)
def test_device_missing_metadata():
    class BadDevice(cirq.Device):
        pass

    topo = cirq.TiltedSquareLattice(3, 3)
    qubits = sorted(topo.nodes_to_gridqubits().values())
    circuit = cirq.experiments.random_rotations_between_grid_interaction_layers_circuit(
        qubits,
        depth=8,
        two_qubit_op_factory=lambda a, b, _: cirq.SQRT_ISWAP(a, b))
    qp = cg.RandomDevicePlacer()
    with pytest.raises(ValueError):
        qp.place_circuit(
            circuit,
            problem_topology=topo,
            shared_rt_info=cg.SharedRuntimeInfo(run_id='1',
                                                device=BadDevice()),
            rs=np.random.RandomState(1),
        )
Beispiel #9
0
def test_random_device_placer_tilted_square_lattice():
    topo = cirq.TiltedSquareLattice(4, 2)
    qubits = sorted(topo.nodes_to_gridqubits().values())
    circuit = cirq.experiments.random_rotations_between_grid_interaction_layers_circuit(
        qubits, depth=8, two_qubit_op_factory=lambda a, b, _: cirq.SQRT_ISWAP(a, b)
    )
    assert not all(q in cg.Sycamore23.qubit_set() for q in circuit.all_qubits())

    qp = cg.RandomDevicePlacer()
    circuit2, mapping = qp.place_circuit(
        circuit,
        problem_topology=topo,
        shared_rt_info=cg.SharedRuntimeInfo(run_id='1', device=cg.Sycamore23),
        rs=np.random.RandomState(1),
    )
    assert circuit is not circuit2
    assert circuit != circuit2
    assert all(q in cg.Sycamore23.qubit_set() for q in circuit2.all_qubits())
    for k, v in mapping.items():
        assert k != v
def test_hqp_missing_placement():
    hqp = cg.HardcodedQubitPlacer(
        {cirq.LineTopology(5): dict(enumerate(cirq.LineQubit.range(5)))})

    circuit = cirq.testing.random_circuit(cirq.LineQubit.range(5),
                                          n_moments=2,
                                          op_density=1)
    shared_rt_info = cg.SharedRuntimeInfo(run_id='example')
    rs = np.random.RandomState(10)
    placed_c, _ = hqp.place_circuit(circuit,
                                    problem_topology=cirq.LineTopology(5),
                                    shared_rt_info=shared_rt_info,
                                    rs=rs)
    assert isinstance(placed_c, cirq.AbstractCircuit)

    circuit = cirq.testing.random_circuit(cirq.LineQubit.range(6),
                                          n_moments=2,
                                          op_density=1)
    with pytest.raises(cg.CouldNotPlaceError):
        hqp.place_circuit(circuit,
                          problem_topology=cirq.LineTopology(6),
                          shared_rt_info=shared_rt_info,
                          rs=rs)
Beispiel #11
0
def test_print_logger(capsys):
    pl = _PrintLogger(n_total=10)
    shared_rt_info = cg.SharedRuntimeInfo(run_id='hi mom')
    pl.initialize()
    for i in range(10):
        exe_result = cg.ExecutableResult(
            spec=None,
            runtime_info=cg.RuntimeInfo(execution_index=i),
            raw_data=cirq.Result(params=cirq.ParamResolver({}),
                                 measurements={}),
        )
        pl.consume_result(exe_result, shared_rt_info)
    pl.finalize()
    assert capsys.readouterr().out == ('\n\r1 / 10'
                                       '\r2 / 10'
                                       '\r3 / 10'
                                       '\r4 / 10'
                                       '\r5 / 10'
                                       '\r6 / 10'
                                       '\r7 / 10'
                                       '\r8 / 10'
                                       '\r9 / 10'
                                       '\r10 / 10\n')
Beispiel #12
0
def test_shared_runtime_info():
    shared_rtinfo = cg.SharedRuntimeInfo(run_id='my run')
    cg_assert_equivalent_repr(shared_rtinfo)
def test_shared_runtime_info():
    shared_rtinfo = cg.SharedRuntimeInfo(
        run_id='my run', run_start_time=datetime.datetime.now(tz=datetime.timezone.utc)
    )
    cg_assert_equivalent_repr(shared_rtinfo)