U
    b                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZ G dd dZejdddid	d	d
gejdddgddggdd Zdd Zejdd	d	ddd	dd	ddgdd Zdd Zdd Zdd Zd d! ZdS )"    N)Index	Timedelta
merge_asofread_csvto_datetime)
MergeErrorc                   @   s<  e Zd ZdddZejdd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d.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zejj d8e!d9e"j#d:d;gd<d=gd>d?d@ Z$dAdB Z%dCdD Z&dEdF Z'dGdH Z(dIdJ Z)dKdL Z*dMdN Z+dOdP Z,dQdR Z-dSdT Z.dUdV Z/dWdX Z0dYdZ Z1d[d\ Z2d]d^ Z3d_d` Z4dadb Z5dcdd Z6dedf Z7dgdh Z8didj Z9dkdl Z:dmdn Z;ejj dodpdq drdq gdsdtgd>ej dudvdwgdxdy Z<dzd{ Z=d|d} Z>d~d Z?dd Z@dd ZAdd ZBdS )TestAsOfMergeFc                 C   sD   |ddd|}t |}|r4|jddgddjdd	}t|j|_|S )
NZreshapemergedatatimetickerlast)ZkeepTdrop)r   Zdrop_duplicatesreset_indexr   r   )selfdatapathnamededupepathx r   N/tmp/pip-unpacked-wheel-ck39h295/pandas/tests/reshape/merge/test_merge_asof.py	read_data   s    zTestAsOfMerge.read_dataT)Zautousec                 C   s\   |  |d| _| j |ddd| _|  |d| _|  |d| _|  |d| _|  |d| _d S )	Nz
trades.csvz
quotes.csvTr   asof.csvztolerance.csvzallow_exact_matches.csvz%allow_exact_matches_and_tolerance.csv)r   tradesquotesasof	toleranceallow_exact_matches!allow_exact_matches_and_tolerance)r   r   r   r   r   setup_method   s     zTestAsOfMerge.setup_methodc                 C   s   t dddgdddgd}t ddd	d
dgddd	d
dgd}t dddgdddgdd	dgd}t||dd}t|| dS )doc-string examples      
   abcr'   left_val            r'   	right_valr'   r+   r1   onNpd	DataFramer   tmassert_frame_equalr   leftrightexpectedresultr   r   r   test_examples1*   s    $zTestAsOfMerge.test_examples1c                 C   sv  t jtdddddgdddddgdddd	d
gdddddgdddddgd}t jtddddddddgddddddddgddddddddgddd d!dd"d#d$gd%ddd&d'gd}t||ddd( t||ddtd)d* t jtdddddgdddddgdddd	d
gdddddgtjdtjtjtjgtjd tjtjtjgd+ddddd&d'gd}t||ddtd,d-d.}t|| d/S )0r#   20160525 13:30:00.023z20160525 13:30:00.03820160525 13:30:00.048MSFTGOOGAAPL皙I@\(@(\@     X@K      d   )r   r   pricequantityr   r   rL   rM   columns20160525 13:30:00.03020160525 13:30:00.04120160525 13:30:00.049z20160525 13:30:00.072z20160525 13:30:00.075     @\(I@QI@(\X@gzGJ@=
ףp@{GI@=
ףpI@      J@q=
ףX@gףp=
@gp=
J@)r   r   bidaskr\   r]   r4   byZ2msr4   r_   r   )r   r   rL   rM   r\   r]   10msFr4   r_   r   r    N	r6   r7   r   r   r   npnanr8   r9   r   r   r   r=   r>   r   r   r   test_examples26   s    	


	zTestAsOfMerge.test_examples2c                 C   s   t dddgdddgd}t ddd	d
