U
    f/e%                     @   s  d dl Zd dlZd dl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 d dlmZ dd Zdd	 Zd
d Zdd Zejdeeg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ejd+d,d- Z ejdeegd.d/ Z!ejd0d1dddd2dd3ddejejg
fd4dddd5d6d7ddejejg
fgd8d9 Z"ejd:d;dddddd<ddddg
gd=ddddd>dd>dddg
ggd?d@ Z#dAdB Z$ejdCd#dd#d#dDdEgfdFdd#d dDd#gfgejdGd)g fdHd(gfgdIdJ Z%dS )K    N)	DataFrameSeries
date_range)BaseIndexerFixedForwardWindowIndexer)ExpandingIndexerVariableOffsetWindowIndexer)BusinessDayc               	   C   sF   G dd dt } |  }tjtdd ttd| W 5 Q R X d S )Nc                   @   s   e Zd Zdd ZdS )z8test_bad_get_window_bounds_signature.<locals>.BadIndexerc                 S   s   d S N )selfr   r   I/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/window/test_base_indexer.pyget_window_bounds   s    zJtest_bad_get_window_bounds_signature.<locals>.BadIndexer.get_window_boundsN__name__
__module____qualname__r   r   r   r   r   
BadIndexer   s   r   zBadIndexer does not implementmatch   )r   pytestraises
ValueErrorr   rangerolling)r   indexerr   r   r   $test_bad_get_window_bounds_signature   s    r   c                  C   s<   t td} t }| | }|   }t|| d S )N
   )r   r   r   r   ZmeanZ	expandingtmZassert_series_equal)sr   resultexpectedr   r   r   test_expanding_indexer    s
    r#   c                  C   sn   dddddg} t dtdi}G dd dt}|d| d}|| }t dd	d
dddgi}t|| d S )NTFvaluesr   c                   @   s   e Zd Zdd ZdS )z3test_indexer_constructor_arg.<locals>.CustomIndexerc                 S   sl   t j|t jd}t j|t jd}t|D ]:}| j| rLd||< |d ||< q(|||< || j ||< q(||fS NZdtyper      )npemptyint64r   use_expandingwindow_sizer   Z
num_valuesmin_periodscenterclosedstartendir   r   r   r   .   s    
zEtest_indexer_constructor_arg.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   CustomIndexer-   s   r4   r'   r,   r+                 ?      @      $@r   r   r   r   sumr   assert_frame_equal)r+   dfr4   r   r!   r"   r   r   r   test_indexer_constructor_arg(   s    r>   c                  C   sf   t dtdi} G dd dt}|dd}| j|dddd	 }t dd
ddddgi}t|| d S )Nr$   r   c                   @   s   e Zd Zdd ZdS )z8test_indexer_accepts_rolling_args.<locals>.CustomIndexerc                 S   sz   t j|t jd}t j|t jd}t|D ]H}|rZ|dkrZ|dkrZ|dkrZd||< |||< q(|||< || j ||< q(||fS )Nr&   r'   both   r   )r(   r)   r*   r   r,   r-   r   r   r   r   D   s    
zJtest_indexer_accepts_rolling_args.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   r4   C   s   r4   r'   r,   Tr?   )r/   r.   r0   r6   r7   r9   r8         @r:   )r=   r4   r   r!   r"   r   r   r   !test_indexer_accepts_rolling_args@   s    
rC   constructorzfunc,np_func,expected,np_kwargscountr8   g       @minr6   r7   rB   g      @g      @g       @max      Y@g      "@stdgK@gDmK@g!?J@g'e?Zddofr'   varg[{@@g[{@g[{Ħ@g      ?mediang      !@z ignore:min_periods:FutureWarningc              	      s@  t d}d|d< tdd}d}tjt|d$ | |j|dd	}t||  W 5 Q R X d
}tjt|d$ | |j|dd}t||  W 5 Q R X | |j|dd}t|| }	| |}t	|	| | |
 fdd}
t	|	|
 |dkrdnd }| |j||d}t|| }| |
 fdd}t	|| d S )Nr9   rH   r      rA   z.Forward-looking windows can't have center=Truer   T)windowr/   zAForward-looking windows don't support setting the closed argumentright)rM   r0   r@   rM   r.   c                    s    | fS r
   r   xnp_func	np_kwargsr   r   <lambda>       z-test_rolling_forward_window.<locals>.<lambda>rE   r   c                    s    | fS r
   r   rP   rR   r   r   rU      rV   )r(   aranger   r   r   r   r   getattrr   assert_equalapply)rD   funcrS   r"   rT   r$   r   r   r   r!   Z	expected2r.   Zrolling3Zresult3Z	expected3r   rR   r   test_rolling_forward_windowV   s,    9

r\   c                 C   sf   t d}d|d< tdd}| |j|dd}| }| ddd	d
ddddt jt jg
}t|| d S )Nr9   rH   r   rA   rL   rO   r6   go@g\QJ@g@gv-@gA@)r(   rW   r   r   Zskewnanr   rY   )rD   r$   r   r   r!   r"   r   r   r   test_rolling_forward_skewness   s&    

r^   zfunc,expectedZcovg     @X@g     @WZcorrg?gh"?g1=c                 C   s   t ddd}|d }d|d< t j||gdd}tdd	}t|j|dd
}t||  jt	d dfdf }|j
dd}t|}|j|_t|| d S )Nr   r'   r@   d   )r   r   )ZaxisrL   rA   rO   r   T)Zdrop)r(   rW   ZreshapeZconcatenater   r   r   rX   locsliceZreset_indexr   namer   rY   )r[   r"   Zvalues1Zvalues2r$   r   r   r!   r   r   r   test_rolling_forward_cov_corr   s    
rd   zclosed,expected_datarN   g      (@leftg      @c                 C   s^   t ddd}ttd|d}td}t||d}|j|| d }t||d}t|| d S )NZ2020r   )Zperiods)indexr'   )rf   offset)r0   )	r   r   r   r	   r   r   r;   r   r<   )r0   Zexpected_datarf   r=   rg   r   r!   r"   r   r   r   &test_non_fixed_variable_window_indexer   s    rh   c                  C   sT   t dd d d dgi} tdd}| j|dd }t dddddgi}t|| d S )	Nb   r@   rA   r   rO   r6   r7   )r   r   r   rE   r   r<   )r=   r   r!   r"   r   r   r    test_fixed_forward_indexer_count  s
    
rk   )	end_valuer$   rL   r@   r_   )r[   argsZquantilec           
         sn   G  fdddt }dddddg}tdtdi}|d|d}t|||| }td|i}	t||	 d S )	Nc                       s   e Zd Z fddZdS )z0test_indexer_quantile_sum.<locals>.CustomIndexerc                    sr   t j|t jd}t j|t jd}t|D ]@}| j| rRd||< t|  d||< q(|||< || j ||< q(||fS r%   )r(   r)   r*   r   r+   rG   r,   r-   rl   r   r   r     s    
zBtest_indexer_quantile_sum.<locals>.CustomIndexer.get_window_boundsNr   r   rn   r   r   r4     s   r4   TFr$   r   r'   r5   )r   r   r   rX   r   r   r<   )
rl   r$   r[   rm   r4   r+   r=   r   r!   r"   r   rn   r   test_indexer_quantile_sum  s    ro   )&Znumpyr(   r   Zpandasr   r   r   Zpandas._testingZ_testingr   Zpandas.api.indexersr   r   Zpandas.core.window.indexersr   r   Zpandas.tseries.offsetsr	   r   r#   r>   rC   markZparametrizelenr]   rF   rG   rI   rJ   rK   filterwarningsr\   r^   rd   rh   rk   ro   r   r   r   r   <module>   s   
 "5
(



	 "