o
    dz                    @   sB  d dl mZm Z mZ d dlZd dlZd dlZd dlmZm	Z	 d dl
mZ d dlZd dlmZmZmZmZ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 d dl m!Z!m"Z" dd
dZ#dd Z$dd Z%ej&e$ dd ddd Z'ej&e$ dd ddd Z(ej&e% dd ddd Z)ej&dd Z*G dd dZ+dd  Z,G d!d" d"Z-ej&d#d$ Z.ej&d%d& Z/G d'd( d(Z0ej&d)d* Z1ej&d+d, Z2G d-d. d.Z3ej4j5d/d0d1 ej6D ed2d3gd2d3gd4d5ed d6d4d7ed8d9gd4d:g d;d d<d=d> Z7ej45d?d@dAgdddBdBd3fdCdd@dAgddBdDd3fddd@dAgdDdBd3fd@dAgdddBdBdfdEdd@dAgddBdDdfddd@dAgdDdBdfgdFdG Z8dHdI Z9ej45dJd d dKdLidMdNgfd d dKdOid dNgfd d dKdPidQdRgfd d dKdSdTgidQdRgfdUd dKdVidUd gfdWdWdKdXidYdWgfdZdZdKdVidZd[gfdUdUdKdXid\dUgfdUdZdKdXidUdZgfdUdUdKd]idUd\gfd d dKd^id_d gfdUdUi d\d`gfd d i dQdRgfgdadb Z:ej45dcd&eg dddedfej;gg dgdhfd@eg didedfdjej;gdkdlej;dmgdhfgdndo Z<ej45dpg dqdrds Z=ej45dKd$d&hd d dtgdudv Z>ej45dwdxdUdUe?dUdyfgdzd{ Z@ej45d|d}d~gej45ddDdBgdd ZAdd ZBdd ZCdd ZDdd ZEej45dddgdd ZFdd ZGej45dddgej45ddUdDdddgfdUdDdddgfgdd ZHej45dddgej45dddUiddgfddUiddgfgdd ZIej45dddgej45dddDiddDigdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRej45dddgdd ZSdd ZTdd ZUdd ZVej45dddgdd ZWej45dg dej45dddgddń ZXdS )    )datedatetime	timedeltaN)is_categorical_dtypeis_object_dtype)CategoricalDtype)CategoricalCategoricalIndex	DataFrameDatetimeIndexIndexIntervalIndex
MultiIndexPeriodIndex
RangeIndexSeriesTimedeltaIndex)concat)
MergeErrormerge   2   c                 C   s`   t t| }tt|||  }t||k r(tt ||d |t|   }tj| |S N)listrangenpasarraytilelenrandomshuffle)ngroupsnunique_groupsarr r%   j/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/pandas/tests/reshape/merge/test_merge.pyget_test_data(   s   "r'   c                   C   sT   t dgddt dgddt dgt dgt dgt tdgt tjdd	d
ggS )N   int64dtypeInt64gGz?fooT
2018-01-01
US/Easterntz)r   pd	Timestampr%   r%   r%   r&   
get_series3   s   r4   c                   C   s8   t tjgddt tjgddt tjgddt tjggS )Nr,   r*   floatobject)r   r   nanr2   NaTr%   r%   r%   r&   get_series_na?   s
   
r9   c                 C      | j jS r   r+   namexr%   r%   r&   <lambda>H       r?   )paramsidsc                 C      | j S )zV
    A parametrized fixture returning a variety of Series of different
    dtypes
    paramrequestr%   r%   r&   series_of_dtypeH      rH   c                 C   r:   r   r;   r=   r%   r%   r&   r?   Q   r@   c                 C   rC   )zk
    A duplicate of the series_of_dtype fixture, so that it can be used
    twice by a single function
    rD   rF   r%   r%   r&   series_of_dtype2Q   rI   rJ   c                 C   r:   r   r;   r=   r%   r%   r&   r?   Z   r@   c                 C   rC   )zU
    A parametrized fixture returning a variety of Series with all NA
    values
    rD   rF   r%   r%   r&   series_of_dtype_all_naZ   rI   rK   c                  C   s@   t ddgddgddgd} t g dg dg dd	}| |fS )
Nr   r(      ab)col1col_conflictcol_left)r(   rL            )rL   rL   rL   rL   rL   )rO   rP   	col_rightr
   )df1df2r%   r%   r&   dfs_for_indicatorc   s   rY   c                   @   sl  e Zd Zej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d Zdd Zdd Zdd Zdd Zdd Zdd Z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/d0d0d1d0d2d3d4d0d5d4d2d6gd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#ejdCdDg dEfd0g dFfgejdGdHdIgdJdK Z$dLdM Z%dNdO Z&dPdQ Z'dRdS Z(dTdU Z)ejdVg dWdXdY Z*ejdVg dWdZd[ Z+d\d] Z,d^d_ Z-d`da Z.dbdc Z/ddde Z0dfdg Z1dhdi Z2djdk Z3dldm Z4dndo Z5dpdq Z6drds Z7dtdu Z8dvdw Z9dxdy Z:ejdGdIdzgejd{e;g d|e;g d}fe<g d~e<ddde=j>e=j>e=j>gfgdd e?j@D eABg deABdddeCjDeCjDeCjDgfeEg dddeEddde=j>e=j>e=j>gddfeFg deFddde=j>e=j>e=j>gfdd ZGdd ZHejdGdHdIgdd ZIdd ZJdd ZKdS )	TestMergec                 C   s:   t t t tjdtjdd}||d dk }|S )Nr   )key1key2data1data2r\   r(   r
   r'   r   r   randn)selfdfr%   r%   r&   rb   q   s   


zTestMerge.dfc                 C   s&   t tddtdddtjddS )N
   )r"   rS   )r!   r"   )r[   r\   valuer_   ra   r%   r%   r&   rX      s   

zTestMerge.df2c                 C   s   t g dtjddS )NrM   rN   cderi   rM      keyv1r
   r   r   r`   re   r%   r%   r&   left   s   zTestMerge.leftc                 C   s   t dtjdig ddS )Nv2rS   rh   rN   rg   rM   indexrn   re   r%   r%   r&   right   s   zTestMerge.rightc                 C   sP   t  }t dddgiddgdd}t||ddd}t dg idd	}t|| d S )
NrM   r(   rL   r   r)   )rs   r+   T
left_indexright_indexr*   r
   r   tmassert_frame_equal)ra   df_emptydf_aresultexpectedr%   r%   r&   test_merge_inner_join_empty   s
   z%TestMerge.test_merge_inner_join_emptyc                 C   s,   t ||}t ||ddgd}t|| d S )Nr[   r\   onr   ry   rz   )ra   rb   rX   joinedexpr%   r%   r&   test_merge_common   s   
zTestMerge.test_merge_commonc                 C   sJ   t g dg dg dg dd}|t}|}t||}t|| d S )N)r(   r   r(   r   )r   r(   r   r   )r   r   rL   r   )r(   r   r   rR   r   r(   rL   rR   )r
   astyper5   r   ry   rz   ra   ro   rt   r~   r}   r%   r%   r&   test_merge_non_string_columns   s   

z'TestMerge.test_merge_non_string_columnsc                 C   sF   | d}| d}t||dd}t||dd d}t|| d S )Nr[   r   )	set_indexr   ry   rz   )ra   rb   rX   ro   rt   r}   r~   r%   r%   r&   test_merge_index_as_on_arg   s
   

z$TestMerge.test_merge_index_as_on_argc                 C   s   t g dtjdd}t dtjdig dd}t||dd	d
dd}t||dd	ddd}t||jd d |jf  t||dd	d
d	d}t||dd	dd	d}t||jd d |jf  d S )Nrf   rj   rk   rp   rS   rq   rr   rl   Tro   F)left_onrw   howsortrt   )right_onrv   r   r   )	r
   r   r   r`   r   ry   rz   loccolumns)ra   ro   rt   merged1merged2r%   r%   r&   (test_merge_index_singlekey_right_vs_left   s$    z2TestMerge.test_merge_index_singlekey_right_vs_leftc                 C   s   t g dtjdd}t dtjdig dd}t||dd	d
