U
    Kvf#                  
   @   s
  d Z ddlZddlmZ ddlmZmZ zddlm	Z
 W n  ek
rX   ddlm	Z
 Y nX ddlmZ eddjZed	d
jZeddgddggddgddgggZedZejd Zed Zejeedddddf ddZejeedddddf ddZeedddddf eZedddddf Zeee ejd d ddf Ze e
eej eedddf e!  eedddf e!  dd Z"edZe"eedddddf Z#e e#edd edd   e"eeddddddf Z$e e%e$eddddf &dedd &d dddf k ee'e(dddddf eZ)ej*+dZ,ee,eddgZ-eej.e/de,f eddgZ0e1dgddge,Z2e/dZ3e4ddD ]&Z5de3e5d   e,e5d   e3e5< qe/dZ6e4ddD ]"Z5e,e5 de,e5d    e6e5< q&e d e e7e6dd e3dd e-dd e2dd e0dd f dd Z8e e8e3dd e2 e e8e3dd e0dd  ej*+dd Z9edddgddd!ggZ:edddgdd"d"ggZ:edddgdd"d"ggZ:edddgdd"d"ggZ:ej.ed#de;d  f Z<ej.ed#de;d  f Z<ee9e:Z=e/d$Z>e4ddD ]8Z5e&e:dddf e>e5d   e,e5d   e>e5< qe/d%Z?de?d< edddgdd"d"ggZ:eej.e/d&e?f e:dd  edddgdd'd"ggZ:eej.e/d&e?f e:dd  edd"d"gd"dd"gd"d"dggdd"d"gd"dd"gd"d"dgggZ@eddd"gd"dd"gd"d"dggdd"d"gd"dd"gd"d"dgggZ@eej.e/d&e?f dddddf e@jdd ZAeAeAdddddf  ZBeddd"gd"dd"gd"d"dggdd(d"gdd"d"gd"d"dgggZ@eej.e/d&e?f dddddf e@dd ZAeAeAdddddf  ZBeeCe?e?e?fe@dddddf  d)ZDe/eDd fZ?de?d< e/eDd d fZ>e4deDd D ]<Z5eEe@dddddf e>e5d  e?e5d   e>e5< qe/eDd d d fZFe@d eFdddddf< e@d  eFdddddf< e4deDd D ]@Z5eEe@d  eFe5d ddddf eFe5ddddf< qeddd"gd"dd"gd"d"dggdd(d"gdd"d"gd"d"dgggZGd)ZDedd"gd"dggdd"gd*dgggZHe/eDd ddfZIeHd eIdddddf< eHd  eIdddddf< e4deDd D ]@Z5eEeHd  eIe5d ddddf eIe5ddddf< qd)ZDe/eDdfZ?de?d+< edd"gd"dggdd"gd!dgggZJe/eDd dfZKe4deDd D ]>Z5eEeJdddddf  eKe5d  e?e5d   eKe5< 	qXej*+d)dZLe/eDd dfZMe4deDd D ]>Z5eEeJdddddf  eMe5d  eLe5d   eMe5< 	qe/eDd ddfZNeJd eNdddddf< eJd  eNdddddf< e4deDd D ]@Z5eEeJd  eNe5d ddddf eNe5ddddf< 
q^d,ZOe/eOdeO  ZPejQRePZSe eS e ejTjUeSd-d.d/d0 dS )1a  trying out VAR filtering and multidimensional fft

Note: second half is copy and paste and does not run as script
incomplete definitions of variables, some I created in shell

Created on Thu Jan 07 12:23:40 2010

Author: josef-pktd

update 2010-10-22
2 arrays were not defined, copied from fft_filter.log.py but I did not check
what the results are.
Runs now without raising exception
    N)assert_equal)signalstats)	_centered)fftconvolveinv(   )      <   )   r	   g      ?g      ?)r   r   r   r   validmode   c           	      C   sb  t | } t |}| jdkr.| dddf } | jdkr@td| jd }|jd }|d }|jdkrtj| |dddf ddS |jdkrt|jdkrtj| |ddS t | jd | d |f}t	|D ]8}tj| dd|f |dd|f dd|dd|f< q|S |jdkr^t| dddddf |}||| |jd d ddf }|S dS )	a0  apply an autoregressive filter to a series x

    x can be 2d, a can be 1d, 2d, or 3d

    Parameters
    ----------
    x : array_like
        data array, 1d or 2d, if 2d then observations in rows
    a : array_like
        autoregressive filter coefficients, ar lag polynomial
        see Notes

    Returns
    -------
    y : ndarray, 2d
        filtered array, number of columns determined by x and a

    Notes
    -----

    In general form this uses the linear filter ::

        y = a(L)x

    where
    x : nobs, nvars
    a : nlags, nvars, npoly

    Depending on the shape and dimension of a this uses different
    Lag polynomial arrays

    case 1 : a is 1d or (nlags,1)
        one lag polynomial is applied to all variables (columns of x)
    case 2 : a is 2d, (nlags, nvars)
        each series is independently filtered with its own
        lag polynomial, uses loop over nvar
    case 3 : a is 3d, (nlags, nvars, npoly)
        the ith column of the output array is given by the linear filter
        defined by the 2d array a[:,:,i], i.e. ::

            y[:,i] = a(.,.,i)(L) * x
            y[t,i] = sum_p sum_j a(p,j,i)*x(t-p,j)
                     for p = 0,...nlags-1, j = 0,...nvars-1,
                     for all t >= nlags


    Note: maybe convert to axis=1, Not

    TODO: initial conditions

    r   Nr   zx array has to be 1d or 2dr   r   r   r   )
npZasarrayndim
ValueErrorshaper   convolveminzerosrange)	xaZnvarnlagsntrimresultiyfyvalid r    L/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/sandbox/tsa/try_var_convolve.pyarfilter7   s,    4






6"r"   i  gd     g?z<
 compare: 
errloop - arloop - fft - lfilter - fftp (padded)         c                 C   s   t t | | S )N)r   maxabs)r   yr    r    r!   maxabs   s    r,   r   g?g        )r   r   )r%   r   )
   r   )r$   r   g      g?r-   g)r   r      gBi?g?gףp=
C@)locZscale)V__doc__Znumpyr   Znumpy.testingr   Zscipyr   r   Zscipy.signal._signaltoolsr   Ztrim_centeredImportErrorZscipy.signal.signaltoolsZ#statsmodels.tsa.filters.filtertoolsr   ZfftconvolveZarangeZreshapeTr   arrayZa3fZonesr   r   r   r   Zy0y1r   r+   r   printZravelr"   Zy0arZyresallsumZastypefloatZyffrandomZrandnZrvsZar1fftZr_r   Zar1fftpZlfilterZar1lfZar1r   r   Zerrar1Zcolumn_stackr,   Zrvs3Za3nZeyeZa3neZar13fftZar13impZa3n3ZtttZgfttZdstackZnobsdotZa3n3invZa3n3syr   Za2n3invZa2Zar12uZar12rZa2invZnbinsZbinProbadd
accumulateZ
binSumProbgammaZppfr    r    r    r!   <module>   s:  

"""Z
 F"$
$	
 .


6
""64*:>
>
<<>