o
    i]                     @   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   W/var/www/edux/Edux_v2/venv/lib/python3.10/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 sGw   Y  tjt|d |ddd W d    n1 sdw   Y  tjt|d |ddd W d    n1 sw   Y  d}tjt|d |dd W d    n1 sw   Y  d}tjt|d |dd W d    n1 sw   Y  d}tjt|d |dd W d    n1 sw   Y  d}dD ]}tjt|d ||d W d    n1 sw   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)frame_or_seriescmsgr   r   r   r   test_constructor   sJ   



r2   method)stdr   varc              	   C   s  t tg ddd}d}d|  }tjt|d( tjt|d t|| ddd	 W d    n1 s4w   Y  W d    n1 sCw   Y  d
|  }tjt|d1 tjt|d t|| t	j
d W d    n1 spw   Y  W d    d S W d    d S 1 sw   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)r3   e	error_msgwarn_msgr   r   r   test_numpy_compatC   s"   

"rB   c                  C   sR   d} t jt| d ttdjtdd W d    d S 1 s"w   Y  d S )Nz%times must be datetime64\[ns\] dtype.r"   r   times)r,   r-   r.   r   r+   r   r   aranger1   r   r   r   !test_ewma_times_not_datetime_typeT   s   "rG   c                  C   sX   d} t jt| d ttdjtddd W d    d S 1 s%w   Y  d S )Nz,times must be the same length as the object.r"   r   r   datetime64[ns]rC   	r,   r-   r.   r   r+   r   r   rE   astyperF   r   r   r   test_ewma_times_not_same_lengthZ   s   ""rK   c                  C   sZ   d} t jt| d ttdjdtddd W d    d S 1 s&w   Y  d S )Nz/halflife must be a timedelta convertible objectr"   r   r	   rH   r   rD   rI   rF   r   r   r   #test_ewma_halflife_not_correct_type`   s   $"rM   c                 C   sL   d}t jt|d ttdj| d W d    d S 1 sw   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_timesr1   r   r   r    test_ewma_halflife_without_timesf   s   "rO   rD   
   zdatetime64[D]rH   2000Dfreq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 d    n1 s@w   Y  t
|| d S )N      $@r
   rQ   rR   rP   rS   Atime_colznuisance columnsr"   r   rW   rD         ?r   rW   r   rE   r   r   r   r:   r;   r<   r   r   assert_frame_equal)rN   rD   rW   r   datar   resultexpectedr   r   r   "test_ewma_with_times_equal_spacingl   s   

rd   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:23r7   rL   )        gE(?g*M?)	r   tz_localizer   rE   r   r   r   r:   r`   )tz_aware_fixturetzr   rD   ra   r   rb   rc   r   r   r   %test_ewma_with_times_variable_spacing   s   
ri   c                 C   sZ   t td}tdg}tjtdd |jd| |d W d    d S 1 s&w   Y  d S )Nr	   NaTz$Cannot convert NaT values to integerr"   皙?)r   r   rD   )r   r+   r   r,   r-   r.   r   )rN   serrD   r   r   r   test_ewm_with_nat_raises   s
   
"rm   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 )NrX   r
   rQ   rR   rP   rS   rZ   r   rL   rZ   r]   r   )	r   rE   r   r   r   r   r   r:   assert_series_equal)rN   r   ra   rD   r   rb   rc   r   r   r   test_ewm_with_times_getitem   s   
rp   arg)r   r   r   r   c                    sr   | dd|d|i}t tdtddjd	i |  fdd jD } d } fdd|jD }||ks7J d S )
Nr	   adjust	ignore_narn   c                       i | ]}|t  |qS r   r=   .0attrr   r   r   
<dictcomp>       z8test_ewm_getitem_attributes_retained.<locals>.<dictcomp>rZ   c                    rt   r   ru   rv   ry   r   r   rz      r{   r   )r   r+   r   _attributes)rq   rr   rs   kwargsrc   	ewm_slicerb   r   ry   r   $test_ewm_getitem_attributes_retained   s   "r   c                  C   sf   t td} tt | jdd }W d    n1 sw   Y  | jdd }t|| d S )Nr	   rk   r   )	r   r+   r:   r;   r<   r   volr4   ro   )rl   rb   rc   r   r   r   test_ewm_vol_deprecated   s   r   c                	   C   sV   t jtdd ttdjddtddddd	 W d    d S 1 s$w   Y  d S )
Nz)times is not supported with adjust=False.r"   r	   rk   FrQ   rR   rS   )rr   rD   )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
   r8   r4   gɬv@)gW2@g.@g> @g@gG@r5   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   r6      rP      r
   r   r8   r   r	   )r   axis)r   r+   r   r=   r:   r`   )funcrc   float_numpy_dtyper   r?   rb   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 d    n1 s>w   Y  t
