Beispiel #1
0
def test_equality_statevector():
    result1 = ResultType.StateVector()
    result2 = ResultType.StateVector()
    result3 = ResultType.Probability([1])
    result4 = "hi"
    assert result1 == result2
    assert result1 != result3
    assert result1 != result4
def result_types_zero_shots_bell_pair_testing(device: Device,
                                              include_state_vector: bool,
                                              run_kwargs: Dict[str, Any]):
    circuit = (Circuit().h(0).cnot(
        0, 1).expectation(observable=Observable.H() @ Observable.X(),
                          target=[0, 1]).amplitude(["01", "10", "00", "11"]))
    if include_state_vector:
        circuit.state_vector()
    result = device.run(circuit, **run_kwargs).result()
    assert len(result.result_types) == 3 if include_state_vector else 2
    assert np.allclose(
        result.get_value_by_result_type(
            ResultType.Expectation(observable=Observable.H() @ Observable.X(),
                                   target=[0, 1])),
        1 / np.sqrt(2),
    )
    if include_state_vector:
        assert np.allclose(
            result.get_value_by_result_type(ResultType.StateVector()),
            np.array([1, 0, 0, 1]) / np.sqrt(2),
        )
    assert result.get_value_by_result_type(
        ResultType.Amplitude(["01", "10", "00", "11"])) == {
            "01": 0j,
            "10": 0j,
            "00": (1 / np.sqrt(2)),
            "11": (1 / np.sqrt(2)),
        }
def result_types_zero_shots_bell_pair_testing(
    device: Device,
    include_state_vector: bool,
    run_kwargs: Dict[str, Any],
    include_amplitude: bool = True,
):
    circuit = (Circuit().h(0).cnot(0, 1).expectation(
        observable=Observable.H() @ Observable.X(), target=[0, 1]))
    if include_amplitude:
        circuit.amplitude(["01", "10", "00", "11"])
    if include_state_vector:
        circuit.state_vector()
    tasks = (circuit, circuit.to_ir(ir_type=IRType.OPENQASM))
    for task in tasks:
        result = device.run(task, **run_kwargs).result()
        assert len(result.result_types) == 3 if include_state_vector else 2
        assert np.allclose(
            result.get_value_by_result_type(
                ResultType.Expectation(
                    observable=Observable.H() @ Observable.X(), target=[0,
                                                                        1])),
            1 / np.sqrt(2),
        )
        if include_state_vector:
            assert np.allclose(
                result.get_value_by_result_type(ResultType.StateVector()),
                np.array([1, 0, 0, 1]) / np.sqrt(2),
            )
        if include_amplitude:
            amplitude = result.get_value_by_result_type(
                ResultType.Amplitude(["01", "10", "00", "11"]))
            assert np.isclose(amplitude["01"], 0)
            assert np.isclose(amplitude["10"], 0)
            assert np.isclose(amplitude["00"], 1 / np.sqrt(2))
            assert np.isclose(amplitude["11"], 1 / np.sqrt(2))
Beispiel #4
0
def test_add_result_type_observable_no_conflict_state_vector_obs_return_value(
):
    expected = [
        ResultType.StateVector(),
        ResultType.Expectation(observable=Observable.Y()),
    ]
    circ = Circuit(expected)
    assert circ.result_types == expected
Beispiel #5
0
def test_equality_densitymatrix():
    result1 = ResultType.DensityMatrix()
    result2 = ResultType.DensityMatrix()
    result3 = ResultType.StateVector()
    result4 = "foo"
    assert result1 == result2
    assert result1 != result3
    assert result1 != result4
Beispiel #6
0
def test_get_value_by_result_type(result_obj_4):
    result = GateModelQuantumTaskResult.from_object(result_obj_4)
    assert np.allclose(
        result.get_value_by_result_type(ResultType.Probability(target=0)), result.values[0]
    )
    assert np.allclose(result.get_value_by_result_type(ResultType.StateVector()), result.values[1])
    assert (
        result.get_value_by_result_type(ResultType.Expectation(observable=Observable.Y(), target=0))
        == result.values[2]
    )
    assert (
        result.get_value_by_result_type(ResultType.Variance(observable=Observable.Y(), target=0))
        == result.values[3]
    )
    assert result.get_value_by_result_type(ResultType.Amplitude(state=["00"])) == result.values[4]
