a
    j=ic]                     @   s  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	g d
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'g d(d)d* Zd+d, Z d-d. Z!ejd/d0ee"d1e"d2d3g d4d5e#d6gd7eej$gd1 d8gd1 g d9d5gd:eej$gd1 d;gd1 g d<d5ggd=d> Z%d?d@ Z&dAdB Z'ejdCg dDdEgg dFdGggdHdI Z(dJdK Z)dLdM Z*dNdO Z+ejdPeej$dQdRgdGdEej$dSdQgfeej$dQdRgdGdGej$dSdQgfeej$dQdRgdEdEej$dSdTgfeej$dQdRgdEdGej$dSdTgfedQej$dRgdGdEdUej$dQgfedQej$dRgdGdGdSej$dQgfedQej$dRgdEdEdUej$dTgfedQej$dRgdEdGdSej$dTgfeej$dQej$ej$dRej$gdGdEej$dVej$ej$dQej$gfeej$dQej$ej$dRej$gdGdGej$dSej$ej$dQej$gfeej$dQej$ej$dRej$gdEdEej$dVej$ej$dTej$gfeej$dQej$ej$dRej$gdEdGej$dSej$ej$dTej$gfedQej$dRdWgdGdEdVej$dSdQgfedQej$dRdWgdGdGdUej$dSdQgfedQej$dRdWgdEdEdVej$dXdYgfedQej$dRdWgdEdGdUej$dXdTgfgdZd[ Z,d\d] Z-d^d_ Z.ejd	g d`dadb Z/ejdd dcgejddg dedfdg Z0ejdddhdigdjdk Z1ejdg d5ejdddhdigdldm Z2ejdddhdigdndo Z3ejddg dpdqdr Z4ejddg dpdsdt Z5dudv Z6dwdx Z7dydz Z8ejd{dhdigd|d} Z9d~d Z:ejddidhgejddGdEgdd Z;ejde<e=gdd Z>ejddidhgejddGdEg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   m/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/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 d    n1 s0    Y  tjt|d |ddd W d    n1 s0    Y  tjt|d |ddd W d    n1 s0    Y  d}tjt|d |dd W d    n1 sB0    Y  d}tjt|d |dd W d    n1 s0    Y  d}tjt|d |dd W d    n1 s0    Y  d}dD ]@}tjt|d ||d W d    n1 s0    Y  qd 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g ddd}d}d|  }tjt|dP tjt|d" t|| ddd	 W d    n1 sh0    Y  W d    n1 s0    Y  d
|  }tjt|dP tjt|d" t|| t	j
d W d    n1 s0    Y  W d    n1 s0    Y  d S )N)r
   r      r   r   z2numpy operations are not valid with window objectsz3Passing additional args to ExponentialMovingWindow.r"   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    
N
r@   c                  C   sP   d} t jt| d* ttdjtdd W d    n1 sB0    Y  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   sV   d} t jt| d0 ttdjtddd W d    n1 sH0    Y  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   sX   d} t jt| d2 ttdjdtddd W d    n1 sJ0    Y  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   sJ   d}t jt|d$ ttdj| d W d    n1 s<0    Y  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	6 |j|||d
	 }|jd|d	 }W d    n1 s0    Y  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    

0ra   c                 C   sZ   | }d}t g d|}td}t|}|j||d }tg d}t|| d S )Nz23 days)z
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   sX   t td}tdg}tjtdd  |jd| |d W d    n1 sJ0    Y  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   arg)r   r   r   r   c                    sr   | dd|d|i}t tdtddjf i |  fdd jD } d } fdd|jD }||ksnJ d S )	Nr	   adjust	ignore_nari   c                    s   i | ]}|t  |qS r   r<   .0attrr   r   r   
<dictcomp>       z8test_ewm_getitem_attributes_retained.<locals>.<dictcomp>rW   c                    s   i | ]}|t  |qS r   ro   rp   rs   r   r   rt      ru   )r   r+   r   _attributes)rl   rm   rn   kwargsr`   Z	ewm_slicer_   r   rs   r   $test_ewm_getitem_attributes_retained   s    "rx   c                  C   sf   t td} tt  | jdd }W d    n1 s<0    Y  | 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   sT   t jtdd2 ttdjddtddddd	 W d    n1 sF0    Y  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   r   	   )gZP۶@r|   gW$%@gd~$I(@g7m+@r   r	   r
   r7   r3   gɬv@)gW2@g.@g> @g@gG@r4   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	6 |jd
