Skip to main content
IBM Quantum Platform

Síntese de circuitos

qiskit.synthesis


Síntese da evolução

EvolutionSynthesis()Interface para algoritmos de síntese de evolução.
ProductFormula(ordem[, representantes,...] )Classe base de fórmula de produto para a decomposição de exponenciais de operadores não comutáveis.
LieTrotter([repetições, inserir_barreiras,...] )A fórmula do produto Lie-Trotter.
SuzukiTrotter([ordem, representantes,...] )A fórmula do produto Suzuki-Trotter (de ordem superior).
MatrixExponential()Evolução exata do operador por meio de exponenciação de matriz e síntese unitária.
QDrift([repetições, inserir_barreiras,...] )O método QDrift Trotterization, que seleciona cada termo na Trotterização de forma aleatória, com uma probabilidade proporcional ao seu peso.

Síntese de Função Linear

synth_cnot_count_full_pmh

qiskit.synthesis.synth_cnot_count_full_pmh(state, section_size=None)

GitHub

Sintetizar circuitos reversíveis lineares para arquitetura all-to-all usando os métodos Patel, Markov e Hayes.

Essa função é uma implementação do algoritmo de Patel, Markov e Hayes de [1] para a síntese ideal de circuitos reversíveis lineares para arquitetura all-to-all, conforme especificado por uma matriz n×nn \times n.

Parâmetros

  • state (list[list[bool]] | ndarray[bool]) – n×nn \times n matriz booleana invertível, descrevendo o estado do circuito de entrada.
  • section_size (int | None) – O tamanho de cada seção no algoritmo de Patel-Markov-Hayes [1]. Se None for escolhido para ser max(2,αlog2(n))\max(2, \alpha\log_2(n)) com α=0.56\alpha = 0.56, o que minimiza aproximadamente o limite superior do número de operações de linha dado na [1] Eq. (3).

Retorna

Um circuito somente CX que implementa a transformação linear.

Aumentos

ValueError - Quando section_size é maior que o número de colunas.

Tipo de retorno

QuantumCircuit

Referências

  1. Patel, Ketan N., Igor L. Markov e John P. Hayes, Optimal synthesis of linear reversible circuits, Quantum Information & Computation 8.3 (2008): 282-294. arXiv:quant-ph/0302002 [quant-ph]

synth_cnot_depth_line_kms

qiskit.synthesis.synth_cnot_depth_line_kms(mat)

GitHub

Sintetize o circuito reversível linear para arquiteturas lineares de vizinhança mais próxima usando o método Kutin, Moulton e Smithline.

Algoritmo de síntese para circuitos reversíveis lineares de [1], seção 7. Esse algoritmo sintetiza qualquer circuito reversível linear de nn qubits em uma arquitetura linear do vizinho mais próximo usando portas CX com profundidade de no máximo 5n5n.

Parâmetros

mat (ndarray[bool]) – Uma matriz booleana invertível.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError - se mat não for invertível.

Tipo de retorno

QuantumCircuit

Referências

  1. Kutin, S., Moulton, D. P., Smithline, L., Computação à distância, Chicago J. Theor. Computador. Ciências, vol. 2007, (2007), arXiv:quant-ph/0701194

Síntese de fase linear

synth_cz_depth_line_mr

qiskit.synthesis.synth_cz_depth_line_mr(mat)

GitHub

Síntese de um circuito CZ para conectividade de vizinho mais próximo linear (LNN), com base em Maslov e Roetteler.

Observe que esse método reverte a ordem dos qubits no circuito e retorna um circuito contendo CXGates e portas de fase (SGate, SdgGate ou ZGate).

Parâmetros

mat (ndarray) – uma matriz quadrada diagonal superior de tipos booleanos que representa o circuito CZ. mat[i][j]=1 for i<j representa uma cz(i,j) porta. Apenas o triângulo superior é lido; a diagonal e o triângulo inferior não têm efeito.

Retorna

Uma implementação de circuito do circuito CZ de profundidade 2n+22n+2 para conectividade LNN.

Tipo de retorno

QuantumCircuit

Referências

  1. Dmitri Maslov, Martin Roetteler, Circuitos estabilizadores mais curtos via decomposição de Bruhat e transformações de circuitos quânticos, arXiv:1705.09176.

synth_cx_cz_depth_line_my

qiskit.synthesis.synth_cx_cz_depth_line_my(mat_x, mat_z)

GitHub

Síntese conjunta de um circuito -CZ-CX- para conectividade linear do vizinho mais próximo (LNN), com profundidade de 2 qubits no máximo 5n, com base em Maslov e Yang. Esse método calcula o circuito CZ dentro do circuito CX por meio de inserções de porta de fase.

Parâmetros

  • mat_z (ndarray) – uma matriz booleana simétrica que representa um circuito CZ. mat_z[i][j]=1 representa uma porta cz(i,j)
  • mat_x (ndarray) – uma matriz booleana invertível que representa um circuito CX.

Retorna

Uma implementação de circuito de um circuito CX seguindo um circuito CZ, denotado como circuito -CZ-CX-, com profundidade de dois qubits no máximo 5n, para conectividade LNN.

Tipo de retorno

QuantumCircuit

Referências

  1. Kutin, S., Moulton, D. P., Smithline, L., Computação à distância, Chicago J. Theor. Computador. Ciências, vol. 2007, (2007), arXiv:quant-ph/0701194
  2. Dmitri Maslov, Willers Yang, Os circuitos CNOT precisam de pouca ajuda para implementar transformações de Clifford sem Hadamard arbitrárias que eles geram, arXiv:2210.16195.

synth_cnot_phase_aam

qiskit.synthesis.synth_cnot_phase_aam(cnots, angles, section_size=2)

GitHub

Essa função é uma implementação do algoritmo GraySynth de Amy, Azimadeh e Mosca.

