o
    _~#gsD                     @   s  d dl m Z  d dlZd dlZd dlm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 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ejdd Zejdddeddgddgdddgdfddeddgddgdddgdfd	deg d ddejgdg d!dfd	deg d"ejddgdg d#dfddeejddgg d$dg d%dfddeddejgg d&dg d'dfd(ded ddejgejddd)gdg d*dfd(ded ddejgejddd)gdg d*dfgd+d, Zd-d. Zd/d0 Zejd1d2d3gd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%d@dA Z&dBdC Z'dDdE Z(dFdG Z)dHdI Z*ejdJddgdKdL Z+G dMdN dNZ,dS )O    )datetimeN)
MergeError)	DataFrameIndex
MultiIndex
date_rangeperiod_range)concatc                   C   s*   t tdddtdtdddddS )	N         abcde2000Y)startfreqperiodsdatacolumnsindex)r   nparangereshapelistr    r   r   /var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/site-packages/pandas/tests/frame/methods/test_join.pyframe_with_period_index   s
   r   c                   C      t dg dig ddS )Nar
   
   r         r   r   r   r   r   r   r   left      r'   c                   C   r   )Nb,  d         r$   r#   r%   r&   r   r   r   r   right"   r(   r0   c                   C   s   t g dg ddtddS )Nr   r)   cdcatdogweaselhorser   r)   r   r%   )r   ranger   r   r   r   left_no_dup'   s   r;   c                   C   s$   t g dg ddtdddS )N)r   r)   r2   r3   e)meowbarkum... weasel noise?naychirpr   r2   r   r%   r   )r   r:   	set_indexr   r   r   r   right_no_dup/   s   rD   c                 C   s$   t | tdgdgddgdgddS )Nr   cowr9   r/   r%   T)sort)r	   r   )r;   r   r   r   left_w_dups:   s   rG   c                 C   s&   t | tdgdgddgdgdS )Nr<   moorB   r/   r%   r   )r	   r   rC   )rD   r   r   r   right_w_dupsA   s
   rI   zhow, sort, expectedinnerFr
   r!   r-   r,   r9   r#   r$   r%   Tr    r"   r   r!   r
   )r   r$   r#   r*   r.   r,   r-   r+   r$   r#   r/   outerr+   )r   r$   r#   r/   c                 C   s"   | j |||dd}t|| d S )N1:1)howrF   validate)jointmassert_frame_equal)r'   r0   rP   rF   expectedresultr   r   r   	test_joinH   s   ,rW   c                  C   sb  t dg di} t g dg dd}t g dg dd}d}tjt|d | j|gd	d
 W d    n1 s:w   Y  tjt|d | j||gdd W d    n1 sZw   Y  tjt|d | j||gd	dd W d    n1 s{w   Y  tjtdd | ||g W d    n1 sw   Y  | |g}| |}t|| d S )Nkey)r$   r#   r/   r   r   )r$      r/   r#   r   )rX   v1)r   r#   r/   r   r$   )keysv2z7Suffixes not supported when joining multiple DataFramesmatchy)lsuffixx)rsuffixr`   rb   zIndexes have overlapping values)r   pytestraises
ValueErrorrR   rS   rT   )firstsecondthirdmsg
arr_joinednorm_joinedr   r   r   test_suffix_on_list_joinx   s&   
rm   c                 C   sH   d}t jt|d | j|ddd W d    d S 1 sw   Y  d S )Nz"invalid" is not a valid argument. Valid arguments are:
- "1:1"
- "1:m"
- "m:1"
- "m:m"
- "one_to_one"
- "one_to_many"
- "many_to_one"
- "many_to_many"r]   r   invalidonrQ   )rd   re   rf   merge)r;   rD   rj   r   r   r   test_join_invalid_validate   s
   "rr   dtypeobjectstring[pyarrow]c                 C   s   |dkr	t d | |} |j||_| j|ddd d}t jt|d | j|ddd W d    d S 1 s:w   Y  d S )	Nru   pyarrowr   one_to_manyro   zBMerge keys are not unique in right dataset; not a one-to-one merger]   
one_to_one)rd   importorskipastyper   rR   re   r   )r;   rI   rs   rj   r   r   r   $test_join_on_single_col_dup_on_right   s"   

