U
    NZf                     @   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 ejddddgdd	d
 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)d* ZdS )+    N)Index	Timedelta
merge_asofread_csvto_datetime)
MergeErrorsmsusns)paramsc                 C   s   | j S )z-
    Resolution for datetimelike dtypes.
    )param)request r   N/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/reshape/merge/test_merge_asof.pyunit   s    r   c                   @   s  e Zd ZdddZejdd Zejdd Zejdd	 Zejd
d Z	ejdd Z
ejdd Z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d8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%ej&j'dDe(dEe)j*dFdGgdHdIgdJdKdL Z+dMdN Z,dOdP Z-dQdR Z.dSdT Z/dUdV Z0dWdX Z1dYdZ Z2d[d\ Z3d]d^ Z4d_d` Z5dadb Z6dcdd Z7dedf Z8dgdh Z9didj Z:dkdl Z;dmdn Z<dodp Z=dqdr Z>dsdt Z?dudv Z@dwdx ZAdydz ZBej&j'd{d|d} d~d} gddgdJej&'dddgdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdS )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xr   r   r   	read_data   s    zTestAsOfMerge.read_datac                 C   s   |  |dS )Nz
trades.csvr!   r   r   r   r   r   trades&   s    zTestAsOfMerge.tradesc                 C   s   | j |dddS )Nz
quotes.csvTr   r"   r#   r   r   r   quotes*   s    zTestAsOfMerge.quotesc                 C   s   |  |dS )Nasof.csvr"   r#   r   r   r   asof.   s    zTestAsOfMerge.asofc                 C   s   |  |dS )Nztolerance.csvr"   r#   r   r   r   	tolerance2   s    zTestAsOfMerge.tolerancec                 C   s   |  |dS )Nzallow_exact_matches.csvr"   r#   r   r   r   allow_exact_matches6   s    z!TestAsOfMerge.allow_exact_matchesc                 C   s   |  |dS )Nz%allow_exact_matches_and_tolerance.csvr"   r#   r   r   r   !allow_exact_matches_and_tolerance:   s    z/TestAsOfMerge.allow_exact_matches_and_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d	dgd}t||dd}t|| dS )doc-string examples      
   abcr0   left_val            r0   	right_valr0   r4   r:   onNpd	DataFramer   tmassert_frame_equalr   leftrightexpectedresultr   r   r   test_examples1>   s    $zTestAsOfMerge.test_examples1c                 C   s  |dkrt d tjtdddddgd| d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
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	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d0d1d2}t
|| d3S )4r,   r   zNThis test is invalid for unit='s' because that would round the trades['time']]20160525 13:30:00.023z20160525 13:30:00.03820160525 13:30:00.048zM8[]MSFTGOOGAAPL皙I@\(@(\@     X@K      d   )r   r   pricequantityr   r   rV   rW   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askrf   rg   r=   byZ2msr=   ri   r)   )r   r   rV   rW   rf   rg   10msFr=   ri   r)   r*   N)pytestskipr?   r@   r   astyper   r   npnanrA   rB   )r   r   r$   r&   rF   rG   r   r   r   test_examples2J   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/   r0   r1   r2   r3   r5   r6   r7   r8   r9   r;   forwardr=   	directionNr?   r@   rp   rq   r   rA   rB   rC   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/   r0   r1   r2   r3   r5   r6   r7   r8   r9   r;   nearestrt   Nr>   rC   r   r   r   test_examples4   s    $zTestAsOfMerge.test_examples4c                 C   s$   |}t ||ddd}t|| d S )Nr   r   rh   r   rA   rB   r   r$   r(   r&   rF   rG   r   r   r   
test_basic   s    zTestAsOfMerge.test_basicc                 C   sN   |}|j d|_ |j d|_ |j d|_ t||ddd}t|| d S )Ncategoryr   r   rh   )r   ro   r   rA   rB   r{   r   r   r   test_basic_categorical   s    z$TestAsOfMerge.test_basic_categoricalc                 C   sB   |}| d}t||dddd}|j|_||j }t|| d S )Nr   Tr   )
left_indexright_onri   )	set_indexr   indexrY   rA   rB   r{   r   r   r   test_basic_left_index   s    
    
z#TestAsOfMerge.test_basic_left_indexc                 C   s0   |}| d}t||dddd}t|| d S )Nr   Tr   )left_onright_indexri   r   r   rA   rB   r{   r   r   r   test_basic_right_index   s    
    z$TestAsOfMerge.test_basic_right_indexc                 C   s@   | d}| d}| d}t||dddd}t|| d S )Nr   Tr   r   r   ri   r   r{   r   r   r   !test_basic_left_index_right_index   s    


    z/TestAsOfMerge.test_basic_left_index_right_indexc              	   C   sF   | ddg}| d}tjtdd t||ddd W 5 Q R X d S )Nr   rV   zleft can only have one indexmatchTr   r   r   rm   raisesr   r   r   r$   r&   r   r   r   test_multi_index_left   s    
