o
    gw                     @   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   s0   g d} g d}t jt| }t| ||dS )z=left dataframe (not multi-indexed) for multi-index join tests
barr
   r
   foor   bazr   quxr   snap
twoonethreer   r   r   r   r   r   r   key1key2data)nprandomrandnlenr   r    r   c/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pandas/tests/reshape/merge/test_multi.pyleft   s   r   c                  C   sF   t g dg dgg dg dgddgd} ttjdd	| g d
dS )z:right dataframe (multi-indexed) for multi-index join testsr   r
   r   r   r   r   r   
r   r   r      r!      r"      r#   r#   
r   r!   r"   r   r!   r!   r"   r   r!   r"   r   r   levelscodesnames
   r#   j_onej_twoj_threeindexcolumns)r   r   r   r   r   r/   r   r   r   right   s   r2   c                   C   :   t g dg dg dg dg ddg ddg dS )	N)Ar4   Br5   C)r4   r5   r4   r6   r4   )AMr7   IPr7   OP)hbwnhbhbor;   r:   )i  i?  i	  i  i\  )OriginDestinationPeriodTripPurpTripsr0   )r=   r>   r?   r@   r   	set_indexr   r   r   r   
left_multi*      
	rE   c                   C   r3   )	N)r4   r4   r5   r5   r6   r6   E)r4   r5   r4   r5   r4   r5   F)r7   r7   r8   r7   r9   r8   r7   )abcrJ   rI   rJ   rI   )d   P   Z   rM   K   #   7   )r=   r>   r?   LinkTypeDistancerB   )r=   r>   r?   rR   rC   r   r   r   r   right_multi8   rF   rT   c                   C      g dS )N)r=   r>   r?   r   r   r   r   r   on_cols_multiF      rV   c                   C   rU   )N)r=   r>   r?   r@   rR   r   r   r   r   r   idx_cols_multiK   rW   rX   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 g dg dgg dg dgddgd| _ttjdd	| jg d
d| _g d}g d}tjt|}t|||d| _d S )Nr   r   r    r$   firstsecondr%   r)   r#   r*   r.   r	   r   r   )	r   r/   r   r   r   r   to_joinr   r   )selfr   r   r   r   r   r   setup_methodQ   s   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r`   ra   sort)joinreset_indexr   tmassert_frame_equal)r]   r   r2   	join_typeon_colsresultexpectedr   r   r   test_merge_on_multikeyo   s   z%TestMergeMulti.test_merge_on_multikeyrd   FTc              
      sf  g d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)rI   r   r   r   <lambda>   s    zNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>c                    s   |   td S )NrI   )maprq   )tsiordr   r   rr      s    rn   rp   g      Y@ro   r   g     @)fillna)dffr   ru   r   	bind_cols   s   .z<TestMergeMulti.test_left_join_multi_index.<locals>.bind_colsc                    s   | j |d|d}t| t|d k sJ |d   rJ |d   r)J tj|d |d  dd  |jd d d df }tj|d |dd |jd u sTJ |rat||j	d	d
 t
| | |dd}tt||_t|| d S )Nr   rc   r!   4th5thF)check_names	mergesortkind)r`   rd   ra   )re   r   isnaanyrg   assert_series_equalilocnamerh   sort_valuesr   rf   r   aranger/   )r   r2   rd   resrk   outrz   icolsr   r   run_asserts   s   z>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsrI   zr!   )i  r"   rn   rp   rB   ro   r   i  r{   r|   T)inplace   r"   %   r#   +   )listrs   chrr   r   rq   r   r   choiceinsertrandintr   permutationr   copyrD   nanloc)r]   r   r2   rd   r   lcir   r   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   )left_onright_indexra   rd   r2   )right_on
left_indexra   rd   )r   r0   rg   rh   )r]   r   r2   rd   rj   merged_left_right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g dgddgddd	}ttd
g ddd}t|| ddgd}ttd
g ddgd tdd}t	|| d S )N   r4   r5   r!   r"   r#   lev1lev2r(   Amount)r   AAABBB)r!   r"   r#   r!   r"   r#   r   )r   r   colr`   )r   r   r   r   )
r   ranger   from_productr   r   r   rf   rg   rh   )r]   srx   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 )
Nr)   i'  r"   r   i N  )r   r   value1)r   r   value2outerra   )rg   rands_arrayr   tiler   r   r   r   )r]   r   r   rx   df2r   r   r    test_compress_group_combinations   s   &z/TestMergeMulti.test_compress_group_combinationsc                 C   s  ddg}t g d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 g dd ddgd tjg d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k2)r   r!   r"      r   r
         )dtype)r   r   v)r"   r
   )r!   r   v2      r1   r   r"   r!   r   T)r   r   )r`   rd   )r   r   k3r   r   )r   r   arrayr   int64r   from_tuplesre   r   r   r   r   r   rg   rh   r   float32int32)r]   rj   r   r/   r2   rk   rl   r   r   r   #test_left_join_index_preserve_order   sH   




	
z2TestMergeMulti.test_left_join_index_preserve_orderc                 C   s  t g dg dg dg dg dg dg dg dg d	g d
g
g dg dd}t g dg dg dg dg dg dg dg dg dg dg dg dg dg dgg ddg d}|j|g dd d!}t g d"g d#d$d%d&d'tjgg d(g d)g d*d+d%d,d-tjgg d.g d/g d0g d1g d2g d3g d4gg d5g d6d}t|| |j|g dd d7d8}|jg dd9d:}t|| d S );N)XYr6   rI   )Wr   r6   e)VQr4   h)r   RDr   )r   r   r   rJ   )r   r   r4   rK   )r   r   r5   ry   )r   r   r6   g)r   r   r6   j)r   r   r5   d)colacolbcolctag)
r#   r"   r   r!   r   r      r   	   r   r0   r/   )r   r   r6   r   )r   r   r5   r#   )r   r   r5   r   )r   r   r4   r!   )r   r   r4   r   )r   r   r5   r   )r   r   r6   r   )r   r   r6   r   )r   r   r6   i)r   r   r6   i)r   r   r6   r   )r   r   r   r"   )r   r   r   r   )r   r   r4   )col1col2col3valrB   )r   r   r   )r   r   r   r   r_   )r   r   r6   rI   r   )r   r   r6   rI   r   r   r   r6   r   )r   r   r4   r   r   )r   r   r   r   r"   )r   r   r   r   r   r   r   rJ   )r   r   r4   rK   r!   )r   r   r4   rK   r   )r   r   r5   ry   r#   )r   r   r5   ry   r   )r   r   r6   r   r   )r   r   r6   r   r   )r   r   r5   r   r   )r   r   r   r   r   )r#   r#   r"   r   r!   r!   r   r   r   r   r   r   r   r   Trc   r   r   )r   rD   re   r   r   rg   rh   r   )r]   r   r2   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g d
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 g dg dg dg dddtjgg dg dddtjggg d g d!d}t|| |j|ddd"d#}|jdd$d%}t|| t||	 ddd&}t
t||_t|| d S )'NrK   r   rJ   r!   rI   r"   r#   r   r   )r"   r   r!   r#   r   r   wxr   yr   rr   qr   charrB   r   r_   )rK   r   r   )rK   r   r   )rK   r   r   )rK   r   r   )rI   r"   r   )rI   r"   r   )r   r   r   )r"   r"   r"   r"   r   r!   r!   r#   Trc   r   r   ra   r`   )r   rD   re   r   r   rg   rh   r   r   rf   r   r   r/   )r]   r   r2   rk   rl   	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g d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 )Nabcder   )idv1r   dummyv3rB   rI   rJ   gX9v?gʡE@)r   sv3r   r   r_   r!   )axis)r   r   r   r   r   r   r   rb   re   rg   rh   )r]   r   r2   rk   rdfrl   r   r   r   test_left_merge_na_buglet  s$   




z(TestMergeMulti.test_left_merge_na_bugletc              
   C   s   g dg dg dddt jgg dg dddt jgg d	g d
g	}t|g d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|g dd}|j|dd}|dj|ddd}|dt j}t|| d S )N)  r4         ?)r   r5   r   )  r5   r   i  r5   )  r5         @)r   r6   r   r6   )  r6   g      @)r   r6   r   )yearpanelr   rB   r4   r   r   r   r   r   i)r   r   r   r   rw   replacerg   rh   )r]   r   frame
other_dataotherrk   rl   r   r   r   test_merge_na_keys  s.   







z!TestMergeMulti.test_merge_na_keysklassNc                 C      t g dg ddgd}t|j|_|jj}|d ur||}t g dg dd}|j|d|gdd}t|| t g dg dg dd	}|j||jjgdd}t|| d S 
Nr   )z
2016-01-01z
2017-01-01z
2018-01-01rI   rB   )i  i  i  )rI   key_1innerr_   )key_0a_xa_yr   pdto_datetimer/   r   r   rg   rh   )r]   r  rx   	on_vectorrl   rk   r   r   r   test_merge_datetime_index     z(TestMergeMulti.test_merge_datetime_index
merge_typer   r2   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r_t 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-01r4   z
1950-01-02r5   dater   r   )r   r/   stater.   r   )r   r  r   r   )r  r   r2   )r   r   r   r   r   re   rg   rh   )r]   r  r   r2   expected_indexrl   results_mergeresults_joinr   r   r   (test_merge_datetime_multi_index_empty_df  sD   
z7TestMergeMulti.test_merge_datetime_multi_index_empty_dfc                 C   s.   t g dg dg ddg ddd}|S )Nr   )r   r!   r   )ffffAPAi^ )household_idmalewealthrB   r  rC   )r]   	householdr   r   r   r    s   zTestMergeMulti.householdc              
   C   sP   t g dddddddtjgddd	d	d
dtjgg ddg ddddg}|S )Nr!   r"   r"   r#   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.        ?r,  )r  asset_idr   sharerB   r  r1  )r   r   r   rD   )r]   	portfolior   r   r   r3  %  s2   
	
zTestMergeMulti.portfolioc                 C   sH   t g dg dg dg dg dg dddd	gjg d
d}|S )N)r   r!   r!   r   r   r   )r  r  r      xAr4  r4  )r&  r'  r(  r(  r)  r*  )r,  r-  r.  r/  r.  r0  )r!   r"   r"   r#   r#   r#   )r!  r"  r#  r#  r$  r%  )r  r  r   r2  r  r1  r  r1  )r  r  r   r2  rB   )r   rD   reindex)r]   rl   r   r   r   rl   B  s   
#zTestMergeMulti.expectedc                 C   s.   |  }|  }|j|dd}t|| d S )Nr	  r   )r   re   rg   rh   r]   r3  r  rl   rk   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	  r_   r1  )r   r   rf   rD   rg   rh   r6  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   r2  r,  r   r  r1  r   r1   r   T)r   rd   rB   )r   re   r   r   r   r   r   r   r5  r0   rg   rh   r6  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 d    n1 s%w   Y  |  }|jddg tjtdd |j|dd W d    d S 1 sPw   Y  d S )Nr   z+cannot join with no overlapping index names)matchr	  r   r  z'columns overlap but no suffix specified)r   r/   r   pytestraises
ValueErrorre   	set_names)r]   r3  r  
portfolio2r   r   r   test_join_multi_levels_invalid  s   "z-TestMergeMulti.test_join_multi_levels_invalidc              	   C   s@  t g dddddddtjgg ddg ddd	d
g}t g dg dg ddd
dg}t g dg dg dg dg ddg djddgd}t| | d
gddg d}t|| t g dg dg dg dg ddg djddgd}t| | d
gd dg d}t|| d S )!Nr   r!  r#  r$  r%  r+  )r  r1  r2  rB   r  r1  )r#  r#  r#  r$  r$  )               )S緖?D >?
?HRE?)r1  t
log_returnrK  )r"   r"   r"   r#   r#   r#   r#   r#   )r#  r#  r#  r#  r#  r#  r$  r$  )rA  rB  rC  rA  rB  rC  rD  rE  )r.  r.  r.  r/  r/  r/  r.  r.  )rF  rG  rH  rF  rG  rH  rI  rJ  )r  r1  rK  r2  rL  )r  r1  rK  r2  rL  r	  r_   )r!   r"   r"   r"   r"   r#   r#   r#   r#   r#   r#   r   )r!  r!  r#  r#  r#  r#  r#  r#  r$  r$  r%  N)NNrA  rB  rC  rA  rB  rC  rD  rE  NN)r,  r-  r.  r.  r.  r/  r/  r/  r.  r.  r0  r,  )NNrF  rG  rH  rF  rG  rH  rI  rJ  NNr   )	r   r   r   rD   r5  r   rf   rg   rh   )r]   r  rL  rl   rk   r   r   r   test_join_multi_levels2  s   	



!

=B
z&TestMergeMulti.test_join_multi_levels2) __name__
__module____qualname__r^   rm   r;  markparametrizer   r   r   r   r   r   r   r   r  r   asarrayr   r   r  r  fixturer  r3  rl   r7  r8  r9  r@  rM  r   r   r   r   rY   P   s:    
6
7E2 

.


&	rY   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   rD   
sort_indexre   rg   rh   r]   rE   rT   ri   rV   rX   rl   rk   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 )NrB   r   r   )	rb   r0   r   rf   rD   rV  re   rg   rh   rW  r   r   r   test_join_multi_empty_framesX  s   z/TestJoinMultiMulti.test_join_multi_empty_framesboxNc                 C   r  r  r  )r]   rZ  rx   r  rl   rk   r   r   r   r  m  r  z,TestJoinMultiMulti.test_merge_datetime_indexc                 C   s   t jg dddgd}tg dg dd|d}t jg d	dd
gd}tg dg dd|d}||}t| | dgddg d}t|| d S )N))K0X0)r[  X1)K1X2keyr   r   )A0A1A2)B0B1B2)r4   r5   r1   ))r[  Y0)r^  Y1)K2Y2)ri  Y3r   )C0C1C2C3)D0D1D2D3)r6   r   r	  r_   )r`  r   r   )	r   r   r   re   r   rf   rD   rg   rh   )r]   
index_leftr   index_rightr2   rk   rl   r   r   r   test_single_common_level  s(   

z+TestJoinMultiMulti.test_single_common_levelc                 C   s   t jddgddggddgd}t jg dddgd}t|d	g d
id}t|dg did}||}t|g d
dddtjgdd}t|| d S )Nr!   r"   r#   r   rI   rJ   r   ))r   r!   )r#   r"   )r#   r!   r   )r)         (   )r/   r   r   )r   r
   fingrz  r   r
   )r   r   )	r   r   r   r   re   r   r   rg   rh   )r]   midx1midx3r   r2   rk   rl   r   r   r   test_join_multi_wrong_order  s   
z.TestJoinMultiMulti.test_join_multi_wrong_order)rN  rO  rP  rX  rY  r;  rQ  rR  r   rS  r   r   r  rv  r}  r   r   r   r   rU  E  s    
rU  )numpyr   r;  pandasr  r   r   r   r   r   pandas._testing_testingrg   pandas.core.reshape.concatr   pandas.core.reshape.merger   rT  r   r2   rE   rT   rV   rX   rY   rU  r   r   r   r   <module>   s4    


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