ó
î&]\c           @` sa  d  Z  d d l m Z m Z m Z d d d d d d d	 d
 g Z d d l Z d d l m	 Z	 d d l
 m Z m Z m Z d d l m Z d d l Z e j e	 j ƒ e j e	 j ƒ e j e	 j ƒ e j e	 j ƒ e j e	 j ƒ e j e	 j ƒ e j e	 j ƒ e j e	 j ƒ e j e	 j ƒ e j e	 j ƒ d d d d e d „ Z d d d d e d „ Z d d d d e d „ Z  d d d d e d „ Z! d d d d e d „ Z" d d d d e d „ Z# d „  Z$ d „  Z% d „  Z& d „  Z' d „  Z( d „  Z) d d e d d „ Z* d d d d e d „ Z+ d d d d e d „ Z, d  „  Z- d d e d d! „ Z. d S("   s+   
Real spectrum transforms (DCT, DST, MDCT)
i    (   t   divisiont   print_functiont   absolute_importt   dctt   idctt   dstt   idstt   dctnt   idctnt   dstnt   idstnN(   t   _fftpack(   t   _datacopiedt
   _fix_shapet	   _asfarray(   t   _init_nd_shape_and_axesi   c         C` su   t  j |  ƒ }  t |  | | ƒ \ } } xG t | | ƒ D]6 \ } } t |  d | d | d | d | d | ƒ}  q7 W|  S(   sR  
    Return multidimensional Discrete Cosine Transform along the specified axes.

    Parameters
    ----------
    x : array_like
        The input array.
    type : {1, 2, 3, 4}, optional
        Type of the DCT (see Notes). Default type is 2.
    shape : int or array_like of ints or None, optional
        The shape of the result.  If both `shape` and `axes` (see below) are
        None, `shape` is ``x.shape``; if `shape` is None but `axes` is
        not None, then `shape` is ``scipy.take(x.shape, axes, axis=0)``.
        If ``shape[i] > x.shape[i]``, the i-th dimension is padded with zeros.
        If ``shape[i] < x.shape[i]``, the i-th dimension is truncated to
        length ``shape[i]``.
        If any element of `shape` is -1, the size of the corresponding
        dimension of `x` is used.
    axes : int or array_like of ints or None, optional
        Axes along which the DCT is computed.
        The default is over all axes.
    norm : {None, 'ortho'}, optional
        Normalization mode (see Notes). Default is None.
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    y : ndarray of real
        The transformed input array.

    See Also
    --------
    idctn : Inverse multidimensional DCT

    Notes
    -----
    For full details of the DCT types and normalization modes, as well as
    references, see `dct`.

    Examples
    --------
    >>> from scipy.fftpack import dctn, idctn
    >>> y = np.random.randn(16, 16)
    >>> np.allclose(y, idctn(dctn(y, norm='ortho'), norm='ortho'))
    True

    t   typet   nt   axist   normt   overwrite_x(   t   npt
   asanyarrayR   t   zipR   (   t   xR   t   shapet   axesR   R   R   t   ax(    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR      s
    1.c         C` su   t  j |  ƒ }  t |  | | ƒ \ } } xG t | | ƒ D]6 \ } } t |  d | d | d | d | d | ƒ}  q7 W|  S(   sL  
    Return multidimensional Discrete Cosine Transform along the specified axes.

    Parameters
    ----------
    x : array_like
        The input array.
    type : {1, 2, 3, 4}, optional
        Type of the DCT (see Notes). Default type is 2.
    shape : int or array_like of ints or None, optional
        The shape of the result.  If both `shape` and `axes` (see below) are
        None, `shape` is ``x.shape``; if `shape` is None but `axes` is
        not None, then `shape` is ``scipy.take(x.shape, axes, axis=0)``.
        If ``shape[i] > x.shape[i]``, the i-th dimension is padded with zeros.
        If ``shape[i] < x.shape[i]``, the i-th dimension is truncated to
        length ``shape[i]``.
        If any element of `shape` is -1, the size of the corresponding
        dimension of `x` is used.
    axes : int or array_like of ints or None, optional
        Axes along which the IDCT is computed.
        The default is over all axes.
    norm : {None, 'ortho'}, optional
        Normalization mode (see Notes). Default is None.
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    y : ndarray of real
        The transformed input array.

    See Also
    --------
    dctn : multidimensional DCT

    Notes
    -----
    For full details of the IDCT types and normalization modes, as well as
    references, see `idct`.

    Examples
    --------
    >>> from scipy.fftpack import dctn, idctn
    >>> y = np.random.randn(16, 16)
    >>> np.allclose(y, idctn(dctn(y, norm='ortho'), norm='ortho'))
    True

    R   R   R   R   R   (   R   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR   T   s    1!c         C` su   t  j |  ƒ }  t |  | | ƒ \ } } xG t | | ƒ D]6 \ } } t |  d | d | d | d | d | ƒ}  q7 W|  S(   sP  
    Return multidimensional Discrete Sine Transform along the specified axes.

    Parameters
    ----------
    x : array_like
        The input array.
    type : {1, 2, 3, 4}, optional
        Type of the DCT (see Notes). Default type is 2.
    shape : int or array_like of ints or None, optional
        The shape of the result.  If both `shape` and `axes` (see below) are
        None, `shape` is ``x.shape``; if `shape` is None but `axes` is
        not None, then `shape` is ``scipy.take(x.shape, axes, axis=0)``.
        If ``shape[i] > x.shape[i]``, the i-th dimension is padded with zeros.
        If ``shape[i] < x.shape[i]``, the i-th dimension is truncated to
        length ``shape[i]``.
        If any element of `shape` is -1, the size of the corresponding
        dimension of `x` is used.
    axes : int or array_like of ints or None, optional
        Axes along which the DCT is computed.
        The default is over all axes.
    norm : {None, 'ortho'}, optional
        Normalization mode (see Notes). Default is None.
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    y : ndarray of real
        The transformed input array.

    See Also
    --------
    idstn : Inverse multidimensional DST

    Notes
    -----
    For full details of the DST types and normalization modes, as well as
    references, see `dst`.

    Examples
    --------
    >>> from scipy.fftpack import dstn, idstn
    >>> y = np.random.randn(16, 16)
    >>> np.allclose(y, idstn(dstn(y, norm='ortho'), norm='ortho'))
    True

    R   R   R   R   R   (   R   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR	      s
    1.c         C` su   t  j |  ƒ }  t |  | | ƒ \ } } xG t | | ƒ D]6 \ } } t |  d | d | d | d | d | ƒ}  q7 W|  S(   sJ  
    Return multidimensional Discrete Sine Transform along the specified axes.

    Parameters
    ----------
    x : array_like
        The input array.
    type : {1, 2, 3, 4}, optional
        Type of the DCT (see Notes). Default type is 2.
    shape : int or array_like of ints or None, optional
        The shape of the result.  If both `shape` and `axes` (see below) are
        None, `shape` is ``x.shape``; if `shape` is None but `axes` is
        not None, then `shape` is ``scipy.take(x.shape, axes, axis=0)``.
        If ``shape[i] > x.shape[i]``, the i-th dimension is padded with zeros.
        If ``shape[i] < x.shape[i]``, the i-th dimension is truncated to
        length ``shape[i]``.
        If any element of `shape` is -1, the size of the corresponding
        dimension of `x` is used.
    axes : int or array_like of ints or None, optional
        Axes along which the IDCT is computed.
        The default is over all axes.
    norm : {None, 'ortho'}, optional
        Normalization mode (see Notes). Default is None.
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    y : ndarray of real
        The transformed input array.

    See Also
    --------
    dctn : multidimensional DST

    Notes
    -----
    For full details of the IDST types and normalization modes, as well as
    references, see `idst`.

    Examples
    --------
    >>> from scipy.fftpack import dstn, idstn
    >>> y = np.random.randn(16, 16)
    >>> np.allclose(y, idstn(dstn(y, norm='ortho'), norm='ortho'))
    True

    R   R   R   R   R   (   R   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR
   Å   s    1!iÿÿÿÿc      	   C` s   t  |  | | | d | d | ƒS(   st  
    Return the Discrete Cosine Transform of arbitrary type sequence x.

    Parameters
    ----------
    x : array_like
        The input array.
    type : {1, 2, 3, 4}, optional
        Type of the DCT (see Notes). Default type is 2.
    n : int, optional
        Length of the transform.  If ``n < x.shape[axis]``, `x` is
        truncated.  If ``n > x.shape[axis]``, `x` is zero-padded. The
        default results in ``n = x.shape[axis]``.
    axis : int, optional
        Axis along which the dct is computed; the default is over the
        last axis (i.e., ``axis=-1``).
    norm : {None, 'ortho'}, optional
        Normalization mode (see Notes). Default is None.
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    y : ndarray of real
        The transformed input array.

    See Also
    --------
    idct : Inverse DCT

    Notes
    -----
    For a single dimension array ``x``, ``dct(x, norm='ortho')`` is equal to
    MATLAB ``dct(x)``.

    There are theoretically 8 types of the DCT, only the first 4 types are
    implemented in scipy. 'The' DCT generally refers to DCT type 2, and 'the'
    Inverse DCT generally refers to DCT type 3.

    **Type I**

    There are several definitions of the DCT-I; we use the following
    (for ``norm=None``)::

                                         N-2
      y[k] = x[0] + (-1)**k x[N-1] + 2 * sum x[n]*cos(pi*k*n/(N-1))
                                         n=1

    If ``norm='ortho'``, ``x[0]`` and ``x[N-1]`` are multiplied by
    a scaling factor of ``sqrt(2)``, and ``y[k]`` is multiplied by a
    scaling factor `f`::

      f = 0.5*sqrt(1/(N-1)) if k = 0 or N-1,
      f = 0.5*sqrt(2/(N-1)) otherwise.

    .. versionadded:: 1.2.0
       Orthonormalization in DCT-I.

    .. note::
       The DCT-I is only supported for input size > 1.

    **Type II**

    There are several definitions of the DCT-II; we use the following
    (for ``norm=None``)::


                N-1
      y[k] = 2* sum x[n]*cos(pi*k*(2n+1)/(2*N)), 0 <= k < N.
                n=0

    If ``norm='ortho'``, ``y[k]`` is multiplied by a scaling factor `f`::

      f = sqrt(1/(4*N)) if k = 0,
      f = sqrt(1/(2*N)) otherwise.

    Which makes the corresponding matrix of coefficients orthonormal
    (``OO' = Id``).

    **Type III**

    There are several definitions, we use the following
    (for ``norm=None``)::

                        N-1
      y[k] = x[0] + 2 * sum x[n]*cos(pi*(k+0.5)*n/N), 0 <= k < N.
                        n=1

    or, for ``norm='ortho'`` and 0 <= k < N::

                                          N-1
      y[k] = x[0] / sqrt(N) + sqrt(2/N) * sum x[n]*cos(pi*(k+0.5)*n/N)
                                          n=1

    The (unnormalized) DCT-III is the inverse of the (unnormalized) DCT-II, up
    to a factor `2N`. The orthonormalized DCT-III is exactly the inverse of
    the orthonormalized DCT-II.

    **Type IV**

    There are several definitions of the DCT-IV; we use the following
    (for ``norm=None``)::


                N-1
      y[k] = 2* sum x[n]*cos(pi*(2k+1)*(2n+1)/(4*N)), 0 <= k < N.
                n=0

    If ``norm='ortho'``, ``y[k]`` is multiplied by a scaling factor `f`::

      f = 0.5*sqrt(2/N)

    .. versionadded:: 1.2.0
       Support for DCT-IV.

    References
    ----------
    .. [1] 'A Fast Cosine Transform in One and Two Dimensions', by J.
           Makhoul, `IEEE Transactions on acoustics, speech and signal
           processing` vol. 28(1), pp. 27-34,
           :doi:`10.1109/TASSP.1980.1163351` (1980).
    .. [2] Wikipedia, "Discrete cosine transform",
           https://en.wikipedia.org/wiki/Discrete_cosine_transform

    Examples
    --------
    The Type 1 DCT is equivalent to the FFT (though faster) for real,
    even-symmetrical inputs.  The output is also real and even-symmetrical.
    Half of the FFT input is used to generate half of the FFT output:

    >>> from scipy.fftpack import fft, dct
    >>> fft(np.array([4., 3., 5., 10., 5., 3.])).real
    array([ 30.,  -8.,   6.,  -2.,   6.,  -8.])
    >>> dct(np.array([4., 3., 5., 10.]), 1)
    array([ 30.,  -8.,   6.,  -2.])

    t	   normalizeR   (   t   _dct(   R   R   R   R   R   R   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR   þ   s    Šc      	   C` sE   i d d 6d d 6d d 6d d 6} t  |  | | | | d | d | ƒS(   s"  
    Return the Inverse Discrete Cosine Transform of an arbitrary type sequence.

    Parameters
    ----------
    x : array_like
        The input array.
    type : {1, 2, 3, 4}, optional
        Type of the DCT (see Notes). Default type is 2.
    n : int, optional
        Length of the transform.  If ``n < x.shape[axis]``, `x` is
        truncated.  If ``n > x.shape[axis]``, `x` is zero-padded. The
        default results in ``n = x.shape[axis]``.
    axis : int, optional
        Axis along which the idct is computed; the default is over the
        last axis (i.e., ``axis=-1``).
    norm : {None, 'ortho'}, optional
        Normalization mode (see Notes). Default is None.
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    idct : ndarray of real
        The transformed input array.

    See Also
    --------
    dct : Forward DCT

    Notes
    -----
    For a single dimension array `x`, ``idct(x, norm='ortho')`` is equal to
    MATLAB ``idct(x)``.

    'The' IDCT is the IDCT of type 2, which is the same as DCT of type 3.

    IDCT of type 1 is the DCT of type 1, IDCT of type 2 is the DCT of type
    3, and IDCT of type 3 is the DCT of type 2. IDCT of type 4 is the DCT
    of type 4. For the definition of these types, see `dct`.

    Examples
    --------
    The Type 1 DCT is equivalent to the DFT for real, even-symmetrical
    inputs.  The output is also real and even-symmetrical.  Half of the IFFT
    input is used to generate half of the IFFT output:

    >>> from scipy.fftpack import ifft, idct
    >>> ifft(np.array([ 30.,  -8.,   6.,  -2.,   6.,  -8.])).real
    array([  4.,   3.,   5.,  10.,   5.,   3.])
    >>> idct(np.array([ 30.,  -8.,   6.,  -2.]), 1) / 6
    array([  4.,   3.,   5.,  10.])

    i   i   i   i   R   R   (   R   (   R   R   R   R   R   R   t   _TP(    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR   ‹  s    8"c         C` sŽ   y i d d 6d d 6| j  } Wn! t k
 rB t d | ƒ ‚ n Xy t t | |  ƒ } Wn- t k
 r‰ } t t | ƒ d |  ƒ ‚ n X| S(   Ns   ddct%dt   float64s   dct%dt   float32s   dtype %s not supporteds   . Type %d not understood(   t   namet   KeyErrort
   ValueErrort   getattrR   t   AttributeErrort   str(   R   t   dtypeR!   t   ft   e(    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyt   _get_dct_funÇ  s    c         C` sD   y i d d  6d d 6|  } Wn! t k
 r? t d |  ƒ ‚ n X| S(   Ni    i   t   orthos   Unknown normalize mode %s(   t   NoneR"   R#   (   R   t   nm(    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyt   _get_norm_modeÓ  s
    c         C` s£   t  |  ƒ } t | |  ƒ } | d  k r7 | j | } n: | | j | k rq t | | | ƒ \ } } | pk | } n  | d k  r– t d | | f ƒ ‚ n  | | | f S(   Ni   s0   Invalid number of %s data points (%d) specified.(   R   R   R,   R   R   R#   (   R   R   R   t
   dct_or_dstt   tmpt	   copy_madet
   copy_made2(    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyt   __fix_shapeÛ  s    c         C` s+   t  | |  j ƒ } t | |  | | | | ƒ S(   N(   R*   R'   t	   _eval_fun(   t   x0R   R   R   R-   R   R(   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyt   _raw_dcté  s    c         C` s+   t  | |  j ƒ } t | |  | | | | ƒ S(   N(   t   _get_dst_funR'   R4   (   R5   R   R   R   R-   R   R(   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyt   _raw_dstî  s    c         C` su   | d k s% | t  | j ƒ d k r8 |  | | | | ƒ St j | | d ƒ } |  | | | | ƒ } t j | | d ƒ S(   Niÿÿÿÿi   (   t   lenR   R   t   swapaxes(   R(   R0   R   R   R-   R   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR4   ó  s
    %c   	   	   C` sÅ   t  |  | | d ƒ \ } } } | d k rE | d k  rE t d ƒ ‚ n  | pN | } t | ƒ } t j | ƒ r¨ t | j | | | | | ƒ d t | j | | | | | ƒ St | | | | | | ƒ Sd S(   s~  
    Return Discrete Cosine Transform of arbitrary type sequence x.

    Parameters
    ----------
    x : array_like
        input array.
    n : int, optional
        Length of the transform.  If ``n < x.shape[axis]``, `x` is
        truncated.  If ``n > x.shape[axis]``, `x` is zero-padded. The
        default results in ``n = x.shape[axis]``.
    axis : int, optional
        Axis along which the dct is computed; the default is over the
        last axis (i.e., ``axis=-1``).
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    z : ndarray

    t   DCTi   i   s!   DCT-I is not defined for size < 2y              ð?N(   R3   R#   R.   R   t   iscomplexobjR6   t   realt   imag(	   R   R   R   R   R   R   R5   R1   R-   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR   ü  s    c      	   C` s   t  |  | | | d | d | ƒS(   sì  
    Return the Discrete Sine Transform of arbitrary type sequence x.

    Parameters
    ----------
    x : array_like
        The input array.
    type : {1, 2, 3, 4}, optional
        Type of the DST (see Notes). Default type is 2.
    n : int, optional
        Length of the transform.  If ``n < x.shape[axis]``, `x` is
        truncated.  If ``n > x.shape[axis]``, `x` is zero-padded. The
        default results in ``n = x.shape[axis]``.
    axis : int, optional
        Axis along which the dst is computed; the default is over the
        last axis (i.e., ``axis=-1``).
    norm : {None, 'ortho'}, optional
        Normalization mode (see Notes). Default is None.
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    dst : ndarray of reals
        The transformed input array.

    See Also
    --------
    idst : Inverse DST

    Notes
    -----
    For a single dimension array ``x``.

    There are theoretically 8 types of the DST for different combinations of
    even/odd boundary conditions and boundary off sets [1]_, only the first
    3 types are implemented in scipy.

    **Type I**

    There are several definitions of the DST-I; we use the following
    for ``norm=None``.  DST-I assumes the input is odd around n=-1 and n=N. ::

                 N-1
      y[k] = 2 * sum x[n]*sin(pi*(k+1)*(n+1)/(N+1))
                 n=0

    Note that the DST-I is only supported for input size > 1
    The (unnormalized) DST-I is its own inverse, up to a factor `2(N+1)`.
    The orthonormalized DST-I is exactly its own inverse.

    **Type II**

    There are several definitions of the DST-II; we use the following
    for ``norm=None``.  DST-II assumes the input is odd around n=-1/2 and
    n=N-1/2; the output is odd around k=-1 and even around k=N-1 ::

                N-1
      y[k] = 2* sum x[n]*sin(pi*(k+1)*(n+0.5)/N), 0 <= k < N.
                n=0

    if ``norm='ortho'``, ``y[k]`` is multiplied by a scaling factor `f` ::

        f = sqrt(1/(4*N)) if k == 0
        f = sqrt(1/(2*N)) otherwise.

    **Type III**

    There are several definitions of the DST-III, we use the following
    (for ``norm=None``).  DST-III assumes the input is odd around n=-1
    and even around n=N-1 ::

                                 N-2
      y[k] = x[N-1]*(-1)**k + 2* sum x[n]*sin(pi*(k+0.5)*(n+1)/N), 0 <= k < N.
                                 n=0

    The (unnormalized) DST-III is the inverse of the (unnormalized) DST-II, up
    to a factor `2N`.  The orthonormalized DST-III is exactly the inverse of
    the orthonormalized DST-II.

    .. versionadded:: 0.11.0

    **Type IV**

    There are several definitions of the DST-IV, we use the following
    (for ``norm=None``).  DST-IV assumes the input is odd around n=-0.5
    and even around n=N-0.5 ::

                N-1
      y[k] = 2* sum x[n]*sin(pi*(k+0.5)*(n+0.5)/N), 0 <= k < N.
                n=0

    The (unnormalized) DST-IV is its own inverse, up
    to a factor `2N`.  The orthonormalized DST-IV is exactly its own inverse.

    .. versionadded:: 1.2.0
       Support for DST-IV.

    References
    ----------
    .. [1] Wikipedia, "Discrete sine transform",
           https://en.wikipedia.org/wiki/Discrete_sine_transform

    R   R   (   t   _dst(   R   R   R   R   R   R   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR     s    ic      	   C` sE   i d d 6d d 6d d 6d d 6} t  |  | | | | d | d | ƒS(   sÒ  
    Return the Inverse Discrete Sine Transform of an arbitrary type sequence.

    Parameters
    ----------
    x : array_like
        The input array.
    type : {1, 2, 3, 4}, optional
        Type of the DST (see Notes). Default type is 2.
    n : int, optional
        Length of the transform.  If ``n < x.shape[axis]``, `x` is
        truncated.  If ``n > x.shape[axis]``, `x` is zero-padded. The
        default results in ``n = x.shape[axis]``.
    axis : int, optional
        Axis along which the idst is computed; the default is over the
        last axis (i.e., ``axis=-1``).
    norm : {None, 'ortho'}, optional
        Normalization mode (see Notes). Default is None.
    overwrite_x : bool, optional
        If True, the contents of `x` can be destroyed; the default is False.

    Returns
    -------
    idst : ndarray of real
        The transformed input array.

    See Also
    --------
    dst : Forward DST

    Notes
    -----
    'The' IDST is the IDST of type 2, which is the same as DST of type 3.

    IDST of type 1 is the DST of type 1, IDST of type 2 is the DST of type
    3, and IDST of type 3 is the DST of type 2. For the definition of these
    types, see `dst`.

    .. versionadded:: 0.11.0

    i   i   i   i   R   R   (   R?   (   R   R   R   R   R   R   R   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR   ‹  s    +"c         C` sŽ   y i d d 6d d 6| j  } Wn! t k
 rB t d | ƒ ‚ n Xy t t | |  ƒ } Wn- t k
 r‰ } t t | ƒ d |  ƒ ‚ n X| S(   Ns   ddst%dR   s   dst%dR    s   dtype %s not supporteds   . Type %d not understood(   R!   R"   R#   R$   R   R%   R&   (   R   R'   R!   R(   R)   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR7   º  s    c   	   	   C` sÅ   t  |  | | d ƒ \ } } } | d k rE | d k  rE t d ƒ ‚ n  | pN | } t | ƒ } t j | ƒ r¨ t | j | | | | | ƒ d t | j | | | | | ƒ St | | | | | | ƒ Sd S(   s¬  
    Return Discrete Sine Transform of arbitrary type sequence x.

    Parameters
    ----------
    x : array_like
        input array.
    n : int, optional
        Length of the transform.
    axis : int, optional
        Axis along which the dst is computed. (default=-1)
    overwrite_x : bool, optional
        If True the contents of x can be destroyed. (default=False)

    Returns
    -------
    z : real ndarray

    t   DSTi   i   s!   DST-I is not defined for size < 2y              ð?N(   R3   R#   R.   R   R<   R8   R=   R>   (	   R   R   R   R   R   R   R5   R1   R-   (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyR?   Æ  s    (/   t   __doc__t
   __future__R    R   R   t   __all__t   numpyR   t   scipy.fftpackR   t   scipy.fftpack.basicR   R   R   t   scipy.fftpack.helperR   t   atexitt   registert   destroy_ddct1_cachet   destroy_ddct2_cachet   destroy_ddct4_cachet   destroy_dct1_cachet   destroy_dct2_cachet   destroy_dct4_cachet   destroy_ddst1_cachet   destroy_ddst2_cachet   destroy_dst1_cachet   destroy_dst2_cacheR,   t   FalseR   R   R	   R
   R   R   R*   R.   R3   R6   R8   R4   R   R   R   R7   R?   (    (    (    s;   lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyt   <module>   sD   8989<							#l/	