Biblioteca de circuitos
qiskit.circuit.library
A biblioteca de circuitos é uma coleção de circuitos e blocos de construção valiosos. Nós os chamamos de valiosos por diferentes motivos. Por exemplo, eles podem ser usados como blocos de construção para algoritmos, servir como padrões de referência ou são circuitos que se supõe serem difíceis de simular classicamente.
Os elementos na biblioteca de circuitos são QuantumCircuits ou Instructions, o que permite que eles sejam facilmente investigados ou conectados a outros circuitos. Isso permite a prototipagem rápida e o projeto de circuitos em níveis mais altos de abstração.
Por exemplo:
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import PauliEvolutionGate
from qiskit.quantum_info import SparsePauliOp
hamiltonian = SparsePauliOp(["ZZI", "IZZ", "IXI"], coeffs=[1, 1, -1])
gate = PauliEvolutionGate(hamiltonian)
circuit = QuantumCircuit(hamiltonian.num_qubits)
circuit.append(gate, circuit.qubits)
circuit.draw("mpl")
Essa biblioteca está organizada em diferentes seções:
Fazemos distinção entre diferentes categorias de operações:
Portões padrão
Essas são portas quânticas fundamentais, um subconjunto das quais normalmente forma um conjunto de portas de base em um computador quântico. Essas são operações unitárias representadas como Gate. A biblioteca também fornece diretivas de compilador padrão (a Barrier) e operações não unitárias (como Measure).
Operações abstratas
Essa categoria inclui operações que são definidas por uma ação matemática, mas que podem ser implementadas com diferentes decomposições. Por exemplo, um circuito multicontrolado XGate inverte o qubit de destino se todos os qubits de controle forem , e há uma variedade de circuitos concretos que implementam essa operação usando portas de nível inferior. Essas operações abstratas são representadas como Gate ou Instruction. Isso permite construir o circuito sem escolher uma implementação concreta de cada bloco e, por fim, deixar que o compilador (ou você como usuário) escolha a decomposição ideal. Por exemplo:
from qiskit.circuit.library import MCXGate
mcx = MCXGate(4)
from qiskit import QuantumCircuit
circuit = QuantumCircuit(5)
circuit.append(mcx, [0, 1, 4, 2, 3])
circuit.draw("mpl")
Para circuitos com operações abstratas, o contexto do circuito é levado em conta durante a transpilação. Por exemplo, se houver qubits ociosos disponíveis, eles poderão ser usados para obter um circuito mais raso:
from qiskit import transpile
small_circuit = QuantumCircuit(5) # here we have no idle qubits
small_circuit.append(mcx, [0, 1, 4, 2, 3])
small_tqc = transpile(small_circuit, basis_gates=["u", "cx"])
print("No aux:", small_tqc.count_ops())
large_circuit = QuantumCircuit(10) # now we will have 5 idle qubits
large_circuit.append(mcx, [0, 1, 4, 2, 3])
large_tqc = transpile(large_circuit, basis_gates=["u", "cx"])
print("With aux:", large_tqc.count_ops())Que imprime:
No aux: OrderedDict([('u', 41), ('cx', 36)])
With aux: OrderedDict([('u', 24), ('cx', 18)])Operações estruturais
Essas operações têm uma decomposição única. Como o compilador não precisa raciocinar sobre eles em um nível mais alto, eles são implementados como funções que retornam um objeto QuantumCircuit objeto. Por exemplo:
from qiskit.circuit.library import real_amplitudes
ansatz = real_amplitudes(5, entanglement="pairwise")
ansatz.draw("mpl")
Portões padrão
Essas operações são portas unitárias reversíveis e todas elas são da subclasse Gate. Como consequência, todos eles têm os métodos to_matrix(), power(), e control()que geralmente só podem ser aplicados a operações unitárias.
Por exemplo:
from qiskit.circuit.library import XGate
gate = XGate()
print(gate.to_matrix()) # X gate
print(gate.power(1/2).to_matrix()) # √X gate -- see also the SXGate
print(gate.control(1).to_matrix()) # CX (controlled X) gate[[0.+0.j 1.+0.j]
[1.+0.j 0.+0.j]]
[[0.5+0.5j 0.5-0.5j]
[0.5-0.5j 0.5+0.5j]]
[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]
[0.+0.j 0.+0.j 0.+0.j 1.+0.j]
[0.+0.j 0.+0.j 1.+0.j 0.+0.j]
[0.+0.j 1.+0.j 0.+0.j 0.+0.j]]A função get_standard_gate_name_mapping() permite que você veja as portas e operações padrão disponíveis.
get_standard_gate_name_mapping
qiskit.circuit.library.get_standard_gate_name_mapping()
Retorna um dicionário que mapeia o nome de portas e instruções padrão para um objeto com esse nome.
Exemplos
from qiskit.circuit.library import get_standard_gate_name_mapping
gate_name_map = get_standard_gate_name_mapping()
cx_object = gate_name_map["cx"]
print(cx_object)
print(type(cx_object))Instruction(name='cx', num_qubits=2, num_clbits=0, params=[])
_SingletonCXGatePortas padrão de 1 qubit
HGate(*args[, _force_mutable] ) | Porta Hadamard de um único qubit. |
IGate(*args[, _force_mutable] ) | Porta de identidade. |
PhaseGate(theta[, rótulo] ) | Rotação de um único qubit em torno do eixo Z. |
RGate(theta, phi[, label] ) | Rotação em torno do eixo . |
RXGate(theta[, rótulo] ) | Rotação de um único qubit em torno do eixo X. |
RYGate(theta[, rótulo] ) | Rotação de um único qubit em torno do eixo Y. |
RZGate(phi[, rótulo] ) | Rotação de um único qubit em torno do eixo Z. |
SGate(*args[, _force_mutable] ) | Porta S de um único qubit ( ). |
SdgGate(*args[, _force_mutable] ) | Porta S-adjunta de um único qubit ( ). |
SXGate(*args[, _force_mutable] ) | A porta Sqrt(X) de um único qubit ( ). |
SXdgGate(*args[, _force_mutable] ) | O portão inverso de um único qubit Sqrt(X). |
TGate(*args[, _force_mutable] ) | Porta T de um único qubit ( ). |
TdgGate(*args[, _force_mutable] ) | Porta T-adjunta de um único qubit ( ). |
UGate(theta, phi, lam[, label] ) | Rotação genérica de um único qubit em termos de ângulos de Euler ZYZ. |
U1Gate(theta[, rótulo] ) | Rotação de um único qubit em torno do eixo Z. |
U2Gate(phi, lam[, label] ) | Rotação de um único qubit em torno do eixo X+Z. |
U3Gate(theta, phi, lam[, label] ) | Porta de rotação genérica de um único qubit com 3 ângulos de Euler. |
XGate(*args[, _force_mutable] ) | A porta Pauli-X de um único qubit ( ). |
YGate(*args[, _force_mutable] ) | A porta Pauli-Y de um único qubit ( ). |
ZGate(*args[, _force_mutable] ) | A porta Pauli-Z de um único qubit ( ). |
Portas padrão de 2 qubits
CHGate(*args[, _force_mutable] ) | Porta de Hadamard controlada. |
CPhaseGate(theta[, label, ctrl_state,...] ) | Porta de fase controlada. |
CRXGate(theta[, rótulo, ctrl_state, _base_label] ) | Porta RX controlada. |
CRYGate(theta[, rótulo, ctrl_state, _base_label] ) | Porta RY controlada. |
CRZGate(theta[, rótulo, ctrl_state, _base_label] ) | Porta RZ controlada. |
CSGate(*args[, _force_mutable] ) | Porta S controlada. |
CSdgGate(*args[, _force_mutable] ) | Porta controlada por . |
CSXGate(*args[, _force_mutable] ) | Porta controlada-√X. |
CUGate(theta, phi, lam, gamma[, label,...] ) | Porta U controlada (porta de dois qubits de 4 parâmetros). |
CU1Gate(theta[, rótulo, ctrl_state, _base_label] ) | Controlled-U1 portão. |
CU3Gate(theta, phi, lam[, label,...] ) | Controlled-U3 (porta de dois qubits de 3 parâmetros). |
CXGate(*args[, _force_mutable] ) | Porta X controlada. |
CYGate(*args[, _force_mutable] ) | Porta Y controlada. |
CZGate(*args[, _force_mutable] ) | Porta-Z controlada. |
DCXGate(*args[, _force_mutable] ) | Porta dupla CX. |
ECRGate(*args[, _force_mutable] ) | Uma porta de ressonância cruzada ecoada. |
iSwapGate(*args[, _force_mutable] ) | iSWAP portão. |
RXXGate(theta[, rótulo] ) | Uma interação paramétrica de 2 qubits (rotação sobre XX). |
RYYGate(theta[, rótulo] ) | Uma interação paramétrica de 2 qubits (rotação em torno de YY). |
RZXGate(theta[, rótulo] ) | Uma interação paramétrica de 2 qubits (rotação em torno de ZX). |
RZZGate(theta[, rótulo] ) | Uma interação paramétrica de 2 qubits (rotação em torno de ZZ). |
SwapGate(*args[, _force_mutable] ) | O portão SWAP. |
XXMinusYYGate(theta[, beta, rótulo] ) | Porta de interação XX-YY. |
XXPlusYYGate(theta[, beta, rótulo] ) | Porta de interação XX+YY. |
Portas padrão de 3+ qubits
C3SXGate(*args[, _force_mutable] ) | A porta sqrt-X controlada por 3 qubits. |
C3XGate(*args[, _force_mutable] ) | A porta X é controlada por 3 qubits. |
C4XGate(*args[, _force_mutable] ) | A porta X controlada por 4 qubits. |
CCXGate(*args[, _force_mutable] ) | Porta CCX, também conhecida como porta Toffoli. |
CCZGate(*args[, _force_mutable] ) | Portão CCZ. |
CSwapGate(*args[, _force_mutable] ) | Porta SWAP controlada, também conhecida como porta Fredkin. |
RCCXGate(*args[, _force_mutable] ) | O portão Toffoli simplificado, também conhecido como portão Margolus. |
RC3XGate(*args[, _force_mutable] ) | A porta Toffoli simplificada com 3 controles. |
Portões padrão globais
A porta a seguir é global e não recebe nenhum argumento de qubit.
GlobalPhaseGate(fase[, rótulo] ) | A porta de fase global ( ). |
Diretivas padrão
As diretivas são operações na pilha quântica que devem ser interpretadas pelo backend ou pelo transpilador. Em geral, o transpilador ou backend pode opcionalmente ignorá-los se não houver implementação para eles.
Operações padrão
As operações são alterações não reversíveis no estado quântico do circuito.
Além disso Measure, existe uma medição conjunta de Pauli generalizada disponível, usada como operação básica na computação baseada em Pauli.
PauliProductMeasurement(pauli[, rótulo] ) | Instruções de medição do produto Pauli. |
Portas generalizadas
Esse módulo amplia as portas padrão com uma coleção mais ampla de portas básicas. Isso inclui portas que são variadas, o que significa que o número de qubits depende da entrada. Por exemplo:
from qiskit.circuit.library import DiagonalGate
diagonal = DiagonalGate([1, 1j])
print(diagonal.num_qubits)
diagonal = DiagonalGate([1, 1, 1, -1])
print(diagonal.num_qubits)que imprime:
1
2DiagonalGate(diag) | Uma porta quântica diagonal genérica. |
PermutationGate(padrão) | Uma porta que permuta qubits. |
MCMTGate(gate, num_ctrl_qubits,...[,.]..) | A porta multialvo multicontrolada, para uma porta alvo arbitrária controlada individualmente. |
MCPhaseGate(lam, num_ctrl_qubits[, label,...] ) | Porta de fase multicontrolada. |
MCXGate([num_ctrl_qubits, rótulo,...] ) | A porta X geral e multicontrolada. |
MSGate(num_qubits, theta[, rótulo] ) | O portão Mølmer-Sørensen. |
RVGate(v_x, v_y, v_z[, base] ) | Rotação em torno de um eixo de rotação arbitrário onde é o ângulo de rotação em radianos. |
PauliGate(etiqueta) | Uma porta Pauli de vários qubits. |
PauliProductRotationGate(pauli, ângulo[, rótulo] ) | Uma rotação de Pauli genérica. |
LinearFunction(linear[, validate_input] ) | Um circuito linear reversível em n qubits. |
Isometry(isometria, num_ancillas_zero,...[,.]..) | Decomposição de isometrias arbitrárias de a qubits. |
UnitaryGate(dados[, rótulo, check_input,...] ) | Classe para portas quânticas especificadas por uma matriz unitária. |
UCGate(gate_list[, up_to_diagonal, mux_simp] ) | Porta uniformemente controlada (também chamada de porta multiplexada). |
UCPauliRotGate(angle_list, rot_axis) | Rotações de Pauli com controle uniforme. |
UCRXGate(ângulo\lista) | Rotações Pauli-X com controle uniforme. |
UCRYGate(ângulo\lista) | Rotações Pauli-Y com controle uniforme. |
UCRZGate(ângulo\lista) | Rotações Pauli-Z com controle uniforme. |
Os objetos acima derivam Gate ou Instructiono que permite que o compilador raciocine sobre eles em um nível abstrato. Portanto, sugerimos usá-los em vez dos seguintes, que derivam QuantumCircuit e são construídos com muita pressa.
Diagonal(diag) | Circuito que implementa uma transformação diagonal. |
MCMT(gate, num_ctrl_qubits, num_target_qubits) | A porta multialvo multicontrolada, para uma porta alvo arbitrária controlada individualmente. |
MCMTVChain(gate, num_ctrl_qubits,...) | A implementação do MCMT usando a cadeia em V do CCX. |
MCXGrayCode([num_ctrl_qubits, rótulo,...] ) | Implemente a porta X multicontrolada usando o código Gray. |
MCXRecursive([num_ctrl_qubits, rótulo,...] ) | Implemente a porta X multicontrolada usando recursão. |
MCXVChain([num_ctrl_qubits, dirty_ancillas,...] ) | Implemente a porta X multicontrolada usando uma cadeia V de portas CX. |
Permutation(num_qubits[, padrão, semente] ) | Um circuito n_qubit que permuta qubits. |
GMS(num_qubits, theta) | Portão global Mølmer-Sørensen. |
GR(num_qubits, theta, phi) | Portão R global. |
GRX(num_qubits, theta) | Portão RX global. |
GRY(num_qubits, theta) | Portão global RY. |
GRZ(num_qubits, phi) | Porta RZ global. |
Lógica Booleana
Esses Gates implementam operações de lógica booleana, como a or lógica de um conjunto de estados de qubit.
AndGate(num_variable_qubits[, sinalizadores] ) | Uma porta que representa a operação lógica AND em um número de qubits. |
OrGate(num_variable_qubits[, sinalizadores] ) | Uma porta que representa a operação lógica OR em um número de qubits. |
BitwiseXorGate(num_qubits, amount) | Uma porta de n qubits para fazer o xor de bits na entrada com algum número inteiro amount. |
InnerProductGate(num_qubits) | Uma função booleana 2n-qubit que calcula o produto interno de dois vetores de n-qubit em . |
Os objetos acima derivam Gate (ou retornam esse tipo), o que permite que o compilador raciocine sobre eles em um nível abstrato. Portanto, sugerimos usá-los em vez dos seguintes, que derivam QuantumCircuit e que são construídos com muita pressa.
AND(num_variable_qubits[, sinalizadores, mcx_mode] ) | Um circuito que implementa a operação lógica AND em um número de qubits. |
OR(num_variable_qubits[, sinalizadores, mcx_mode] ) | Um circuito que implementa a operação lógica OR em um número de qubits. |
XOR(num_qubits[, quantidade, semente] ) | Um circuito n_qubit para xoragem bit a bit da entrada com algum número inteiro amount. |
InnerProduct(num_qubits) | Uma função booleana 2n-qubit que calcula o produto interno de dois vetores de n-qubit em . |
Um circuito aleatório bit a bit xor pode ser gerado diretamente usando:
random_bitwise_xor(num_qubits, seed) | Crie um BitwiseXorGate aleatório. |
Alteração da base
Essas portas realizam transformações de base dos estados do qubit. Por exemplo, no caso da Transformada Quântica de Fourier (QFT), ela se transforma entre a base computacional e a base de Fourier.
QFTGate(num_qubits) | Porta de transformação quântica de Fourier. |
O objeto acima deriva de Gateo que permite que o compilador raciocine sobre ele em um nível abstrato. Por isso, sugerimos usar essa opção em vez da seguinte, que deriva QuantumCircuit e é construído de forma ágil.
QFT([num_qubits, aproximação_grau,...] ) | Circuito de transformação quântica de Fourier. |
Aritmético
Essas portas e circuitos executam a aritmética clássica, como adição ou multiplicação.
Víbora
Os somadores calculam a soma de dois registros -qubit, ou seja
em que o tamanho do registro de saída depende do tipo de somador usado.
ModularAdderGate(num_state_qubits[, rótulo] ) | Calcule o módulo de soma de dois registros de qubit de tamanho . |
HalfAdderGate(num_state_qubits[, rótulo] ) | Calcule a soma de dois registros de qubit de tamanho igual, incluindo um bit de carry-out. |
FullAdderGate(num_state_qubits[, rótulo] ) | Calcule a soma de dois registros de qubit de tamanho , incluindo bits de entrada e saída. |
Os objetos acima derivam de Gateo que permite que o compilador raciocine sobre eles em um nível abstrato. Portanto, sugerimos usá-los em vez dos seguintes, que derivam QuantumCircuit e que são construídos com muita pressa.
DraperQFTAdder(num_state_qubits[, kind, name] ) | Um circuito que usa QFT para realizar a adição no local em dois registros de qubit. |
CDKMRippleCarryAdder(num_state_qubits[,...] ) | Um circuito de transporte de ondulação para realizar a adição no local em dois registros de qubit. |
VBERippleCarryAdder(num_state_qubits[,...] ) | O somador de transporte de ondulação VBE [1]. |
multiplicadores
Os multiplicadores calculam o produto de dois registros de -qubit, ou seja
em que é o número de bits usados para representar o resultado.
MultiplierGate(num_state_qubits[,...] ) | Calcule o produto de dois registros de qubit de tamanho igual em um novo registro. |
O objeto acima deriva de Gateo que permite que o compilador raciocine sobre ele em um nível abstrato. Sugerimos, portanto, o uso dessa opção em vez das seguintes, que derivam QuantumCircuit e são construídos com entusiasmo.
HRSCumulativeMultiplier(num_state_qubits[,...] ) | Um circuito de multiplicação para armazenar o produto de dois registros de entrada fora do lugar. |
RGQFTMultiplier(num_state_qubits[,...] ) | Um circuito de multiplicação QFT para armazenar o produto de dois registros de entrada fora do lugar. |
Funções de amplitude
Uma função de amplitude se aproxima de uma função aplicada às amplitudes dos qubits. Consulte a documentação da classe para obter informações mais detalhadas.
LinearAmplitudeFunctionGate(...[, ...]) | Um circuito que implementa uma função linear (por partes) em amplitudes de qubit. |
O objeto acima deriva de Gateo que permite que o compilador raciocine sobre ele em um nível abstrato. Por isso, sugerimos usar essa opção em vez da seguinte, que deriva QuantumCircuit e é construído de forma ágil.
LinearAmplitudeFunction(num_state_qubits,...) | Um circuito que implementa uma função linear (por partes) em amplitudes de qubit. |
Rotações funcionais de Pauli
As rotações funcionais de Pauli implementam operações da forma
usando as rotações de Pauli- para diferentes tipos de funções , como linear, polinomial ou uma versão parcial dessas funções. Elas são semelhantes às funções de amplitude acima, mas sem pré e pós-processamento para o domínio e a imagem da função de destino.
LinearPauliRotationsGate(num_state_qubits[,...] ) | Rotação X, Y ou Z com controle linear. |
PolynomialPauliRotationsGate(num_estado_qubits) | Uma porta que implementa rotações polinomiais de Pauli. |
PiecewiseLinearPauliRotationsGate([...]) | Rotações de Pauli com controle linear por partes. |
PiecewisePolynomialPauliRotationsGate(...[, ...]) | Rotações de Pauli com controle polinomial por partes. |
PiecewiseChebyshevGate(f_x, num_state_qubits) | Aproximação de Chebyshev por partes para uma função de entrada. |
Os objetos acima derivam de Gateo que permite que o compilador raciocine sobre eles em um nível abstrato. Portanto, sugerimos usá-los em vez dos seguintes, que derivam QuantumCircuit e que são construídos com muita pressa.
FunctionalPauliRotations([num_state_qubits,...] ) | Classe básica para rotações funcionais de Pauli. |
LinearPauliRotations([num_state_qubits,...] ) | Rotação X, Y ou Z com controle linear. |
PolynomialPauliRotations([num_state_qubits,...] ) | Um circuito que implementa rotações polinomiais de Pauli. |
PiecewiseLinearPauliRotations([...]) | Rotações de Pauli com controle linear por partes. |
PiecewisePolynomialPauliRotations([...]) | Rotações de Pauli com controle polinomial por partes. |
PiecewiseChebyshev(f_x[, grau,...] ) | Aproximação de Chebyshev por partes para uma função de entrada. |
Outras funções aritméticas
Aqui listamos outros circuitos aritméticos. Consulte as documentações de cada classe para obter mais detalhes.
ExactReciprocalGate(num_state_qubits, dimensionamento) | Implementa uma função recíproca exata. |
IntegerComparatorGate(num_state_qubits, valor) | Execute um (ou ) em um registro de qubit em relação a um número inteiro clássico. |
QuadraticFormGate([num_resultado_qubits,...] ) | Implementa uma forma quadrática em variáveis binárias codificadas em registros de qubit. |
WeightedSumGate(num_state_qubits[, pesos,...] ) | Uma porta para computar a soma ponderada de registros de qubit. |
Os objetos acima derivam de Gateo que permite que o compilador raciocine sobre eles em um nível abstrato. Portanto, sugerimos usá-los em vez dos seguintes, que derivam QuantumCircuit e que são construídos com muita pressa.
ExactReciprocal(num_state_qubits, dimensionamento[,...] ) | Recíproco exato |
IntegerComparator([num_state_qubits, valor,...] ) | Comparador de números inteiros. |
QuadraticForm([num_resultado_qubits,...] ) | Implementa uma forma quadrática em variáveis binárias codificadas em registros de qubit. |
WeightedAdder([num_state_qubits, pesos, nome] ) | Um circuito para computar a soma ponderada de registros de qubit. |
Circuitos Quânticos Específicos
As portas e os circuitos quânticos a seguir definem operações específicas de interesse:
fourier_checking(f, g) | Circuito de verificação de Fourier. |
hidden_linear_function(matriz de adjacência) | Circuito para resolver o problema da função linear oculta. |
iqp(interações) | Circuito de tempo polinomial quântico instantâneo (IQP). |
random_iqp(num_qubits[, seed] ) | Um circuito polinomial quântico instantâneo aleatório de tempo polinomial (IQP). |
quantum_volume(num_qubits[, profundidade, semente] ) | Um circuito de modelo de volume quântico. |
phase_estimation(num_evaluation_qubits, unitário) | Circuito de estimativa de fase. |
grover_operator(oracle[, state_preparation,...] ) | Construa o operador de Grover. |
unitary_overlap(unitary1, unitary2[, ...]) | Circuito que retorna a sobreposição entre duas unidades . |
GraphStateGate(matriz de adjacência) | Uma porta que representa um estado de gráfico. |
PauliEvolutionGate(operador[, hora, rótulo,...] ) | Evolução temporal de um operador que consiste em Paulis. |
HamiltonianGate(dados, tempo[, rótulo] ) | Classe para representar a evolução por um operador hamiltoniano como um portão. |
Abaixo, fornecemos as mesmas operações que as classes derivadas de QuantumCircuit. Entretanto, para melhorar o desempenho do compilador e do tempo de execução, sugerimos o uso das funções e portas acima.
FourierChecking(f, g) | Circuito de verificação de Fourier. |
GraphState(matriz de adjacência) | Circuito para preparar um estado de gráfico. |
HiddenLinearFunction(matriz de adjacência) | Circuito para resolver o problema da função linear oculta. |
IQP(interações) | Circuito polinomial quântico instantâneo (IQP). |
QuantumVolume(num_qubits[, profundidade, semente,...] ) | Um circuito de modelo de volume quântico. |
PhaseEstimation(num_evaluation_qubits, unitário) | Circuito de estimativa de fase. |
GroverOperator(oracle[, state_preparation,...] ) | O operador Grover. |
UnitaryOverlap(unitary1, unitary2[, ...]) | Circuito que retorna a sobreposição entre duas unidades . |
Circuitos locais N
As funções a seguir retornam um parâmetro QuantumCircuit parametrizado para ser usado como ansatz em um amplo conjunto de algoritmos quânticos variacionais.
Por exemplo, podemos criar um circuito variacional
from qiskit.circuit.library import efficient_su2
num_qubits = 4
ansatz = efficient_su2(num_qubits, entanglement="pairwise")
ansatz.draw("mpl")
e combiná-lo com
from qiskit.circuit.library import zz_feature_map
circuit = zz_feature_map(num_qubits)
circuit.barrier()
circuit.compose(ansatz, inplace=True)
circuit.draw("mpl")
para obter um circuito para classificação quântica variacional.
Todas as funções a seguir constroem circuitos variacionais e são otimizadas para uma construção rápida:
n_local(num_qubits, rotation_blocks,...[,.]..) | Construa um circuito variacional n-local. |
efficient_su2(número_qubits [, su2_gates,...] ) | O circuito 2-local eficiente em termos de hardware. |
real_amplitudes(num_qubits[, emaranhamento,...] ) | Construa um circuito 2-local de amplitudes reais. |
pauli_two_design(num_qubits[, reps, seed,...] ) | Construa um ansatz de projeto Pauli 2. |
excitation_preserving(num_qubits[, mode,...] ) | O ansatz da função de onda com preservação da excitação heurística. |
qaoa_ansatz(cost_operator[, reps,...] ) | Um circuito quântico QAOA generalizado com suporte de estados iniciais e misturadores personalizados. |
hamiltonian_variational_ansatz(hamiltoniano) | Construa um ansatz variacional hamiltoniano. |
evolved_operator_ansatz(operadores[, representantes,...] ) | Construa um ansatz a partir de evoluções de operadores. |
Embora sugiramos o uso das funções acima, também continuamos a apoiar as seguintes BlueprintCircuit, que envolvem os circuitos em um bloco e permitem mutações no local dos circuitos:
NLocal([num_qubits, rotation_blocks,...] ) | A classe de circuito n-local. |
TwoLocal([num_qubits, rotation_blocks,...] ) | O circuito de dois locais. |
PauliTwoDesign([num_qubits, reps, seed,...] ) | O ansatz de Pauli Two-Design. |
RealAmplitudes([num_qubits, emaranhamento,...] ) | O circuito de 2 locais de amplitudes reais. |
EfficientSU2( [num_qubits, su2_gates,...] ) | O circuito SU(2) 2-local eficiente em termos de hardware. |
EvolvedOperatorAnsatz([operadores, representantes,...] ) | O operador evoluído ansatz. |
ExcitationPreserving([num_qubits, mode,...] ) | O ansatz da função de onda com preservação da excitação heurística. |
QAOAAnsatz([cost_operator, reps,...] ) | Um circuito quântico QAOA generalizado com suporte de estados iniciais e misturadores personalizados. |
Circuitos de codificação de dados
As funções a seguir retornam um parâmetro QuantumCircuit parametrizado para ser usado como circuitos de codificação de dados em uma série de algoritmos quânticos variacionais:
pauli_feature_map(feature_dimension[, reps,...] ) | O circuito de expansão de Pauli. |
z_feature_map(feature_dimension[, reps,...] ) | O circuito Pauli Z-evolution de primeira ordem. |
zz_feature_map(feature_dimension[, reps,...] ) | Circuito de evolução Pauli-Z de segunda ordem. |
Embora sugiramos o uso das funções acima, também continuamos a apoiar as seguintes BlueprintCircuit, que envolvem os circuitos em um bloco e permitem mutações no local dos circuitos:
PauliFeatureMap([feature_dimension, reps,...] ) | O circuito de expansão de Pauli. |
ZFeatureMap(feature_dimension[, reps,...] ) | O circuito Pauli Z-evolution de primeira ordem. |
ZZFeatureMap(feature_dimension[, reps,...] ) | Circuito de evolução Pauli-Z de segunda ordem. |
Circuitos de preparação de dados
As operações a seguir são usadas para a preparação do estado:
StatePreparation(params[, num_qubits,...] ) | Preparação de estado de amplitude complexa. |
Initialize(params[, num_qubits, normalize] ) | Inicialização de amplitude complexa. |
Oráculos
Um "oráculo" pode se referir a uma variedade de operações de caixa preta em estados quânticos. Aqui, consideramos oráculos que implementam funções booleanas por meio de mudanças de fase
ou bit-flips
Eles são implementados em
PhaseOracleGate(expressão[, var_ordem, rótulo] ) | Implementa um oráculo de fase. |
BitFlipOracleGate(expressão[, var_ordem, rótulo] ) | Implementa um oráculo de inversão de bits |
e um bloco de construção importante para o algoritmo de Grover (consulte grover_operator()).
Além da implementação baseada em Gate-também oferecemos suporte à versão QuantumCircuit-do oráculo de inversão de fase
PhaseOracle(expressão[, var_ordem] ) | Fase Oracle. |
Circuitos modelo
Os modelos são funções que retornam circuitos que calculam a identidade. Eles são usados na otimização de circuitos em que a correspondência de parte do modelo permite que o compilador substitua a correspondência pelo inverso do restante do modelo.
Neste exemplo, a constante de identidade em um modelo é verificada:
from qiskit.circuit.library.templates import template_nct_4b_1
from qiskit.quantum_info import Operator
import numpy as np
template = template_nct_4b_1()
identity = np.identity(2 ** len(template.qubits), dtype=complex)
data = Operator(template).data
np.allclose(data, identity) # True, template_nct_4b_1 is the identityCircuitos modelo NCT (Not-CNOT-Toffoli)
Circuitos de gabarito para XGate, CXGate, e CCXGate portas (Toffoli).
Referências
Maslov, D. e Dueck, G. W. e Miller, D. M., Técnicas para a síntese de redes Toffoli reversíveis, 2007 https://dx.doi.org/10.1145/1278349.1278355
template_nct_2a_1
qiskit.circuit.library.templates.nct.template_nct_2a_1()
Modelo 2a_1:
┌───┐┌───┐
q_0: ┤ X ├┤ X ├
└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_2a_2
qiskit.circuit.library.templates.nct.template_nct_2a_2()
Modelo 2a_2:
q_0: ──■────■──
┌─┴─┐┌─┴─┐
q_1: ┤ X ├┤ X ├
└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_2a_3
qiskit.circuit.library.templates.nct.template_nct_2a_3()
Modelo 2a_3:
q_0: ──■────■──
│ │
q_1: ──■────■──
┌─┴─┐┌─┴─┐
q_2: ┤ X ├┤ X ├
└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_4a_1
qiskit.circuit.library.templates.nct.template_nct_4a_1()
Modelo 4a_1:
q_0: ───────■─────────■──
│ │
q_1: ──■────┼────■────┼──
│ │ │ │
q_2: ──■────■────■────■──
│ ┌─┴─┐ │ ┌─┴─┐
q_3: ──┼──┤ X ├──┼──┤ X ├
┌─┴─┐└───┘┌─┴─┐└───┘
q_4: ┤ X ├─────┤ X ├─────
└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_4a_2
qiskit.circuit.library.templates.nct.template_nct_4a_2()
Modelo 4a_2:
q_0: ──■─────────■───────
│ │
q_1: ──■────■────■────■──
│ ┌─┴─┐ │ ┌─┴─┐
q_2: ──┼──┤ X ├──┼──┤ X ├
┌─┴─┐└───┘┌─┴─┐└───┘
q_3: ┤ X ├─────┤ X ├─────
└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_4a_3
qiskit.circuit.library.templates.nct.template_nct_4a_3()
Modelo 4a_3:
q_0: ──■────■────■────■──
│ ┌─┴─┐ │ ┌─┴─┐
q_1: ──┼──┤ X ├──┼──┤ X ├
┌─┴─┐└───┘┌─┴─┐└───┘
q_2: ┤ X ├─────┤ X ├─────
└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_4b_1
qiskit.circuit.library.templates.nct.template_nct_4b_1()
Modelo 4b_1:
q_0: ───────■─────────■──
│ │
q_1: ──■────┼────■────┼──
│ │ │ │
q_2: ──■────■────■────■──
┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐
q_3: ┤ X ├┤ X ├┤ X ├┤ X ├
└───┘└───┘└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_4b_2
qiskit.circuit.library.templates.nct.template_nct_4b_2()
Modelo 4b_2:
q_0: ──■─────────■───────
│ │
q_1: ──■────■────■────■──
┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐
q_2: ┤ X ├┤ X ├┤ X ├┤ X ├
└───┘└───┘└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_5a_1
qiskit.circuit.library.templates.nct.template_nct_5a_1()
Modelo 5a_1:
q_0: ──■────■────■────■────■──
│ ┌─┴─┐ │ ┌─┴─┐ │
q_1: ──■──┤ X ├──■──┤ X ├──┼──
┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐
q_2: ┤ X ├─────┤ X ├─────┤ X ├
└───┘ └───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_5a_2
qiskit.circuit.library.templates.nct.template_nct_5a_2()
Modelo 5a_2:
q_0: ──■─────────■─────────■──
│ ┌───┐ │ ┌───┐ │
q_1: ──■──┤ X ├──■──┤ X ├──┼──
┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐
q_2: ┤ X ├─────┤ X ├─────┤ X ├
└───┘ └───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_5a_3
qiskit.circuit.library.templates.nct.template_nct_5a_3()
Modelo 5a_3:
q_0: ───────■─────────■────■──
┌─┴─┐ ┌─┴─┐ │
q_1: ──■──┤ X ├──■──┤ X ├──┼──
┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐
q_2: ┤ X ├─────┤ X ├─────┤ X ├
└───┘ └───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_5a_4
qiskit.circuit.library.templates.nct.template_nct_5a_4()
Modelo 5a_4:
┌───┐ ┌───┐
q_0: ──■──┤ X ├──■──┤ X ├
┌─┴─┐└───┘┌─┴─┐├───┤
q_1: ┤ X ├─────┤ X ├┤ X ├
└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_6a_1
qiskit.circuit.library.templates.nct.template_nct_6a_1()
Modelo 6a_1:
┌───┐ ┌───┐ ┌───┐
q_0: ──■──┤ X ├──■──┤ X ├──■──┤ X ├
┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘
q_1: ┤ X ├──■──┤ X ├──■──┤ X ├──■──
└───┘ └───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_6a_2
qiskit.circuit.library.templates.nct.template_nct_6a_2()
Modelo 6a_2:
q_0: ──■────■────■────■────■────■──
│ ┌─┴─┐ │ ┌─┴─┐ │ ┌─┴─┐
q_1: ──■──┤ X ├──■──┤ X ├──■──┤ X ├
┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘
q_2: ┤ X ├──■──┤ X ├──■──┤ X ├──■──
└───┘ └───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_6a_3
qiskit.circuit.library.templates.nct.template_nct_6a_3()
Modelo 6a_3:
q_0: ───────■─────────■────■────■──
┌─┴─┐ ┌─┴─┐ │ ┌─┴─┐
q_1: ──■──┤ X ├──■──┤ X ├──■──┤ X ├
┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘
q_2: ┤ X ├──■──┤ X ├──■──┤ X ├──■──
└───┘ └───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_6a_4
qiskit.circuit.library.templates.nct.template_nct_6a_4()
Modelo 6a_4:
q_0: ───────■──────────────■───────
┌─┴─┐ ┌───┐ │ ┌───┐
q_1: ──■──┤ X ├──■──┤ X ├──■──┤ X ├
┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘
q_2: ┤ X ├──■──┤ X ├──■──┤ X ├──■──
└───┘ └───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_6b_1
qiskit.circuit.library.templates.nct.template_nct_6b_1()
Modelo 6b_1:
q_0: ──■─────────■────■─────────■──
│ ┌─┴─┐ │ ┌─┴─┐
q_1: ──■────■──┤ X ├──■────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_6b_2
qiskit.circuit.library.templates.nct.template_nct_6b_2()
Modelo 6b_2:
q_0: ───────■────■─────────■────■──
│ ┌─┴─┐ │ ┌─┴─┐
q_1: ──■────■──┤ X ├──■────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_6c_1
qiskit.circuit.library.templates.nct.template_nct_6c_1()
Modelo 6c_1:
q_0: ──■─────────■─────────■────■──
│ ┌───┐ │ ┌───┐ │ ┌─┴─┐
q_1: ──■──┤ X ├──■──┤ X ├──■──┤ X ├
┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐└─┬─┘
q_2: ┤ X ├──■──┤ X ├──■──┤ X ├──■──
└───┘ └───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_7a_1
qiskit.circuit.library.templates.nct.template_nct_7a_1()
Modelo 7a_1:
┌───┐ ┌───┐
q_0: ┤ X ├──■─────────■────■──┤ X ├──■──
└─┬─┘┌─┴─┐ │ ┌─┴─┐└─┬─┘ │
q_1: ──■──┤ X ├──■────■──┤ X ├──■────■──
└───┘┌─┴─┐┌─┴─┐└───┘ ┌─┴─┐
q_2: ──────────┤ X ├┤ X ├──────────┤ X ├
└───┘└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_7b_1
qiskit.circuit.library.templates.nct.template_nct_7b_1()
Modelo 7b_1:
┌───┐ ┌───┐
q_0: ┤ X ├──■─────────■────■──┤ X ├──■──
└───┘┌─┴─┐ │ ┌─┴─┐└───┘ │
q_1: ─────┤ X ├──■────■──┤ X ├───────■──
└───┘┌─┴─┐┌─┴─┐└───┘ ┌─┴─┐
q_2: ──────────┤ X ├┤ X ├──────────┤ X ├
└───┘└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_7c_1
qiskit.circuit.library.templates.nct.template_nct_7c_1()
Modelo 7c_1:
┌───┐ ┌───┐
q_0: ┤ X ├──■─────────■────■──┤ X ├──■──
└───┘┌─┴─┐ │ ┌─┴─┐└───┘ │
q_1: ─────┤ X ├──■────■──┤ X ├───────■──
└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘ ┌─┴─┐
q_2: ───────■──┤ X ├┤ X ├──■───────┤ X ├
└───┘└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_7d_1
qiskit.circuit.library.templates.nct.template_nct_7d_1()
Modelo 7d_1:
┌───┐ ┌───┐
q_0: ┤ X ├──■─────────■────■──┤ X ├──■──
└─┬─┘┌─┴─┐ │ ┌─┴─┐└─┬─┘ │
q_1: ──■──┤ X ├──■────■──┤ X ├──■────■──
└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘ ┌─┴─┐
q_2: ───────■──┤ X ├┤ X ├──■───────┤ X ├
└───┘└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_7e_1
qiskit.circuit.library.templates.nct.template_nct_7e_1()
Modelo 7e_1:
┌───┐ ┌───┐
q_0: ┤ X ├──■─────────■────■──┤ X ├──■──
└───┘┌─┴─┐ │ ┌─┴─┐└───┘ │
q_1: ─────┤ X ├───────┼──┤ X ├───────┼──
└─┬─┘┌───┐┌─┴─┐└─┬─┘ ┌─┴─┐
q_2: ───────■──┤ X ├┤ X ├──■───────┤ X ├
└───┘└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9a_1
qiskit.circuit.library.templates.nct.template_nct_9a_1()
Modelo 9a_1:
┌───┐ ┌───┐ ┌───┐
q_0: ┤ X ├──■──┤ X ├──■────■──┤ X ├──■──
└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐
q_1: ──■──┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├
└─┬─┘ │ ├───┤└─┬─┘┌───┐└─┬─┘
q_2: ───────■────■──┤ X ├──■──┤ X ├──■──
└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_1
qiskit.circuit.library.templates.nct.template_nct_9c_1()
Modelo 9c_1:
┌───┐ ┌───┐┌───┐ ┌───┐ ┌───┐
q_0: ┤ X ├──■──┤ X ├┤ X ├─────┤ X ├──■───────┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌───┐└─┬─┘┌─┴─┐┌───┐└─┬─┘
q_1: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_2
qiskit.circuit.library.templates.nct.template_nct_9c_2()
Modelo 9c_2:
q_0: ───────■────■──────────────■────■─────────■──
┌───┐ │ ┌─┴─┐┌───┐ ┌─┴─┐ │ ┌─┴─┐
q_1: ┤ X ├──■──┤ X ├┤ X ├─────┤ X ├──■───────┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌───┐└─┬─┘┌─┴─┐┌───┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_3
qiskit.circuit.library.templates.nct.template_nct_9c_3()
Modelo 9c_3:
q_0: ───────■────────────────────────■────────────
┌───┐ │ ┌───┐┌───┐ ┌───┐ │ ┌───┐
q_1: ┤ X ├──■──┤ X ├┤ X ├─────┤ X ├──■───────┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌───┐└─┬─┘┌─┴─┐┌───┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_4
qiskit.circuit.library.templates.nct.template_nct_9c_4()
Modelo 9c_4:
q_0: ──■────■─────────■──────────────■────────────
┌─┴─┐ │ ┌───┐┌─┴─┐ ┌───┐ │ ┌───┐
q_1: ┤ X ├──■──┤ X ├┤ X ├─────┤ X ├──■───────┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌───┐└─┬─┘┌─┴─┐┌───┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_5
qiskit.circuit.library.templates.nct.template_nct_9c_5()
Modelo 9c_5:
q_0: ────────────■─────────■──────────────■───────
┌───┐ ┌─┴─┐┌───┐ │ ┌───┐ │ ┌───┐
q_1: ┤ X ├──■──┤ X ├┤ X ├──┼──┤ X ├──■────┼──┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_6
qiskit.circuit.library.templates.nct.template_nct_9c_6()
Modelo 9c_6:
q_0: ───────■────■─────────■─────────■────■───────
┌───┐ │ ┌─┴─┐┌───┐ │ ┌───┐ │ │ ┌───┐
q_1: ┤ X ├──■──┤ X ├┤ X ├──┼──┤ X ├──■────┼──┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_7
qiskit.circuit.library.templates.nct.template_nct_9c_7()
Modelo 9c_7:
q_0: ──■────■────■────■────■─────────■────■───────
┌─┴─┐ │ ┌─┴─┐┌─┴─┐ │ ┌───┐ │ │ ┌───┐
q_1: ┤ X ├──■──┤ X ├┤ X ├──┼──┤ X ├──■────┼──┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_8
qiskit.circuit.library.templates.nct.template_nct_9c_8()
Modelo 9c_8:
q_0: ──■─────────■────■─────────■──────────────■──
┌─┴─┐ ┌─┴─┐┌─┴─┐ ┌─┴─┐ ┌─┴─┐
q_1: ┤ X ├──■──┤ X ├┤ X ├─────┤ X ├──■───────┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌───┐└─┬─┘┌─┴─┐┌───┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_9
qiskit.circuit.library.templates.nct.template_nct_9c_9()
Modelo 9c_9:
q_0: ──■────■────■────■─────────■────■─────────■──
┌─┴─┐ │ ┌─┴─┐┌─┴─┐ ┌─┴─┐ │ ┌─┴─┐
q_1: ┤ X ├──■──┤ X ├┤ X ├─────┤ X ├──■───────┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌───┐└─┬─┘┌─┴─┐┌───┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_10
qiskit.circuit.library.templates.nct.template_nct_9c_10()
Modelo 9c_10:
q_0: ──■─────────■────■────■────■─────────■────■──
┌─┴─┐ ┌─┴─┐┌─┴─┐ │ ┌─┴─┐ │ ┌─┴─┐
q_1: ┤ X ├──■──┤ X ├┤ X ├──┼──┤ X ├──■────┼──┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_11
qiskit.circuit.library.templates.nct.template_nct_9c_11()
Modelo 9c_11:
q_0: ───────■────■─────────■────■────■────■────■──
┌───┐ │ ┌─┴─┐┌───┐ │ ┌─┴─┐ │ │ ┌─┴─┐
q_1: ┤ X ├──■──┤ X ├┤ X ├──┼──┤ X ├──■────┼──┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9c_12
qiskit.circuit.library.templates.nct.template_nct_9c_12()
Modelo 9c_12:
q_0: ──■────■────■────■────■────■────■────■────■──
┌─┴─┐ │ ┌─┴─┐┌─┴─┐ │ ┌─┴─┐ │ │ ┌─┴─┐
q_1: ┤ X ├──■──┤ X ├┤ X ├──┼──┤ X ├──■────┼──┤ X ├
└─┬─┘┌─┴─┐└───┘└─┬─┘┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ──■──┤ X ├───────■──┤ X ├──■──┤ X ├┤ X ├──■──
└───┘ └───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_1
qiskit.circuit.library.templates.nct.template_nct_9d_1()
Modelo 9d_1:
┌───┐ ┌───┐ ┌───┐
q_0: ──■───────┤ X ├───────■──┤ X ├───────■──┤ X ├
┌─┴─┐┌───┐└─┬─┘┌───┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘
q_1: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_2
qiskit.circuit.library.templates.nct.template_nct_9d_2()
Modelo 9d_2:
q_0: ──■────■────■──────────────■──────────────■──
│ │ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
q_1: ──■────┼──┤ X ├───────■──┤ X ├───────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_3
qiskit.circuit.library.templates.nct.template_nct_9d_3()
Modelo 9d_3:
q_0: ──■────■───────────────────■─────────────────
│ │ ┌───┐ ┌─┴─┐ ┌───┐
q_1: ──■────┼──┤ X ├───────■──┤ X ├───────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_4
qiskit.circuit.library.templates.nct.template_nct_9d_4()
Modelo 9d_4:
q_0: ───────■─────────■──────────────■────────────
│ ┌───┐ │ ┌───┐ │ ┌───┐
q_1: ──■────┼──┤ X ├──┼────■──┤ X ├──┼────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_5
qiskit.circuit.library.templates.nct.template_nct_9d_5()
Modelo 9d_5:
q_0: ──■────■─────────■─────────■────■────────────
│ │ ┌───┐ │ ┌─┴─┐ │ ┌───┐
q_1: ──■────┼──┤ X ├──┼────■──┤ X ├──┼────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_6
qiskit.circuit.library.templates.nct.template_nct_9d_6()
Modelo 9d_6:
q_0: ──■────■──────────────■────■─────────■───────
│ │ ┌───┐ │ ┌─┴─┐ │ ┌───┐
q_1: ──■────┼──┤ X ├───────■──┤ X ├───────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_7
qiskit.circuit.library.templates.nct.template_nct_9d_7()
Modelo 9d_7:
q_0: ──■────■─────────■────■────■────■────■───────
│ │ ┌───┐ │ │ ┌─┴─┐ │ │ ┌───┐
q_1: ──■────┼──┤ X ├──┼────■──┤ X ├──┼────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_8
qiskit.circuit.library.templates.nct.template_nct_9d_8()
Modelo 9d_8:
q_0: ──■────■────■────■─────────■────■─────────■──
│ │ ┌─┴─┐ │ ┌─┴─┐ │ ┌─┴─┐
q_1: ──■────┼──┤ X ├──┼────■──┤ X ├──┼────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_9
qiskit.circuit.library.templates.nct.template_nct_9d_9()
Modelo 9d_9:
q_0: ──■────■────■─────────■────■─────────■────■──
│ │ ┌─┴─┐ │ ┌─┴─┐ │ ┌─┴─┐
q_1: ──■────┼──┤ X ├───────■──┤ X ├───────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘┌───┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
template_nct_9d_10
qiskit.circuit.library.templates.nct.template_nct_9d_10()
Modelo 9d_10:
q_0: ──■────■────■────■────■────■────■────■────■──
│ │ ┌─┴─┐ │ │ ┌─┴─┐ │ │ ┌─┴─┐
q_1: ──■────┼──┤ X ├──┼────■──┤ X ├──┼────■──┤ X ├
┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘┌─┴─┐┌─┴─┐└─┬─┘
q_2: ┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──┤ X ├┤ X ├──■──
└───┘└───┘ └───┘└───┘ └───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
Circuitos de modelo Clifford
Circuitos de modelo sobre portas de Clifford.
clifford_2_1
qiskit.circuit.library.clifford_2_1()
Modelo Clifford 2_1:
q_0: ─■──■─
│ │
q_1: ─■──■─Retorna
como um circuito quântico.
Tipo de retorno
clifford_2_2
qiskit.circuit.library.clifford_2_2()
Modelo de Clifford 2_2:
q_0: ──■────■──
┌─┴─┐┌─┴─┐
q_1: ┤ X ├┤ X ├
└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_2_3
qiskit.circuit.library.clifford_2_3()
Modelo de Clifford 2_3:
┌───┐┌───┐
q_0: ┤ H ├┤ H ├
└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_2_4
qiskit.circuit.library.clifford_2_4()
Modelo de Clifford 2_4:
q_0: ─X──X─
│ │
q_1: ─X──X─Retorna
como um circuito quântico.
Tipo de retorno
clifford_3_1
qiskit.circuit.library.clifford_3_1()
Clifford modelo 3_1:
┌───┐┌───┐┌───┐
q_0: ┤ S ├┤ S ├┤ Z ├
└───┘└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_4_1
qiskit.circuit.library.clifford_4_1()
Clifford modelo 4_1:
┌───┐
q_0: ──■──┤ X ├──■───X─
┌─┴─┐└─┬─┘┌─┴─┐ │
q_1: ┤ X ├──■──┤ X ├─X─
└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_4_2
qiskit.circuit.library.clifford_4_2()
Modelo de Clifford 4_2:
q_0: ───────■────────■─
┌───┐┌─┴─┐┌───┐ │
q_1: ┤ H ├┤ X ├┤ H ├─■─
└───┘└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_4_3
qiskit.circuit.library.clifford_4_3()
Modelo Clifford 4_3:
┌───┐ ┌─────┐
q_0: ┤ S ├──■──┤ SDG ├──■──
└───┘┌─┴─┐└─────┘┌─┴─┐
q_1: ─────┤ X ├───────┤ X ├
└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_4_4
qiskit.circuit.library.clifford_4_4()
Modelo Clifford 4_4:
┌───┐ ┌─────┐
q_0: ┤ S ├─■─┤ SDG ├─■─
└───┘ │ └─────┘ │
q_1: ──────■─────────■─Retorna
como um circuito quântico.
Tipo de retorno
clifford_5_1
qiskit.circuit.library.clifford_5_1()
Modelo Clifford 5_1:
q_0: ──■─────────■─────────■── ┌─┴─┐ ┌─┴─┐ │ q_1: ┤ X ├──■──┤ X ├──■────┼── └───┘┌─┴─┐└───┘┌─┴─┐┌─┴─┐ q_2: ─────┤ X ├─────┤ X ├┤ X ├ └───┘ └───┘└───┘
Retorna
como um circuito quântico.
Tipo de retorno
clifford_6_1
qiskit.circuit.library.clifford_6_1()
Clifford modelo 6_1:
┌───┐ ┌───┐┌───┐ q_0: ┤ H ├──■──┤ H ├┤ X ├ ├───┤┌─┴─┐├───┤└─┬─┘ q_1: ┤ H ├┤ X ├┤ H ├──■── └───┘└───┘└───┘
Retorna
como um circuito quântico.
Tipo de retorno
clifford_6_2
qiskit.circuit.library.clifford_6_2()
Modelo de Clifford 6_2:
┌───┐ q_0: ┤ S ├──■───────────■───■─ ├───┤┌─┴─┐┌─────┐┌─┴─┐ │ q_1: ┤ S ├┤ X ├┤ SDG ├┤ X ├─■─ └───┘└───┘└─────┘└───┘
Retorna
como um circuito quântico.
Tipo de retorno
clifford_6_3
qiskit.circuit.library.clifford_6_3()
Modelo de Clifford 6_3:
┌───┐ ┌───┐
q_0: ─X──■─┤ H ├──■──┤ X ├─────
│ │ └───┘┌─┴─┐└─┬─┘┌───┐
q_1: ─X──■──────┤ X ├──■──┤ H ├
└───┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_6_4
qiskit.circuit.library.clifford_6_4()
Modelo Clifford 6_4:
┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐
q_0: ┤ S ├┤ H ├┤ S ├┤ H ├┤ S ├┤ H ├
└───┘└───┘└───┘└───┘└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_6_5
qiskit.circuit.library.clifford_6_5()
Modelo Clifford 6_5:
┌───┐
q_0: ─■───■───┤ S ├───■───────
│ ┌─┴─┐┌┴───┴┐┌─┴─┐┌───┐
q_1: ─■─┤ X ├┤ SDG ├┤ X ├┤ S ├
└───┘└─────┘└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_8_1
qiskit.circuit.library.clifford_8_1()
Modelo Clifford 8_1:
┌───┐ ┌───┐ ┌───┐┌─────┐
q_0: ──■───────┤ X ├─┤ S ├─┤ X ├┤ SDG ├
┌─┴─┐┌───┐└─┬─┘┌┴───┴┐└─┬─┘└┬───┬┘
q_1: ┤ X ├┤ H ├──■──┤ SDG ├──■───┤ H ├─
└───┘└───┘ └─────┘ └───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_8_2
qiskit.circuit.library.clifford_8_2()
Modelo Clifford 8_2:
┌───┐
q_0: ──■─────────■───┤ S ├───■────────────
┌─┴─┐┌───┐┌─┴─┐┌┴───┴┐┌─┴─┐┌───┐┌───┐
q_1: ┤ X ├┤ H ├┤ X ├┤ SDG ├┤ X ├┤ S ├┤ H ├
└───┘└───┘└───┘└─────┘└───┘└───┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
clifford_8_3
qiskit.circuit.library.clifford_8_3()
Modelo Clifford 8_3:
q_0: ─────────────────■───────────────────────■──
┌───┐┌───┐┌───┐┌─┴─┐┌─────┐┌───┐┌─────┐┌─┴─┐
q_1: ┤ S ├┤ H ├┤ S ├┤ X ├┤ SDG ├┤ H ├┤ SDG ├┤ X ├
└───┘└───┘└───┘└───┘└─────┘└───┘└─────┘└───┘Retorna
como um circuito quântico.
Tipo de retorno
Circuitos modelo RZXGate
Circuitos de modelo com RZXGate.
rzx_yz
qiskit.circuit.library.rzx_yz(theta=None)
Modelo baseado em RZX para CX - RYGate - CX.
┌────────┐ ┌─────────┐┌─────────┐┌──────────┐
q_0: ──■──┤ RY(-ϴ) ├──■──┤ RX(π/2) ├┤0 ├┤ RX(-π/2) ├
┌─┴─┐└────────┘┌─┴─┐└─────────┘│ RZX(ϴ) │└──────────┘
q_1: ┤ X ├──────────┤ X ├───────────┤1 ├────────────
└───┘ └───┘ └─────────┘Parâmetros
theta (ParameterExpression |float | None)
rzx_xz
qiskit.circuit.library.rzx_xz(theta=None)
Modelo baseado em RZX para CX - RXGate - CX.
┌───┐ ┌───┐┌─────────┐┌─────────┐┌─────────┐┌──────────┐»
q_0: ┤ X ├─────────┤ X ├┤ RZ(π/2) ├┤ RX(π/2) ├┤ RZ(π/2) ├┤0 ├»
└─┬─┘┌───────┐└─┬─┘└─────────┘└─────────┘└─────────┘│ RZX(-ϴ) │»
q_1: ──■──┤ RX(ϴ) ├──■───────────────────────────────────┤1 ├»
└───────┘ └──────────┘»
« ┌─────────┐┌─────────┐┌─────────┐
«q_0: ┤ RZ(π/2) ├┤ RX(π/2) ├┤ RZ(π/2) ├
« └─────────┘└─────────┘└─────────┘
«q_1: ─────────────────────────────────
«Parâmetros
theta (ParameterExpression |float | None)
rzx_cy
qiskit.circuit.library.rzx_cy(theta=None)
Modelo baseado em RZX para CX - RYGate - CX.
┌──────────┐
q_0: ──■─────────────■─────────────────────────────────┤0 ├───────────
┌─┴─┐┌───────┐┌─┴─┐┌────────┐┌──────────┐┌───────┐│ RZX(-ϴ) │┌─────────┐
q_1: ┤ X ├┤ RY(ϴ) ├┤ X ├┤ RY(-ϴ) ├┤ RZ(-π/2) ├┤ RX(ϴ) ├┤1 ├┤ RZ(π/2) ├
└───┘└───────┘└───┘└────────┘└──────────┘└───────┘└──────────┘└─────────┘Parâmetros
theta (ParameterExpression |float | None)
rzx_zz1
qiskit.circuit.library.rzx_zz1(theta=None)
Modelo baseado em RZX para CX - RZGate - CX.
»
q_0: ──■────────────────────────────────────────────■───────────────────────»
┌─┴─┐┌───────┐┌────┐┌───────┐┌────┐┌────────┐┌─┴─┐┌────────┐┌─────────┐»
q_1: ┤ X ├┤ RZ(ϴ) ├┤ √X ├┤ RZ(π) ├┤ √X ├┤ RZ(3π) ├┤ X ├┤ RZ(-ϴ) ├┤ RZ(π/2) ├»
└───┘└───────┘└────┘└───────┘└────┘└────────┘└───┘└────────┘└─────────┘»
« ┌──────────┐ »
«q_0: ───────────────────────────────┤0 ├──────────────────────»
« ┌─────────┐┌─────────┐┌───────┐│ RZX(-ϴ) │┌─────────┐┌─────────┐»
«q_1: ┤ RX(π/2) ├┤ RZ(π/2) ├┤ RX(ϴ) ├┤1 ├┤ RZ(π/2) ├┤ RX(π/2) ├»
« └─────────┘└─────────┘└───────┘└──────────┘└─────────┘└─────────┘»
«
«q_0: ───────────
« ┌─────────┐
«q_1: ┤ RZ(π/2) ├
« └─────────┘Parâmetros
theta (ParameterExpression |float | None)
rzx_zz2
qiskit.circuit.library.rzx_zz2(theta=None)
Modelo baseado em RZX para CX - PhaseGate - CX.
»
q_0: ──■────────────■─────────────────────────────────────────────────────»
┌─┴─┐┌──────┐┌─┴─┐┌───────┐┌─────────┐┌─────────┐┌─────────┐┌───────┐»
q_1: ┤ X ├┤ P(ϴ) ├┤ X ├┤ P(-ϴ) ├┤ RZ(π/2) ├┤ RX(π/2) ├┤ RZ(π/2) ├┤ RX(ϴ) ├»
└───┘└──────┘└───┘└───────┘└─────────┘└─────────┘└─────────┘└───────┘»
« ┌──────────┐
«q_0: ┤0 ├─────────────────────────────────
« │ RZX(-ϴ) │┌─────────┐┌─────────┐┌─────────┐
«q_1: ┤1 ├┤ RZ(π/2) ├┤ RX(π/2) ├┤ RZ(π/2) ├
« └──────────┘└─────────┘└─────────┘└─────────┘Parâmetros
theta (ParameterExpression |float | None)
rzx_zz3
qiskit.circuit.library.rzx_zz3(theta=None)
Modelo baseado em RZX para CX - RZGate - CX.
»
q_0: ──■─────────────■──────────────────────────────────────────────────────»
┌─┴─┐┌───────┐┌─┴─┐┌────────┐┌─────────┐┌─────────┐┌─────────┐┌───────┐»
q_1: ┤ X ├┤ RZ(ϴ) ├┤ X ├┤ RZ(-ϴ) ├┤ RZ(π/2) ├┤ RX(π/2) ├┤ RZ(π/2) ├┤ RX(ϴ) ├»
└───┘└───────┘└───┘└────────┘└─────────┘└─────────┘└─────────┘└───────┘»
« ┌──────────┐
«q_0: ┤0 ├─────────────────────────────────
« │ RZX(-ϴ) │┌─────────┐┌─────────┐┌─────────┐
«q_1: ┤1 ├┤ RZ(π/2) ├┤ RX(π/2) ├┤ RZ(π/2) ├
« └──────────┘└─────────┘└─────────┘└─────────┘Parâmetros
theta (ParameterExpression |float | None)