d}|j|ddj|j }t	|| t||dd	d
d}|j|ddj|j }t	||jd d |j
f  d S )Nrf   rj   rk   rp   rS   rq   rr   rl   Tinnerr   rw   r   r   )r   rv   r   )r
   r   r   r`   r   joinr   rs   ry   rz   r   ra   ro   rt   r}   r~   r%   r%   r&    test_merge_index_singlekey_inner   s    z*TestMerge.test_merge_index_singlekey_innerc                 C   s  d}t jtjj|d t||dd W d    n1 sw   Y  d}t jtjj|d t||dd W d    n1 s?w   Y  d}t jtjj|d t||ddd	 W d    n1 sbw   Y  d
}t jt|d t||dgddgd W d    d S 1 sw   Y  d S )Nz&Must pass right_on or right_index=TruematchT)rv   z$Must pass left_on or left_index=True)rw   zRCan only pass argument "on" OR "left_on" and "right_on", not a combination of bothrl   )r   r   z)len\(right_on\) must equal len\(left_on\)r[   r\   r   r   )pytestraisesr2   errorsr   r   
ValueError)ra   rb   rX   ro   rt   msgr%   r%   r&   test_merge_misspecified   s"   "z!TestMerge.test_merge_misspecifiedc                 C   s   d}t jt|d t||ddddgd W d    n1 sw   Y  d}t jt|d t||dddgdd W d    n1 sCw   Y  t jt|d t||dddgddgd W d    d S 1 shw   Y  d S )	Nz>right_index parameter must be of type bool, not <class 'list'>r   ro   Fr[   r\   r   rv   rw   z=left_index parameter must be of type bool, not <class 'list'>r   r   r   r   )ra   rb   rX   r   r%   r%   r&   &test_index_and_on_parameters_confusion   s:   "z0TestMerge.test_index_and_on_parameters_confusionc                 C   sN   t ||dd}|d  d  }t||ksJ d|v sJ d|v s%J d S )Nrl   r   rL   v1_xv1_y)r   value_countssumr   )ra   ro   mergedexp_lenr%   r%   r&   test_merge_overlap
  s
   zTestMerge.test_merge_overlapc                 C   s   t g dg dd}t g dg dd}|j|ddd	d
d}tddddddtjgdd}t|d | tdtjdddddgdd}t|d | tddddddtjgdd}t|d | tdtjdddddgdd}t|d | d S )N)r-   barbazr-   r(   rL   rR   rS   )lkeyrd   )r-   r   quxr-   )rT      rj   r   )rkeyrd   r   r   outerT)r   r   r   r   r   r   r-   r<   r   rL   rR   r(   rS   value_xr   rT   r   rj   value_y)r
   r   r   r   r7   ry   assert_series_equal)ra   ro   rt   r   r   r%   r%   r&   %test_merge_different_column_key_names  s   
z/TestMerge.test_merge_different_column_key_namesc                 C   sz   t dddtdd}t dddtdd}t||d	d	d	d
}d|d< |d dk s-J d|d< |d dk s;J d S )Nr   r(   rM   rN   rc   rr   r-   r   rg   rh   Trv   rw   copyr   rM   peekaboorh   )r
   r   r   all)ra   ro   rt   r   r%   r%   r&   test_merge_copy%  s   zTestMerge.test_merge_copyc                 C   sz   t dddtdd}t dddtdd}t||d	d	d
d}t|d j|d js-J t|d j|d js;J d S )Nr   r(   r   rc   rr   r-   r   r   TFr   rM   rh   )r
   r   r   r   shares_memory_values)ra   using_array_managerro   rt   r   r%   r%   r&   test_merge_nocopy1  s
    zTestMerge.test_merge_nocopyc                 C   s   t g dttddddgd}t g dttdd	}t||dd
d}t g dtdddddddtjtjg	g ddg dd}t|| d S )Nr(   r(   rL   rL   rR   rT   rl   rd   rd   rl   r   r(   r(   rL   rR   rS   rT   r   )rl   rvaluer   r   r   	r(   r(   r(   r(   rL   rL   rR   rS   rT   r   r(   rL   rR   rS   )	r   r(   r   r(   rL   rL   rR   rS   rT   )rl   rd   r   )rd   rl   r   )	r
   r   r   r   r   arrayr7   ry   rz   )ra   ro   rt   r   r~   r%   r%   r&   "test_intelligently_handle_join_key:  s   z,TestMerge.test_intelligently_handle_join_keyc                 C   s   t dgdgd}t dgdgd}t||dd}|d jd	ks"J t d
gdgd}t dgdgd}t||dd}|d jdksDJ t ddgi}t ddgi}tdg}tdg}t||||dd}|d jtjksqJ d S )Nr(   rc   rk   rL      r   r   rl   r)   TFr   boolvalr   r   r   key_0)r
   r   r+   r   r   int_)ra   rW   rX   rb   r   r   r%   r%   r&   test_merge_join_key_dtype_castM  s   z(TestMerge.test_merge_join_key_dtype_castc           	      C   s  t g dtddddgdd}t dtd	idd
}tjg ddd
}t||d|dd}t|||ddd}t|d |d  |d   sKJ |d   sUJ t dtdidgd}t dtd	i}tg d}tg d}t||||dd}t	g dtj
dd}t|d | t dtdi}t dtd	i}tjg dtjd
}t||d|dd}t|d t	|dd d S )Nr   rT   r   rd   rl   r)   r   r+   r   r   r*   r   r   r   r   r   r   r;   rR   )r   r(   r(   rL   rL   rR   T)rv   r   r   r   )r
   r   aranger   r   ry   r   notnar   r   r   r)   )	ra   ro   rt   rl   r   r   r   r   r~   r%   r%   r&   test_handle_join_key_pass_arrayd  s0   z)TestMerge.test_handle_join_key_pass_arrayc                 C   s   t  }tddgi|gd}tdddgi||gd}dd  dd  d	d
 dd
 }tjt|d t|| W d    d S 1 s@w   Y  d S )Nr>   rM   rr   yrN   rg   z>No common columns to perform merge on. Merge options: left_on=z, right_on=z, left_index=Fz, right_index=r   )r   nowr
   r   r   r   r   )ra   dtrW   rX   r   r%   r%   r&   &test_no_overlap_more_informative_error  s    "z0TestMerge.test_no_overlap_more_informative_errorc                 C   s   t ddd}t ddd}t ddd}t ddd}tddgi|gd	}td
ddgi||gd	}t|| tdg di|||gd	}td
g di||||||gd	}t|| tdddgi||gd	}td
ddgi||gd	}t|| d S )N  rT   r(   rL   rR   rS   r>   rM   rr   r   rN   rg   )rM   rN   q)rg   rh   ri   fghrh   r   r
   _check_merge)ra   r   dt2dt3dt4rW   rX   r%   r%   r&   test_merge_non_unique_indexes  s   

z'TestMerge.test_merge_non_unique_indexesc                 C   sl   t ddd}t ddd}t ddd}tdg di||||gd}td	g d
i|||||gd}t|| d S )Nr   rT   r(   rL   rR   r>   rM   rN   rg   rh   rr   r   )ri   r   r   z hir   )ra   r   r   r   rW   rX   r%   r%   r&   (test_merge_non_unique_index_many_to_many  s   z2TestMerge.test_merge_non_unique_index_many_to_manyc                 C   sZ   t dgdgd}t dg i}t||ddd}t|| t||ddd}t|| d S )Nr(   rL   r   rl   ro   r   rt   rx   )ra   ro   rt   r}   r%   r%   r&   test_left_merge_empty_dataframe  s   z)TestMerge.test_left_merge_empty_dataframekwargTru   r>   rv   r   rM   r   rw   r   c                 C   sR   t g dd}t g dd}t g dtd}t||fd|i|}t|| d S )NrM   rN   rg   r   r>   r   zrM   rN   rg   r>   r   r   r   r   )r
   r6   r   ry   rz   )ra   	join_typer   ro   rt   exp_inr}   r%   r%   r&   !test_merge_left_empty_right_empty  s
   z+TestMerge.test_merge_left_empty_right_emptyc                    sL  t g dd t g dg dg dgg ddt tjtjgd tdtjtjgd tdtjtjgd tdg d	g d
g ddg dd}|dd } fdd} fdd}ddddddfD ]}||| ||| qfddd}||| g d|d< ||| ddd}||| tjtjgd td|d< ||| d S )Nr   r   r(   rL   rR   rS   rT   r   rj   r   	   r   rR   r*   r(   rS   rj   rL   rT   r   rR   r   r   r   r   c                    H   t  fddi|}t||  t  fddi|}t||  d S )Nr   r   ro   r   r   r   r}   ro   rt   r%   r&   check1     z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check1c                    r   )Nr   rt   r   r   r   r   r%   r&   check2  r  z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check2Tru   r>   r   rM   r   r   r(   rL   r   )r
   r   r   r7   r6   )ra   exp_outr   r  r  r   r%   r   r&   $test_merge_left_empty_right_notempty  s8   "





z.TestMerge.test_merge_left_empty_right_notemptyc              
      s   t g dg dg dgg ddt g ddt g dg dg d	tjtjgd
 tdtjtjgd
 tdtjtjgd
 tddg dddd jt_fdd  fddd S )Nr   r   r   r   r   r   r   r   r   rR   r*   r   r   c                    r   )Nr   r   rt   r   r   r   r%   r&   r    r  z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check1c                    s   t fddi|}t||  t fddi|}t||  ddddddddd	ddd
fD ]} | | q4d S )Nr   ro   r   Tru   r>   r   rM   r   r   r   r   r  r  r   r  ro   rt   r%   r&   r    s   
z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check2)r
   r   r   r7   r6   rs   r   re   r%   r  r&   $test_merge_left_notempty_right_empty  s    "z.TestMerge.test_merge_left_notempty_right_emptyc                 C   s|   t ||dddgd}|d d }t t|jd dt|jd dt|jd ddg dd}|j|dd}t|| d S )	Nr   rl   rd   r   r   r*   )r   rl   r   r   )r
   r   dtypesr   ry   rz   )ra   rH   rJ   rb   r{   r~   actualr%   r%   r&   test_merge_empty_frame(  s   z TestMerge.test_merge_empty_framec                 C   sb   t ||dddgd}t ||dddgd}t |||dg dd}|j|dd}t|| d S )Nr   rl   rd   r   rl   r   r   r   rx   )ra   rH   rK   df_leftdf_rightr~   r
  r%   r%   r&   test_merge_all_na_column:  s"   z"TestMerge.test_merge_all_na_columnc                 C   s  t jjddddt jjddddtdddtddd	td
ddtdddtddd	tdd	dtddd	tdddtd
ddtdddg
d}t|}|j }t |}t|t jdd}|j	|ddd}t	||ddd}t
|| |j |j k sJ d S )Nr   rc   sizer   r(      i  rL   rS   i  rR   i  rT   )var1var2var3rj   )r  var8r  Fr   r   )r   r   randintr   r
   	from_dictr  uniquer   r   ry   rz   r   )ra   rh   rb   r  newr}   r   r%   r%   r&   test_merge_nosortO  s,   












 zTestMerge.test_merge_nosort)r   valuesF)r(   r(   r   r(   r(   )r   r(   r(   r(   r(   r   ro   rt   c                 C   s@   t dg di}|j|d||d}t |dgd}t|| d S )NrM   )r(   r   r(   )r   r   r   r   rx   )ra   r   r  r   rb   r}   r~   r%   r%   r&    test_merge_same_order_left_rightm  s   z*TestMerge.test_merge_same_order_left_rightc                 C   s   t ddgddgd}t dgdgd}|j|ddd}t ddd	ddd	dtjd	dtjd	ddd	d
d  g d }tj||dd d S )Nr   r(   i1i2r   i3r   _)r   rsuffix        r   r(   )r   r!  i1_r#  Nr   r!  r(  r#  F)check_dtype)r
   r   r   r7   r   reset_indexry   rz   ra   rW   rX   r}   r~   r%   r%   r&   test_merge_nan_righty  s    

	
zTestMerge.test_merge_nan_rightc                 C   s~   t ddgddgd}t dgdgd}|j|dd	d
}t ddddtjdddddtjddg d }t|| d S )Nr   r(   g      ?      ?r  gffffff?r"  r$  r   )r%  r   r'  r&  )r   r(  r!  r#  r)  )r
   r   r   r7   ry   rz   r,  r%   r%   r&   test_merge_nan_right2  s   

zTestMerge.test_merge_nan_right2c                    s<   G  fdddt   |}|j|dd}t| sJ d S )Nc                       s   e Zd Ze fddZdS )z0TestMerge.test_merge_type.<locals>.NotADataFramec                    s    S r   r%   re   NotADataFramer%   r&   _constructor  s   z=TestMerge.test_merge_type.<locals>.NotADataFrame._constructorN)__name__
__module____qualname__propertyr2  r%   r0  r%   r&   r1    s    r1  r[   r   )r
   r   
isinstance)ra   rb   rX   nadr}   r%   r0  r&   test_merge_type  s   zTestMerge.test_merge_typec                 C   s   t tdddddgtddgd}t tdd	}t||gd
d}t||gd
d}t tdddddtdddddgtddtddgd}|rN|t}t	|| d S )Ni     rT   8   r   iW  )rh   tr   r   T)ignore_index)
r
   r  r   r   r   r   r   r6   ry   rz   )ra   r   rh   rb   r}   r~   r%   r%   r&   test_join_append_timedeltas  s   
z%TestMerge.test_join_append_timedeltasc                 C   s   t d}tt||gddgd}tt|gdgd}|j|ddd}tt||gtddt|tjgtddd	}t	|| d S )
Ni ABrr   rro   )r%  r   AB)00r)
r   timedelta64r
   r   r   r   r2   r8   ry   rz   )ra   tdlhsrhsr}   r~   r%   r%   r&   test_join_append_timedeltas2  s   
z&TestMerge.test_join_append_timedeltas2unit)Dr   msmsusnsc           
      C   s   t dddgi}td d gddgdd}d| d}|dv r d	}n|}||d}|d j|ks3J |j|dd
d}tjddg|d}tj	j
jj||jd}t ddg|dddgd}	|	d j|kseJ t||	 d S )N	entity_ide   f   daysrs   r<   zdatetime64[]rK  r   rL  zdatetime64[s]Tr   natr*   rQ  rT  r   )r
   r   r   to_framer+   r   r   r   r2   corearraysDatetimeArray_simple_newry   rz   )
ra   rJ  rW   serr+   	exp_dtyperX   r}   rT  r   r%   r%   r&   test_other_datetime_unit  s&   z"TestMerge.test_other_datetime_unitc           	      C   s   t dddgi}td d gddgdd}d| d}|dv rDd	}tjt|d
 || W d    n1 s6w   Y  |dd}n||d}|d j|ksUJ |j|ddd}t ddgt	j
ddg|ddddgd}t|| d S )NrQ  rR  rS  rT  rU  zm8[rV  rW  z/Supported resolutions are 's', 'ms', 'us', 'ns'r   zm8[s]Tr   rX  r*   rY  r   )r
   r   r   r   r   r   rZ  r+   r   r   r   ry   rz   )	ra   rJ  rW   r_  r+   r   rX   r}   r   r%   r%   r&   test_other_timedelta_unit  s"   z#TestMerge.test_other_timedelta_unitc                 C   s   t g dg dg dd}t g dg dg dd}g d|_g d|_t g dg dg dg dg dd}g d|_tt||| g d	|_d
}tjt|d t|| W d    d S 1 sgw   Y  d S )Nr   r   r   rl   rm   rp   )rl   r-   r-   )rl   r   r   )rl   rm   rp   v3v4)rl   r-   r-   r   r   )r[   r-   r-   z;Data columns not unique: Index\(\['foo'\], dtype='object'\)r   )r
   r   ry   rz   r   r   r   r   )ra   rb   rX   r~   r   r%   r%   r&   &test_overlapping_columns_error_message  s&   


	
"z0TestMerge.test_overlapping_columns_error_messagec                 C      t tjddddddgd}t tjddddg d	d}t tjdd
ddddtjtjgtjdddgd}t||ddd}t|| d S )N20151010rL   r/   periodsr1   r(   r   20151011rR   r   rS   r  rl   r   r   )r
   r2   
date_ranger   r7   r   ry   rz   r   r%   r%   r&   test_merge_on_datetime64tz  s$   z$TestMerge.test_merge_on_datetime64tzc              
   C   s   t ddgtjddddd}t ddgtjddddd}t g d	ttjddddtjg tjgttjdddd d
}t||ddd}t|| |d jdksWJ |d jdks`J d S )Nr(   rL   rh  r/   ri  r   rR   rk  r   r  rl   r   r   r   zdatetime64[ns, US/Eastern]r   )	r
   r2   rl  r   r8   r   ry   rz   r+   r   r%   r%   r&   test_merge_datetime64tz_values3  s0   	z(TestMerge.test_merge_datetime64tz_valuesc                 C   s   t jdd}tt jd|jdgdgt jd|jdgdg dd}|d d }|j|d	d
}tttdt|dt|dttdt|ddg dd}t	|| d S )NUTCr0   2018g      @2019)r   rd   date2r   r   r   r   r*   )r   date2_xr   r   date2_y)
r2   DatetimeTZDtyper
   r3   r1   r   r   r5   ry   rz   )ra   dtzrt   ro   r}   r~   r%   r%   r&    test_merge_on_datetime64tz_emptyN  s(   
z*TestMerge.test_merge_on_datetime64tz_emptyc                 C   s   t tjddddddgd}d|d	< t tg d
dd}|d jdjd|d< t||ddd}t tjddddddgd tj	gd  tj	gd dgd  d}t
|| d S )Nz2017-10-29 01:00rS   HzEurope/Madrid)rj  freqr1   r   r   r(   rd   )z2017-10-29 03:00:00z2017-10-29 04:00:00z2017-10-29 05:00:00rL   )r   rd   ro  r   r   r   rj   rR   )r   r   r   )r
   r2   rl  to_datetimer   tz_localize
tz_convertr   r   r7   ry   rz   r,  r%   r%   r&   +test_merge_datetime64tz_with_dst_transitiong  s.   	z5TestMerge.test_merge_datetime64tz_with_dst_transitionc                 C   s   t jdddd}tttt||dgd}t||g}|j|dddd	}tt	tj
dtjd
ddddddg| jd}t|| d S )Nz
2016-01-01   Mrj  ry  pnumrs   r   Tr   )rv   rw   r   r*   rL   r(   pnum_xpnum_yr   rs   )r2   period_ranger
   r   r   r   r   r   r   r   r   r)   repeatreshape
sort_indexrs   ry   rz   )ra   rs   rb   rX   r}   r~   r%   r%   r&   "test_merge_non_unique_period_index  s   $z,TestMerge.test_merge_non_unique_period_indexc                 C   rg  )Nrh  rL   rK  r  r(   r   rk  rR   r   rS   r  rl   r   r   )r
   r2   r  r   r7   r   ry   rz   r   r%   r%   r&   test_merge_on_periods  s    zTestMerge.test_merge_on_periodsc                 C   s   t ddgtjddddd}t ddgtjddddd}tjdddd}tjdddd}t g d	t|tjg tjgt| d
}t||ddd}t|| |d jdks[J |d jdksdJ d S )Nr(   rL   rh  rK  r  r   rR   rk  r   r  rl   r   r   r   z	Period[D]r   )	r
   r2   r  r   r8   r   ry   rz   r+   )ra   ro   rt   exp_xexp_yr~   r}   r%   r%   r&   test_merge_period_values  s$   z"TestMerge.test_merge_period_valuesc           
      C   s@  |\}}|  }|  }tg dddtjtjtjtjgddtjtjtjtjgtjdddddgtjdddddgd	}tg d
g dd|d< |g d }t||dddd}t|| |j|dddd}t|| t|| t|| |}|jddid}t||dddd}	t|	| |j|dddd}	t|	| d S )Nr   r(   rL   rR   rS   rT   r(   rL   rM   rN   rR   rS   rT   )rO   col_conflict_xrQ   col_conflict_yrU   )	left_onlyboth
right_onlyr  r  r  r  r  r  
categories_merge)rO   r  rQ   r  rU   r  rO   r   Tr   r   	indicatorcustom_namer   )	r   r
   r   r7   r   r   ry   rz   rename)
ra   rY   rW   rX   df1_copydf2_copy	df_resulttestdf_result_custom_nametest_custom_namer%   r%   r&   test_indicator  sH   	

zTestMerge.test_indicatorc                 C   s   |\}}d}t jt|d t||dddd W d    n1 s!w   Y  t jt|d |j|dddd W d    d S 1 sBw   Y  d S )Nz<indicator option can only accept boolean or string argumentsr   rO   r   rT   r  r   )ra   rY   rW   rX   r   r%   r%   r&   #test_merge_indicator_arg_validation  s   "z-TestMerge.test_merge_indicator_arg_validationc                 C   s   |\}}t ||dddd}|jdk sJ |j |dddd}|jdk s(J t ||dddd}|jdk s:J |j |dddd}|jdk sLJ t ||dddd}|jd	k s^J |j |dddd}|jd	k spJ d S )
NrO   ro   Tr  r  rt   r  r   r  )r   r  r   )ra   rY   rW   rX   test2test3test4r%   r%   r&   %test_merge_indicator_result_integrity  s   z/TestMerge.test_merge_indicator_result_integrityc              	   C   sV  |\}}dD ]T}t dddg|ddgi}d| d}tjt|d t||ddd	d
 W d    n1 s5w   Y  tjt|d |j|ddd	d
 W d    n1 sUw   Y  qt ddgddgd}d}tjt|d t||dddd
 W d    n1 sw   Y  tjt|d |j|dddd
 W d    d S 1 sw   Y  d S )N)_right_indicator_left_indicatorr  rO   r(   rL   zECannot use `indicator=True` option when data contains a column named z;|Cannot use name of an existing column for indicator columnr   r   Tr  )rO   custom_column_namez:Cannot use name of an existing column for indicator columnr  r
   r   r   r   r   )ra   rY   rW   r$  r   df_badcolumnr   r%   r%   r&   test_merge_indicator_invalid  s<   "z&TestMerge.test_merge_indicator_invalidc                 C   s   t ddgddgd}t g dg dd}t g dg d	d}tg d
g dd|d< t||ddgddd}t|| |j|ddgddd}t|| d S )Nr   r(   rM   rN   )rO   col2)r(   r(   rR   )rN   r>   r   )r   r(   r(   rR   rM   rN   r>   r   )r  r  r  r  r  r  r  rO   r  r   Tr  r
   r   r   ry   rz   )ra   df3df4hand_coded_resulttest5r%   r%   r&   %test_merge_indicator_multiple_columns=  s   
z/TestMerge.test_merge_indicator_multiple_columnsc                 C   s  t g dg ddtdd}t g dg ddtd	d}| }| }t||d
d
dd}t|| t|| t g dg dg dg ddtdg dd}t||d
d
dd}t|| t g dg dg ddtdd}t||ddd}t|| t|| t|| t||ddd}t|| t g dg dg ddg dtdd}|d}	t|	|d
ddd}t|| t|t dgdgddgdg}
t||
d
d
dd d}tj	t
|d t||
d
d
dd W d    n1 sw   Y  tj	t
|d t||
ddd W d    n	1 sw   Y  t|t dgdgddgdgd
d}t||d
d
dd d }tj	t
|d t||d
d
dd W d    n	1 sYw   Y  tj	t
|d t||ddd W d    n	1 syw   Y  t||
dd!d d"}tj	t
|d t||
d
d
dd W d    n	1 sw   Y  d#}tj	t
|d t||
ddd W d    n	1 sw   Y  d$}tj	t|d t||dd%d W d    n	1 sw   Y  t g d&g d'g ddtdd}t g d(g d)g d*d+tdd}t g d(g d)g d,g d*dtdd}d-}tj	t
|d t||ddd W d    n	1 sCw   Y  t||dd.gdd}t|| d S )/Nr   )catdogweaselhorser   rS   rr   rM   rN   rg   rh   ri   )meowbarkum... weasel noise?naychirprM   rg   rT   Tz1:1)rv   rw   validate)r  r  r  r  )a_xrN   a_yrg   r  
one_to_oner   rM   )r   r  rN   rM   rg   r  )rv   r   r  ri   mooone_to_manyzBMerge keys are not unique in right dataset; not a one-to-one merger   cowrR   )r   many_to_onezAMerge keys are not unique in left dataset; not a one-to-one mergemany_to_manyzCMerge keys are not unique in right dataset; not a many-to-one mergezBMerge keys are not unique in left dataset; not a one-to-many mergez"jibberish" 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"	jibberish)rM   rM   rN   rN   )r   r(   r   r(   rM   rM   rN   )r   r(   r   )r  r  r  )rM   rN   rh   )r  r  r  zQMerge keys are not unique in either left or right dataset; not a one-to-one mergerN   )r
   r   r   r   ry   rz   r   r   r   r   r   r   )ra   ro   rt   	left_copy
right_copyr}   r~   
expected_2
expected_3left_index_resetright_w_dupsr   left_w_dupsexpected_multir%   r%   r&   test_validationP  s.  	
	

 					zTestMerge.test_validationc                 C   sP   t g g g d}tjdd t||dd W d    d S 1 s!w   Y  d S )Nr   raise)divider   r   )r
   r   errstater   )ra   rM   r%   r%   r&   )test_merge_two_empty_df_no_division_error  s   "z3TestMerge.test_merge_two_empty_df_no_division_errorr   zindex,expected_index)r(   rL   rS   )r(   rL   rS   NNN)
2001-01-01
2002-02-02
2003-03-03r  r  r  c                 C   s.   g | ]}t g d |dt g dtjdfqS )r   r*   )r(   rL   rR   NNN)r   r   float64.0dtypr%   r%   r&   
<listcomp>)  s    zTestMerge.<listcomp>)r(   rL   rL   rR   rR   rS   r  r  r  )r  
2001-01-02
2001-01-03rK  )ry  r  r  )1d2d3dr  r  r  c              	   C   s   t g dg dd|d}t dg di}|j|dd|d}t g d	g d
g dtjddgtjddgtjddggg dd}|j|dd t|| d S )Nr  rM   rl   rr   rN   r  rl   Tr   )r   r   r   r(   r(   r(   rL   rL   rL   rR   rS   rT   rM   rl   rN   r   )inplace)r
   r   r   r7   r   ry   rz   )ra   r   rs   expected_indexrW   rX   r}   r~   r%   r%   r&   $test_merge_on_index_with_more_values  s   ,