dgddd	d
dgd}t dddgdddgdd
tjgd}t||ddd}t|| dS )r#   r$   r%   r&   r'   r(   r)   r*   r,   r-   r.   r/   r0   r2   forwardr4   	directionNr6   r7   rd   re   r   r8   r9   r:   r   r   r   test_examples3   s    $zTestAsOfMerge.test_examples3c                 C   s   t dddgdddgd}t ddd	d
dgddd	d
dgd}t dddgdddgdd
dgd}t||ddd}t|| dS )r#   r$   r%   r&   r'   r(   r)   r*   r,   r-   r.   r/   r0   r2   nearestri   Nr5   r:   r   r   r   test_examples4   s    $zTestAsOfMerge.test_examples4c                 C   s2   | j }| j}| j}t||ddd}t|| d S )Nr   r   r^   r   r   r   r   r8   r9   r   r=   r   r   r>   r   r   r   
test_basic   s
    zTestAsOfMerge.test_basicc                 C   sd   | j }| j }|jd|_| j }|jd|_|jd|_t||ddd}t|| d S )Ncategoryr   r   r^   )	r   r   copyr   astyper   r   r8   r9   rp   r   r   r   test_basic_categorical   s    

z$TestAsOfMerge.test_basic_categoricalc                 C   sL   | j }| jd}| j}t||dddd}|j|_||j }t|| d S )Nr   Tr   )
left_indexright_onr_   )	r   r   	set_indexr   r   indexrO   r8   r9   rp   r   r   r   test_basic_left_index   s        
z#TestAsOfMerge.test_basic_left_indexc                 C   s:   | j }| j}| jd}t||dddd}t|| d S )Nr   Tr   )left_onright_indexr_   )r   r   r   rx   r   r8   r9   rp   r   r   r   test_basic_right_index   s        z$TestAsOfMerge.test_basic_right_indexc                 C   sF   | j d}| jd}| jd}t||dddd}t|| d S )Nr   Tr   rv   r|   r_   )r   rx   r   r   r   r8   r9   rp   r   r   r   !test_basic_left_index_right_index   s        z/TestAsOfMerge.test_basic_left_index_right_indexc              	   C   s   | j ddg}| jd}tjtdd t||ddd W 5 Q R X | j d}| jddg}tjtdd t||ddd W 5 Q R X d S )	Nr   rL   zleft can only have one indexmatchTrv   r|   r\   zright can only have one indexr   rx   r   pytestraisesr   r   r   r   r   r   r   r   test_multi_index   s    zTestAsOfMerge.test_multi_indexc              	   C   s   | j d}| jd}d}tjt|d t||dddd W 5 Q R X | j d}| jd}d}tjt|d t||dddd	 W 5 Q R X d S )
Nr   z:Can only pass argument "left_on" OR "left_index" not both.r   rL   T)r{   rv   r|   z<Can only pass argument "right_on" OR "right_index" not both.r\   )rw   rv   r|   r   r   r   r   msgr   r   r   test_on_and_index   s,            zTestAsOfMerge.test_on_and_indexc                 C   s4   | j }| j}| j}t||dddd}t|| d S )Nr   r   )r4   left_byright_byro   rp   r   r   r   test_basic_left_by_right_by  s        z)TestAsOfMerge.test_basic_left_by_right_byc                 C   sZ   | j }| j}| j}||jdk }t||ddd}tj|j|jdkddgf< t	|| d S )NrB   r   r   r^   r\   r]   )
r   r   r   r   r   rd   re   locr8   r9   )r   r=   r   r   qr>   r   r   r   test_missing_right_by  s    z#TestAsOfMerge.test_missing_right_byc                 C   s`  t jtdddddgdddddgdd	d	d
d	gdddddgdddddgddddddgd}t jtddddddgddddddgd
d	ddd	dgddddd d!gdd"d#d$d%d&gd'dddd(d)gd}t jtdddddgdddddgdd	d	d
d	gdddddgdddddgtjdd dtjgtjd"d%dtjgd*dddddd(d)gd}t||dddgd+}t|| d S ),Nr@   20160525 13:30:00.046rA   20160525 13:30:00.050rB   rC   rD   ARCANSDQBATSrE   rF   rG   rH   rI   rJ   rK   r   r   exchrL   rM   r   r   r   rL   rM   rN   rP   rQ   20160525 13:30:00.045rR   Gz@rT   rU   rS   rV   rX   rY   rZ   rW   r[   r   r   r   r\   r]   r\   r]   r   r   r   rL   rM   r\   r]   r^   r6   r7   r   rd   re   r   r8   r9   rf   r   r   r   test_multiby  sj    	
	zTestAsOfMerge.test_multibyc                 C   s`  t jtdddddgdddddgdd	d	d
d	gdddddgdddddgddddddgd}t jtddddddgddddddgd
d	ddd	dgddddd d!gdd"d#d$d%d&gd'dddd(d)gd}t jtdddddgdddddgdd	d	d
d	gdddddgdddddgtjdd dtjgtjd"d%dtjgd*dddddd(d)gd}t||dddgd+}t|| d S ),Nr@   r   rA   r   r   r$   r,   r   r   r   rE   rF   rG   rH   rI   rJ   rK   r   r   r   r   rL   rM   rN   rP   rQ   r   rR   r   rT   rU   rS   rV   rX   rY   rZ   rW   r[   r   r\   r]   r   r^   r   rf   r   r   r    test_multiby_heterogeneous_typesY  sj    	
	z.TestAsOfMerge.test_multiby_heterogeneous_typesc              	   C   sL  t jtdddgtdddgtdddgtdddggddd	gd
d}t jtddddgtddddgtddddgtddddggddd	dgd
d}t jtddddgtddddgtddddgtddddggddd	dgd
d}t||dddd	gd}t|| tjt	dd  t||dddd	gdgd W 5 Q R X d S )NZ20160602r$   r'   r,   Z20160603r(   r   Zk1Zk2rN   Z20160502      ?       @Z20160503g      @g      @valueTr~   z(left_by and right_by must be same lengthr   )rv   r|   r   r   )
r6   r7   r   rx   r   r8   r9   r   r   r   r:   r   r   r   test_multiby_indexed  sd    




     z"TestAsOfMerge.test_multiby_indexedc                 C   sH   |  |d}|  |d}| j |ddd}t||ddd}t|| d S )	Nz	asof2.csvztrades2.csvzquotes2.csvTr   r   r   r^   )r   r   r8   r9   )r   r   r=   r   r   r>   r   r   r   test_basic2  s
    zTestAsOfMerge.test_basic2c                 C   sD   dd }|| j }|| j}|| j}t||dd}t|| d S )Nc                 S   s    | | j dk jdddjddS )NrB   r   r$   )ZaxisTr   )r   r   r   r   r   r   r   <lambda>  s
    z0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>r   r3   ro   )r   fr=   r   r   r>   r   r   r   test_basic_no_by  s    


zTestAsOfMerge.test_basic_no_byc              	   C   s   | j }| j}d}tjt|d t||dddd W 5 Q R X tjtdd t||ddgdd W 5 Q R X tjtdd t||dd	 W 5 Q R X d S )
Nz6incompatible merge keys \[1\] .* must be the same typer   r   r\   r   )r{   rw   r_   zcan only asof on a key for leftr^   )r_   r   r   r   r   r   r   r   r   r   r   test_valid_join_keys  s    z"TestAsOfMerge.test_valid_join_keysc                 C   sR   t | j| jgddgjdd}t| j|ddd}| |d}t	|| d S )Nr   r   Tr   r^   r   )
r6   concatr   sort_valuesr   r   r   r   r8   r9   )r   r   r   r>   r=   r   r   r   test_with_duplicates  s    z"TestAsOfMerge.test_with_duplicatesc                 C   sz   t dddgdddgd}t dddgdddgd}t||dd}t dddgdddgdddgd}t|| d S )	Nr$   r-   r,   )keyr+   )r   r1   r   r3   )r   r+   r1   r5   r   df1df2r>   r=   r   r   r   test_with_duplicates_no_on  s    z(TestAsOfMerge.test_with_duplicates_no_onc              	   C   s@   | j }| j}d}tjt|d t||dddd W 5 Q R X d S )Nz/allow_exact_matches must be boolean, passed foor   r   r   foor4   r_   r    r   r   r   r   r   test_valid_allow_exact_matches	  s        z,TestAsOfMerge.test_valid_allow_exact_matchesc              	   C   s  | j }| j}t||ddtdd t| | dddd d}tjt|d t||dddd W 5 Q R X tjt|d  t| | ddd	d W 5 Q R X d
}tjt|d t||ddtd d W 5 Q R X tjt|d  t| | dddd W 5 Q R X d S )Nr   r   Z1sr`   ry   r$   z6incompatible tolerance .*, must be compat with type .*r   r   ztolerance must be positive)r   r   r   r   r   r   r   r   r   r   r   r   test_valid_tolerance  sL        z"TestAsOfMerge.test_valid_tolerancec              	   C   s   | j jddd}| jjddd}|jjr,t|jjr8ttjtdd t	||ddd W 5 Q R X | j d}|jjszt|jjrttjtdd t	||ddd W 5 Q R X | jd}|jjst|jjstt	|| jddd d S )	Nr   F)Z	ascendingzleft keys must be sortedr   r   r^   zright keys must be sorted)
r   r   r   r   Zis_monotonicAssertionErrorr   r   
ValueErrorr   r   r   r   r   test_non_sortedG  s    zTestAsOfMerge.test_non_sortedr   1dayr$   )daysr   zdatetime.timedelta)idsc                 C   s4   | j }| j}t||dd|d}| j}t|| d S )Nr   r   r`   )r   r   r   r   r8   r9   )r   r   r   r   r>   r=   r   r   r   test_tolerance_  s
    zTestAsOfMerge.test_tolerancec                 C   s   t dddgdddgd}t ddd	d
dgddd	d
dgd}t dddgdddgdtjdgd}t||dddd}t|| d S )Nr$   r%   r&   r'   r(   r)   r*   r,   r-   r/      r0   r2   rh   r4   rj   r   rk   r:   r   r   r   test_tolerance_forwardm  s    $z$TestAsOfMerge.test_tolerance_forwardc                 C   s   t dddgdddgd}t ddd	d
dgddd	d
dgd}t dddgdddgdtjdgd}t||dddd}t|| d S )Nr$   r%   r&   r'   r(   r)   r*   r,   r-   r/   r   r0   r2   rm   r   rk   r:   r   r   r   test_tolerance_nearestz  s    $z$TestAsOfMerge.test_tolerance_nearestc              	   C   s   t t jtdddtddtdd}t t jtdddtddtdd	}t	||d
t
dd}t t jtdddtddtdtdd}t|| d S )Nz
2016-01-02Dr%   UTC)startfreqperiodstz)datevalue1z
2016-01-01ZABCDE)r   value2r   z1 dayr4   r   ZBCDEE)r   r   r   )r6   r7   
date_ranger   pytztimezonerd   Zarangelistr   r   r8   r9   r   r;   r<   r>   r=   r   r   r   test_tolerance_tz  sB    zTestAsOfMerge.test_tolerance_tzc                 C   s   t dddgdddgd}t dd	d
ddgdd	d
ddgd}t dddgdddgdd
tjgd}t||dddd}t|| d S )N皙?g      @g%@r'   r(   r)   r*   r         @gffffff
@g      @g      '@r0   r$   r2   rm         ?r   rk   r:   r   r   r   test_tolerance_float  s    
z"TestAsOfMerge.test_tolerance_floatc                 C   sL   | j d}| jd}| jd}t||dddtdd}t|| d S )Nr   Tr   r   )rv   r|   r_   r   )r   rx   r   r   r   r   r8   r9   rp   r   r   r   test_index_tolerance  s    z"TestAsOfMerge.test_index_tolerancec                 C   s,   t | j| jdddd}| j}t|| d S )Nr   r   Fr   )r   r   r   r    r8   r9   r   r>   r=   r   r   r   test_allow_exact_matches  s        z&TestAsOfMerge.test_allow_exact_matchesc                 C   s   t dddgdddgd}t ddd	d
dgddd	d
dgd}t dddgdddgdd
dgd}t||dddd}t|| d S )Nr$   r%   r&   r'   r(   r)   r*   r,   r-   r/   r   r0   r2   rh   Fr4   rj   r    r5   r:   r   r   r    test_allow_exact_matches_forward  s    $    z.TestAsOfMerge.test_allow_exact_matches_forwardc                 C   s   t dddgdddgd}t ddd	d
dgddd	d
dgd}t dddgdddgdd	dgd}t||dddd}t|| d S )Nr$   r%   r&   r'   r(   r)   r*   r,   r-   r/   r   r0   r2   rm   Fr   r5   r:   r   r   r    test_allow_exact_matches_nearest  s    $    z.TestAsOfMerge.test_allow_exact_matches_nearestc                 C   s2   t | j| jddtddd}| j}t|| d S )Nr   r   Z100msFrb   )r   r   r   r   r!   r8   r9   r   r   r   r   &test_allow_exact_matches_and_tolerance  s    z4TestAsOfMerge.test_allow_exact_matches_and_tolerancec                 C   s   t tdgdgd}t tddgddgd}t||dd	}t tdgdgdgd
}t|| t||ddd}t tdgdgdgd
}t|| t||ddtdd}t tdgdgtjgd
}t|| d S )N2016-07-15 13:30:00.030bobr   username2016-07-15 13:30:00.000r$   r,   r   versionr   r3   r   r   r   F)r4   r    ra   r4   r    r   )	r6   r7   r   r   r8   r9   r   rd   re   r   r   r   r   'test_allow_exact_matches_and_tolerance2  sP    	z5TestAsOfMerge.test_allow_exact_matches_and_tolerance2c                 C   s   t tddgddgd}t tddgddgd}t||d	d
tdd}t tddgddgtjtjgd}t|| d S )Nr   r   Zcharlier   r   r$   r,   r   r   Fra   r   r   rc   r   r   r   r   'test_allow_exact_matches_and_tolerance36  s<    	
	z5TestAsOfMerge.test_allow_exact_matches_and_tolerance3c                 C   s   t dddgdddgd}t ddd	d
dgddd	d
dgd}t dddgdddgtjd
dgd}t||ddddd}t|| d S )Nr$   r%   r&   r'   r(   r)   r*   r-      r.   r   r0   r2   rh   Fr4   rj   r    r   rk   r:   r   r   r   .test_allow_exact_matches_and_tolerance_forward[  s    $z<TestAsOfMerge.test_allow_exact_matches_and_tolerance_forwardc                 C   s   t dddgdddgd}t ddd	d
dgddd	ddgd}t dddgdddgtjd	dgd}t||ddddd}t|| d S )Nr$   r%   r&   r'   r(   r)   r*   r-   r   r.   r   r/   r0   r2   rm   Fr   rk   r:   r   r   r   .test_allow_exact_matches_and_tolerance_nearesto  s    $z<TestAsOfMerge.test_allow_exact_matches_and_tolerance_nearestc              
   C   s   t dddddgdddddgd	d
dddgd}t dddddgdddddgdddddgd}t dddddgdddddgd	d
dddgdtjdddgd}t||d	d
dd}t|| d S )Nr$   r%   r&         XYZr'   r(   r)   der'   r(   r+   r.   r      r'   r(   r1   r'   r(   r+   r1   rh   r4   r_   rj   rk   r:   r   r   r   test_forward_by  s*    	zTestAsOfMerge.test_forward_byc              
   C   s   t dddddgdddddgd	d
dddgd}t dddddgdddddgdddddgd}t dddddgdddddgd	d
dddgdddddgd}t||d	d
dd}t|| d S )Nr$   r%   r&   r   r   r   r   r   r'   r(   r)   r   r   r   r.   r   r   r   r   rm   r   r5   r:   r   r   r   test_nearest_by  s*    	zTestAsOfMerge.test_nearest_byc                 C   s   t jtdddddgdddddgd	d
dddgddddgd}t jtddddddddgddddddddgddddddddgd ddd!gd}t||ddd"}t jtdddddgdddddgd	d
dddgdddddgd#dddd!gd}t|| d S )$Nz20160525 13:30:00.020rP   z20160525 13:30:00.040r   z20160525 13:30:00.060r$   r,   r-   r   g333333?g?gffffff?g      ?)r   r   r   r   r   r   rN   z20160525 13:30:00.015z20160525 13:30:00.025z20160525 13:30:00.035z20160525 13:30:00.055z20160525 13:30:00.065g @g@gffffff@g333333@r   g@g@gffffff@)r   r   r   r   r^   )r   r   r   r   )r6   r7   r   r   r8   r9   r   r   r   r   test_by_int  s`    		
zTestAsOfMerge.test_by_intc              
   C   s   t jdddddddgtdd	d
