def METHOD_NAME():
    grid = make_pupil_grid(32)
    fourier_grid = make_fft_grid(grid, 1, 0.2)
    # Cosine modes
    cosine_modes = make_cosine_basis(grid, fourier_grid)
    num_modes = len(cosine_modes)
    for i, m1 in enumerate(cosine_modes):
        for j, m2 in enumerate(cosine_modes):
            product = np.sum((m1.conj() * m2) * grid.weights).real
            assert np.abs(product - np.eye(num_modes)[i, j]) < 1e-12
    # Sine modes
    sine_modes = make_sine_basis(grid, fourier_grid)
    num_modes = len(sine_modes)
    for i, m1 in enumerate(sine_modes):
        for j, m2 in enumerate(sine_modes):
            product = np.sum((m1.conj() * m2) * grid.weights).real
            assert np.abs(product - np.eye(num_modes)[i, j]) < 1e-12
    # Fourier basis
    fourier_modes = make_fourier_basis(grid, fourier_grid)
    num_modes = len(fourier_modes)
    for i, m1 in enumerate(fourier_modes):
        for j, m2 in enumerate(fourier_modes):
            product = np.sum((m1.conj() * m2) * grid.weights).real
            assert np.abs(product - np.eye(num_modes)[i, j]) < 1e-12
    # Complex Fourier basis
    complex_fourier_modes = make_complex_fourier_basis(grid, fourier_grid)
    num_modes = len(complex_fourier_modes)
    for i, m1 in enumerate(complex_fourier_modes):
        for j, m2 in enumerate(complex_fourier_modes):
            product = np.sum((m1.conj() * m2) * grid.weights).real
            assert np.abs(product - np.eye(num_modes)[i, j]) < 1e-12