Exemplo n.º 1
0
def result_types_nonzero_shots_bell_pair_testing(device: Device, run_kwargs: Dict[str, Any]):
    circuit = (
        Circuit()
        .h(0)
        .cnot(0, 1)
        .expectation(observable=Observable.H() @ Observable.X(), target=[0, 1])
        .sample(observable=Observable.H() @ Observable.X(), target=[0, 1])
    )
    result = device.run(circuit, **run_kwargs).result()
    assert len(result.result_types) == 2
    assert (
        0.6
        < result.get_value_by_result_type(
            ResultType.Expectation(observable=Observable.H() @ Observable.X(), target=[0, 1])
        )
        < 0.8
    )
    assert (
        len(
            result.get_value_by_result_type(
                ResultType.Sample(observable=Observable.H() @ Observable.X(), target=[0, 1])
            )
        )
        == run_kwargs["shots"]
    )
def get_result_types_three_qubit_circuit(theta, phi, varphi, obs, obs_targets,
                                         shots) -> Circuit:
    circuit = (Circuit().rx(0, theta).rx(1, phi).rx(2, varphi).cnot(0, 1).cnot(
        1, 2).variance(obs, obs_targets).expectation(obs, obs_targets))
    if shots:
        circuit.add_result_type(ResultType.Sample(obs, obs_targets))
    return circuit
def result_types_all_selected_testing(device: Device,
                                      run_kwargs: Dict[str, Any],
                                      test_program: bool = True):
    shots = run_kwargs["shots"]
    theta = 0.543
    array = np.array([[1, 2j], [-2j, 0]])

    circuit = (Circuit().rx(0, theta).rx(1, theta).variance(
        Observable.Hermitian(array)).expectation(Observable.Hermitian(array),
                                                 0))
    if shots:
        circuit.add_result_type(
            ResultType.Sample(Observable.Hermitian(array), 1))

    tasks = (circuit, ) if not test_program else (circuit,
                                                  circuit.to_ir(
                                                      ir_type=IRType.OPENQASM))

    for task in tasks:
        result = device.run(task, **run_kwargs).result()

        expected_mean = 2 * np.sin(theta) + 0.5 * np.cos(theta) + 0.5
        var = 0.25 * (np.sin(theta) - 4 * np.cos(theta))**2
        expected_var = [var, var]
        expected_eigs = np.linalg.eigvalsh(array)
        assert_variance_expectation_sample_result(result, shots, expected_var,
                                                  expected_mean, expected_eigs)
def result_types_hermitian_testing(device: Device, run_kwargs: Dict[str, Any]):
    shots = run_kwargs["shots"]
    theta = 0.543
    array = np.array([[1, 2j], [-2j, 0]])

    circuit = (Circuit().rx(0, theta).variance(Observable.Hermitian(array),
                                               0).expectation(
                                                   Observable.Hermitian(array),
                                                   0))
    if shots:
        circuit.add_result_type(
            ResultType.Sample(Observable.Hermitian(array), 0))
    result = device.run(circuit, **run_kwargs).result()

    expected_mean = 2 * np.sin(theta) + 0.5 * np.cos(theta) + 0.5
    expected_var = 0.25 * (np.sin(theta) - 4 * np.cos(theta))**2
    expected_eigs = np.linalg.eigvalsh(array)
    assert_variance_expectation_sample_result(result, shots, expected_var,
                                              expected_mean, expected_eigs)
def openqasm_result_types_bell_pair_testing(device: Device,
                                            run_kwargs: Dict[str, Any]):
    openqasm_string = ("OPENQASM 3;"
                       "qubit[2] q;"
                       "h q[0];"
                       "cnot q[0], q[1];"
                       "#pragma braket result expectation h(q[0]) @ x(q[1])"
                       "#pragma braket result sample h(q[0]) @ x(q[1])")
    hardcoded_openqasm = OpenQasmProgram(source=openqasm_string)
    circuit = (Circuit().h(0).cnot(0, 1).expectation(
        Observable.H() @ Observable.X(),
        (0, 1)).sample(Observable.H() @ Observable.X(), (0, 1)))
    generated_openqasm = circuit.to_ir(ir_type=IRType.OPENQASM)

    for program in hardcoded_openqasm, generated_openqasm:
        result = device.run(program, **run_kwargs).result()
        assert len(result.result_types) == 2
        assert (0.6 < result.get_value_by_result_type(
            ResultType.Expectation(observable=Observable.H() @ Observable.X(),
                                   target=[0, 1])) < 0.8)
        assert (len(
            result.get_value_by_result_type(
                ResultType.Sample(observable=Observable.H() @ Observable.X(),
                                  target=[0, 1]))) == run_kwargs["shots"])
def test_sample_parent_class():
    assert isinstance(ResultType.Sample(observable=Observable.X(), target=0),
                      ObservableResultType)
     "#pragma braket result probability all",
 ),
 (
     ResultType.Probability([0, 2]),
     OpenQASMSerializationProperties(
         qubit_reference_type=QubitReferenceType.VIRTUAL),
     "#pragma braket result probability q[0], q[2]",
 ),
 (
     ResultType.Probability(0),
     OpenQASMSerializationProperties(
         qubit_reference_type=QubitReferenceType.PHYSICAL),
     "#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])",
Exemplo n.º 8
0
    serialized_criteria = test_criteria.to_dict()
    assert serialized_criteria["__class__"] == "ObservableCriteria"
    assert "observables" in serialized_criteria
    assert "qubits" in serialized_criteria
    deserialized_criteria = ObservableCriteria.from_dict(serialized_criteria)
    assert test_criteria == deserialized_criteria


@pytest.mark.parametrize(
    "observables, qubits, matching_result_type, non_matching_result_type",
    [
        (
            None,
            range(3),
            [
                ResultType.Sample(Observable.X(), 0),
                ResultType.Sample(Observable.Z(), 2),
            ],
            [ResultType.Sample(Observable.X(), 4)],
        ),
        (
            None,
            None,
            [
                ResultType.Sample(Observable.X(), 0),
                ResultType.Sample(Observable.Z(), 10),
            ],
            [ResultType.Probability(0)],
        ),
        (
            Observable.X,