GraySynth é um algoritmo heurístico descrito em [ [1] ] para a síntese de pequenas redes de paridade. É inspirado nos códigos de Gray. Dado um conjunto de cadeias binárias SS (denominadas cnots a seguir), o algoritmo sintetiza uma rede de paridade para SS escolhendo repetidamente um índice ii para expandir e, em seguida, realizando efetivamente uma recursão sobre os cofatores S0S_0 e S1S_1, que consistem nas cadeias ySy \in S, com yi=0y_i = 0 ou 11, respectivamente. À medida que um subconjunto SS é expandido recursivamente, aplicam-se cx portas de lógica de modo que um bit-alvo designado contenha a paridade (parcial) χy(x)\chi_y(x), onde yi=1y_i = 1 se e somente se yi=1y'_i = 1 para todos os ySy' \in S. Se SS contiver um único elemento {y}\{y'\}, então y=yy = y', e o bit-alvo contém o valor χy(x)\chi_{y'}(x), conforme desejado.

Notavelmente, em vez de descomputar essa sequência de portas cx (CNOT) quando um subconjunto SS termina de ser sintetizado, o algoritmo mantém o invariante de que as paridades restantes a serem computadas são expressas sobre o estado atual dos bits. Isso permite que o algoritmo evite o "retrocesso" inerente aos métodos baseados em não computação.

O algoritmo é descrito em detalhes na seção 4 de [1].

Parâmetros

  • cnots (list[list[int]]) –

    Uma matriz cujas colunas são as paridades a serem sintetizadas e. g.:

    [[0, 1, 1, 1, 1, 1],
     [1, 0, 0, 1, 1, 1],
     [1, 0, 0, 1, 0, 0],
     [0, 0, 1, 0, 1, 0]]

    corresponde a:

    x1^x2 + x0 + x0^x3 + x0^x1^x2 + x0^x1^x3 + x0^x1
  • angles (list[str]) – Uma lista contendo todas as portas de mudança de fase que devem ser aplicadas, na mesma ordem que em cnots. Um número é interpretado como o ângulo de p(angle)p(angle), caso contrário, os elementos devem ser 't', 'tdg', 's', 'sdg' ou 'z'.

  • section_size (int) – O tamanho de cada seção no algoritmo Patel-Markov-Hayes. section_size deve ser um fator do número de qubits.

Retorna

O circuito quântico decomposto.

Aumentos

QiskitError - quando as dimensões de cnots e angles não estiverem alinhadas.

Tipo de retorno

QuantumCircuit

Referências

  1. Matthew Amy, Parsiad Azimzadeh e Michele Mosca. Sobre a complexidade do controle-NOT de circuitos de fase controlados-NOT.., Quantum Science and Technology 4.1 (2018): 015002. arXiv:1712.01859

Síntese de Permutações

synth_permutation_depth_lnn_kms

qiskit.synthesis.synth_permutation_depth_lnn_kms(pattern)

GitHub

Sintetize um circuito de permutação para uma arquitetura linear do vizinho mais próximo usando o método Kutin, Moulton, Smithline.

Esse é o algoritmo de síntese de permutação de [1], seção 6. Ele sintetiza qualquer permutação de n qubits em uma arquitetura linear do vizinho mais próximo usando portas SWAP com profundidade de no máximo nn e tamanho de no máximo n(n1)/2n(n-1)/2 (em que tanto a profundidade quanto o tamanho são medidos em relação aos SWAPs).

Parâmetros

pattern (list[int] | ndarray[int]) – Padrão de permutação, descrevendo quais qubits ocupam as posições 0, 1, 2, etc. após a aplicação da permutação. Ou seja, pattern[k] = m quando a permutação mapeia o qubit m para a posição k. Por exemplo, o padrão [2, 4, 3, 0, 1] significa que o qubit 2 vai para a posição 0, o qubit 4 vai para a posição 1, etc.

Retorna

O circuito quântico sintetizado.

Tipo de retorno

QuantumCircuit

Referências

  1. Samuel A. Kutin, David Petrie Moulton e Lawren M. Smithline. Computação à distância.., arXiv:quant-ph/0701194v1

synth_permutation_basic

qiskit.synthesis.synth_permutation_basic(pattern)

GitHub

Sintetize um circuito de permutação para uma arquitetura totalmente conectada usando classificação.

Mais precisamente, se a permutação de entrada for um ciclo de comprimento m, isso criará um circuito quântico com m-1 SWAPs (e de profundidade m-1); se a permutação de entrada consistir em vários ciclos disjuntos, cada ciclo será essencialmente tratado de forma independente.

Parâmetros

pattern (list[int] | ndarray[int]) – Padrão de permutação, descrevendo quais qubits ocupam as posições 0, 1, 2, etc. após a aplicação da permutação. Ou seja, pattern[k] = m quando a permutação mapeia o qubit m para a posição k. Por exemplo, o padrão [2, 4, 3, 0, 1] significa que o qubit 2 vai para a posição 0, o qubit 4 vai para a posição 1, etc.

Retorna

O circuito quântico sintetizado.

Tipo de retorno

QuantumCircuit

synth_permutation_acg

qiskit.synthesis.synth_permutation_acg(pattern)

GitHub

Sintetize um circuito de permutação para uma arquitetura totalmente conectada usando o método de Alon, Chung e Graham.

Isso produz um circuito quântico de profundidade 2 (medido no número de SWAPs).

Essa implementação é baseada na Proposição 4.1 na referência [1], com a prova detalhada apresentada no Teorema 2 na referência [2]

Parâmetros

pattern (list[int] | ndarray[int]) – Padrão de permutação, descrevendo quais qubits ocupam as posições 0, 1, 2, etc. após a aplicação da permutação. Ou seja, pattern[k] = m quando a permutação mapeia o qubit m para a posição k. Por exemplo, o padrão [2, 4, 3, 0, 1] significa que o qubit 2 vai para a posição 0, o qubit 4 vai para a posição 1, etc.

Retorna

O circuito quântico sintetizado.

Tipo de retorno

QuantumCircuit

Referências

  1. N. Alon, F. R. K. Chung e R. L. Graham. Permutações de roteamento em gráficos por meio de correspondências.., Anais do Vigésimo Quinto Simpósio Anual da ACM sobre Teoria da Computação (1993). Páginas 583-591. (Resumo estendido) 10.1145/167088.167239
  2. N. Alon, F. R. K. Chung e R. L. Graham. Permutações de roteamento em gráficos por meio de correspondências.., (Artigo completo)

synth_permutation_reverse_lnn_kms

qiskit.synthesis.synth_permutation_reverse_lnn_kms(num_qubits)

GitHub

Sintetize a permutação reversa para arquiteturas lineares do vizinho mais próximo usando o método Kutin, Moulton e Smithline.

Algoritmo de síntese para permutação reversa de [1], seção 5. Esse algoritmo sintetiza a permutação reversa em nn qubits em uma arquitetura linear do vizinho mais próximo usando portas CX com profundidade 2n+22 * n + 2.

Parâmetros

num_qubits (int) – O número de qubits.

Retorna

O circuito quântico sintetizado.

Tipo de retorno

QuantumCircuit

Referências

  1. Kutin, S., Moulton, D. P., Smithline, L., Computação à distância, Chicago J. Theor. Computador. Ciências, vol. 2007, (2007), arXiv:quant-ph/0701194

Síntese de Clifford

synth_clifford_full

qiskit.synthesis.synth_clifford_full(clifford, method=None)

GitHub

Decompor um operador Clifford em um operador QuantumCircuit.

Para N3N \leq 3 qubits, isso se baseia na decomposição de custo CX ideal da referência [1]. Para N>3N > 3 qubits, isso é feito usando a rotina geral de compilação gulosa não otimizada da referência [3], que normalmente produz um custo CX melhor em comparação com o método AG em [2].

Parâmetros

  • clifford (Clifford) – Um operador de Clifford.
  • method (str | None) – um método de síntese ('AG' ou 'greedy'). Se definido, isso substitui a decomposição ótima para qubits d N3N \leq 3.

Retorna

Uma implementação de circuito do Clifford.

Tipo de retorno

QuantumCircuit

Referências

  1. S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]
  2. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits (Simulação aprimorada de circuitos estabilizadores ), Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
  3. Sergey Bravyi, Shaohan Hu, Dmitri Maslov, Ruslan Shaydulin, Otimização de circuitos Clifford com modelos e portas Pauli simbólicas, arXiv:2105.02291 [quant-ph]

synth_clifford_ag

qiskit.synthesis.synth_clifford_ag(clifford)

GitHub

Decompor um operador Clifford em um operador QuantumCircuit com base no método de Aaronson-Gottesman [1].

Parâmetros

clifford (Clifford) – Um operador de Clifford.

Retorna

Uma implementação de circuito do Clifford.

Tipo de retorno

QuantumCircuit

Referências

  1. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits (Simulação aprimorada de circuitos estabilizadores ), Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196

synth_clifford_bm

qiskit.synthesis.synth_clifford_bm(clifford)

GitHub

Decomposição de custo CX ideal de um operador Clifford em 2 qubits ou 3 qubits em um operador QuantumCircuit com base no método de Bravyi-Maslov [1].

Parâmetros

clifford (Clifford) – Um operador de Clifford.

Retorna

Uma implementação de circuito do Clifford.

Aumentos

QiskitError - se Clifford estiver em mais de 3 qubits.

Tipo de retorno

QuantumCircuit

Referências

  1. S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]

synth_clifford_greedy

qiskit.synthesis.synth_clifford_greedy(clifford)

GitHub

Decompor um operador Clifford em um operador QuantumCircuit com base no compilador de Clifford guloso descrito no Apêndice A de Bravyi, Hu, Maslov e Shaydulin [1].

Esse método normalmente produz um melhor custo CX em comparação com o método Aaronson-Gottesman.

Observe que essa função implementa apenas o compilador de Clifford guloso do Apêndice A de [1], e não os modelos e as otimizações de portas simbólicas de Pauli mencionadas no mesmo documento.

Parâmetros

clifford (Clifford) – Um operador de Clifford.

Retorna

Uma implementação de circuito do Clifford.

Aumentos

QiskitError - se a eliminação Gaussiana simétrica falhar.

Tipo de retorno

QuantumCircuit

Referências

  1. Sergey Bravyi, Shaohan Hu, Dmitri Maslov, Ruslan Shaydulin, Otimização de circuitos Clifford com modelos e portas Pauli simbólicas, arXiv:2105.02291 [quant-ph]

synth_clifford_layers

qiskit.synthesis.synth_clifford_layers(cliff, cx_synth_func=<function _default_cx_synth_func>, cz_synth_func=<function _default_cz_synth_func>, cx_cz_synth_func=None, cz_func_reverse_qubits=False, validate=False)

GitHub

Síntese de um Clifford em camadas, ela fornece uma decomposição semelhante à síntese descrita no Lema 8 de Bravyi e Maslov [1].

Por exemplo, um circuito Clifford de 5 qubits é decomposto nas seguintes camadas:

     ┌─────┐┌─────┐┌────────┐┌─────┐┌─────┐┌─────┐┌─────┐┌────────┐
q_0: ┤0    ├┤0    ├┤0       ├┤0    ├┤0    ├┤0    ├┤0    ├┤0       ├
     │     ││     ││        ││     ││     ││     ││     ││        │
q_1: ┤1    ├┤1    ├┤1       ├┤1    ├┤1    ├┤1    ├┤1    ├┤1       ├
     │     ││     ││        ││     ││     ││     ││     ││        │
