U
    +ifs                     @   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lmZ ejdd Zejdd Zejd	d
 Zejdd Zejdd Zejdd ZG dd dZG dd dZdS )    N)	DataFrameIndex
MultiIndexSeries	Timestamp)concat)mergec               
   C   sP   ddddddddddg
} ddddddddddg
}t jt| }t| ||d	S )
z=left dataframe (not multi-indexed) for multi-index join testsbarfooZbazZquxZsnaptwoonethreekey1key2data)nprandomrandnlenr   r    r   X/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/reshape/merge/test_multi.pyleft   s    r   c                 C   s    | }ddg|j _dddg|_|S )z:right dataframe (multi-indexed) for multi-index join testsr   r   Zj_oneZj_twoZj_three)indexnamescolumns)Z multiindex_dataframe_random_datadfr   r   r   right   s    r   c                
   C   sb   t dddddgdddddgdddddgddd	ddgd
ddddgddddddgdddddgS )NABCAMIPOPZhbwZnhbZhboi  i?  i	  i  i\  )OriginDestinationPeriodTripPurpTripsr$   r%   r&   r'   r(   r   r   	set_indexr   r   r   r   
left_multi&   s    	
r,   c                   C   sv   t dddddddgdddddddgdddddddgd	d
dd
d	d
d	gdddddddgddddddgdddddgS )Nr   r   r    EFr!   r"   r#   abcd   P   Z   K   #   7   )r$   r%   r&   LinkTypeDistancer$   r%   r&   r8   r9   r)   r*   r   r   r   r   right_multi4   s    	
r:   c                   C   s
   dddgS )Nr$   r%   r&   r   r   r   r   r   on_cols_multiB   s    r;   c                   C   s   dddddgS )Nr$   r%   r&   r'   r8   r   r   r   r   r   idx_cols_multiG   s    r<   c                   @   s  e Zd Zdd Zejdddgdd Zejdddgdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zejddejeegdd Zejdddgdd  Zejd!d" Zejd#d$ Zejd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 ZdS )1TestMergeMultic                 C   s   ddg}|j |||djdd}t|| ||d}t|| |j |||ddjdd}t|| ||dd}t|| d S )Nr   r   onhowT)dropr?   r@   sort)joinreset_indexr   tmassert_frame_equal)selfr   r   	join_typeon_colsresultexpectedr   r   r   test_merge_on_multikeyM   s        z%TestMergeMulti.test_merge_on_multikeyrC   FTc              
      sh  dddgdd   fdd}t ttttdtd	d
 }ttj|dddgd}|	d
dtj
ddt| tjt|}|j|  } ||d<  | |d< |jdd |||| tj|jd
d ddf< tj|jdd ddf< tj|jdd ddf<  ||d< tjt|}|j|d df } | |d< |jdd |||| d S )N1st2nd3rdc                    sB   dd   fdd}|| d || d d  | d  dd	  S )
Nc                 S   s   | | krdS t | S )Nr   )ord)r/   r   r   r   <lambda>d       zNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>c                    s   |   td S )Nr/   )maprQ   )tsZiordr   r   rR   e   rS   rN   rP   g      Y@rO   r   g     @)fillna)r   fr   rV   r   	bind_colsc   s    z<TestMergeMulti.test_left_join_multi_index.<locals>.bind_colsc                    s   | j |d|d}t| t|d k s*t|d   r>t|d   rRttj|d |d  dd  |jd d d df }tj|d |dd |jd kst|rt	||j
d	d
 t| | |dd}tt||_t	|| d S )Nr   rB      4th5thF)Zcheck_names	mergesortkind)r?   rC   r@   )rD   r   AssertionErrorZisnaanyrF   Zassert_series_equalilocnamerG   sort_valuesr   rE   r   aranger   )r   r   rC   resrK   outrY   Zicolsr   r   run_assertsh   s    z>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsr/   zrZ   )i     r)   r   i  r[   r\   T)inplace   rl   %      +   )listrT   chrr   rf   rQ   r   r   choiceinsertrandintr   Zpermutationrc   copyr+   nanloc)rH   r   r   rC   rj   lcir   ri   r   test_left_join_multi_index_   s*    
