Beispiel #1
0
def test_add_result_type_observable_no_conflict_all():
    expected = [
        ResultType.Variance(observable=Observable.Y()),
        ResultType.Expectation(observable=Observable.Y()),
    ]
    circ = Circuit(expected)
    assert circ.result_types == expected
Beispiel #2
0
def test_add_result_type_same_observable_wrong_target_order_tensor_product():
    Circuit().add_result_type(
        ResultType.Expectation(
            observable=Observable.Y() @ Observable.X(),
            target=[0, 1])).add_result_type(
                ResultType.Variance(observable=Observable.Y() @ Observable.X(),
                                    target=[1, 0]))
Beispiel #3
0
def test_add_result_type_same_observable_wrong_target_order_hermitian():
    array = np.eye(4)
    Circuit().add_result_type(
        ResultType.Expectation(
            observable=Observable.Hermitian(matrix=array),
            target=[0, 1])).add_result_type(
                ResultType.Variance(
                    observable=Observable.Hermitian(matrix=array),
                    target=[1, 0]))
Beispiel #4
0
def test_result_type_skips_computation_already_populated(calculate_result_types_mocked):
    result_str = json.dumps(
        {
            "braketSchemaHeader": {
                "name": "braket.task_result.gate_model_task_result",
                "version": "1",
            },
            "measurements": [[0]],
            "resultTypes": [
                {"type": {"observable": ["z"], "targets": [0], "type": "variance"}, "value": 12.0}
            ],
            "measuredQubits": [0],
            "taskMetadata": {
                "braketSchemaHeader": {"name": "braket.task_result.task_metadata", "version": "1"},
                "id": "arn:aws:braket:us-east-1:1234567890:quantum-task/22a238b2-ae96",
                "shots": 1,
                "deviceId": "arn:aws:braket:::device/quantum-simulator/amazon/dm1",
                "deviceParameters": {
                    "braketSchemaHeader": {
                        "name": "braket.device_schema.simulators."
                        "gate_model_simulator_device_parameters",
                        "version": "1",
                    },
                    "paradigmParameters": {
                        "braketSchemaHeader": {
                            "name": "braket.device_schema.gate_model_parameters",
                            "version": "1",
                        },
                        "qubitCount": 1,
                        "disableQubitRewiring": False,
                    },
                },
                "createdAt": "2022-01-12T06:05:22.633Z",
                "endedAt": "2022-01-12T06:05:24.136Z",
                "status": "COMPLETED",
            },
            "additionalMetadata": {
                "action": {
                    "braketSchemaHeader": {"name": "braket.ir.openqasm.program", "version": "1"},
                    "source": "\nqubit[1] q;\nh q[0];\n#pragma braket result variance z(q[0])\n",
                },
                "simulatorMetadata": {
                    "braketSchemaHeader": {
                        "name": "braket.task_result.simulator_metadata",
                        "version": "1",
                    },
                    "executionDuration": 16,
                },
            },
        }
    )
    res = GateModelQuantumTaskResult.from_string(result_str)
    assert (
        res.get_value_by_result_type(ResultType.Variance(observable=Observable.Z(), target=[0]))
        == 12
    )
    calculate_result_types_mocked.assert_not_called()
Beispiel #5
0
def test_add_result_type_same_observable_wrong_target_order_tensor_product():
    circ = (Circuit().add_result_type(
        ResultType.Expectation(
            observable=Observable.Y() @ Observable.X(),
            target=[0, 1])).add_result_type(
                ResultType.Variance(observable=Observable.Y() @ Observable.X(),
                                    target=[1, 0])))
    assert not circ.observables_simultaneously_measurable
    assert not circ.basis_rotation_instructions
Beispiel #6
0
def test_obs_rt_equality():
    a1 = ObservableResultType(ascii_symbols=["Obs"], observable=Observable.X(), target=0)
    a2 = ObservableResultType(ascii_symbols=["Obs"], observable=Observable.X(), target=0)
    a3 = ObservableResultType(ascii_symbols=["Obs"], observable=Observable.X(), target=1)
    a4 = "hi"
    assert a1 == a2
    assert a1 != a3
    assert a1 != a4
    assert ResultType.Variance(observable=Observable.Y(), target=0) != ResultType.Expectation(
        observable=Observable.Y(), target=0
    )
Beispiel #7
0
def test_add_result_type_same_observable_wrong_target_order_hermitian():
    array = np.eye(4)
    circ = (Circuit().add_result_type(
        ResultType.Expectation(
            observable=Observable.Hermitian(matrix=array),
            target=[0, 1])).add_result_type(
                ResultType.Variance(
                    observable=Observable.Hermitian(matrix=array),
                    target=[1, 0])))
    assert not circ.observables_simultaneously_measurable
    assert not circ.basis_rotation_instructions
Beispiel #8
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]
def test_variance_parent_class():
    assert isinstance(ResultType.Variance(observable=Observable.X(), target=0),
                      ObservableResultType)
            "#pragma braket result probability $0",
        ),
        (
            ResultType.Sample(Observable.I(), target=0),
            OpenQASMSerializationProperties(
                qubit_reference_type=QubitReferenceType.VIRTUAL),
            "#pragma braket result sample i(q[0])",
        ),
        (
            ResultType.Sample(Observable.I()),
            OpenQASMSerializationProperties(
                qubit_reference_type=QubitReferenceType.VIRTUAL),
            "#pragma braket result sample i all",
        ),
        (
            ResultType.Variance(Observable.I(), target=0),
            OpenQASMSerializationProperties(
                qubit_reference_type=QubitReferenceType.VIRTUAL),
            "#pragma braket result variance i(q[0])",
        ),
        (
            ResultType.Variance(Observable.I()),
            OpenQASMSerializationProperties(
                qubit_reference_type=QubitReferenceType.VIRTUAL),
            "#pragma braket result variance i all",
        ),
    ],
)
def test_result_to_ir_openqasm(result_type, serialization_properties,
                               expected_ir):
    assert (result_type.to_ir(