In [1]:
import numpy as np

# Importing standard Qiskit libraries
from qiskit import QuantumCircuit, transpile, execute, Aer, IBMQ
from qiskit.tools.jupyter import *
from qiskit.visualization import *
from ibm_quantum_widgets import *
from qiskit.providers.aer import QasmSimulator
from qiskit.providers.ibmq import least_busy  #Para verificar qual Ă© o QComputer mais disponĂ­vel

# IBMQ.get_provider(hub='ibm-q-education', group='uni-sao-paulo-M', project='Quantum-Informat')

# Loading your IBM Quantum account(s)
provider = IBMQ.load_account()
#provider = IBMQ.get_provider(hub='ibm-q-education', group='uni-sao-paulo-M', project='Quantum-Informat')
#provider = IBMQ.get_provider(hub='ibm-q-education', group='uni-sao-paulo-M', project='qinfo-7600074-21')
In [2]:
# FunĂ§Ă£o para implementar a caixa secreta
def secretBox(secret):
    for k, bit in enumerate(reversed(secret)):
        if bit == '1':
            circ.cx(k,len(secret))
In [18]:
#CĂ³digo secreto
secretNum = '100100'
#secretNum = '00100'
n = len(secretNum)  # nĂºmero de bits
In [19]:
circ = QuantumCircuit(n+1,n)

circ.h(range(n))
circ.x(n)
circ.h(n)
circ.barrier()
secretBox(secretNum)
circ.barrier()
circ.h(range(n))
circ.measure(range(n),range(n))
circ.draw()
Out[19]:
In [14]:
# Rodando o cĂ³digo no simulador
simulador = Aer.get_backend('qasm_simulator')
resultado = execute(circ, backend = simulador, shots = 1).result()
contagem  = resultado.get_counts()

print("Resultado obtido em 1-shot: \n",contagem)
print("CĂ³digo secreto na caixa: \n", secretNum)
Resultado obtido em 1-shot: 
 {'1011': 1}
CĂ³digo secreto na caixa: 
 1011

Testando Bernstein-Vazirani no computador quântico

In [15]:
# Rodando o cĂ³digo em hardware 
hardware = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= (n+1) and not x.configuration().simulator and x.status().operational==True))
print("Backend menos ocupado: ", hardware)

#%qiskit_job_watcher
#job = execute(circ, backend=hardware, shots=1, optimization_level=3)
Backend menos ocupado:  ibmq_quito
In [ ]:
results = job.result()
resposta = results.get_counts()
plot_histogram(resposta)
In [16]:
#Carreganodo um resultado anterior (rodado no 7-qbit hardware Casablanca)
#ATENĂ‡ĂƒO: Este bloco de cĂ³digo sĂ³ vai funcionar na minha conta pessoal (SRM) 
provedor = IBMQ.get_provider(hub='ibm-q-education', group='uni-sao-paulo-M', project='Quantum-Informat')
bck2 = provedor.get_backend('ibmq_casablanca')
old_job = bck2.retrieve_job("61d2968dfa27f646d137ed4e")
old_result = old_job.result()
resposta2 = old_result.get_counts()
plot_histogram(resposta2)
Out[16]:

Rodando num computador Quântico de 7-qbit

Observe, neste caso, como o nĂºmero de erros aumenta significativamente!! (Porque?)

In [20]:
# Rodando num computador de 7-qbit
#device = provider.get_backend('ibmq_casablanca')
provedor = IBMQ.get_provider(hub='ibm-q-education', group='uni-sao-paulo-M', project='Quantum-Informat')
device = provedor.get_backend('ibmq_casablanca')

%qiskit_job_watcher
job = execute(circ, backend=device, shots=100, optimization_level=3)

results = job.result()
resposta = results.get_counts()
plot_histogram(resposta)
Out[20]:
In [ ]: