U
    _{fLt                     @   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	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
RangeIndex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   d/var/www/html/Darija-Ai-API/env/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'   r9   r:   r*   r+   r   r   r   r   right_multi5   s    	
r;   c                   C   s
   dddgS )Nr%   r&   r'   r   r   r   r   r   on_cols_multiC   s    r<   c                   C   s   dddddgS )Nr%   r&   r'   r(   r9   r   r   r   r   r   idx_cols_multiH   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@   rA   sort)joinreset_indexr	   tmassert_frame_equal)selfr   r   	join_typeon_colsresultexpectedr   r   r   test_merge_on_multikeyN   s        z%TestMergeMulti.test_merge_on_multikeyrD   FTc              
      sn  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|d 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)r0   r   r   r   <lambda>e       zNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>c                    s   |   td S )Nr0   )maprR   )tsZiordr   r   rS   f   rT   rO   rQ   g      Y@rP   r   g     @)fillna)r   fr   rW   r   	bind_colsd   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   rC      4th5thF)Zcheck_names	mergesortkind)r@   rD   rA   )rE   r   AssertionErrorZisnaanyrG   Zassert_series_equalilocnamerH   sort_valuesr	   rF   r   r   )r   r   rD   resrL   outrZ   Zicolsr   r   run_assertsi   s    z>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsr0   zr[   )i     r*   r   i  floatr\   r]   T)inplace   rl   %      +   )listrU   chrr   arangerR   r   r   choiceinsertrandintr   ZastypeZpermutationrd   copyr,   nanloc)rI   rD   rj   lcr   ir   r   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_indexrA   rD   r   )Zright_onZ
left_indexrA   rD   )r	   r   rG   rH   )rI   r   r   rD   rK   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[   rl   rq   lev1lev2r   Amount)re   ZAAABBBr   )r   r   colr@   )r   r   r   r   )
r   ranger   from_productr   rt   r	   rF   rG   rH   )rI   sr   rL   rM   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   rs   i N  )r   r   Zvalue1)r   r   Zvalue2outerrA   )rG   Zrands_arrayr   Ztiler   r   r   r	   )rI   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   r[   rl      r   r
         Zdtype)r   r   v)rl   r
   )r[   r   v2      r   r   r_   T)ra   rn   )r@   rD   )r   r   Zk3r   r`   )r   r   arrayrv   Zint64r   from_tuplesrE   rz   r{   r|   r   r   rG   rH   rf   Zfloat32int32)rI   rK   r   r   r   rL   rM   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!   r0   WeVQr   hRDr~   r1   r2   r    rY   gjdZcolaZcolbZcolctagrq   rl   r   r[   r   r      r   	   r   r   r   iirs   Zcol1Zcol2Zcol3valr*   r   r?   TrC   r_   r`   )r   r,   rE   r   r{   rG   rH   rf   )rI   r   r   rL   rM   r   r   r   +test_left_join_index_multi_match_multiindex  sv    

























z:TestMergeMulti.test_left_join_index_multi_match_multiindexc                 C   sZ  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 )Nr2   r   r1   r[   r0   rl   rq   r   r   r   r   wxr   yrk   rr   qr   charr*   r   r?   TrC   r_   r`   rA   r@   )r   r,   rE   r   r{   rG   rH   rf   r	   rF   r   r   r   )rI   r   r   rL   rM   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*   r0   r1   gX9v?gʡE@)r   Zsv3r   r?   r[   )axis)r   rt   r   r   r   r{   r	   rB   rE   rG   rH   )rI   r   r   rL   rdfrM   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   r{   r   r	   rX   replacerG   rH   )rI   r   frameZ
other_dataotherrL   rM   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jd	d
dgtjd}t dddg|d}|j|d|gdd}t	
|| t |dddgdddgd}|j||jjgdd}t	
|| d S Nr[   rl   rq   z
2016-01-01z
2017-01-01z
2018-01-01r0   r*   i  i  i  r   )r0   Zkey_1innerr?   )Zkey_0Za_xZa_yr   pdto_datetimer   r   r   r   r   r	   rG   rH   )rI   r   r   	on_vector	exp_yearsrM   rL   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	   rE   rG   rH   )rI   r   r   r   Zexpected_indexrM   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[   rl   rq   r   ffffAPAi^ )household_idmalewealthr   r   r   r*   r+   )rI   	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[   rl   rq   r   nl0000301109nl0000289783gb00b03mlx29lu0197800237nl0000289965ABN AmroRobecoRoyal Dutch ShellAAB Eastern Europe Equity FundPostbank BioTech Fonds      ?皙?333333?333333?      ?)r   asset_idre   sharer   r   re   r   r*   )r   r   r{   r,   )rI   	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   rl   rq   r   r   r   r   r   )r   r   re   r   r   r   r   r   r   r   re   r   r*   )r   r,   reindex)rI   rM   r   r   r   rM     sB    	 
#zTestMergeMulti.expectedc                 C   s.   |  }|  }|j|dd}t|| d S )Nr   r   )rz   rE   rG   rH   rI   r   r   rM   rL   r   r   r   test_join_multi_levelsF  s    z%TestMergeMulti.test_join_multi_levelsc                 C   sD   |  }|  }t| | dgddddg}t|| d S )Nr   r   r?   r   )rz   r	   rF   r,   rG   rH   r   r   r   r   (test_join_multi_levels_merge_equivalenceO  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   rD   r*   )rz   rE   r   r   r   r   r   r{   r   r   rG   rH   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)rz   r   re   pytestZraises
ValueErrorrE   Z	set_names)rI   r   r   Z
portfolio2r   r   r   test_join_multi_levels_invalidr  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[   rl   rq   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   r{   r,   r   r	   rF   rG   rH   )rI   r   r   rM   rL   r   r   r   test_join_multi_levels2  s   	
!=>Bz&TestMergeMulti.test_join_multi_levels2)__name__
__module____qualname__rN   r   markparametrizer   r   r   r   r   r   r   r   r   r   asarrayr   r   r   r   fixturer   r   rM   r   r   r   r   r   r   r   r   r   r>   M   s6   
7
6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	   rF   r,   
sort_indexrE   rG   rH   rI   r-   r;   rJ   r<   r=   rM   rL   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   )	rB   r   r	   rF   r,   r  rE   rG   rH   r  r   r   r   test_join_multi_empty_frames4  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jd	d
dgtjd}t dddg|d}|j|d|gdd}t	
|| t |dddgdddgd}|j||jjgdd}t	
|| d S r   r   )rI   r
  r   r   r   rM   rL   r   r   r   r   H  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   rE   r	   rF   r,   rG   rH   )rI   Z
index_leftr   Zindex_rightr   rL   rM   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[   rl   rq   r   r0   r1   r   )r   r[   )rq   rl   )rq   r[   r   r         (   )r   r   r   r   r
   Zfing)r   r   )	r   r   r   r   rE   r   r{   rG   rH   )rI   Zmidx1Zmidx3r   r   rL   rM   r   r   r   test_join_multi_wrong_orderx  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   r   Zpandas._testingZ_testingrG   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    


	



     Y