o
    Ti-                    @   sV  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 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(Z/ej%d)d* Z0ej%d+d, Z1G d-d. d.Z2ej3j4d/d0d1 ej5D ed2d3gd2d3gd4d5ed d6d4d7ed8d9gd4d:g d;d d<d=d> Z6ej34d?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 Z7dHdI Z8ej34dJd 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 Z9ej34dcd&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j34dpg dqdrds Z<ej34dKd$d&hd d dtgdudv Z=ej34dwdxdUdUe>dUdyfgdzd{ Z?ej34d|d}d~gej34ddDdBgdd Z@dd ZAdd ZBdd ZCdd ZDej34dddgdd ZEdd ZFej34dddgej34ddUdDdddgfdUdDdddgfgdd ZGej34dddgej34dddUiddgfddUiddgfgdd ZHej34dddgej34dddDiddDigdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQej34dddgdd ZRdd ZSdd ZTdd ZUej34dddgdd ZVej34dg dej34dddgddń ZWddǄ ZXddɄ ZYdd˄ ZZdS )    )datedatetime	timedeltaN)is_object_dtype)CategoricalDtype)CategoricalCategoricalIndex	DataFrameDatetimeIndexIndexIntervalIndex
MultiIndexPeriodIndex
RangeIndexSeriesTimedeltaIndex)concat)
MergeErrormerge   2   c                 C   sf   t t| }tt|||  }t||k r(tt ||d |t|   }tjd| |S )N   )	listrangenpZasarraytilelenrandomdefault_rngshuffle)ngroupsnZunique_groupsarr r#   e/var/www/html/evchargy.com/venv/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_series0   s   r2   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   nanr0   NaTr#   r#   r#   r$   get_series_na<   s
   
r7   c                 C      | j jS Nr)   namexr#   r#   r$   <lambda>E       r>   )paramsidsc                 C      | j S )zV
    A parametrized fixture returning a variety of Series of different
    dtypes
    paramrequestr#   r#   r$   series_of_dtypeE      rG   c                 C   r8   r9   r:   r<   r#   r#   r$   r>   N   r?   c                 C   rB   )zk
    A duplicate of the series_of_dtype fixture, so that it can be used
    twice by a single function
    rC   rE   r#   r#   r$   series_of_dtype2N   rH   rI   c                 C   r8   r9   r:   r<   r#   r#   r$   r>   W   r?   c                 C   rB   )zU
    A parametrized fixture returning a variety of Series with all NA
    values
    rC   rE   r#   r#   r$   series_of_dtype_all_naW   rH   rJ   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&   r   ab)col1col_conflictcol_left)r&   r            )r   r   r   r   r   )rM   rN   	col_rightr	   )df1df2r#   r#   r$   dfs_for_indicator`   s   rW   c                   @   s  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/g d0d1d2 Zejd3d4d4d5d4d6d7d8d4d9d8d6d:gd;d< Zd=d> Z d?d@ Z!dAdB Z"dCdD Z#dEdF Z$ejdGdHg dIfd4g dJfgejd/dKdLgdMdN Z%dOdP Z&dQdR Z'dSdT Z(dUdV Z)dWdX Z*ejdYg dZd[d\ Z+ejdYg dZd]d^ Z,d_d` Z-dadb Z.dcdd Z/dedf Z0dgdh Z1didj Z2dkdl Z3dmdn Z4dodp Z5dqdr Z6dsdt Z7dudv Z8dwdx Z9dydz Z:d{d| Z;ejd/dLd}gejd~e<g de<g dfe=g de=ddde>j?e>j?e>j?gfgdd e@jAD eBCg deBCdddeDjEeDjEeDjEgfeFg dddeFddde>j?e>j?e>j?gddfeGg deGddde>j?e>j?e>j?gfdd ZHdd ZIejd/dKdLgdd ZJdd ZKdd ZLdS )	TestMergec                 C   sF   t t t tjddtjddd}||d dk }|S )Nr   r   )key1key2data1data2rZ   r&   r	   r%   r   r   r   standard_normal)selfdfr#   r#   r$   r`   n   s   
zTestMerge.dfc                 C   s,   t tddtdddtjdddS )N
   )r!   rQ   )r    r!   r   )rY   rZ   valuer]   r_   r#   r#   r$   rV   }   s   
zTestMerge.df2c                 C   s    t g dtjdddS )NrK   rL   cderg   rK   r      keyv1r	   r   r   r   r^   rc   r#   r#   r$   left   s
   zTestMerge.leftc                 C   s"   t dtjddig ddS )Nv2r   rQ   rf   rL   re   rK   indexrl   rc   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 )
NrK   r&   r   r   r'   )rq   r)   T
left_indexright_indexr(   r	   r   tmassert_frame_equal)r_   df_emptyZ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 )NrY   rZ   onr   rw   rx   )r_   r`   rV   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   r   r   )r&   r   r   rP   r   r&   r   rP   )r	   astyper3   r   rw   rx   r_   rm   rr   r{   rz   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 )NrY   r}   )	set_indexr   rw   rx   )r_   r`   rV   rm   rr   rz   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d}t dtjd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 )Nrd   r   rh   ri   rn   rQ   ro   rp   rj   Trm   F)left_onru   howsortrr   )right_onrt   r   r   )
r	   r   r   r   r^   r   rw   rx   loccolumns)r_   rm   rr   Z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d}t dtjd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 )Nrd   r   rh   ri   rn   rQ   ro   rp   rj   Tinnerr   ru   r   r}   )r   rt   r   )r	   r   r   r   r^   r   joinr   rq   rw   rx   r   r_   rm   rr   rz   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)rt   z$Must pass left_on or left_index=True)ru   zRCan only pass argument "on" OR "left_on" and "right_on", not a combination of bothrj   )r   r~   z)len\(right_on\) must equal len\(left_on\)rY   rZ   r   r   )pytestraisesr0   errorsr   r   
ValueError)r_   r`   rV   rm   rr   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   rm   FrY   rZ   r   rt   ru   z=left_index parameter must be of type bool, not <class 'list'>r   r   r   r   )r_   r`   rV   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 )Nrj   r}   r   Zv1_xZv1_y)r   Zvalue_countssumr   )r_   rm   mergedZ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&   r   rP   rQ   )lkeyrb   )r+   r   quxr+   )rR      rh   r   )rkeyrb   r   r   outerT)r   r   r   r   r   r   r+   r;   r   r   rP   r&   rQ   value_xr   rR   r   rh   value_y)r	   r   r   r   r5   rw   assert_series_equal)r_   rm   rr   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&   rK   rL   ra   rp   r+   r   re   rf   Trt   ru   copyr   rK   Zpeekaboorf   )r	   r   r   all)r_   rm   rr   r   r#   r#   r$   test_merge_copy4  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   ra   rp   r+   r   r   TFr   rK   rf   )r	   r   r   r   Zshares_memoryZ_values)r_   using_array_managerrm   rr   r   r#   r#   r$   test_merge_nocopy@  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&   r   r   rP   rR   rj   rb   rb   rj   r   r&   r&   r   rP   rQ   rR   r   )rj   rvaluer   r~   r   	r&   r&   r&   r&   r   r   rP   rQ   rR   r   r&   r   rP   rQ   )	r   r&   r   r&   r   r   rP   rQ   rR   )rj   rb   r   )rb   rj   r   )	r	   r   r   r   r   arrayr5   rw   rx   )r_   rm   rr   r   r{   r#   r#   r$   "test_intelligently_handle_join_keyI  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&   ra   ri   r      r   r   rj   r'   TFr   boolvalr   r   r   key_0)r	   r   r)   r   r   int_)r_   rU   rV   r`   r   r   r#   r#   r$   test_merge_join_key_dtype_cast\  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   rR   r   rb   rj   r'   r   r)   r   r   r(   r   r   r   r   r   r   r:   rP   )r   r&   r&   r   r   rP   T)rt   r   r   r   )r	   r   aranger   r   rw   r   Znotnar   r   r   r'   )	r_   rm   rr   rj   r   r   r   r   r{   r#   r#   r$   test_handle_join_key_pass_arrays  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=   rK   rp   yrL   re   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   )r_   dtrU   rV   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  rR   r&   r   rP   rQ   r=   rK   rp   r   rL   re   )rK   rL   q)re   rf   rg   fghrf   r   r	   _check_merge)r_   r   dt2dt3Zdt4rU   rV   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   rR   r&   r   rP   r=   rK   rL   re   rf   rp   r   )rg   r   r   z hir   )r_   r   r   r   rU   rV   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&   r   r   rj   rm   r   rr   rv   )r_   rm   rr   rz   r#   r#   r$   test_left_merge_empty_dataframe  s   z)TestMerge.test_left_merge_empty_dataframer   )r   rm   rr   r   c                 C   s:   t g |d d d}| }|j||d}t|| d S )Nr   rp   r   )r	   r   r   rw   rx   )r_   rq   r   rm   rr   rz   r#   r#   r$   test_merge_empty_dataframe  s   z$TestMerge.test_merge_empty_dataframekwargTrs   r=   rt   r   rK   r   ru   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rK   rL   re   r   r=   r   zrK   rL   re   r=   r   r   r   r   )r	   r4   r   rw   rx   )r_   	join_typer   rm   rr   exp_inrz   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&   r   rP   rQ   rR   r   rh   r   	   r   rP   r(   r&   rQ   rh   r   rR   r   rP   r   r   r   r   c                    H   t  fddi|}t||  t  fddi|}t||  d S )Nr   r   rm   r   r   r   rz   rm   rr   r#   r$   check1     z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check1c                    r   )Nr   rr   r   r   r   r   r#   r$   check2  r   z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check2Trs   r=   r   rK   r   r   r&   r   r   )r	   r   r   r5   r4   )r_   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   rP   r(   r   r   c                    r   )Nr   r   rr   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   rm   r   Trs   r=   r   rK   r   r   r   r   r   r   r   r   rm   rr   r#   r$   r   0  s   
z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check2)r	   r   r   r5   r4   rq   r   rc   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   rj   rb   r   r   r(   )r   rj   r   r}   )r	   r   dtypesr   rw   rx   )r_   rG   rI   r`   ry   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   rj   rb   r   rj   r   r   r}   rv   )r_   rG   rJ   Zdf_leftZdf_rightr{   r   r#   r#   r$   test_merge_all_na_columnR  s"   z"TestMerge.test_merge_all_na_columnc                 C   s   t jdjddddt jd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d}|j
|ddd}t
||ddd}t|| |j |j k sJ d S )Nr   r   ra   sizer   r&      i  rQ   i  rP   i  rR   )Zvar1Zvar2var3rh   )r  Zvar8r  Fr~   r   )r   r   r   Zintegersr   r	   	from_dictr  uniquer   r   rw   rx   r   )r_   rf   r`   r  newrz   r   r#   r#   r$   test_merge_nosortg  s0   












 zTestMerge.test_merge_nosort)r   valuesF)r&   r&   r   r&   r&   )r   r&   r&   r&   r&   rm   rr   c                 C   s@   t dg di}|j|d||d}t |dgd}t|| d S )NrK   )r&   r   r&   )r~   r   r   r   rv   )r_   r   r  r   r`   rz   r{   r#   r#   r$    test_merge_same_order_left_right  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)Zcheck_dtype)r	   r   r   r5   r   reset_indexrw   rx   r_   rU   rV   rz   r{   r#   r#   r$   test_merge_nan_right  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   r5   rw   rx   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 r9   r#   rc   NotADataFramer#   r$   _constructor  s   z=TestMerge.test_merge_type.<locals>.NotADataFrame._constructorN)__name__
__module____qualname__propertyr  r#   r  r#   r$   r    s    r  rY   r}   )r	   r   
isinstance)r_   r`   rV   Znadrz   r#   r  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	}d
}t}|r"d }tj||d t||gdd}t||gdd}W d    n1 sDw   Y  t tdddddtdddddgtddtddgd}|rm|	t
}t|| d S )Ni     rR   8   r   iW  )rf   tr   r   zDThe behavior of DataFrame concatenation with empty or all-NA entriesr   T)Zignore_index)r	   r  r   r   r   FutureWarningrw   assert_produces_warningr   r   r4   rx   )r_   r   rf   r`   r   warnrz   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Brp   rrm   )r  r   ZAB)0Z0r)
r   Ztimedelta64r	   r   r   r   r0   r6   rw   rx   )r_   tdlhsrhsrz   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rq   r;   zdatetime64[]r6  r   r7  zdatetime64[s]Tr   natr(   r<  r?  r   )r	   r   r   to_framer)   r   r   r   r0   corearraysZDatetimeArrayZ_simple_newrw   rx   )
r_   r5  rU   serr)   Z	exp_dtyperV   rz   r?  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 )Nr<  r=  r>  r?  r@  zm8[rA  rB  z/Supported resolutions are 's', 'ms', 'us', 'ns'r   zm8[s]Tr   rC  r(   rD  r   )r	   r   r   r   r   r   rE  r)   r   r   r   rw   rx   )	r_   r5  rU   rH  r)   r   rV   rz   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   rj   rk   rn   )rj   r+   r+   )rj   r   r   )rj   rk   rn   Zv3Zv4)rj   r+   r+   r   r   )rY   r+   r+   z;Data columns not unique: Index\(\['foo'\], dtype='object'\)r   )r	   r   rw   rx   r   r   r   r   )r_   r`   rV   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20151010r   r-   periodsr/   r&   r   20151011rP   r   rQ   r   rj   r   r   )r	   r0   
date_ranger   r5   r   rw   rx   r   r#   r#   r$   test_merge_on_datetime64tz9  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&   r   rN  r-   rO  r   rP   rQ  r   r   rj   r   r   r   zdatetime64[ns, US/Eastern]r   )	r	   r0   rR  r   r6   r   rw   rx   r)   r   r#   r#   r$   test_merge_datetime64tz_valuesR  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UTCr.   Z2018g      @Z2019)r   rb   Zdate2r   r   r   r}   r(   )r   Zdate2_xr   r   Zdate2_y)
r0   ZDatetimeTZDtyper	   r1   r/   r   r   r3   rw   rx   )r_   Zdtzrr   rm   rz   r{   r#   r#   r$    test_merge_on_datetime64tz_emptym  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:00rQ   HzEurope/Madrid)rP  freqr/   r   r   r&   rb   )z2017-10-29 03:00:00z2017-10-29 04:00:00z2017-10-29 05:00:00r   )r   rb   rU  r   r   r~   rh   rP   )r   r   r   )r	   r0   rR  to_datetimer   Ztz_localizeZ
tz_convertr   r   r5   rw   rx   r  r#   r#   r$   +test_merge_datetime64tz_with_dst_transition  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rP  rX  Zpnumrq   r   Tr   )rt   ru   r   r(   r   r&   Zpnum_xZpnum_yr   rq   )r0   period_ranger	   r   r   r   r   r   r   r   r   r'   repeatreshape
sort_indexrq   rw   rx   )r_   rq   r`   rV   rz   r{   r#   r#   r$   "test_merge_non_unique_period_index  s   $z,TestMerge.test_merge_non_unique_period_indexc                 C   rM  )NrN  r   r6  r^  r&   r   rQ  rP   r   rQ   r   rj   r   r   )r	   r0   rb  r   r5   r   rw   rx   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&   r   rN  r6  r^  r   rP   rQ  r   r   rj   r   r   r   z	Period[D]r   )	r	   r0   rb  r   r6   r   rw   rx   r)   )r_   rm   rr   Zexp_xZexp_yr{   rz   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&   r   rP   rQ   rR   r&   r   rK   rL   rP   rQ   rR   )rM   col_conflict_xrO   col_conflict_yrS   )	left_onlyboth
right_onlyrn  rn  rn  rl  rn  rm  
categories_merge)rM   rj  rO   rk  rS   rr  rM   r   Tr~   r   Z	indicatorZcustom_namer   )	r   r	   r   r5   r   r   rw   rx   rename)
r_   rW   rU   rV   df1_copydf2_copyZ	df_resulttestZdf_result_custom_nameZ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   rM   r   rR   rs  r   )r_   rW   rU   rV   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 )
NrM   rm   Trs  rn  rr   rl  r   rm  )r   rr  r   )r_   rW   rU   rV   Ztest2Ztest3Z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)Z_right_indicatorZ_left_indicatorrr  rM   r&   r   zECannot use `indicator=True` option when data contains a column named z;|Cannot use name of an existing column for indicator columnr   r   Trs  )rM   custom_column_namez:Cannot use name of an existing column for indicator columnr{  r	   r   r   r   r   )r_   rW   rU   r  r   Z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&   rK   rL   )rM   col2)r&   r&   rP   )rL   r=   r   )r   r&   r&   rP   rK   rL   r=   r   )rl  rm  rn  rn  ro  rp  rr  rM   r~  r   Trs  r	   r   r   rw   rx   )r_   df3df4Zhand_coded_resultZ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   rQ   rp   rK   rL   re   rf   rg   )meowbarkum... weasel noise?nayZchirprK   re   rR   Tz1:1)rt   ru   validate)r  r  r  r  )a_xrL   a_yre   r_  Z
one_to_oner   rK   )r~   r  rL   rK   re   ra  )rt   r   r  rg   mooZone_to_manyzBMerge keys are not unique in right dataset; not a one-to-one merger   cowrP   )r   Zmany_to_onezAMerge keys are not unique in left dataset; not a one-to-one mergeZ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"Z	jibberish)rK   rK   rL   rL   )r   r&   r   r&   rK   rK   rL   )r   r&   r   )r  r  r  )rK   rL   rf   )r  r  r  zQMerge keys are not unique in either left or right dataset; not a one-to-one mergerL   )r	   r   r   r   rw   rx   r   r   r   r   r   r   )r_   rm   rr   Z	left_copyZ
right_copyrz   r{   Z
expected_2Z
expected_3Zleft_index_resetZright_w_dupsr   Zleft_w_dupsZexpected_multir#   r#   r$   test_validationo  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   Zerrstater   )r_   rK   r#   r#   r$   )test_merge_two_empty_df_no_division_error4  s   "z3TestMerge.test_merge_two_empty_df_no_division_errorr   zindex,expected_index)r&   r   rQ   )r&   r   rQ   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&   r   rP   NNN)r   r   float64.0Zdtypr#   r#   r$   
<listcomp>H  s    zTestMerge.<listcomp>)r&   r   r   rP   rP   rQ   r  r  r  )r  
2001-01-02
2001-01-03r6  )rX  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   rK   rj   rp   rL   ri  rj   Tr   )r   r   r   r&   r&   r&   r   r   r   rP   rQ   rR   rK   rj   rL   r   )inplace)r	   r   r   r5   r   rw   rx   )r_   r   rq   expected_indexrU   rV   rz   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  rL   r&   r   rP   N)r   r&   r&   r   )r&   r   r   rP   r  r   r&   r   ra  rj   Trr   r   r	   r   r5   r   rw   rx   r   r#   r#   r$   test_merge_right_index_rightw  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_speedZquetzalP   r  r  r   rr   rv   )r_   r   left_dfright_dfrz   r{   r#   r#   r$   test_merge_preserves_row_order  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  abcrp  r  rL   r   rp   rj   Trr   r   r  )rK   rK   rL   re   )r&   r&   r   rP   r  r   r&   r   r   )
r	   r   r   r   r   r   r5   Zreindexrw   rx   r   r#   r#   r$   8test_merge_take_missing_values_from_index_of_other_dtype  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   )rQ   rR   r&   r  r   )rR   rQ   r  F)	r	   r   r   rd  Z_mgrrG  flagsZ	writeabler   )r_   r[   r\   r"   r#   r#   r$   test_merge_readonly  s   
zTestMerge.test_merge_readonlyN)Mr   r!  r"  r   fixturer`   rV   rm   rr   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  r  r%  r,  r4  rI  rJ  rL  rS  rT  rV  r[  rf  rg  rh  rx  ry  rz  r}  r  r  r  r   r
   r0   r6   rw   ALL_REAL_NUMPY_DTYPESr   from_tuplesr   r5   r   r   r  r  r  r  r  r#   r#   r#   r$   rX   m   s    

	

		 



	
/* 

 ?
" F



 '
rX   c                 C   sN   dD ]"}| j ||d}t|  | |dd}|d}tj||dd qd S )N)r   rm   r   r   T)r   r   rq   F)Zcheck_names)r   r   r  r   rw   rx   )r=   r   r   rz   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&   r         ?       @uint64r(   int32)r-  r.  Cr6  EFr-  r}   )r	   r   r   r   r   r-  r)   )r_   r  rm   rr   rz   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)r   r   )r&   r+   rn   rR   rh   rp   r  r  r}   r   r  r   r&   Tr  Z	mergesort)kindr  )r   r)   r	   r   r   r'   r   r  r   r   r  r5   r   r  r  rw   rx   Zsort_values)
r_   r  r  Zdtype1Zdtype2rm   rq   rr   rz   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&   rP   r   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   rv   )r_   Zint_valsZ
float_valsZexp_valsr-  r.  r{   rz   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  ra   r   ri   rj   rk   r   r      )rj   rn   rn   rm   r   g      i@rK  )r	   r   r   r5   rw   rx   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  rP   r  r  r   )r	   rw   r*  UserWarningr   rx   r   r5   )r_   r-  r.  r{   rz   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 Nrj   TFr(   r}   )r	   r   r4   r   rw   rx   r_   rU   rV   r{   rz   r#   r#   r$   (test_merge_incompat_infer_boolean_object5  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 r  )r	   r   r   r5   r4   r   rw   rx   r  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   )rK   rL   rK   )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)   )r_   df1_valsdf2_valsrU   rV   rz   r#   r#   r$   !test_merge_incompat_dtypes_are_okL  s   z1TestMergeDtypes.test_merge_incompat_dtypes_are_okr  r   r  )r0  12z1/1/2011r6  r^  z
2011-01-01z
2011-01-02r  Z20130101)rP  r-   rO  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    n1 smw   Y  t|t|krt |||d}t |||d}d|d j d|d j d	}t|}tjt|d t|| W d    n1 sw   Y  d|d
 j d|d
 j d}t|}tjt|d t||dd
gd W d    d S 1 sw   Y  d S d S )Nr-  zYou are trying to merge on z and zE columns for key 'A'. If you wish to proceed you should use pd.concatr   r}   r-  r.  r  r.  zE columns for key 'B'. If you wish to proceed you should use pd.concatr  zE columns for key 'C'. If you wish to proceed you should use pd.concat)	r	   r)   reescaper   r   r   r   r   )r_   r  r  rU   rV   r   r  r  r#   r#   r$    test_merge_incompat_dtypes_errord  s<   



"z0TestMergeDtypes.test_merge_incompat_dtypes_errorzexpected_data, howr   r   rr   rm   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   r   r   rq   r   r)   r	   r   r   r   rw   rx   )	r_   any_numeric_ea_dtyper   expected_datar  r  rz   Z	exp_indexr{   r#   r#   r$   test_merge_EA_dtype     
z#TestMergeDtypes.test_merge_EA_dtyperK   rL   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)rK   r  r   )rL   r   r  r  )	r_   r   r  any_string_dtyper  r  rz   Zexp_idxr{   r#   r#   r$   test_merge_string_dtype  r  z'TestMergeDtypes.test_merge_string_dtypezhow, expected_data)Tr&   rQ   )FrR   rP   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&   rR   r-  r.  rP   rQ   r-  r  r   r  r   rv   )r_   r   r  rU   rV   rz   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)r  r  34N)r  5678)lvl0zlvl1-ar  zlvl1-b)datar)   r  r  r  r  r  r  9Z11)r   r  zlvl1-cr   )rm   rr   r~   r   O)r   r  r  rp   )r	   r0   ZStringDtyper   ZNAr   rw   rx   r   r   r)   r   r  r   r   )	r_   r   Zstring_dtyperU   ru  rV   rv  r   r{   r#   r#   r$   test_merge_ea_with_string  s0   z)TestMergeDtypes.test_merge_ea_with_stringzleft_empty, how, exp)
)Frm   rm   )Frr   empty)Fr   r  )Fr   rm   )Fcrossempty_cross)Trm   r  )Trr   rr   )Tr   r  )Tr   rr   )Tr	  r
  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 )Nr   r&   rP   rQ   r  rR   r  r'   r(   r   r   rm   r  rr   )r.  r-  r  r  r   r
  )ZA_xr.  ZA_yr  )r	   headr   r   r5   rw   rx   )r_   Z
left_emptyr   r   rm   rr   rz   r{   r#   r#   r$   test_merge_empty  s$   
"z TestMergeDtypes.test_merge_emptyN)$r   r!  r"  r   r  r  r   r   r  r   r'   r  ZintcZint16Zint8Zuint8r  Zfloat32Zfloat16r  r  r  r  r  r  r4   r   r  r0   rR  r  r  r  r  r  r  r#   r#   r#   r$   r    s    



5

	

	
	!r  c                   C   sL   t ttjdjddgddtddgtjdjg ddddS )Nr   r+   r   )ra   r  )onetwothreer  )r	   r   r   r   r   choicer   CDTr#   r#   r#   r$   rm   0  s   rm   c                   C   s(   t tddgtddgddgdS )Nr+   r   r&   r   )r  Z)r	   r   r   r  r#   r#   r#   r$   rr   <  s   "rr   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   rp  r  )r  ZY_xZY_yrp   	r   r   re  r   r   r   r)   rw   r   )r_   rm   r   rz   r{   r#   r#   r$   test_identicalD  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   rp  r  r'   r  r  r  rp   r  r_   rm   rr   r   rz   r{   r#   r#   r$   
test_basicN  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 )NrK   rL   re   rf   rg   )r   r&   r   rP   rQ   nullr   r   r   r   rm   )r   r   r   r  )r	   r   r   r   r   rw   rx   )r_   rr   rm   r`   r{   Zcrightrz   Z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 )Nr  rp  )ZA0B0Z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_equal  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rq  r#  )r  r  r6  )r$  r%  r$  r(   r   )r  prK   r  r'  )r-  r  r  )r$  r$  r%  )ra   r&  r  )r  r'  r  rm   Tr   g      &@g      (@)r  r'  rK   r  )	r   r	   r   r   r   r   r5   rw   rx   )r_   r#  ZpcatrU   rV   rz   r{   r#   r#   r$   5test_multiindex_merge_with_unordered_categoricalindex  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  )r  r  r}   r+   r   rp  r  r&   r   r  rp   )assignr  r   r   r   re  r   r   r   r)   rw   r   r  r  Z#_categories_match_up_to_permutationr  r#   r#   r$   test_other_columns  s   
z'TestMergeCategorical.test_other_columnschangec                 C   s   | S r9   r#   r<   r#   r#   r$   r>     s    zTestMergeCategorical.<lambda>c                 C   s   |  tg dS )N)r+   r   Zbahr   r  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tsJ t||d|d}|j	 }t
tdtdtdgg dd}t|| d S )	Nr4   )r  r  r   r  r'   r  rp   )r  r   r)  r$  r  r)   r   r   r   re  r   r   rw   r   )	r_   r+  r   rm   rr   r  r   rz   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 )NrR   )
rK   rL   re   rf   rg   r   r   r   r   j)r(  wr=   r   r   r   c                    s$   g | ]}|gd    D ]}|qqS r  r#   r  Zeachletterr7  r#   r$   r    s    zKTestMergeCategorical.test_self_join_multiple_categories.<locals>.<listcomp>)r7  r!   ur'  oc                    s    g | ]}|g  D ]}|q	qS r#   r#   r1  r3  r#   r$   r    s    )
ZaaZbbccddeeffZgghhiiZ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   rw   rx   )r_   r`   rz   r#   r3  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  r   ?r   num2r   r  rP   ffffff?num4r  r  r  )r   r?  rA  r   rY  r   )
r	   r   r   r0   r1   r   r5   r   rw   rx   )r_   r`   rV   Zexpected_outerZresult_outerZexpected_innerZresult_innerr#   r#   r$   test_dtype_on_categorical_dates  s.   $$z4TestMergeCategorical.test_dtype_on_categorical_datesz.category_column,categories,expected_categories)FTTF)r   r&   r&   r   r&   r   )FalseTruerD  rC  rD  rC  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-  r   rQ   r&   r   )r  num)r  r  rE  )r	   r   r  r   rw   rx   )	r_   Zcategory_columnrq  Zexpected_categoriesr#  rU   rV   rz   r{   r#   r#   r$   /test_merging_with_bool_or_int_cateorical_column3  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&   r   r*   r(   r  r-  r}   )r-  B_xZB_y)r	   r   r   r5   r   rw   rx   )r_   r`   rz   r{   r#   r#   r$   test_merge_on_int_arrayI  s   z,TestMergeCategorical.test_merge_on_int_arrayN)r   r!  r"  r  r  r  r"  r   r  r  r(  r*  r.  r=  rB  rF  rH  r#   r#   r#   r$   r  C  s8    
+

( r  c                   C      t dg dig ddS )NrK   r   ra   r   r   r&   r   rp   rT   r#   r#   r#   r$   r  S     r  c                   C   rI  )NrL   ,  d   r  rP   r&   r   rp   rT   r#   r#   r#   r$   r  X  rL  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   ra   r  rO  r   r   r&   rp   Trm   rJ  rK  )r   ra   r   r   rr   rM  rP  rO  r  rN  r   r   r   rN  r   c                 C   s$   t ||dd||d}t|| d S )NT)rt   ru   r   r   r   )r_   r  r  r   r   r{   rz   r#   r#   r$   test_merge_on_indexes^  s   0z(TestMergeOnIndexes.test_merge_on_indexesN)
r   r!  r"  r   r  r  r	   r   r5   rS  r#   r#   r#   r$   rQ  ]  sT    ""  	/rQ  rq   c                 C   s   g | ]}t d dg|ddqS )r&   r   	index_colr:   )r   r  r#   r#   r$   r    s    r  r-  r.  rT  )rq  r;   r   )startstopr;   r,   z
2018-01-02r   c                 C   s   t | j d| j dS )N[rA  )typer   r)   r<   r#   r#   r$   r>     s    )rA   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&   r   rp   
right_datar  r  rT  r}   )rY  rZ  rv   )rq   rm   rr   rz   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   rK   rL   r   r&   r   r   namesrp   r   r@  rQ   rP   r  )r~   r   r   rt   ru   z$Cannot merge a Series without a namer   )
r	   r   from_productr   r   rw   rx   r   r   r   )r~   r   r   rt   ru   nmrK   rL   r{   rz   r   r#   r#   r$   test_merge_series  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   rK   rL   r   r&   r   r   r\  rp   r   )r.  r  r@  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   
"ra  z!col1, col2, kwargs, expected_colssuffixes) _dupr0  Z0_dup)Nrd  )_x_yZ0_xZ0_yre  rf  rK   )Nrf  r  )re  Nz0.0_xrL   b_yr  )Nre  )Z_aNZ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&   rQ   r   rR   rP   r   r   Trs   rv   )rM   r~  kwargsZexpected_colsrK   rL   r{   rz   r#   r#   r$   test_merge_suffix  s   ri  zhow,expectedrR  <   F   X       )r-  r  ZB2)rO  r  r&   rN  r  rm  rn  ro  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)rO  r  r&   )rj  rk  r  r  rR  rl  r-  )re  re  )r~   r   rb  )r-  rG  rG  )r	   r   r   rw   rx   )r   r{   r  r  rz   r#   r#   r$   test_merge_duplicate_suffix	  s
   
rp  zcol1, col2, suffixes))rK   rK   )NN)rK   rK   )rc  N)r   r   )Nrc  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   rP   rQ   rR   z'columns overlap but no suffix specifiedr   Trt   ru   rb  r|  )rM   r~  rb  rK   rL   r   r#   r#   r$   test_merge_suffix_error/	  s   "rs  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 )	NrK   r   rL   rq  zPassing 'suffixes' as ar   Trr  )r	   r   r   	TypeErrorr   )rb  rK   rL   r#   r#   r$   test_merge_suffix_raises>	  s
   "ru  zcol1, col2, suffixes, msg)rK   rK   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   rq  r   Trr  r|  )rM   r~  rb  r   rK   rL   r#   r#   r$   test_merge_suffix_length_errorG	  s
   "rv  	cat_dtyper  r  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&  )r  r  r  r   r+   rm   r+   r+   rr   Trs   rm   rr   r+   )	r   r	   r   r   r   rx  r   rw   rx   )	rw  rx  Z
cat_dtypesrU   Zdata_fooZ
data_rightrV   rz   r{   r#   r#   r$   test_merge_equal_cat_dtypesV	  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&  rK   rL   r&   r   ry  r+   )rP   r   r&   rz  Trs   rP   r{  )r   r	   r   r   r   r   rw   rx   )rw  rU   rV   rz   r{   r#   r#   r$   test_merge_equal_cat_dtypes2{	  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 )
NrK   r   r&   r   intervalr(   r  r   rY  )	r	   r   r0   ZIntervalr   r   r   rw   rx   )rr   rm   rz   r{   r#   r#   r$   test_merge_on_cat_and_ext_array	  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   r  r  r  r   r   r\  r   rc  r  re  rf  r~   rb  c                       g | ]}|  qS r#   r#   r  r2  )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   rw   rx   )	lettersnumbersrq   Zframe_xZframe_yrz   Zexpected_labelsr  r{   r#   )r  r  r$   test_merge_multiindex_columns	  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   )r  r  r  )r=   r   r  )20002001Z2002)r   r   rm   r   rY  )r  r  r6   r   )r	   r0   rZ  r   rw   rx   rU   rV   rz   r{   r#   r#   r$    test_merge_datetime_upcast_dtype	  s   r  n_categoriesrR      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&   rb   ra  r   rp  rm   Tr   c                 S   s&   g | ]}|d k r|dgn|t jgqS )r   g      @)r   r5   )r  r   r#   r#   r$   r  	  s   & z9test_categorical_non_unique_monotonic.<locals>.<listcomp>r   r   )r   r   r   r	   r   rw   rx   )r  rt   rU   rV   rz   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)rK   rL   rK   re   rK   rL   r   )r   r&   r   r&   r   r   )Cat1Int1)rK   rL   re   rK   rL   re   )r   r   r   r&   r&   r&   )r  g333333?r>  r@  r  g?)CatIntFactorr  r  r  r  r  rm   r   r&   )Zaxisr}   r  Tr-  )	r   r	   r   r   r  dropr   rw   rx   )rK   rL   r{   rz   r#   r#   r$   &test_merge_join_categorical_multiindex	  sT   r  funcr   Z
merge_asof)rh  err_msg)r   rt   r   rt   )r   ru   r   ru   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&   r   rP   rQ   r   rR   r   r  zCan only pass argument "r   " OR "z" not both\.r   r	   r   r   r   getattrr0   r  rh  r  rm   rr   r   r#   r#   r$   /test_merge_join_cols_error_reporting_duplicates
     
"r  c                 C   r  )Nr&   r   rP   rQ   r   rR   r   r  zMust pass "r   r  z"\.r   r  r  r#   r#   r$   ,test_merge_join_cols_error_reporting_missing/
  r  r  rh  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&   r   rP   rQ   r   rR   r   r  zZCan only pass argument "on" OR "left_index" and "right_index", not a combination of both\.r   r~   rK   r  )r  rh  rm   rr   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   rr   Tr=   )r   rt   r   )r=   Zx_xZz_xZx_yZz_yrv   rm   rr   rz   r{   r#   r#   r$   test_merge_right_left_indexT
  s   	r  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&   r   r   rK   rL   r(   Tr   r   )r	   r   r   r'   r   rw   rx   rU   rV   r{   rz   r#   r#   r$   $test_merge_result_empty_index_and_one
  s   r  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&   r   )rK   rL   b_xr   (Passing 'suffixes' which cause duplicater   rK   r}   )rf  re  r  r	   r   r   r   r   r   r#   r#   r$   .test_merge_suffixes_produce_dup_columns_raisesq
  s   "r  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  )rK   rL   rL   r   r&   rP   r   r   rK   r}   )r&   r&   r&   r   )rK   r  r  rg  rv   r  r#   r#   r$   3test_merge_duplicate_columns_with_suffix_no_warning}
  s
   r  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&   )r   r   r   r   )rK   rL   rL   r  r   r&   rP   r   r   r  r   rK   r}   r  r   r#   r#   r$   Itest_merge_duplicate_columns_with_suffix_causing_another_duplicate_raises
  s
   "r  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&   r   rP   rQ   rK        \@r   r   ra   r&  r  r=   r   r   Tr   )r   ra   r&   r   )r&  r  rP   rQ   )r=   r   rK   r  r	   r   r   rw   rx   r  r#   r#   r$   %test_merge_string_float_column_result
  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     )r  r   rq   i  zCan only pass argumentr   T)r~   rt   r  )Zdf_1Zdf_2r#   r#   r$   /test_mergeerror_on_left_index_mismatched_dtypes
  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 )NrP   r  r  r   r-  r   )r   r   r	   r   _datarw   rx   )cirr   rm   resr{   r#   r#   r$   #test_merge_on_left_categoricalindex
  s   r  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&   r   )rj   rM   r(   rP   rQ   )rj   r~  rj   r   r   )rj   rM   r~  )rj   r~  rM   r  )r)   rm   rr   rz   r{   r#   r#   r$   test_merge_outer_with_NaN
  s(   r  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 )	NrK   r&   re   r   rp   rf   r   )r  r  r  r  r#   r#   r$    test_merge_different_index_names
  s
   r  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(   r   r  r   r   rv   r  r   rm   rr   rz   r{   r#   r#   r$   test_merge_ea
  s
   r  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(   r   r  r   r  r  r   )r	   lowerr   r   rw   rx   r  r#   r#   r$   test_merge_ea_and_non_ea
  s   r  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pyarrowrK   r&   r   r(   r  )r   importorskipr	   r   r   rw   rx   )r)   r`   rV   rz   r{   r#   r#   r$   !test_merge_arrow_and_numpy_dtypes
  s   


r  r   )r   rm   r   rr   r/   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  rR   r  r.         r   r  r  )r(  rK   r(  r;  r&   )r(  rL   r8  )r(  rK   rL   r   T)r  rm   r   rr   r   )r0   r1   r	   r   Zas_unitr   r5   Zilocr  r   rw   rx   )r/   r   valsrU   rV   r{   rz   r#   r#   r$   (test_merge_datetime_different_resolution
  s$    r  c                  C   sn   t dddgi} t ddgitjddgdgdd	}t ddgdtjgd
}| j|dgddd}t|| d S )Ncolr-  r.  rL   rO  )r-  )r  r\  )r  rq   )r  rL   Trm   r   )r	   r   r  r   r5   r   rw   rx   )r`   rV   r{   rz   r#   r#   r$   "test_merge_multiindex_single_level  s   r  c                  C   s  t dtjgt d} t dg}t dgdd}tjtdd | |}W d    n1 s.w   Y  t	|| tjtdd || }W d    n1 sPw   Y  t	||
d	 t dg}t d
gdgdd}| |}t	|| || }t	||
d	 d S )Nr  r(   r  r   r*   r   zYou are mergingr   r  r&   )r	   r   r5   r0   Z
Int64Dtyperw   r*  r  r   rx   r   r  r#   r#   r$   !test_merge_ea_int_and_float_numpy$  s"   



r  c                 C   s|   t d tdddgi| d}tdditddg| dd}|j|ddd	d
}ttddg| ddtjgd}t	|| d S )Nr  rK   rL   r(   r&   re   rp   Trm   r   r   )
r   r  r	   r   r   r   r   r5   rw   rx   )r  rm   rr   rz   r{   r#   r#   r$   test_merge_arrow_string_index;  s   
r  )r   r   )[r   r   r   r  numpyr   r   Zpandas.core.dtypes.commonr   Zpandas.core.dtypes.dtypesr   Zpandasr0   r   r   r	   r
   r   r   r   r   r   r   r   Zpandas._testingZ_testingrw   Zpandas.api.typesr  Zpandas.core.reshape.concatr   Zpandas.core.reshape.merger   r   r%   r2   r7   r  rG   rI   rJ   rW   rX   r   r  rm   rr   r  r  r  rQ  r  r  r  r[  r`  ra  ri  r5   rp  rs  ru  tuplerv  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$   <module>   sh   4
	



          T  p

  

7

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