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.


The first factor to multiply.


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.


The QuantumFloat containing the result.


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)
# Yields: {24: 1.0}