O código desta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou de versões mais recentes.
qiskit[all]~=2.5.0
Ordenação de bits no Qiskit SDK
Se você tiver um conjunto de bits (ou qubits), geralmente rotulará cada bit como . Diferentes softwares e recursos devem escolher como ordenar esses bits esses bits na memória do computador e quando exibidos na tela.
Convenções Qiskit
Veja como o Qiskit SDK ordena os bits em diferentes cenários.
Circuitos 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 o rótulo do qubit.
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Qubit
qc = QuantumCircuit(2)
qc.qubits[0] # qubit "0"
Qubit(QuantumRegister(2, "q"), 0)Output:
<Qubit register=(2, "q"), index=0>
Diagramas de circuitos
Em um diagrama de circuito, o qubit é o qubit mais alto e o qubit é o qubit mais baixo o qubit mais baixo. Você pode alterar isso com o argumento reverse_bits de QuantumCircuit.draw (consulte Alterar a ordem no Qiskit ).
qc.x(1)
qc.draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Números Inteiros
Ao interpretar os bits como um número, o bit é o bit menos significativo e o o bit é o mais significativo. Isso é útil na codificação porque cada bit tem o valor o valor (o rótulo é 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 número 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()}")Output:
> Counts: {'10': 1024}
Sequências
Ao exibir ou interpretar uma lista de bits (ou qubits) como uma cadeia de caracteres, o bit é o bit mais à esquerda e o bit é o bit mais à direita. Isso ocorre porque normalmente 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 sequência de estados de um único qubit. Nesse caso, o qubit está no estado , e o o qubit no estado .
from qiskit.quantum_info import Statevector
sv = Statevector.from_label("0+")
sv.probabilities_dict()Output:
{np.str_('00'): np.float64(0.4999999999999999),
np.str_('01'): np.float64(0.4999999999999999)}
Isso ocasionalmente causa confusão ao interpretar uma sequência de bits, pois você poderia esperar que o bit mais à esquerda fosse o bit , enquanto ele normalmente representa o bit .
Matrizes vetoriais de estado
Ao representar um vetor de estado como uma lista de números complexos (amplitudes), 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>Output:
(0.7071067811865475+0j)
0j
Portas
Cada porta no Qiskit pode interpretar uma lista de qubits de sua própria maneira, mas as as portas controladas geralmente seguem a convenção (control, target).
Por exemplo, a célula a seguir adiciona uma porta X controlada em que o qubit é o controle e o qubit é o destino o controle e o qubit é o alvo.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()Output:
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
Seguindo todas as convenções mencionadas anteriormente no Qiskit, esse CX-gate realiza a transformação , portanto, tem a matriz a seguir.
Alterar a ordem no Qiskit
Para desenhar um circuito com qubits na ordem inversa (ou seja, o qubit na parte inferior), use o argumento reverse_bits . Isso afeta apenas o diagrama gerado e não afeta o circuito e não afeta o circuito; o X-gate ainda atua no qubit .
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)Output:
q_1: ─────
┌───┐
q_0: ┤ X ├
└───┘
Você pode usar o método reverse_bits para retornar um novo circuito com os rótulos dos rótulos dos qubits invertidos (isso não altera o circuito original).
qc.reverse_bits().draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Observe que, nesse novo circuito, o X-gate atua no qubit .
Próximas etapas
- Veja um exemplo de uso de circuitos no tutorial do Algoritmo de Grover.
- Explore a referência da API QuantumCircuit.