dgd}t jdddgdddgdddgd}|djdd}t||dd}t jtddddddddgdddddddgdd
ddgd}t|| d S )Ng
ףp=
@gHPsb?gzG!9@g@u@gHz>@gC@gq?ABCDEFG)rL   symbolr   rL   rN           r         Y@-C6?{Gz?皙?)rL   mpvr  Tr   r3   ZBGACEDF)r   rL   r  r6   r7   r   r   r   r   r8   r9   r   r   r   r   test_on_float  s(    	zTestAsOfMerge.test_on_floatc              	   C   s   t |j}tjdddddddgtdd	d
dgd}||j|_tjddddgtddddgd}||j|_|djdd}t	||dd}tjtddddddddgtddd
ddgd}||j|_t
|| d S )Nr%   r,      rK   N   x   O   r   )r   r   r   r   rN   r   P   }   xyzw)r   r>   r>   Tr   r3   BACEGDFZxxxxxyz)r   r   r>   )rd   dtypetyper6   r7   r   r   r   r   r   r8   r9   r   Zany_real_numpy_dtyper  r   r   r>   r=   r   r   r   test_on_specialized_type  s,    z&TestAsOfMerge.test_on_specialized_typec                 C   s$  t |j}tjdddddddgddd	dd	ddgtd
ddddgd}||j|_tjddddgdddd	gtdddddgd}||j|_|djdd}t	||ddd}tjtdddd	d	dddgdddddddgt j
dt j
t j
t j
ddgdddddgd}||j|_t|| d S )Nr%   r,   r  rK   r  r  r  r$   r-   r   )r   r   r   r   r   r   rN   r   r	  r
  r  )r   r   r>   r>   Tr   r^   r  r   y)r   r   r   r>   )rd   r  r  r6   r7   r   r   r   r   r   re   r8   r9   r  r   r   r   test_on_specialized_type_by_int9  s4    
	z-TestAsOfMerge.test_on_specialized_type_by_intc                 C   s4  t jtddddddddddg	ddddd	d
