コード例 #1
0
def test_benchmark_2q_xeb_fidelities(circuits_cycle_depths_sampled_df, pass_cycle_depths):
    circuits, cycle_depths, sampled_df = circuits_cycle_depths_sampled_df

    if pass_cycle_depths:
        fid_df = benchmark_2q_xeb_fidelities(sampled_df, circuits, cycle_depths)
    else:
        fid_df = benchmark_2q_xeb_fidelities(sampled_df, circuits)
    assert len(fid_df) == len(cycle_depths)
    assert sorted(fid_df['cycle_depth'].unique()) == cycle_depths.tolist()
    assert np.all(fid_df['fidelity'] > 0.98)

    fit_df = fit_exponential_decays(fid_df)
    for _, row in fit_df.iterrows():
        assert list(row['cycle_depths']) == list(cycle_depths)
        assert len(row['fidelities']) == len(cycle_depths)
コード例 #2
0
def test_benchmark_2q_xeb_fidelities_parallel():
    circuits = rqcg.generate_library_of_2q_circuits(
        n_library_circuits=5,
        two_qubit_gate=cirq.ISWAP**0.5,
        max_cycle_depth=4)
    cycle_depths = [2, 3, 4]
    graph = _gridqubits_to_graph_device(cirq.GridQubit.rect(2, 2))
    combs = rqcg.get_random_combinations_for_device(
        n_library_circuits=len(circuits),
        n_combinations=2,
        device_graph=graph,
        random_state=10)

    sampled_df = sample_2q_xeb_circuits(
        sampler=cirq.Simulator(),
        circuits=circuits,
        cycle_depths=cycle_depths,
        combinations_by_layer=combs,
    )
    fid_df = benchmark_2q_xeb_fidelities(sampled_df, circuits, cycle_depths)
    n_pairs = sum(len(c.pairs) for c in combs)
    assert len(fid_df) == len(cycle_depths) * n_pairs

    fit_df = fit_exponential_decays(fid_df)
    for _, row in fit_df.iterrows():
        assert list(row['cycle_depths']) == list(cycle_depths)
        assert len(row['fidelities']) == len(cycle_depths)
コード例 #3
0
ファイル: xeb_fitting_test.py プロジェクト: balopat/Cirq
def test_benchmark_2q_xeb_fidelities():
    q0, q1 = cirq.LineQubit.range(2)
    circuits = [
        rqcg.random_rotations_between_two_qubit_circuit(
            q0,
            q1,
            depth=50,
            two_qubit_op_factory=lambda a, b, _: SQRT_ISWAP(a, b),
            seed=52) for _ in range(2)
    ]
    cycle_depths = np.arange(3, 50, 9)

    sampled_df = sample_2q_xeb_circuits(sampler=cirq.Simulator(seed=53),
                                        circuits=circuits,
                                        cycle_depths=cycle_depths)
    fid_df = benchmark_2q_xeb_fidelities(sampled_df, circuits, cycle_depths)
    assert len(fid_df) == len(cycle_depths)
    for _, row in fid_df.iterrows():
        assert row['cycle_depth'] in cycle_depths
        assert row['fidelity'] > 0.98

    fit_df = fit_exponential_decays(fid_df)
    for _, row in fit_df.iterrows():
        assert list(row['cycle_depths']) == list(cycle_depths)
        assert len(row['fidelities']) == len(cycle_depths)
コード例 #4
0
def test_benchmark_2q_xeb_subsample_depths(circuits_cycle_depths_sampled_df):
    circuits, _, sampled_df = circuits_cycle_depths_sampled_df
    cycle_depths = [10, 20]
    fid_df = benchmark_2q_xeb_fidelities(sampled_df, circuits, cycle_depths)
    assert len(fid_df) == len(cycle_depths)
    assert sorted(fid_df['cycle_depth'].unique()) == cycle_depths

    cycle_depths = [11, 21]
    with pytest.raises(ValueError):
        _ = benchmark_2q_xeb_fidelities(sampled_df, circuits, cycle_depths)

    cycle_depths = [10, 100_000]
    with pytest.raises(ValueError):
        _ = benchmark_2q_xeb_fidelities(sampled_df, circuits, cycle_depths)

    cycle_depths = []
    with pytest.raises(ValueError):
        _ = benchmark_2q_xeb_fidelities(sampled_df, circuits, cycle_depths)
コード例 #5
0
def test_parallel_full_workflow(use_pool):
    circuits = rqcg.generate_library_of_2q_circuits(
        n_library_circuits=5,
        two_qubit_gate=cirq.ISWAP**0.5,
        max_cycle_depth=4,
        random_state=8675309,
    )
    cycle_depths = [2, 3, 4]
    graph = _gridqubits_to_graph_device(cirq.GridQubit.rect(2, 2))
    combs = rqcg.get_random_combinations_for_device(
        n_library_circuits=len(circuits),
        n_combinations=2,
        device_graph=graph,
        random_state=10)

    sampled_df = sample_2q_xeb_circuits(
        sampler=cirq.Simulator(),
        circuits=circuits,
        cycle_depths=cycle_depths,
        combinations_by_layer=combs,
    )

    if use_pool:
        pool = multiprocessing.Pool()
    else:
        pool = None

    fids_df_0 = benchmark_2q_xeb_fidelities(sampled_df=sampled_df,
                                            circuits=circuits,
                                            cycle_depths=cycle_depths,
                                            pool=pool)

    options = SqrtISwapXEBOptions(characterize_zeta=False,
                                  characterize_gamma=False,
                                  characterize_chi=False)
    p_circuits = [
        parameterize_circuit(circuit, options) for circuit in circuits
    ]

    result = characterize_phased_fsim_parameters_with_xeb_by_pair(
        sampled_df=sampled_df,
        parameterized_circuits=p_circuits,
        cycle_depths=cycle_depths,
        options=options,
        # super loose tolerances
        fatol=5e-2,
        xatol=5e-2,
        pool=pool,
    )
    if pool is not None:
        pool.terminate()

    assert len(result.optimization_results) == graph.number_of_edges()
    for opt_res in result.optimization_results.values():
        assert np.abs(opt_res.fun) < 0.1  # noiseless simulator

    assert len(
        result.fidelities_df) == len(cycle_depths) * graph.number_of_edges()
    assert np.all(result.fidelities_df['fidelity'] > 0.90)

    before_after_df = before_and_after_characterization(
        fids_df_0, characterization_result=result)
    for _, row in before_after_df.iterrows():
        assert len(row['fidelities_0']) == len(cycle_depths)
        assert len(row['fidelities_c']) == len(cycle_depths)
        assert 0 <= row['a_0'] <= 1
        assert 0 <= row['a_c'] <= 1
        assert 0 <= row['layer_fid_0'] <= 1
        assert 0 <= row['layer_fid_c'] <= 1