def test_happy_case(qubits): criteria = QubitInitializationCriteria(qubits=qubits) assert criteria.applicable_key_types() == [CriteriaKey.QUBIT] if qubits is None: assert CriteriaKeyResult.ALL == criteria.get_keys(CriteriaKey.QUBIT) else: assert 1 in criteria.get_keys(CriteriaKey.QUBIT)
def test_serialization(qubits): test_criteria = QubitInitializationCriteria(qubits=qubits) serialized_criteria = test_criteria.to_dict() assert serialized_criteria["__class__"] == "QubitInitializationCriteria" assert "qubits" in serialized_criteria deserialized_criteria = QubitInitializationCriteria.from_dict( serialized_criteria) assert test_criteria == deserialized_criteria
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
def test_filter(gate, qubit, noise, noise_type, expected_length): 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( Depolarizing(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.09), GateCriteria(None, 0)).add_noise( Depolarizing(0.10), QubitInitializationCriteria([0, 1]))) result_model = noise_model.from_filter(qubit=qubit, gate=gate, noise=noise) assert len(result_model.instructions) == expected_length
0, 0.01).cnot(0, 1), ), ], ) def test_gate_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), QubitInitializationCriteria()), # input circuit Circuit().h(0).cnot(0, 1), # expected circuit has noise on both qubits Circuit().depolarizing(0, 0.01).depolarizing(1, 0.01).h(0).cnot( 0, 1), ), ( # model NoiseModel().add_noise(Depolarizing(0.01), QubitInitializationCriteria(range(4))), # input circuit Circuit().h(0).cnot(0, 1), # expected circuit has noise on both qubits Circuit().depolarizing(0, 0.01).depolarizing(1, 0.01).h(0).cnot( 0, 1),
def test_representation(): criteria = QubitInitializationCriteria(qubits=range(4)) str_representation = criteria.__repr__() assert str_representation == "QubitInitializationCriteria(qubits={0, 1, 2, 3})"
def test_invalid_params(qubits): QubitInitializationCriteria(qubits=qubits)
def test_matcher(qubits, input_qubits, expected_result): criteria = QubitInitializationCriteria(qubits=qubits) result = criteria.qubit_intersection(input_qubits) assert result == expected_result
def test_get_keys_for_unknown_keytypes(): criteria = QubitInitializationCriteria(qubits=0) result = criteria.get_keys(CriteriaKey.UNITARY_GATE) assert len(result) == 0