dddg	ddddgd}t jdddddddddg	dddddddddg	dddddddddg	ddddgd}|djdd }|djdd }t||ddd!}t jtddddddddddg	dddd
dd	dddg	dddddddddg	d"ddddgd}t|| d S )#NZ	AAABBBCCCr$   r,   r-   gGz
@gׁsF
@g
@g)\()@gGz.)@g      )@gfffffw@g33333w@g     w@)r   r   rL   r   r   rL   rN   r   r   r         @g     @@r   r   r  g?g      ?)r   rL   r  r  Tr   r^   )r   r   rL   r  r  r   r   r   r   test_on_float_by_int]  sX    	
z"TestAsOfMerge.test_on_float_by_intc              	   C   sp   d}t dddgdddgd}t dd	d
ddgdd	d
ddgd}tjt|d t||dd W 5 Q R X d S )N@Incompatible merge dtype, .*, both sides must have numeric dtyper$   r%   r&   r'   r(   r)   r+   r'   r,   r-   r.   r/   r1   r'   r   r3   r6   r7   r   r   r   r   r   r   r;   r<   r   r   r    test_merge_datatype_error_raises  s
    $z.TestAsOfMerge.test_merge_datatype_error_raisesc              
   C   s|   d}t dddgt dddgd}t dd	d
