U
    sVc]                     @   sB  d dl Zd dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ dd Zdd Zejd	d
ddgdd Zdd Zdd Zdd Zdd Zejdeddde	dddde	dddddgejdd d gd!d" Zd#d$ Zd%d& Zd'd( Zejd)d*d+d,d-gd.d/ Zd0d1 Z d2d3 Z!ejd4dee"d5e"d6d7d8d7d9d:d;gd<e#d=gd
eej$gd5 d>gd5 d?d@dAdBdCgd<gdeej$gd5 dDgd5 dEdFdGdHdIgd<ggdJdK Z%dLdM Z&dNdO Z'ejdPdQdRdSdTgdUgdQdRdRdVgdWggdXdY Z(dZd[ Z)d\d] Z*d^d_ Z+ejd`eej$dadbgdWdUej$dcdagfeej$dadbgdWdWej$dcdagfeej$dadbgdUdUej$dcddgfeej$dadbgdUdWej$dcddgfedaej$dbgdWdUdeej$dagfedaej$dbgdWdWdcej$dagfedaej$dbgdUdUdeej$ddgfedaej$dbgdUdWdcej$ddgfeej$daej$ej$dbej$gdWdUej$dfej$ej$daej$gfeej$daej$ej$dbej$gdWdWej$dcej$ej$daej$gfeej$daej$ej$dbej$gdUdUej$dfej$ej$ddej$gfeej$daej$ej$dbej$gdUdWej$dcej$ej$ddej$gfedaej$dbdggdWdUdfej$dcdagfedaej$dbdggdWdWdeej$dcdagfedaej$dbdggdUdUdfej$dhdigfedaej$dbdggdUdWdeej$dhddgfgdjdk Z,dldm Z-dndo Z.ejd	dd
dgdpdq Z/ejdd drgejdsddd
gdtdu Z0ejdsdvdwgdxdy Z1ejdd drd gejdsdvdwgdzd{ Z2ejdsdvdwgd|d} Z3ejdsdd
dgd~d Z4ejdsdd
dgdd Z5dd Z6dd Z7dd Z8ejddvdwgdd Z9dd Z:ejddwdvgejddWdUgdd Z;ejde<e=gdd Z>ejddwdvgejddWdUgejde<e=gdd Z?dS )    N)UnsupportedFunctionCall)	DataFrameDatetimeIndexSeries
date_range)ExponentialMovingWindowc                  C   s0   t ddddtjdgi} |  | jdd  d S )NBr                  ?com)r   npnanewmmean)df r   @/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/window/test_ewm.pytest_doc_string   s    r   c              
   C   s  | t dj}|dd |dd |dd |dd |dd d	 |dd d
 |dd d d}tjt|d |ddd W 5 Q R X tjt|d |ddd W 5 Q R X tjt|d |ddd W 5 Q R X d}tjt|d |dd W 5 Q R X d}tjt|d |dd W 5 Q R X d}tjt|d |dd W 5 Q R X d}dD ]*}tjt|d ||d W 5 Q R X qPd S )N   r   r         ?spanalphag      ?halflifer   r   )r   r   r   r   8comass, span, halflife, and alpha are mutually exclusivematchr   r   r   r   )r   r    comass must satisfy: comass >= 0      span must satisfy: span >= 1#halflife must satisfy: halflife > 0r   "alpha must satisfy: 0 < alpha <= 1)r'   r   )ranger   pytestraises
ValueError)Zframe_or_seriescmsgr   r   r   r   test_constructor   s8    



r1   methodstdr   varc              
   C   s   t tdddgdd}d}d|  }tjt|d2 tjt|d t|| d	dd
 W 5 Q R X W 5 Q R X d|  }tjt|d2 tjt|d t|| t	j
d W 5 Q R X W 5 Q R X d S )Nr
   r      r   r   z2numpy operations are not valid with window objectsz3Passing additional args to ExponentialMovingWindow.r"   r	      z5Passing additional kwargs to ExponentialMovingWindow.dtype)r   r   tmassert_produces_warningFutureWarningr,   r-   r   getattrr   float64)r2   e	error_msgZwarn_msgr   r   r   test_numpy_compatC   s    
&
r@   c               	   C   s<   d} t jt| d  ttdjtdd W 5 Q R X d S )Nz%times must be datetime64\[ns\] dtype.r"   r   times)r,   r-   r.   r   r+   r   r   aranger0   r   r   r   !test_ewma_times_not_datetime_typeT   s    rE   c               	   C   sB   d} t jt| d& ttdjtddd W 5 Q R X d S )Nz,times must be the same length as the object.r"   r   r   datetime64[ns]rA   	r,   r-   r.   r   r+   r   r   rC   astyperD   r   r   r   test_ewma_times_not_same_lengthZ   s    rI   c               	   C   sD   d} t jt| d( ttdjdtddd W 5 Q R X d S )Nz/halflife must be a timedelta convertible objectr"   r   r	   rF   r   rB   rG   rD   r   r   r   #test_ewma_halflife_not_correct_type`   s    rK   c              	   C   s6   d}t jt|d ttdj| d W 5 Q R X d S )NzKhalflife can only be a timedelta convertible argument if times is not None.r"   r   r   )r,   r-   r.   r   r+   r   )halflife_with_timesr0   r   r   r    test_ewma_halflife_without_timesf   s    rM   rB   
   zdatetime64[D]rF   2000DfreqZperiodsUTCmin_periodsr
   c              	   C   s   | }t d}t j|d d d< t|tddddd}tjtdd	, |j|||d
	 }|jd|d	 }W 5 Q R X t
|| d S )N      $@r
   rO   rP   rN   rQ   Atime_colznuisance columnsr"   r   rT   rB         ?r   rT   r   rC   r   r   r   r9   r:   r;   r   r   assert_frame_equal)rL   rB   rT   r   datar   resultexpectedr   r   r   "test_ewma_with_times_equal_spacingl   s    

ra   c                 C   s^   | }d}t dddg|}td}t|}|j||d }tddd	g}t|| d S )
Nz23 daysz
2020-01-01z2020-01-10T00:04:05z2020-02-23T05:00:23r6   rJ           gE(?g*M?)	r   tz_localizer   rC   r   r   r   r9   r]   )Ztz_aware_fixturetzr   rB   r^   r   r_   r`   r   r   r   %test_ewma_with_times_variable_spacing   s    
re   c              	   C   sD   t td}tdg}tjtdd |jd| |d W 5 Q R X d S )Nr	   ZNaTz$Cannot convert NaT values to integerr"   皙?)r   r   rB   )r   r+   r   r,   r-   r.   r   )rL   serrB   r   r   r   test_ewm_with_nat_raises   s    
rh   c                 C   st   | }t d}t j|d d d< tdddd}t||d}|j||dd	  }|jd
dd	  }t|| d S )NrU   r
   rO   rP   rN   rQ   rW   r   rJ   rW   rZ   r   )	r   rC   r   r   r   r   r   r9   assert_series_equal)rL   r   r^   rB   r   r_   r`   r   r   r   test_ewm_with_times_getitem   s    
rk   argr   r   r   r   c                    sn   | dd|d|i}t tdtddjf |  fdd jD } d } fdd|jD }||ksjtd S )	Nr	   adjust	ignore_nari   c                    s   i | ]}|t  |qS r   r<   .0attrr   r   r   
<dictcomp>   s      z8test_ewm_getitem_attributes_retained.<locals>.<dictcomp>rW   c                    s   i | ]}|t  |qS r   ro   rp   rs   r   r   rt      s      )r   r+   r   _attributesAssertionError)rl   rm   rn   kwargsr`   Z	ewm_slicer_   r   rs   r   $test_ewm_getitem_attributes_retained   s    rx   c               	   C   sR   t td} tt | jdd }W 5 Q R X | jdd }t|| d S )Nr	   rf   r   )	r   r+   r9   r:   r;   r   Zvolr3   rj   )rg   r_   r`   r   r   r   test_ewm_vol_deprecated   s
    ry   c                	   C   s@   t jtdd( ttdjddtddddd	 W 5 Q R X d S )
Nz)times is not supported with adjust=False.r"   r	   rf   FrO   rP   rQ   )rm   rB   )r,   r-   NotImplementedErrorr   r+   r   r   r   r   r   r   #test_ewma_times_adjust_false_raises   s       r{   zfunc, expectedr   r   	   gZP۶@gW$%@gd~$I(@g7m+@r   r	   r
   r7   gɬv@gW2@g.@g> @g@gG@g      2@g=Զm5@   gˁj۶@@g@m[D@ggܶmH@c                 C   sP   t tdtddtdddd|d}|jd	d
