o
    _~#gy                     @   s   d dl Zd dlZd dlm  mZ d dlZd dlm	Z	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G dd dZG dd dZdS )    N)	DataFrameIndex
MultiIndex
RangeIndexSeries	Timestampoption_context)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   snap)
twoonethreer   r   r   r   r   r   r      key1key2data)nprandomdefault_rngstandard_normallenr   r    r   /var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/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   )j_onej_twoj_three)indexnamescolumns) multiindex_dataframe_random_datadfr   r   r   right    s   
r(   c                   C   :   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nhbhbor1   r0   )i  i?  i	  i  i\  )OriginDestinationPeriodTripPurpTripsr%   )r3   r4   r5   r6   r   	set_indexr   r   r   r   
left_multi*      
	r;   c                   C   r)   )	N)r*   r*   r+   r+   r,   r,   E)r*   r+   r*   r+   r*   r+   F)r-   r-   r.   r-   r/   r.   r-   )abcr@   r?   r@   r?   )d   P   Z   rC   K   #   7   )r3   r4   r5   LinkTypeDistancer8   )r3   r4   r5   rH   r9   r   r   r   r   right_multi8   r<   rJ   c                   C   s   g dS )N)r3   r4   r5   r   r   r   r   r   on_cols_multiF   s   rK   c                	   @   s.  e Zd Zdd Zejddejde	ddg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d0d1 Z d2d3 Z!dS )4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rN   rO   sort)joinreset_indexr
   tmassert_frame_equal)selfr   r(   	join_typeon_colsresultexpectedr   r   r   test_merge_on_multikeyL   s   z%TestMergeMulti.test_merge_on_multikeyinfer_stringFTpyarrow)marksrR   c                    s  t d| 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 |||| W d    d S 1 sw   Y  d S )Nzfuture.infer_string)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>g       zNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>c                    s   |   td S )Nr?   )maprc   )tsiordr   r   rd   h   s    r`   rb   g      Y@ra   r   
   )fillna)r'   fr   rh   r   	bind_colsf   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   rQ      4th5thF)check_names	mergesortkind)rN   rR   rO   )rS   r   isnaanyrU   assert_series_equalilocnamerV   sort_valuesr
   rT   r   r#   )r   r(   rR   resrZ   outrm   icolsr   r   run_assertsk   s   z>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsr?   zrn   r   )2   r   r`   rb   r8   ra   r   rj   floatro   rp   T)inplace            )r   listrf   chrr   arangerc   r   r   r   choiceinsertintegersr   astypepermutationry   copyr:   nanloc)rW   rR   r]   r   lcr   ir(   r   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_indexrO   rR   r(   )right_on
left_indexrO   rR   )r
   r%   rU   rV   )rW   r   r(   rR   rY   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 )Nr   r*   r+   rn   r   r   lev1lev2r$   Amount)rz   AAABBB)rn   r   r   rn   r   r   r   )r   r   colrN   )r   r   r   r   )
r   ranger   from_productr   r   r
   rT   rU   rV   )rW   sr'   rZ   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   dd t d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 )Nc                 S   s   g | ]}t |qS r   )str).0r   r   r   r   
<listcomp>   re   zCTestMergeMulti.test_compress_group_combinations.<locals>.<listcomp>i'  r   r   i N  )r   r   value1)r   r   value2outerrO   )r   r   tiler   r   r   r   r
   )rW   r   r   r'   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   rn   r      r   r         dtype)r   r   v)r   r   )rn   r   v2r      r#   r   r   rn   rs   T)ru   r   )rN   rR   )r   r   k3r   rt   )r   r   arrayr   int64r   from_tuplesrS   r   r   r   r   r   rU   rV   r{   float32int32)rW   rY   r   r#   r(   rZ   r[   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,   r?   )Wr   r,   e)VQr*   h)r   RDr   )r   r   r   r@   )r   r   r*   rA   )r   r   r+   rl   )r   r   r,   g)r   r   r,   j)r   r   r+   d)colacolbcolctag)
r   r   r   rn   r   r   r   r   	   r   r%   r#   )r   r   r,   r   )r   r   r+   r   )r   r   r+   r   )r   r   r*   rn   )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   r   )r   r   r*   )col1col2col3valr8   )r   r   r   )r   r   r   r   rM   )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*   rA   rn   )r   r   r*   rA   r   )r   r   r+   rl   r   )r   r   r+   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   rn   rn   r   r   r   r   r   r   r   r   TrQ   rs   rt   )r   r:   rS   r   r   rU   rV   r{   )rW   r   r(   rZ   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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 )'NrA   r   r@   rn   r?   r   r   r   r   )r   r   rn   r   r   r   wxr   yr   rr   qr   charr8   r   rM   )rA   r   r   )rA   r   r   )rA   r   r   )rA   r   r   )r?   r   r   )r?   r   r   )r   r   r   )r   r   r   r   r   rn   rn   r   TrQ   rs   rt   rO   rN   )r   r:   rS   r   r   rU   rV   r{   r
   rT   r   r   r#   )rW   r   r(   rZ   r[   	expected2r   r   r    test_left_join_index_multi_matchX  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 )Nabcder   r   )idv1r   dummyv3r8   r?   r@   gX9v?gʡE@)r   sv3r   r   rM   rn   )axis)r   r   r   r   r   r   r   r
   rP   rS   rU   rV   )rW   r   r(   rZ   rdfr[   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   r8   r*   r   r   r   r   r   i)r   r   r   r
   rk   replacerU   rV   )rW   r   frame