ddgt dddddgd}tjt|d t||dd W 5 Q R X d S )NzHincompatible merge keys \[0\] .* both sides category, but not equal onesr$   r%   r&   r'   r(   r)   r  r,   r-   r.   r/   r   r  r   r3   )r6   r7   Categoricalr   r   r   r   r  r   r   r   ,test_merge_datatype_categorical_error_raises  s    z:TestAsOfMerge.test_merge_datatype_categorical_error_raisesc                 C   s`   t dgdgt dgd}t||dddgd}t dgdgt dgd}t|| d S )Nr   )r   r  zr   r  r  r^   )r6   r7   r  r   r8   r9   )r   dfr>   r=   r   r   r   :test_merge_groupby_multiple_column_with_categorical_column  s    zHTestAsOfMerge.test_merge_groupby_multiple_column_with_categorical_columnfuncc                 C   s   | S Nr   r   r   r   r   r         zTestAsOfMerge.<lambda>c                 C   s   t | S r!  )r   r   r   r   r   r     r"  numericdatetimesider;   r<   c              	   C   s   d| d}|ddt jg}|dddg}t|dddgd	}t|d
ddgd}tjt|d, |dkr~t||dd nt||dd W 5 Q R X d S )Nz"Merge keys contain null values on z sider   r  g      $@r'   r(   r)   r*   r$   r.   r   r0   r   r;   r3   )rd   re   r6   r7   r   r   r   r   )r   r   r%  r   ZnullsZ	non_nullsZdf_nullr  r   r   r   test_merge_on_nans  s    z TestAsOfMerge.test_merge_on_nansc                 C   s   t t dgddgdgd}t t dgddgdgd}t||dd	d
}t jt jddddddggdd	ddgd}t|| d S )N
2018-01-01r   r,   r'   )by_colon_colvaluesr$   r(   r(  r)  r_   r4   r   Zvalues_xZvalues_yrN   )r6   r7   DatetimeIndextz_localizer   	Timestampr8   r9   r   r   r   r   test_merge_by_col_tz_aware  s$    
z(TestAsOfMerge.test_merge_by_col_tz_awarec                 C   s   t t dgddgdgdgd}t t dgddgdgd	gd}t||d
dgdd}t jt jddddddggd
dddgd}tjtjgt	d|d< t
|| d S )Nr'  r   ZHELLOr,   r'   )by_col1by_col2r)  r   ZWORLDr$   r(   r1  r2  r)  r+  r,  Zvalue_xrN   )r  Zvalue_y)r6   r7   r-  r.  r   r/  rd   arrayre   objectr8   r9   r   r   r   r   test_by_mixed_tz_aware  s*    
z$TestAsOfMerge.test_by_mixed_tz_awarec                 C   s  t jttddddddgdddd	d
dgddgd}t |d d|d< t jttdd	ddddgdddd	d
dgddgd}t |d d|d< t jttddddddgdddd	d
dgdtjdd
tjtjgdddgd}t |d d|d< t||dtddd}t	
|| d S )Nr   r%   r&   r      r  r$   r,   r-   r   r   r;   rN   ms	   r      r<   Z1msrm   )r4   r   rj   )r6   r7   r   zipZto_timedeltard   re   r   r   r8   r9   r:   r   r   r    test_timedelta_tolerance_nearest  s:    $$    z.TestAsOfMerge.test_timedelta_tolerance_nearestc                 C   s   t dddgdddgd}t dd	d
gdddgd}|d ||d< |d ||d< t dddgdddgtjddgd}|d ||d< t||ddd}t|| d S )Nr   r&   r6  r$   r,   r-   r*   r%   r   r  r0   r'   r   r   r2   r   )r6   r7   rt   rd   re   r   r8   r9   )r   Zany_int_numpy_dtyper;   r<   r=   r>   r   r   r   test_int_type_tolerance   s    z%TestAsOfMerge.test_int_type_tolerancec                 C   s  t jddddd}t jdddd	gd
g|dd  d}t |dgd dg d}t||ddgd}t jdddd	g|dd  dgd dg dt jdddddd}t|| t||ddgd}t j|dgd dg tjdddd	gdtdddddgd}t|| d S )Nz
2019-10-01Z30minr%   r   )r   r   r   g?g?gffffff?g333333?xyzr$   )rO   ry   gGz@r   gQ@)	from_dateabcTr>  )r;   r<   rv   rw   r-   )r=  r>  r?  z2019-10-01 00:30:00ry   )r;   r<   r|   r{   )r>  r?  r=  r   r,   )	r6   r   r7   r   r8   r9   rd   re   r   )r   ry   r;   r<   r>   r=   r   r   r   test_merge_index_column_tz0  sH    "   

   
   z(TestAsOfMerge.test_merge_index_column_tzc                 C   s   t jddddtdd }t jddd}t jd	d
