コード例 #1
0
def test_max_weight_state_4():
    states = [
        plusX(1) * minusZ(0),
        plusX(0),
        minusZ(1),
    ]
    assert _max_weight_state(states) is None
コード例 #2
0
def test_max_weight_state_3():
    states = [
        plusX(0) * minusZ(1),
        plusX(0),
        minusZ(1),
    ]
    assert _max_weight_state(states) == states[0]
コード例 #3
0
def test_max_tpb_overlap_1():
    tomo_expt_settings = [ExperimentSetting(sZ(1) * sX(0), sY(2) * sY(1)),
                          ExperimentSetting(sX(2) * sZ(1), sY(2) * sZ(0))]
    tomo_expt_program = Program(H(0), H(1), H(2))
    tomo_expt_qubits = [0, 1, 2]
    tomo_expt = TomographyExperiment(tomo_expt_settings, tomo_expt_program, tomo_expt_qubits)
    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)
コード例 #4
0
def test_experiment_result():
    er = ExperimentResult(
        setting=ExperimentSetting(plusX(0), sZ(0)),
        expectation=0.9,
        stddev=0.05,
        total_counts=100,
    )
    assert str(er) == 'X0_0→(1+0j)*Z0: 0.9 +- 0.05'
コード例 #5
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)
コード例 #6
0
def test_lifted_state_operator_backwards_qubits():
    xz_state = plusX(5) * minusZ(6)
    plus = np.array([1, 1]) / np.sqrt(2)
    plus = plus[:, np.newaxis]
    proj_plus = plus @ plus.conj().T
    assert proj_plus.shape == (2, 2)

    one = np.array([0, 1])
    one = one[:, np.newaxis]
    proj_one = one @ one.conj().T
    assert proj_one.shape == (2, 2)

    np.testing.assert_allclose(
        np.kron(proj_plus, proj_one),
        lifted_state_operator(xz_state, qubits=[6, 5]),
    )