z.TestMerge.test_merge_on_index_with_more_valuesc                 C   sx   t g dg dd}t dg di}t g dg dg ddg dd	d
dtjgd}|j|dddd}t|| d S )Nr   )r   r(   r(   r  rN   r(   rL   rR   N)r   r(   r(   rL   )r(   rL   rL   rR   r  r   r(   rL   r  rl   Trt   r   r
   r   r7   r   ry   rz   r   r%   r%   r&   test_merge_right_index_rightX  s   z&TestMerge.test_merge_right_index_rightc                 C   s   t ddgddgd}t ddgddgd}|j|dd	g|d
}|dkr0t ddgddgd}nt ddgddgd}t|| d S )Nr  pig(   r:  )animal	max_speedquetzalP   r  r  r   rt   rx   )ra   r   left_dfright_dfr}   r~   r%   r%   r&   test_merge_preserves_row_orderg  s   z(TestMerge.test_merge_preserves_row_orderc                 C   s   t g dtg dtddd}t dg ditg dd}|j|d	d
dd}t g dtg dg dddddtjgd}|jg dd}t	|| d S )Nr   r  abcr  r  rN   r   rr   rl   Trt   r   r  )rM   rM   rN   rg   )r(   r(   rL   rR   r  r   r(   rL   r   )
r
   r   r   r	   r   r   r7   reindexry   rz   r   r%   r%   r&   8test_merge_take_missing_values_from_index_of_other_dtypes  s    
zBTestMerge.test_merge_take_missing_values_from_index_of_other_dtypec                 C   sd   t tddd g dd}t tddd g dd}|jjD ]}d|j_q$|| d S )	Nr   )rS   rT   r(   r  r   )rT   rS   r  F)	r
   r   r   r  _mgrr\  flags	writeabler   )ra   r]   r^   r$   r%   r%   r&   test_merge_readonly  s   