ddd	 }|jddd	 }W d    n1 s|0    Y  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    
0r   c                  C   sP   t tdjddd} tjtdd |   W d    n1 sB0    Y  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, ignore)rU         @g      @g     &@F)rU   r   r   g      )@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 sBJ d S )Ni  r	   r   d   F)r   rm   g{Gz?)r   r   Zzerosr   r   r   abs)valsr_   r   r   r   test_ewma_adjust  s    r   c                 C   sN   t g d}| rt g d}nt g d}|jd| |d }t|| d S )N)rZ          @g      @g       @)rZ   g?gʍ"k@gY;@)rZ   gRTU?gS@g	@r   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u 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 d    n1 s^0    Y  |j	dd |j	d	d d
}tjt|d |j	dd W d    n1 s0    Y  tjt|d |j	dd W d    n1 s0    Y  tjt|d |j	dd W d    n1 s*0    Y  |j	dd |j	dd d}tjt|d |j	dd W d    n1 s0    Y  tjt|d |j	dd W d    n1 s0    Y  |j	d	d d}tjt|d |j	dd W d    n1 s
0    Y  tjt|d |j	dd W d    n1 sF0    Y  |j	d	d |j	dd tjt|d |j	dd W d    n1 s0    Y  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   )r   r3   r4   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	   name)r   r4   r3   c                 C   s  t jd}t j|d d< t j|dd < t|}t|jddd| }|d d   s^J |dd   	 rvJ t|jd| d| }|dkr|d d   sJ |dd   	 rJ n0|d d   sJ |dd   	 rJ 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sJ d S )N2   rN   r
   r   rT   r   r   r7   r=   rZ   )rT   r   )r   r   r   r   r   r<   r   Zisnaallanyobjectr9   rj   rC   r8   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
  sJ t	|j
d
d   rJ d S )Nr   indexr
   0   rN   r   r   r   r      )r   r   r   r   r+   r   ilocr<   r   isnanvaluesr   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	  sJ t	|j
d	d   rJ 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   r   r=   r9   rj   )r   rT   rW   r   r_   emptyr   r   r   test_ewm_corr_cov_min_periods:  s    r   c                 C   s|   t tjdtdd}tj|d d< d}tjt|d0 t	|j
ddd| tjd W d    n1 sn0    Y  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   )r4   r3   r   c                 C   s&   t | jdd| }t|ts"J d S NrN   r   )r<   r   
isinstancer   )seriesr   Zseries_resultr   r   r   test_ewma_seriesa  s    r   c                 C   s&   t | jdd| }t|ts"J d S r   )r<   r   r   r   )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 d    n1 sb0    Y  d}tjt|d |     W d    n1 s0    Y  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 d    n1 sb0    Y  tjt|d | j d
dd W d    n1 s0    Y  tjt|d  | j d
ddd W d    n1 s0    Y  d}tjt|d |    W d    n1 s0    Y  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 d    n1 s40    Y  d}t jt|d |jddd W d    n1 st0    Y  t jt|d |jddd W d    n1 s0    Y  t jt|d |jddd W d    n1 s0    Y  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 ur||d}|r`dd	gng d}|| |gjd
dt}t|j	|ksJ 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columnsr9   r]   )	arithmetic_win_operatorsr   kernelr   r   opr_   r   r`   r   r   r   test_numeric_only_frame  s    
r   r   use_argc                 C   s   t g dddd}|d t|d< |r0|fnd}|jddd}t|| }||d	|i}|rfd
dgng d}|| t}	|r|	fnd}
|	jddd}t|| }||
d	|i}t|| d S )Nr	   r
   r6   r
   r6   r   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 u r8d S |r|tu rd| d}tjt|d ||d W d    q1 s~0    Y  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 g d|d}|r|fnd}|jddd}t|| }|r|tu rd|  d}tjt|d	 ||d
|i W d    q1 s0    Y  nX||d
|i}	|t}
|r|
fnd}|
jddd}t|| }||d
|i}t	
|	| d S )Nr   r7   r   r
   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   )@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  ,


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

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