0
$\begingroup$

Description: I'm currently working on a project that involves running quantum circuits as a hybrid job on the aws tensor network simulator 'tn1'.

Error on the Cloudwatch logs:An error occurred while executing the quantum circuit: 'list' object has no attribute 'measure_all'

how i execute circuits:

def execute_quantum_circuit(circuit, shots=1000):
try:
    backend = AWSBraketProvider().get_backend("TN1")
    circuit.measure_all()
    job = backend.run(circuit, shots=shots)
    result = job.result()
    counts = result.get_counts()

    return counts
except Exception as e:
    print(f"An error occurred while executing the quantum circuit: {e}")
    return None

how I create the the Grover oracle:

def create_grover_oracle(address, num_qubits):
try:
    qr = QuantumRegister(num_qubits)
    oracle_circuit = QuantumCircuit(qr)

    # apply hadamard gates to create a uniform superposition
    oracle_circuit.h(qr)

    # encoding the address
    for i, bit in enumerate(address):
        if bit == '1':
            oracle_circuit.x(i)

    # apply controlled-Z gates to mark the solution(s)
    ancilla = QuantumRegister(1)
    oracle_circuit.add_register(ancilla)
    oracle_circuit.h(ancilla)
    for i, bit in enumerate(address):
        if bit == '1':
            oracle_circuit.cz(i, ancilla[0])

    # multi-controlled-Z gate
    oracle_circuit.h(qr)
    oracle_circuit.mcx(qr[:-1], qr[-1])
    oracle_circuit.h(qr)

    # uncompute the encoding by applying X gates again
    for i, bit in enumerate(address):
        if bit == '1':
            oracle_circuit.x(i)

    # apply hadamard gates again to maintain superposition
    oracle_circuit.h(qr)

    return oracle_circuit
except Exception as e:
    print(f"An error occurred while creating the Grover oracle: {e}")
    return None

how I create the diffusion circuit:

def create_diffusion_circuit(num_qubits):
try:
    qr = QuantumRegister(num_qubits)
    diffusion_circuit = QuantumCircuit(qr)

    # apply hadamard gates to create a uniform superposition
    diffusion_circuit.h(qr)

    # apply X gates to prepare for multi-controlled Z gate
    diffusion_circuit.x(qr)

    # multi-controlled Z gate
    diffusion_circuit.h(qr[-1])
    diffusion_circuit.mct(qr[:-1], qr[-1])
    diffusion_circuit.h(qr[-1])

    # apply X gates again
    diffusion_circuit.x(qr)

    # apply hadamard gates again
    diffusion_circuit.h(qr)

    # optimize gate sequences in the diffusion circuit
    optimized_diffusion_circuit = optimize_gates(diffusion_circuit)

    return optimized_diffusion_circuit

the call functions:

oracle_partition = create_grover_oracle(correct_address, num_qubits=50)
diffusion_circuit = create_diffusion_circuit(num_qubits=50)
counts = execute_quantum_circuit(oracle_partition)
execute_quantum_circuit(diffusion_circuit)

the optimise circuit def:

def optimize_gates(circuit):
try:
    optimized_circuit = QuantumCircuit(circuit.num_qubits)

    # Iterate through the gates in the circuit
    i = 0
    while i < len(circuit.data) - 1:
        current_gate = circuit.data[i]
        next_gate = circuit.data[i + 1]

        # Check if both gates are instances of Gate
        if isinstance(current_gate[0], Gate) and isinstance(next_gate[0], Gate):
            # Check if the gates are of the same type and act on the same qubits
            if current_gate[0].name == next_gate[0].name and current_gate[1] == next_gate[1]:
                # Combine consecutive gates into a single gate
                combined_gate = current_gate[0].compose(next_gate[0], qubits=current_gate[1])

                # Append the combined gate to the optimized circuit
                optimized_circuit.append(combined_gate, current_gate[1])

                # Move to the gate after the next gate
                i += 2
            else:
                # Append the current gate to the optimized circuit
                optimized_circuit.append(current_gate[0], current_gate[1])

                # Move to the next gate
                i += 1
        else:
            # Append the current gate to the optimized circuit
            optimized_circuit.append(current_gate[0], current_gate[1])

            # Move to the next gate
            i += 1

    # If there's one gate left after the loop, append it to the optimized circuit
    if i == len(circuit.data) - 1:
        last_gate = circuit.data[-1]
        optimized_circuit.append(last_gate[0], last_gate[1])

    return optimized_circuit

Need assistance:

I would appreciate any insights or guidance on how to properly measure all the qubits so i can get the measurement counts, as well as any suggestions for the implementation of grovers algorithm.

P.S.: I previously was getting 0s in the measurement counts so i reimplemented the circuit defs

$\endgroup$
6
  • $\begingroup$ Hi @Neel! In order to answer you exactly, more code is needed. You provide the definition of execute_quantum_circuit but we have no idea how/where you call it. Also, according to the error, you likely give a list as first parameter of execute_quantum_circuit when you call it. $\endgroup$ Feb 29 at 15:25
  • $\begingroup$ @AdrienSuau oracle_partition = create_grover_oracle(correct_address, num_qubits=50) diffusion_circuit = create_diffusion_circuit(num_qubits=50) counts = execute_quantum_circuit(oracle_partition) execute_quantum_circuit(diffusion_circuit) $\endgroup$
    – Neel
    Feb 29 at 15:54
  • 1
    $\begingroup$ The optimize_gates likely returns a list. You should edit your question to include the code above and to include the definition / import of the optimize_gates function you call in create_diffusion_circuit. $\endgroup$ Feb 29 at 16:09
  • $\begingroup$ @AdrienSuau another thing the last thing the log shows is this and then nothing infinetly INFO:qiskit.passmanager.base_tasks:Pass: ContainsInstruction - 0.02599 (ms) INFO:qiskit.passmanager.base_tasks:Pass: UnitarySynthesis - 0.02003 (ms) how can i debug this there is no traceback and stuff $\endgroup$
    – Neel
    Feb 29 at 17:09
  • $\begingroup$ @AdrienSuau and how to properly measure all the qubits in the execute def and get counts $\endgroup$
    – Neel
    Feb 29 at 17:28

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.