d}t||  }t|| d S )Nr   r5      rN      r
   r}   r7   r   r	   )r   Zaxis)r   r+   r   r<   r9   r]   )funcr`   Zfloat_numpy_dtyper   r>   r_   r   r   r   test_float_dtype_ewma   s    ' r   c               	   C   s   t d} t j| d d d< t| tddddd}tjtdd	, |jd
ddd	 }|jddd	 }W 5 Q R X t
|| d S )NrU   r
   rO   rP   rN   rQ   rV   zSpecifying timesr"   z1 dayr   rX   rY   rZ   r[   r\   )r^   r   r_   r`   r   r   r    test_times_string_col_deprecated   s    
r   c               	   C   s<   t tdjddd} tjtdd |   W 5 Q R X d S )Nr	   Fr   rm   z
sum is notr"   )r   r+   r   r,   r-   rz   sum)r^   r   r   r   (test_ewm_sum_adjust_false_notimplemented   s    r   zexpected_data, ignorerU   g      @g      @g     &@Fg      )@Tc                 C   s<   t ddtjdg}|jd|d }t | }t|| d S )NrN   r   r   )r   rn   )r   r   r   r   r   r9   rj   )Zexpected_dataignorer^   r_   r`   r   r   r   test_ewm_sum   s    r   c                  C   sF   t td} d| d< | jddd  }t|d dk sBtd S )Ni  r	   r   d   F)r   rm   g{Gz?)r   r   zerosr   r   r   absrv   )valsr_   r   r   r   test_ewma_adjust  s    r   c                 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 )NrZ          @g      @g       @g?gʍ"k@gY;@gRTU?gS@g	@r   rm   rn   )r   r   r   r9   rj   )rm   rn   sr`   r_   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 )NrZ   r   r   r
   r   )r   r   r   r   r   r9   rj   len)r   r_   r   r   r   test_ewma_nan_handling"  s    (r   zs, adjust, ignore_na, wrZ   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)r2   r   r   Fr   )multiplyZcumsumr   Zfillnar   r   r9   rj   )r   rm   rn   wr`   r_   r   r   r   test_ewma_nan_handling_cases,  s     "r   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   r   (   gVR?r   gƷC?r   g_!@r   gXlWY?r   )
r   randomrandnrC   NaNr   r   r   r9   rj   )arrlocsr   abr/   dr   r   r   test_ewm_alpha  s    
r   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   r   r   r&   r"   gr   rb   rf   r(   r   g?rZ   g?r)   r   r*   r   )
r   r   r   rC   r   r   r,   r-   r.   r   )r   r   r   r0   r   r   r   test_ewm_domain_checks  sB    
r   c                 C   s4   t g tjd}|d}t||  }t|| d S )Nr7   r6   )r   r   r=   r   r<   r9   assert_almost_equal)r2   r   r   r_   r   r   r   test_ew_empty_series  s    
r   r	   namec                 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 )N2   rN   r
   r   rT   r   r   r7   r=   rZ   )rT   r   )r   r   r   r   r   r<   r   Zisnaallrv   anyobjectr9   rj   rC   r8   Zfloat_)rT   r   r   r   r_   Zresult2r   r   r   test_ew_min_periods  s*    
r   ZcovZcorrc                 C   s   t tjdtdd}|dd  tjd }tj|d d< tj|jdd < t|jddd	| |}t	|j
d d
  stt	|j
d
d   rtd S )Nr   indexr
   0   rN   r   r   r   r      )r   r   r   r   r+   r   ilocr<   r   isnanvaluesr   rv   r   )r   rW   r   r_   r   r   r   test_ewm_corr_cov-  s    r   c                 C   s  t tjdtdd}|dd  tjd }tj|d d< tj|jdd < t|jd|d| |}t	|j
d d	  stt	|j
d	d   rtt g tjd
}t|jd|d| |}t|| tt dgjd|d| t dg}t|t tjg d S )Nr   r   r
   r   rN   r   r   r   r   r7   rZ   )r   r   r   r   r+   r   r   r<   r   r   r   r   rv   r   r=   r9   rj   )r   rT   rW   r   r_   emptyr   r   r   test_ewm_corr_cov_min_periods:  s    r   c              	   C   sh   t tjdtdd}tj|d d< d}tjt|d& t	|j
ddd| tjd W 5 Q R X d S )	Nr   r   rN   z#other must be a DataFrame or Seriesr"   r   r   r   )r   r   r   r   r+   r   r,   r-   r.   r<   r   )r   rW   r0   r   r   r   *test_different_input_array_raise_exceptionV  s
    r   c                 C   s&   t | jdd| }t|ts"td S NrN   r   )r<   r   
isinstancer   rv   )seriesr   Zseries_resultr   r   r   test_ewma_seriesa  s    r   c                 C   s&   t | jdd| }t|ts"td S r   )r<   r   r   r   rv   )framer   Zframe_resultr   r   r   test_ewma_frameg  s    r   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   r   r!   r"   r   1Must pass one of comass, span, halflife, or alphar   r   r9   r   r,   r-   r.   r   rW   r   r0   r   r   r   test_ewma_span_com_argsm  s    r   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   rU   r   r!   r"   r   r   r%   r   )r   r   )r   r   r   r   r   r   r   r   r   test_ewma_halflife_argz  s    r   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 )	Nr   r"   r!   rU   r   r$   )r   r   r    )r,   r-   r.   r   )r   r   r0   r   r   r   test_ewm_alpha_arg  s    r   r   c                 C   sn   t |jddd|  }|jtd dfdf }|jd|_t |d jddd| |d }tj||dd d S )NrN   r   r   rT   r	   F)Zcheck_names)r<   r   locslicer   Z	droplevelr9   rj   )r   r   r_   r`   r   r   r   test_ewm_pairwise_cov_corr  s
     r   c           	      C   s   | }t dgddd}|d t|d< |jddd}t||d }|d k	r||d}|r`dd	gndd	dg}|| |gjd
dt}t|j	|kst
t|| d S )Nr	   r
   r6   r   r   r/   r/   r   numeric_onlyr   r   TZdrop)r   rH   r   r   r<   aggreset_indexfloatlistcolumnsrv   r9   r]   )	arithmetic_win_operatorsr   kernelr   r   opr_   r   r`   r   r   r   test_numeric_only_frame  s    
r   r   use_argc                 C   s   t dddgddd}|d t|d< |r2|fnd}|jddd}t|| }||d|i}|rhd	d
gnd	d
dg}|| t}	|r|	fnd}
|	jddd}t|| }||
d|i}t|| d S )Nr	   r
   r6   r   r/   r   r   r   r   r   )r   rH   r   r   r<   r   r9   r]   )r   r   r   r   rl   r   r   r_   r   Zdf2arg2ewm2op2r`   r   r   r    test_numeric_only_corr_cov_frame  s    

r   r8   c           
   	   C   s   | }t dg|d}|jddd}t||d }|d kr8d S |rv|tkrvd| d}tjt|d ||d W 5 Q R X n0||d}||gjd	d
	t
}	t||	 d S )Nr	   r7   r
   r   ExponentialMovingWindow.  does not implement numeric_onlyr"   r   Tr   )r   r   r<   r   r,   r-   rz   r   r   rH   r   r9   rj   )
r   r   r8   r   rg   r   r   r0   r_   r`   r   r   r   test_numeric_only_series  s    
r   c              	   C   s   t dddg|d}|r|fnd}|jddd}t|| }|rz|tkrzd|  d}tjt|d	 ||d
|i W 5 Q R X nX||d
|i}	|t}
|r|
fnd}|
jddd}t|| }||d
|i}t	
|	| d S )Nr	   r
   r6   r7   r   r   r   r   r"   r   )r   r   r<   r   r,   r-   rz   rH   r   r9   rj   )r   r   r   r8   rg   rl   r   r   r0   r_   Zser2r   r   r   r`   r   r   r   !test_numeric_only_corr_cov_series  s    


r   )@Znumpyr   r,   Zpandas.errorsr   Zpandasr   r   r   r   Zpandas._testingZ_testingr9   Zpandas.core.windowr   r   r1   markZparametrizer@   rE   rI   rK   rM   rC   rH   rc   ra   re   rh   rk   rx   ry   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   intr   r   r   r   r   r   r   <module>   s  ,





$

	








 	
)
)






