HRSCumulativeMultiplier
class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')
Bases: Multiplier
Um circuito de multiplicação para armazenar o produto de dois registros de entrada fora do lugar.
O circuito usa a abordagem de [1]. Como exemplo, um circuito multiplicador que executa uma multiplicação não modular em dois registros de tamanho de 3 qubit com o somador padrão é o seguinte (onde Adder denota o 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 ├
└────────┘└────────┘└────────┘A multiplicação nesse circuito é implementada em uma abordagem clássica, executando uma série de adições deslocadas usando um dos registros de entrada, enquanto os qubits do outro registro de entrada atuam como qubits de controle para os somadores.
O MultiplierGate objeto representa uma multiplicação, assim como esta classe de circuito, mas permite que o compilador selecione a decomposição ideal com base no contexto. As implementações específicas podem ser definidas por meio do HLSConfig, por exemplo, este circuito pode ser selecionado por meio do Multiplier=["cumulative_h18"].
Referências
[1] Häner et al, Otimização de circuitos quânticos para aritmética, 2018. arXiv:1805.12445
Parâmetros
- num_state_qubits (int) – O número de qubits em um dos registros de entrada para o estado ou . Os dois registros de entrada devem ter o mesmo número de qubits.
- num_result_qubits (int | None) – O número de qubits de resultado para limitar a saída. Se o número de qubits de resultado for , o módulo de multiplicação será executado para limitar a saída ao número especificado de qubits. O valor padrão é
2 * num_state_qubitspara representar qualquer resultado possível da multiplicação das duas entradas. - adder (QuantumCircuit | None) – Circuito de meio somador a ser usado para realizar a multiplicação. O CDKMRippleCarryAdder é usado como padrão se nenhum somador for fornecido.
- name (str) – O nome do objeto de circuito.
Aumentos
NotImplementedError - Se num_result_qubits não for padrão e for fornecido um somador personalizado.
Atributos
name
Tipo: str
Um nome legível por humanos para o circuito.
Exemplo
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit