Ejemplo n.º 1
0
def test_matcher(observables, qubits, matching_result_type,
                 non_matching_result_type):
    criteria = ObservableCriteria(observables=observables, qubits=qubits)
    for result_type in matching_result_type:
        assert criteria.result_type_matches(result_type)
    for instruction in non_matching_result_type:
        assert not criteria.result_type_matches(instruction)
Ejemplo n.º 2
0
def test_serialization(observables, qubits):
    test_criteria = ObservableCriteria(observables=observables, qubits=qubits)
    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
Ejemplo n.º 3
0
def test_apply():
    noise_model = (NoiseModel().add_noise(PauliChannel(
        0.01, 0.02, 0.03), GateCriteria(Gate.I, [0, 1])).add_noise(
            Depolarizing(0.04), GateCriteria(Gate.H)).add_noise(
                TwoQubitDepolarizing(0.05),
                GateCriteria(Gate.CNot, [0, 1])).add_noise(
                    PauliChannel(0.06, 0.07, 0.08),
                    GateCriteria(Gate.H, [0, 1])).add_noise(
                        Depolarizing(0.10),
                        UnitaryGateCriteria(h_unitary(), 0)).add_noise(
                            Depolarizing(0.06),
                            ObservableCriteria(Observable.Z, 0)).add_noise(
                                Depolarizing(0.09),
                                QubitInitializationCriteria(0)))
    layer1 = Circuit().h(0).cnot(0, 1).sample(Observable.Z(), 0)
    layer2 = Circuit().unitary([0], h_unitary().to_matrix())
    circuit = layer1 + layer2
    noisy_circuit_from_circuit = noise_model.apply(circuit)
    expected_circuit = (Circuit().depolarizing(0, 0.09).h(0).depolarizing(
        0, 0.04).pauli_channel(0, 0.06, 0.07, 0.08).cnot(
            0, 1).two_qubit_depolarizing(0, 1, 0.05).unitary(
                [0],
                h_unitary().to_matrix()).depolarizing(
                    0, 0.10).apply_readout_noise(Depolarizing(0.06),
                                                 0).sample(Observable.Z(), 0))
    assert noisy_circuit_from_circuit == expected_circuit
Ejemplo n.º 4
0
def test_happy_case(observables, qubits):
    criteria = ObservableCriteria(observables=observables, qubits=qubits)
    assert criteria.applicable_key_types() == [
        CriteriaKey.OBSERVABLE,
        CriteriaKey.QUBIT,
    ]
    if observables is None:
        assert CriteriaKeyResult.ALL == criteria.get_keys(
            CriteriaKey.OBSERVABLE)
    else:
        assert Observable.X in criteria.get_keys(CriteriaKey.OBSERVABLE)
    if qubits is None:
        assert CriteriaKeyResult.ALL == criteria.get_keys(CriteriaKey.QUBIT)
    else:
        assert 1 in criteria.get_keys(CriteriaKey.QUBIT)
Ejemplo n.º 5
0
def test_get_keys_for_unknown_keytypes():
    criteria = ObservableCriteria(observables=[Observable.X], qubits=0)
    result = criteria.get_keys(CriteriaKey.UNITARY_GATE)
    assert len(result) == 0
Ejemplo n.º 6
0
def test_string():
    criteria = ObservableCriteria(observables=[Observable.X], qubits=0)
    str_representation = criteria.__str__()
    assert str_representation == "ObservableCriteria({'X'}, {0})"
Ejemplo n.º 7
0
def test_invalid_params(observables, qubits):
    ObservableCriteria(observables=observables, qubits=qubits)
Ejemplo n.º 8
0
        ),
    ],
)
def test_apply_initialization_noise(noise_model, input_circuit,
                                    expected_circuit):
    result_circuit = noise_model.apply(input_circuit)
    assert result_circuit == expected_circuit


@pytest.mark.parametrize(
    "noise_model, input_circuit, expected_circuit",
    [
        (
            # model
            NoiseModel().add_noise(Depolarizing(0.01),
                                   ObservableCriteria(Observable.Z)),
            # input circuit has no explicit observables
            Circuit().h(0).cnot(0, 1),
            # expected circuit has no noise applied
            Circuit().h(0).cnot(0, 1),
        ),
        (
            # model has observable criteria only on one qubit
            NoiseModel().add_noise(Depolarizing(0.01),
                                   ObservableCriteria(Observable.Z, 0)),
            # input circuit has no explicit observables
            Circuit().h(0).cnot(0, 1),
            # expected circuit has no noise applied
            Circuit().h(0).cnot(0, 1),
        ),
        (
Ejemplo n.º 9
0
            UnitaryGateCriteria(h_unitary(), range(3)),
        ),
        (UnitaryGateCriteria(h_unitary()), UnitaryGateCriteria(h_unitary(), None)),
    ],
)
def test_equal_criteria(criteria0, criteria1):
    assert criteria0 == criteria1


@pytest.mark.parametrize(
    "criteria0, criteria1",
    [
        (
            UnitaryGateCriteria(h_unitary(), range(3)),
            UnitaryGateCriteria(i_unitary(), range(3)),
        ),
        (
            UnitaryGateCriteria(h_unitary(), [1, 2, 3]),
            UnitaryGateCriteria(h_unitary(), range(3)),
        ),
        (UnitaryGateCriteria(h_unitary()), UnitaryGateCriteria(h_unitary(), range(3))),
        (UnitaryGateCriteria(h_unitary(), range(3)), float(3)),
        (
            UnitaryGateCriteria(h_unitary(), range(3)),
            ObservableCriteria(Observable.X, range(3)),
        ),
    ],
)
def test_not_equal_criteria(criteria0, criteria1):
    assert criteria0 != criteria1