Beispiel #7
0
def test_add_result_type_already_exists():
    expected = [ResultType.StateVector()]
    circ = Circuit(expected).add_result_type(expected[0])
    assert list(circ.result_types) == expected
Beispiel #8
0
def test_copy_with_mapping_target(sv):
    target_mapping = {0: 10, 1: 11}
    expected = ResultType.StateVector()
    assert sv.copy(target_mapping=target_mapping) == expected
Beispiel #9
0
def sv():
    return ResultType.StateVector()
Beispiel #10
0
def test_copy_with_target(sv):
    target = [10, 11]
    expected = ResultType.StateVector()
    assert sv.copy(target=target) == expected
 "result_type, serialization_properties, expected_ir",
 [
     (
         ResultType.Expectation(Observable.I(), target=0),
         OpenQASMSerializationProperties(
             qubit_reference_type=QubitReferenceType.VIRTUAL),
         "#pragma braket result expectation i(q[0])",
     ),
     (
         ResultType.Expectation(Observable.I()),
         OpenQASMSerializationProperties(
             qubit_reference_type=QubitReferenceType.VIRTUAL),
         "#pragma braket result expectation i all",
     ),
     (
         ResultType.StateVector(),
         OpenQASMSerializationProperties(
             qubit_reference_type=QubitReferenceType.VIRTUAL),
         "#pragma braket result state_vector",
     ),
     (
         ResultType.DensityMatrix(),
         OpenQASMSerializationProperties(
             qubit_reference_type=QubitReferenceType.VIRTUAL),
         "#pragma braket result density_matrix",
     ),
     (
         ResultType.DensityMatrix([0, 2]),
         OpenQASMSerializationProperties(
             qubit_reference_type=QubitReferenceType.VIRTUAL),
         "#pragma braket result density_matrix q[0], q[2]",
Beispiel #12
0
def test_add_result_type_already_exists():
    expected = [ResultType.StateVector()]
    circ = Circuit(expected).add_result_type(expected[0])
    assert circ.observables_simultaneously_measurable
    assert list(circ.result_types) == expected
Beispiel #13
0
 (Circuit().x(0), gates.X().to_matrix()),
 (Circuit().y(0), gates.Y().to_matrix()),
 (Circuit().z(0), gates.Z().to_matrix()),
 (Circuit().s(0), gates.S().to_matrix()),
 (Circuit().si(0), gates.Si().to_matrix()),
 (Circuit().t(0), gates.T().to_matrix()),
 (Circuit().ti(0), gates.Ti().to_matrix()),
 (Circuit().v(0), gates.V().to_matrix()),
 (Circuit().vi(0), gates.Vi().to_matrix()),
 (Circuit().rx(0, 0.15), gates.Rx(0.15).to_matrix()),
 (Circuit().ry(0, 0.15), gates.Ry(0.15).to_matrix()),
 (Circuit().rz(0, 0.15), gates.Rz(0.15).to_matrix()),
 (Circuit().phaseshift(0, 0.15), gates.PhaseShift(0.15).to_matrix()),
 (Circuit().cnot(1, 0), gates.CNot().to_matrix()),
 (Circuit().cnot(1, 0).add_result_type(
     ResultType.StateVector()), gates.CNot().to_matrix()),
 (Circuit().swap(1, 0), gates.Swap().to_matrix()),
 (Circuit().swap(0, 1), gates.Swap().to_matrix()),
 (Circuit().iswap(1, 0), gates.ISwap().to_matrix()),
 (Circuit().iswap(0, 1), gates.ISwap().to_matrix()),
 (Circuit().pswap(1, 0, 0.15), gates.PSwap(0.15).to_matrix()),
 (Circuit().pswap(0, 1, 0.15), gates.PSwap(0.15).to_matrix()),
 (Circuit().xy(1, 0, 0.15), gates.XY(0.15).to_matrix()),
 (Circuit().xy(0, 1, 0.15), gates.XY(0.15).to_matrix()),
 (Circuit().cphaseshift(1, 0,
                        0.15), gates.CPhaseShift(0.15).to_matrix()),
 (Circuit().cphaseshift00(1, 0,
                          0.15), gates.CPhaseShift00(0.15).to_matrix()),
 (Circuit().cphaseshift01(1, 0,
                          0.15), gates.CPhaseShift01(0.15).to_matrix()),
 (Circuit().cphaseshift10(1, 0,