DraperQFTAdder
class qiskit.circuit.library.DraperQFTAdder(num_state_qubits, kind='fixed', name='DraperQFTAdder')
Bases: Adder
Un circuito que utiliza la QFT para realizar sumas en su lugar en dos registros de qubits.
En el caso de los registros con qubits de tipo « », el sumador QFT puede realizar sumas módulo « » (con kind="fixed") o sumas ordinarias añadiendo un qubit de acarreo (con kind="half").
A modo de ejemplo, un circuito sumador QFT que realiza una suma ordinaria entre dos registros de 2 qubits tiene la siguiente forma:
a_0: ─────────■──────■────────────────────────■────────────────
│ │ │
a_1: ─────────┼──────┼────────■──────■────────┼────────────────
┌──────┐ │P(π) │ │ │ │ ┌───────┐
b_0: ┤0 ├─■──────┼────────┼──────┼────────┼───────┤0 ├
│ │ │P(π/2) │P(π) │ │ │ │
b_1: ┤1 QFT ├────────■────────■──────┼────────┼───────┤1 IQFT ├
│ │ │P(π/2) │P(π/4) │ │
cout: ┤2 ├────────────────────────■────────■───────┤2 ├
└──────┘ └───────┘Los bloques de QFT y QFT inversa de esta implementación omiten sus redes de intercambio, lo que invierte el orden de los qubits para lograr una implementación más eficiente. Esto influye en los qubits sobre los que actúan las puertas de fase controlada. Este esquema muestra cómo se implementa el sumador en Qiskit; no debe utilizarse como guía para construir el circuito manualmente.
Los siguientes objetos puerta genéricos realizan adiciones, como esta clase de circuito, pero permiten al compilador seleccionar la descomposición óptima basada en el contexto. Las implementaciones específicas pueden establecerse a través de HLSConfigpor ejemplo, este circuito puede elegirse a través de Adder=["qft_d00"].
ModularAdderGate: Un sumador genérico, módulo . Este
es funcionalmente equivalente a kind="fixed".
AdderGate: Un sumador inplace genérico. Este
es funcionalmente equivalente a kind="half".
Referencias:
[1] T. G. Draper, Addition on a Quantum Computer, 2000. arXiv:quant-ph/0008033
[2] Ruiz-Perez et al., Aritmética cuántica con la transformada cuántica de Fourier, 2017. arXiv:1411.5949
[3] Vedral et al., Redes cuánticas para operaciones aritméticas elementales, 1995. arXiv:quant-ph/9511018
Parámetros
- num_state_qubits (int) – El número de qubits en cualquiera de los registros de entrada para el estado o . Los dos registros de entrada deben tener el mismo número de qubits.
- kind (str) – El tipo de sumador, puede ser
'half'para un medio sumador o'fixed'para un sumador de tamaño fijo. Un sumador medio contiene un arrastre para representar el bit más significativo, pero el sumador de tamaño fijo no lo contiene y, por tanto, realiza la suma módulo2 ** num_state_qubits. - name (str) – El nombre del objeto circuito.
Eleva
ValueError - Si num_state_qubits es inferior a 1.
Atributos
name
Tipo: str
Un nombre legible para el circuito.
Ejemplo
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit