Source code for uniqc.algorithmics.state_preparation.hadamard_superposition
"""Hadamard superposition preparation.
Creates a uniform superposition over the specified qubits.
"""
__all__ = ["hadamard_superposition"]
from typing import List, Optional
from uniqc.circuit_builder import Circuit
[docs]
def hadamard_superposition(
circuit: Circuit,
qubits: Optional[List[int]] = None,
) -> None:
"""Create a uniform Hadamard superposition on the given qubits.
Applies an H gate to every qubit in *qubits*, transforming
``|0...0>`` into an equal superposition of all 2^n basis states:
.. math::
|0\\rangle^{\\otimes n} \\xrightarrow{H^{\\otimes n}}
\\frac{1}{\\sqrt{2^n}} \\sum_{k=0}^{2^n-1} |k\\rangle
Args:
circuit: Quantum circuit to operate on (mutated in-place).
qubits: Qubit indices to apply H to. ``None`` means all qubits
(``list(range(circuit.max_qubit + 1))``).
Example:
>>> from uniqc.circuit_builder import Circuit
>>> from uniqc.algorithmics.state_preparation import hadamard_superposition
>>> c = Circuit()
>>> c.allocate_qubits(3)
[0, 1, 2]
>>> hadamard_superposition(c) # (|0>+|1>)/√2 ⊗ 3
"""
if qubits is None:
qubits = list(range(circuit.max_qubit + 1))
for q in qubits:
circuit.h(q)