Exemplo n.º 1
0
def measure_circuits_qobj_nondeterministic(allow_sampling=True):
    """Measure test circuits with deterministic count output."""

    # Dummy qobj
    final_qobj = _dummy_qobj()

    # 2-qubit measure |++>
    qr = QuantumRegister(2)
    cr = ClassicalRegister(2)
    circuit = QuantumCircuit(qr, cr)
    circuit.h(qr[0])
    circuit.h(qr[1])
    circuit.barrier(qr)
    qobj = compile(circuit, QasmSimulator(), shots=1)
    insert_instr(qobj, 0, measure_instr([0, 1], [0, 1]), -1)
    if not allow_sampling:
        insert_instr(qobj, 0, iden_instr(0), -1)
    final_qobj.experiments.append(qobj.experiments[0])

    # 3-qubit measure |++0>
    qr = QuantumRegister(3)
    cr = ClassicalRegister(3)
    circuit = QuantumCircuit(qr, cr)
    circuit.h(qr[0])
    circuit.h(qr[1])
    circuit.barrier(qr)
    qobj = compile(circuit, QasmSimulator(), shots=1)
    insert_instr(qobj, 0, measure_instr([0, 1, 2], [0, 1, 2]), -1)
    if not allow_sampling:
        insert_instr(qobj, 0, iden_instr(0), -1)
    final_qobj.experiments.append(qobj.experiments[0])

    return final_qobj
Exemplo n.º 2
0
    def test_readout_error_correlated_2qubit(self):
        """Test a correlated two-qubit readout error"""
        # Test circuit: prepare all plus state
        qr = QuantumRegister(2, 'qr')
        cr = ClassicalRegister(2, 'cr')
        circuit = QuantumCircuit(qr, cr)
        circuit.h(qr)
        circuit.barrier(qr)
        # We will manually add a correlated measure operation to
        # the compiled qobj
        backend = QasmSimulator()

        # Correlated 2-qubit readout error
        probs_given00 = [0.3, 0, 0, 0.7]
        probs_given01 = [0, 0.6, 0.4, 0]
        probs_given10 = [0, 0, 1, 0]
        probs_given11 = [0.1, 0, 0, 0.9]
        probs_noise = [
            probs_given00, probs_given01, probs_given10, probs_given11
        ]
        noise_model = NoiseModel()
        noise_model.add_readout_error(probs_noise, [0, 1])

        # Expected counts
        shots = 2000
        probs_ideal = [0.25, 0.25, 0.25, 0.25]
        p00 = sum([
            ideal * noise[0] for ideal, noise in zip(probs_ideal, probs_noise)
        ])
        p01 = sum([
            ideal * noise[1] for ideal, noise in zip(probs_ideal, probs_noise)
        ])
        p10 = sum([
            ideal * noise[2] for ideal, noise in zip(probs_ideal, probs_noise)
        ])
        p11 = sum([
            ideal * noise[3] for ideal, noise in zip(probs_ideal, probs_noise)
        ])
        target = {
            '0x0': p00 * shots,
            '0x1': p01 * shots,
            '0x2': p10 * shots,
            '0x3': p11 * shots
        }
        qobj = compile([circuit],
                       backend,
                       shots=shots,
                       basis_gates=noise_model.basis_gates)
        # Add measure to qobj
        item = measure_instr([0, 1], [0, 1])
        append_instr(qobj, 0, item)
        # Execute
        result = backend.run(qobj, noise_model=noise_model).result()
        self.is_completed(result)
        self.compare_counts(result, [circuit], [target], delta=0.05 * shots)
Exemplo n.º 3
0
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