Exemple #1
0
def test_results_by_qubit_groups():
    er1 = ExperimentResult(
        setting=ExperimentSetting(plusX(0), sZ(0)),
        expectation=0.0,
        std_err=0.0,
        total_counts=1,
    )

    er2 = ExperimentResult(
        setting=ExperimentSetting(plusX(0), sZ(1)),
        expectation=0.0,
        std_err=0.0,
        total_counts=1,
    )

    er3 = ExperimentResult(
        setting=ExperimentSetting(plusX(0),
                                  sX(0) * sZ(1)),
        expectation=0.0,
        std_err=0.0,
        total_counts=1,
    )

    er4 = ExperimentResult(
        setting=ExperimentSetting(plusX(0),
                                  sX(0) * sZ(2)),
        expectation=0.0,
        std_err=0.0,
        total_counts=1,
    )
    groups = [(0, ), (1, ), (2, 0)]
    res_by_group = get_results_by_qubit_groups([er1, er2, er3, er4], groups)

    assert res_by_group == {(0, ): [er1], (1, ): [er2], (0, 2): [er1, er4]}
Exemple #2
0
def test_expt_settings_diagonal_in_tpb():
    def _expt_settings_diagonal_in_tpb(es1: ExperimentSetting,
                                       es2: ExperimentSetting):
        """
        Extends the concept of being diagonal in the same tpb to ExperimentSettings, by
        determining if the pairs of in_states and out_operators are separately diagonal in the same
        tpb
        """
        max_weight_in = _max_weight_state([es1.in_state, es2.in_state])
        max_weight_out = _max_weight_operator(
            [es1.out_operator, es2.out_operator])
        return max_weight_in is not None and max_weight_out is not None

    expt_setting1 = ExperimentSetting(plusZ(1) * plusX(0), sY(1) * sZ(0))
    expt_setting2 = ExperimentSetting(plusY(2) * plusZ(1), sZ(2) * sY(1))
    assert _expt_settings_diagonal_in_tpb(expt_setting1, expt_setting2)
    expt_setting3 = ExperimentSetting(plusX(2) * plusZ(1), sZ(2) * sY(1))
    expt_setting4 = ExperimentSetting(plusY(2) * plusZ(1), sX(2) * sY(1))
    assert not _expt_settings_diagonal_in_tpb(expt_setting2, expt_setting3)
    assert not _expt_settings_diagonal_in_tpb(expt_setting2, expt_setting4)
Exemple #3
0
def test_max_tpb_overlap_1():
    tomo_expt_settings = [
        ExperimentSetting(plusZ(1) * plusX(0),
                          sY(2) * sY(1)),
        ExperimentSetting(plusX(2) * plusZ(1),
                          sY(2) * sZ(0)),
    ]
    tomo_expt_program = Program(H(0), H(1), H(2))
    tomo_expt = Experiment(tomo_expt_settings, tomo_expt_program)
    expected_dict = {
        ExperimentSetting(
            plusX(0) * plusZ(1) * plusX(2),
            sZ(0) * sY(1) * sY(2)): [
            ExperimentSetting(plusZ(1) * plusX(0),
                              sY(2) * sY(1)),
            ExperimentSetting(plusX(2) * plusZ(1),
                              sY(2) * sZ(0)),
        ]
    }
    assert expected_dict == _max_tpb_overlap(tomo_expt)
Exemple #4
0
def test_max_weight_state_4():
    states = [plusX(1) * minusZ(0), plusX(0), minusZ(1)]
    assert _max_weight_state(states) is None
Exemple #5
0
def test_max_weight_state_3():
    states = [plusX(0) * minusZ(1), plusX(0), minusZ(1)]
    assert _max_weight_state(states) == states[0]