HRSCumulativeMultiplier
class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')
Basi: Multiplier
Un circuito di moltiplicazione per memorizzare il prodotto di due registri di ingresso fuori posto.
Il circuito utilizza l'approccio del punto [1]. A titolo di esempio, un circuito moltiplicatore che esegue una moltiplicazione non modulare su due registri di dimensioni pari a 3 qubit con l'addizionatore predefinito è il seguente (dove Adder indica il 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 moltiplicazione in questo circuito è implementata con un approccio classico, eseguendo una serie di addizioni spostate utilizzando uno dei registri di ingresso, mentre i qubit dell'altro registro di ingresso fungono da qubit di controllo per gli addizionatori.
L'oggetto MultiplierGate rappresenta una moltiplicazione, proprio come questa classe di circuiti, ma consente al compilatore di scegliere la scomposizione ottimale in base al contesto. È possibile impostare specifiche implementazioni tramite HLSConfig, ad esempio questo circuito può essere selezionato tramite Multiplier=["cumulative_h18"].
Riferimenti:
[1] Häner et al, Ottimizzazione dei circuiti quantistici per l'aritmetica, 2018. arXiv:1805.12445
Parametri
- num_state_qubits (int) – Il numero di qubit in uno dei due registri di ingresso per lo stato o . I due registri di ingresso devono avere lo stesso numero di qubit.
- num_result_qubits (int | None) – Il numero di qubit di risultato a cui limitare l'uscita. Se il numero di qubit del risultato è , viene eseguita la moltiplicazione modulo per limitare l'uscita al numero di qubit specificato. Il valore predefinito è
2 * num_state_qubitsper rappresentare ogni possibile risultato della moltiplicazione dei due ingressi. - adder (QuantumCircuit | None) – Circuito di semi-somma da utilizzare per eseguire la moltiplicazione. Se non viene specificato alcun addizionatore, viene utilizzato per impostazione predefinita l’addizionatore “ CDKMRippleCarryAdder ”.
- name (str) – Il nome dell'oggetto circuito.
Aumenti
NotImplementedError - Se num_result_qubits non è predefinito e viene fornito un sommatore personalizzato.
Attributi
name
Tipo: str
Un nome leggibile per il circuito.
Esempio
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit