U
    c:                     @   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 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x r   N/tmp/pip-unpacked-wheel-g7fro6k3/pandas/tests/reshape/merge/test_merge_asof.py	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   	tolerance*   s    zTestAsOfMerge.tolerancec                 C   s   |  |dS )Nzallow_exact_matches.csvr   r   r   r   r   allow_exact_matches.   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_tolerance2   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r(   left_val            r(   	right_valr(   r,   r2   onNpd	DataFramer   tmassert_frame_equalr   leftrightexpectedresultr   r   r   test_examples16   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   rM   rN   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^   r5   byZ2msr5   r`   r!   )r   r   rM   rN   r]   r^   10msFr5   r`   r!   r"   N	r7   r8   r   r   r   npnanr9   r:   r   r   r   r>   r?   r   r   r   test_examples2B   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/   r0   r1   r3   forwardr5   	directionNr7   r8   re   rf   r   r9   r:   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/   r0   r1   r3   nearestrj   Nr6   r;   r   r   r   test_examples4   s    $zTestAsOfMerge.test_examples4c                 C   s$   |}t ||ddd}t|| d S )Nr   r   r_   r   r9   r:   r   r   r    r   r>   r?   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   r_   )r   astyper   r9   r:   rq   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_onr`   )	set_indexr   indexrP   r9   r:   rq   r   r   r   test_basic_left_index   s    
    
z#TestAsOfMerge.test_basic_left_indexc                 C   s4   |}|}| d}t||dddd}t|| d S )Nr   Tr   )left_onright_indexr`   rx   r   r9   r:   rq   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   rv   r|   r`   r}   rq   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   rM   zleft can only have one indexmatchTrv   r|   rx   pytest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   r]   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   rM   T)r{   rv   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   r]   T)rw   rv   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   )r5   left_byright_byrp   rq   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 )NrC   r   r   r_   r]   r^   )r   r   re   rf   locr9   r:   )r   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 ),NrA   20160525 13:30:00.046rB   20160525 13:30:00.050rC   rD   rE   ARCANSDQBATSrF   rG   rH   rI   rJ   rK   rL   r   r   exchrM   rN   r   r   r   rM   rN   rO   rQ   rR   20160525 13:30:00.045rS   Gz@rU   rV   rT   rW   rY   rZ   r[   rX   r\   r   r   r   r]   r^   r]   r^   r   r   r   rM   rN   r]   r^   r_   r7   r8   r   re   rf   r   r9   r:   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 ),NrA   r   rB   r   r   r%   r-   r   r   r   rF   rG   rH   rI   rJ   rK   rL   r   r   r   r   rM   rN   rO   rQ   rR   r   rS   r   rU   rV   rT   rW   rY   rZ   r[   rX   r\   r   r]   r^   r   r_   r   rg   r   r   r    test_multiby_heterogeneous_types`  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k2rO   Z20160502      ?       @Z20160503g      @g      @valueTr   z(left_by and right_by must be same lengthr   )rv   r|   r   r   )
r7   r8   r   rx   r   r9   r:   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   r9   r:   )r   r   r>   r   r   r?   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 )NrC   r   r%   )ZaxisTr   )r   r   r   r   r   r   r   <lambda>  s
    z0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>r   r4   rp   )r   r   r    r   fr>   r?   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   r]   r   )r{   rw   r`   zcan only asof on a key for leftr_   )r`   r   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   r_   r   )r7   concatsort_valuesr   r   r   r9   r:   )r   r   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   r2   r   r4   )r   r,   r2   r6   r   df1df2r?   r>   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r5   r`   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1sra   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   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   r_   zright keys must be sorted)r   r   Zis_monotonic_increasingAssertionErrorr   r   
ValueErrorr   r   r   r   r   test_non_sortedE  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   ra   rp   )r   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.   r0      r1   r3   ri   r5   rk   r!   rl   r;   r   r   r   test_tolerance_forwardi  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.   r0   r   r1   r3   rn   r   rl   r;   r   r   r   test_tolerance_nearestv  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r5   r!   ZBCDEE)r   r   r   )r7   r8   
date_ranger   pytztimezonere   Zarangelistr   r   r9   r:   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      '@r1   r%   r3   rn         ?r   rl   r;   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   )rv   r|   r`   r!   )rx   r   r   r9   r:   )r   r   r   r!   r>   r?   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   rp   )r   r   r   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.   r0   r   r1   r3   ri   Fr5   rk   r"   r6   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.   r0   r   r1   r3   rn   Fr   r6   r;   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100msFrc   )r   r   r9   r:   )r   r   r   r#   r?   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   r4   r   r   r   F)r5   r"   rb   r5   r"   r!   )	r7   r8   r   r   r9   r:   r   re   rf   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   Frb   r   r   rd   r   r   r   r   'test_allow_exact_matches_and_tolerance34  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   r1   r3   ri   Fr5   rk   r"   r!   rl   r;   r   r   r   .test_allow_exact_matches_and_tolerance_forwardY  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   r0   r1   r3   rn   Fr   rl   r;   r   r   r   .test_allow_exact_matches_and_tolerance_nearestm  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)   r2   r(   r)   r,   r2   ri   r5   r`   rk   rl   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   rn   r   r6   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.020rQ   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   rO   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   )r7   r8   r   r   r9   r:   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)rM   symbolr   rM   rO           r         Y@-C6?{Gz?皙?)rM   mpvr  Tr   r4   ZBGACEDF)r   rM   r  r7   r8   r   r   r   r   r9   r:   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-      rL   N   x   O   r   )r   r   r   r   rO   r   P   }   xyzw)r   r?   r?   Tr   r4   BACEGDFZxxxxxyz)r   r   r?   )re   dtypetyper7   r8   r   r   r   r   r   r9   r:   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  rL   r	  r
  r  r%   r.   r   )r   r   r   r   r   r   rO   r   r  r  r  )r   r   r?   r?   Tr   r_   r  r   y)r   r   r   r?   )re   r  r  r7   r8   r   r   r   r   r   rf   r9   r:   r  r   r   r   test_on_specialized_type_by_int7  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   rM   r   r   rM   rO   r   r   r        @g     @@r  r  r  g?g      ?)r   rM   r  r  Tr   r_   )r   r   rM   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/   r0   r2   r(   r   r4   r7   r8   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/   r0   r   r  r   r4   )r7   r8   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_   )r7   r8   r  r   r9   r:   )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   r1   r   r<   r4   )re   rf   r7   r8   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 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ur-   HELLOToZYour   r/   r(   r*   r   by_col1by_col2on_colr   WORLDZWideZWebr)   r   r   r0  r1  r2  r`   r5   )r0  r1  r2  value_xvalue_y)r7   arrayZNAr  kindre   ZiinfoZnumpy_dtypemaxZfinfor8   r   rf   objectr9   r:   )r   Zany_numeric_ea_dtypeZarrZmax_valr<   r=   r?   r>   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   r-   r(   )by_colr2  valuesr%   r)   r=  r2  r4  r   Zvalues_xZvalues_yrO   )r7   r8   DatetimeIndextz_localizer   	Timestampr9   r:   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   r-  r-   r(   r/  r3  r%   r)   r0  r1  r2  r4  r?  r5  rO   r*  r6  )r7   r8   r@  rA  r   rB  re   r7  rf   r:  r9   r:   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<   rO   ms	   r      r=   Z1msrn   )r5   r!   rk   )r7   r8   r   zipZto_timedeltare   rf   r   r   r9   r:   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'   rE  r%   r-   r.   r+   r&   r   r  r1   r(   r   r   r3   r   )r7   r8   rt   re   rf   r   r9   r:   )r   Zany_int_numpy_dtyper<   r=   r>   r?   r   r   r   test_int_type_toleranceK  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%   )rP   ry   gGz@r   gQ@)	from_dateabcTrM  )r<   r=   rv   rw   r.   )rL  rM  rN  z2019-10-01 00:30:00ry   )r<   r=   r|   r{   )rM  rN  rL  r   r-   )	r7   r   r8   r   r9   r:   re   rf   r   )r   ry   r<   r=   r?   r>   r   r   r   test_merge_index_column_tz[  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   rQ  val1r   rO  val2bar)rS  rT  Tr   )rv   r|   r!   )r7   r   r   r8   r@  r   r9   r:   )r   Zdr1Zdr2r   r   r>   r?   r   r   r   %test_left_index_right_index_tolerance|  s$     z3TestAsOfMerge.test_left_index_right_index_toleranceN)F)K__name__
__module____qualname__r   r   Zfixturer   r   r    r!   r"   r#   r@   rh   rm   ro   rr   ru   rz   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"  r)  r;  rC  rD  rJ  rK  rP  rV  r   r   r   r   r      s   







T
	
	AA2	
	/
(2%=$9	  ,%!r   kwargsr5   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   rO  r  r   r  )r]  r
   r<   r=   r   r   r   #test_merge_asof_non_numerical_dtype  s    	r^  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   r_  r,   )r{   rw   r   r   r  r<   r=   r   r   r   *test_merge_asof_non_numerical_dtype_object  s    ra  )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<   rb  rO  r=   r-   r.   r/   r0   )r<   rb  r=   )r   r7   r8   r   r9   r:   )r]  ry   r<   r=   r?   r>   r   r   r   test_merge_asof_index_behavior  s    
 &re  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(   rd  rO  r*   rE        r   r{   rw   r(   r)   r*   )r7   r8   r   r   r9   r:   r<   r=   r?   r>   r   r   r   &test_merge_asof_numeri_column_in_index  s
    &&$rk  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   )namesrO  rE  rf  rg  r   r  rh  ri  )r7   r8   Z
MultiIndexZfrom_arraysr   r9   r:   rj  r   r   r   +test_merge_asof_numeri_column_in_multiindex  s    ""$rm  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(   rd  rO  r*   rE  rf  rg  mnor  r   rh  )	r7   r8   r   r   r   r   r   r   rx   r`  r   r   r   3test_merge_asof_numeri_column_in_index_object_dtype  s    &&rt  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      r0   ru  FZbackward)r{   rw   r"   rk   )r)   r(   ru  )r(   ru  r)   )	r7   r8   rB  r   r   re   rf   r9   r:   )r=   Zts_merger<   r?   r>   r   r   r   test_merge_asof_array_as_on  sH       rw  )r'  Znumpyre   r   r   Zpandasr7   r   r   r   r   r   Zpandas._testingZ_testingr9   Zpandas.core.reshape.merger   r   rZ  r[  r^  ra  re  rk  rm  rt  rw  r   r   r   r   <module>   sR               