q_2: ┤2 S2 ├┤2 CZ ├┤2 CX_dg ├┤2 H2 ├┤2 S1 ├┤2 CZ ├┤2 H1 ├┤2 Pauli ├
     │     ││     ││        ││     ││     ││     ││     ││        │
q_3: ┤3    ├┤3    ├┤3       ├┤3    ├┤3    ├┤3    ├┤3    ├┤3       ├
     │     ││     ││        ││     ││     ││     ││     ││        │
q_4: ┤4    ├┤4    ├┤4       ├┤4    ├┤4    ├┤4    ├┤4    ├┤4       ├
     └─────┘└─────┘└────────┘└─────┘└─────┘└─────┘└─────┘└────────┘

Essa decomposição é para as funções padrão cz_synth_func e cx_synth_func . Com outras funções, é possível ver uma decomposição ligeiramente diferente.

Parâmetros

  • cliff (Clifford) – Um operador de Clifford.
  • cx_synth_func (Callable[[ndarray], QuantumCircuit]) – Uma função para decompor o subcircuito CX. Recebe como entrada uma matriz booleana invertível e produz uma saída QuantumCircuit.
  • cz_synth_func (Callable[[ndarray], QuantumCircuit]) – Uma função para decompor o subcircuito CZ. Ele recebe como entrada uma matriz simétrica booleana e gera um QuantumCircuit.
  • cx_cz_synth_func (Callable) – opcional, uma função para decompor os subcircuitos CZ e CX.
  • validate (Boolean) – se for True, valida o processo de síntese.
  • cz_func_reverse_qubits (Boolean) – Verdadeiro somente se cz_synth_func for synth_cz_depth_line_mr()pois essa função retorna um circuito que reverte a ordem dos qubits.

Retorna

Uma implementação de circuito do Clifford.

Tipo de retorno

QuantumCircuit

Referências

  1. S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]

synth_clifford_depth_lnn

qiskit.synthesis.synth_clifford_depth_lnn(cliff)

GitHub

Síntese de um Clifford em camadas para conectividade de vizinho mais próximo linear.

A profundidade do circuito n-qubit sintetizado é limitada por 7n+27n+2, o que não é ideal. Ele deve ser substituído por um algoritmo melhor que ofereça uma profundidade limitada por 7n47n-4 [3].

Parâmetros

cliff (Clifford) – um operador de Clifford.

Retorna

uma implementação de circuito do Clifford.

Tipo de retorno

QuantumCircuit

Referências

  1. S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]
  2. Dmitri Maslov, Martin Roetteler, Circuitos estabilizadores mais curtos via decomposição de Bruhat e transformações de circuitos quânticos, arXiv:1705.09176.
  3. Dmitri Maslov, Willers Yang, Os circuitos CNOT precisam de pouca ajuda para implementar transformações de Clifford sem Hadamard arbitrárias que eles geram, arXiv:2210.16195.

Síntese CNOTDihedral

synth_cnotdihedral_full

qiskit.synthesis.synth_cnotdihedral_full(elem)

GitHub

Decompor um elemento CNOTDihedral em um elemento QuantumCircuit.

Para N2N \leq 2 qubits, isso se baseia na decomposição de custo CX ideal da referência [1]. Para N>2N > 2 qubits, isso é feito usando a rotina de compilação geral não otimizada da referência [2].

Parâmetros

elem (CNOTDihedral) – A CNOTDihedral elemento.

Retorna

Uma implementação de circuito do CNOTDihedral elemento.

Tipo de retorno

QuantumCircuit

Referências

  1. Shelly Garion e Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
  2. Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin e Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).

synth_cnotdihedral_two_qubits

qiskit.synthesis.synth_cnotdihedral_two_qubits(elem)

GitHub

Decompor um elemento CNOTDihedral em um único qubit e dois qubits em um elemento QuantumCircuit. Essa decomposição tem um número ideal de CXGates.

Parâmetros

elem (CNOTDihedral) – A CNOTDihedral elemento.

Retorna

Uma implementação de circuito do CNOTDihedral elemento.

Aumentos

QiskitError – se o elemento não for de 1 qubit ou 2 qubits CNOTDihedral.

Tipo de retorno

QuantumCircuit

Referências

  1. Shelly Garion e Andrew W. Cross, On the structure of the CNOT-Dihedral group, arXiv:2006.12042 [quant-ph]

synth_cnotdihedral_general

qiskit.synthesis.synth_cnotdihedral_general(elem)

GitHub

Decompor um elemento CNOTDihedral em um elemento QuantumCircuit.

Decompor um elemento geral CNOTDihedral elementos. O número de portas CX não é necessariamente o ideal. Para uma decomposição de um elemento de 1 ou 2 qubits, chame synth_cnotdihedral_two_qubits().

Parâmetros

elem (CNOTDihedral) – A CNOTDihedral elemento.

Retorna

Uma implementação de circuito do CNOTDihedral elemento.

Aumentos

QiskitError - se o elemento não puder ser decomposto em um circuito.

Tipo de retorno

QuantumCircuit

Referências

  1. Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin e Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).

Síntese do estado do estabilizador

synth_stabilizer_layers

qiskit.synthesis.synth_stabilizer_layers(stab, cz_synth_func=<function _default_cz_synth_func>, cz_func_reverse_qubits=False, validate=False)

GitHub

Síntese de um estado estabilizador em camadas.

Ela fornece uma decomposição semelhante à síntese descrita no Lema 8 da referência [1], sem o subcircuito inicial livre de Hadamard, que não afeta o estado do estabilizador.

Por exemplo, um estado estabilizador de 5 qubits é decomposto nas seguintes camadas:

     ┌─────┐┌─────┐┌─────┐┌─────┐┌────────┐
q_0: ┤0    ├┤0    ├┤0    ├┤0    ├┤0       ├
     │     ││     ││     ││     ││        │
q_1: ┤1    ├┤1    ├┤1    ├┤1    ├┤1       ├
     │     ││     ││     ││     ││        │
q_2: ┤2 H2 ├┤2 S1 ├┤2 CZ ├┤2 H1 ├┤2 Pauli ├
     │     ││     ││     ││     ││        │
q_3: ┤3    ├┤3    ├┤3    ├┤3    ├┤3       ├
     │     ││     ││     ││     ││        │
q_4: ┤4    ├┤4    ├┤4    ├┤4    ├┤4       ├
     └─────┘└─────┘└─────┘└─────┘└────────┘

Parâmetros

  • stab (StabilizerState) – Um estado estabilizador.
  • cz_synth_func (Callable[[ndarray], QuantumCircuit]) – Uma função para decompor o subcircuito CZ. Ele recebe como entrada uma matriz simétrica booleana e gera um QuantumCircuit.
  • cz_func_reverse_qubits (bool) – True somente se cz_synth_func for synth_cz_depth_line_mr()pois essa função retorna um circuito que reverte a ordem dos qubits.
  • validate (bool) – Se True, valida o processo de síntese.

Retorna

Uma implementação de circuito do estado do estabilizador.

Aumentos

QiskitError - se a entrada não for um StabilizerState.

Tipo de retorno

QuantumCircuit

Referências

  1. S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]

synth_stabilizer_depth_lnn

qiskit.synthesis.synth_stabilizer_depth_lnn(stab)

GitHub

Síntese de um estado estabilizador de n-qubit para conectividade de vizinho mais próximo linear, em profundidade de 2-qubit 2n+22n+2 e duas camadas CX distintas, usando CXGates e portas de fase (SGate, SdgGate ou ZGate).

Parâmetros

stab (StabilizerState) – Um estado estabilizador.

Retorna

Uma implementação de circuito do estado do estabilizador.

Tipo de retorno

QuantumCircuit

Referências

  1. S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]
  2. Dmitri Maslov, Martin Roetteler, Circuitos estabilizadores mais curtos via decomposição de Bruhat e transformações de circuitos quânticos, arXiv:1705.09176.

synth_circuit_from_stabilizers

qiskit.synthesis.synth_circuit_from_stabilizers(stabilizers, allow_redundant=False, allow_underconstrained=False, invert=False)

GitHub

Síntese de um circuito que gera um estado estabilizado pelos estabilizadores usando a eliminação Gaussiana com portas Clifford. Se os estabilizadores estiverem com restrições insuficientes e allow_underconstrained for True, o circuito produzirá um dos estados estabilizados pelos estabilizadores. Com base na implementação do stim.

Parâmetros

  • stabilizers (Collection[str]) – Lista de cordas estabilizadoras
  • allow_redundant (bool) – Permitir estabilizadores redundantes (ou seja, alguns estabilizadores podem ser produtos de outros)
  • allow_underconstrained (bool) – Permitir um conjunto de estabilizadores subrestrito (ou seja, os estabilizadores não especificam um estado único)
  • invert (bool) – Circuito inverso de retorno

Retorna

Um circuito que gera um estado estabilizado por stabilizers.

Aumentos

QiskitError - se os estabilizadores forem inválidos, não forem comutáveis ou forem contraditórios, se a lista tiver restrições insuficientes e allow_underconstrained for False, ou se a lista for redundante e allow_redundant for False.

Tipo de retorno

QuantumCircuit

Referências

  1. https://github.com/quantumlib/Stim/blob/c0dd0b1c8125b2096cd54b6f72884a459e47fe3e/src/stim/stabilizers/conversions.inl#L469
  2. https://quantumcomputing.stackexchange.com/questions/12721/how-to-calculate-destabilizer-group-of-toric-and-other-codes

Síntese de Base Discreta

SolovayKitaevDecomposition([...])O algoritmo de decomposição discreta de Solovay Kitaev.

gridsynth_rz

qiskit.synthesis.gridsynth_rz(angle, epsilon=1e-10)

GitHub

Rotação RZ aproximada utilizando o algoritmo de Ross-Selinger.

O algoritmo é descrito em [1]. O código-fonte (em Rust) está disponível em https://github.com/qiskit-community/rsgridsynth.

Parâmetros

  • angle (float) – Especifica o ângulo da rotação RZ.
  • epsilon (float) – O erro de aproximação permitido.

Retorna

Um circuito de um qubit aproximando-se de RZ(angle).

Tipo de retorno

QuantumCircuit

Referências

[1] Neil J. Ross, Peter Selinger, Aproximação Clifford+T ideal sem ancilla de rotações z,

arXiv:1403.2975

gridsynth_unitary

qiskit.synthesis.gridsynth_unitary(matrix, epsilon=1e-10)

GitHub

Aproxime uma matriz unitária de 1 qubit usando o algoritmo de Ross-Selinger.

O algoritmo é descrito em [1]. O código-fonte (em Rust) está disponível em https://github.com/qiskit-community/rsgridsynth.

Parâmetros

  • matrix (ndarray) – Uma matriz unitária e 2imes22 imes 2.
  • epsilon (float) – O erro de aproximação permitido.

Retorna

Um circuito de um qubit aproximando-se de matrix.

Tipo de retorno

QuantumCircuit

Referências

[1] Neil J. Ross, Peter Selinger, Aproximação Clifford+T ideal sem ancilla de rotações z,

arXiv:1403.2975

generate_basic_approximations

qiskit.synthesis.generate_basic_approximations(basis_gates, depth, filename=None)

GitHub

Gera uma lista de GateSequences com as portas em basis_gates.

Obsoleto desde a versão 2.3

A função qiskit.synthesis.discrete_basis.generate_basis_approximations.generate_basic_approximations() está obsoleta a partir do Qiskit 2.3. Será removido no mínimo três meses após a data de lançamento. Use a classe SolovayKitaevDecomposition diretamente para gerar, armazenar e carregar as aproximações básicas.

Parâmetros

  • basis_gates (list[str |Gate]) – As portas a partir das quais serão criadas as sequências de portas.
  • depth (int) – A profundidade máxima das aproximações.
  • filename (str | None) – Se fornecido, as aproximações básicas serão armazenadas nesse arquivo.

Retorna

Lista de GateSequences que usam as portas em basis_gates.

Aumentos

ValueError - Se basis_gates contiver um identificador de porta inválido.

Tipo de retorno

lista [GateSequence]


Síntese da alteração da base

synth_qft_line

qiskit.synthesis.synth_qft_line(num_qubits, do_swaps=True, approximation_degree=0)

GitHub

Construa um circuito para a Transformada Quântica de Fourier usando conectividade linear de vizinhança.

A construção é baseada na Fig. 2.b em Fowler et al. [1].

Nota

Com o valor padrão de do_swaps = True, esse algoritmo de síntese cria um circuito que implementa fielmente a operação QFT. Quando do_swaps = False, esse algoritmo de síntese cria um circuito que corresponde à "QFT com reversão": aplicando a QFT e invertendo a ordem de seus qubits de saída.

Parâmetros

  • num_qubits (int) – O número de qubits nos quais a Transformada Quântica de Fourier atua.
  • approximation_degree (int) – O grau de aproximação (0 para nenhuma aproximação). É possível implementar o QFT aproximadamente ignorando as rotações de fase controlada com o ângulo abaixo de um limite. Isso é discutido em mais detalhes em https://arxiv.org/abs/quant-ph/9601018 ou https://arxiv.org/abs/quant-ph/0403071.
  • do_swaps (bool) – Se deve sintetizar a operação "QFT" ou "QFT-com-reversão".

Retorna

Um circuito que implementa a operação QFT.

Tipo de retorno

QuantumCircuit

Referências

  1. A. G. Fowler, S. J. Devitt e L. C. L. Hollenberg, Implementação do algoritmo de Shor em uma matriz linear de qubits vizinhos mais próximos, Quantum Info. Computador. 4, 4 (julho de 2004), 237-251. arXiv:quant-ph/0402196 [quant-ph]

synth_qft_full

qiskit.synthesis.synth_qft_full(num_qubits, do_swaps=True, approximation_degree=0, insert_barriers=False, inverse=False, name=None)

GitHub

Construa um circuito para a Transformada Quântica de Fourier usando a conectividade de todos para todos.

Nota

Com o valor padrão de do_swaps = True, esse algoritmo de síntese cria um circuito que implementa fielmente a operação QFT. Esse circuito contém uma sequência de portas de troca no final, correspondendo à inversão da ordem de seus qubits de saída. Em alguns aplicativos, essa permutação de reversão pode ser evitada. A configuração do_swaps = False cria um circuito sem essa permutação de reversão, à custa de que esse circuito implemente a "QFT-com-reversão" em vez da QFT. Como alternativa, a passagem ElidePermutations transpiler é capaz de remover essas portas de troca.

Parâmetros

  • num_qubits (int) – O número de qubits nos quais a Transformada Quântica de Fourier atua.
  • do_swaps (bool) – Se deve sintetizar a operação "QFT" ou "QFT-com-reversão".
  • approximation_degree (int) – O grau de aproximação (0 para nenhuma aproximação). É possível implementar o QFT aproximadamente ignorando as rotações de fase controlada com o ângulo abaixo de um limite. Isso é discutido em mais detalhes em https://arxiv.org/abs/quant-ph/9601018 ou https://arxiv.org/abs/quant-ph/0403071.
  • insert_barriers (bool) – Se True, são inseridas barreiras para melhorar a visualização.
  • inverse (bool) – Se True, a Transformada de Fourier Quântica inversa é construída.
  • name (str | None) – O nome do circuito.

Retorna

Um circuito que implementa a operação QFT.

Tipo de retorno

QuantumCircuit


Síntese Unitária

Decomposição de matrizes unitárias gerais 2n×2n2^n \times 2^n para qualquer número de qubits.

qs_decomposition

qiskit.synthesis.qs_decomposition(mat, opt_a1=None, opt_a2=None, decomposer_1q=None, decomposer_2q=None, *, _depth=0)

GitHub

Decompõe uma matriz unitária em portas de um e dois qubits usando a Decomposição Quântica de Shannon, com base na Decomposição ZXZ de Bloco.

Essa decomposição é descrita em Krol e Al-Ars [2] e aprimora o método de Shende et al. [1].

  ┌───┐              ┌───┐     ┌───┐
 ─┤   ├─      ────□──┤ H ├──□──┤ H ├──□──
  │   │    ≃    ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐
/─┤   ├─      ──┤ C ├─────┤ B ├─────┤ A ├
  └───┘         └───┘     └───┘     └───┘

O número de CXGates gerados com a decomposição sem otimizações é o mesmo que o método não otimizado em [1] :

9164n322n\frac{9}{16} 4^n - \frac{3}{2} 2^n

Se opt_a1 = True, a contagem de CX é reduzida, melhorando [1], por:

23(4n21).\frac{2}{3} (4^{n - 2} - 1).

Salvando dois CXGates em vez de um em cada etapa da recursão.

Se opt_a2 = True, a contagem de CX é reduzida, como em [1], por:

4n21.4^{n-2} - 1.

Portanto, o número de CXGates gerados com a decomposição com otimizações é

22484n322n+53.\frac{22}{48} 4^n - \frac{3}{2} 2^n + \frac{5}{3}.

