def test_probability_equality():
    a1 = ResultType.Probability([0, 1])
    a2 = ResultType.Probability([0, 1])
    a3 = ResultType.Probability([0, 1, 2])
    a4 = "hi"
    assert a1 == a2
    assert a1 != a3
    assert a1 != a4
Ejemplo n.º 2
0
def test_add_result_type_observable_no_conflict_target_all():
    expected = [
        ResultType.Expectation(observable=Observable.Z(), target=[0]),
        ResultType.Probability(),
    ]
    circ = Circuit(expected)
    assert circ.result_types == expected
Ejemplo n.º 3
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
Ejemplo n.º 4
0
def test_add_circuit_with_target(bell_pair):
    circ = Circuit().add_circuit(bell_pair, target=[10, 11])
    expected = (Circuit().add_instruction(Instruction(
        Gate.H(),
        10)).add_instruction(Instruction(Gate.CNot(),
                                         [10, 11])).add_result_type(
                                             ResultType.Probability([10, 11])))
    assert circ == expected
Ejemplo n.º 5
0
def result_types_bell_pair_full_probability_testing(device: Device, run_kwargs: Dict[str, Any]):
    shots = run_kwargs["shots"]
    tol = get_tol(shots)
    circuit = Circuit().h(0).cnot(0, 1).probability()
    result = device.run(circuit, **run_kwargs).result()
    assert len(result.result_types) == 1
    assert np.allclose(
        result.get_value_by_result_type(ResultType.Probability()), np.array([0.5, 0, 0, 0.5]), **tol
    )
Ejemplo n.º 6
0
def noisy_circuit_1qubit_noise_full_probability(device: Device,
                                                run_kwargs: Dict[str, Any]):
    shots = run_kwargs["shots"]
    tol = get_tol(shots)
    circuit = Circuit().x(0).x(1).bit_flip(0, 0.1).probability()
    result = device.run(circuit, **run_kwargs).result()
    assert len(result.result_types) == 1
    assert np.allclose(
        result.get_value_by_result_type(ResultType.Probability()),
        np.array([0.0, 0.1, 0, 0.9]), **tol)
def result_types_bell_pair_marginal_probability_testing(
        device: Device, run_kwargs: Dict[str, Any]):
    shots = run_kwargs["shots"]
    tol = get_tol(shots)
    circuit = Circuit().h(0).cnot(0, 1).probability(0)
    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) == 1
        assert np.allclose(
            result.get_value_by_result_type(ResultType.Probability(target=0)),
            np.array([0.5, 0.5]), **tol)
Ejemplo n.º 8
0
def noisy_circuit_2qubit_noise_full_probability(device: Device,
                                                run_kwargs: Dict[str, Any]):
    shots = run_kwargs["shots"]
    tol = get_tol(shots)
    K0 = np.eye(4) * np.sqrt(0.9)
    K1 = np.kron(np.array([[0.0, 1.0], [1.0, 0.0]]),
                 np.array([[0.0, 1.0], [1.0, 0.0]])) * np.sqrt(0.1)
    circuit = Circuit().x(0).x(1).kraus((0, 1), [K0, K1]).probability()
    result = device.run(circuit, **run_kwargs).result()
    assert len(result.result_types) == 1
    assert np.allclose(
        result.get_value_by_result_type(ResultType.Probability()),
        np.array([0.1, 0.0, 0, 0.9]), **tol)
Ejemplo n.º 9
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 openqasm_noisy_circuit_1qubit_noise_full_probability(
        device: Device, run_kwargs: Dict[str, Any]):
    shots = run_kwargs["shots"]
    tol = get_tol(shots)
    openqasm_string = ("OPENQASM 3;"
                       "qubit[2] q;"
                       "x q[0];"
                       "x q[1];"
                       "#pragma braket noise bit_flip(0.1) q[0]"
                       "#pragma braket result probability q[0], q[1]")
    hardcoded_openqasm = OpenQasmProgram(source=openqasm_string)
    circuit = Circuit().x(0).x(1).bit_flip(0, 0.1).probability([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) == 1
        assert np.allclose(
            result.get_value_by_result_type(
                ResultType.Probability(target=[0, 1])),
            np.array([0.0, 0.1, 0, 0.9]), **tol)
Ejemplo n.º 11
0
def test_add_result_type_with_target(prob):
    expected = [ResultType.Probability([10, 11])]
    circ = Circuit().add_result_type(prob, target=[10, 11])
    assert circ.observables_simultaneously_measurable
    assert list(circ.result_types) == expected
Ejemplo n.º 12
0
def test_add_result_type_observable_conflict_selected_target_then_all_target():
    circ = Circuit().add_result_type(
        ResultType.Expectation(observable=Observable.Y(), target=[0, 1]))
    circ.add_result_type(ResultType.Probability())
Ejemplo n.º 13
0
def test_add_result_type_observable_conflict_all():
    circ = Circuit().add_result_type(ResultType.Probability())
    circ.add_result_type(ResultType.Expectation(observable=Observable.Y()))
Ejemplo n.º 14
0
def test_add_result_type_with_target(prob):
    expected = [ResultType.Probability([10, 11])]
    circ = Circuit().add_result_type(prob, target=[10, 11])
    assert list(circ.result_types) == expected
Ejemplo n.º 15
0
def test_add_result_type_with_mapping(prob):
    expected = [ResultType.Probability([10, 11])]
    circ = Circuit().add_result_type(prob, target_mapping={0: 10, 1: 11})
    assert list(circ.result_types) == expected
Ejemplo n.º 16
0
def test_add_result_type_observable_conflict_selected_target_then_all_target():
    circ = Circuit().add_result_type(
        ResultType.Expectation(observable=Observable.Y(), target=[1]))
    circ.add_result_type(ResultType.Probability())
    assert not circ.observables_simultaneously_measurable
    assert not circ.basis_rotation_instructions
Ejemplo n.º 17
0
     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,
     range(3),
     [
         ResultType.Sample(Observable.X(), 0),
         ResultType.Sample(Observable.X(), 1),
         ResultType.Sample(Observable.X()),
     ],
     [
         ResultType.Sample(Observable.X(), 3),
         ResultType.Sample(Observable.Y(), 1),
     ],
 ),
 (
Ejemplo n.º 18
0
def test_copy_with_mapping_target_hasattr(prob):
    target_mapping = {0: 10, 1: 11}
    expected = ResultType.Probability([10, 11])
    assert prob.copy(target_mapping=target_mapping) == expected
     "#pragma braket result density_matrix q[0], q[2]",
 ),
 (
     ResultType.DensityMatrix(0),
     OpenQASMSerializationProperties(
         qubit_reference_type=QubitReferenceType.PHYSICAL),
     "#pragma braket result density_matrix $0",
 ),
 (
     ResultType.Amplitude(["01", "10"]),
     OpenQASMSerializationProperties(
         qubit_reference_type=QubitReferenceType.PHYSICAL),
     '#pragma braket result amplitude "01", "10"',
 ),
 (
     ResultType.Probability(),
     OpenQASMSerializationProperties(
         qubit_reference_type=QubitReferenceType.VIRTUAL),
     "#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",
Ejemplo n.º 20
0
    assert str(
        recwarn[0].message).startswith("Noise is not applied to any gate")

    assert np.allclose(
        circuit.as_unitary(),
        np.kron(gates.Si().to_matrix(),
                np.kron(gates.CPhaseShift(0.15).to_matrix(), np.eye(2))),
    )


@pytest.mark.parametrize(
    "circuit,expected_unitary",
    [
        (Circuit().h(0), gates.H().to_matrix()),
        (Circuit().h(0).add_result_type(
            ResultType.Probability(target=[0])), gates.H().to_matrix()),
        (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(
Ejemplo n.º 21
0
def test_copy_with_target_hasattr(prob):
    target = [10, 11]
    expected = ResultType.Probability(target)
    assert prob.copy(target=target) == expected
Ejemplo n.º 22
0
def prob():
    return ResultType.Probability([0, 1])
Ejemplo n.º 23
0
def test_get_value_by_result_type_value_error(result_obj_4):
    result = GateModelQuantumTaskResult.from_object(result_obj_4)
    result.get_value_by_result_type(ResultType.Probability(target=[0, 1]))