qrisp.hybrid_mult#

hybrid_mult(x, y, output_qf=None, init_op='h', terminal_op='qft', phase_tolerant=False, cl_factor=1)[source]#

An advanced algorithm for multiplication which has better depth, gate-count and compile time than sbp_mult. It does not support squaring a single QuantumFloat though.

This algorithm also operates on the Fourier transform. Because of this, between successive multiplications targeting the same QuantumFloat it is not neccessary to Fourier-Transform. This advantage is expressed in the parameters init_op and terminal_op. These can be set to either ‘h’, ‘qft’ or None to leave out self canceling Fourier-transforms.

Parameters
xQuantumFloat

The first factor to multiply.

yQuantumFloat

The second factor to multiply.

output_qfQuantumFloat, optional

The QuantumFloat to store the result in. By default a suited QuantumFloat is created.

init_opstr, optional

The operation to bring output_qf into it’s Fourier-transform. The default is ‘h’.

terminal_opstr, optional

The operation to bring output_qf back from it’s Fourier-transform. The default is “qft”.

phase_tolerantbool, optional

If set to True, differing results introduce differing extra phases. This can be usefull to save resources incase this functions will get uncomputed. The default is False.

cl_factorfloat, optional

Allows to multiply the result by a classical factor without any extra gates. The default is 1.

Returns
output_qfQuantumFloat

The QuantumFloat containing the result.

Examples

We multiply two QuantumFloat with eachother and an additional classical factor

from qrisp import QuantumFloat, hybrid_mult
qf_0 = QuantumFloat(3)
qf_1 = QuantumFloat(3)
qf_0[:] = 3
qf_1[:] = 4
qf_res = hybrid_mult(qf_0, qf_1, cl_factor = 2)
print(qf_res)
# Yields: {24: 1.0}