U
    f/e(                     @   s|  d dl Zd dlZd dlmZmZ d dlmZ ej	
ddddgdd Zej	
ddddgd	d
 Zdd Zej	
dddgej	
dddgdd Zdd Zej	
deejddgddejddgfeejddgddejddgfeejddgddejddgfeejddgddejddgfedejdgdddejdgfedejdgdddejdgfedejdgdddejdgfedejdgdddejdgfeejdejejdejgddejdejejdejgfeejdejejdejgddejdejejdejgfeejdejejdejgddejdejejdejgfeejdejejdejgddejdejejdejgfedejddgdddejddgfedejddgdddejddgfedejddgdddejddgfedejddgdddejddgfgdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zej	
d+dddgd,d- Zej	
d.d d/gej	
ddddgd0d1 ZdS )2    N)	DataFrameSeriesnamevarZstdmeanc                 C   s&   t | jdd| }t|ts"td S N
   com)getattrewm
isinstancer   AssertionError)seriesr   Zseries_result r   P/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/window/moments/test_moments_ewm.pytest_ewma_series   s    r   c                 C   s&   t | jdd| }t|ts"td S r   )r   r   r   r   r   )framer   Zframe_resultr   r   r   test_ewma_frame   s    r   c                  C   sF   t td} d| d< | jddd  }t|d dk sBtd S )Ni        d   F)spanadjustg{Gz?)r   npzerosr   r   sumabsr   )valsresultr   r   r   test_ewma_adjust   s    r    r   TF	ignore_nac                 C   sZ   t ddddg}| r&t ddddg}nt ddd	d
g}|jd| |d }t|| d S )N      ?       @g      @g       @g?gʍ"k@gY;@gRTU?gS@g	@r
   r   r!   )r   r   r   tmassert_series_equal)r   r!   sexpectedr   r   r   r   test_ewma_cases   s    r)   c                  C   s   t dgtjgd  dg } | jdd }t|t dgt|   t tjgd dg tjgd  dg } | jdd }t|t tjgd dgd   d S )Nr"   r   r	         )r   r   nanr   r   r%   r&   len)r'   r   r   r   r   test_ewma_nan_handling.   s    (r.   zs, adjust, ignore_na, wr"   g     @Y@gVUUUUU?gUUUUUU?gqq?gj/?g      I@gqq?g|	%?c                 C   sl   |  | t|  jdd}| jd||d }t|| |dkrh| jd|d }t|| d S )NZffill)methodr#   r$   F)r
   r   )multiplyZcumsumr   Zfillnar   r   r%   r&   )r'   r   r!   wr(   r   r   r   r   test_ewma_nan_handling_cases8   s     "r2   c              	   C   s   | j dd }| j dd }t|| d}tjt|d | j ddd W 5 Q R X d}tjt|d |     W 5 Q R X d S )	N      #@r	      r   8comass, span, halflife, and alpha are mutually exclusivematch)r
   r   1Must pass one of comass, span, halflife, or alphar   r   r%   assert_almost_equalpytestraises
ValueErrorr   ABmsgr   r   r   test_ewma_span_com_args   s    rC   c              	   C   s   | j dd }| j dd }t|| d}tjt|d | j ddd	 W 5 Q R X tjt|d | j d
dd W 5 Q R X tjt|d | j d
ddd W 5 Q R X d}tjt|d |    W 5 Q R X d S )NgH+@r	         $@halflifer6   r7   r4   2   )r   rF   r3   )r
   rF   )r
   r   rF   r9   r:   r?   r   r   r   test_ewma_halflife_arg   s    rH   c                  C   s   t jd} t dd}t j| |< t| }|jdd }|jdd }|jdd	 }|jd
d }t	|| t	|| t	|| d S )Nr   r4   (   gVR?alphagƷC?r	   g_!@r5   gXlWY?rE   )
r   randomrandnarangeNaNr   r   r   r%   r&   )arrlocsr'   abcdr   r   r   test_ewm_alpha   s    
rV   c              	   C   s   | }d}t jt|d |  W 5 Q R X d}t jt|d |jddd W 5 Q R X t jt|d |jddd W 5 Q R X t jt|d |jddd W 5 Q R X d S )	Nr9   r7   r6   rD   g      ?)r
   rK   )r   rK   )rF   rK   )r<   r=   r>   r   )r   r'   rB   r   r   r   test_ewm_alpha_arg   s    rW   c               	   C   s  t jd} t dd}t j| |< t| }d}tjt|d |j	dd W 5 Q R X |j	dd |j	d	d d
}tjt|d |j	dd W 5 Q R X tjt|d |j	dd W 5 Q R X tjt|d |j	dd W 5 Q R X |j	dd |j	dd d}tjt|d |j	dd W 5 Q R X tjt|d |j	dd W 5 Q R X |j	d	d d}tjt|d |j	dd W 5 Q R X tjt|d |j	dd W 5 Q R X |j	d	d |j	dd tjt|d |j	dd W 5 Q R X d S )Nr   r4   rI   z comass must satisfy: comass >= 0r7   gr	   g        g?zspan must satisfy: span >= 1r5   g?r"   g?z#halflife must satisfy: halflife > 0rE   z"alpha must satisfy: 0 < alpha <= 1rJ   )
r   rL   rM   rN   rO   r   r<   r=   r>   r   )rP   rQ   r'   rB   r   r   r   test_ewm_domain_checks	  sB    
rX   r/   c                 C   s4   t g tjd}|d}t||  }t|| d S )Ndtype   )r   r   float64r   r   r%   r;   )r/   r   r   r   r   r   r   test_ew_empty_series2  s    
r]   min_periodsr   c                 C   s  t jd}t j|d d< t j|dd < t|}t|jddd| }|d d   s^t	|dd   
 rvt	t|jd| d| }|dkr|d d   st	|dd   
 rt	n0|d d   st	|dd   
 rt	tttdjd| d| }t|td	d ttd
gjd| d| }|dkr^t|td
g nt|tt jg ttt djdd| }|jt jkst	d S )NrG   r   ir*   )r
   r^      r   rY   r\   r"   )r^   r5   )r   rL   rM   rO   r   r   r   Zisnaallr   anyobjectr%   r&   rN   rZ   Zfloat_)r^   r   rP   r'   r   Zresult2r   r   r   test_ew_min_periods;  s*    
rc   )Znumpyr   r<   Zpandasr   r   Zpandas._testingZ_testingr%   markZparametrizer   r   r    r)   r.   r,   r2   rC   rH   rV   rW   rX   r]   rc   r   r   r   r   <module>   s  










 	
)