zTestMerge.test_merge_readonlyN)Lr3  r4  r5  r   fixturerb   rX   ro   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r  r  r  r  r  r  r-  r/  r9  r>  rI  ra  rb  rf  rm  rn  rw  r~  r  r  r  r  r  r  r  r  r  r  r	   r   r2   r8   ry   ALL_REAL_NUMPY_DTYPESr   from_tuplesr   r7   r   r   r  r  r  r  r  r%   r%   r%   r&   rZ   p   s    

	

		 


	
/*

 ?
" F



 '
rZ   c                 C   sN   dD ]"}| j ||d}t|  | |dd}|d}tj||dd qd S )N)r   ro   r   r   T)r   r   rs   F)check_names)r   r   r+  r   ry   rz   )r>   r   r   r}   r~   r%   r%   r&   r     s   
r   c                   @   s<  e Zd Zejdddgeddgdgdd Zejde	j
e	je	je	je	je	jgejde	j
e	je	je	jgd	d
 Zejdg dg dg dg ddfg dddgddgddgdfddgg dddgddgdfgdd Zdd Zdd Zdd Zdd Zejdg d eg d!dfg d"eg d!dfd#dged$d%ged&fd#dged$d%ged&fgd'd( Zejdeddgd)d&g d*feddgd+d&g d*fg d g d,fg d"g d,fg d g d,fejd-dd.d/d0d1gfejd-dd.d/d#dgfejd-dd.d/d2dgfejd3dd4ejd3dd5d6fg	d7d8 Zejd9ddgd:fg d;fdgd<fdgd=fgd>d? Zejd9d@dAgd:fg d;fdAgd<fd@gd=fgdBdC Z ejdDd;g dEg dFgfd:g dEg dFgfd=g dEg dFgfd<g dFg dEgfgdGdH Z!dIdJ Z"ejdKg dLdMdN Z#dOS )PTestMergeDtypes
right_valsr-   r   categoryc              
   C   sv   t ddgtddgdddgddgtddgdd	tddgd
d	d}t d|i}t||dd}t|jjs9J d S )Nr-   r   r  r(   rL         ?       @uint64r*   int32)r?  r@  CrK  EFr?  r   )r
   r   r   r   r   r?  r+   )ra   r  ro   rt   r}   r%   r%   r&   test_different  s   
zTestMergeDtypes.test_differentd1d2c           
      C   s>  t |}t |}tt jg dd |dddgd t jt dt jdd}td	d
g}tdt jddg|di|d}|j|ddgd}|	 }	|j
dkrUt d}t jt j|d|	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gdd}|	jddgddd t||	 d S )Nr  r   r*   r-   r   r     )k1k2v)rL   r   )r(   r-   rp   rT   rj   rr   r  r  r   r   r  rL   r(   Tr  	mergesort)kindr  )r   r+   r
   r   r   r)   r   r  r   r   r  r7   r   r  r  ry   rz   sort_values)
ra   r  r  dtype1dtype2ro   rs   rt   r}   r~   r%   r%   r&   test_join_multi_dtypes  s*   




z&TestMergeDtypes.test_join_multi_dtypeszint_vals, float_vals, exp_valsr   )r  r        @XYr  r$  r(   rR   rL   r  c                 C   sd   t d|i}t d|i}t |}|j|ddd}t|| |j|ddd}t||ddg  d S )Nr&  r'  r   rx   )ra   int_vals
float_valsexp_valsr?  r@  r~   r}   r%   r%   r&   test_merge_on_ints_floats  s   z)TestMergeDtypes.test_merge_on_ints_floatsc                 C   s~   t ddgddgdddgd}t d	gd
gdddgd}|j|ddd}t ddgddgtjdgdg dd}t|| d S )Nr  r  rc   r   rk   rl   rm   r   rL      )rl   rp   rp   ro   r   g      i@rc  )r
   r   r   r7   ry   rz   r,  r%   r%   r&   test_merge_key_dtype_cast  s   z)TestMergeDtypes.test_merge_key_dtype_castc                 C   s0  t dg di}t dg di}t dgdgd}tt |j|ddd}t|| W d    n1 s7w   Y  tt |j|ddd}t||ddg  W d    n1 s^w   Y  t dtjtjdgi}td  |j|ddd}t||ddg  W d    d S 1 sw   Y  d S )	Nr&  r   r'  )皙?g      @r$  rR   r$  r%  r   )r
   ry   assert_produces_warningUserWarningr   rz   r   r7   )ra   r?  r@  r~   r}   r%   r%   r&   !test_merge_on_ints_floats_warning  s    "z1TestMergeDtypes.test_merge_on_ints_floats_warningc                 C   st   t dtddgtdi}t dddgi}t dddgitd}t||dd}t|| t||dd}t|| d S Nrl   TFr*   r   )r
   r   r6   r   ry   rz   ra   rW   rX   r~   r}   r%   r%   r&   (test_merge_incompat_infer_boolean_object  s   z8TestMergeDtypes.test_merge_incompat_infer_boolean_objectc                 C   sx   t dtddtjgtdi}t dddgi}t dddgitd}t||dd}t|| t||dd}t|| d S r2  )r
   r   r   r7   r6   r   ry   rz   r3  r%   r%   r&   5test_merge_incompat_infer_boolean_object_with_missing!  s   zETestMergeDtypes.test_merge_incompat_infer_boolean_object_with_missingzdf1_vals, df2_valsr  )rM   rN   rM   )r&  r  r  r   FTr*   c                 C   s\   t d|i}t d|i}t||dgd}t|jjsJ t||dgd}t|jjs,J d S )Nr?  r   )r
   r   r   r?  r+   )ra   df1_valsdf2_valsrW   rX   r}   r%   r%   r&   !test_merge_incompat_dtypes_are_ok-  s   z1TestMergeDtypes.test_merge_incompat_dtypes_are_okr  r   r  )rC  12z1/1/2011rK  r  z
2011-01-01z
2011-01-02r&  20130101)rj  r/   ri  c                 C   s   t d|i}t d|i}d|d j d|d j d}t|}tjt|d t||dgd W d    n1 s:w   Y  d|d j d|d j d}t|}tjt|d t||dgd W d    d S 1 snw   Y  d S )Nr?  zYou are trying to merge on z and z9 columns. If you wish to proceed you should use pd.concatr   r   )r
   r+   reescaper   r   r   r   )ra   r6  r7  rW   rX   r   r%   r%   r&    test_merge_incompat_dtypes_errorE  s$   

"z0TestMergeDtypes.test_merge_incompat_dtypes_errorzexpected_data, howr   r   rt   ro   c           	      C   s`   t dgdg|d}t dgdg|d}t|||d}tt|}t ||dg|d}t|| d S )N)r(   idr   rL   r   rs   r   r+   r
   r   r   r   ry   rz   )	ra   any_numeric_ea_dtyper   expected_datar  r  r}   	exp_indexr~   r%   r%   r&   test_merge_EA_dtypeu     
z#TestMergeDtypes.test_merge_EA_dtyperM   rN   c           	      C   s`   t dgdg|d}t dgdg|d}t|||d}tt|}t ||dg|d}t|| d S )N)rM   r?  r   )rN   r   rA  rB  )	ra   r   rD  any_string_dtyper  r  r}   exp_idxr~   r%   r%   r&   test_merge_string_dtype  rG  z'TestMergeDtypes.test_merge_string_dtypezhow, expected_data)Tr(   rS   )FrT   rR   c                 C   sZ   t ddgddgd}t ddgddgd}t|||d	}t |g d
d}t|| d S )NTFr(   rT   r?  r@  rR   rS   r?  r  r   r?  r@  r  r   rx   )ra   r   rD  rW   rX   r}   r~   r%   r%   r&   test_merge_bool_dtype  s
   z%TestMergeDtypes.test_merge_bool_dtypec           	      C   s   t g dg ddt d}| }t dddtjdgd	d
dtjdgd|d}| }t||dg|d}t|| t|| tt	
dt t	
dgtg dd}t|j| d S )N)r9  r:  34N)rP  5678)lvl0zlvl1-arV  zlvl1-b)datar+   r9  r:  rO  rQ  rS  rT  911)rU  rV  zlvl1-crU  )ro   rt   r   r   O)rU  rW  r[  rr   )r
   r2   StringDtyper   NAr   ry   rz   r   r   r+   r   r  r   r	  )	ra   r   string_dtyperW   r  rX   r  r   r~   r%   r%   r&   test_merge_ea_with_string  s0   z)TestMergeDtypes.test_merge_ea_with_stringzleft_empty, how, exp)
)Fro   ro   )Frt   empty)Fr   ra  )Fr   ro   )Fcrossempty_cross)Tro   ra  )Trt   rt   )Tr   ra  )Tr   rt   )Trb  rc  c                 C   s   t ddgddgd}t dgdgddd	}|r|d
}n|d
}|j||d}|dkr?t ddgddgtjtjgd}n2|dkrPt tjgdgdgd}n!|dkret g ddd}|rd|g d }n|dkrqt g ddd}t|| d S )NrL   r(   rR   rS   rK  rT   rL  r)   r*   r   r   ro   rM  rt   )r@  r?  r  ra  r   rc  )A_xr@  A_yr  )r
   headr   r   r7   ry   rz   )ra   
left_emptyr   r   ro   rt   r}   r~   r%   r%   r&   test_merge_empty  s$   
"z TestMergeDtypes.test_merge_emptyN)$r3  r4  r5  r   r  r	  r   r   r  r   r)   r  intcint16int8uint8r  float32float16r#  r+  r-  r1  r4  r5  r6   r   r8  r2   rl  r>  rF  rJ  rN  r`  rh  r%   r%   r%   r&   r    s    





	

	
	!r  c                   C   sL   t jd ttt jjddgddtddgt jjg ddddS )N  r-   r   )rc   r  )onetwothreer%  )r   r   seedr
   r   choicer   CDTr%   r%   r%   r&   ro     s   
ro   c                   C   s4   t jd ttddgtddgddgdS )Nro  r-   r   r(   rL   )r&  Z)r   r   rs  r
   r   r   ru  r%   r%   r%   r&   rt     s   "rt   c                
   @   s   e Zd Zdd Zdd Zdd Zdd Zej	d	d
dgdd Z
dd Zej	ddd dd dd gdd Zdd Zdd Zej	d	d
dgej	dg dd
dgd
dgfg dddgddgfg d d!d"gd!d"gfgd#d$ Zd%d& Zd'S )(TestMergeCategoricalc                 C   sT   t ||dd}|j }ttddgdtdtdgg dd}t|| d S )	Nr&  r   r-   r   r  r\  )r&  Y_xY_yrr   	r   r	  r  r   r   r   r+   ry   r   )ra   ro   r   r}   r~   r%   r%   r&   test_identical  s   
z#TestMergeCategorical.test_identicalc                 C   sT   t ||dd}|j }ttddgdtdtdgg dd	}t|| d S )
Nr&  r   r-   r   r  r\  r)   r&  r'  rv  rr   rz  ra   ro   rt   r   r}   r~   r%   r%   r&   
test_basic  s   
zTestMergeCategorical.test_basicc                 C   sD  t ddddddddddddd}t d	d	d	d	d	dd
d
d
d
d
dd}t||dddd}| }| }|d d|d< t||dddd}|d tdg|d< t|| | }|d d|d< t||dddd}t|| | }|d d|d< | }|d d|d< t||dddd}t|| d S )NrM   rN   rg   rh   ri   )r   r(   rL   rR   rS   nullr   r   r   r   ro   )r   r   r   r  )r
   r   r   r   r   ry   rz   )ra   rt   ro   rb   r~   crightr}   cleftr%   r%   r&   test_merge_categorical&  s6   z+TestMergeCategorical.test_merge_categoricalc                 C   s   t tg dg ddg dd}t tg dg ddg dd}t||dgd	}t tg dg dg d
d}t|| d S )NrM  r  )A0B0C0)FooLeft)r  r@  r?  )C1B1A1)r  Rightr  r   )r  r  r  )r  r  r  r  r,  r%   r%   r&   'tests_merge_categorical_unordered_equalQ  s$   
z<TestMergeCategorical.tests_merge_categorical_unordered_equalorderedTFc                 C   s   t ddg|d}tg dtg d|dg ddd	d
g}tg dtg d|dg ddd	d
g}t||dddd}tg dtg d|dg dddtjgdd	d
g}t|| d S )NP2P1r  r  )r  r  rK  )r  r  r  r*   r  )r?  prM   r?  r  )r?  r  r  )r  r  r  )rc   r:  r  )r?  r  r  ro   Tr   g      &@g      (@)r?  r  rM   r  )	r   r
   r   r   r   r   r7   ry   rz   )ra   r  pcatrW   rX   r}   r~   r%   r%   r&   5test_multiindex_merge_with_unordered_categoricalindexj  s8   



zJTestMergeCategorical.test_multiindex_merge_with_unordered_categoricalindexc                 C   s   |j |jdd}t||dd}|j }ttddgdt	dtd	d
gdgg dd}t
|| |jj|jjs?J |jj|jjsJJ d S )Nr  )rv  r&  r   r-   r   r  r\  r(   rL   r|  rr   )assignrv  r   r   r	  r  r   r   r   r+   ry   r   r&  r  #_categories_match_up_to_permutationr}  r%   r%   r&   test_other_columns  s   
z'TestMergeCategorical.test_other_columnschangec                 C   s   | S r   r%   r=   r%   r%   r&   r?     s    zTestMergeCategorical.<lambda>c                 C   s   |  tg dS )N)r-   r   bahr   ru  r=   r%   r%   r&   r?     s    c                 C   s   |  tddS )NTr  r  r=   r%   r%   r&   r?     s    c           	      C   s   ||j d}|j|d}t|j jjsJ t||d|d}|j }t	t
dt
dt
dgg dd}t|| d S )	Nr6   )r&  r&  r   r\  r)   r|  rr   )r&  r   r  r   r  r+   r   r	  r  r   r   ry   r   )	ra   r  r   ro   rt   r&  r   r}   r~   r%   r%   r&   test_dtype_on_merged_different  s   
 z3TestMergeCategorical.test_dtype_on_merged_differentc                    sx   d t g d  g dd    fdddD  fddd	D d
}|dd }t||t|jd}t|| d S )NrT   )
rM   rN   rg   rh   ri   r   r   r   r   j)r<  wr>   r   r   rL   c                    s$   g | ]}|gd    D ]}|qqS r@  r%   r  eachletterrL  r%   r&   r    s    zKTestMergeCategorical.test_self_join_multiple_categories.<locals>.<listcomp>)rL  r"   ur  oc                    s    g | ]}|g  D ]}|q	qS r%   r%   r  r  r%   r&   r    s    )
aabbccddeeffgghhiijjr   c                 S   s
   |  dS )Nr  )r   r=   r%   r%   r&   r?     s   
 zITestMergeCategorical.test_self_join_multiple_categories.<locals>.<lambda>r   )r
   applyr   r   r   ry   rz   )ra   rb   r}   r%   r  r&   "test_self_join_multiple_categories  s   


z7TestMergeCategorical.test_self_join_multiple_categoriesc                 C   s(  t tddddgtddddggddgd}|d d	|d< t tddddgtddd
dggddgd}|d d	|d< t td ddgtd dtjgtd tjdggg dd}t||ddgd}t	|| t td ddggg dd}t||ddgd}t	|| d S )Ni  r(   r.  rL   ?r   num2r   r  rR   ffffff?num4r  r  r  )r   r  r  r   rz  r   )
r
   r   r   r2   r3   r   r7   r   ry   rz   )ra   rb   rX   expected_outerresult_outerexpected_innerresult_innerr%   r%   r&   test_dtype_on_categorical_dates  s.   $$z4TestMergeCategorical.test_dtype_on_categorical_datesz.category_column,categories,expected_categories)FTTF)rL   r(   r(   rL   r(   rL   )FalseTruer  r  r  r  c           	      C   s   t g d|d}|d t||d|d< t ddgddgd	}||}t ddg|ddgd
}|d t||d|d< t|| d S )Nr   )r?  r  r  r  rL   rS   r(   r   )r?  num)r?  r  r  )r
   r   ru  r   ry   rz   )	ra   category_columnr  expected_categoriesr  rW   rX   r}   r~   r%   r%   r&   /test_merging_with_bool_or_int_cateorical_column  s   
zDTestMergeCategorical.test_merging_with_bool_or_int_cateorical_columnc                 C   s\   t tddtjgdddd}t||dd}t tddtjgddddd}t|| d S )	Nr(   rL   r,   r*   rK  r?  r   )r?  B_xB_y)r
   r   r   r7   r   ry   rz   )ra   rb   r}   r~   r%   r%   r&   test_merge_on_int_array  s   z,TestMergeCategorical.test_merge_on_int_arrayN)r3  r4  r5  r{  r~  r  r  r   r  r	  r  r  r  r  r  r  r  r%   r%   r%   r&   rw    s8    
+

( rw  c                   C      t dg dig ddS )NrM   r   rc   r   rL   r(   r   rr   rV   r%   r%   r%   r&   r       r  c                   C   r  )NrN   ,  d   r,  rR   r(   rL   rr   rV   r%   r%   r%   r&   r  !  r  r  c                   @   sZ  e Z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S )TestMergeOnIndexeszhow, sort, expectedr   Fr   rc   r,  r  r   rL   r(   rr   Tro   r  r  )r   rc   r   r  rt   r  r  r  r,  r  r   r   r   r  r   c                 C   s$   t ||dd||d}t|| d S )NT)rv   rw   r   r   r   )ra   r  r  r   r   r~   r}   r%   r%   r&   test_merge_on_indexes'  s   0z(TestMergeOnIndexes.test_merge_on_indexesN)
r3  r4  r5  r   r  r	  r
   r   r7   r  r%   r%   r%   r&   r  &  sT    ""  	/r  rs   c                 C   s   g | ]}t d dg|ddqS )r(   rL   	index_colr;   )r   r  r%   r%   r&   r  _  s    r  r?  r@  r  )r  r<   rL   )startstopr<   r.   z
2018-01-02r   c                 C   s   t | j d| j dS )N[rV  )typer3  r+   r=   r%   r%   r&   r?   e  s    )rB   c                 C   sb   t dddgi| d}t dddgi| d}|j|dgd	}t ddgddgd
| d}t|| d S )N	left_datar(   rL   rr   
right_datar  r  r  r   )r  r  rx   )rs   ro   rt   r}   r~   r%   r%   r&   test_merge_index_types]  s
   r  z-on,left_on,right_on,left_index,right_index,nmr   r   F)NNNTTr@  T)NNNTTNc              
   C   s  t dg ditjddgddggddgd	d
}tg dtjddgddggddgd	|d}t ddgddgdtjddgdggddgd	d
}|d ur]t||| ||||d}	t|	| d S d}
tjt	|
d t||| ||||d}	W d    d S 1 s}w   Y  d S )Nr?  r   rM   rN   r   r(   r   r   namesrr   rL   rU  rS   rR   rK  )r   r   r   rv   rw   z$Cannot merge a Series without a namer   )
r
   r   from_productr   r   ry   rz   r   r   r   )r   r   r   rv   rw   nmrM   rN   r~   r}   r   r%   r%   r&   test_merge_seriess  sH   
	"r  c                  C   s   t dg ditjddgddggddgd	d
} tg dtjddgddggddgd	dd}tjtdd t| |ddgd W d    d S 1 sIw   Y  d S )Nr?  r   rM   rN   r   r(   r   r   r  rr   rL   )r@  r  rU  z-Not allowed to merge between different levelsr   r   )r
   r   r  r   r   r   r   r   r   r%   r%   r&   test_merge_series_multilevel  s   
"r  z!col1, col2, kwargs, expected_colssuffixes) _duprC  0_dup)Nr  )_x_y0_x0_yr  r  rM   )Nr  r&  )r  Nz0.0_xrN   b_yr  )Nr  )_aN0_ar  c                 C   s   t | g di}t |g di}t ddgddgddgg|d	}|j|fd
d
d|}t|| t||fd
d
d|}t|| d S )Nr   r   r(   rS   rL   rT   rR   r   r   Tru   rx   )rO   r  kwargsexpected_colsrM   rN   r~   r}   r%   r%   r&   test_merge_suffix  s   r  zhow,expectedr  <   F   X       )r?  r  B2)r  r,  r(   r  r  r  r  r  c                 C   sX   t g dg dd}t g dg dd}t||d| dd}g d	|_t|| d S )
N)r  r,  r(   )r  r  r  rK  r  r  r?  )r  r  )r   r   r  )r?  r  r  )r
   r   r   ry   rz   )r   r~   r  r  r}   r%   r%   r&   test_merge_duplicate_suffix  s
   
r  zcol1, col2, suffixes))rM   rM   )NN)rM   rM   )r  N)r   r   )Nr  c                 C   sj   t | g di}t |g di}d}tjt|d t||dd|d W d    d S 1 s.w   Y  d S )Nr   rR   rS   rT   z'columns overlap but no suffix specifiedr   Trv   rw   r  r  )rO   r  r  rM   rN   r   r%   r%   r&   test_merge_suffix_error  s   "r  r   c                 C   sf   t dg di}t dg di}tjtdd t||dd| d W d    d S 1 s,w   Y  d S )	NrM   r   rN   r  zPassing 'suffixes' as ar   Tr  )r
   r   r   	TypeErrorr   )r  rM   rN   r%   r%   r&   test_merge_suffix_raises	  s
   "r  zcol1, col2, suffixes, msg)rM   rM   r   z(too many values to unpack \(expected 2\)z1not enough values to unpack \(expected 2, got 1\)c                 C   sf   t | g di}t |g di}tjt|d t||dd|d W d    d S 1 s,w   Y  d S )Nr   r  r   Tr  r  )rO   r  r  r   rM   rN   r%   r%   r&   test_merge_suffix_length_error	  s
   "r  	cat_dtyperp  rq  reversec           	      C   s   t g dddt g dddd}ttg d|d g ddd}g d}g d}|r8|  |  tt|||  |d	d}|j|d
d
d}tg dg dtg d|d dd}t|| d S )Nr   Fr  )rp  rq  rp  r   r-   ro   r-   r-   rt   Tru   ro   rt   r-   )	r   r
   r   r   r   r  r   ry   rz   )	r  r  
cat_dtypesrW   data_foo
data_rightrX   r}   r~   r%   r%   r&   test_merge_equal_cat_dtypes	  s8   r  c                  C   s   t g ddd} ttddg| ddgdd	}ttg d| g d
dd	}|j|ddd}tddgddgtddg| dd	}t|| d S )Nr   Fr  rM   rN   r(   rL   r  r-   )rR   rL   r(   r  Tru   rR   r  )r   r
   r   r   r   r   ry   rz   )r  rW   rX   r}   r~   r%   r%   r&   test_merge_equal_cat_dtypes2D	  s$    r   c                  C   sj   t dttddtddgddi} |  }|d d|d< t|| ddd	}|  }t|| d S )
NrM   r   r(   rL   intervalr*   r  r   rz  )	r
   r   r2   Intervalr   r   r   ry   rz   )rt   ro   r}   r~   r%   r%   r&   test_merge_on_cat_and_ext_arrayZ	  s   "r  c            	         s   g d} g d}t j| |fddgd}t|d}d|d< t|d}d|d< d	 d
|j|d fd} fdd| D fdd| D  }t j||gddgd}t|d}d|d< t|| d S )Nr   r9  r:  rO  r   r   r  r   r  r?  r  r  r   r  c                       g | ]}|  qS r%   r%   r  r  )l_sufr%   r&   r  |	  s    z1test_merge_multiindex_columns.<locals>.<listcomp>c                    r  r%   r%   r  )r_sufr%   r&   r  |	  s    )r   r  r
   r   ry   rz   )	lettersnumbersrs   frame_xframe_yr}   expected_labelsr  r~   r%   )r  r	  r&   test_merge_multiindex_columnsh	  s&   


r  c                  C   st   t g dg dd} t g dtg dd}t| |ddd	}t g dg dtg d
d}t|| d S )Nr   )r9  r:  rP  )r>   r   r  )200020012002)r   r   ro   r   rz  )r  r  r8   r   )r
   r2   r{  r   ry   rz   rW   rX   r}   r~   r%   r%   r&    test_merge_datetime_upcast_dtype	  s   r  n_categoriesrT      c                 C   s   t dgtt|  }tt| d dg|d}tdggdgt dgtt| dd}t||dddd	}td
d t| d D ddg|d}t|| d S )Nr   r(   rd   r  r   r  ro   Tr   c                 S   s&   g | ]}|d k r|dgn|t jgqS )rL   g      @)r   r7   )r  r   r%   r%   r&   r  	  s   & z9test_categorical_non_unique_monotonic.<locals>.<listcomp>r   r   )r	   r   r   r
   r   ry   rz   )r  rv   rW   rX   r}   r~   r%   r%   r&   %test_categorical_non_unique_monotonic	  s   r  c                  C   s`  t g dg dg dd} t| } t g dg dg dg dd}t|d	d
gd }t| | ddgd	d
gdd}|jd	d
gdd}| j|ddgd}t|| t g dg dddg dd} t| } t g dg dddg dg dd}t|d	d
gd }t| | ddgd	d
gdd}|jd	d
gdd}| j|ddgd}t|| d S )N)rM   rN   rM   rg   rM   rN   r   )r   r(   r   r(   r   r   )Cat1Int1)rM   rN   rg   rM   rN   rg   )r   r   r   r(   r(   r(   )r.  g333333?r  r  r.  g?)CatIntFactorr  r  r  r  r  ro   r   r(   )axisr   r  Tr  )	r   r
   r   r   r+  dropr   ry   rz   )rM   rN   r~   r}   r%   r%   r&   &test_merge_join_categorical_multiindex	  sT   r  funcr   
merge_asof)r  err_msg)r   rv   r   rv   )r   rw   r   rw   c                 C      t ddgddgd}t ddgddgd}d	|d
  d|d  d}tjt|d tt| ||fi | W d    d S 1 sBw   Y  d S )Nr(   rL   rR   rS   r   rT   r   r  zCan only pass argument "r   " OR "z" not both\.r   r
   r   r   r   getattrr2   r   r  r"  ro   rt   r   r%   r%   r&   /test_merge_join_cols_error_reporting_duplicates	     
"r(  c                 C   r#  )Nr(   rL   rR   rS   r   rT   r   r  zMust pass "r   r$  z"\.r   r%  r'  r%   r%   r&   ,test_merge_join_cols_error_reporting_missing	  r)  r*  r  c                 C   s   t ddgddgd}t ddgddgd}d	}tjt|d
 tt| ||fddi| W d    d S 1 s9w   Y  d S )Nr(   rL   rR   rS   r   rT   r   r  zZCan only pass argument "on" OR "left_index" and "right_index", not a combination of both\.r   r   rM   r%  )r   r  ro   rt   r   r%   r%   r&   1test_merge_join_cols_error_reporting_on_and_index	
  s   
"r+  c                  C   sv   t ddgddgd} t ddgddgd}t| |dddd}t ddgddgddgddgddgd}t|| d S )	Nr(   r-   )r>   r   rt   Tr>   )r   rv   r   )r>   x_xz_xx_yz_yrx   ro   rt   r}   r~   r%   r%   r&   test_merge_right_left_index
  s   	r1  c                  C   s   t dgdgdddg} t ddgidg}t g g dtjdddg}t| |dgdd}t|| t|| ddgd	}t|| d S )
Nr(   rL   r   rM   rN   r*   Tr   r   )r
   r   r   r)   r   ry   rz   )rW   rX   r~   r}   r%   r%   r&   $test_merge_result_empty_index_and_on.
  s   r2  c                  C   s   t g dddd} t g ddd}tjtdd t| |dd	 W d    n1 s,w   Y  tjtdd t|| dd
d W d    d S 1 sLw   Y  d S )Nr   r(   rL   )rM   rN   b_xr   (Passing 'suffixes' which cause duplicater   rM   r   )r  r  r  r
   r   r   r   r   r   r%   r%   r&   .test_merge_suffixes_produce_dup_columns_raises:
  s   "r6  c                  C   sb   t g dg dgg dd} t ddgdd}t| |d	d
}t g dgg dd}t|| d S )Nr  r  )rM   rN   rN   r   r(   rR   rL   r   rM   r   )r(   r(   r(   rL   )rM   r3  r3  r  rx   r0  r%   r%   r&   3test_merge_duplicate_columns_with_suffix_no_warningF
  s
   r7  c                  C   sp   t g dg dgg dd} t ddgdd}tjtd	d
 t| |dd W d    d S 1 s1w   Y  d S )N)r(   r(   r(   r(   )rL   rL   rL   rL   )rM   rN   rN   r3  r   r(   rR   rL   r   r4  r   rM   r   r5  r   r%   r%   r&   Itest_merge_duplicate_columns_with_suffix_causing_another_duplicate_raisesP
  s
   "r8  c                  C   s~   t ddgddggtddgd} t dd	gd
dggddgd}t|| dddd}t g dg dgtg dd}t|| d S )Nr(   rL   rR   rS   rM        \@r   r   rc   r:  r  r>   r   r   Tr   )r   rc   r(   rL   )r:  r  rR   rS   )r>   r   rM   r9  r
   r   r   ry   rz   r  r%   r%   r&   %test_merge_string_float_column_resultY
  s    r;  c                  C   sn   t dgdgdgd} t dgdgdgd}tjtdd t| |dgdd	 W d    d S 1 s0w   Y  d S )
Nr&  r     )rX  r   rs   i  zCan only pass argumentr   T)r   rv   r5  )df_1df_2r%   r%   r&   /test_mergeerror_on_left_index_mismatched_dtypesd
  s
   "r?  c                  C   sb   t td} t| tdd}tdtddi}t||| dd}t||| jdd}t|| d S )NrR   rK  r  r   r?  r   )r	   r   r
   r   _datary   rz   )cirt   ro   resr~   r%   r%   r&   #test_merge_on_left_categoricalindexl
  s   rC  r+   r,   c                 C   s   t ddgddgd| d}t tjtjgddgd| d}t||dd	d
}t ddtjtjgddtjtjgtjtjddgd| d}t|| t||dd	d
}t tjtjddgddtjtjgtjtjddgd| d}t|| d S )Nr(   rL   )rl   rO   r*   rR   rS   )rl   r  rl   r   r   )rl   rO   r  )rl   r  rO   r  )r+   ro   rt   r}   r~   r%   r%   r&   test_merge_outer_with_NaNx
  s(   rD  c                  C   sh   t ddgitdgddd} t ddgitdgddd}t| |ddd}t dgdd}t|| d S )	NrM   r(   rg   r   rr   rh   r   )r  r  r:  r0  r%   r%   r&    test_merge_different_index_names
  s
   rE  c                 C   sb   t g ddd| d}t g ddd| d}|j||d}t g dddd| d}t|| d S )	Nr   r(   r   r*   rL   r  r   r   rx   rC  r   ro   rt   r}   r~   r%   r%   r&   test_merge_ea
  s
   rG  c                 C   s   t g ddd| d}t g ddd|  d}|j||d}t tg d| dtg d| dtg d	|  dd
}t|| d S )Nr   r(   r   r*   rL   r  r   r  r  r   )r
   lowerr   r   ry   rz   rF  r%   r%   r&   test_merge_ea_and_non_ea
  s   rI  r)   int64[pyarrow]c                 C   sr   t d tdddgi| d}tdddgidd}||}| }t|| ||}| }t|| d S )NpyarrowrM   r(   rL   r*   rJ  )r   importorskipr
   r   r   ry   rz   )r+   rb   rX   r}   r~   r%   r%   r&   !test_merge_arrow_and_numpy_dtypes
  s   


rM  r   )r   ro   r   rt   r1   zAmerica/Chicagoc                 C   s8  t jddd| dt jddd| dt jddd| dg}t|d d dd	gd
}|d jd|d< t|dd  dd	gd}|d jd|d< t|dd	tjgtjdd	gd}|d jd|d< |dkrq|jdg jdd}n|dkr}|jddg }n|dkr|jddg jdd}|j	|d|d}t
|| d S )Ni  rT   r  r0         rL   r  r  )r<  rM   r<  rP  r(   )r<  rN   rM  )r<  rM   rN   r   T)r  ro   r   rt   r   )r2   r3   r
   r   as_unitr   r7   ilocr+  r   ry   rz   )r1   r   valsrW   rX   r~   r}   r%   r%   r&   (test_merge_datetime_different_resolution
  s$    rS  )r   r   )Yr   r   r   r<  numpyr   r   pandas.core.dtypes.commonr   r   pandas.core.dtypes.dtypesr   pandasr2   r   r	   r
   r   r   r   r   r   r   r   r   pandas._testing_testingry   pandas.api.typesru  pandas.core.reshape.concatr   pandas.core.reshape.merger   r   r'   r4   r9   r  rH   rJ   rK   rY   rZ   r   r  ro   rt   rw  r  r  r  r  r	  r
  r  r  r  r  r7   r  r  r  tupler  r  r   r  r  r  r  r  r(  r*  r+  r1  r2  r6  r7  r8  r;  r?  rC  rD  rE  rG  rI  rM  rS  r%   r%   r%   r&   <module>   sb   4
	



          2  V

  

7


(

	


# 
8		
	
		
