o
    ŀg                 
   @   s  d dl Z d dlZd dlZd dlZd dlm  m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g dddd ZG dd	 d	Zejd
dejdeddg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#ejd,d-ejd.eddejd/eddgd0d1 Z$edd2d3 Z%d4d5 Z&d6d7 Z'dS )8    N)Index	Timedelta
merge_asofoption_contextto_datetime)
MergeError)smsusns)paramsc                 C   s   | j S )z-
    Resolution for datetimelike dtypes.
    )param)request r   ^/var/www/html/myenv/lib/python3.10/site-packages/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ejd0d1d2gd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"d=d> Z#d?d@ Z$dAdB Z%dCdD Z&dEdF Z'dGdH Z(ejjdIe)dJe*j+dKdLgdMdNgdOdPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dZd[ Z1d\d] Z2d^d_ Z3d`da Z4dbdc Z5ddde Z6dfdg Z7dhdi Z8djdk Z9dldm Z:dndo Z;dpdq Z<drds Z=dtdu Z>dvdw Z?dxdy Z@dzd{ ZAd|d} ZBd~d ZCejjddd dd gddgdOejdddgdd ZDdd ZEdd ZFdd ZGejd0g ddd ZHdd ZIdd ZJdd ZKdd ZLdS )TestAsOfMergeFc                 C   s.   |r|j ddgddjdd}t|j|_|S )Ntimetickerlast)keepTdrop)drop_duplicatesreset_indexr   r   )selfdfdeduper   r   r   	prep_data   s   zTestAsOfMerge.prep_datac                 C   s   t jg dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgddd}|d d|d< |d d|d< | |S ) N20160525 13:30:00.023MSFT51.950075NASDAQ20160525 13:30:00.038r!   r"   155r$   20160525 13:30:00.048GOOGz720.7700100r$   r)   r*   z720.9200r+   r$   r)   r*   720.9300200r$   r)   r*   r.   300r$   r)   r*   r.   600r$   r)   r*   r.   44r$   20160525 13:30:00.074AAPL98.6700478343r$   20160525 13:30:00.075r8   r9   r:   r$   r<   r8   z98.66006r$   r<   r8   98.650030r$   r<   r8   r@   r#   r$   r<   r8   r@   20r$   r<   r8   r@   35r$   r<   r8   r@   10r$   r<   r8   98.5500r>   ARCA20160525 13:30:00.076r8   98.56001000rK   rM   r8   rN   r/   rK   rM   r8   rN   r1   rK   rM   r8   rN   400rK   rM   r8   rN   r3   rK   20160525 13:30:00.078r!   r"   783r$   rV   r!   r"   r+   r$   'time,ticker,price,quantity,marketCenter,columnspricefloat64quantityint64pd	DataFramesplitastyper   r   r   r   r   r   trades&   sD    
zTestAsOfMerge.tradesc                 C   s   t jg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d	gd
dd}|d d|d< |d d|d< | j|ddS )Nr    r*   720.50720.93r    r!   51.95rl   20160525 13:30:00.041r!   rl   rl   r)   r*   ri   rj   20160525 13:30:00.072r*   ri   z720.88r<   r8   98.5598.56rM   r8   rs   rt   rV   r!   rl   rl   rV   r!   51.92rl   time,ticker,bid,askrZ   r[   bidr^   askTr   ra   rf   r   r   r   quotesL   s.   zTestAsOfMerge.quotesc                 C     t jg dg dg dg dg dg dg dg dd	d
dddtjtjgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgddd}|d  d!|d < |d" d#|d"< |d$ d!|d$< |d% d!|d%< | |S &Nr    r!   rl   r#   r$   rl   rl   r&   r!   rl   r'   r$   rl   rl   r)   r*   z720.77r+   r$   720.5rj   r)   r*   z720.92r+   r$   r   rj   r)   r*   rj   r/   r$   r   rj   r)   r*   rj   r1   r$   r   rj   r)   r*   rj   r3   r$   r   rj   r)   r*   rj   r5   r$   r   rj   r7   r8   98.67r:   r$   r<   r8   r   r:   r$   rs   rt   r<   r8   98.66r>   r$   rs   rt   r<   r8   98.65rA   r$   rs   rt   r<   r8   r   r#   r$   rs   rt   r<   r8   r   rD   r$   rs   rt   r<   r8   r   rF   r$   rs   rt   r<   r8   r   rH   r$   rs   rt   r<   r8   rs   r>   rK   rs   rt   rM   r8   rt   rO   rK   rs   rt   rM   r8   rt   r/   rK   rs   rt   rM   r8   rt   r1   rK   rs   rt   rM   r8   rt   rS   rK   rs   rt   rM   r8   rt   r3   rK   rs   rt   rV   r!   rl   rW   r$   rx   rl   rV   r!   rl   r+   r$   rx   rl   /time,ticker,price,quantity,marketCenter,bid,askrZ   r[   r]   r^   r_   r`   rz   r{   rb   rc   npnanrd   re   r   rf   r   r   r   asofg   ^   							
																		  v  y
zTestAsOfMerge.asofc                 C   r~   r   r   rf   r   r   r   	toleranceg  r   zTestAsOfMerge.tolerancec                 C   s  t jdddddtjtjgg dg dg dg d	g d
g dg ddddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgg dg dg dg dg dg dg d g d!g d!gd"d#d$}|d% d&|d%< |d' d(|d'< |d) d&|d)< |d* d&|d*< | |S +Nr    r!   rl   r#   r$   r   r   r   r   r   r   r   r7   r8   r   r:   r<   r   r>   r   rA   rD   rF   rH   rs   rK   r   r   r   r   r   )rV   r!   rl   rW   r$   rl   rl   )rV   r!   rl   r+   r$   rl   rl   r   rZ   r[   r]   r^   r_   r`   rz   r{   r   )r   datapathr   r   r   r   allow_exact_matchesg     							







									  f  i
z!TestAsOfMerge.allow_exact_matchesc                 C   s  t jdddddtjtjgg dg dg dg d	g d
g dg ddddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgg dg dg dg dg dg dg d g d!g d!gd"d#d$}|d% d&|d%< |d' d(|d'< |d) d&|d)< |d* d&|d*< | |S r   r   rf   r   r   r   !allow_exact_matches_and_toleranceW  r   z/TestAsOfMerge.allow_exact_matches_and_tolerancec                 C   sl   t g dg dd}t g dg dd}t g dg dg dd}t||dd	}t|| d
S )doc-string examples      
   abcr   left_valr               r   	right_valr   r   r   r   r   r   r   onNrb   rc   r   tmassert_frame_equalr   leftrightexpectedresultr   r   r   test_examples1G  s   zTestAsOfMerge.test_examples1c                 C   sB  |dkr	t d tjtg dd| dg dg dg dd	g d	d
}tjtg dd| dg dg dg ddg dd
}t||ddd t||ddtdd tjtg dd| dg dg dg dtj	dtj	tj	tj	gtj	dtj	tj	tj	gdg dd
}t||ddtddd}t
|| dS )r   r   zNThis test is invalid for unit='s' because that would round the trades['time']])r    r&   r)   r)   r)   M8[]r!   r!   r*   r*   r8   皙I@r   g\(@(\@g     X@K      d   r   r   )r   r   r]   r_   r[   )r    r    20160525 13:30:00.030rn   r)   20160525 13:30:00.049rq   r<   )r*   r!   r!   r!   r*   r8   r*   r!   )     @r   \(I@QI@r   (\X@r   gzGJ@)=
ףp@{GI@=
ףpI@      J@r   q=
ףX@gףp=
@gp=
J@)r   r   rz   r{   r   r   r   by2msr   r   r   r   r   )r   r   r]   r_   rz   r{   10msFr   r   r   r   N)pytestskiprb   rc   r   re   r   r   r   r   r   r   )r   r   rg   r}   r   r   r   r   r   test_examples2S  sd   
zTestAsOfMerge.test_examples2c                 C   sr   t g dg dd}t g dg dd}t g dg dddtjgd}t||d	d
d}t|| dS )r   r   r   r   r   r   r   r   r   r   forwardr   	directionNrb   rc   r   r   r   r   r   r   r   r   r   test_examples3  s   zTestAsOfMerge.test_examples3c                 C   sn   t g dg dd}t g dg dd}t g dg dg dd}t||dd	d
}t|| dS )r   r   r   r   r   r   )r   r   r   r   r   nearestr   Nr   r   r   r   r   test_examples4  s   zTestAsOfMerge.test_examples4c                 C   s$   |}t ||ddd}t|| d S )Nr   r   r   r   r   r   r   rg   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   re   r   r   r   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_onr   )	set_indexr   indexr\   r   r   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_indexr   r   r   r   r   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   r   r   r   r   r   r   !test_basic_left_index_right_index  s   



z/TestAsOfMerge.test_basic_left_index_right_indexc                 C   s\   | ddg}| d}tjtdd t||ddd W d    d S 1 s'w   Y  d S )Nr   r]   zleft can only have one indexmatchTr   r   r   r   raisesr   r   r   rg   r}   r   r   r   test_multi_index_left  s
   
"z#TestAsOfMerge.test_multi_index_leftc                 C   s\   | d}| ddg}tjtdd t||ddd W d    d S 1 s'w   Y  d S )Nr   rz   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   ^   | d}| d}d}tjt|d t||dddd W d    d S 1 s(w   Y  d S )Nr   z:Can only pass argument "left_on" OR "left_index" not both.r   r]   T)r   r   r   r   r   rg   r}   msgr   r   r   test_on_and_index_left_on  s   


"z'TestAsOfMerge.test_on_and_index_left_onc                 C   r  )Nr   z<Can only pass argument "right_on" OR "right_index" not both.r   rz   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_byr   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 )Nr!   r   r   r   rz   r{   )r   r   r   r   locr   r   )r   rg   r   r}   r   qr   r   r   r   test_missing_right_by"  s
   z#TestAsOfMerge.test_missing_right_byc                 C   s   t jtg dg dg dg dg ddg dd}t jtg dg d	g d
g dg ddg dd}t jtg dg dg dg dg dtjdddtjgtjdddtjgdg dd}t||dddgd}t|| d S )Nr    r    z20160525 13:30:00.046r)   20160525 13:30:00.050r   rK   NSDQr  BATSr  r   r   r   r   exchr]   r_   r[   r    r    r   rn   z20160525 13:30:00.045r   )r*   r!   r!   r!   r*   r8   r  r  rK   rK   r  rK   Gz@r   r   r   r   r   r   r   r   r   r   r   r   r   r  rz   r{   r   r   r  r   r   r   r   r   r  r]   r_   rz   r{   r   r   r  r   )rb   rc   r   r   r   r   r   r   )r   rg   r}   r   r   r   r   r   test_multiby*  sJ   	
	zTestAsOfMerge.test_multibydtypeobjectstringc                 C   s  t jtg dg dg dg dg ddg dd}|||d}t jtg d	g d
g dg dg ddg dd}|||d}t jtg dg dg dg dg dtjdddtjgtjdddtjgdg dd}|||d}t||dddgd}t|| d S )Nr  )r   r   r   r   r   r  r   r   r  r[   )r   r  r  )r   r   r   r   r   r   r  r  r  r  r   r   r  r   r   r   r  r   r   r  r   )	rb   rc   r   re   r   r   r   r   r   )r   r  rg   r}   r   r   r   r   r    test_multiby_heterogeneous_typesk  sP   	
	z.TestAsOfMerge.test_multiby_heterogeneous_typesc                 C   s   t jtdddgtdddgtdddgtdddggg ddd	}|jt 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g ddd	}d}tjt|d t	||ddddgd W d    d S 1 suw   Y  d S )N20160602r   r   r   20160603r   r   k1k2r[   r   r   20160502      ?       @20160503      @      @r   r$  r%  valueincompatible merge keysr   Tr$  r%  r   )
rb   rc   r   r   r   	Timestampr   r   r   r   )r   r   r   r  r   r   r   test_mismatched_index_dtype  s2   

"z)TestAsOfMerge.test_mismatched_index_dtypec              	   C   sX  t jtdddgtdddgtdddgtdddggg d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g d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g d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 d    d S 1 sw   Y  d S )Nr!  r   r   r   r"  r   r#  r[   r   r&  r'  r(  r)  r*  r+  r,  Tr$  r%  r   z,left_by and right_by must be the same lengthr   )r   r   r  r	  )
rb   rc   r   r   r   r   r   r   r   r   r   r   r   r   test_multiby_indexed  s\   


"z"TestAsOfMerge.test_multiby_indexedc              	   C   s  t jg g dg dg dg dg dg dg dg dd	d
dddtjtjgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d"g d#g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dIdJdKdL}|dM dN|dM< |dO dP|dO< |dQ dN|dQ< |dR dN|dR< | |}t jg g dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg dcg ddg deg dfg dgg dhg deg dig djg djg dkg dlg dmg dng dog dpg dpg dqg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dddKdL}|dM dN|dM< |dO dP|dO< | |}t jg g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dddKdL}|dQ dN|dQ< |dR dN|dR< | j|dd}t||ddd}t	|| d S )Nr   r   r   r   r   r   r   r   r7   r8   r   r:   r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )20160525 13:30:00.084r8   z98.6440r$   rs   rt   )r2  r8   rs   149EDGXrs   rt   )20160525 13:30:00.086r8   rt   500rK   rs   98.63)20160525 13:30:00.104r8   r8  647r5  98.62r8  )r9  r8   r8  r1   r5  r;  r8  )r9  r8   r8  50r$   r;  r8  )r9  r8   r8  70r$   r;  r8  )r9  r8   r8  1r$   r;  r8  )r9  r8   r8  62r$   r;  r8  )r9  r8   r8  rH   r$   r;  r8  )r9  r8   r8  r+   rK   r;  r8  )20160525 13:30:00.105r8   r8  r+   rK   r;  r8  )r@  r8   r8  700rK   r;  r8  )20160525 13:30:00.106r8   r8  61r5  r;  r8  )20160525 13:30:00.107r8   r8  r+   rK   r;  r8  )rD  r8   r8  53rK   r;  r8  )20160525 13:30:00.108r8   r8  r+   rK   r;  r8  )rF  r8   r8  839rK   r;  r8  )20160525 13:30:00.115r8   r8  5r5  r;  r8  )20160525 13:30:00.118r8   r8  295r5  r;  r8  )rJ  r8   r8  rI  r5  r;  r8  )20160525 13:30:00.128r8   r8  r+   r$   r;  r8  )rL  r!   rx   r+   rK   rx   rl   )20160525 13:30:00.129r8   r;  r+   r$   98.61r8  )rM  r8   r;  rH   r$   rN  r8  )rM  r8   r;  59r$   rN  r8  )rM  r8   r;  31r$   rN  r8  )rM  r8   r;  69r$   rN  r8  )rM  r8   r;  12r$   rN  r8  )rM  r8   r;  rR  r5  rN  r8  )rM  r8   r;  r+   rK   rN  r8  )20160525 13:30:00.130r!   rl   317rK   51.93rl   )rS  r!   rl   283rK   rU  rl   )20160525 13:30:00.135r!   rU  r+   r5  rx   rl   )rW  r8   r;  r+   rK   rN  r;  )20160525 13:30:00.144r8   r;  rR  r$   rN  r;  )rX  r8   r;  88r$   rN  r;  )rX  r8   r;  162r$   rN  r;  )rX  r8   rN  r+   r  rN  r;  )rX  r8   r;  rC  rK   rN  r;  )rX  r8   r;  25rK   rN  r;  )rX  r8   r;  14rK   rN  r;  )20160525 13:30:00.145r8   r;  rR  rK   98.6r8  )r]  r8   r;  r+   rK   r^  r8  )r]  r8   r8  r+   r$   r^  r8  r   rZ   r[   r]   r^   r_   r`   rz   r{   r   r%   r(   r,   r-   r0   r2   r4   r6   r;   r=   r?   rB   rC   rE   rG   rI   rL   rP   rQ   rR   rT   rU   rX   )r2  r8   z98.6400r3  r$   )r2  r8   rJ   r4  r5  )r6  r8   rN   r7  rK   )r9  r8   98.6300r:  r5  )r9  r8   r_  r1   r5  )r9  r8   r_  r<  r$   )r9  r8   r_  r=  r$   )r9  r8   r_  r>  r$   )r9  r8   r_  r?  r$   )r9  r8   r_  rH   r$   )r9  r8   r_  r+   rK   )r@  r8   r_  r+   rK   )r@  r8   r_  rA  rK   )rB  r8   r_  rC  r5  )rD  r8   r_  r+   rK   )rD  r8   r_  rE  rK   )rF  r8   r_  r+   rK   )rF  r8   r_  rG  rK   )rH  r8   r_  rI  r5  )rJ  r8   r_  rK  r5  )rJ  r8   r_  rI  r5  )rL  r8   r_  r+   r$   )rL  r!   z51.9200r+   rK   )rM  r8   98.6200r+   r$   )rM  r8   r`  rH   r$   )rM  r8   r`  rO  r$   )rM  r8   r`  rP  r$   )rM  r8   r`  rQ  r$   )rM  r8   r`  rR  r$   )rM  r8   r`  rR  r5  )rM  r8   r`  r+   rK   )rS  r!   r"   rT  rK   )rS  r!   r"   rV  rK   )rW  r!   z51.9300r+   r5  )rW  r8   r`  r+   rK   )rX  r8   r`  rR  r$   )rX  r8   r`  rY  r$   )rX  r8   r`  rZ  r$   )rX  r8   z98.6100r+   r  )rX  r8   r`  rC  rK   )rX  r8   r`  r[  rK   )rX  r8   r`  r\  rK   )r]  r8   r`  rR  rK   )r]  r8   r`  r+   rK   )r]  r8   r_  r+   r$   rY   rh   rk   rm   ro   rp   rr   ru   rv   rw   )z20160525 13:30:00.079r!   rx   rl   )z20160525 13:30:00.080r8   rs   rt   )r2  r8   rs   rt   )r6  r8   rs   r8  )z20160525 13:30:00.088r8   r   r8  )z20160525 13:30:00.089r8   r8  r8  )r9  r8   r8  r8  )r9  r8   r;  r8  )r@  r8   r;  r8  )rD  r8   r;  r8  )rH  r8   r;  r8  )rJ  r8   r;  r8  )rL  r8   r;  r8  )rM  r8   r;  r8  )rM  r8   rN  r8  )rS  r!   rU  rl   )rS  r8   rN  r8  )z20160525 13:30:00.131r8   rN  r;  )rW  r!   rx   rl   )rW  r8   rN  r;  )z20160525 13:30:00.136r8   rN  r;  )rX  r8   rN  r;  )r]  r8   rN  r;  )r]  r8   rN  r8  )r]  r8   z98.60r8  ry   Tr|   r   r   r   )
rb   rc   r   r   rd   re   r   r   r   r   )r   r   r   rg   r}   r   r   r   r   test_basic2  sN  
%.7@JR[dmv 	      $  -  6  ?  H  Q  Z  c  l  u  ~               #    ,    5    >    G    P    Y    b    k    t    }                       "      +      4      =      F      O      X      a      j      s      |                               !        *        3        <        E        N        W        `        i        r        {                                                  )          2          <          ?
	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMOR
	
 !"#$%&'()*+,-./012345678:=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 )Nr!   r   r   )axisTr   )r   r   r   xr   r   r   <lambda>[	  s
    z0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>r   r   r   )r   rg   r   r}   fr   r   r   r   r   test_basic_no_byY	  s   zTestAsOfMerge.test_basic_no_byc                 C   s   d}t jt|d t||dddd W d    n1 sw   Y  t jtdd t||ddgdd W d    n1 s>w   Y  t jtdd t||dd	 W d    d S 1 s]w   Y  d S )
Nz6incompatible merge keys \[1\] .* must be the same typer   r   rz   r   )r   r   r   zcan only asof on a key for leftr   )r   r   r   r   r   r  r   r   r   test_valid_join_keysh	  s   "z"TestAsOfMerge.test_valid_join_keysc                 C   sJ   t ||gddgjdd}t||ddd}| |}t|| d S )Nr   r   Tr   r   )rb   concatsort_valuesr   r   r   r   r   )r   r   rg   r}   r   r  r   r   r   r   r   test_with_duplicatest	  s   

z"TestAsOfMerge.test_with_duplicatesc                 C   sl   t g dg dd}t g dg dd}t||dd}t g dg dg dd}t|| d S )	N)r   r   r   r   r   r   )keyr   )r   r   r   )rn  r   rn  r   )rn  r   r   r   r   df1df2r   r   r   r   r   test_with_duplicates_no_on~	  s   z(TestAsOfMerge.test_with_duplicates_no_onc                 C   sJ   d}t jt|d t||dddd W d    d S 1 sw   Y  d S )Nz/allow_exact_matches must be boolean, passed foor   r   r   foor   r   r   rh  r  r   r   r   test_valid_allow_exact_matches	  s   
"z,TestAsOfMerge.test_valid_allow_exact_matchesc                 C   sT  t ||ddtdd t | | dddd d}tjt|d t ||dddd W d    n1 s5w   Y  tjt|d t | | ddd	d W d    n1 sYw   Y  d
}tjt|d t ||ddtd d W d    n1 s~w   Y  tjt|d t | | dddd W d    d S 1 sw   Y  d S )Nr   r   1sr   r   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J |jjrJ tjtdd t||ddd W d    n1 s4w   Y  | d}|jjsDJ |jjrJJ tjtdd t||ddd W d    n1 sdw   Y  | d}|jjstJ |jjszJ t||ddd d S )	Nr   F)	ascendingzleft keys must be sortedr   r   r   zright keys must be sorted)rk  r   is_monotonic_increasingr   r   
ValueErrorr   r   r   r   r   test_non_sorted	  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   r   r   )r   r}  rg   r}   r   r   r   r   r   r   test_tolerance	  s
   
zTestAsOfMerge.test_tolerancec                 C   t   t g dg dd}t g dg dd}t g dg d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   r   r   r   r   r   r   r   r   r   r   test_tolerance_forward	     z$TestAsOfMerge.test_tolerance_forwardc                 C   r  )Nr   r   r   r  r   r   r  r   r   r   r  r   r   r   r   r   test_tolerance_nearest	  r  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-01ABCDE)r  value2r  z1 dayr   r   BCDEE)r  r  r  )rb   rc   
date_ranger   pytztimezoner   arangelistr   r   r   r   )r   r   r   r   r   r   r   r   r   test_tolerance_tz	  sH   zTestAsOfMerge.test_tolerance_tzc                 C   st   t g dg dd}t g dg dd}t g dg dddtjgd}t||d	d
dd}t|| d S )N)皙?g      @g%@r   r   )r'        @ffffff
@g      @g      '@r   r   r  r   r   r         ?r  r   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~  )r   r   r   r   )r   r   r   r   r   )r   rg   r}   r   r   r   r   r   r   test_index_tolerance7
  s   


z"TestAsOfMerge.test_index_tolerancec                 C   s&   t ||dddd}|}t|| d S )Nr   r   Frt  r   )r   rg   r}   r   r   r   r   r   r   test_allow_exact_matchesG
  s
   
z&TestAsOfMerge.test_allow_exact_matchesc                 C   p   t g dg dd}t g dg dd}t g dg dg dd}t||dd	d
d}t|| d S )Nr   r   r   r  r   )r   r   r  r   r   r   Fr   r   r   r   r   r   r   r    test_allow_exact_matches_forwardN
     
z.TestAsOfMerge.test_allow_exact_matches_forwardc                 C   r  )Nr   r   r   r  r   )r   r   r  r   r   r   Fr  r   r   r   r   r    test_allow_exact_matches_nearest]
  r  z.TestAsOfMerge.test_allow_exact_matches_nearestc                 C   s,   t ||ddtddd}|}t|| d S )Nr   r   100msFr   )r   r   r   r   )r   rg   r}   r   r   r   r   r   r   &test_allow_exact_matches_and_tolerancel
  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   r   r   r  r  F)r   r   r   r   r   r   )	rb   rc   r   r   r   r   r   r   r   ro  r   r   r   'test_allow_exact_matches_and_tolerance2z
  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  charlier  r  r   r   r  r   Fr   r  r  )	rb   rc   r   r   r   r   r   r   r   ro  r   r   r   'test_allow_exact_matches_and_tolerance3
  s<   	
	z5TestAsOfMerge.test_allow_exact_matches_and_tolerance3c                 C   sv   t g dg dd}t g dg dd}t g dg d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   r   Fr   r   r   r   r   r   r   r   r   r   .test_allow_exact_matches_and_tolerance_forward
     z<TestAsOfMerge.test_allow_exact_matches_and_tolerance_forwardc                 C   sv   t g dg dd}t g dg dd}t g dg d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  r   r   r   Fr   r  r   r   r   r   r   .test_allow_exact_matches_and_tolerance_nearest
  r  z<TestAsOfMerge.test_allow_exact_matches_and_tolerance_nearestc              
   C   s   t g dg dg dd}t g dg dg dd}t g dg dg ddtjd	d
dgd}t||dddd}t|| d S )Nr   r   r         )Xr  YZr  r   r   r   der   r   r   r   r   r  r     )r  r  r  r  r  r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   test_forward_by
  s*   	zTestAsOfMerge.test_forward_byc                 C   s   t g dg dg dd}t g dg dg dd}t g dg dg dg d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  r  r  r   r   r   r  r   r   r   r   r   test_nearest_by  s*   	zTestAsOfMerge.test_nearest_byc                 C   s   t jtg dg dg ddg dd}t jtg dg dg dd	g d	d}t||d
dd}t jtg dg dg dg ddg dd}t|| d S )N)20160525 13:30:00.020r   20160525 13:30:00.040r  20160525 13:30:00.060)r   r   r   r   r   )r  g333333?g?gffffff?g      ?)r   rn  r  r[   )z20160525 13:30:00.015r  z20160525 13:30:00.025z20160525 13:30:00.035r  z20160525 13:30:00.055r  z20160525 13:30:00.065)r   r   r   r   r   r   r   r   ) @皙@ffffff@333333@r  g@皙@gffffff@)r   rn  r  r   rn  r   )r  r  r  r  r  )r   rn  r  r  )rb   rc   r   r   r   r   ro  r   r   r   test_by_int5  s<   		zTestAsOfMerge.test_by_intc                 C   s   t jg dtddddgd}t jg dg dd	dd
gd}|djdd}t||dd}t jtdg dg ddg dd}t|| d S )N)
ףp=
@HPsb?zG!9@@u@Hz>@皙C@q?ABCDEFG)r]   symbolr  r]   r[   )        r'        Y@)-C6?{Gz?皙?)r]   mpvr  Tr   r   BGACEDF)r  r  r  r  r  r  r  )r  r  r  r  r  r  r  )r  r]   r  rb   rc   r  rk  r   r   r   r   ro  r   r   r   test_on_floatr  s(   	zTestAsOfMerge.test_on_floatc                 C   s   t |j}tjg dtddddgd}||j|_tjg dtdd	dd
gd}||j|_|djdd}t	||dd}tjtdg dtddg dd}||j|_t
|| d S )Nr   r      r   N   x   O   r  )r-  r  r  r-  r[   r   P   r  }   xyzw)r-  r   r   Tr   r   BACEGDFr   r   r  r  r  r   r  xxxxxyz)r  r-  r   )r   r  typerb   rc   r  r-  rk  r   r   r   r   r   any_real_numpy_dtyper  rp  rq  r   r   r   r   r   test_on_specialized_type  s,   z&TestAsOfMerge.test_on_specialized_typec                 C   s   t |j}tjg dg dtddg dd}||j|_tjg dg dtd	d
g d
d}||j|_|djdd}t	||ddd}tjtdg dg dt j
dt j
t j
t j
ddgdg dd}||j|_t|| d S )Nr  )r   r   r   r   r   r   r   r  )r-  rn  r  )r  rn  r-  r[   r  )r   r   r   r   r  )r-  rn  r   r-  Tr   rn  r   r  )r   r   r   r   r   r   r   r  rd  y)r  rn  r-  r   )r   r  r  rb   rc   r  r-  rk  r   r   r   r   r   r  r   r   r   test_on_specialized_type_by_int  s4   	z-TestAsOfMerge.test_on_specialized_type_by_intc                 C   s   t jtdg dg ddg dd}t jg dg dg dd	g d	d}|d
jdd}|d
jdd}t||d
dd}t jtdg dg dg ddg dd}t|| d S )N	AAABBBCCC)	r   r   r   r   r   r   r   r   r   )	Gz
@ׁsF
@
@)\()@Gz.)@      )@fffffw@33333w@     w@)r  r  r]   r[   )	r   r   r   r   r   r   r   r   r   )	r  r'  r  r        @r  r  r  g     @@)	r  r  r  r  r  皙?r        ?r'  )r  r]   r  r]   Tr   r  r   )	r   r   r   r   r   r   r   r   r   )	r  r  r  r  r  r  r   r  r  )	r  r  r  r  r  r  r  r  r  )r  r  r]   r  r  ro  r   r   r   test_on_float_by_int  s4   	z"TestAsOfMerge.test_on_float_by_intc                 C   s   |rd}nd}t g dg dd}t g dg dd}tjt|d t||d	d
 W d    d S 1 s9w   Y  d S )Nr.  @Incompatible merge dtype, .*, both sides must have numeric dtyper   r   r   r   r   r   r   r   r   r   rb   rc   r   r   r   r   )r   using_infer_stringr  r   r   r   r   r    test_merge_datatype_error_raises  s   "z.TestAsOfMerge.test_merge_datatype_error_raisesc                 C   s   d}t g dt g dd}t g dt g dd}tjt|d t||d	d
 W d    d S 1 s:w   Y  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   )rb   rc   Categoricalr   r   r   r   )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   rd  r  zrd  r  r  r   )rb   rc   r  r   r   r   )r   r   r   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   rc  r   r   r   re  3  s    zTestAsOfMerge.<lambda>c                 C   s   t | S r  )r   rc  r   r   r   re  3  s    numericdatetimesider   r   c                 C   s   d| d}|ddt jg}|g d}t|g dd}t|g dd	}tjt|d
$ |dkr<t||dd nt||dd W d    d S W d    d S 1 sVw   Y  d S )Nz"Merge keys contain null values on z sider'  r  )r'  r  g      $@r   r   )r   r   r  r   r   r   r   r   )r   r   rb   rc   r   r   r{  r   )r   r  r  r  nulls	non_nullsdf_nullr   r   r   r   test_merge_on_nans2  s   "z TestAsOfMerge.test_merge_on_nansc           	      C   s  t jt jddg|d}|jjdv rt|jjj}nt	|jjj}||d< t 
|g dg dg dd	}t 
|g d
g dg dd	}t||ddgdd}t 
|g dg dg dd}tjtjtjtjgtd|d< |rz|d d|d< t|| d S )Nr   r   r  )iur   )HELLOToYou)r   r  r   )r   r   r  by_col1by_col2on_colr-  )WORLDWideWeb)r   r   r   )r   r  rf  r"  r#  r$  r   r   r"  r#  r$  value_xvalue_ystring[pyarrow_numpy])rb   arrayNAr  kindr   iinfonumpy_dtypemaxfinforc   r   r   r  re   r   r   )	r   any_numeric_ea_dtyper  arrmax_valr   r   r   r   r   r   r   test_by_nullableD  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g dd}t|| d S )N
2018-01-01r  r   r   )by_colr$  valuesr   r   r9  r$  r(  r  )r9  r$  values_xvalues_yr[   )rb   rc   DatetimeIndextz_localizer   r/  r   r   )r   r   r   r   r   r   r   r   test_merge_by_col_tz_awarer  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g dd}tjtjgt	d|d< |r[|d 
d|d< t|| d S )Nr8  r  r  r   r   r!  r%  r   r   r"  r#  r$  r(  r;  r)  r[   r  r+  r,  )rb   rc   r>  r?  r   r/  r   r-  r   r  re   r   r   )r   r  r   r   r   r   r   r   r   test_by_mixed_tz_aware  s.   z$TestAsOfMerge.test_by_mixed_tz_aware)r^   int16zm8[ns]zM8[us]c                 C   s   t tjdg|ddgdgd}t tjdg|ddgdgd}t||ddd	}t tjdg|ddgdgdgd
}t|| d S )Nr   r  r   r   )r9  r$  r-  r   r9  r$  r(  )r9  r$  r*  r+  )rb   rc   r   r-  r   r   r   )r   r  r   r   r   r   r   r   r   test_by_dtype  s*   zTestAsOfMerge.test_by_dtypec                 C   s  |dkr	t d tjttg dg dddgd}t|d dd	| d
|d< tjttg dg dddgd}t|d dd	| d
|d< tjttg dg ddtj	ddtj	tj	gg d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   r   r   r   r  r   r   r   r[   r	   zm8[r   )r   r   	   r  r     r   r   r   r  )r   r   r   1msr   )r   r   r   )r   r   rb   rc   r  zipto_timedeltare   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r    test_timedelta_tolerance_nearest  s:   """z.TestAsOfMerge.test_timedelta_tolerance_nearestc                 C   s   t g dg dd}t g dg dd}|d ||d< |d ||d< t g dg dtjddgd	}|d ||d< t||dd
d}t|| d S )N)r   r   rD  rm  r   )r   r  r  r   r   r'  r(  r   r   r  )rb   rc   re   r   r   r   r   r   )r   any_int_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g ddg|dd  d	}t |d
gd dg d}t||ddgd}t jg d|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g dd}t|| d S )Nz
2019-10-0130minr   r  )r  r  r  )?皙?ffffff?333333?xyzr   )r\   r   gGz@r  gQ@)	from_dateabcTrS  )r   r   r   r   r   )rR  rS  rT  z2019-10-01 00:30:00r   )r   r   r   r   rN  rO  rP  rQ  )rS  rT  rR  )r   r   r   r   r  )	rb   r  rc   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   test_merge_index_column_tz  s6   




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/20202D)r  endr  r   g?)secondsz2/1/2020)r  rX  r   val1rs  rU  val2bar)rZ  r[  Tr  )r   r   r   )r   r   rb   r  r   as_unitrc   r>  r   r   r   )r   r   dr1dr2rp  rq  r   r   r   r   r   %test_left_index_right_index_tolerance  s.   z3TestAsOfMerge.test_left_index_right_index_toleranceN)F)M__name__
__module____qualname__r   r   fixturerg   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  r  markparametrizer   r0  r1  ra  rg  ri  rl  rr  ru  rx  r|  r   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  r7  r@  rA  rC  rJ  rL  rV  r`  r   r   r   r   r      s    

%

  
  
 p
 pY		

		A
D2      a
	.
+2%=$9.
)!r   infer_stringFTpyarrow)markskwargsr   rd  r   dataz2019-06-01 00:09:12z2019-06-01 00:10:29r'  c              	   C   s   t d|C tjd|i|d}tjd|i|d}tjtdd t||fi |  W d    n1 s3w   Y  W d    d S W d    d S 1 sKw   Y  d S )Nzfuture.infer_stringrd  rU  r  r   )r   rb   rc   r   r   r   r   )rk  rl  rh  r   r   r   r   r   #test_merge_asof_non_numerical_dtype7  s   "rm  c               	   C   sx   t g dg dd} t g dg dd}tjtdd t| |dd	d	d
d W d    d S 1 s5w   Y  d S )N)rR  1315r   )r   	left_val1)r  r  rf  r   r  r   rp  r   r   )r   r   r  r	  r
  r   r   r   r   r   *test_merge_asof_non_numerical_dtype_objectM  s   "rr  )r   r   	left_time)r   r   r   )r   r   c                 C   s   t g ddd}tjg dg dd|d}tjdg d	ig d	d}t||fi | }tjg dg dg d
d|d}t|| d S )Nr   testnamer   )r   r  r   )r   rs  rU  r   r   r   )r   rs  r   )r   rb   rc   r   r   r   )rk  r   r   r   r   r   r   r   r   test_merge_asof_index_behavior_  s   
rw  c                  C   s   t jdg ditg dddd} t jdg ditg d	ddd}t| |ddd
}t g dg dg dd}t|| d S )Nr   r   r  r  rm  r   ru  rU  r   rD        )r   r   r   r   r   r   )rb   rc   r   r   r   r   r   r   r   r   r   r   r   'test_merge_asof_numeric_column_in_indexu  s
   ""r~  c                  C   s   t jdg dit jjg dg dgddgdd} t jd	g d
it jjg dg dgddgdd}t| |ddd}t g dg dg d
d}t|| d S )Nr   rx  rm  r   r   r  )namesrU  r   ry  r  r  r|  )rb   rc   
MultiIndexfrom_arraysr   r   r   r}  r   r   r   ,test_merge_asof_numeric_column_in_multiindex  s   

r  c                  C   s   t jdg ditg dddd} t jdg ditg d	ddd}tjtd
d t| |ddd W d    n1 s<w   Y  |  ddg} | ddg}tjtd
d t| |ddd W d    d S 1 snw   Y  d S )Nr   rx  )r>  23r   ru  rU  r   ry  )mnor  r   r|  )	rb   rc   r   r   r   r   r   r   r   rq  r   r   r   3test_merge_asof_numeri_column_in_index_object_dtype  s    """r  c                 C   s   t jddgd|  dd}t ddg|d}t jt d	d
d| d}t dg di}t|||dddd}t g dtjddg|d}t	|| t||d|ddd}t ddg|ddgd}t	|| d S )Nz2021/01/01 00:37z2021/01/01 01:40r   r   r  r   r   )r   tsz2021/01/01 00:00r   1h)r  r  r  r   r   )r     r   r  Fbackward)r   r   r   r   )r   r   r  r  r  )r   r  r   )
rb   r>  rc   r  r/  r   r   r   r   r   )r   dtir   ts_merger   r   r   r   r   r   test_merge_asof_array_as_on  sJ   r  c                  C   s   t jg dgg dd} t jg dgg dd}tjtdd t| |dd	 W d    n1 s1w   Y  tjtdd t| |dd
d W d    n1 sPw   Y  tjtdd t| |ddd W d    d S 1 spw   Y  d S )N)r   r   r   )r   r   r   r[   )r   r   r   )r   r   r   zcolumn label 'a'r   r   r   r   r|  r   )rb   rc   r   r   r{  r   rq  r   r   r   +test_merge_asof_raise_for_duplicate_columns  s   "r  r  Int64zint64[pyarrow]ztimestamp[s][pyarrow]c                 C   s   t g dg dd}t g dg dd}|d| i}|d| i}t||dd}t g dg dtjdd	gd
}|d| i}t|| d S )N)r   r   r   rm  )join_colr   )r   r   r  )r  r   r  r   r(  r*  )r  r   r   )rb   rc   re   r   r   r   r   r   )r  r   r   r   r   r   r   r   test_merge_asof_extension_dtype  s*   

r  c                  C   sf   t jtdddgdd} t | dgd}t||dtdd}t | dgdgd	}t|| d S )
Ni  r   ztimestamp[us, UTC][pyarrow]r  )	timestampr-  r  rv  r  )r  r*  r+  )rb   Seriesr  rc   r   r   r   r   )serr   r   r   r   r   r   $test_merge_asof_pyarrow_td_tolerance  s    r  c                  C   sz   t jdgdgdd} t jdgdgdd}d| jjj_d|jjj_t| |ddd}t jdgdgd	dgd
}t	|| d S )Nr   r   )r   rv  r   r   FTr   rq  rU  )
rb   r  r   r:  flags	writeabler   rc   r   r   r}  r   r   r   !test_merge_asof_read_only_ndarray  s   r  c               
   C   s   t t jg dddgddgd dgd tdd} t t jddgddgddgd	 dd	gtd	d}t| |d
dgddddgd}t t jg dddgddgd dgd tdtjtjddgd}t|| d S )N)r   r   r   r   r   r   )
categoriesrd  r  r   )c1c2tvr   r  r  r  r   _left_right)r   r   r   suffixesr  )r  r  r  v_leftv_right)	rb   rc   r  ranger   r   r   r   r   r}  r   r   r   (test_merge_asof_multiby_with_categorical&  s>   	r  )(r  numpyr   r   r  pandas.util._test_decoratorsutil_test_decoratorstdpandasrb   r   r   r   r   r   pandas._testing_testingr   pandas.core.reshape.merger   rd  r   r   re  rf  r   
skip_if_norm  rr  rw  r~  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s    
                          4

,