|| d S )NrX   r
   rQ   rR   rP   rS   rY   zSpecifying timesr"   z1 dayr   r[   r\   r]   r^   r_   )ra   r   rb   rc   r   r   r    test_times_string_col_deprecated   s   
r   c                  C   sR   t tdjddd} tjtdd |   W d    d S 1 s"w   Y  d S )Nr	   Fr   rr   z
sum is notr"   )r   r+   r   r,   r-   r   sum)ra   r   r   r   (test_ewm_sum_adjust_false_notimplemented   s   
"r   zexpected_data, ignore)rX         @g      @g     &@F)rX   r   r   g      )@Tc                 C   s<   t ddtjdg}|jd|d }t | }t|| d S )NrP   r   r   )r   rs   )r   r   r   r   r   r:   ro   )expected_dataignorera   rb   rc   r   r   r   test_ewm_sum   s   r   c                  C   sF   t td} d| d< | jddd  }t|d dk s!J d S )Ni  r	   r   d   F)r   rr   g{Gz?)r   r   zerosr   r   r   abs)valsrb   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)r]          @g      @g       @)r]   g?gʍ"k@gY;@)r]   gRTU?gS@g	@r   r   rr   rs   )r   r   r   r:   ro   )rr   rs   src   rb   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   )r   r   r   r   r   r:   ro   len)r   rb   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   sp   |  | t|  jdd}| jd||d }t|| |du r6| jd|d }t|| d S d S )Nffill)r3   r   r   Fr   )multiplycumsumr   fillnar   r   r:   ro   )r   rr   rs   wrc   rb   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randnrE   NaNr   r   r   r:   ro   )arrlocsr   abr0   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/w   Y  |j	dd |j	d	d d
}tjt|d |j	dd W d    n1 sZw   Y  tjt|d |j	dd W d    n1 sww   Y  tjt|d |j	dd W d    n1 sw   Y  |j	dd |j	dd d}tjt|d |j	dd W d    n1 sw   Y  tjt|d |j	dd W d    n1 sw   Y  |j	d	d d}tjt|d |j	dd W d    n	1 sw   Y  tjt|d |j	dd W d    n	1 s w   Y  |j	d	d |j	dd tjt|d |j	dd W d    d S 1 sKw   Y  d S )Nr   r   r   r&   r"   gr   re   rk   r(   r   g?r]   g?r)   r   r*   r   )
r   r   r   rE   r   r   r,   r-   r.   r   )r   r   r   r1   r   r   r   test_ewm_domain_checks  sT   
$r   )r   r4   r5   c                 C   s4   t g tjd}|d}t||  }t|| d S )Nr8   r7   )r   r   r>   r   r=   r:   assert_almost_equal)r3   r   r   rb   r   r   r   test_ew_empty_series  s   
r   r	   name)r   r5   r4   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   	 r;J t|jd| d| }|dkrc|d d   sVJ |dd   	 rbJ n|d d   soJ |dd   	 r{J ttt
djd| d| }t|td	d ttd
gjd| d| }|dkrt|td
g n
t|tt jg ttt djdd| }|jt jksJ d S )N2   rP   r
   r   rW   r   r   r8   r>   r]   )rW   r   )r   r   r   r   r   r=   r   isnaallanyobjectr:   ro   rE   r9   float_)rW   r   r   r   rb   result2r   r   r   test_ew_min_periods  s*   r   cov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
  sAJ t	|j
d
d   rOJ d S )Nr   indexr
   0   rP   r   r   r   r      )r   r   r   r   r+   r   ilocr=   r   isnanvaluesr   r   )r   rZ   r   rb   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	  sAJ t	|j