"r{   c                 C   sX   | j |ddd d}tjt|d | j |ddd W d    d S 1 s%w   Y  d S )Nr   many_to_onero   zAMerge keys are not unique in left dataset; not a one-to-one merger]   rx   rR   rd   re   r   )rG   rD   rj   r   r   r   #test_join_on_single_col_dup_on_left   s   "r~   c                 C   s   | j |ddd d}tjt|d | j |ddd W d    n1 s$w   Y  d}tjt|d | j |ddd W d    d S 1 sFw   Y  d S )	Nr   many_to_manyro   zCMerge keys are not unique in right dataset; not a many-to-one merger]   r|   zBMerge keys are not unique in left dataset; not a one-to-many mergerw   r}   )rG   rI   rj   r   r   r   #test_join_on_single_col_dup_on_both   s"   "r   c                  C   s   t g dg dg ddtddddg} t g d	g d
g ddtddddg}t g d	g d
g dg ddtddddg}| j|ddd}t|| d S )N)r   r   r)   r)   )r   r$   r   r$   r4   r   r)   r2   r   r%   r   r)   )r   r   r)   )r   r$   r   )r=   r>   r?   )r   r)   r3   r/   )r5   r6   r7   r1   rJ   rO   )rP   rQ   )r   r:   rC   rR   rS   rT   )r'   r0   expected_multirV   r   r   r    test_join_on_multi_col_check_dup   s<   
	
	
r   c              	   C   s  | j | jd d ddgf }| j | jdd  ddgf jd d d }||}t|j|j tg d}t|j| |j|d	d
}t|j|j t|j| |j|dd
}t|j|j t|j| |j|dd
}t|j|jdd  t|j| |j|dd
}t|j| j  t|j| t	j
tdd |j|dd
 W d    n1 sw   Y  d}dD ] }t	j
t|d | j| |d
 W d    n1 sw   Y  qd S )Nr!   ABr   CD)r   r   r   r   r'   rP   r0   rJ   rN   zjoin methodr]   foozcolumns overlap but no suffix)rN   r'   rJ   )locr   ilocrR   rS   assert_index_equalr   r   sort_valuesrd   re   rf   )float_frameff2joinedexpected_columnsrj   rP   r   r   r   test_join_index  s8   (
r   c                 C   s   | j d d ddgf }| j d d dddgf }| }| d d d d |d< | d d d d |d< ||}t|| |j|dd}t||d d d  |j|dd}t||j d d |jf  d S )Nr   r   r#   r   r   r0   r   )r   copyrR   rS   rT   r   )r   afbfrU   rV   r   r   r   test_join_index_more1  s   
 r   c                 C   sr   |   }|| jd }||}t||  d |_tjt	dd || W d    d S 1 s2w   Y  d S )Nr   zmust have a namer]   )
r   popr   rR   rS   rT   namerd   re   rf   )r   dfserr   r   r   r   test_join_index_seriesC  s   
"r   c                 C   s   | j d d g df }| j d d g df }|j|ddd}|j d d ddgf d}|j d d ddgf d}| j d d dd	gf }|||}t||j d d |jf  d S )
N)r   r   r   )r   r   r   _df1_df2rc   r   r   r   r   )r   rR   
add_suffixrS   rT   r   )r   df1df2r   df1_sufdf2_suf
no_overlaprU   r   r   r   test_join_overlapO  s    r   c                 C   s^   | j dd d}tj| jgd dd}| j|j}| |}t||| jd}t	
|| d S )Nc                 S   s   |  |  S )Nr   )rX   r   r   r   <lambda>_  s    z(test_join_period_index.<locals>.<lambda>r   r#   r$   )axisr   )renamer   concatenatevaluesr   appendrR   r   r   rS   rT   )r   otherjoined_valuesjoined_colsr   rU   r   r   r   test_join_period_index^  s   
r   c                  C   s   t dg dig dd} t dg dig dd}t dg d	ig d
d}| j||gdd}t g dtjdddgtjddtjgdg dd}t|| d S )Nr   rK   rM   r%   r)   rL   )r   r/   r#   r2   )    iX  )r#   r#   r   r'   r   )r   r!   r!   r
   r+   r-   r   r   r   )r$   r#   r#   r/   )r   rR   r   nanrS   rT   )r   r   df3r   rU   r   r   r   (test_join_left_sequence_non_unique_indexm  s   	r   c                 C   s6   | j  }| j| ddg g}||}t||  d S )Nr   r   )r   to_framer   rR   rS   rT   )r   r'   r0   rV   r   r   r   test_join_list_series  s   

