a
    d0v                     @   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   s6   g d} g d}t jdt| }t| ||dS )z=left dataframe (not multi-indexed) for multi-index join tests)
barr
   r
   foor   bazr   quxr   Zsnap)
twoonethreer   r   r   r   r   r   r      key1key2data)nprandomdefault_rngstandard_normallenr   r    r   n/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pandas/tests/reshape/merge/test_multi.pyleft   s    r   c                 C   s   | }ddg|j _g d|_|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   s:   t g dg dg dg dg ddg ddg dS )	N)Ar#   Br$   C)r#   r$   r#   r%   r#   )AMr&   IPr&   OP)hbwnhbZhbor*   r)   )i  i?  i	  i  i\  )OriginDestinationPeriodTripPurpZTripsr    )r+   r,   r-   r.   r   	set_indexr   r   r   r   
left_multi'   s    	r2   c                   C   s:   t g dg dg dg dg ddg ddg dS )	N)r#   r#   r$   r$   r%   r%   E)r#   r$   r#   r$   r#   r$   F)r&   r&   r'   r&   r(   r'   r&   )abcr6   r5   r6   r5   )d   P   Z   r9   K   #   7   )r+   r,   r-   LinkTypeZDistancer/   )r+   r,   r-   r>   r0   r   r   r   r   right_multi5   s    	r?   c                   C   s   g dS )N)r+   r,   r-   r   r   r   r   r   on_cols_multiC   s    r@   c                   C   s   g dS )N)r+   r,   r-   r.   r>   r   r   r   r   r   idx_cols_multiH   s    rA   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rD   rE   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_multikeyrH   FTc              
      s  g ddd   fdd}t ttttdtdd }ttjd		|d
ddgd}|
ddtjd	ddt|d tjd	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d	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)r5   r   r   r   <lambda>e       zNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>c                    s   |   td S )Nr5   )maprV   )tsZiordr   r   rW   f   rX   rS   rU   g      Y@rT   r   g     @)fillna)r!   fr   r[   r   	bind_colsd   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   rRJ tj|d |d  dd  |jd d d df }tj|d |dd |jd u sJ |rt||j	d	d
 t
