HRSCumulativeMultiplier
class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')
Bases: Multiplier
Un circuito de multiplicación para almacenar el producto de dos registros de entrada fuera de lugar.
El circuito utiliza el planteamiento de [1]. Como ejemplo, un circuito multiplicador que realiza una multiplicación no modular en dos registros de 3 qubits de tamaño con el sumador por defecto es el siguiente (donde Adder denota el CDKMRippleCarryAdder):
a_0: ────■─────────────────────────
│
a_1: ────┼─────────■───────────────
│ │
a_2: ────┼─────────┼─────────■─────
┌───┴────┐┌───┴────┐┌───┴────┐
b_0: ┤0 ├┤0 ├┤0 ├
│ ││ ││ │
b_1: ┤1 ├┤1 ├┤1 ├
│ ││ ││ │
b_2: ┤2 ├┤2 ├┤2 ├
│ ││ ││ │
out_0: ┤3 ├┤ ├┤ ├
│ ││ ││ │
out_1: ┤4 ├┤3 ├┤ ├
│ Adder ││ Adder ││ Adder │
out_2: ┤5 ├┤4 ├┤3 ├
│ ││ ││ │
out_3: ┤6 ├┤5 ├┤4 ├
│ ││ ││ │
out_4: ┤ ├┤6 ├┤5 ├
│ ││ ││ │
out_5: ┤ ├┤ ├┤6 ├
│ ││ ││ │
aux_0: ┤7 ├┤7 ├┤7 ├
└────────┘└────────┘└────────┘La multiplicación en este circuito se implementa en un enfoque clásico realizando una serie de sumas desplazadas utilizando uno de los registros de entrada mientras que los qubits del otro registro de entrada actúan como qubits de control para los sumadores.
El MultiplierGate objeto representa una multiplicación, al igual que esta clase de circuito, pero permite al compilador seleccionar la descomposición óptima en función del contexto. Las implementaciones concretas se pueden configurar a través de HLSConfig, por ejemplo, este circuito se puede seleccionar mediante Multiplier=["cumulative_h18"].
Referencias:
[1] Häner et al., Optimización de circuitos cuánticos para aritmética, 2018. arXiv:1805.12445
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.
- num_result_qubits (int | None) – El número de qubits de resultado al que limitar la salida. Si el número de qubits resultantes es , se realiza la multiplicación módulo para limitar la salida al número especificado de qubits. El valor por defecto es
2 * num_state_qubitspara representar cualquier resultado posible de la multiplicación de las dos entradas. - adder (QuantumCircuit | None) – Circuito semi sumador para realizar multiplicaciones. El CDKMRippleCarryAdder se utiliza por defecto si no se proporciona ningún sumador.
- name (str) – El nombre del objeto circuito.
Eleva
NotImplementedError - Si num_result_qubits no está predeterminado y se proporciona un sumador personalizado.
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