z#TestAsOfMerge.test_multi_index_leftc              	   C   sF   | d}| ddg}tjtdd t||ddd W 5 Q R X d S )Nr   rf   zright can only have one indexr   Tr   r   r   r   r   r   test_multi_index_right   s    
z$TestAsOfMerge.test_multi_index_rightc              	   C   sH   | d}| 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   rV   T)r   r   r   r   r   r$   r&   msgr   r   r   test_on_and_index_left_on   s    

    z'TestAsOfMerge.test_on_and_index_left_onc              	   C   sH   | d}| d}d}tjt|d t||dddd W 5 Q R X d S )Nr   z<Can only pass argument "right_on" OR "right_index" not both.r   rf   T)r   r   r   r   r   r   r   r   test_on_and_index_right_on  s    

    z(TestAsOfMerge.test_on_and_index_right_onc                 C   s&   |}t ||dddd}t|| d S )Nr   r   )r=   left_byright_byrz   r{   r   r   r   test_basic_left_by_right_by  s        z)TestAsOfMerge.test_basic_left_by_right_byc                 C   sL   |}||j dk }t||ddd}tj|j|j dkddgf< t|| d S )NrL   r   r   rh   rf   rg   )r   r   rp   rq   locrA   rB   )r   r$   r(   r&   rF   qrG   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 ),NrI   20160525 13:30:00.046rJ   20160525 13:30:00.050rL   rM   rN   ARCANSDQBATSrO   rP   rQ   rR   rS   rT   rU   r   r   exchrV   rW   r   r   r   rV   rW   rX   rZ   r[   20160525 13:30:00.045r\   Gz@r^   r_   r]   r`   rb   rc   rd   ra   re   r   r   r   rf   rg   rf   rg   r   r   r   rV   rW   rf   rg   rh   r?   r@   r   rp   rq   r   rA   rB   r   r$   r&   rF   rG   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 ),NrI   r   rJ   r   r   r-   r5   r   r   r   rO   rP   rQ   rR   rS   rT   rU   r   r   r   r   rV   rW   rX   rZ   r[   r   r\   r   r^   r_   r]   r`   rb   rc   rd   ra   re   r   rf   rg   r   rh   r   r   r   r   r    test_multiby_heterogeneous_typesb  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-   r0   r5   Z20160603r1   r   Zk1Zk2rX   Z20160502      ?       @Z20160503g      @g      @valueTr   z(left_by and right_by must be same lengthr   )r   r   r   r   )
r?   r@   r   r   r   rA   rB   rm   r   r   rC   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   rh   )r!   r   rA   rB   )r   r   rF   r$   r&   rG   r   r   r   test_basic2  s
    zTestAsOfMerge.test_basic2c                 C   s>   dd }||}||}||}t ||dd}t|| d S )Nc                 S   s    | | j dk jdddjddS )NrL   r   r-   )ZaxisTr   )r   r   r   r    r   r   r   <lambda>  s
    z0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>r   r<   rz   )r   r$   r(   r&   frF   rG   r   r   r   test_basic_no_by  s    zTestAsOfMerge.test_basic_no_byc              	   C   s   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   rf   r   )r   r   ri   zcan only asof on a key for leftrh   )ri   rm   r   r   r   r   r   r   r   test_valid_join_keys  s    z"TestAsOfMerge.test_valid_join_keysc                 C   sL   t ||gddgjdd}t||ddd}| |d}t|| d S )Nr   r   Tr   rh   r'   )r?   concatsort_valuesr   r   r!   rA   rB   )r   r   r$   r&   r   rG   rF   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-   r6   r5   )keyr4   )r   r:   r   r<   )r   r4   r:   r>   r   df1df2rG   rF   r   r   r   test_with_duplicates_no_on  s    z(TestAsOfMerge.test_with_duplicates_no_onc              	   C   s4   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r=   ri   r*   r   r   r   r   r   test_valid_allow_exact_matches  s        z,TestAsOfMerge.test_valid_allow_exact_matchesc              	   C   s  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1srj   r   r-   z6incompatible tolerance .*, must be compat with type .*r   r   ztolerance must be positive)r   r   r   rm   r   r   r   r   r   r   test_valid_tolerance  sH        z"TestAsOfMerge.test_valid_tolerancec              	   C   s   |j ddd}|j ddd}|jjr(t|jjr4ttjtdd t||ddd W 5 Q R X | d}|jjstt|jjrttjtdd t||ddd W 5 Q R X | d}|jjst|jjstt||ddd d S )	Nr   F)Z	ascendingzleft keys must be sortedr   r   rh   zright keys must be sorted)r   r   Zis_monotonic_increasingAssertionErrorrm   r   
