o
    %jy                 
   @   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   k/var/www/html/Deteccion_Ine/venv/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)ZkeepTdrop)Z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.075r6   r7   r8   r"   r:   r6   z98.66006r"   r:   r6   98.650030r"   r:   r6   r>   r!   r"   r:   r6   r>   20r"   r:   r6   r>   35r"   r:   r6   r>   10r"   r:   r6   98.5500r<   ARCA20160525 13:30:00.076r6   98.56001000rI   rK   r6   rL   r-   rI   rK   r6   rL   r/   rI   rK   r6   rL   400rI   rK   r6   rL   r1   rI   20160525 13:30:00.078r   r    783r"   rT   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.95rj   20160525 13:30:00.041r   rj   rj   r'   r(   rg   rh   20160525 13:30:00.072r(   rg   z720.88r:   r6   98.5598.56rK   r6   rq   rr   rT   r   rj   rj   rT   r   51.92rj   time,ticker,bid,askrX   rY   bidr\   askTr   r_   rd   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   rj   r!   r"   rj   rj   r$   r   rj   r%   r"   rj   rj   r'   r(   z720.77r)   r"   720.5rh   r'   r(   z720.92r)   r"   r   rh   r'   r(   rh   r-   r"   r   rh   r'   r(   rh   r/   r"   r   rh   r'   r(   rh   r1   r"   r   rh   r'   r(   rh   r3   r"   r   rh   r5   r6   98.67r8   r"   r:   r6   r   r8   r"   rq   rr   r:   r6   98.66r<   r"   rq   rr   r:   r6   98.65r?   r"   rq   rr   r:   r6   r   r!   r"   rq   rr   r:   r6   r   rB   r"   rq   rr   r:   r6   r   rD   r"   rq   rr   r:   r6   r   rF   r"   rq   rr   r:   r6   rq   r<   rI   rq   rr   rK   r6   rr   rM   rI   rq   rr   rK   r6   rr   r-   rI   rq   rr   rK   r6   rr   r/   rI   rq   rr   rK   r6   rr   rQ   rI   rq   rr   rK   r6   rr   r1   rI   rq   rr   rT   r   rj   rU   r"   rv   rj   rT   r   rj   r)   r"   rv   rj   /time,ticker,price,quantity,marketCenter,bid,askrX   rY   r[   r\   r]   r^   rx   ry   r`   ra   npnanrb   rc   r   rd   r   r   r   asofg   ^   							
																		  v  y
zTestAsOfMerge.asofc                 C   r|   r}   r   rd   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   rj   r!   r"   r   r   r   r   r   r   r   r5   r6   r   r8   r:   r   r<   r   r?   rB   rD   rF   rq   rI   r   r   r   r   r   )rT   r   rj   rU   r"   rj   rj   )rT   r   rj   r)   r"   rj   rj   r   rX   rY   r[   r\   r]   r^   rx   ry   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   rd   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r`   ra   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(   r6   皙I@r   g\(@(\@g     X@K      d   r   r   )r   r   r[   r]   rY   )r   r   20160525 13:30:00.030rl   r'   20160525 13:30:00.049ro   r:   )r(   r   r   r   r(   r6   r(   r   )     @r   \(I@QI@r   (\X@r   gzGJ@)=
ףp@{GI@=
ףpI@      J@r   q=
ףX@gףp=
@gp=
J@)r   r   rx   ry   r   r   r   byZ2msr   r   r   r   r   )r   r   r[   r]   rx   ry   10msFr   r   r   r   N)pytestskipr`   ra   r   rc   r   r   r   r   r   r   )r   r   re   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r`   ra   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   re   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   rc   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   indexrZ   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   re   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   rx   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   re   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   rx   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   rx   ry   )r   r   r   r   locr   r   )r   re   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   rI   NSDQr  BATSr  r   r   r   r   exchr[   r]   rY   r   r   r   rl   z20160525 13:30:00.045r   )r(   r   r   r   r(   r6   r  r  rI   rI   r  rI   Gz@r   r   r   r   r   r   r   r   r   r   r   r   r   r  rx   ry   r   r   r  r   r   r   r   r   r  r[   r]   rx   ry   r   r   r  r   )r`   ra   r   r   r   r   r   r   )r   re   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  rY   )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`   ra   r   rc   r   r   r   r   r   )r   r  re   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k2rY   r   r   20160502      ?       @20160503      @      @r   r!  r"  valuezincompatible merge keysr   Tr!  r"  r   )
r`   ra   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   rY   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  )
r`   ra   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   r5   r6   r   r8   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )20160525 13:30:00.084r6   z98.6440r"   rq   rr   )r.  r6   rq   149EDGXrq   rr   )20160525 13:30:00.086r6   rr   500rI   rq   98.63)20160525 13:30:00.104r6   r4  647r1  98.62r4  )r5  r6   r4  r/   r1  r7  r4  )r5  r6   r4  50r"   r7  r4  )r5  r6   r4  70r"   r7  r4  )r5  r6   r4  1r"   r7  r4  )r5  r6   r4  62r"   r7  r4  )r5  r6   r4  rF   r"   r7  r4  )r5  r6   r4  r)   rI   r7  r4  )20160525 13:30:00.105r6   r4  r)   rI   r7  r4  )r<  r6   r4  700rI   r7  r4  )20160525 13:30:00.106r6   r4  61r1  r7  r4  )20160525 13:30:00.107r6   r4  r)   rI   r7  r4  )r@  r6   r4  53rI   r7  r4  )20160525 13:30:00.108r6   r4  r)   rI   r7  r4  )rB  r6   r4  839rI   r7  r4  )20160525 13:30:00.115r6   r4  5r1  r7  r4  )20160525 13:30:00.118r6   r4  295r1  r7  r4  )rF  r6   r4  rE  r1  r7  r4  )20160525 13:30:00.128r6   r4  r)   r"   r7  r4  )rH  r   rv   r)   rI   rv   rj   )20160525 13:30:00.129r6   r7  r)   r"   98.61r4  )rI  r6   r7  rF   r"   rJ  r4  )rI  r6   r7  59r"   rJ  r4  )rI  r6   r7  31r"   rJ  r4  )rI  r6   r7  69r"   rJ  r4  )rI  r6   r7  12r"   rJ  r4  )rI  r6   r7  rN  r1  rJ  r4  )rI  r6   r7  r)   rI   rJ  r4  )20160525 13:30:00.130r   rj   317rI   51.93rj   )rO  r   rj   283rI   rQ  rj   )20160525 13:30:00.135r   rQ  r)   r1  rv   rj   )rS  r6   r7  r)   rI   rJ  r7  )20160525 13:30:00.144r6   r7  rN  r"   rJ  r7  )rT  r6   r7  88r"   rJ  r7  )rT  r6   r7  162r"   rJ  r7  )rT  r6   rJ  r)   r  rJ  r7  )rT  r6   r7  r?  rI   rJ  r7  )rT  r6   r7  25rI   rJ  r7  )rT  r6   r7  14rI   rJ  r7  )20160525 13:30:00.145r6   r7  rN  rI   98.6r4  )rY  r6   r7  r)   rI   rZ  r4  )rY  r6   r4  r)   r"   rZ  r4  r   rX   rY   r[   r\   r]   r^   rx   ry   r   r#   r&   r*   r+   r.   r0   r2   r4   r9   r;   r=   r@   rA   rC   rE   rG   rJ   rN   rO   rP   rR   rS   rV   )r.  r6   z98.6400r/  r"   )r.  r6   rH   r0  r1  )r2  r6   rL   r3  rI   )r5  r6   98.6300r6  r1  )r5  r6   r[  r/   r1  )r5  r6   r[  r8  r"   )r5  r6   r[  r9  r"   )r5  r6   r[  r:  r"   )r5  r6   r[  r;  r"   )r5  r6   r[  rF   r"   )r5  r6   r[  r)   rI   )r<  r6   r[  r)   rI   )r<  r6   r[  r=  rI   )r>  r6   r[  r?  r1  )r@  r6   r[  r)   rI   )r@  r6   r[  rA  rI   )rB  r6   r[  r)   rI   )rB  r6   r[  rC  rI   )rD  r6   r[  rE  r1  )rF  r6   r[  rG  r1  )rF  r6   r[  rE  r1  )rH  r6   r[  r)   r"   )rH  r   z51.9200r)   rI   )rI  r6   98.6200r)   r"   )rI  r6   r\  rF   r"   )rI  r6   r\  rK  r"   )rI  r6   r\  rL  r"   )rI  r6   r\  rM  r"   )rI  r6   r\  rN  r"   )rI  r6   r\  rN  r1  )rI  r6   r\  r)   rI   )rO  r   r    rP  rI   )rO  r   r    rR  rI   )rS  r   z51.9300r)   r1  )rS  r6   r\  r)   rI   )rT  r6   r\  rN  r"   )rT  r6   r\  rU  r"   )rT  r6   r\  rV  r"   )rT  r6   z98.6100r)   r  )rT  r6   r\  r?  rI   )rT  r6   r\  rW  rI   )rT  r6   r\  rX  rI   )rY  r6   r\  rN  rI   )rY  r6   r\  r)   rI   )rY  r6   r[  r)   r"   rW   rf   ri   rk   rm   rn   rp   rs   rt   ru   )z20160525 13:30:00.079r   rv   rj   )z20160525 13:30:00.080r6   rq   rr   )r.  r6   rq   rr   )r2  r6   rq   r4  )z20160525 13:30:00.088r6   r   r4  )z20160525 13:30:00.089r6   r4  r4  )r5  r6   r4  r4  )r5  r6   r7  r4  )r<  r6   r7  r4  )r@  r6   r7  r4  )rD  r6   r7  r4  )rF  r6   r7  r4  )rH  r6   r7  r4  )rI  r6   r7  r4  )rI  r6   rJ  r4  )rO  r   rQ  rj   )rO  r6   rJ  r4  )z20160525 13:30:00.131r6   rJ  r7  )rS  r   rv   rj   )rS  r6   rJ  r7  )z20160525 13:30:00.136r6   rJ  r7  )rT  r6   rJ  r7  )rY  r6   rJ  r7  )rY  r6   rJ  r4  )rY  r6   z98.60r4  rw   Trz   r   r   r   )
r`   ra   r   r   rb   rc   r   r   r   r   )r   r   r   re   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   )ZaxisTr   )r   r   r   xr   r   r   <lambda>[	  s
    z0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>r   r   r   )r   re   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   rx   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   )r`   concatsort_valuesr   r   r   r   r   )r   r   re   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   )ri  r   ri  r   )ri  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   rc  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)Z	ascendingzleft keys must be sortedr   r   r   zright keys must be sorted)rf  r   Z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)Zidsc                 C   s&   t ||dd|d}|}t|| d S )Nr   r   r   r   )r   rv  re   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   rz  )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-01ZABCDE)r  value2r  z1 dayr   r   ZBCDEE)r  r  r  )r`   ra   
date_ranger   pytztimezoner   Z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   rw  )r   r   r   r   )r   r   r   r   r   )r   re   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   Fro  r   )r   re   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   Z100msFr   )r   r   r   r   )r   re   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   )	r`   ra   r   r   r   r   r   r   r   rj  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  Zcharlier  r  r   r   r  r   Fr   r  r  )	r`   ra   r   r   r   r   r   r   r   rj  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   ri  r  rY   )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   ri  r  r   ri  r   )r  r  r  r  r  )r   ri  r  r  )r`   ra   r   r   r   r   rj  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[   rY   )        r$        Y@)-C6?{Gz?皙?)r[   mpvr  Tr   r   ZBGACEDF)r  r  r  r  r  r  r  )r  r  r  r  r  r  r  )r  r[   r  r`   ra   r  rf  r   r   r   r   rj  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*  rY   r   P   r  }   xyzw)r*  r   r   Tr   r   BACEGDFr   r   r  r  r  r   r  Zxxxxxyz)r  r*  r   )r   r  typer`   ra   r  r*  rf  r   r   r   r   r   Zany_real_numpy_dtyper  rk  rl  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*  ri  r  )r  ri  r*  rY   r  )r   r   r   r   r  )r*  ri  r   r*  Tr   ri  r   r  )r   r   r   r   r   r   r   r  r_  y)r  ri  r*  r   )r   r  r  r`   ra   r  r*  rf  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 )NZ	AAABBBCCC)	r   r   r   r   r   r   r   r   r   )	Gz
@ׁsF
@
@)\()@Gz.)@      )@fffffw@33333w@     w@)r  r  r[   rY   )	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  rj  r   r   r   test_on_float_by_int  s4   	z"TestAsOfMerge.test_on_float_by_intc                 C   sv   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 s4w   Y  d S )
N@Incompatible merge dtype, .*, both sides must have numeric dtyper   r   r   r   r   r   r   r   r   r   r`   ra   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 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   )r`   ra   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   )r`   ra   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   r^  r   r   r   r`  0  s    zTestAsOfMerge.<lambda>c                 C   s   t | S r  )r   r^  r   r   r   r`  0  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   r`   ra   r   r   rt  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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ToZYou)r   r  r   )r   r   r  by_col1by_col2on_colr*  )WORLDZWideZWeb)r   r   r   )r   r  ra  r  r  r  r   r   r  r  r  value_xvalue_ystr)r`   arrayZNAr  kindr   ZiinfoZnumpy_dtypemaxZfinfora   r   r   r  rc   r   r   )	r   Zany_numeric_ea_dtypeusing_infer_stringZarrZmax_valr   r   r   r   r   r   r   test_by_nullableA  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   r  r  r  r  )r  r  Zvalues_xZvalues_yrY   )r`   ra   DatetimeIndextz_localizer   r+  r   r   )r   r   r   r   r   r   r   r   test_merge_by_col_tz_awareo  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 )Nr  r  r
  r   r   r  r  r   r   r  r  r  r  r  r  rY   r  r  r  )r`   ra   r  r   r   r+  r   r  r   r  rc   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\   Z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   )r  r  r*  r   r  r  r  )r  r  r  r  )r`   ra   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   rY   r	   zm8[r   )r   r   	   r  r     r   r   r   r  )r   r   r   Z1msr   )r   r   r   )r   r   r`   ra   r  zipZto_timedeltarc   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   r$  rh  r   )r   r  r  r   r   r$  r%  r   r   r  )r`   ra   rc   r   r   r   r   r   )r   Z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-01Z30minr   r  )r  r  r  )?皙?ffffff?333333?xyzr   )rZ   r   gGz@r  gQ@)	from_dateabcTr/  )r   r   r   r   r   )r.  r/  r0  z2019-10-01 00:30:00r   )r   r   r   r   r*  r+  r,  r-  )r/  r0  r.  )r   r   r   r   r  )	r`   r  ra   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/2020Z2D)r  endr  r   g?)secondsz2/1/2020)r  r3  r   val1rn  r1  val2bar)r5  r6  Tr  )r   r   r   )r   r   r`   r  r   Zas_unitra   r  r   r   r   )r   r   Zdr1Zdr2rk  rl  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   fixturere   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  markparametrizer  r,  r-  r]  rb  rd  rg  rm  rp  rs  ru  r   r  	timedeltary  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)  r2  r8  r   r   r   r   r      s    

%

  
  
 p
 pY		

		A
D2      a
	.
+2%=$9	.
)!r   infer_stringFTZpyarrow)Zmarkskwargsr   r_  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_stringr_  r1  r  r   )r   r`   ra   r   r   r   r   )rA  rB  r@  r   r   r   r   r   #test_merge_asof_non_numerical_dtype4  s   "rC  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)rN  Z13Z15r   )r   	left_val1)r  r  ra  r   r  r   rD  r   r   )r   r   r  r  r  r   r   r   r   r   *test_merge_asof_non_numerical_dtype_objectJ  s   "rF  )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   rG  r1  r   r   r   )r   rG  r   )r   r`   ra   r   r   r   )rA  r   r   r   r   r   r   r   r   test_merge_asof_index_behavior\  s   
rK  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  rh  r   rI  r1  r   r$        )r   r   r   r   r   r   )r`   ra   r   r   r   r   r   r   r   r   r   r   r   'test_merge_asof_numeric_column_in_indexr  s
   ""rR  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   rL  rh  r   r   r  )namesr1  r   rM  r  r  rP  )r`   ra   Z