it |d}t jddit |d}t jd
ddt |d}t||ddtddd}t|| d S )Nz1/1/2020z	1/20/2020Z2D)r   endr   g?)secondsz2/1/2020)r   rB  val1r   r@  val2bar)rD  rE  Tr   )rv   r|   r   )r6   r   r   r7   r-  r   r8   r9   )r   Zdr1Zdr2r   r   r=   r>   r   r   r   %test_left_index_right_index_toleranceQ  s$     z3TestAsOfMerge.test_left_index_right_index_toleranceN)F)C__name__
__module____qualname__r   r   Zfixturer"   r?   rg   rl   rn   rq   ru   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r$  	timedeltar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r&  r0  r5  r;  r<  rA  rG  r   r   r   r   r      s   



T	AA2	
2
	(2%=$9	  $!r   kwargsr4   r   Tr   r
   z2019-06-01 00:09:12z2019-06-01 00:10:29r   c              	   C   sP   t jd|i|d}t jd|i|d}tjtdd t||f|  W 5 Q R X d S )Nr   r@  r  r   r  )rN  r
   r;   r<   r   r   r   #test_merge_asof_non_numerical_dtypeh  s    	rO  c               	   C   sj   t dddgdddgd} t dddgdd	d
gd}tjtdd t| |ddddd W 5 Q R X d S )NZ12Z13Z15r'   r(   r)   )r'   	left_val1r   r   r   r*   r  r   rP  r+   )r{   rw   r   r   r  r;   r<   r   r   r   *test_merge_asof_non_numerical_dtype_objectz  s    rR  )r|   rv   	left_time)r{   r|   r<   )rv   rw   c                 C   s   t dddgdd}tjdddgdd	dgd
|d}tjddddddgidddddgd}t||f| }tjdddgdd	dgdddgd|d}t|| d S )Nr$   r%   r&   testr   r'   r(   r)   r   )r;   rS  r@  r<   r,   r-   r.   r/   )r;   rS  r<   )r   r6   r7   r   r8   r9   )rN  ry   r;   r<   r>   r=   r   r   r   test_merge_asof_index_behavior  s    
 &rV  c                  C   s   t jddddgitdddgdd	d
} t jddddgitdddgdd	d
}t| |ddd}t dddgdddgdddgd}t|| d S )Nr(   r&   r   r   r$   r,   r-   r'   rU  r@  r)   r6        r   r{   rw   r'   r(   r)   )r6   r7   r   r   r8   r9   r;   r<   r>   r=   r   r   r   &test_merge_asof_numeri_column_in_index  s
    &&$r\  c                  C   s   t jddddgit jjdddgddd	ggdd