Parâmetros

  • mat (ndarray) – matriz unitária para decompor
  • opt_a1 (bool | None) – se deve tentar a otimização A.1 de [1, 2]. Isso deve eliminar 2 cx por chamada.
  • opt_a2 (bool | None) – se deve tentar a otimização A.2 de [1, 2]. Isso decompõe as unidades de dois qubits em uma porta diagonal e uma unidade de dois cx e reduz a contagem geral de cx em 4n214^{n-2} - 1. Essa otimização não deve ser feita se a unitária original for controlada.
  • decomposer_1q (Callable[[ndarray], QuantumCircuit] | None) – descomponedor opcional do tipo 1Q. Se for None, usa OneQubitEulerDecomposer.
  • decomposer_2q (Callable[[ndarray], QuantumCircuit] | None) – descomponedor opcional do tipo 2Q. Se for None, usa TwoQubitBasisDecomposer.

Retorna

Circuito quântico decomposto.

Tipo de retorno

QuantumCircuit

Referências

  1. Shende, Bullock, Markov, Synthesis of Quantum Logic Circuits (Síntese de circuitos lógicos quânticos ), arXiv:0406176 [quant-ph]
  2. Krol, Al-Ars, Beyond Quantum Shannon: Circuit Construction for General n-Qubit Gates Based on Block ZXZ-Decomposition (Além do Quantum Shannon: construção de circuitos para portas gerais de n-Qubit com base na decomposição ZXZ de blocos ), arXiv:2403.13692

O Compilador Quântico Aproximado está disponível como o módulo qiskit.synthesis.unitary.aqc.


Síntese de um qubit

OneQubitEulerDecomposer([base, use_dag] )Uma classe para decompor unitários de 1 qubit em rotações de ângulo de Euler.

Síntese de dois qubits

TwoQubitBasisDecomposer(portão[,...] )Uma classe para decompor unitários de 2 qubits em um número mínimo de usos de uma porta de base de 2 qubits.
XXDecomposer([base_fidelidade, euler_base,...] )Uma classe para a decomposição ótima de operadores unitários de 2 qubits em portas de base de 2 qubits do XX tipo (ou seja, cada uma localmente equivalente a CAN(α,0,0)CAN(\alpha, 0, 0), para um α\alpha que pode variar).
TwoQubitWeylDecomposition(unitário_matriz[,...] )Decomposição de Weyl de dois qubits.
TwoQubitControlledUDecomposer(...[, euler_basis] )Decomponha o unitário de dois qubits em termos de uma porta UUd(α,0,0)Ctrl-UU \sim U_d(\alpha, 0, 0) \sim \text{Ctrl-U} desejada que seja localmente equivalente a um RXXGate.

two_qubit_cnot_decompose

qiskit.synthesis.two_qubit_cnot_decompose(*args, **kwargs)

Essa é uma instância de TwoQubitBasisDecomposer que sempre usa cx como a porta KAK para a decomposição da base. Você pode usar essa função como um acesso rápido às decomposições de 2 qubits baseadas em cx.

Parâmetros

  • unitary (Operator or np.ndarray) – O 4x4 unitário para sintetizar.
  • basis_fidelity (float or None) – Se for dada a fidelidade presumida para aplicativos de CXGate.
  • approximate (bool) – Se True aproximado se basis_fidelity for menor que 1.0.

Retorna

O circuito sintetizado do unitário de entrada.

Tipo de retorno

QuantumCircuit


Síntese Multicontrolada

synth_mcmt_vchain

qiskit.synthesis.synth_mcmt_vchain(gate, num_ctrl_qubits, num_target_qubits, ctrl_state=None)

GitHub

Sintetizar MCMT usando uma cadeia em V.

Isso usa uma cadeia de portas CCX, usando num_ctrl_qubits - 1 qubits auxiliares.

Por exemplo, uma porta H de 3 controles e 2 alvos será sintetizada como:

q_0: ──■────────────────────────■──
       │                        │
q_1: ──■────────────────────────■──
       │                        │
q_2: ──┼────■──────────────■────┼──
       │    │  ┌───┐       │    │
q_3: ──┼────┼──┤ H ├───────┼────┼──
       │    │  └─┬─┘┌───┐  │    │
q_4: ──┼────┼────┼──┤ H ├──┼────┼──
     ┌─┴─┐  │    │  └─┬─┘  │  ┌─┴─┐
q_5: ┤ X ├──■────┼────┼────■──┤ X ├
     └───┘┌─┴─┐  │    │  ┌─┴─┐└───┘
q_6: ─────┤ X ├──■────■──┤ X ├─────
          └───┘          └───┘

Parâmetros

  • gate (Gate) – Porta de base a ser aplicada aos alvos.
  • num_ctrl_qubits (int) – Número de qubits de controle.
  • num_target_qubits (int) – Número de qubits de destino.
  • ctrl_state (int | None) – Estado de controle opcional como um número inteiro.

Retorna

O circuito sintetizado para a porta MCMT.

Tipo de retorno

QuantumCircuit

synth_mcmt_xgate

qiskit.synthesis.synth_mcmt_xgate(num_ctrl_qubits, num_target_qubits, ctrl_state=None)

GitHub

Sintetizar a porta MCMT X.

Isso usa uma estrutura de circuito especial que é eficiente para portas MCMT X. Ele não requer qubits auxiliares e se beneficia de decomposições MCX eficientes.

E.g. uma porta X de 3 controles e 3 alvos será sintetizada como:

q_0: ─────────────■────────────
                  |
q_1: ─────────────■────────────
                  |
q_2: ─────────────■────────────
                ┌─┴─┐
q_3: ────────■──┤ X ├──■───────
           ┌─┴─┐└───┘┌─┴─┐
q_4: ───■──┤ X ├─────┤ X ├──■──
      ┌─┴─┐└───┘     └───┘┌─┴─┐
q_5: ─┤ X ├───────────────┤ X ├
      └───┘               └───┘

Parâmetros

  • num_ctrl_qubits (int) – Número de qubits de controle.
  • num_target_qubits (int) – Número de qubits de destino.
  • ctrl_state (int | None) – Estado de controle opcional como um número inteiro.

Retorna

O circuito sintetizado para a porta MCMT X.

Tipo de retorno

QuantumCircuit

synth_mcx_1_clean_kg24

qiskit.synthesis.synth_mcx_1_clean_kg24(num_ctrl_qubits)

GitHub

Sintetize uma porta X multicontrolada com controles d k3k\ge 3, utilizando um qubit auxiliar limpo d 11, produzindo um circuito com portas d 2k32k-3 Toffoli ou portas CX d 6k66k-6 e profundidade O(k)O(k), conforme descrito na Seção. 5.1 de [1]. Para um circuito do tipo k2k\le 2, o circuito resultante consiste em uma única porta X, CX ou CCX (correspondendo a um k=0,1,2k = 0, 1, 2 e, respectivamente) e não utiliza qubits auxiliares.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

1. Khattar e Gidney, Rise of conditionally clean ancillae for optimizing quantum circuits arXiv:2407.17966

synth_mcx_1_dirty_kg24

qiskit.synthesis.synth_mcx_1_dirty_kg24(num_ctrl_qubits)

GitHub

Sintetize uma porta X multicontrolada com controles d k3k\ge 3, utilizando um qubit auxiliar sujo d 11, produzindo um circuito com portas d 4k84k-8 Toffoli ou portas CX d 12k1812k-18 e profundidade O(k)O(k), conforme descrito na Seção. 5.3 de [1]. Para um circuito do tipo k2k\le 2, o circuito resultante consiste em uma única porta X, CX ou CCX (correspondendo a um k=0,1,2k = 0, 1, 2 e, respectivamente) e não utiliza qubits auxiliares.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

1. Khattar e Gidney, Rise of conditionally clean ancillae for optimizing quantum circuits arXiv:2407.17966

synth_mcx_2_clean_kg24

qiskit.synthesis.synth_mcx_2_clean_kg24(num_ctrl_qubits)

GitHub

Sintetize uma porta X multicontrolada com controles d k3k\ge 3, utilizando qubits auxiliares limpos d 22, produzindo um circuito com portas d 2k32k-3 Toffoli ou portas d 6k66k-6 CX e profundidade d O(log(k))O(\log(k)), conforme descrito na Seção. 5.2 de [1]. Para um circuito do tipo k2k\le 2, o circuito resultante consiste em uma única porta X, CX ou CCX (correspondendo a um k=0,1,2k = 0, 1, 2 e, respectivamente) e não utiliza qubits auxiliares.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

1. Khattar e Gidney, Rise of conditionally clean ancillae for optimizing quantum circuits arXiv:2407.17966

synth_mcx_2_dirty_kg24

qiskit.synthesis.synth_mcx_2_dirty_kg24(num_ctrl_qubits)

GitHub

