Ordenação de bits no Qiskit SDK
Versões dos pacotes
O código nesta página foi desenvolvido usando os seguintes requisitos. Recomendamos usar essas versões ou mais recentes.
qiskit[all]~=2.3.0
Se você tem um conjunto de bits (ou qubits), normalmente vai rotular cada bit de . Diferentes softwares e recursos precisam escolher como ordenar esses bits tanto na memória do computador quanto quando exibidos na tela.
Convenções do Qiskit
Veja como o Qiskit SDK ordena os bits em diferentes cenários.
Circuits quânticos
A classe QuantumCircuit armazena seus qubits em uma lista
(QuantumCircuit.qubits). O índice de um qubit nessa lista define o
rótulo do qubit.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Qubit
qc = QuantumCircuit(2)
qc.qubits[0] # qubit "0"
Qubit(QuantumRegister(2, "q"), 0)
<Qubit register=(2, "q"), index=0>
Diagramas de circuito
Em um diagrama de circuito, o qubit é o qubit mais ao topo e o qubit é o
mais abaixo. Você pode alterar isso com o argumento reverse_bits de
QuantumCircuit.draw (veja Alterar a ordenação no
Qiskit).
qc.x(1)
qc.draw()
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Inteiros
Ao interpretar bits como um número, o bit é o bit menos significativo e o
bit é o mais significativo. Isso é útil na programação porque cada bit tem
o valor (label sendo o índice do qubit em
QuantumCircuit.qubits). Por exemplo, a execução do circuito a seguir termina
com o bit sendo 0 e o bit sendo 1. Isso é interpretado como o
inteiro decimal 2 (medido com probabilidade 1.0).
from qiskit.primitives import StatevectorSampler as Sampler
qc.measure_all()
job = Sampler().run([qc])
result = job.result()
print(f" > Counts: {result[0].data.meas.get_counts()}")
> Counts: {'10': 1024}
Strings
Ao exibir ou interpretar uma lista de bits (ou qubits) como uma string, o bit é o bit mais à esquerda e o bit é o mais à direita. Isso ocorre porque geralmente escrevemos números com o dígito mais significativo à esquerda e, no Qiskit, o bit é interpretado como o bit mais significativo.
Por exemplo, a célula a seguir define um Statevector a partir de uma string de
estados de qubit único. Nesse caso, o qubit está no estado e o
qubit no estado .
from qiskit.quantum_info import Statevector
sv = Statevector.from_label("0+")
sv.probabilities_dict()
{np.str_('00'): np.float64(0.4999999999999999),
np.str_('01'): np.float64(0.4999999999999999)}
Isso às vezes gera confusão ao interpretar uma string de bits, pois você pode esperar que o bit mais à esquerda seja o bit , enquanto ele geralmente representa o bit .
Matrizes de vetor de estado
Ao representar um vetor de estado como uma lista de números complexos (amplitudes), o Qiskit ordena essas amplitudes de modo que a amplitude no índice represente o estado da base computacional .
print(sv[1]) # amplitude of state |01>
print(sv[2]) # amplitude of state |10>
(0.7071067811865475+0j)
0j
Gates
Cada Gate no Qiskit pode interpretar uma lista de qubits à sua própria maneira, mas
gates controlados geralmente seguem a convenção (control, target).
Por exemplo, a célula a seguir adiciona um gate controlled-X onde o qubit é o controle e o qubit é o alvo.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
Seguindo todas as convenções mencionadas anteriormente no Qiskit, este gate CX realiza a transformação , portanto tem a seguinte matriz.
Alterar a ordenação no Qiskit
Para desenhar um Circuit com qubits em ordem invertida (ou seja, qubit na
parte inferior), use o argumento reverse_bits. Isso afeta apenas o diagrama
gerado e não o circuito em si; o gate X ainda age sobre o qubit .
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)
q_1: ─────
┌───┐
q_0: ┤ X ├
└───┘
Você pode usar o método reverse_bits para retornar um novo circuito com os
rótulos dos qubits invertidos (isso não modifica o circuito original).
qc.reverse_bits().draw()
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Observe que neste novo circuito, o gate X age sobre o qubit .
Próximos passos
- Veja um exemplo de uso de circuitos no tutorial Algoritmo de Grover.
- Explore a referência da API do QuantumCircuit.