def test_standard_reset0_error_100percent(self): """Test 100% Pauli error on id gates""" qr = QuantumRegister(1, 'qr') cr = ClassicalRegister(1, 'cr') circuit = QuantumCircuit(qr, cr) circuit.x(qr) circuit.barrier(qr) circuit.measure(qr, cr) backend = QasmSimulator() shots = 100 # test noise model error = reset_error(1) noise_model = NoiseModel() noise_model.add_all_qubit_quantum_error(error, ['id', 'x']) # Execute target = {'0x0': shots} qobj = compile([circuit], backend, shots=shots, basis_gates=noise_model.basis_gates) result = backend.run(qobj, noise_model=noise_model).result() self.is_completed(result) self.compare_counts(result, [circuit], [target], delta=0)
def test_specific_qubit_pauli_error_reset_25percent(self): """Test 25% Pauli-X error on reset of qubit-1""" qr = QuantumRegister(2, 'qr') cr = ClassicalRegister(2, 'cr') circuit = QuantumCircuit(qr, cr) circuit.reset(qr) circuit.barrier(qr) circuit.measure(qr, cr) backend = QasmSimulator() shots = 2000 # test noise model error = pauli_error([('X', 0.25), ('I', 0.75)]) noise_model = NoiseModel() noise_model.add_quantum_error(error, 'reset', [1]) # Execute target = {'0x0': 3 * shots / 4, '0x2': shots / 4} qobj = compile([circuit], backend, shots=shots, basis_gates=noise_model.basis_gates) result = backend.run(qobj, noise_model=noise_model).result() self.is_completed(result) self.compare_counts(result, [circuit], [target], delta=0.05 * shots)
def test_specific_qubit_pauli_error_gate_100percent(self): """Test 100% Pauli error on id gates on qubit-1""" qr = QuantumRegister(2, 'qr') cr = ClassicalRegister(2, 'cr') circuit = QuantumCircuit(qr, cr) circuit.iden(qr) circuit.barrier(qr) circuit.measure(qr, cr) backend = QasmSimulator() shots = 100 # test noise model error = pauli_error([('X', 1)]) noise_model = NoiseModel() noise_model.add_quantum_error(error, 'id', [1]) # Execute target = {'0x2': shots} qobj = compile([circuit], backend, shots=shots, basis_gates=noise_model.basis_gates) result = backend.run(qobj, noise_model=noise_model).result() self.is_completed(result) self.compare_counts(result, [circuit], [target], delta=0)
def test_nonlocal_pauli_error_gate_25percent(self): """Test 100% non-local Pauli error on cx(0, 1) gate""" qr = QuantumRegister(3, 'qr') cr = ClassicalRegister(3, 'cr') circuit = QuantumCircuit(qr, cr) circuit.cx(qr[0], qr[1]) circuit.barrier(qr) circuit.cx(qr[1], qr[0]) circuit.barrier(qr) circuit.measure(qr, cr) backend = QasmSimulator() shots = 2000 # test noise model error = pauli_error([('XII', 0.25), ('III', 0.75)]) noise_model = NoiseModel() noise_model.add_nonlocal_quantum_error(error, 'cx', [0, 1], [0, 1, 2]) # Execute target = {'0x0': 3 * shots / 4, '0x4': shots / 4} qobj = compile([circuit], backend, shots=shots, basis_gates=noise_model.basis_gates) result = backend.run(qobj, noise_model=noise_model).result() self.is_completed(result) self.compare_counts(result, [circuit], [target], delta=0.05 * shots)
def test_readout_error_qubit1(self): """Test readout error on qubit 1 for bell state""" # Test circuit: ideal bell state qr = QuantumRegister(2, 'qr') cr = ClassicalRegister(2, 'cr') circuit = QuantumCircuit(qr, cr) circuit.h(qr[0]) circuit.cx(qr[0], qr[1]) # Ensure qubit 0 is measured before qubit 1 circuit.barrier(qr) circuit.measure(qr[0], cr[0]) circuit.barrier(qr) circuit.measure(qr[1], cr[1]) backend = QasmSimulator() # Asymetric readout error on qubit-0 only probs_given0 = [0.9, 0.1] probs_given1 = [0.3, 0.7] noise_model = NoiseModel() noise_model.add_readout_error([probs_given0, probs_given1], [1]) shots = 2000 target = { '0x0': probs_given0[0] * shots / 2, '0x1': probs_given1[0] * shots / 2, '0x2': probs_given0[1] * shots / 2, '0x3': probs_given1[1] * shots / 2 } qobj = compile([circuit], backend, shots=shots, basis_gates=noise_model.basis_gates) result = backend.run(qobj, noise_model=noise_model).result() self.is_completed(result) self.compare_counts(result, [circuit], [target], delta=0.05 * shots)
def test_nonlocal_pauli_error_measure_25percent(self): """Test 25% Pauli-X error on qubit-1 when measuring qubit 0""" qr = QuantumRegister(2, 'qr') cr = ClassicalRegister(2, 'cr') circuit = QuantumCircuit(qr, cr) # use barrier to ensure measure qubit 0 is before qubit 1 circuit.measure(qr[0], cr[0]) circuit.barrier(qr) circuit.measure(qr[1], cr[1]) backend = QasmSimulator() shots = 1000 # test noise model error = pauli_error([('X', 0.25), ('I', 0.75)]) noise_model = NoiseModel() noise_model.add_nonlocal_quantum_error(error, 'measure', [0], [1]) # Execute target = {'0x0': 3 * shots / 4, '0x2': shots / 4} qobj = compile([circuit], backend, shots=shots, basis_gates=noise_model.basis_gates) result = backend.run(qobj, noise_model=noise_model).result() self.is_completed(result) self.compare_counts(result, [circuit], [target], delta=0.05 * shots)
def test_all_qubit_pauli_error_measure_25percent(self): """Test 25% Pauli-X error on measure""" qr = QuantumRegister(2, 'qr') cr = ClassicalRegister(2, 'cr') circuit = QuantumCircuit(qr, cr) circuit.measure(qr, cr) backend = QasmSimulator() shots = 2000 # test noise model error = pauli_error([('X', 0.25), ('I', 0.75)]) noise_model = NoiseModel() noise_model.add_all_qubit_quantum_error(error, 'measure') # Execute target = { '0x0': 9 * shots / 16, '0x1': 3 * shots / 16, '0x2': 3 * shots / 16, '0x3': shots / 16 } circuit = transpile(circuit, basis_gates=noise_model.basis_gates) qobj = assemble([circuit], backend, shots=shots) result = backend.run(qobj, noise_model=noise_model).result() self.is_completed(result) self.compare_counts(result, [circuit], [target], delta=0.05 * shots)
def unitary_gate_circuits_real_deterministic(final_measure=True): """Unitary gate test circuits with deterministic count output.""" final_qobj = _dummy_qobj() qr = QuantumRegister(2) if final_measure: cr = ClassicalRegister(2) regs = (qr, cr) else: regs = (qr, ) x_mat = np.array([[0, 1], [1, 0]]) cx_mat = np.array([[1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0]]) # CX01, |00> state circuit = QuantumCircuit(*regs) circuit.barrier(qr) qobj = assemble(circuit, QasmSimulator(), shots=1) append_instr(qobj, 0, unitary_instr(cx_mat, [0, 1])) if final_measure: append_instr(qobj, 0, measure_instr([0], [0])) append_instr(qobj, 0, measure_instr([1], [1])) final_qobj.experiments.append(qobj.experiments[0]) # CX10, |00> state circuit = QuantumCircuit(*regs) circuit.barrier(qr) qobj = assemble(circuit, QasmSimulator(), shots=1) append_instr(qobj, 0, unitary_instr(cx_mat, [1, 0])) if final_measure: append_instr(qobj, 0, measure_instr([0], [0])) append_instr(qobj, 0, measure_instr([1], [1])) final_qobj.experiments.append(qobj.experiments[0]) # CX01.(X^I), |10> state circuit = QuantumCircuit(*regs) circuit.barrier(qr) qobj = assemble(circuit, QasmSimulator(), shots=1) append_instr(qobj, 0, unitary_instr(x_mat, [1])) append_instr(qobj, 0, unitary_instr(cx_mat, [0, 1])) if final_measure: append_instr(qobj, 0, measure_instr([0], [0])) append_instr(qobj, 0, measure_instr([1], [1])) final_qobj.experiments.append(qobj.experiments[0]) # CX10.(I^X), |01> state circuit = QuantumCircuit(*regs) circuit.barrier(qr) qobj = assemble(circuit, QasmSimulator(), shots=1) append_instr(qobj, 0, unitary_instr(x_mat, [0])) append_instr(qobj, 0, unitary_instr(cx_mat, [1, 0])) if final_measure: append_instr(qobj, 0, measure_instr([0], [0])) append_instr(qobj, 0, measure_instr([1], [1])) final_qobj.experiments.append(qobj.experiments[0]) # CX01.(I^X), |11> state circuit = QuantumCircuit(*regs) circuit.barrier(qr) qobj = assemble(circuit, QasmSimulator(), shots=1) append_instr(qobj, 0, unitary_instr(x_mat, [0])) append_instr(qobj, 0, unitary_instr(cx_mat, [0, 1])) if final_measure: append_instr(qobj, 0, measure_instr([0], [0])) append_instr(qobj, 0, measure_instr([1], [1])) final_qobj.experiments.append(qobj.experiments[0]) # CX10.(X^I), |11> state circuit = QuantumCircuit(*regs) circuit.barrier(qr) qobj = assemble(circuit, QasmSimulator(), shots=1) append_instr(qobj, 0, unitary_instr(x_mat, [1])) append_instr(qobj, 0, unitary_instr(cx_mat, [1, 0])) if final_measure: append_instr(qobj, 0, measure_instr([0], [0])) append_instr(qobj, 0, measure_instr([1], [1])) final_qobj.experiments.append(qobj.experiments[0]) return final_qobj
def test_mappable_qasm(self): """Test that the qasm controller can be mapped.""" cfunc = qasm_controller_execute() sim = QasmSimulator() fqobj = self._create_qobj(sim) self._map_and_test(cfunc, fqobj)