# -------------------------------------------------------------
#  Functions for "fast" Fourier transform and Fourier synthesis
#  using numpy tools
# -------------------------------------------------------------
import numpy as np

def dft_fast_coeff(x):
    """
    Evaluate Fourier coefficients using Numpy's fast Fourier transform.
    This routine only returns the coefficients for the positive frequencies.
    If N is even, it goes up to n=N/2.
    If N is odd, it goes up to n=(N-1)/2.
    :param x: array of function samples
    """
    return np.fft.rfft(x, norm='forward')


def dft_fast_synthesis(fc, outnum='even'):
    """
    Use numpy's fast Fourier synthesis taking only Fourier coefficients for positive frequencies
    :param fc: aray of coefficients for positive frequencies only.
    :param outnum: specifies if output time series has an even or odd number of samples (default: 'even')
    """
    ns = 2*fc.size-2
    if outnum == 'odd': ns = 2*fc.size-1
    return np.fft.irfft(fc, ns, norm='forward')