0
$\begingroup$

I checked this code multiple times, I am trying to reproduce the same code using Grover's algorithm from qiskit summerschool:

 import numpy as np
 from qiskit import IBMQ, QuantumCircuit, Aer, execute
 from qiskit.quantum_info import Operator
 from qiskit.providers.ibmq import least_busy
 from qiskit.visualization import plot_histogram
 from qiskit.tools.jupyter import *
 provider = IBMQ.load_account()

def phase_oracle(n, indices_to_mark, name='Oracle'):
qc = QuantumCircuit(n, name=name)
oracle_matrix = np.identity(2**n)
for index_to_mark in indices_to_mark:
    oracle_matrix[index_to_mark, index_to_mark]= -1
qc.unitary(operator(oracle_matrix), range(n))
return qc

def diffuser(n):
qc=QuantumCircuit(n,name='Diff - "V"')
qc.h(range(n))
qc.append(phase_oracle(n,[0]),range(n))
qc.h(range(n))
return qc

def Grover(n, marked):
qc=QuantumCircuit(n,n)
r = int(np.round(np.pi/
(4*np.arcsin(np.sqrt(len(marked)/2**n)))-1/2))
print(f'{n} qubits, basis state {marked} marked, {r} 
rounds')
qc.h(range(n))
for _ in range(r):
    qc.append(phase_oracle(n,marked),range(n))
    qc.append(diffuser(n),range(n))
qc.measure(range(n),range(n))
return qc

n = 5
x = np.random.randint(2**n)
marked = [x]
qc = Grover(n, marked)

qc.draw()

I get the name operator error which I cannot figure out the reason:

 NameError                                 Traceback 
(most recent call last)
 <ipython-input-22-96635782dc30> in <module>
  2 x = np.random.randint(2**n)
  3 marked = [x]
  ----> 4 qc = Grover(n, marked)
  5 
  6 qc.draw()

 <ipython-input-20-f14e47e0af5d> in Grover(n, marked)
 20     qc.h(range(n))
 21     for _ in range(r):
  ---> 22         
 qc.append(phase_oracle(n,marked),range(n))
 23         qc.append(diffuser(n),range(n))
 24     qc.measure(range(n),range(n))

  <ipython-input-20-f14e47e0af5d> in phase_oracle(n, 
  indices_to_mark, name)
  4     for index_to_mark in indices_to_mark:
  5         oracle_matrix[index_to_mark, 
  index_to_mark]= -1
   ----> 6     qc.unitary(operator(oracle_matrix), 
   range(n))
  7     return qc
  8 

NameError: name 'operator' is not defined. Can anybody help me woth this?

$\endgroup$
1
$\begingroup$

That is because on line 14 of your program, you wrote:

qc.unitary(operator(oracle_matrix), range(n))

when it should be:

qc.unitary(Operator(oracle_matrix), range(n))

You should have capitalized the O in operator. Changing that, I get the following output when executed your code:

5 qubits, basis state [15] marked, 4 rounds
     ┌───┐┌─────────┐┌─────────────┐┌─────────┐┌─────────────┐┌─────────┐»
q_0: ┤ H ├┤0        ├┤0            ├┤0        ├┤0            ├┤0        ├»
     ├───┤│         ││             ││         ││             ││         │»
q_1: ┤ H ├┤1        ├┤1            ├┤1        ├┤1            ├┤1        ├»
     ├───┤│         ││             ││         ││             ││         │»
q_2: ┤ H ├┤2 Oracle ├┤2 Diff - "V" ├┤2 Oracle ├┤2 Diff - "V" ├┤2 Oracle ├»
     ├───┤│         ││             ││         ││             ││         │»
q_3: ┤ H ├┤3        ├┤3            ├┤3        ├┤3            ├┤3        ├»
     ├───┤│         ││             ││         ││             ││         │»
q_4: ┤ H ├┤4        ├┤4            ├┤4        ├┤4            ├┤4        ├»
     └───┘└─────────┘└─────────────┘└─────────┘└─────────────┘└─────────┘»
c: 5/════════════════════════════════════════════════════════════════════»
                                                                         »
«     ┌─────────────┐┌─────────┐┌─────────────┐┌─┐            
«q_0: ┤0            ├┤0        ├┤0            ├┤M├────────────
«     │             ││         ││             │└╥┘┌─┐         
«q_1: ┤1            ├┤1        ├┤1            ├─╫─┤M├─────────
«     │             ││         ││             │ ║ └╥┘┌─┐      
«q_2: ┤2 Diff - "V" ├┤2 Oracle ├┤2 Diff - "V" ├─╫──╫─┤M├──────
«     │             ││         ││             │ ║  ║ └╥┘┌─┐   
«q_3: ┤3            ├┤3        ├┤3            ├─╫──╫──╫─┤M├───
«     │             ││         ││             │ ║  ║  ║ └╥┘┌─┐
«q_4: ┤4            ├┤4        ├┤4            ├─╫──╫──╫──╫─┤M├
«     └─────────────┘└─────────┘└─────────────┘ ║  ║  ║  ║ └╥┘
«c: 5/══════════════════════════════════════════╩══╩══╩══╩══╩═
«                                               0  1  2  3  4 
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.