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]}
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)
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)
def test_max_weight_state_4(): states = [plusX(1) * minusZ(0), plusX(0), minusZ(1)] assert _max_weight_state(states) is None
def test_max_weight_state_3(): states = [plusX(0) * minusZ(1), plusX(0), minusZ(1)] assert _max_weight_state(states) == states[0]