MultiIndexZfrom_arraysr   r   r   rQ  r   r   r   ,test_merge_asof_numeric_column_in_multiindex|  s   

rT  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   rL  )r:  23r   rI  r1  r   rM  )mnor  r   rP  )	r`   ra   r   r   r   r   r   r   r   rE  r   r   r   3test_merge_asof_numeri_column_in_index_object_dtype  s    """rZ  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   Z1h)r  r  r  r   r   )r     r   r[  FZbackward)r   r   r   r   )r   r   r[  r  r\  )r   r[  r   )
r`   r  ra   r  r+  r   r   r   r   r   )r   Zdtir   Z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   rY   )r   r   r   )r   r   r   zcolumn label 'a'r   r   r   r   rP  r   )r`   ra   r   r   rt  r   rE  r   r   r   +test_merge_asof_raise_for_duplicate_columns  s   "r^  r  Z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   rh  )join_colr   )r   r   r  )r_  r   r_  r   r%  r'  )r_  r   r   )r`   ra   rc   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*  ra  rq  r  )ra  r  r  )r`   Seriesr  ra   r   r   r   r   )Zserr   r   r   r   r   r   $test_merge_asof_pyarrow_td_tolerance   s    rc  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   rJ  r   r   FTr   rE  r1  )
r`   rb  r   r  flagsZ	writeabler   ra   r   r   rQ  r   r   r   !test_merge_asof_read_only_ndarray  s   re  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   )
categoriesr_  r  r   )c1c2tvr   rg  rh  ri  r   _left_right)r   r   r   suffixesr  )rg  rh  ri  Zv_leftZv_right)	r`   ra   r  ranger   r   r   r   r   rQ  r   r   r   (test_merge_asof_multiby_with_categorical#  s>   	ro  )(r  numpyr   r   r  Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr`   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.reshape.merger   r<  r   r   r=  r>  r   Z
skip_if_norC  rF  rK  rR  rT  rZ  r]  r^  r`  rc  re  ro  r   r   r   r   <module>   s    
                          1

,

