Skip to main content
IBM Quantum Platform

HRSCumulativeMultiplier

class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')

GitHub

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.

Consulte también

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 a|a\rangle o b|b\rangle. 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 nn, se realiza la multiplicación módulo 2n2^n para limitar la salida al número especificado de qubits. El valor por defecto es 2 * num_state_qubits para 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
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.