Source code for toqito.matrices.fourier

"""Generates a Fourier matrix."""

import numpy as np


[docs] def fourier(dim: int) -> np.ndarray: r"""Generate the Fourier transform matrix [@WikiDFT]. Generates the `dim`-by-`dim` unitary matrix that implements the quantum Fourier transform. The Fourier matrix is defined as: \[ W_N = \frac{1}{\sqrt{N}} \begin{pmatrix} 1 & 1 & 1 & 1 & \ldots & 1 \\ 1 & \omega & \omega^2 & \omega^3 & \ldots & \omega^{N-1} \\ 1 & \omega^2 & \omega^4 & \omega^6 & \ldots & \omega^{2(N-1)} \\ 1 & \omega^3 & \omega^6 & \omega^9 & \ldots & \omega^{3(N-1)} \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & \omega^{N-1} & \omega^{2(N-1)} & \omega^{3(N-1)} & \ldots & \omega^{(N-1)(N-1)} \end{pmatrix} \] Examples: The Fourier matrix generated from \(d = 3\) yields the following matrix: \[ W_3 = \frac{1}{\sqrt{3}} \begin{pmatrix} 1 & 1 & 1 \\ 1 & \omega & \omega^2 \\ 1 & \omega^2 & \omega^4 \end{pmatrix} \] ```python exec="1" source="above" from toqito.matrices import fourier print(fourier(3)) ``` Args: dim: The size of the Fourier matrix. Returns: The Fourier matrix of dimension `dim`. """ # Primitive root of unity. root_unity = np.exp(2 * 1j * np.pi / dim) entry_1 = np.arange(0, dim)[:, None] entry_2 = np.arange(0, dim) return np.power(root_unity, entry_1 * entry_2) / np.sqrt(dim)