ValueErrorr   r   r   r   r   test_non_sortedA  s    

zTestAsOfMerge.test_non_sortedtolerance_ts1dayr-   )daysr   zdatetime.timedelta)idsc                 C   s&   t ||dd|d}|}t|| d S )Nr   r   rj   rz   )r   r   r$   r&   r)   rG   rF   r   r   r   test_toleranceX  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/   r0   r1   r2   r3   r5   r6   r8      r9   r;   rs   r=   ru   r)   rv   rC   r   r   r   test_tolerance_forwardd  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/   r0   r1   r2   r3   r5   r6   r8   r   r9   r;   rx   r   rv   rC   r   r   r   test_tolerance_nearestq  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tzr   )datevalue1z
2016-01-01ZABCDE)r   value2r   z1 dayr=   r)   ZBCDEE)r   r   r   )r?   r@   
date_ranger   pytztimezonerp   Zarangelistr   r   rA   rB   )r   r   rD   rE   rG   rF   r   r   r   test_tolerance_tz~  sH    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%@r0   r1   r2   r3   r         @gffffff
@g      @g      '@r9   r-   r;   rx         ?r   rv   rC   r   r   r   test_tolerance_float  s    
z"TestAsOfMerge.test_tolerance_floatc                 C   sF   | d}| d}| d}t||dddtdd}t|| d S )Nr   Tr   r   )r   r   ri   r)   )r   r   r   rA   rB   )r   r$   r&   r)   rF   rG   r   r   r   test_index_tolerance  s    