d	d   rOJ 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   rP   r   r   r   r   r8   r]   )r   r   r   r   r+   r   r   r=   r   r   r   r   r   r>   r:   ro   )r   rW   rZ   r   rb   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 t	|j
ddd| tjd W d    d S 1 s8w   Y  d S )	Nr   r   rP   z#other must be a DataFrame or Seriesr"   r   r   r   )r   r   r   r   r+   r   r,   r-   r.   r=   r   )r   rZ   r1   r   r   r   *test_different_input_array_raise_exceptionV  s   ""r   )r5   r4   r   c                 C   &   t | jdd| }t|tsJ d S NrP   r   )r=   r   
isinstancer   )seriesr   series_resultr   r   r   test_ewma_seriesa     r   c                 C   r   r   )r=   r   r   r   )framer   frame_resultr   r   r   test_ewma_frameg  r   r   c                 C   s   | j dd }| j dd }t|| d}tjt|d | j ddd W d    n1 s1w   Y  d}tjt|d |     W d    d S 1 sQw   Y  d S )	N      #@r   r   r   r!   r"   r   1Must pass one of comass, span, halflife, or alphar   r   r:   r   r,   r-   r.   r   rZ   r   r1   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 s1w   Y  tjt|d | j d
dd W d    n1 sOw   Y  tjt|d | j d
ddd W d    n1 snw   Y  d}tjt|d |    W d    d S 1 sw   Y  d S )NgH+@r   rX   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 sw   Y  d}t jt|d |jddd W d    n1 s:w   Y  t jt|d |jddd W d    n1 sXw   Y  t jt|d |jddd W d    d S 1 sww   Y  d S )	Nr   r"   r!   rX   r   r$   )r   r   r    )r,   r-   r.   r   )r   r   r1   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 )NrP   r   r   rW   r	   F)check_names)r=   r   locslicer   	droplevelr:   ro   )r   r   rb   rc   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rT||d}|r0dd	gng d}|| |gjd
dt}t|j	|ksLJ t
|| d S d S )Nr	   r
   r7   r   r   r0   r0   r   numeric_onlyr   r   Tdrop)r   rJ   r   r   r=   aggreset_indexfloatlistcolumnsr:   r`   )	arithmetic_win_operatorsr   kernelr   r   oprb   r   rc   r   r   r   test_numeric_only_frame  s   
r   r   use_argc                 C   s   t g dddd}|d t|d< |r|fnd}|jddd}t|| }||d	|i}|r3d
dgng d}|| t}	|rC|	fnd}
|	jddd}t|| }||
d	|i}t|| d S )Nr	   r
   r7   r
   r7   r   r0   r   r	   r   r   r   r   )r   rJ   r   r   r=   r   r:   r`   )r   r   r   r   rq   r   r   rb   r   df2arg2ewm2op2rc   r   r   r    test_numeric_only_corr_cov_frame  s   

r   r9   c           
      C   s   | }t dg|d}|jddd}t||d }|d u rd S |rG|tu rGd| d}tjt|d ||d W d    d S 1 s@w   Y  d S ||d}||gjd	d
	t
}	t||	 d S )Nr	   r8   r
   r   ExponentialMovingWindow.  does not implement numeric_onlyr"   r   Tr   )r   r   r=   r   r,   r-   r   r   r   rJ   r   r:   ro   )
r   r   r9   r   rl   r   r   r1   rb   rc   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|| }|rH|tu rHd|  d}tjt|d	 ||d
|i W d    d S 1 sAw   Y  d S ||d
|i}	|t}
|rY|
fnd}|
jddd}t|| }||d
|i}t	
|	| d S )Nr   r8   r   r
   r	   r   r   r   r"   r   )r   r   r=   r   r,   r-   r   rJ   r   r:   ro   )r   r   r   r9   rl   rq   r   r   r1   rb   ser2r   r   r   rc   r   r   r   !test_numeric_only_corr_cov_series  s    
"

r   )@numpyr   r,   pandas.errorsr   pandasr   r   r   r   pandas._testing_testingr:   pandas.core.windowr   r   r2   markparametrizerB   rG   rK   rM   rO   rE   rJ   rf   rd   ri   rm   rp   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   intr   r   r   r   r   r   r   <module>   s   ,






$
	








 
	)
)



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