def test_group_experiments_greedy(): ungrouped_tomo_expt = Experiment( [ [ ExperimentSetting( _pauli_to_product_state( PauliTerm.from_compact_str("(1+0j)*Z7Y8Z1Y4Z2Y5Y0X6")), PauliTerm.from_compact_str("(1+0j)*Z4X8Y5X3Y7Y1"), ) ], [ExperimentSetting(plusZ(7), sY(1))], ], program=Program(H(0), H(1), H(2)), ) grouped_tomo_expt = group_settings(ungrouped_tomo_expt, method="greedy") expected_grouped_tomo_expt = Experiment( [[ ExperimentSetting( TensorProductState.from_str( "Z0_7 * Y0_8 * Z0_1 * Y0_4 * Z0_2 * Y0_5 * Y0_0 * X0_6"), PauliTerm.from_compact_str("(1+0j)*Z4X8Y5X3Y7Y1"), ), ExperimentSetting(plusZ(7), sY(1)), ]], program=Program(H(0), H(1), H(2)), ) assert grouped_tomo_expt == expected_grouped_tomo_expt
def test_merge_disjoint_experiments(): sett1 = ExperimentSetting(TensorProductState(), sX(0) * sY(1)) sett2 = ExperimentSetting(plusZ(1), sY(1)) sett3 = ExperimentSetting(plusZ(0), sX(0)) sett4 = ExperimentSetting(minusX(1), sY(1)) sett5 = ExperimentSetting(TensorProductState(), sZ(2)) expt1 = Experiment(settings=[sett1, sett2], program=Program(X(1))) expt2 = Experiment(settings=[sett3, sett4], program=Program(Z(0))) expt3 = Experiment(settings=[sett5], program=Program()) merged_expt = merge_disjoint_experiments([expt1, expt2, expt3]) assert len(merged_expt) == 2
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_tpb_overlap_3(): # add another ExperimentSetting to the above expt_setting = ExperimentSetting( _pauli_to_product_state( PauliTerm.from_compact_str("(1+0j)*Z7Y8Z1Y4Z2Y5Y0X6")), PauliTerm.from_compact_str("(1+0j)*Z4X8Y5X3Y7Y1"), ) expt_setting2 = ExperimentSetting(plusZ(7), sY(1)) p = Program(H(0), H(1), H(2)) tomo_expt2 = Experiment([expt_setting, expt_setting2], p) expected_dict2 = {expt_setting: [expt_setting, expt_setting2]} assert expected_dict2 == _max_tpb_overlap(tomo_expt2)
def test_max_weight_state_2(): states = [plusX(1) * plusZ(0), plusX(0), plusZ(1)] assert _max_weight_state(states) is None
def test_max_weight_state_1(): states = [plusX(0) * plusZ(1), plusX(0), plusZ(1)] assert _max_weight_state(states) == states[0]