"z)TestMergeMulti.test_left_join_multi_indexc                 C   sJ   ddg}|j ||dd|d}|j ||dd|d}||j }t|| d S )Nr   r   Tr   )Zleft_onZright_indexr@   rC   r   )Zright_onZ
left_indexr@   rC   )r   r   rF   rG   )rH   r   r   rC   rJ   Zmerged_left_rightZmerge_right_leftr   r   r   test_merge_right_vs_left   s"            
z'TestMergeMulti.test_merge_right_vs_leftc                 C   s   t tdtjddgdddggddgd	d
d}ttdddddddgdd}t|| ddgd}ttdddddddgdgd tdd}t	|| d S )N   r   r   rZ   rl   rp   lev1lev2r   Amount)rd   ZAAABBBr   )r   r   colr?   )r   r   r   r   )
r   ranger   from_productr   rs   r   rE   rF   rG   )rH   sr   rK   rL   r   r   r   .test_merge_multiple_cols_with_mixed_cols_index   s     z=TestMergeMulti.test_merge_multiple_cols_with_mixed_cols_indexc                 C   s|   t dd}t|d}|d d d }t||tjdd}t|d d d |d d d tjdd}t||dd	 d S )
N
   i'  rl   rr   i N  )r   r   Zvalue1)r   r   Zvalue2outerr@   )rF   Zrands_arrayr   Ztiler   r   r   r   )rH   r   r   r   Zdf2r   r   r    test_compress_group_combinations   s    &z/TestMergeMulti.test_compress_group_combinationsc                 C   s  ddg}t dddgd ddgd	 tjtd
