U
    f/ew                     @   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foobazquxsnaptwoonethreekey1key2data)nprandomrandnlenr   r    r   I/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/reshape/merge/test_multi.pyleft   s    r   c                  C   sn   t ddddgdddggdddd	d	d
d
dddg
dd	d
dd	d	d
dd	d
g
gddgd} ttjdd| dddgdS )z:right dataframe (multi-indexed) for multi-index join testsr
   r	   r   r   r   r   r   r            r   r   levelscodesnames
   j_onej_twoj_threeindexcolumns)r   r   r   r   r   r(   r   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Tripsr2   r3   r4   r5   r6   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/   r0   r1   abcd   P   Z   K   #   7   )r2   r3   r4   LinkTypeDistancer2   r3   r4   rF   rG   r7   r8   r   r   r   r   right_multi8   s    	
rH   c                   C   s
   dddgS )Nr2   r3   r4   r   r   r   r   r   on_cols_multiF   s    rI   c                   C   s   dddddgS )Nr2   r3   r4   r5   rF   r   r   r   r   r   idx_cols_multiK   s    rJ   c                   @   s  e Zd 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	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/d0 Zd1d2 ZdS )3TestMergeMultic                 C   s   t ddddgdddggdddd	d	d
d
dddg
dd	d
dd	d	d
dd	d
g
gddgd| _ttjdd| jdddgd| _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| _d S )Nr
   r	   r   r   r   r   r   r   r   r   r   firstsecondr   r#   r$   r%   r&   r'   r   r   )	r   r(   r   r   r   r   Zto_joinr   r   )selfr   r   r   r   r   r   setup_methodQ   s0    .zTestMergeMulti.setup_methodc                 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rQ   rR   sort)joinreset_indexr   tmassert_frame_equal)rN   r   r+   	join_typeon_colsresultexpectedr   r   r   test_merge_on_multikeyo   s        z%TestMergeMulti.test_merge_on_multikeyrU   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>       zNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>c                    s   |   td S )Nr=   )maprb   )tsZiordr   r   rc      rd   r_   ra   g      Y@r`   r   g     @)fillna)dffr   rg   r   	bind_cols   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   rT   r   4th5thF)Zcheck_names	mergesortkind)rQ   rU   rR   )rV   r   AssertionErrorZisnaanyrX   Zassert_series_equalilocnamerY   sort_valuesr   rW   r   aranger(   )r   r+   rU   resr\   outrk   Zicolsr   r   run_asserts   s    z>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsr=   zr   )i  r   r7   r   i  rl   rm   T)inplace   r   %   r   +   )listre   chrr   rw   rb   r   r   choiceinsertrandintr   Zpermutationrt   copyr9   nanloc)rN   r   r+   rU   r{   lcir   rz   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_indexrR   rU   r+   )Zright_onZ
left_indexrR   rU   )r   r)   rX   rY   )rN   r   r+   rU   r[   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-   r   r   r   lev1lev2r"   Amount)ru   ZAAABBBr   )r   r   colrQ   )r   r   r   r   )
r   ranger   from_productr   r   r   rW   rX   rY   )rN   sri   r\   r]   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 )
Nr#   i'  r   r   i N  )r   r   Zvalue1)r   r   Zvalue2outerrR   )rX   Zrands_arrayr   Ztiler   r   r   r   )rN   r   r   ri   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   r   r      r
   r	         )Zdtype)r   r   v)r   r	   )r   r
   v2      r*   r   ro   T)rq   r}   )rQ   rU   )r   r   Zk3r   rp   )r   r   arrayrw   Zint64r   from_tuplesrV   r   r   r   r   r   rX   rY   rv   Zfloat32Zint32)rN   r[   r   r(   r+   r\   r]   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   r>   r?   r-   rj   gjdZcolaZcolbZcolctagr   r   r   r   r   r      r   	   r   r)   r(   iir   Zcol1Zcol2Zcol3valr7   r   rP   TrT   ro   rp   )r   r9   rV   r   r   rX   rY   rv   )rN   r   r+   r\   r]   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 )Nr?   r   r>   r   r=   r   r   r   r   r   r   wxr   yr|   rr   qr   charr7   r   rP   TrT   ro   rp   rR   rQ   )r   r9   rV   r   r   rX   rY   rv   r   rW   rw   r   r(   )rN   r   r+   r\   r]   Z	expected2r   r   r    test_left_join_index_multi_matchh  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   r7   r=   r>   gX9v?gʡE@)r   Zsv3r   rP   r   )axis)r   r   r   r   r   r   r   rS   rV   rX   rY   )rN   r   r+   r\   rdfr]   r   r   r   test_left_merge_na_buglet  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   r7   r   r   i)r   r   r   r   rh   replacerX   rY   )rN   r   frameZ
other_dataotherr\   r]   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 Nr   r   r   z
2016-01-01z
2017-01-01z
2018-01-01r=   r7   i  i  i  )r=   Zkey_1innerrP   )Zkey_0Za_xZa_yr   pdZto_datetimer(   r   r   rX   rY   )rN   r   ri   	on_vectorr]   r\   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(   stater'   r   )r   r   r   r   )r   r   r+   )r   r   r   r   r   rV   rX   rY   )rN   r   r   r+   Zexpected_indexr]   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 )Nr   r   r   r   ffffAPAi^ )household_idmalewealthr   r   r   r7   r8   )rN   	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 )Nr   r   r   r   nl0000301109nl0000289783gb00b03mlx29lu0197800237nl0000289965ABN AmroRobecoRoyal Dutch ShellAAB Eastern Europe Equity FundPostbank BioTech Fonds      ?皙?333333?333333?      ?)r   asset_idru   sharer   r   ru   r   r7   )r   r   r   r9   )rN   	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   r   r   r   g    xAr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   ru   r   r   r   r   r   r   r   ru   r   r7   )r   r9   reindex)rN   r]   r   r   r   r]   B  sB    	 
#zTestMergeMulti.expectedc                 C   s.   |  }|  }|j|dd}t|| d S )Nr   r   )r   rV   rX   rY   rN   r   r   r]   r\   r   r   r   test_join_multi_levelsi  s    z%TestMergeMulti.test_join_multi_levelsc                 C   sD   |  }|  }t| | dgddddg}t|| d S )Nr   r   rP   r   )r   r   rW   r9   rX   rY   r   r   r   r   (test_join_multi_levels_merge_equivalencer  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   rU   r7   )r   rV   r   r   r   r   r   r   r   r)   rX   rY   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)r   r(   ru   pytestZraises
ValueErrorrV   Z	set_names)rN   r   r   Z
portfolio2r   r   r   test_join_multi_levels_invalid  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 )$Nr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r7                  gS緖?gDg >?g
?gHRE?)r   t
log_returnr  )r   r   r  r   r  r  r   rP   r   )	r   r   r   r9   r   r   rW   rX   rY   )rN   r   r  r]   r\   r   r   r   test_join_multi_levels2  s   	
!=>Bz&TestMergeMulti.test_join_multi_levels2) __name__
__module____qualname__rO   r^   r   markparametrizer   r   r   r   r   r   r   r   r   r   asarrayr   r   r   r   fixturer   r   r]   r   r   r   r   r  r   r   r   r   rK   P   s8   
6
7E2 

.


&	rK   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   rW   r9   
sort_indexrV   rX   rY   rN   r:   rH   rZ   rI   rJ   r]   r\   r   r   r   test_join_multi_multiF  s    z(TestJoinMultiMulti.test_join_multi_multic                 C   s`   |j |jd}|j |jd}t| | ||d| }|j||d }t|| d S )Nr7   r   r   )	rS   r)   r   rW   r9   r  rV   rX   rY   r  r   r   r   test_join_multi_empty_framesX  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   )rN   r  ri   r   r]   r\   r   r   r   r   m  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   rP   )	r   r   r   rV   r   rW   r9   rX   rY   )rN   Z
index_leftr   Zindex_rightr+   r\   r]   r   r   r   test_single_common_level  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 )Nr   r   r   r   r=   r>   r   )r   r   )r   r   )r   r   r   r#         (   )r(   r   r   r
   r	   Zfing)r   r   )	r   r   r   r   rV   r   r   rX   rY   )rN   Zmidx1Zmidx3r   r+   r\   r]   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  E  s   
r  )Znumpyr   r   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingrX   Zpandas.core.reshape.concatr   Zpandas.core.reshape.merger   r  r   r+   r:   rH   rI   rJ   rK   r  r   r   r   r   <module>   s2   






     z