Sintetize uma porta X multicontrolada com controles d k3k\ge 3, utilizando qubits auxiliares sujos d 22, produzindo um circuito com portas d 4k84k-8 Toffoli ou portas d 12k1812k-18 CX e profundidade d O(log(k))O(\log(k)), conforme descrito na Seção. 5.4 de [1]. Para um circuito do tipo k2k\le 2, o circuito resultante consiste em uma única porta X, CX ou CCX (correspondendo a um k=0,1,2k = 0, 1, 2 e, respectivamente) e não utiliza qubits auxiliares.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

1. Khattar e Gidney, Rise of conditionally clean ancillae for optimizing quantum circuits arXiv:2407.17966

synth_mcx_n_dirty_i15

qiskit.synthesis.synth_mcx_n_dirty_i15(num_ctrl_qubits, relative_phase=False, action_only=False)

GitHub

Sintetize uma porta X multicontrolada com controles kk com base no artigo de Iten et al. [1].

Para um circuito de tipo k4k\ge 4, o método utiliza k2k - 2 qubits auxiliares “dirty”, produzindo um circuito com 2k12 * k - 1 qubits e, no máximo, 8k68 * k - 6 portas CX. No caso de um k3k\le 3 o, utilizam-se, em vez disso, circuitos eficientes explicitamente construídos que não requerem qubits auxiliares.

Parâmetros

  • num_ctrl_qubits (int) – O número de qubits de controle.
  • relative_phase (bool) – quando definido como True, o método aplica a porta X multicontrolada otimizada até uma fase relativa, de modo que, pelo lema 8 de [1], as fases relativas do action part se cancelam com as fases do reset part.
  • action_only (bool) – quando definido como True, o método aplica apenas o action part do lema 8 de [1].

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

  1. Iten et al. et al., Circuitos quânticos para isometrias, Phys. Rev. A 93, 23/03/2018 (2016), arXiv:1501.06911

synth_mcx_n_clean_m15

qiskit.synthesis.synth_mcx_n_clean_m15(num_ctrl_qubits)

GitHub

Sintetize uma porta X multicontrolada com controles d k3k\ge 3, utilizando qubits auxiliares limpos d k2k - 2, de modo a produzir um circuito com qubits d 2k12 * k - 1 e, no máximo, 6k66 * k - 6 portas CX, segundo Maslov [1]. Para um circuito do tipo k2k\le 2, o circuito resultante consiste em uma única porta X, CX ou CCX (correspondendo a um k=0,1,2k = 0, 1, 2 e, respectivamente) e não utiliza qubits auxiliares.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

  1. Maslov, Física. Rev. A 93, 022311 (2016), arXiv:1508.03273

synth_mcx_1_clean_b95

qiskit.synthesis.synth_mcx_1_clean_b95(num_ctrl_qubits)

GitHub

Sintetize uma porta X multicontrolada com controles d k3k\ge 3, utilizando um único qubit auxiliar limpo, produzindo um circuito com k+2k + 2 qubits e, no máximo, 16k2416 * k - 24 portas CX, por [1], [2]. Para um circuito do tipo k2k\le 2, o circuito resultante consiste em uma única porta X, CX ou CCX (correspondendo a um k=0,1,2k = 0, 1, 2 e, respectivamente) e não utiliza qubits auxiliares.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

  1. Barenco et. al, Elementary gates for quantum computation (Portas elementares para computação quântica ), Phys.Rev. A52 3457 (1995), arXiv:quant-ph/9503016
  2. Iten et al. et al., Circuitos quânticos para isometrias, Phys. Rev. A 93, 23/03/2018 (2016), arXiv:1501.06911

synth_mcx_noaux_v24

qiskit.synthesis.synth_mcx_noaux_v24(num_ctrl_qubits)

GitHub

Sintetize uma porta X multicontrolada com controles kk com base na implementação para MCPhaseGate.

Por sua vez, a porta MCPhase usa a decomposição para unidades especiais multicontroladas descritas em [1].

Produz um circuito quântico com k+1k + 1 qubits. O número de CX-gates é quadrático em kk.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

  1. Vale et. al, Circuit Decomposition of Multicontrolled Special Unitary Single-Qubit Gates, IEEE TCAD 43(3) (2024), arXiv:2302.06377

synth_mcx_noaux_hp24

qiskit.synthesis.synth_mcx_noaux_hp24(num_ctrl_qubits)

GitHub

Sintetize um X gate multicontrolado com controles kk com base no trabalho de Huang e Palsberg.

Produz um circuito quântico com k+1k + 1 qubits. O número de CX-gates é linear em kk.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Retorna

O circuito quântico sintetizado.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Tipo de retorno

QuantumCircuit

Referências

  1. Huang e Palsberg, Compiling Conditional Quantum Gates without Using Helper Qubits, PLDI (2024), <https://dl.acm.org/doi/10.1145/3656436> `_

synth_mcx_gray_code

qiskit.synthesis.synth_mcx_gray_code(num_ctrl_qubits)

GitHub

Sintetize uma porta X com múltiplos controles e controles do tipo k3k\ge 3 utilizando o código Gray.

Gera um circuito quântico com k+1k + 1 qubits. Este método gera um número exponencial de portas CX e deve ser utilizado apenas para valores pequenos de kk. Para k2k\le 2, o circuito resultante consiste em uma única porta X, CX ou CCX (correspondendo a k=0,1,2k = 0, 1, 2, respectivamente) e não utiliza qubits auxiliares.

Parâmetros

num_ctrl_qubits (int) – O número de qubits de controle.

Aumentos

QiskitError – se num_ctrl_qubits for ilegal.

Retorna

O circuito quântico sintetizado.

Tipo de retorno

QuantumCircuit

synth_c3x

qiskit.synthesis.synth_c3x()

GitHub

Síntese eficiente de X-gate com 3 controles.

Tipo de retorno

QuantumCircuit

synth_c4x

qiskit.synthesis.synth_c4x()

GitHub

Síntese eficiente de X-gate com 4 controles.

Tipo de retorno

QuantumCircuit


Síntese aritmética binária

Víbora

adder_qft_d00

qiskit.synthesis.adder_qft_d00(num_state_qubits, kind='half', annotated=False)

GitHub

Um circuito que usa QFT para realizar a adição no local em dois registros de qubit.

Para registros com nn qubits, o somador QFT pode executar o módulo de adição 2n2^n (com kind="fixed") ou a adição comum adicionando qubits de transporte (com kind="half"). O somador fixo usa (3n2n)/2(3n^2 - n)/2 CPhaseGate operadores, com um nn adicional para o meio somador.

Como exemplo, um circuito somador QFT sem ponto fixo que realiza a adição em dois registros de tamanho de 2 qubit é o seguinte:

 a_0: ─────────■──────■────────■──────────────────────────────────
               │      │        │
 a_1: ─────────┼──────┼────────┼────────■──────■──────────────────
      ┌──────┐ │      │        │P/4)  │      │P/2) ┌─────────┐
 b_0:0     ├─┼──────┼────────■────────┼──────■───────┤0
      │      │ │      │P/2)P(π)          │         │
 b_1:1 Qft ├─┼──────■─────────────────■──────────────┤1 qft_dg ├
      │      │ │P(π)                                   │         │
cout:2     ├─■───────────────────────────────────────┤2
      └──────┘                                         └─────────┘

Parâmetros

  • num_state_qubits (int) – O número de qubits em um dos registros de entrada para o estado a|a\rangle ou b|b\rangle. Os dois registros de entrada devem ter o mesmo número de qubits.
  • kind (str) – O tipo de somador pode ser "half" para um meio somador ou "fixed" para um somador de tamanho fixo. Um meio somador contém um carry-out para representar o bit mais significativo, mas o somador de tamanho fixo não contém e, portanto, executa o módulo de adição 2 ** num_state_qubits.
  • annotated (bool) – Se for True, crie operações de controle e inversas apropriadas como objetos AnnotatedOperation .

Tipo de retorno

QuantumCircuit

Referências

[1] T. G. Draper, Addition on a Quantum Computer (Adição em um computador quântico), 2000. arXiv:quant-ph/0008033

[2] Ruiz-Perez et al, Aritmética quântica com a transformada quântica de Fourier, 2017. arXiv:1411.5949

[3] Vedral et al, Quantum Networks for Elementary Arithmetic Operations (Redes Quânticas para Operações Aritméticas Elementares), 1995. arXiv:quant-ph/9511018

adder_ripple_c04

qiskit.synthesis.adder_ripple_c04(num_state_qubits, kind='half')

GitHub

Um circuito de transporte de ondulação para realizar a adição no local em dois registros de qubit.