| | |dd}tt||_t|| d S )Nr   rG      4th5thF)Zcheck_names	mergesortkind)rD   rH   rE   )rI   r   ZisnaanyrK   Zassert_series_equalilocnamerL   sort_valuesr	   rJ   r   r   )r   r"   rH   resrP   outr^   Zicolsr   r   run_assertsi   s    z>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsr5   zr_   r   )i  r   rS   rU   r/   rT   r   i  floatr`   ra   T)inplace   %      +   )listrY   chrr   arangerV   r   r   r   choiceinsertZintegersr   ZastypeZpermutationrg   copyr1   nanloc)rM   rH   rm   lcr   ir"   r   rl   r   test_left_join_multi_index`   s6    "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_indexrE   rH   r"   )Zright_onZ
left_indexrE   rH   )r	   r    rK   rL   )rM   r   r"   rH   rO   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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   r#   r$   r_   r   rs   lev1lev2r   Amount)rh   ZAAABBB)r_   r   rs   r_   r   rs   r   )r   r   colrD   )r   r   r   r   )
r   ranger   from_productr   rv   r	   rJ   rK   rL   )rM   sr!   rP   rQ   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}t|d}|d d d }t||tjddd}t|d d d |d d d tjddd}t||dd d S )	Ni'  r   ru   i N  )r   r   Zvalue1)r   r   Zvalue2outerrE   )	rK   ZmakeStringIndexr   Ztiler   r   r   r   r	   )rM   r   r   r!   Z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
         Zdtype)r   r   v)r   r
   )r_   r   v2      r   r   r   r_   rc   T)re   rp   )rD   rH   )r   r   Zk3r   rd   )r   r   arrayrx   int64r   from_tuplesrI   r{   r|   r}   r   r   rK   rL   ri   float32int32)rM   rO   r   r   r"   rP   rQ   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Yr%   r5   )Wr   r%   e)VQr#   h)r   RDr   )r   r   r   r6   )r   r   r#   r7   )r   r   r$   r]   )r   r   r%   g)r   r   r%   j)r   r   r$   d)colacolbcolctag)
rs   r   r   r_   r   r      r   	   r   r    r   )r   r   r%   r   )r   r   r$   rs   )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   r%   i)r   r   r%   i)r   r   r%   r   )r   r   r   r   )r   r   r   ru   )r   r   r#   )col1col2col3valr/   )r   r   r   )r   r   r   r   rC   )r   r   r%   r5   r   )r   r   r%   r5   r   r   r   r%   r   )r   r   r#   r   r   )r   r   r   r   r   )r   r   r   r   ru   r   r   r6   )r   r   r#   r7   r_   )r   r   r#   r7   r   )r   r   r$   r]   rs   )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   )rs   rs   r   r   r_   r_   r   r   r   r   r   r   r   r   TrG   rc   rd   )r   r1   rI   r   r|   rK   rL   ri   )rM   r   r"   rP   rQ   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 )'Nr7   r   r6   r_   r5   r   rs   r   r   )r   r   r_   rs   r   r   wxr   yrn   rr   qr   charr/   r   rC   )r7   r   r   )r7   r   r   )r7   r   r   )r7   r   r   )r5   r   r   )r5   r   rn   )r   r   r   )r   r   r   r   r   r_   r_   rs   TrG   rc   rd   rE   rD   )r   r1   rI   r   r|   rK   rL   ri   r	   rJ   r   r   r   )rM   r   r"   rP   rQ   Z	expected2r   r   r    test_left_join_index_multi_matchV  sP    



z/TestMergeMulti.test_left_join_index_multi_matchc                 C   s   t tdtjddtjddtdtjd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 )NZabcder   r   )idZv1r   dummyZv3r/   r5   r6   gX9v?gʡE@)r   Zsv3r   r   rC   r_   )axis)r   rv   r   r   r   r   r|   r	   rF   rI   rK   rL   )rM   r   r"   rP   rdfrQ   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)  r#         ?)r   r$   r   )  r$   r   i  r$   )  r$         @)r   r%   r   r%   )  r%   g      @)r   r%   r   )yearpanelr   r/   r#   r   r   r   r   r   i)r   r|   r   r	   r\   replacerK   rL   )rM   r   frameZ
other_dataotherrP   rQ   r   r   r   test_merge_na_keys  s.    







z!TestMergeMulti.test_merge_na_keysklassNc                 C   s   t g dg ddgd}t|j|_|jj}|d ur>||}tjg dtjd}t g d|d}|j|d|gdd	}t	
|| t |g dg dd
}|j||jjgdd	}t	
|| d S Nr   )z
2016-01-01z
2017-01-01z
2018-01-01r5   r/   )i  i  i  r   )r5   Zkey_1innerrC   )Zkey_0a_xZa_yr   pdto_datetimer   r   r   r   r   r	   rK   rL   )rM   r   r!   	on_vector	exp_yearsrQ   rP   r   r   r   test_merge_datetime_index  s    z(TestMergeMulti.test_merge_datetime_index
merge_typer   r"   c                 C   s2  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tjtjtjgtdd|d
}|j|dddgd}|j	|dd}nJt tjtjtjgtd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   r   r   r|   objectr	   rI   rK   rL   )rM   r   r   r"   Zexpected_indexrQ   Zresults_mergeZ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wealthr/   r   r0   )rM   	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   rs   rs   rs   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_idrh   sharer/   r   r   )r   r   r|   r1   )rM   	portfolior   r   r   r     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Ar   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r_   r   r   rs   rs   rs   )r   r   r   r   r   r   )r   r   rh   r   r   r   r   r   )r   r   rh   r   r/   )r   r1   reindex)rM   rQ   r   r   r   rQ   /  s     #zTestMergeMulti.expectedc                 C   s.   |  }|  }|j|dd}t|| d S )Nr   r   )r{   rI   rK   rL   rM   r   r   rQ   rP   r   r   r   test_join_multi_levelsV  s    z%TestMergeMulti.test_join_multi_levelsc                 C   sD   |  }|  }t| | dgddddg}t|| d S )Nr   r   rC   r   )r{   r	   rJ   r1   rK   rL   r   r   r   r   (test_join_multi_levels_merge_equivalence_  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   rH   r/   )r{   rI   r   r   r   r   r   r|   r   r    rK   rL   r   r   r   r   test_join_multi_levels_outerl  s$    z+TestMergeMulti.test_join_multi_levels_outerc                 C   s   |  }|  }d|j_tjtdd |j|dd W d    n1 sJ0    Y  |  }|jddg tjtdd |j|dd W d    n1 s0    Y  d S )Nr   z+cannot join with no overlapping index names)matchr   r   r   z'columns overlap but no suffix specified)r{   r   rh   pytestZraises
ValueErrorrI   Z	set_names)rM   r   r   Z
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   r   r   r/   r   r   )r   r   r   r   r   )               )S緖?D >?
?HRE?)r   t
log_returnr  )r   r   r   rs   rs   rs   rs   rs   )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  r  r  r  r  r  r  )r   r   r  r   r  )r   r   r  r   r  r   rC   )r_   r   r   r   r   rs   rs   rs   rs   rs   rs   r   )r   r   r   r   r   r   r   r   r   r   r   N)NNr  r  r	  r  r  r	  r
  r  NN)r   r   r   r   r   r   r   r   r   r   r   r   )NNr  r  r  r  r  r  r  r  NNr   )	r   r   r|   r1   r   r	   rJ   rK   rL   )rM   r   r  rQ   rP   r   r   r   test_join_multi_levels2  s    	
!=>Bz&TestMergeMulti.test_join_multi_levels2)__name__
__module____qualname__rR   r  markparametrizer   r   r   r   r   r   r   r   r   r   asarrayr   r   r   r   fixturer   r   rQ   r   r  r  r  r  r   r   r   r   rB   M   s6   
=
6E2 

.


&	rB   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	   rJ   r1   
sort_indexrI   rK   rL   rM   r2   r?   rN   r@   rA   rQ   rP   r   r   r   test_join_multi_multi2  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   )	rF   r    r	   rJ   r1   r  rI   rK   rL   r  r   r   r   test_join_multi_empty_framesD  s    z/TestJoinMultiMulti.test_join_multi_empty_framesboxNc                 C   s   t g dg ddgd}t|j|_|jj}|d ur>||}tjg dtjd}t g d|d}|j|d|gdd	}t	
|| t |g dg dd
}|j||jjgdd	}t	
|| d S r   r   )rM   r   r!   r   r   rQ   rP   r   r   r   r   X  s    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))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C3)ZD0ZD1ZD2ZD3)r%   r   r   rC   )r#  r   r   )	r   r   r   rI   r	   rJ   r1   rK   rL   )rM   Z
index_leftr   Zindex_rightr"   rP   rQ   r   r   r   test_single_common_levelo  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   rs   r   r5   r6   r   ))r   r_   )rs   r   )rs   r_   r   )
         (   )r   r   r   )r   r
   fingr-  r   r
   )r   r   )	r   r   r   r   rI   r   r|   rK   rL   )rM   Zmidx1Zmidx3r   r"   rP   rQ   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  1  s   
r  )numpyr   r  Zpandasr   r   r   r   r   r   r   Zpandas._testingZ_testingrK   Zpandas.core.reshape.concatr   Zpandas.core.reshape.merger	   r  r   r"   r2   r?   r@   rA   rB   r  r   r   r   r   <module>   s2    


	



     i