I am trying to obtain the correct circuit transpiled for the ibmq_london device, as I want to know what the real gates applied in the quantum computer are. I am implementing the QFT circuit for 5 qubits. My code is the following one (DAQC and qnoise are modules that I have created but they do not affect the transpilation, they are used to show the pictures or to create initial states):
import numpy as np
from qiskit import QuantumRegister, QuantumCircuit, ClassicalRegister, IBMQ, execute
from qiskit.providers.aer import QasmSimulator
from qiskit.visualization import plot_histogram
from qiskit.compiler import transpile
import DAQC
provider = IBMQ.load_account()
# Get properties and coupling map of the desired device
device = provider.get_backend('ibmq_london')
properties = device.properties()
coupling_map = device.configuration().coupling_map
basis_gates=device.configuration().basis_gates
# Circuit
n=5
beta=0
state=DAQC.initial_state_QFT(n,beta)
qr=QuantumRegister(n)
cr=ClassicalRegister(n)
qc=QuantumCircuit(qr,cr)
qc.initialize(state,qr)
qft(qc,n)
qc.measure(qr,cr)
backend = QasmSimulator()
job = execute(qc, backend=backend,shots=100000)
result_ideal = job.result()
qiskit_counts=result_ideal.get_counts()
qnoise.show_figure(plot_histogram(qiskit_counts, title='Results for qiskit ideal simulator'))
# Transpiled circuit
qr2=QuantumRegister(n)
cr2=ClassicalRegister(n)
qc2=QuantumCircuit(qr2,cr2)
qc2.initialize(state,qr2)
qft(qc2,n)
qc2=transpile(qc2,basis_gates=basis_gates,coupling_map=coupling_map)
qc2.measure(0,0)
qc2.measure(1,1)
qc2.measure(2,2)
qc2.measure(3,3)
qc2.measure(4,4)
job = execute(qc2, backend=backend,shots=100000)
result_ideal = job.result()
qiskit_counts=result_ideal.get_counts()
qnoise.show_figure(plot_histogram(qiskit_counts, title='Results for qiskit ideal simulator (transpiled)'))
The problem is that when I obtain the results, although they should be the same because the circuit is just transpiled, I obtain completely different outcomes:
I think that the problem is with the initialize command, as when I remove it I obtain the same result for both cases. Is it possible to use the initialize command with the transpile one? Is there any other option to obtain the transpiled circuit when it is initialized in a concrete state?
Thank you