other_dataotherrZ   r[   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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-01r?   r8   )i  i  i  r   )r?   key_1innerrM   )key_0a_xa_yr   pdto_datetimer#   r   r   r   r   r
   rU   rV   )rW   r   r'   	on_vector	exp_yearsr[   rZ   r   r   r   test_merge_datetime_index     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rft ddgtjtjtjgtdd|d
}|j|dddgd}|j	|dd}n%t 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
   rS   rU   rV   )rW   r  r   r(   expected_indexr[   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   rn   r   )ffffAPAi^ )household_idmalewealthr8   r  r9   )rW   	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rn   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_idrz   sharer8   r  r,  )r   r   r   r:   )rW   	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   rn   rn   r   r   r   )r  r  r      xAr/  r/  )r!  r"  r#  r#  r$  r%  )r'  r(  r)  r*  r)  r+  )rn   r   r   r   r   r   )r  r  r  r  r  r   )r  r  rz   r-  r  r,  r  r,  )r  r  rz   r-  r8   )r   r:   reindex)rW   r[   r   r   r   r[   1  s   
#zTestMergeMulti.expectedc                 C   s.   |  }|  }|j|dd}t|| d S )Nr  r   )r   rS   rU   rV   rW   r.  r  r[   rZ   r   r   r   test_join_multi_levelsX  s   z%TestMergeMulti.test_join_multi_levelsc                 C   sD   |  }|  }t| | dgddddg}t|| d S )Nr  r  rM   r,  )r   r
   rT   r:   rU   rV   r1  r   r   r   (test_join_multi_levels_merge_equivalencea  s   
z7TestMergeMulti.test_join_multi_levels_merge_equivalencec                 C   sr   |  }|  }|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
j||dd d S )Nr   r   r-  r'  r   r  r,  r   r   r   T)r   rR   r8   F)check_index_type)r   rS   r	   r   r   r   r   r   r0  r%   rU   rV   r1  r   r   r   test_join_multi_levels_outern  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#   rz   pytestraises
ValueErrorrS   	set_names)rW   r.  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  r,  r-  r8   r  r,  )r  r  r  r  r  )               )S緖?D >?
?HRE?)r,  t
log_returnrG  )r   r   r   r   r   r   r   r   )r  r  r  r  r  r  r  r  )r=  r>  r?  r=  r>  r?  r@  rA  )r)  r)  r)  r*  r*  r*  r)  r)  )rB  rC  rD  rB  rC  rD  rE  rF  )r  r,  rG  r-  rH  )r  r,  rG  r-  rH  r  rM   )r   r   r   r   r   r   r   r   r   rn   r   r   )r  r  r  r  r  r  r  r  r   r  r  N)r=  r>  r?  r=  r>  r?  r@  rA  NNNN)r)  r)  r)  r*  r*  r*  r)  r)  r+  r'  r(  r'  )rB  rC  rD  rB  rC  rD  rE  rF  NNNNr   )	r   r   r   r:   r0  r
   rT   rU   rV   )rW   r  rH  r[   rZ   r   r   r   test_join_multi_levels2  s   	



!

=B
z&TestMergeMulti.test_join_multi_levels2)"__name__
__module____qualname__r\   r7  markparametrizeparamtd
skip_if_nor   r   r   r   r   r   r   r   r   r   asarrayr   r   r  r  fixturer  r.  r[   r2  r3  r5  r<  rI  r   r   r   r   rL   K   s>    >
6E2 

.


&	rL   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   sz   |j j}|j j}|dkr||| }n||| }t| | ||d| }|j||d }	t	|	| d S )Nr(   r   r   )
r#   r$   
differencer
   rT   r:   
sort_indexrS   rU   rV   
rW   r;   rJ   rX   rK   
left_namesright_nameslevel_orderr[   rZ   r   r   r   test_join_multi_multi4  s    z(TestJoinMultiMulti.test_join_multi_multic           
      C   s   |j |jd}|j |jd}|jj}|jj}|dkr"||| }n||| }t| | ||d| }|j	||d }	t
|	| d S )Nr8   r(   r   r   )rP   r%   r#   r$   rU  r
   rT   r:   rV  rS   rU   rV   rW  r   r   r   test_join_multi_empty_framesJ  s$   z/TestJoinMultiMulti.test_join_multi_empty_framesboxNc                 C   r   r   r  )rW   r]  r'   r	  r
  r[   rZ   r   r   r   r  e  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)r*   r+   r   ))r^  Y0)ra  Y1)K2Y2)rl  Y3r   )C0C1C2C3)D0D1D2D3)r,   r   r  rM   )rc  r   r   )	r   r   r   rS   r
   rT   r:   rU   rV   )rW   
index_leftr   index_rightr(   rZ   r[   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 )Nrn   r   r   r   r?   r@   r   ))r   rn   )r   r   )r   rn   r   )rj         (   )r#   r   r   )r   r   fingr}  r   r   )r   r   )	r   r   r   r   rS   r   r   rU   rV   )rW   midx1midx3r   r(   rZ   r[   r   r   r   test_join_multi_wrong_order  s   
z.TestJoinMultiMulti.test_join_multi_wrong_order)rJ  rK  rL  r[  r\  r7  rM  rN  r   rR  r   r   r  ry  r  r   r   r   r   rT  3  s    
rT  )numpyr   r7  pandas.util._test_decoratorsutil_test_decoratorsrP  pandasr  r   r   r   r   r   r   r   pandas._testing_testingrU   pandas.core.reshape.concatr	   pandas.core.reshape.merger
   rS  r   r(   r;   rJ   rK   rL   rT  r   r   r   r   <module>   s2    $	


	


     m