Ë
    £�Djv;  ã                   ó  — d Z ddlZddlmZ ddlmZmZ d„ Zd&d„Z	d	„ Z
d'd
„Zd'd„Zd'd„Zg d¢Zedk(  �rF ed«       dZ ej$                  e«      ZdZ ej*                  g d¢«      Z ej*                  ddgddgddgddgddgddgddgddgddgddgddgddgg«      Zej0                  edez  f   Z e eeed¬«      «        e eeed¬«      «        e eee«      D � cg c]  }  ej6                  e| ez
  |  «      ‘Œ c} «        eeddd¬«      Z eeddd¬«      Z ee«        ee«        eeeez  z
  «        eeedz
  d…df    eedd¬«      «        eeedz  e dz  dz   …df    eedd¬«      «        eede dz   …df    eeed¬«      «        ed«       ej0                  edez  f   Z e eeddd¬«      «        e eeed¬«      «        e eeed¬«      «        eeedz
  d…dd…f    eedd¬«      «        eeedz  e dz  dz   …dd…f    eedd¬«      «        eede dz   …dd…f    eeed¬«      «        eeedz
  d  eeddd¬«      «        eeedz  e dz  dz     eeddd¬«      «        eede dz     eeed¬«      «       ddlmZ  eej@                  jC                  e ej*                  g d¢«      dz  d¬ «      «        ej*                  g d!¢«      Z" ee" e ej$                  d"«      dd«      «        ej*                  g d#¢«      Z# ee# e ej$                  d"«      dd«      «        ej*                  g d$¢«      Z$ ee$ e ej$                  d"«      d%d«      «       yyc c} w )(a®  using scipy signal and numpy correlate to calculate some time series
statistics

original developer notes

see also scikits.timeseries  (movstat is partially inspired by it)
added 2009-08-29
timeseries moving stats are in c, autocorrelation similar to here
I thought I saw moving stats somewhere in python, maybe not)


TODO

moving statistics
- filters do not handle boundary conditions nicely (correctly ?)
e.g. minimum order filter uses 0 for out of bounds value
-> append and prepend with last resp. first value
- enhance for nd arrays, with axis = 0



Note: Equivalence for 1D signals
>>> np.all(signal.correlate(x,[1,1,1],'valid')==np.correlate(x,[1,1,1]))
True
>>> np.all(ndimage.filters.correlate(x,[1,1,1], origin = -1)[:-3+1]==np.correlate(x,[1,1,1]))
True

# multidimensional, but, it looks like it uses common filter across time series, no VAR
ndimage.filters.correlate(np.vstack([x,x]),np.array([[1,1,1],[0,0,0]]), origin = 1)
ndimage.filters.correlate(x,[1,1,1],origin = 1))
ndimage.filters.correlate(np.vstack([x,x]),np.array([[0.5,0.5,0.5],[0.5,0.5,0.5]]), origin = 1)

>>> np.all(ndimage.filters.correlate(np.vstack([x,x]),np.array([[1,1,1],[0,0,0]]), origin = 1)[0]==ndimage.filters.correlate(x,[1,1,1],origin = 1))
True
>>> np.all(ndimage.filters.correlate(np.vstack([x,x]),np.array([[0.5,0.5,0.5],[0.5,0.5,0.5]]), origin = 1)[0]==ndimage.filters.correlate(x,[1,1,1],origin = 1))


update
2009-09-06: cosmetic changes, rearrangements
é    N)Úsignal)Úassert_array_equalÚassert_array_almost_equalc                 óú   — |}t        j                  | «      dk(  r|t        j                  | «      d   f}t         j                  t        j                  |«      | d   z  | t        j                  |«      | d   z  f   S )Né   é   r   éÿÿÿÿ)ÚnpÚndimÚshapeÚr_Úones)ÚxÚkÚkadds      úcC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\statsmodels/sandbox/tsa/movstat.pyÚ	expandarrr   3   sd   € à€DÜ	‡w�wˆqƒz�Q‚Ø”b—h‘h˜q“k !‘nÐ%ˆÜ�5‰5”—‘˜“˜q ™tÑ# A¤b§g¡g¨d£m°A°b±EÑ&9Ð9Ñ:Ð:ó    é   Úlaggedc                 óP  — |dk(  r|dz  }n|dk(  rd}n|dk(  r
| dz  dz   }nt         ‚t        j                  |«      r|}n'|dk(  r	|dz
  dz  }n|dk(  rd}n|d	k(  r|dz
  }nt         ‚t        | |«      }t	        j
                  |t        j                  |«      |«      ||z
  ||z     S )