tjdd}tddg}t dddgi|d}|j||d}| }tj	|d< d|j
|jdk|jdk@ df< d|j
|jdk|jdk@ df< t|| |j|ddd |j||dd}t|| t dddgd ddgd	 tjdddgd tjdtjtd
tjdd}tddg}t dddgi|d}|j||d}| }tj	|d< d|j
|jdk|jdk@ df< d|j
|jdk|jdk@ df< t|| |j|dd}|j||dd}t|| d S )Nk1k2r   rZ   rl      r
   r	         )Zdtype)r   r   v)rl   r	   )rZ   r
   v2      r   r   r^   T)r`   rm   )r?   rC   )r   r   Zk3r   r_   )r   r   arrayrf   Zint64r   from_tuplesrD   rx   ry   rz   r   r   rF   rG   re   Zfloat32Zint32)rH   rJ   r   r   r   rK   rL   r   r   r   #test_left_join_index_preserve_order   sH    


	
z2TestMergeMulti.test_left_join_index_preserve_orderc                 C   sx  t ddddgddddgddd	d
gddddgddddgddd	dgddddgddddgddddgddddgg
ddddgdddddddd d!d"g
d#}t ddddgddddgdddd"gddd	dgddd	dgdddd gddddgdddd!gdddd$gdddd%gddddgddddgdddd&gddd	d'ggd(d)d*d+gd,d(d)d*g}|j|dddgd-d.}t dddddgddddd!gddddtjgddd	d
d'gdddddgddddd&gddddtjgddd	ddgddd	ddgdddddgddddd"gdddddgdddddgddddd ggddddd+gdddddddddddd d!d"gd#}t|| |j|dddgd-d/d0}|jdddgd1d2}t|| d S )3NXYr    r/   WeVQr   hRDr|   r0   r1   r   rX   gjdZcolaZcolbZcolctagrp   rl   r   rZ   r   r      r   	   r   r   r   iirr   Zcol1Zcol2Zcol3valr)   r   r>   TrB   r^   r_   )r   r+   rD   r   ry   rF   rG   re   )rH   r   r   rK   rL   r   r   r   +test_left_join_index_multi_match_multiindex  sv    

























z:TestMergeMulti.test_left_join_index_multi_match_multiindexc                 C   s\  t ddgddgddgddggdd	gddddgd
}t ddgddgddgddgddgddgddgddggddgdd}|j|ddd}t dddgdddgdddgdddgddtjgdddgdddgddtjggdd	dgddddddddgd
}t|| |j|dddd}|jddd}t|| t||	 ddd}t
t||_t|| d S )Nr1   r   r0   rZ   r/   rl   rp   r   r   r   r   wxr   yrk   rr   qr   charr)   r   r>   TrB   r^   r_   r@   r?   )r   r+   rD   r   ry   rF   rG   re   r   rE   rf   r   r   )rH   r   r   rK   rL   Z	expected2r   r   r    test_left_join_index_multi_matchF  sP    




z/TestMergeMulti.test_left_join_index_multi_matchc                 C   s   t tdtjdtjdtdtjdddddddgd	}t d
dtjtjtjgddtjtjtjgd}t||ddd}|jdgdd}||}t	
|| d S )NZabcder   )idv1r   dummyv3r   r   r   r   r   r)   r/   r0   gX9v?gʡE@)r   Zsv3r   r>   rZ   )axis)r   rs   r   r   r   ry   r   rA   rD   rF   rG   )rH   r   r   rK   rdfrL   r   r   r   test_left_merge_na_bugletx  s$    




z(TestMergeMulti.test_left_merge_na_bugletc                 C   s   dddgdddgdddgddt jgdddgdd	dgdd	t jgd
d	dgdd	dgg	}t|dddgd}ddt jgddt jgddt jgd
dt jgd
dt jgdd	t jgg}t|dddgd}|j|dd}|dj|ddd}|dt j}t|| d S )Ni  r         ?r   i  i  i  g      @r    i  g      @yearpanelr   r)   r   r   i)r   ry   r   r   rW   replacerF   rG   )rH   r   frameZ
other_dataotherrK   rL   r   r   r   test_merge_na_keys  s.    







z!TestMergeMulti.test_merge_na_keysklassNc                 C   s   t dddgdddgdgd}t|j|_|jj}|d k	rB||}t dddgd	d
dgd}|j|d|gdd}t|| t d	d
dgdddgdddgd}|j||jjgdd}t|| d S NrZ   rl   rp   z
2016-01-01z
2017-01-01z
2018-01-01r/   r)   i  i  i  )r/   Zkey_1innerr>   )Zkey_0Za_xZa_yr   pdto_datetimer   r   r   rF   rG   )rH   r   r   	on_vectorrL   rK   r   r   r   test_merge_datetime_index  s"      z(TestMergeMulti.test_merge_datetime_index
merge_typer   r   c                 C   s  t dddgitjtddgtddggddgd	d
}t tjg ddgd	dgd}tjtddgtddggddgd	}|dkrt ddgd d gd|d
}|j|dddgd}|j|dd}n<t d d gddgd|d
}|j|dddgd}|j|dd}t|| t|| d S )Nr   r   z
1950-01-01r   z
1950-01-02r   dater   r   )r   r   state)r   r   r   )r   r   r   r   )r   r   r   )r   r   r   r   r   rD   rF   rG   )rH   r   r   r   Zexpected_indexrL   Zresults_mergeZresults_joinr   r   r   (test_merge_datetime_multi_index_empty_df  sH     
 z7TestMergeMulti.test_merge_datetime_multi_index_empty_dfc                 C   s6   t dddgdddgdddgdd	d
dgdd	}|S )NrZ   rl   rp   r   ffffAPAi^ )household_idmalewealthr   r   r   r)   r*   )rH   	householdr   r   r   r     s    zTestMergeMulti.householdc                 C   sh   t dddddddgdddddd	tjgd
dddddtjgdddddddgdddddgdddg}|S )NrZ   rl   rp   r   nl0000301109nl0000289783gb00b03mlx29lu0197800237nl0000289965ABN AmroRobecoRoyal Dutch ShellAAB Eastern Europe Equity FundPostbank BioTech Fonds      ?皙?333333?333333?      ?)r   asset_idrd   sharer   r   rd   r   r)   )r   r   ry   r+   )rH   	portfolior   r   r   r     s2    
	
zTestMergeMulti.portfolioc                 C   s|   t ddddddgddddddgddddd	d
gddddddgddddddgddddddgdddgjddddgd}|S )Nr   rZ   r   r   g    xAr   r   r   r   r   r   r   r   r   r   rl   rp   r   r   r   r   r   )r   r   rd   r   r   r   r   r   r   r   rd   r   r)   )r   r+   reindex)rH   rL   r   r   r   rL      sB    	 
#zTestMergeMulti.expectedc                 C   s.   |  }|  }|j|dd}t|| d S )Nr   r   )rx   rD   rF   rG   rH   r   r   rL   rK   r   r   r   test_join_multi_levelsG  s    z%TestMergeMulti.test_join_multi_levelsc                 C   sD   |  }|  }t| | dgddddg}t|| d S )Nr   r   r>   r   )rx   r   rE   r+   rF   rG   r   r   r   r   (test_join_multi_levels_merge_equivalenceP  s    z7TestMergeMulti.test_join_multi_levels_merge_equivalencec                 C   sn   |  }|  }|j|dd}t|tddgitjdtjfgddgdd	gd
ddj|j	d}t
|| d S )Nr   r   r   r   r   r   r   r   r   r   T)r   rC   r)   )rx   rD   r   r   r   r   r   ry   r   r   rF   rG   r   r   r   r   test_join_multi_levels_outer]  s&    
 z+TestMergeMulti.test_join_multi_levels_outerc              	   C   s   |  }|  }d|j_tjtdd |j|dd W 5 Q R X |  }|jddg tjtdd |j|dd W 5 Q R X d S )Nr
   z+cannot join with no overlapping index names)matchr   r   r   z'columns overlap but no suffix specified)rx   r   rd   pytestZraises
ValueErrorrD   Z	set_names)rH   r   r   Z
portfolio2r   r   r   test_join_multi_levels_invalids  s     z-TestMergeMulti.test_join_multi_levels_invalidc                 C   s  t dddddddgddddddtjgd	d
ddddd	gddddgdddg}t dddddgdddddgdddddgdddg}t ddddddddgddddddddgddddddddgddddddddgddddddddgddddgjdd gd}t| | dgd!d"dddg}t|| t ddddddddddddgdddddddddddd gd d ddddddddd d gd	d
dddddddddd	gd d ddddddddd d gddddgjdd gd}t| | dgd#d"dddg}t|| d S )$NrZ   rl   rp   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r)                  gS緖?gDg >?g
?gHRE?)r   t
log_returnr   )r   r   r   r   r   r   r   r>   r   )	r   r   ry   r+   r   r   rE   rF   rG   )rH   r   r   rL   rK   r   r   r   test_join_multi_levels2  s   	
!=>Bz&TestMergeMulti.test_join_multi_levels2)__name__
__module____qualname__rM   r   markparametrizer}   r~   r   r   r   r   r   r   r   r   asarrayr   r   r   r   fixturer   r   rL   r   r   r   r   r   r   r   r   r   r=   L   s6   
6
7E2 

.


&	r=   c                   @   sL   e Zd Zdd Zdd Zejddej	e
egdd Zd	d
 Zdd ZdS )TestJoinMultiMultic                 C   sD   t | | ||d| }|j||d }t|| d S )Nr   r   )r   rE   r+   
sort_indexrD   rF   rG   rH   r,   r:   rI   r;   r<   rL   rK   r   r   r   test_join_multi_multi$  s    z(TestJoinMultiMulti.test_join_multi_multic                 C   s`   |j |jd}|j |jd}t| | ||d| }|j||d }t|| d S )Nr)   r   r   )	rA   r   r   rE   r+   r  rD   rF   rG   r  r   r   r   test_join_multi_empty_frames6  s    z/TestJoinMultiMulti.test_join_multi_empty_framesboxNc                 C   s   t dddgdddgdgd}t|j|_|jj}|d k	rB||}t dddgd	d
dgd}|j|d|gdd}t|| t d	d
dgdddgdddgd}|j||jjgdd}t|| d S r   r   )rH   r  r   r   rL   rK   r   r   r   r   K  s"      z,TestJoinMultiMulti.test_merge_datetime_indexc                 C   s   t jdddgddgd}tddd	gd
ddgd|d}t jddddgddgd}tddddgddddgd|d}||}t| | dgdddddg}t|| d S )N)K0ZX0)r  ZX1)K1ZX2keyr   r   ZA0A1A2B0ZB1ZB2)r   r   r   )r  ZY0)r  ZY1)K2ZY2)r  ZY3r   ZC0ZC1ZC2ZC3ZD0ZD1ZD2ZD3)r    r   r   r>   )	r   r   r   rD   r   rE   r+   rF   rG   )rH   Z
index_leftr   Zindex_rightr   rK   rL   r   r   r   test_single_common_levelc  s4      
 
   z+TestJoinMultiMulti.test_single_common_levelc                 C   s   t jddgddggddgd}t jdd	d
gddgd}t|dddddgid}t|ddddgid}||}t|ddddgdddtjgdd}t|| d S )NrZ   rl   rp   r   r/   r0   r   )r   rZ   )rp   rl   )rp   rZ   r   r         (   )r   r   r   r
   r	   Zfing)r   r   )	r   r   r   r   rD   r   ry   rF   rG   )rH   Zmidx1Zmidx3r   r   rK   rL   r   r   r   test_join_multi_wrong_order|  s    
z.TestJoinMultiMulti.test_join_multi_wrong_order)r   r   r   r  r  r   r   r   r   r   r   r   r   r  r  r   r   r   r   r   #  s   
r   )numpyr   r   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingrF   Zpandas.core.reshape.concatr   Zpandas.core.reshape.merger   r   r   r   r,   r:   r;   r<   r=   r   r   r   r   r   <module>   s2   


	



     \