Beispiel #1
0
def get_quantum_error(dim):
    error_param = 0.1  # damping parameter

    # Construct the error
    i_error = errors.amplitude_damping_error(error_param)
    for i in range(dim - 1):
        i_error = i_error.tensor(errors.amplitude_damping_error(error_param))

    return i_error
Beispiel #2
0
    def test_backend_method_nonclifford_circuit_and_kraus_noise(self):
        """Test statevector method is used for Clifford circuit"""
        # Noise Model
        error = amplitude_damping_error(0.5)
        noise_model = NoiseModel()
        noise_model.add_all_qubit_quantum_error(
            error, ['id', 'x', 'y', 'z', 'h', 's', 'sdg'])

        # Test circuits
        shots = 100
        circuits = ref_non_clifford.ccx_gate_circuits_deterministic(
            final_measure=True)
        qobj = compile(circuits, self.SIMULATOR, shots=shots)

        def get_result():
            return self.SIMULATOR.run(
                qobj,
                backend_options=self.BACKEND_OPTS,
                noise_model=noise_model).result()

        # Check simulation method
        method = self.BACKEND_OPTS.get('method')
        if method == 'stabilizer':
            self.assertRaises(AerError, get_result)
        else:
            result = get_result()
            self.is_completed(result)
            self.compare_result_metadata(result, circuits, 'method',
                                         'statevector')
Beispiel #3
0
    def test_backend_method_nonclifford_circuit_and_kraus_noise(self):
        """Test statevector method is used for Clifford circuit"""
        # Noise Model
        error = amplitude_damping_error(0.5)
        noise_model = NoiseModel()
        noise_model.add_all_qubit_quantum_error(
            error, ['id', 'x', 'y', 'z', 'h', 's', 'sdg'])

        # Test circuits
        shots = 100
        circuits = ref_non_clifford.ccx_gate_circuits_deterministic(
            final_measure=True)
        qobj = assemble(circuits, self.SIMULATOR, shots=shots)

        result = self.SIMULATOR.run(qobj,
                                    backend_options=self.BACKEND_OPTS,
                                    noise_model=noise_model).result()
        success = getattr(result, 'success', False)
        # Check simulation method
        method = self.BACKEND_OPTS.get('method', 'automatic')
        if method == 'stabilizer':
            self.assertFalse(success)
        else:
            self.assertTrue(success)
            if method == 'automatic':
                target_method = 'density_matrix'
            else:
                target_method = method
            self.compare_result_metadata(result, circuits, 'method',
                                         target_method)
Beispiel #4
0
def kraus_noise_model():
    """Return test Kraus noise model"""
    noise_model = NoiseModel()
    error1 = amplitude_damping_error(0.1)
    noise_model.add_all_qubit_quantum_error(error1, ['u1', 'u2', 'u3'])
    error2 = error1.tensor(error1)
    noise_model.add_all_qubit_quantum_error(error2, ['cx'])
    return NoiseWithDescription(noise_model, "Kraus Noise")
Beispiel #5
0
def kraus_noise_model():
    """Return test Kraus noise model"""
    noise_model = NoiseModel()
    error1 = amplitude_damping_error(0.1)
    noise_model.add_all_qubit_quantum_error(error1, ['u1', 'u2', 'u3'])
    error2 = error1.kron(error1)
    noise_model.add_all_qubit_quantum_error(error2, ['cx'])
    return noise_model
Beispiel #6
0
 def noise_model_kraus(self):
     """ Creates a new noise model for testing purposes """
     readout_error = [0.01, 0.1]
     params = {'u3': (1, 0.001), 'cx': (2, 0.02)}
     noise = NoiseModel()
     readout = [[1.0 - readout_error[0], readout_error[0]],
                [readout_error[1], 1.0 - readout_error[1]]]
     noise.add_all_qubit_readout_error(ReadoutError(readout))
     for gate, (num_qubits, gate_error) in params.items():
         noise.add_all_qubit_quantum_error(
             amplitude_damping_error(gate_error, num_qubits), gate)
         return noise
Beispiel #7
0
    def test_auto_method_nonclifford_circuit_and_kraus_noise(self):
        """Test statevector method is used for Clifford circuit"""
        # Noise Model
        error = amplitude_damping_error(0.5)
        noise_model = NoiseModel()
        noise_model.add_all_qubit_quantum_error(
            error, ['id', 'x', 'y', 'z', 'h', 's', 'sdg'])
        backend = self.backend(noise_model=noise_model)

        # Test circuits
        shots = 100
        circuits = ref_non_clifford.ccx_gate_circuits_deterministic(
            final_measure=True)
        result = backend.run(circuits, shots=shots).result()
        success = getattr(result, 'success', False)
        self.compare_result_metadata(result, circuits, 'method',
                                     "density_matrix")
def amplified_qiskit_model(name, amplification=1, gate_time=0.001):
    provider = IBMQ.load_account()
    device = provider.get_backend(name)
    properties = device.properties()
    noise_model = NoiseModel()

    # depolarizing error
    cnot_depol_errs = [
        x.parameters[0].value for x in properties.gates if x.gate == 'cx'
    ]
    ave_cnot_error = sum(cnot_depol_errs) / len(
        cnot_depol_errs) / amplification
    cnot_depol_error = depolarizing_error(ave_cnot_error, 2)

    single_depol_errs = [
        x.parameters[0].value for x in properties.gates if x.gate != 'cx'
    ]
    ave_single_error = sum(single_depol_errs) / len(
        single_depol_errs) / amplification
    single_depol_error = depolarizing_error(ave_single_error, 1)

    # amp damp
    t1s = [x[0].value for x in properties.qubits]
    ave_t1 = sum(t1s) / len(t1s)
    t1_ratio = gate_time / (ave_t1 * amplification)
    amp_gamma = 1 - np.exp(-t1_ratio)
    amp_error = amplitude_damping_error(amp_gamma)

    # phase damp
    t2s = [x[1].value for x in properties.qubits]
    ave_t2 = sum(t2s) / len(t2s)
    t2_ratio = gate_time / (ave_t2 * amplification)
    phase_gamma = 1 - np.exp(-t2_ratio)
    phase_error = phase_damping_error(phase_gamma)

    thermal_error = amp_error.compose(phase_error)
    noise_model.add_all_qubit_quantum_error(
        single_depol_error.compose(thermal_error), ['u1', 'u2', 'u3'])

    noise_model.add_all_qubit_quantum_error(
        cnot_depol_error.compose(thermal_error.tensor(thermal_error)), ['cx'])

    return noise_model