gdd} t jd	dddgit jjdddgddd
ggddgdd}t| |ddd}t dddgdddgdddgd}t|| d S )Nr(   r&   r   r   r$   r,   r-   r'   r)   r  )namesr@  r6  rW  rX  r   r  rY  rZ  )r6   r7   Z
MultiIndexZfrom_arraysr   r8   r9   r[  r   r   r   +test_merge_asof_numeri_column_in_multiindex  s    ""$r^  c               	   C   s   t jddddgitdddgdd	d
} t jddddgitdddgdd	d
}tjtdd t| |ddd W 5 Q R X |  ddg} | ddg}tjtdd t| |ddd W 5 Q R X d S )Nr(   r&   r   r   123r'   rU  r@  r)   r6  rW  rX  mnor  r   rY  )	r6   r7   r   r   r   r   r   r   rx   rQ  r   r   r   3test_merge_asof_numeri_column_in_index_object_dtype  s    &&re  c                  C   s   t ddgt dt dgd} t jt dddd	}t d
dddgi}t|| |dddd}t dddgtjddg|d}t|| t| |d|ddd}t ddgt dt dgddgd}t|| d S )Nr,   r.   z2021/01/01 00:37z2021/01/01 01:40)r'   tsz2021/01/01 00:00r-   Z1h)r   r   r   r(   r      r/   rf  FZbackward)r{   rw   r    rj   )r(   r'   rf  )r'   rf  r(   )	r6   r7   r/  r   r   rd   re   r8   r9   )r<   Zts_merger;   r>   r=   r   r   r   test_merge_asof_array_as_on  sH       rh  )r$  Znumpyrd   r   r   Zpandasr6   r   r   r   r   r   Zpandas._testingZ_testingr8   Zpandas.core.reshape.merger   r   rK  rL  rO  rR  rV  r\  r^  re  rh  r   r   r   r   <module>   sP             _ 