Esse circuito usa 2n+O(1)2n + O(1) CCX gates e 5n+O(1)5n + O(1) CX gates, em uma profundidade de 2n+O(1)2n + O(1) [1]. A constante depende do tipo de somador implementado.

Como exemplo, um circuito somador ripple-carry que realiza a adição em dois registros de tamanho 3-qubit com um bit de transporte (kind="full") é o seguinte:

        ┌──────┐                                     ┌──────┐
 cin_0:2     ├─────────────────────────────────────┤2
        │      │┌──────┐                     ┌──────┐│      │
   a_0:0     ├┤2     ├─────────────────────┤2     ├┤0
        │      ││      │┌──────┐     ┌──────┐│      ││      │
   a_1: ┤  MAJ ├┤0     ├┤2     ├─────┤2     ├┤0     ├┤  UMA ├
        │      ││      ││      │     │      ││      ││      │
   a_2: ┤      ├┤  MAJ ├┤0     ├──■──┤0     ├┤  UMA ├┤      ├
        │      ││      ││      │  │  │      ││      ││      │
   b_0:1     ├┤      ├┤  MAJ ├──┼──┤  UMA ├┤      ├┤1
        └──────┘│      ││      │  │  │      ││      │└──────┘
   b_1: ────────┤1     ├┤      ├──┼──┤      ├┤1     ├────────
                └──────┘│      │  │  │      │└──────┘
   b_2: ────────────────┤1     ├──┼──┤1     ├────────────────
                        └──────┘┌─┴─┐└──────┘
cout_0: ────────────────────────┤ X ├────────────────────────
                                └───┘

Aqui, as portas MAJ e UMA correspondem às portas introduzidas em [1]. Observe que, nessa implementação, os qubits do registro de entrada são ordenados como todos os qubits do primeiro registro de entrada, seguidos por todos os qubits do segundo registro de entrada.

Há suporte para dois tipos diferentes de somadores. Ao definir o argumento kind , também é possível escolher um half-adder, que não tem carry-in, e um fixed-sized-adder, que não tem carry-in nem carry-out e, portanto, atua em tamanhos de registro fixos. Ao contrário do full-adder, esses circuitos precisam de um qubit auxiliar adicional.

O diagrama do circuito para o somador de ponto fixo (kind="fixed") em entradas de tamanho de 3 qubit é

        ┌──────┐┌──────┐                ┌──────┐┌──────┐
   a_0:0     ├┤2     ├────────────────┤2     ├┤0
        │      ││      │┌──────┐┌──────┐│      ││      │
   a_1: ┤      ├┤0     ├┤2     ├┤2     ├┤0     ├┤      ├
        │      ││      ││      ││      ││      ││      │
   a_2: ┤      ├┤  MAJ ├┤0     ├┤0     ├┤  UMA ├┤      ├
        │      ││      ││      ││      ││      ││      │
   b_0:1 MAJ ├┤      ├┤  MAJ ├┤  UMA ├┤      ├┤1 UMA ├
        │      ││      ││      ││      ││      ││      │
   b_1: ┤      ├┤1     ├┤      ├┤      ├┤1     ├┤      ├
        │      │└──────┘│      ││      │└──────┘│      │
   b_2: ┤      ├────────┤1     ├┤1     ├────────┤      ├
        │      │        └──────┘└──────┘        │      │
help_0:2     ├────────────────────────────────┤2
        └──────┘                                └──────┘

Ele tem um qubit a menos do que o full-adder, pois não tem o carry-out, mas usa um qubit auxiliar em vez do carry-in, portanto, tem apenas um qubit a menos, não dois.

Parâmetros

  • num_state_qubits (int) – O número de qubits em um dos registros de entrada para o estado a|a\rangle ou b|b\rangle. Os dois registros de entrada devem ter o mesmo número de qubits.
  • kind (str) – O tipo de somador pode ser "full" para um somador completo, "half" para um meio somador ou "fixed" para um somador de tamanho fixo. Um somador completo inclui tanto o carry-in quanto o carry-out, um meio apenas o carry-out e um somador de tamanho fixo não inclui nem o carry-in nem o carry-out.

Aumentos

ValueError - Se num_state_qubits for menor que 1.

Tipo de retorno

QuantumCircuit

Referências

[1] Cuccaro et al, Um novo circuito quântico de adição de transporte de ondulação, 2004. arXiv:quant-ph/0410184

[2] Vedral et al, Quantum Networks for Elementary Arithmetic Operations (Redes Quânticas para Operações Aritméticas Elementares), 1995. arXiv:quant-ph/9511018

adder_ripple_v95

qiskit.synthesis.adder_ripple_v95(num_state_qubits, kind='half')

GitHub

O somador de transporte de ondulação VBE [1].

Esse método usa 4n+O(1)4n + O(1) CCX gates e 4n+14n + 1 CX gates em uma profundidade de 6n26n - 2 [2].

Esse circuito realiza a adição no local de dois registros quânticos de tamanho igual. Como exemplo, um circuito somador clássico que executa a adição total (ou seja, incluindo um bit de transporte) em dois registros de tamanho 2-qubit é o seguinte:

          ┌────────┐                       ┌───────────┐┌──────┐
   cin_0:0       ├───────────────────────┤0          ├┤0
          │        │                       │           ││      │
     a_0:1       ├───────────────────────┤1          ├┤1
          │        │┌────────┐     ┌──────┐│           ││  Sum │
     a_1: ┤        ├┤1       ├──■──┤1     ├┤           ├┤      ├
          │        ││        │  │  │      ││           ││      │
     b_0:2 Carry ├┤        ├──┼──┤      ├┤2 Carry_dg ├┤2
          │        ││        │┌─┴─┐│      ││           │└──────┘
     b_1: ┤        ├┤2 Carry ├┤ X ├┤2 Sum ├┤           ├────────
          │        ││        │└───┘│      ││           │
  cout_0: ┤        ├┤3       ├─────┤      ├┤           ├────────
          │        ││        │     │      ││           │
helper_0:3       ├┤0       ├─────┤0     ├┤3          ├────────
          └────────┘└────────┘     └──────┘└───────────┘

Aqui, as portas de transporte e soma correspondem às portas introduzidas em [1]. Carry_dg correspondem ao inverso da porta Carry. Observe que, nessa implementação, os qubits do registro de entrada são ordenados como todos os qubits do primeiro registro de entrada, seguidos por todos os qubits do segundo registro de entrada. Essa é uma ordenação diferente em comparação com a Figura 2 em [1], o que leva a um desenho diferente do circuito.

Parâmetros

  • num_state_qubits (int) – O tamanho do registro.
  • kind (str) – O tipo de somador pode ser "full" para um somador completo, "half" para um meio somador ou "fixed" para um somador de tamanho fixo. Um somador completo inclui tanto o carry-in quanto o carry-out, um meio apenas o carry-out e um somador de tamanho fixo não inclui nem o carry-in nem o carry-out.

Aumentos

ValueError - Se num_state_qubits for menor que 1.

Tipo de retorno

QuantumCircuit

Referências

[1] Vedral et al, Quantum Networks for Elementary Arithmetic Operations (Redes Quânticas para Operações Aritméticas Elementares), 1995. arXiv:quant-ph/9511018

[2] Cuccaro et al, Um novo circuito quântico de adição de transporte de ondulação, 2004. arXiv:quant-ph/0410184

adder_ripple_r25

qiskit.synthesis.adder_ripple_r25(num_qubits)

GitHub

O somador de transporte de ondulação RV [1]. Construa um circuito somador quântico sem ancilla com profundidade sublinear com base no somador RV ripple-carry mostrado em [1]. A implementação tem uma profundidade de O(log2n)O(\log^2 n) e usa math:O(n log n) gates.