z"TestAsOfMerge.test_index_tolerancec                 C   s&   t ||dddd}|}t|| d S )Nr   r   Fr   rz   )r   r$   r&   r*   rG   rF   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/   r0   r1   r2   r3   r5   r6   r8   r   r9   r;   rs   Fr=   ru   r*   r>   rC   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/   r0   r1   r2   r3   r5   r6   r8   r   r9   r;   rx   Fr   r>   rC   r   r   r    test_allow_exact_matches_nearest  s    $    z.TestAsOfMerge.test_allow_exact_matches_nearestc                 C   s,   t ||ddtddd}|}t|| d S )Nr   r   Z100msFrl   )r   r   rA   rB   )r   r$   r&   r+   rG   rF   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-   r5   r   versionr   r<   r   r   r   F)r=   r*   rk   r=   r*   r)   )	r?   r@   r   r   rA   rB   r   rp   rq   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-   r5   r   r   Frk   r   r   )	r?   r@   r   r   r   rp   rq   rA   rB   r   r   r   r   'test_allow_exact_matches_and_tolerance30  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/   r0   r1   r2   r3   r6      r7   r   r9   r;   rs   Fr=   ru   r*   r)   rv   rC   r   r   r   .test_allow_exact_matches_and_tolerance_forwardU  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/   r0   r1   r2   r3   r6   r   r7   r   r8   r9   r;   rx   Fr   rv   rC   r   r   r   .test_allow_exact_matches_and_tolerance_nearesti  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Zr0   r1   r2   der0   r1   r4   r7   r      r0   r1   r:   r0   r1   r4   r:   rs   r=   ri   ru   rv   rC   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   r0   r1   r2   r   r   r   r7   r   r   r   r  rx   r  r>   rC   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.020rZ   z20160525 13:30:00.040r   z20160525 13:30:00.060r-   r5   r6   r   g333333?g?gffffff?g      ?)r   r   r   r   r   r   rX   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   rh   )r   r   r   r   )r?   r@   r   r   rA   rB   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)rV   symbolr  rV   rX           r         Y@-C6?{Gz?皙?)rV   mpvr  Tr   r<   ZBGACEDF)r  rV   r  r?   r@   r   r   r   r   rA   rB   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.   r5      rU   N   x   O   r  )r   r  r  r   rX   r   P   }   xyzw)r   rG   rG   Tr   r<   BACEGDFZxxxxxyz)r  r   rG   )rp   dtypetyper?   r@   r   r   r   r   r   rA   rB   r   Zany_real_numpy_dtyper  r   r   rG   rF   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.   r5   r  rU   r  r  r  r-   r6   r  )r   r   r  r  r   r   rX   r   r  r  r  )r   r   rG   rG   Tr   rh   r  r    y)r  r   r   rG   )rp   r  r  r?   r@   r   r   r   r   r   rq   rA   rB   r  r   r   r   test_on_specialized_type_by_int3  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-   r5   r6   gGz
@gׁsF
@g
@g)\()@gGz.)@g      )@gfffffw@g33333w@g     w@)r  r   rV   r  r   rV   rX   r  r   r	        @g     @@r
  r  r  g?g      ?)r   rV   r  r  Tr   rh   )r  r   rV   r  r  r   r   r   r   test_on_float_by_intW  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/   r0   r1   r2   r4   r0   r5   r6   r7   r8   r:   r0   r   r<   r?   r@   rm   r   r   r   r   r   rD   rE   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/   r0   r1   r2   r!  r5   r6   r7   r8   r   r"  r   r<   )r?   r@   Categoricalrm   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(  rh   )r?   r@   r&  r   rA   rB   )r   dfrG   rF   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siderD   rE   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      $@r0   r1   r2   r3   r-   r7   r   r9   r   rD   r<   )rp   rq   r?   r@   rm   r   r   r   )r   r+  r0  r   ZnullsZ	non_nullsZdf_nullr)  r   r   r   test_merge_on_nans  s    z TestAsOfMerge.test_merge_on_nansc                 C   s   t jt jddg|d}|jjdkr4t|jjj}nt	|jjj}||d< t 
|dddgdd	d
gdddgd}t 
|dddgddd
gdddgd}t||ddgdd}t 
|dddgdd	d
gdddgd}tjtjtjtjgtd|d< t|| d S )Nr   r-   r  )iur5   HELLOToZYour   r7   r0   r2   r   by_col1by_col2on_colr   WORLDZWideZWebr1   r   r   r8  r9  r:  ri   r=   )r8  r9  r:  value_xvalue_y)r?   arrayZNAr  kindrp   ZiinfoZnumpy_dtypemaxZfinfor@   r   rq   objectrA   rB   )r   Zany_numeric_ea_dtypeZarrZmax_valrD   rE   rG   rF   r   r   r   test_by_nullable  s:    	zTestAsOfMerge.test_by_nullablec                 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   r5   r0   )by_colr:  valuesr-   r1   rE  r:  r<  r   Zvalues_xZvalues_yrX   )r?   r@   DatetimeIndextz_localizer   	TimestamprA   rB   r   rD   rE   rG   rF   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 )NrD  r   r5  r5   r0   r7  r;  r-   r1   r8  r9  r:  r<  rG  r=  rX   r2  r>  )r?   r@   rH  rI  r   rJ  rp   r?  rq   rB  rA   rB   rK  r   r   r   test_by_mixed_tz_aware  s*    
z$TestAsOfMerge.test_by_mixed_tz_awarec                 C   sP  |dkrt 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| 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| 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| d|d< t
||dtddd}t|| d S )Nr   zHThis test is invalid with unit='s' because that would round left['time']r   r.   r/   r      r  r-   r5   r6   r   r   rD   rX   r	   zm8[rK   	   r      rE   Z1msrx   )r=   r)   ru   )rm   rn   r?   r@   r   zipZto_timedeltaro   rp   rq   r   r   rA   rB   )r   r   rD   rE   rF   rG   r   r   r    test_timedelta_tolerance_nearest"  sB    $"$""    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/   rN  r-   r5   r6   r3   r.   r   r  r9   r0   r   r   r;   r   )r?   r@   ro   rp   rq   r   rA   rB   )r   Zany_int_numpy_dtyperD   rE   rF   rG   r   r   r   test_int_type_toleranceL  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-   )rY   r   gGz@r   gQ@)	from_dateabcTrU  )rD   rE   r   r   r6   )rT  rU  rV  z2019-10-01 00:30:00r   )rD   rE   r   r   )rU  rV  rT  r   r5   )	r?   r   r@   r   rA   rB   rp   rq   r   )r   r   rD   rE   rG   rF   r   r   r   test_merge_index_column_tz\  sH    "   

   
   z(TestAsOfMerge.test_merge_index_column_tzc                 C   s   |dkrt d 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 )Nr   z?This test is invalid with unit='s' because that would round dr1z1/1/2020z	1/20/2020Z2D)r   endr   r   g?)secondsz2/1/2020)r   rY  r   val1r   rW  val2bar)r[  r\  Tr   )r   r   r)   )rm   rn   r?   r   r   Zas_unitr@   rH  r   rA   rB   )r   r   Zdr1Zdr2r   r   rF   rG   r   r   r   %test_left_index_right_index_tolerance}  s6        z3TestAsOfMerge.test_left_index_right_index_toleranceN)F)K__name__
