This project is archived
Qiskit Finance is no longer maintained and this documentation is no longer updated. It is kept online for reference only, and the code it describes may not work with current versions of Qiskit. See the project repository for more information.
Source code for qiskit_finance.circuit.library.probability_distributions.uniform
# This code is part of a Qiskit project.
#
# (C) Copyright IBM 2017, 2023.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.
"""The uniform probability distribution circuit."""
from qiskit.circuit import QuantumCircuit
[docs]class UniformDistribution(QuantumCircuit):
r"""A circuit to encode a discretized uniform distribution in qubit amplitudes.
This simply corresponds to applying Hadamard gates on all qubits.
The probability density function of the discretized uniform distribution on
:math:`N` values is
.. math::
\mathbb{P}(X = x) = \frac{1}{N}.
This circuit considers :math:`N = 2^n`, where :math:`n =` ``num_qubits`` and prepares the state
.. math::
\mathcal{P}_X |0\rangle^{\otimes n} = \frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n - 1} |x\rangle
Examples:
>>> from qiskit_finance.circuit.library.probability_distributions import UniformDistribution
>>> circuit = UniformDistribution(3)
>>> circuit.decompose().draw()
┌───┐
q_0: ┤ H ├
├───┤
q_1: ┤ H ├
├───┤
q_2: ┤ H ├
└───┘
"""
def __init__(self, num_qubits: int, name: str = "P(X)") -> None:
"""
Args:
num_qubits: The number of qubits in the circuit, the distribution is uniform over
``2 ** num_qubits`` values.
name: The name of the circuit.
"""
inner = QuantumCircuit(num_qubits, name=name)
inner.h(inner.qubits)
super().__init__(num_qubits, name=name)
self.append(inner.to_gate(), inner.qubits)