Como exemplo, um circuito somador ripple-carry que realiza a adição em dois registros de 4 qubits é o seguinte:

                               ┌───────────┐                    ┌────────┐
 a_0: ─────────────────────────┤0          ├────────────────────┤0       ├───────────────■─────────────────
                     ┌────────┐│           │                    │        │┌───────────┐  │
 a_1: ──■────────────┤0       ├┤2          ├──■─────────────────┤2       ├┤0          ├──┼────■────────────
        │            │        ││           │  │                 │        ││           │  │    │
 a_2: ──┼────■───────┤1       ├┤4          ├──┼────■────────────┤4       ├┤1 LAD_1_dg ├──┼────┼────■───────
        │    │       │        ││           │  │    │            │        ││           │  │    │    │
 a_3: ──┼────┼────■──┤2       ├┤6          ├──┼────┼────■───────┤6 LAD_2 ├┤2          ├──┼────┼────┼────■──
        │    │    │  │        ││           │  │    │    │       │        │└───────────┘┌─┴─┐  │    │    │
 b_0: ──┼────┼────┼──┤        ├┤1 LAD_2_dg ├──┼────┼────┼───────┤1       ├─────────────┤ X ├──┼────┼────┼──
      ┌─┴─┐  │    │  │  LAD_1 ││           │┌─┴─┐  │    │  ┌───┐│        │    ┌───┐    └───┘┌─┴─┐  │    │
 b_1: ┤ X ├──┼────┼──┤        ├┤3          ├┤ X ├──┼────┼──┤ X ├┤3       ├────┤ X ├─────────┤ X ├──┼────┼──
      └───┘┌─┴─┐  │  │        ││           │└───┘┌─┴─┐  │  ├───┤│        │    ├───┤         └───┘┌─┴─┐  │
 b_2: ─────┤ X ├──┼──┤        ├┤5          ├─────┤ X ├──┼──┤ X ├┤5       ├────┤ X ├──────────────┤ X ├──┼──
           └───┘┌─┴─┐│        ││           │     └───┘┌─┴─┐└───┘└────────┘    └───┘              └───┘┌─┴─┐
 b_3: ──────────┤ X ├┤        ├┤7          ├──────────┤ X ├───────────────────────────────────────────┤ X ├
                └───┘│        ││           │          └───┘                                           └───┘
cout: ───────────────┤3       ├┤8          ├───────────────────────────────────────────────────────────────
                     └────────┘└───────────┘

Aqui LAD_1 e LAD_2 são as escadas CX e CCX, respectivamente, introduzidas em [1]. Observe que, nessa implementação, os qubits do registro de entrada são ordenados como todos os qubits do primeiro registro de entrada, seguidos por todos os qubits do segundo registro de entrada.

Parâmetros

num_qubits (int) – O tamanho do registro.

Retorna

O circuito quântico que implementa o somador de transporte de ondulação RV.

Aumentos

ValueError - Se num_qubits for menor que 1.

Tipo de retorno

QuantumCircuit

Referências

1. Remaud e Vandaele, Ancilla-free Quantum Adder with Sublinear Depth, 2025. arXiv:2501.16802

adder_modular_v17

qiskit.synthesis.adder_modular_v17(num_qubits)

GitHub

Construa um circuito somador modular sem qubits auxiliares com base no somador do tipo Van Rentergem da Fig. 15 de [1]. A implementação usa no máximo 16k1316k - 13 CX gates para um somador com k qubits em cada registro, onde k = num_qubits.

Parâmetros

num_qubits (int) – O tamanho do registro.

Retorna

O circuito quântico que implementa o somador modular.

Aumentos

ValueError - Se num_qubits for menor que 1.

Tipo de retorno

QuantumCircuit

Referências

[1] Gidney, Factoring com n+2 qubits limpos e n-1 qubits sujos, 2017. arxiv:1706.07884

multiplicadores

multiplier_cumulative_h18

qiskit.synthesis.multiplier_cumulative_h18(num_state_qubits, num_result_qubits=None)

GitHub

Um circuito de multiplicação para armazenar o produto de dois registros de entrada fora do lugar.

O circuito usa a abordagem da Ref. [1]. Por exemplo, um circuito multiplicador que realiza uma multiplicação não modular em dois registros de 3 qubits é:

from qiskit.synthesis.arithmetic import multiplier_cumulative_h18

num_state_qubits = 3
circuit = multiplier_cumulative_h18(num_state_qubits)
circuit.draw("mpl")
Diagrama de circuito gerado pelo código anterior.

A multiplicação nesse circuito é implementada em uma abordagem clássica, executando uma série de adições deslocadas usando um dos registros de entrada, enquanto os qubits do outro registro de entrada atuam como qubits de controle para os somadores.

Parâmetros

  • num_state_qubits (int) – O número de qubits em um dos registros de entrada para o estado a|a\rangle ou b|b\rangle. Os dois registros de entrada devem ter o mesmo número de qubits.
  • num_result_qubits (int | None) – O número de qubits de resultado para limitar a saída. Se o número de qubits de resultado for nn, o módulo de multiplicação 2n2^n será executado para limitar a saída ao número especificado de qubits. O valor padrão é 2 * num_state_qubits para representar qualquer resultado possível da multiplicação das duas entradas.

Aumentos

ValueError - Se num_result_qubits for fornecido e não for válido, significa que não está em [num_state_qubits, 2 * num_state_qubits].

Tipo de retorno

QuantumCircuit

Referências

[1] Häner et al, Otimização de circuitos quânticos para aritmética, 2018. arXiv:1805.12445

multiplier_qft_r17

qiskit.synthesis.multiplier_qft_r17(num_state_qubits, num_result_qubits=None)

GitHub

Um circuito de multiplicação QFT para armazenar o produto de dois registros de entrada fora do lugar.

A multiplicação nesse circuito é implementada usando o procedimento da Fig. 3 em [1], em que as rotações de soma ponderada são implementadas conforme indicado na Fig. 5 em [1]. O QFT é usado no registro de saída e é seguido por rotações controladas por registros de entrada. As rotações transformam o estado no produto de dois registros de entrada na base QFT, que é revertida da base QFT usando a QFT inversa. Por exemplo, em 3 qubits de estado, um multiplicador completo é dado por:

from qiskit.synthesis.arithmetic import multiplier_qft_r17

num_state_qubits = 3
circuit = multiplier_qft_r17(num_state_qubits)
circuit.draw("mpl")
Diagrama de circuito gerado pelo código anterior.

Parâmetros

  • num_state_qubits (int) – O número de qubits em um dos registros de entrada para o estado a|a\rangle ou b|b\rangle. Os dois registros de entrada devem ter o mesmo número de qubits.
  • num_result_qubits (int | None) – O número de qubits de resultado para limitar a saída. Se o número de qubits de resultado for nn, o módulo de multiplicação 2n2^n será executado para limitar a saída ao número especificado de qubits. O valor padrão é 2 * num_state_qubits para representar qualquer resultado possível da multiplicação das duas entradas.

Aumentos

ValueError - Se num_result_qubits for fornecido e não for válido, significa que não está em [num_state_qubits, 2 * num_state_qubits].

Tipo de retorno

QuantumCircuit

Referências

[1] Ruiz-Perez et al, Aritmética quântica com a transformada quântica de Fourier, 2017. arXiv:1411.5949

Somas

synth_weighted_sum_carry

qiskit.synthesis.synth_weighted_sum_carry(weighted_sum)

GitHub

Sintetize uma porta de soma ponderada, pelo número de qubits de estado e os pesos dos qubits.

Esse método está descrito no Apêndice A de [1].

Referência:

[1] Stamatopoulos et al. Precificação de opções usando computadores quânticos (2020)

Quantum 4, 291

Parâmetros

weighted_sum (WeightedSumGate)

Tipo de retorno

QuantumCircuit


Síntese aritmética unária

Comparadores de inteiros

synth_integer_comparator_2s

qiskit.synthesis.synth_integer_comparator_2s(num_state_qubits, value, geq=True)

GitHub

Implemente uma comparação de números inteiros com base no complemento 2s.

Isso se baseia no Apêndice B de [1].

Parâmetros

  • num_state_qubits (int) – O número de qubits que codificam o valor a ser comparado.
  • value (int) – O valor a ser comparado.
  • geq (bool) – Se True inverter o bit de destino se o estado do qubit for \geq do que o valor, caso contrário, implemente <<.

Retorna

Um circuito que implementa o comparador de números inteiros.

Tipo de retorno

QuantumCircuit

Referências

[1] J. Gacon et al. "Otimização baseada em simulação aprimorada por quantum"

arXiv:2005.10780.

synth_integer_comparator_greedy

qiskit.synthesis.synth_integer_comparator_greedy(num_state_qubits, value, geq=True)

GitHub

Implemente uma comparação de números inteiros com base na comparação de valor por valor.

Para value menor que 2 ** (num_state_qubits - 1) , esse circuito implementa value portas multicontroladas com estados de controle 0, 1,..., value - 1, de modo que o qubit de destino seja invertido se o estado do qubit representar qualquer um dos valores permitidos. Para value maior que isso, geq é invertido. Essa implementação pode exigir um número exponencial de portas. Se os qubits auxiliares estiverem disponíveis, a implementação fornecida por synth_integer_comparator_2s() é mais eficiente.

Parâmetros

  • num_state_qubits (int) – O número de qubits que codificam o valor a ser comparado.
  • value (int) – O valor a ser comparado.
  • geq (bool) – Se True inverter o bit de destino se o estado do qubit for \geq do que o valor, caso contrário, implemente <<.

Retorna

Um circuito que implementa o comparador de números inteiros.

Tipo de retorno

QuantumCircuit

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.