qrisp.QuantumVariable.init_from#
- QuantumVariable.init_from(other)[source]#
Method to initiate a QuantumVariable based on the state of another. This method does NOT copy the state. Much rather it performs the operation
\[U_{\text{init_from}} \left( \sum_{x \in \text{labels}} a_x \ket{x} \right) \ket{0} = \sum_{x \in \text{labels}} a_x \ket{x} \ket{x}\]This is different from a state copying operation:
\[U_{\text{copy}} \left( \sum_{x \in \text{labels}} a_x \ket{x} \right) \ket{0} = \left( \sum_{x \in \text{labels}} a_x \ket{x} \right) \left( \sum_{x \in \text{labels}} a_x \ket{x} \right)\]A shorthand for initiating this way is the
[:]
operator.- Parameters:
- otherQuantumVariable
The QuantumVariable from which to initiate.
- Raises:
- Exception
Tried to initialize qubits which are not fresh anymore.
Examples
We create a QuantumFloat, and bring it into superposition.
>>> from qrisp import QuantumFloat, h, multi_measurement >>> qf_a = QuantumFloat(8) >>> qf_a[:] = 6 >>> h(qf_a[0]) >>> print(qf_a) {6: 0.5, 7: 0.5}
We now duplicate and initiate the duplicate
>>> qf_b = qf_a.duplicate() >>> print(qf_b) {0: 1.0} >>> qf_b.init_from(qf_a) >>> print(multi_measurement([qf_a, qf_b])) {(6, 6): 0.5, (7, 7): 0.5}
The slicing operator achieves the same:
>>> qf_c = qf_a.duplicate() >>> qf_c[:] = qf_b >>> print(multi_measurement([qf_a, qf_b, qf_c])) {(6, 6, 6): 0.5, (7, 7, 7): 0.5}