HRSCumulativeMultiplier
class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')
Bases : Multiplier
Un circuit de multiplication pour stocker le produit de deux registres d'entrée hors place.
Le circuit utilise l'approche du [point 1.] Titre d'exemple, un circuit multiplicateur qui effectue une multiplication non modulaire sur deux registres de 3 qubits avec l'additionneur par défaut est le suivant (où Adder désigne le 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 multiplication dans ce circuit est mise en œuvre selon une approche classique en effectuant une série d'additions décalées en utilisant l'un des registres d'entrée tandis que les qubits de l'autre registre d'entrée agissent comme des qubits de contrôle pour les additionneurs.
Cet MultiplierGate objet représente une multiplication, à l'instar de cette classe de circuit, mais permet au compilateur de choisir la décomposition optimale en fonction du contexte. Les implémentations spécifiques peuvent être définies via le HLSConfig, par exemple, ce circuit peut être sélectionné via Multiplier=["cumulative_h18"].
Références :
[1] Häner et al, Optimisation des circuits quantiques pour l'arithmétique, 2018. arXiv:1805.12445
Paramètres
- num_state_qubits (int) – Le nombre de qubits dans l'un ou l'autre des registres d'entrée pour l'état ou . Les deux registres d'entrée doivent avoir le même nombre de qubits.
- num_result_qubits (int | None) – Le nombre de qubits de résultat à limiter à la sortie. Si le nombre de qubits de résultat est , une multiplication modulo est effectuée pour limiter la sortie au nombre de qubits spécifié. La valeur par défaut est
2 * num_state_qubitspour représenter tout résultat possible de la multiplication des deux entrées. - adder (QuantumCircuit | None) – Circuit demi-additionneur destiné à effectuer des multiplications. La fonction « CDKMRippleCarryAdder » est utilisée par défaut si aucun additionneur n'est spécifié.
- name (str) – Le nom de l'objet circuit.
Augmentations
NotImplementedError - Si num_result_qubits n'est pas la valeur par défaut et qu'un additif personnalisé est fourni.
Attributs
name
Type : str
Un nom lisible par l'homme pour le circuit.
Exemple
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit