U
    *ifg8                     @   s  d dl Z 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 dd Zdd Zejdd	d
gdd Zejdd
d	gdd Zejdeddd Zdd Zdd Zdd Zejddd dd gdd Zejdd d d!d gd"d# ZG d$d% d%ZdS )&    N)	DataFrameIndex
MultiIndexSeries
date_range)	safe_sortc              	   C   s\   | }|t jt| }|jddd|}t|d t |dd  |dd  d  d S )N2      windowZmin_periodsr      )nprandomrandnlenrollingcovtmassert_almost_equal)seriesABresult r   T/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/window/test_pairwise.pytest_rolling_cov   s    r   c              	   C   s   | }|t jt| }|jddd|}t|d t |dd  |dd  d  t	 }t	 }t j
|d d< t j
|d d< |jt|d	d|}t|d || d S )
Nr   r	   r
   r   r   r      
   r   )r   r   r   r   r   corrr   r   ZcorrcoefZmakeTimeSeriesnan)r   r   r   r   abr   r   r   test_rolling_corr   s    ,r%   funcr   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 )Nr    r   r
   r   FZcheck_names)getattrr   locsliceindexZ	droplevelr   assert_series_equal)r&   framer   expectedr   r   r   test_rolling_pairwise_cov_corr*   s
     r/   methodc                    s    d t jdd }t  jdd} fdd}t|| t||   tjjj	 j
d d < t  jdd}t fdd D }t|| d S )Nr   r    r   c                    s   t jdd | S )Nr    r1   r(   r   x)r0   r   r   r   <lambda>9       z(test_flex_binary_frame.<locals>.<lambda>c                    s,   i | ]$}|t  | jd d| qS )r    r1   r2   ).0k)r-   frame2r0   r   r   
<dictcomp>C   s      z*test_flex_binary_frame.<locals>.<dictcomp>)r(   r   applyr   assert_frame_equalcopyr   r   r   shapevaluesr   )r0   r-   resZres2expZres3r   )r-   r9   r0   r   r   test_flex_binary_frame3   s    rB   r      c                 C   s@   t td}t td}|j| dj|d  s<td S )N   r1   )other)	r   r   Zzerosaranger   r!   ZisnaallAssertionError)r   srE   r   r   r   $test_rolling_corr_with_zero_varianceH   s    rJ   c               
   C   s   t tddgddgddgddgd	d
gddgg} | d jddd| d }tdd |D sdtt tjdd} | d jddd| d }tdd |D std S )NgF$?g)?gT5?g?'N?gFr1?g+	C-?gR	`?g1:b%?g9T!X4!?gXS_?gS= ?g\+Lt?r   r   T)centerr   c                 s   s"   | ]}t t |d kV  qdS r   Nr   absZ
nan_to_numr7   r4   r   r   r   	<genexpr>a   s     z#test_corr_sanity.<locals>.<genexpr>      c                 s   s"   | ]}t t |d kV  qdS rL   rM   rO   r   r   r   rP   e   s     )	r   r   arrayr   r!   rG   rH   r   Zrand)dfr@   r   r   r   test_corr_sanityQ   s     rU   c                  C   s   t dddgdddgd} t ddgddgd}| jddd|}t d d dg}t|| t dd dgdddgd}| jddd|}t|| d S )Nr   rR      r   r+   r
   g       @)r   r   r   r   r,   s1s2r   r.   Zs2ar   r   r   test_rolling_cov_diff_lengthh   s    r[   c                  C   s   t dddgdddgd} t ddgddgd}| jddd|}t d d dg}t|| t dd dgdddgd}| jddd|}t|| d S )Nr   rR   rV   r   rW   r
   g      ?)r   r   r!   r   r,   rX   r   r   r   test_rolling_corr_diff_lengthu   s    r\   fc                 C   s   | j dddj| ddS Nr    r   r
   Tpairwiser   r   r3   r   r   r   r5      r6   r5   c                 C   s   | j dddj| ddS r^   r   r!   r3   r   r   r   r5      r6   c                 C   s   t ddgddgddgddggtdd	gd
dttdddd}t tdd	gd
dtj|j|jgdd
gddd}| |}t|| d S )Nr   r   rV   rR   	   r   r   r   r   fooname   barcolumnsr+   namesfloat64)rj   r+   dtype)	r   r   ranger   from_productr+   rj   r   r<   )r]   rT   Zdf_expectedZ	df_resultr   r   r   2test_rolling_functions_window_non_shrinkage_binary   s    
rq   c                 C   s   | j dddj| ddS r^   ra   r3   r   r   r   r5      r6   c                 C   s   | j dddj| ddS r^   rb   r3   r   r   r   r5      r6   c                 C   s   t  }t tdgddtg ddd}|d d|d< t t|j|jgtg d}t tj|j|jgddgdtdgdddd	}| |}t|| | |}t|| d S )
Nr#   rd   re   rh   ri   rm   r+   rj   rk   )r+   rj   rn   )	r   r   Zastyper   rp   r+   rj   r   r<   )r]   Zdf1Zdf2Zdf1_expectedZdf2_expectedZ
df1_resultZ
df2_resultr   r   r   *test_moment_functions_zero_length_pairwise   s     	 rs   c                
   @   sh  e Zd Zejddd dd gdd Zejddd dd d	d d
d dd dd gdd Zejddd dd dd dd dd dd gdd Zejddd dd dd dd dd dd gdd Z	ejddd d d d!d d"d d#d d$d gd%d& Z
ejdd'd d(d d)d d*d d+d d,d gd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6TestPairwiser]   c                 C   s   |   S N)r   r3   r   r   r   r5      r6   zTestPairwise.<lambda>c                 C   s   |   S ru   )r!   r3   r   r   r   r5      r6   c                 C   sX   ||}t |j|j t |j|j ||}| j}| j}t j||dd d S NFZcheck_dtyper   assert_index_equalr+   rj   dropnar?   assert_numpy_array_equalselfpairwise_framespairwise_target_framer]   r   r.   r   r   r   test_no_flex   s    

zTestPairwise.test_no_flexc                 C   s   |   jddS NTr_   	expandingr   r3   r   r   r   r5      r6   c                 C   s   |   jddS r   r   r!   r3   r   r   r   r5      r6   c                 C   s   | j ddjddS NrV   r1   Tr_   ra   r3   r   r   r   r5      r6   c                 C   s   | j ddjddS r   rb   r3   r   r   r   r5      r6   c                 C   s   | j ddjddS NrV   comTr_   ewmr   r3   r   r   r   r5      r6   c                 C   s   | j ddjddS r   r   r!   r3   r   r   r   r5      r6   c                 C   s   ||}t j|jjd |jdd t t|jjd t|j  t |j|j ||}| j	}| j	}t j||dd d S Nr   Fr'   r   rw   
r   ry   r+   Zlevelsr{   r   rj   uniquerz   r?   r|   r   r   r   test_pairwise_with_self   s    
  

z$TestPairwise.test_pairwise_with_selfc                 C   s   |   jddS NFr_   r   r3   r   r   r   r5      r6   c                 C   s   |   jddS r   r   r3   r   r   r   r5      r6   c                 C   s   | j ddjddS NrV   r1   Fr_   ra   r3   r   r   r   r5      r6   c                 C   s   | j ddjddS r   rb   r3   r   r   r   r5      r6   c                 C   s   | j ddjddS NrV   r   Fr_   r   r3   r   r   r   r5      r6   c                 C   s   | j ddjddS r   r   r3   r   r   r   r5      r6   c                 C   sX   ||}t |j|j t |j|j ||}| j}| j}t j||dd d S rv   rx   r|   r   r   r   test_no_pairwise_with_self   s    

z'TestPairwise.test_no_pairwise_with_selfc                 C   s   |   j|ddS r   r   r4   yr   r   r   r5     r6   c                 C   s   |   j|ddS r   r   r   r   r   r   r5     r6   c                 C   s   | j ddj|ddS r   ra   r   r   r   r   r5   	  r6   c                 C   s   | j ddj|ddS r   rb   r   r   r   r   r5   
  r6   c                 C   s   | j ddj|ddS r   r   r   r   r   r   r5     r6   c                 C   s   | j ddj|ddS r   r   r   r   r   r   r5     r6   c                 C   sx   |||}t j|jjd |jdd t t|jjd t|j  |||}| j	}| j	}t j||dd d S r   r   )r}   r~   r   pairwise_other_framer]   r   r.   r   r   r   test_pairwise_with_other  s    

  


z%TestPairwise.test_pairwise_with_otherc                 C   s   |   j|ddS r   r   r   r   r   r   r5   '  r6   c                 C   s   |   j|ddS r   r   r   r   r   r   r5   (  r6   c                 C   s   | j ddj|ddS r   ra   r   r   r   r   r5   )  r6   c                 C   s   | j ddj|ddS r   rb   r   r   r   r   r5   *  r6   c                 C   s   | j ddj|ddS r   r   r   r   r   r   r5   +  r6   c                 C   s   | j ddj|ddS r   r   r   r   r   r   r5   ,  r6   c              	   C   s   |j jr|||nd }|d k	r|tjdd. tdt |j|j}|j |j }W 5 Q R X t	|j| t	|j | nHt
jtdd ||| W 5 Q R X t
jtdd ||| W 5 Q R X d S )NT)recordignorez'arg1' columns are not unique)matchz'arg2' columns are not unique)rj   Z	is_uniquewarningscatch_warningssimplefilterRuntimeWarningr+   unionr   ry   pytestZraises
ValueError)r}   r~   r   r]   r   Zexpected_indexZexpected_columnsr   r   r   test_no_pairwise_with_other$  s"    z(TestPairwise.test_no_pairwise_with_otherc                 C   s   |   |S ru   r   r   r   r   r   r5   J  r6   c                 C   s   |   |S ru   r   r   r   r   r   r5   K  r6   c                 C   s   | j dd|S NrV   r1   ra   r   r   r   r   r5   L  r6   c                 C   s   | j dd|S r   rb   r   r   r   r   r5   M  r6   c                 C   s   | j dd|S NrV   r   r   r   r   r   r   r5   N  r6   c                 C   s   | j dd|S r   r   r   r   r   r   r5   O  r6   c                 C   s   ||t ddddg}t|j|j t|j|j ||t ddddg}| j}| j}tj||dd |t ddddg|}t|j|j t|j|j |t ddddg|}| j}| j}tj||dd d S )Nr   rV      Frw   )r   r   ry   r+   rj   rz   r?   r{   r|   r   r   r   test_pairwise_with_seriesG  s    



z&TestPairwise.test_pairwise_with_seriesc                 C   sT   t tdtdddd}|d|}t tjgd tdddd}t|| d S )Nr   Z2020)ZperiodsrW   Z12H)	r   ro   r   r   r!   r   r"   r   r,   )r}   rI   r   r.   r   r   r   test_corr_freq_memory_errori  s    z(TestPairwise.test_corr_freq_memory_errorc              	   C   s   t tdtdtdg}td}ttddd||d}|jdd		 }t tdtdtdtdg}t tdtdtdg}tt
td
tjtd
dtd
df||d}t|| d S )NabZxyZABrV      r   rr   g?)alpha)r   r   g      @@gK\ǸO@)r   rp   listro   r   r   rF   Zreshaper   r   ZvstackfullNaNr   r<   )r}   rj   r+   rT   r   r.   r   r   r   test_cov_mulittindexp  s"    "

z!TestPairwise.test_cov_mulittindexc                 C   s   t jddgddggddgd}ttd|d	}|d
 }ttjt jtt	ddddgd ddgd gd ddgd|d}t
|| d S )NMNPQr#   r$   rk   )r   rR   )rj   rV   r   rR   rr   )r   Zfrom_arraysr   r   Zonesr   r!   r"   repeatrF   r   r<   )r}   rj   rT   r   r.   r   r   r   $test_multindex_columns_pairwise_func  s    &z1TestPairwise.test_multindex_columns_pairwise_funcN)__name__
__module____qualname__r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   rt      sx   





rt   )r   numpyr   r   Zpandasr   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.algorithmsr   r   r%   r   r   r/   rB   ro   rJ   rU   r[   r\   rq   rs   rt   r   r   r   r   <module>   s>   




