
    bMhR>                     	   d dl Zd dlZd dlmZmZmZmZmZ d dl	m
Z d dlmZmZ d dlmZmZmZ d dlmZ d Zd Zd Zd	 Zej                            d
dedddddddddej        g
i fdej        dddddddddej        g
i fdej        dddddddddej        g
i fdej        dddddddddej        g
ddifdej         dddd d!d"ddd#ej        g
ddifd$ej!        ddddddddd%ej        g
i fg          d&             Z"d' Z#ej                            d(d)dddd*dd+ddej        ej        g
fd,dddd-d.d/ddej        ej        g
fg          d0             Z$ej                            d1d2g d3gd4g d5gg          d6             Z%d7 Z&d8 Z'd9 Z(ej                            d:dg d;fd<g d=fg          ej                            d>d$g fd?d#gfg          d@                         Z)ej                            dAeeeg          ej                            dBg dC          ej                            dDddgd dgdEddFgd dgdEdgdGz  ej        ddFej        g e* e+dHdG                    z   dEg          dI                                     Z,ej                            dJddd gdgfddFd dgddFgfdFdd gdgfdFdFd dgdFdFgfdKdL e+dL           e* e+dKdL                    dLgdKz  z   fdLdK e+dK          dKgdKz  fd d  ej-        g            ej-        g           fdd  ej-        g            ej-        g           fd dd gd gfg	          dM             Z.ej                            dN eg dOg dPdQ          dF eg dR ej/        g dP e+dS          gdTdgU          dVej0        W          f eej        ddFej        g e* e+dHdX                    z   dgdYz  dFgdZz  z    e+dX          d[          dL eg d\ ej/        dgdYz  dFgdZz  z    e+dX          gdTdgU          dVej0        W          fg          d]             Z1ej                            d^g d_          ej                            dBg d`          da                         Z2db Z3dc Z4dS )d    N)	DataFrame
MultiIndexSeriesconcat
date_range)BaseIndexerFixedForwardWindowIndexer)ExpandingIndexerFixedWindowIndexerVariableOffsetWindowIndexer)BusinessDayc                      G d dt                     }  |             }t          j        t          d          5  t	          t          d                                        |           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )8test_bad_get_window_bounds_signature.<locals>.BadIndexerc                     d S N )selfs    e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/window/test_base_indexer.pyget_window_boundszJtest_bad_get_window_bounds_signature.<locals>.BadIndexer.get_window_bounds   s    4    N__name__
__module____qualname__r   r   r   r   
BadIndexerr      s#        	 	 	 	 	r   r   zBadIndexer does not implementmatch   )r   pytestraises
ValueErrorr   rangerolling)r   indexers     r   $test_bad_get_window_bounds_signaturer&      s        [    jllG	z)H	I	I	I * *uQxx  )))* * * * * * * * * * * * * * * * * *s   0A66A:=A:c                     t          t          d                    } t                      }|                     |                                          }|                                                                 }t          j        ||           d S )N
   )r   r#   r
   r$   mean	expandingtmassert_series_equal)sr%   resultexpecteds       r   test_expanding_indexerr0   #   so    uRyyA  GYYw$$&&F{{}}!!##H68,,,,,r   c                  (   g d} t          dt          d          i          } G d dt                    } |d|           }|                    |                                          }t          dg di          }t          j        ||           d S )	NTFTFTvaluesr   c                       e Zd Zd ZdS )3test_indexer_constructor_arg.<locals>.CustomIndexerc                    t          j        |t           j                  }t          j        |t           j                  }t          |          D ]/}| j        |         rd||<   |dz   ||<   |||<   || j        z   ||<   0||fS Ndtyper      )npemptyint64r#   use_expandingwindow_size	r   
num_valuesmin_periodscenterclosedstepstartendis	            r   r   zEtest_indexer_constructor_arg.<locals>.CustomIndexer.get_window_bounds1   s    HZrx888E(:RX666C:&& 2 2%a( 2 E!HUCFF E!H!11CFF#:r   Nr   r   r   r   CustomIndexerr5   0   s#        
	 
	 
	 
	 
	r   rI   r:   r?   r>   )              ?      @rM         $@r   r#   r   r$   sumr+   assert_frame_equal)r>   dfrI   r%   r.   r/   s         r   test_indexer_constructor_argrS   +   s    444M	HeAhh'	(	(B        mGGGGZZ  $$&&F($>$>$>?@@H&(+++++r   c                  (   t          dt          d          i          }  G d dt                    } |d          }|                     |dddd	                                          }t          dg d
i          }t          j        ||           d S )Nr3   r   c                       e Zd Zd ZdS )8test_indexer_accepts_rolling_args.<locals>.CustomIndexerc                    t          j        |t           j                  }t          j        |t           j                  }t          |          D ]9}|r#|dk    r|dk    r|dk    r|dk    rd||<   |||<   '|||<   || j        z   ||<   :||fS )Nr8   r:   both   r   )r;   r<   r=   r#   r?   r@   s	            r   r   zJtest_indexer_accepts_rolling_args.<locals>.CustomIndexer.get_window_boundsG   s    HZrx888E(:RX666C:&& 2 22#q((&((		Q E!H'CFF E!H!11CFF#:r   Nr   r   r   r   rI   rV   F   s#        	 	 	 	 	r   rI   r:   r?   TrX   )rC   rB   rD   rE   )rK   rL   rN   rM         @rO   )rR   rI   r%   r.   r/   s        r   !test_indexer_accepts_rolling_argsr\   C   s    	HeAhh'	(	(B       & m***GZZ!F   	cee  ($>$>$>?@@H&(+++++r   zfunc,np_func,expected,np_kwargscountrM          @minrK   rL   r[         @      @       @max      Y@      "@stdgK@gDmK@g!?J@g'e?ddofr:   varg[{@@g[{@g[{Ħ@g      ?mediang      !@c                 4   t          j        d          }d|d<   t          d          }d}t          j        t
          |          5   | |                              |d	          }	 t          |	|                       d d d            n# 1 swxY w Y   d
}t          j        t
          |          5   | |                              |d          }	 t          |	|                       d d d            n# 1 swxY w Y    | |                              |d|          }	 t          |	|                      }
 | |          d d |         }t          j	        |
|            | |	
                    fd                    }t          j	        |
|           |dk    rdnd } | |                              ||          } t          ||                      } | |
                    fd                    }t          j	        ||           d S )NrN   rd   r      rZ   z.Forward-looking windows can't have center=Truer   T)windowrC   zAForward-looking windows don't support setting the closed argumentright)rl   rD   rY   rl   rB   rE   c                      | fi S r   r   xnp_func	np_kwargss    r   <lambda>z-test_rolling_forward_window.<locals>.<lambda>   s    8O8OY8O8O r   r]   r   rl   rB   c                      | fi S r   r   rp   s    r   rt   z-test_rolling_forward_window.<locals>.<lambda>   s    9P9Pi9P9P r   )r;   aranger	   r    r!   r"   r$   getattrr+   assert_equalapply)frame_or_seriesfuncrr   r/   rs   rE   r3   r%   r   r$   r.   	expected2rB   rolling3result3	expected3s     ` `           r   test_rolling_forward_windowr   a   s   r Yt__FF1I'A666G<E	z	/	/	/ ! !!/&))111NN   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! PE	z	/	/	/ ! !!/&))111QQ   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! of%%--W!RV-WWG#WWd##%%F x((40HOFH%%%  .O.O.O.O.O P PQQIOFI&&& w!!DKv&&..g;.WWH%gh%%''G/P/P/P/P/P Q QRRIOGY'''''s$   	9BBB69C;;C?C?c                 P   t          j        d          }d|d<   t          d          } | |                              |d|          }|                                } | ddd	d
ddddt           j        t           j        g
          d d |         }t          j        ||           d S )NrN   rd   r   rZ   rk   rn   rK   go@g\QJ@g@gv-@gA@)r;   rw   r	   r$   skewnanr+   ry   )r{   rE   r3   r%   r$   r.   r/   s          r   test_rolling_forward_skewnessr      s    Yt__FF1I'A666Gof%%--W!RV-WWG\\^^FFF	
  ffH OFH%%%%%r   zfunc,expectedcovg     @X@g     @Wcorrg?gh"?g1=c                    t          j        d                              dd          }|dz  }d|d<   t          j        ||gd          }t	          d	          }t          |                              |d
          } t          ||                       j        t          d           dfdf         }|
                    d          }t          |          
                    d          }|j        |_        t          j        ||           d S )Nr(   r:   rY   d   )r   r   )axisrk   rZ   ru   r   T)drop)r;   rw   reshapeconcatenater	   r   r$   rx   locslicereset_indexr   namer+   ry   )r|   r/   values1values2r3   r%   r$   r.   s           r   test_rolling_forward_cov_corrr      s    , imm##B**GkGGDM^Wg.Q777F'A666G''wA'FFG#WWd##%%)5;;*:A*=>FT**Fh+++66HKHMOFH%%%%%r   zclosed,expected_datarm   )
rK   rL   r^   rM   ra         (@r`   ra   rb   re   left)
rK   rK   rL   r^         @re   r   r`   ra   rb   c                 B   t          dd          }t          t          d          |          }t          d          }t	          ||          }|                    ||                                           }t          ||          }t          j        ||           d S )N2020r(   periods)indexr:   r   offset)rD   )	r   r   r#   r   r   r$   rP   r+   rQ   )rD   expected_datar   rR   r   r%   r.   r/   s           r   &test_non_fixed_variable_window_indexerr      s     vr***E	599E	*	*	*B^^F)fEEEGZZZ//3355Fe444H&(+++++r   c                      t          j        t          d          5  t          dt	          d                     d d d            d S # 1 swxY w Y   d S )Nzindex must be a DatetimeIndex.r   foor:   r   )r    r!   r"   r   r   r   r   r   (test_variableoffsetwindowindexer_not_dtir     s    	z)I	J	J	J H H#%AGGGGH H H H H H H H H H H H H H H H H Hs   AAAc                      t          dd          } t          j        t          d          5  t	          | d           d d d            d S # 1 swxY w Y   d S )Nr   r(   r   z(offset must be a DateOffset-like object.r   r   r   )r   r    r!   r"   r   )idxs    r   +test_variableoffsetwindowindexer_not_offsetr     s    
VR
(
(
(C	z)S	T	T	T = =##e<<<<= = = = = = = = = = = = = = = = = =s   AAAc                    t          dg di          }t          d          }|                    |d|                                           }t          dg di          d d |          }t	          j        ||           d S )Nb)NNN   rY   rZ   r   rn   )rK   rK   rL   rL   )r   r	   r$   r]   r+   rQ   )rE   rR   r%   r.   r/   s        r    test_fixed_forward_indexer_countr     s    	C.../	0	0B'A666GZZwADZAAGGIIF#333455fff=H&(+++++r   )	end_valuer3   )rK   r:   r:   rk   rY   r   )rK   r:   r   rk   r:   )r|   argsquantilec                 (     G  fddt                     }g d}t          dt          d          i          } |d|          } t          |                    |          |          | }t          d|i          }	t          j        ||	           d S )Nc                       e Zd Z fdZdS )0test_indexer_quantile_sum.<locals>.CustomIndexerc                 &   t          j        |t           j                  }t          j        |t           j                  }t          |          D ]=}| j        |         rd||<   t          |	z   d          ||<   +|||<   || j        z   ||<   >||fS r7   )r;   r<   r=   r#   r>   rc   r?   )
r   rA   rB   rC   rD   rE   rF   rG   rH   r   s
            r   r   zBtest_indexer_quantile_sum.<locals>.CustomIndexer.get_window_bounds,  s    HZrx888E(:RX666C:&& 2 2%a( 2 E!H Y22CFF E!H!11CFF#:r   Nr   )r   s   r   rI   r   +  s.        
	 
	 
	 
	 
	 
	 
	r   rI   r2   r3   r   r:   rJ   )r   r   r#   rx   r$   r+   rQ   )
r   r3   r|   r   rI   r>   rR   r%   r.   r/   s
   `         r   test_indexer_quantile_sumr   %  s              544M	HeAhh'	(	(BmGGGG/WRZZ(($//6F(F+,,H&(+++++r   indexer_classr?   )r:   rY      df_data)ar   rY         c                    t          |          }d} | |          }|j        }t          |          D ]Q}|                    d          d                             |d                                           |j        |k    sJ Rd S )Nrk   rZ   r   r   r:   ru   )r   r?   r#   groupbyr$   r)   )r   r?   r   rR   
num_trialsr%   original_window_sizerH   s           r   0test_indexers_are_reusable_after_groupby_rollingr   A  s      
7		BJm444G".: ; ;


3$$G$CCHHJJJ"&::::::; ;r   z5window_size, num_values, expected_start, expected_endr   r   c           	      f   t          |           }|                    ||          \  }}t          j        |t	          j        |d d |                   d           t          j        |t	          j        |d d |                   d           t          |          t          |          k    sJ d S )NrZ   )rA   rE   F)check_dtype)r	   r   r+   assert_numpy_array_equalr;   arraylen)r?   rA   expected_startexpected_endrE   r%   rF   rG   s           r   !test_fixed_forward_indexer_boundsr   Z  s    $ (K@@@G**jt*LLJE3rxvvv.//U    RXl66T6.B%C%CQVWWWWu::S!!!!!!r   zdf, window_size, expected)r   r:   rY   )r:   rY   rY   )r   r   )r   g      ?r^   rk   r   )namesr   )r   r   r9      r      )r   r   c)@r   g      @r   r   g      @r`   r   g      )@g      *@g      +@g      ,@g      -@g      .@g      /@g      0@g     0@g      1@c                     t          |          }|                     d          d                             |d                                          }t	          j        ||           d S )NrZ   r   r   r:   ru   )r	   r   r$   r)   r+   r,   )rR   r?   r/   r%   r.   s        r   0test_rolling_groupby_with_fixed_forward_specificr   v  sa    l (K@@@GZZ__S!))a)HHMMOOF68,,,,,r   
group_keys)	)r:   )r:   rY   )rY   r:   )r:   r:   rY   )r:   rY   r:   )r:   r:   rY   rY   )r:   rY   rk   rY   rk   )r:   r:   rY   r:   r:   rY   r:   r:   rY   r:   r:   rY   )r:   rY   rk   r:   rY   rk   r:   rY   rk   r:   rY   rk   r:   rY   rk   )r:   rY   rk   r   r         c           	         t          t          j        t          |                     t          j        t          |           t          j                  dz   t          j        t          |           t          j                  d          }t                    }|	                    d          d         
                    |d                                          }dd	g|j        _        |	                    d          g d         }t          fd
|D                       }|                    dd	g          d         }t!          j        ||           d S )Nr8      )r   r   r   rZ   r   r   r:   ru   r   c           
          g | ]B\  }                     fd t          t                              D                       CS )c                 h    g | ].}d          j         ||z                                d          /S )r   r:   )	min_count)ilocrP   ).0rH   gr?   s     r   
<listcomp>zKtest_rolling_groupby_with_fixed_forward_many.<locals>.<listcomp>.<listcomp>  sN        cFKAO 348818EE  r   )r   )assignr#   r   )r   _r   r?   s     @r   r   z@test_rolling_groupby_with_fixed_forward_many.<locals>.<listcomp>  sz     	
 	
 	
 1 HH    "3q66]]     	
 	
 	
r   )r   r;   r   listrw   r   float64r=   r	   r   r$   rP   r   r   r   	set_indexr+   r,   )r   r?   rR   r%   r.   groupsmanuals    `     r   ,test_rolling_groupby_with_fixed_forward_manyr     sE   " 
$z**++3z??"*===B3z??"(;;;	
 	

 
B (K@@@GZZ__S!))a)HHLLNNFsFLZZ_____-F	
 	
 	
 	
 	
 	
 	

 
F sCj))#.F66*****r   c                      G d dt                     }  |             }t          d                              |          }d}t          j        t
          |          5  |                                 d d d            n# 1 swxY w Y   t          j        t
          |          5  t          t          |                     d d d            n# 1 swxY w Y   t          j        t
          |          5  |	                    d           d d d            n# 1 swxY w Y   t          j        t
          |          5  |
                    d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )4test_unequal_start_end_bounds.<locals>.CustomIndexerc                 X    t          j        dg          t          j        ddg          fS Nr:   rY   r;   r   r   rA   rB   rC   rD   rE   s         r   r   zFtest_unequal_start_end_bounds.<locals>.CustomIndexer.get_window_bounds  s%    8QC=="(Aq6"2"222r   Nr   r   r   r   rI   r     s#        	3 	3 	3 	3 	3r   rI   r:   rF   r   Tpairwiser   r   r$   r    r!   r"   r)   nextiterr   r   rI   r%   rollr   s       r   test_unequal_start_end_boundsr     s]   3 3 3 3 3 3 3 3 mooG!99W%%DE	z	/	/	/  		               
z	/	/	/  T$ZZ               
z	/	/	/ ! !		4	   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 
z	/	/	/    $                                   sH   A>>BB$CCC3DDD<E  E$'E$c                      G d dt                     }  |             }t          ddg                              |          }d}t          j        t
          |          5  |                                 d d d            n# 1 swxY w Y   t          j        t
          |          5  t          t          |                     d d d            n# 1 swxY w Y   t          j        t
          |          5  |	                    d           d d d            n# 1 swxY w Y   t          j        t
          |          5  |
                    d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )4test_unequal_bounds_to_object.<locals>.CustomIndexerc                 V    t          j        dg          t          j        dg          fS r   r   r   s         r   r   zFtest_unequal_bounds_to_object.<locals>.CustomIndexer.get_window_bounds  s!    8QC=="(A3--//r   Nr   r   r   r   rI   r     s#        	0 	0 	0 	0 	0r   rI   r:   zstart and endr   Tr   r   r   s       r   test_unequal_bounds_to_objectr     sa   0 0 0 0 0 0 0 0 mooG1a&>>!!'**DE	z	/	/	/  		               
z	/	/	/  T$ZZ               
z	/	/	/ ! !		4	   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 
z	/	/	/    $                                   sH   B  BB&CCC5DDD>E""E&)E&)5numpyr;   r    pandasr   r   r   r   r   pandas._testing_testingr+   pandas.api.indexersr   r	   pandas.core.indexers.objectsr
   r   r   pandas.tseries.offsetsr   r&   r0   rS   r\   markparametrizer   r   r_   rc   rf   rh   ri   r   r   r   r   r   r   r   r   r   r#   r   r   r   from_arraysr   r   r   r   r   r   r   r   <module>r      s1                                           / . . . . .* * *- - -, , ,0, , ,< %	#S#sCc3RVLbQ	c3S#sCbfMrRF#sE5%c3G		
 F QK	
$ F QK	
$ I#sCc3S"&A		
W14 4j'( '(k4 4j'(T& & &2 	c3c5#sBFBFKL"$"	
 *& &+ *&  	EEEF	CCCD , , ,H H H= = =, , , q"3"3"34r;L;L;L6MN  )XrNZ#<O+PQQ, , RQ ,0 (*CEUV  


33!fAq6""!fAq6""cBhbfaBF3dd55B<<6H6HHII 
; 
;  43 
; ;	
AsQC	
A1v1v	
AsQC	
A1v1v	
Bb		44a--q89	Qa1#'"	
Axrx||XRXb\\*	
Axrx||XRXb\\*	
AsQC
 " " "  IIIIIII6677F,j,iiiq-B3PT+VVVj	  		
 I&!Q/$$uuQ||2D2DDqA38+r   F  ( -j,S1WsRx'r3C;   j3  $	
03 3h- -i3 3h- 
 
 
  (>(>(>??+ + @? +>     *         r   