예제 #1
0
def result_obj_5(task_metadata_shots):
    return GateModelTaskResult(
        taskMetadata=task_metadata_shots,
        additionalMetadata=AdditionalMetadata(action=jaqcd.Program(
            instructions=[
                jaqcd.CNot(control=0, target=1),
                jaqcd.CNot(control=2, target=3)
            ],
            results=[
                jaqcd.Probability(targets=[1]),
                jaqcd.Expectation(observable=["z"])
            ],
        )),
        measurements=[
            [0, 0, 1, 0],
            [1, 1, 1, 1],
            [1, 0, 0, 1],
            [0, 0, 1, 0],
            [1, 1, 1, 1],
            [0, 1, 1, 1],
            [0, 0, 0, 1],
            [0, 1, 1, 1],
            [0, 0, 0, 0],
            [0, 0, 0, 1],
        ],
        measuredQubits=[0, 1, 2, 3],
    )
예제 #2
0
def openqasm_result_obj_shots(task_metadata_shots, additional_metadata_openqasm):
    return GateModelTaskResult.construct(
        measurements=[[0, 0], [0, 1], [0, 1], [0, 1]],
        measuredQubits=[0, 1],
        taskMetadata=task_metadata_shots,
        additionalMetadata=additional_metadata_openqasm,
        resultTypes=[jaqcd.Probability()],
    )
예제 #3
0
def test_ir_non_empty_instructions_result_types():
    circ = Circuit().h(0).cnot(0, 1).probability([0, 1])
    expected = jaqcd.Program(
        instructions=[jaqcd.H(target=0),
                      jaqcd.CNot(control=0, target=1)],
        results=[jaqcd.Probability(targets=[0, 1])],
        basis_rotation_instructions=[],
    )
    assert circ.to_ir() == expected
예제 #4
0
def test_from_object_result_types(result_obj_5):
    result_obj = result_obj_5
    task_result = GateModelQuantumTaskResult.from_object(result_obj)
    expected_measurements = np.asarray(result_obj.measurements, dtype=int)
    assert np.array2string(task_result.measurements) == np.array2string(expected_measurements)
    assert np.allclose(task_result.values[0], np.array([0.6, 0.4]))
    assert task_result.values[1] == [0.4, 0.2, -0.2, -0.4]
    assert task_result.result_types[0].type == jaqcd.Probability(targets=[1])
    assert task_result.result_types[1].type == jaqcd.Expectation(observable=["z"])
예제 #5
0
def result_str_4(task_metadata_zero_shots, additional_metadata):
    result = GateModelTaskResult(
        resultTypes=[
            ResultTypeValue(type=jaqcd.Probability(targets=[0]), value=[0.5, 0.5]),
            ResultTypeValue(
                type=jaqcd.StateVector(), value=[(0.70710678, 0), (0, 0), (0, 0), (0.70710678, 0)]
            ),
            ResultTypeValue(type=jaqcd.Expectation(observable=["y"], targets=[0]), value=0.0),
            ResultTypeValue(type=jaqcd.Variance(observable=["y"], targets=[0]), value=0.1),
            ResultTypeValue(type=jaqcd.Amplitude(states=["00"]), value={"00": (0.70710678, 0)}),
        ],
        measuredQubits=list(range(2)),
        taskMetadata=task_metadata_zero_shots,
        additionalMetadata=additional_metadata,
    )
    return result.json()
예제 #6
0
def result_obj_4(task_metadata_zero_shots, additional_metadata):
    return GateModelTaskResult(
        resultTypes=[
            ResultTypeValue.construct(type=jaqcd.Probability(targets=[0]),
                                      value=np.array([0.5, 0.5])),
            ResultTypeValue.construct(
                type=jaqcd.StateVector(),
                value=np.array(
                    [complex(0.70710678, 0), 0, 0,
                     complex(0.70710678, 0)]),
            ),
            ResultTypeValue.construct(type=jaqcd.Expectation(observable=["y"],
                                                             targets=[0]),
                                      value=0.0),
            ResultTypeValue.construct(type=jaqcd.Variance(observable=["y"],
                                                          targets=[0]),
                                      value=0.1),
            ResultTypeValue.construct(type=jaqcd.Amplitude(states=["00"]),
                                      value={"00": complex(0.70710678, 0)}),
        ],
        measuredQubits=list(range(2)),
        taskMetadata=task_metadata_zero_shots,
        additionalMetadata=additional_metadata,
    )
예제 #7
0
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.

import itertools
import json
import random

import numpy as np
import pytest

import braket.ir.jaqcd as jaqcd
from braket.default_simulator.simulator import DefaultSimulator

results_data = [
    ([jaqcd.Expectation(observable=["x"])]),
    ([jaqcd.Probability(targets=[0, 1])]),
    ([jaqcd.Probability(),
      jaqcd.Variance(observable=["x"])]),
    ([jaqcd.Variance(observable=["z"], targets=[0])]),
]


@pytest.fixture
def generate_continuous_gates_circuit():
    def _generate_circuit(num_qubits, num_layers, results):
        instructions = []
        for layer in range(num_layers):
            for qubit in range(num_qubits):
                instructions.extend([
                    jaqcd.Rx(target=qubit, angle=0.15),
                    jaqcd.Ry(target=qubit, angle=0.16),
예제 #8
0
def test_from_braket_result_type_probability():
    translated = from_braket_result_type(jaqcd.Probability(targets=[0, 1]))
    assert isinstance(translated, Probability)
    assert translated._targets == [0, 1]
예제 #9
0

@pytest.fixture
def malformatted_results_2(task_metadata_shots, additional_metadata):
    return GateModelTaskResult(
        measurementProbabilities={
            "011000": 0.9999999999999982
        },
        measuredQubits=[0],
        taskMetadata=task_metadata_shots,
        additionalMetadata=additional_metadata,
    ).json()


test_ir_results = [
    (jaqcd.Probability(targets=[1]), np.array([0.6, 0.4])),
    (jaqcd.Probability(targets=[1, 2]), np.array([0.4, 0.2, 0.0, 0.4])),
    (
        jaqcd.Probability(),
        np.array([
            0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.2, 0.0, 0.1, 0.0, 0.0, 0.0,
            0.0, 0.0, 0.2
        ]),
    ),
    (jaqcd.Sample(targets=[1], observable=["z"]),
     np.array([1, -1, 1, 1, -1, -1, 1, -1, 1, 1])),
    (
        jaqcd.Sample(targets=[1, 2], observable=["x", "y"]),
        np.array([-1, 1, 1, -1, 1, 1, 1, 1, 1, 1]),
    ),
    (
예제 #10
0
def test_openqasm_shots_calculate_result_types(openqasm_result_obj_shots):
    result = GateModelQuantumTaskResult._from_object_internal_computational_basis_sampling(
        openqasm_result_obj_shots
    )
    assert result.result_types[0].type == jaqcd.Probability()
    assert np.array_equal(result.result_types[0].value, [0.25, 0.75, 0, 0])