ConjugationEnvironment#
- class ConjugationEnvironment(conjugation_function, args, kwargs, allocation_management=True)[source]#
This QuantumEnvironment can be used for perfoming conjugated operations. An arbitrary unitary \(U \in SU(2^n)\) can be conjugated by another unitary \(V \in SU(2^n)\):
\[\text{conj}(U,V) = V^\dagger U V\]This structure appears in many quantum algorithms such as Grover, Quantum backtracking or Fourier arithmetic.
Using the
ConjugationEnvironment
not only helps to structure the code, but can also grant performance advantages.This is because the controlled circuit of such a conjugation is can be realized by just controlling \(U\) instead of all three operations.
\[C\text{conj}(U,V) = V^\dagger CU V\]The
ConjugationEnvironment
can be called using the aliasconjugate
. Conjugate takes the conjugation function (in our example \(V\)) and returns a function that takes the arguments for the conjugation function and returns the correspondingConjugationEnvironment
. For more information consult the examples section.Note
Note that every QuantumVariable that is created by the conjugation function \(V\) must be deleted/uncomputed before function conclusion.
- Parameters:
- conjugation_functionfunction
The function performing the operation \(V\).
- argsiterable
The arguments for the conjugation function.
- kwargsdict
The keyword arguments for the conjugation function.
Examples
We perform Fourier addition on a QuantumFloat
from qrisp import conjugate, QuantumFloat, p, QFT def fourier_adder(qf, n): with conjugate(QFT)(qf): for i in range(qf.size): p(n*np.pi*2**(i-qf.size+1), qf[i])
>>> qf = QuantumFloat(5) >>> fourier_adder(qf, 3) >>> print(qf) {3: 1.0} >>> fourier_adder(qf, 2) {5: 1.0}
Investigate the effects of a controlled addition:
from qrisp import control ctrl = QuantumFloat(1) qf = QuantumFloat(5) with control(ctrl): fourier_adder(qf, 3)
To see that indeed only the conjugand has been controlled we take a look at the circuit:
>>> print(qf.qs.transpile(1))
ctrl.0: ─────────■──────────■─────────■─────────■─────────■───────────────── ┌──────┐ │P(3π/16) │ │ │ │ ┌─────────┐ qf.0: ┤0 ├─■──────────┼─────────┼─────────┼─────────┼──────┤0 ├ │ │ │P(3π/8) │ │ │ │ │ qf.1: ┤1 ├────────────■─────────┼─────────┼─────────┼──────┤1 ├ │ │ │P(3π/4) │ │ │ │ qf.2: ┤2 QFT ├──────────────────────■─────────┼─────────┼──────┤2 QFT_dg ├ │ │ │P(3π/2) │ │ │ qf.3: ┤3 ├────────────────────────────────■─────────┼──────┤3 ├ │ │ │P(3π) │ │ qf.4: ┤4 ├──────────────────────────────────────────■──────┤4 ├ └──────┘ └─────────┘