r   sort_kwc                 C   s   t dddgiddgd}t ddd	gid
dgd}t dddgidd
gd}t dtdddddtddddtddd}| du rJ|jg dd}td  |j||gd| d}W d    n1 sdw   Y  t|| d S )Ncol1r$   r#   r2   r   r%   col2r   r   r)   col3   rY          @r         ?r   g      @g      @g      @g       @r   r   r   F)r2   r   r)   rN   )rP   rF   )r   floatreindexrS   assert_produces_warningrR   rT   )r   r   r)   r2   rU   rV   r   r   r   )test_suppress_future_warning_with_sort_kw  s   r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestDataFrameJoinc                 C   s   |}|j |jd d dgf }|j |jdd  ddgf }|j|dd|j}| j }tj|t|j< t	||j|j
d}t|j rKJ t|| d S )	Nr   r   r#   r   r   rN   r   r   r   )r   r   rR   r   r   r   r   r   isnanr   r   allrS   rT   )self multiindex_dataframe_random_dataframer   r)   r   rU   r   r   r   rW     s   zTestDataFrameJoin.test_joinc                 C   sp   t ddgddgddgd}t ddgddgddgd}|ddg}|ddg}dD ]	}|j||d q,d S )	Nr$   r#   )r   r)   ra   )r   r)   r_   r   r)   )r'   r0   rN   r   )r   rC   rR   )r   r   r   rP   r   r   r   test_join_segfault  s   z$TestDataFrameJoin.test_join_segfaultc                 C   sr   ddg}t dddt dddg}t|tddgd}td	dgd
dgg||d}|j|dd}t|jd
ks7J d S )N2012020920120222i  r#   	      aar   r$   r/   r   rp   )r   r   r:   rR   lenr   )r   	str_datesdt_datesr   r   tstr   r   r   test_join_str_datetime  s   z(TestDataFrameJoin.test_join_str_datetimec                 C   s  t g dg dg dg dg dg dg dg dg d	g	g d
dddg}t ddgddggddgddg}t ddgddgddgddgddgddgdtjgdtjgdtjgg	|jddgd}t|j|dd| t|j|d d|ddg  tj	ddgg d!gddgd"}t ddgddgddgddgddgddgg|ddgd}t|j|d d| t|j|dd|ddg  d S )#N)r   ra   R
1?)r   r_   ?)r   z<+J	?)r)   ra   4ֿ)r)   r_   ^9S?)r)   r   ?)r2   ra   r$   )r2   r_   r#   )r2   r   r/   )rg   rh   value1r   rg   rh   r   r!   r)   r
   value2r   r   r   r   r   r   r   r   g      @r   r   r'   r   r0   )ra   r_   r   names)
r   rC   r   r   r   rS   rT   rR   r   from_product)r   r   r   expexp_idxr   r   r   test_join_multiindex_leftright  sd   
"z0TestDataFrameJoin.test_join_multiindex_leftrightc                 C   s   t ddd }tjd|fgddgd}tddgi|d}tjd|fgddgd}td	dgi|d}tjd|fgddgd}td
dgi|d}|||g}tjd|fgddgd}	tdgdgdgd|	d}
t||
 d S )Ni  r$   r   index_0dater   r   r%   r   r   r   )	pd	Timestampr   r   from_tuplesr   rR   rS   assert_equal)r   r   	df1_indexr   	df2_indexr   	df3_indexr   rV   expected_indexrU   r   r   r   test_join_multiindex_dates  s   z,TestDataFrameJoin.test_join_multiindex_datesc                 C   s   t ddgddgddggd}tdd	g}t |dd
gddggd}tjtdd tj||dd W d    n1 s;w   Y  tjtdd |j|dd W d    d S 1 sZw   Y  d S )Nr   r)   r$      r   r   )r   r   )r    )r2   c1!   ,   z-Not allowed to merge between different levelsr]   r   )	r   r   r   rd   re   r   r   rq   rR   )r   r   r   r   r   r   r   'test_merge_join_different_levels_raises  s   "z9TestDataFrameJoin.test_merge_join_different_levels_raisesc                 C   s   t tdtdddddd}t tdtdd	d
ddtd	dd}|j|dd}|j|j}t	|j| |jj
jdks@J d S )N)   r/   z2012-11-15 00:00:00r   100msz
US/Central)r   r   tzr%   )r/   r/   r/   250msr   rN   r   )r   r   zerosr   r:   rR   r   unionrS   r   r   zone)r   test1test2rV   rU   r   r   r   test_frame_join_tzaware-  s"   z)TestDataFrameJoin.test_frame_join_tzawareN)
__name__
__module____qualname__rW   r   r   r   r   r   r  r   r   r   r   r     s    
<r   )-r   numpyr   rd   pandas.errorsr   pandasr   r   r   r   r   r   pandas._testing_testingrS   pandas.core.reshape.concatr	   fixturer   r'   r0   r;   rD   rG   rI   markparametrizer   rW   rm   rr   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    







""    	
+
$)	