__module____qualname__r!   rm   fixturer$   r&   r(   r)   r*   r+   rH   rr   rw   ry   r|   r~   r   r   r   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*  r1  rC  rL  rM  rR  rS  rX  r^  r   r   r   r   r      s   







Y		

		AA2
	.
+2%=$9	  ,*!r   kwargsr=   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    rW  r   r   r#  )rf  r   rD   rE   r   r   r   #test_merge_asof_non_numerical_dtype  s    	rg  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15r0   r1   r2   )r0   	left_val1r   r   r   r3   r   r   rh  r4   )r   r   r   r   r#  rD   rE   r   r   r   *test_merge_asof_non_numerical_dtype_object  s    rj  )r   r   	left_time)r   r   rE   )r   r   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   r0   r1   r2   r   )rD   rk  rW  rE   r5   r6   r7   r8   )rD   rk  rE   )r   r?   r@   r   rA   rB   )rf  r   rD   rE   rG   rF   r   r   r   test_merge_asof_index_behavior  s    
 &rn  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 )Nr1   r/   r   r   r-   r5   r6   r0   rm  rW  r2   rN        r   r   r   r0   r1   r2   )r?   r@   r   r   rA   rB   rD   rE   rG   rF   r   r   r   &test_merge_asof_numeri_column_in_index  s
    &&$rt  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 )Nr1   r/   r   r   r-   r5   r6   r0   r2   r(  )namesrW  rN  ro  rp  r    r  rq  rr  )r?   r@   Z
MultiIndexZfrom_arraysr   rA   rB   rs  r   r   r   +test_merge_asof_numeri_column_in_multiindex  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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 )Nr1   r/   r   r   123r0   rm  rW  r2   rN  ro  rp  mnor   r   rq  )	r?   r@   r   rm   r   r   r   r   r   ri  r   r   r   3test_merge_asof_numeri_column_in_index_object_dtype  s    &&r}  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 )Nr5   r7   z2021/01/01 00:37z2021/01/01 01:40)r0   tsz2021/01/01 00:00r6   Z1h)r   r   r   r1   r      r8   r~  FZbackward)r   r   r*   ru   )r1   r0   r~  )r0   r~  r1   )	r?   r@   rJ  r   r   rp   rq   rA   rB   )rE   Zts_mergerD   rG   rF   r   r   r   test_merge_asof_array_as_on  sH       r  c               	   C   s   t jdddggdddgd} t jdddggdddgd}tjtdd t| |dd	 W 5 Q R X tjtdd t| |ddd
 W 5 Q R X tjtdd t| |ddd
 W 5 Q R X d S )Nr-   r5   r0   r4   rX   r:   zcolumn label 'a'r   r<   rq  )r?   r@   rm   r   r   r   ri  r   r   r   +test_merge_asof_raise_for_duplicate_columns+  s    r  )r/  Znumpyrp   rm   r   Zpandasr?   r   r   r   r   r   Zpandas._testingZ_testingrA   Zpandas.core.reshape.merger   rb  r   r   rc  rd  rg  rj  rn  rt  rv  r}  r  r  r   r   r   r   <module>   sX   
           	 

)