an  moving order statistics

    Parameters
    ----------
    x : ndarray
       time series data
    order : float or 'med', 'min', 'max'
       which order statistic to calculate
    windsize : int
       window size
    lag : 'lagged', 'centered', or 'leading'
       location of window relative to current position

    Returns
    -------
    filtered array


    r   r   Úcenteredr   Úleadingr   ÚmedÚminÚmax)Ú
ValueErrorr
   Úisfiniter   r   Úorder_filterr   )r   ÚorderÚwindsizeÚlagÚleadÚordÚxexts          r   Úmovorderr&   :   sÅ   € ð, ˆh‚Ø˜‰{‰Ø	�
Ò	Ø‰Ø	�	Ò	Øˆy˜!‰|˜Q‰‰äÐÜ	‡{�{�5ÔØ‰Ø	�%ŠØ˜!‰|˜QÑ‰Ø	�%ŠØ‰Ø	�%ŠØ˜‰l‰äÐô �Q˜Ó!€Dä×Ñ˜t¤B§G¡G¨HÓ$5°cÓ:¸8ÀD¹=È8ÐTXÉ=ÐIYÐZÐZr   c                  ó&  — ddl m}  t        j                  dd«      }t	        |d¬«      }t        ||«       t        j                  ddd«      }t	        |d¬«      }t        ||«       t        t	        |dd	¬
«      dd |dd «       t        j                  ddt        j                  z  d«      }t        j                  |«      dz   }t	        |d¬«      }| j                  «        | j                  ||d||d«       | j                  d«       t	        |dd	¬
«      }| j                  «        | j                  ||d||d«       | j                  d«       t	        |dd¬
«      }| j                  «        | j                  ||d||d«       | j                  d«       y)zgraphical test for movorderr   Nr   é
   r   )r    r	   r   r   )r    r"   r   é   z.-zmoving max laggedzmoving max centeredr   zmoving max leading)Úmatplotlib.pylabÚpylabr
   Úaranger&   r   ÚlinspaceÚpiÚsinÚfigureÚplotÚtitle)Úpltr   ÚxoÚtts       r   Úcheck_movorderr6   h   sI  € å"Ü
�	‰	�!�B‹€AÜ	�!˜5Ô	!€BÜ�r˜1ÔÜ
�	‰	�"�Q�rÓ€AÜ	�!˜5Ô	!€BÜ�r˜1ÔÜ”x ¨°JÔ?ÀÀÐDÀaÈÈÀeÔLä	�‰�Q�qœŸ™‘w˜rÓ	"€BÜ
�‰ˆr‹
�Q‰€AÜ	�!˜5Ô	!€BØ‡J�J„LØ‡H�HˆR��$�r˜"˜TÔ"Ø‡I�IÐ!Ô"Ü	�!˜5 jÔ	1€BØ‡J�J„LØ‡H�HˆR��$�r˜"˜TÔ"Ø‡I�IÐ#Ô$Ü	�!˜5 iÔ	0€BØ‡J�J„LØ‡H�HˆR��$�r˜"˜TÔ"Ø‡I�IÐ"Õ#r   c                 ó    — t        | d||¬«      S )a°  moving window mean


    Parameters
    ----------
    x : ndarray
       time series data
    windsize : int
       window size
    lag : 'lagged', 'centered', or 'leading'
       location of window relative to current position

    Returns
    -------
    mk : ndarray
        moving mean, with same shape as x


    Notes
    -----
    for leading and lagging the data array x is extended by the closest value of the array


    r   ©Ú
windowsizer"   ©Ú	movmoment)r   r9   r"   s      r   Úmovmeanr<   �   s   € ô2 �Q˜ j°cÔ:Ð:r   c                 óN   — t        | d||¬«      }t        | d||¬«      }|||z  z
  S )aG  moving window variance


    Parameters
    ----------
    x : ndarray
       time series data
    windsize : int
       window size
    lag : 'lagged', 'centered', or 'leading'
       location of window relative to current position

    Returns
    -------
    mk : ndarray
        moving variance, with same shape as x


    r   r8   r   r:   )r   r9   r"   Úm1Úm2s        r   Úmovvarr@   ¸   s2   € ô( 
�1�a J°CÔ	8€BÜ	�1�a J°CÔ	8€BØ��2‘‰:Ðr   c                 ó´  — |}|dk(  r d}t        |dz
  xs dd|dz
  z  xs d«      }nr|dk(  r.| dz  }t        |dz
  |dz  z   xs d|dz
   |dz  z
  xs d«      }n?|dk(  r4| dz   }t        d|dz
  z  dz   |z   xs dd|dz
  z  |z    dz   xs d«      }nt        ‚t        j                  |«      t	        |«      z  }t        | |dz
  «      }t        |«       |j                  dk(  rt        j                  ||z  |d	«      |   S t        |j                  «       t        |dd…df   j                  «       t        j                  ||z  |dd…df   d	«      |dd…f   S )
a²  non-central moment


    Parameters
    ----------
    x : ndarray
       time series data
    windsize : int
       window size
    lag : 'lagged', 'centered', or 'leading'
       location of window relative to current position

    Returns
    -------
    mk : ndarray
        k-th moving non-central moment, with same shape as x


    Notes
    -----
    If data x is 2d, then moving moment is calculated for each
    column.

    r   r   r   Néþÿÿÿr   r   r   Úfull)Úslicer   r
   r   Úfloatr   Úprintr   Ú	correlater   r   )	r   r   r9   r"   r!   r#   ÚslÚavgkernr%   s	            r   r;   r;   Ð   s{  € ð4 €Hà
ˆh‚àˆÜ�H˜Q‘JÒ' 4¨¨X°a©Z©Ò)@¸DÓA‰Ø	�
Ò	Øˆy˜!‰|ˆÜ�H˜Q‘J ¨!¡Ñ+Ò3¨t°xÀ±z°]À8ÈQÁ;Ñ5NÒ5VÐRVÓW‰Ø	�	Ò	àˆy˜!‰|ˆÜ�1�h˜q‘j‘> !Ñ# DÑ(Ò0¨D°A°xÀ±z±NÀ4Ñ4GÐ2HÈÑ2JÒ2RÈdÓS‰äÐä�w‰w�zÓ"¤5¨Ó#4Ñ4€GÜ�Q˜ ™
Ó#€Dô 
ˆ"„Ià‡y�y�A‚~Ü�|‰|˜D !™G W¨fÓ5°bÑ9Ð9ô 	ˆd�j‰jÔÜˆg’a˜�f‰o×#Ñ#Ô$ô ×Ñ  a¡¨²°4°©¸&ÓAÀ"ÂQÀ$ÑGÐGr   )r&   r<   r@   r;   Ú__main__z!
checkin moving mean and variancer(   )ç        gUUUUUUÕ?ç      ð?g       @ç      @g      @ç      @ç      @ç      @ç       @gUUUUUU!@é	   rK   g#¬ÇqÌ?gÜ|
Çqì?g“vWUUå?g¥ÝÇUUU@r   r8   r   r   r   z-
checking moving moment for 2d (columns only))Úndimage)r   r   r   rM   )Úaxis)drK   gš™™™™™¹?ç333333Ó?ç333333ã?rL   ç      ø?çÍÌÌÌÌÌ @çffffff@çÍÌÌÌÌÌ@ç      @ç      @ç      @ç      @ç      !@ç      #@ç      %@ç      '@ç      )@ç      +@ç      -@ç      /@ç     €0@ç     €1@ç     €2@ç     €3@ç     €4@ç     €5@ç     €6@ç     €7@ç     €8@ç     €9@ç     €:@ç     €;@ç     €<@ç     €=@ç     €>@ç     €?@ç     @@@ç     À@@ç     @A@ç     ÀA@ç     @B@ç     ÀB@ç     @C@ç     ÀC@ç     @D@ç     ÀD@ç     @E@ç     ÀE@ç     @F@ç     ÀF@ç     @G@ç     ÀG@ç     @H@ç     ÀH@ç     @I@ç     ÀI@ç     @J@ç     ÀJ@ç     @K@ç     ÀK@ç     @L@ç     ÀL@ç     @M@ç     ÀM@ç     @N@ç     ÀN@ç     @O@ç     ÀO@ç      P@ç     `P@ç      P@ç     àP@ç      Q@ç     `Q@ç      Q@ç     àQ@ç      R@ç     `R@ç      R@ç     àR@ç      S@ç     `S@ç      S@ç     àS@ç      T@ç     `T@ç      T@ç     àT@ç      U@ç     `U@ç      U@ç     àU@ç      V@ç     `V@ç      V@ç     àV@ç      W@ç     `W@ç      W@éd   )krU   rV   rL   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   r±   r²   r³   r´   rµ   gš™™™™ÙW@gÍÌÌÌÌX@gš™™™™9X@g     `X@g     €X@gš™™™™™X@gÍÌÌÌÌ¬X@gš™™™™¹X@g     ÀX@)dg<b\tÑõ?gq§øè¢‹þ?g›¢mF]@gÖ‹¢‹.
@g$ÖÁE]@rN   rO   rP   rQ   g      "@g      $@g      &@g      (@g      *@g      ,@g      .@g      0@g      1@g      2@g      3@g      4@g      5@g      6@g      7@g      8@g      9@g      :@g      ;@g      <@g      =@g      >@g      ?@g      @@g     €@@g      A@g     €A@g      B@g     €B@g      C@g     €C@g      D@g     €D@g      E@g     €E@g      F@g     €F@g      G@g     €G@g      H@g     €H@g      I@g     €I@g      J@g     €J@g      K@g     €K@g      L@g     €L@g      M@g     €M@g      N@g     €N@g      O@g     €O@g      P@g     @P@g     €P@g     ÀP@g      Q@g     @Q@g     €Q@g     ÀQ@g      R@g     @R@g     €R@g     ÀR@g      S@g     @S@g     €S@g     ÀS@g      T@g     @T@g     €T@g     ÀT@g      U@g     @U@g     €U@g     ÀU@g      V@g     @V@g     €V@g     ÀV@g      W@g     @W@g     €W@gžâ£‹.ºW@gÙ§ë¢‹îW@gë’ÌEX@gb\tÑEX@gwŠ�.ºhX@é   )r   r   r   )r   r   )%Ú__doc__Únumpyr
   Úscipyr   Únumpy.testingr   r   r   r&   r6   r<   r@   r;   Ú__all__Ú__name__rF   Únobsr,   r   ÚwsÚarrayÚaveÚvaÚc_Úave2dÚrangeÚvarr>   r?   Úx2drS   ÚfiltersÚcorrelate1dÚxgÚxdÚxc)Úis   0r   ú<module>rÎ      sA  ðñ*óX Ý ç Gò;ó,[ò\$ój;ó6ó09Hòf 9€àˆzÓá	Ð
.Ô/Ø€DØˆ�	‰	�$‹€AØ	
€BØ
ˆ"�(‰(ò ó €Cà	ˆ�‰�R "Ð-Ø *Ð-Ø *Ð-Ø *Ð-Ø *Ð-Ø *Ð-Ø *Ð-Ø *Ð-Ø *Ð-Ø *Ð-Ø *Ð-Ø "Ð-ð/ó 
0€Bð �E‰E�#�q˜‘u�*Ñ€EÙ	‰'�! ¨Ô
1Ô2Ù	‰&�˜r xÔ
0Ô1Ù	¡e¨B°£oÖ
6 ˆ6ˆ2�6‰6�!�A�b‘D˜�)ÕÒ
6Ô7Ù	�1�a A¨8Ô	4€BÙ	�1�a A¨8Ô	4€BÙ	ˆ"„IÙ	ˆ"„IÙ	ˆ"ˆr�"‰u‰*Ôñ ˜b  A¡¡ q ™kÙ˜1¨°	Ô:ô<á˜b  Q¡¨ s¨A¡v¨a¡x °Ð!1Ñ2Ù˜1¨°
Ô;ô=á˜b  2 # a¡% ¨ ™lÙ˜1¨°Ô:ô<ñ
 
Ð
:Ô;Ø
�%‰%��1�Q‘3�‰-€CÙ	‰)�C˜ q¨jÔ
9Ô:Ù	‰'�# "¨(Ô
3Ô4Ù	‰&� ¨Ô
2Ô3Ù˜b  A¡¡¢q ™kÙ˜3¨1°)Ô<ô>á˜b  Q¡¨ s¨A¡v¨a¡x ²Ð!1Ñ2Ù˜3¨1°*Ô=ô?á˜b  2 # a¡% ª ™lÙ˜3¨2°8Ô<ô>ñ ˜e B q¡D E˜lÙ˜c 1°¸	ÔBôDá˜e B¨¡E¨2¨#¨q©&°©(Ð3Ù˜c 1°¸
ÔCôEá˜e F b S¨¡U˜mÙ˜C¨B°HÔ=ô?õ Ù	ˆ'�/‰/×
%Ñ
% c¨8¨2¯8©8²GÓ+<¸RÑ+?ÀaÐ
%Ó
HÔIð
 
ˆ�‰ò ó 
€Bñ ˜b¡'¨)¨"¯)©)°C«.¸"¸XÓ"FÔGà	ˆ�‰ò Gó 
H€Bñ ˜b¡'¨)¨"¯)©)°C«.¸"¸YÓ"GÔHà	ˆ�‰ò Gó 
H€Bñ2 ˜b¡'¨)¨"¯)©)°C«.¸"¸ZÓ"HÕIðo ùò. 7s   Ã M<