a
    Pf                 
   @   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   c/var/www/ai-form-bot/venv/lib/python3.9/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   s  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   s^    							
																		  v  yzTestAsOfMerge.asofc                 C   s  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 r|   r   rd   r   r   r   	toleranceg  s^    							
																		  v  y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  s    							







									  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  s    							







									  f  i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  sj    
	


	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   sZ   | ddg}| d}tjtdd  t||ddd W d    n1 sL0    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   sZ   | d}| ddg}tjtdd  t||ddd W d    n1 sL0    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   s\   | d}| d}d}tjt|d" t||dddd W d    n1 sN0    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   s\   | d}| d}d}tjt|d" t||dddd W d    n1 sN0    Y  d S )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    n1 s0    Y  d S )N20160602r   r   r   20160603r   r   k1k2rY   r   r   20160502      ?       @20160503      @      @r   r  r  value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  s0    

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    n1 sJ0    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  sZ    


z"TestAsOfMerge.test_multiby_indexedc              O   C   s  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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gMdJdKdL}|dM dN|dM< |dO dP|dO< |dQ dN|dQ< |dR dN|dR< | |}t j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gMddKdL}|dM dN|dM< |dO dP|dO< | |}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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g8d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   r1  647r.  98.62r1  )r2  r6   r1  r/   r.  r4  r1  )r2  r6   r1  50r"   r4  r1  )r2  r6   r1  70r"   r4  r1  )r2  r6   r1  1r"   r4  r1  )r2  r6   r1  62r"   r4  r1  )r2  r6   r1  rF   r"   r4  r1  )r2  r6   r1  r)   rI   r4  r1  )20160525 13:30:00.105r6   r1  r)   rI   r4  r1  )r9  r6   r1  700rI   r4  r1  )20160525 13:30:00.106r6   r1  61r.  r4  r1  )20160525 13:30:00.107r6   r1  r)   rI   r4  r1  )r=  r6   r1  53rI   r4  r1  )20160525 13:30:00.108r6   r1  r)   rI   r4  r1  )r?  r6   r1  839rI   r4  r1  )20160525 13:30:00.115r6   r1  5r.  r4  r1  )20160525 13:30:00.118r6   r1  295r.  r4  r1  )rC  r6   r1  rB  r.  r4  r1  )20160525 13:30:00.128r6   r1  r)   r"   r4  r1  )rE  r   rv   r)   rI   rv   rj   )20160525 13:30:00.129r6   r4  r)   r"   98.61r1  )rF  r6   r4  rF   r"   rG  r1  )rF  r6   r4  59r"   rG  r1  )rF  r6   r4  31r"   rG  r1  )rF  r6   r4  69r"   rG  r1  )rF  r6   r4  12r"   rG  r1  )rF  r6   r4  rK  r.  rG  r1  )rF  r6   r4  r)   rI   rG  r1  )20160525 13:30:00.130r   rj   317rI   51.93rj   )rL  r   rj   283rI   rN  rj   )20160525 13:30:00.135r   rN  r)   r.  rv   rj   )rP  r6   r4  r)   rI   rG  r4  )20160525 13:30:00.144r6   r4  rK  r"   rG  r4  )rQ  r6   r4  88r"   rG  r4  )rQ  r6   r4  162r"   rG  r4  )rQ  r6   rG  r)   r  rG  r4  )rQ  r6   r4  r<  rI   rG  r4  )rQ  r6   r4  25rI   rG  r4  )rQ  r6   r4  14rI   rG  r4  )20160525 13:30:00.145r6   r4  rK  rI   98.6r1  )rV  r6   r4  r)   rI   rW  r1  )rV  r6   r1  r)   r"   rW  r1  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   r-  r.  )r/  r6   rL   r0  rI   )r2  r6   98.6300r3  r.  )r2  r6   rX  r/   r.  )r2  r6   rX  r5  r"   )r2  r6   rX  r6  r"   )r2  r6   rX  r7  r"   )r2  r6   rX  r8  r"   )r2  r6   rX  rF   r"   )r2  r6   rX  r)   rI   )r9  r6   rX  r)   rI   )r9  r6   rX  r:  rI   )r;  r6   rX  r<  r.  )r=  r6   rX  r)   rI   )r=  r6   rX  r>  rI   )r?  r6   rX  r)   rI   )r?  r6   rX  r@  rI   )rA  r6   rX  rB  r.  )rC  r6   rX  rD  r.  )rC  r6   rX  rB  r.  )rE  r6   rX  r)   r"   )rE  r   z51.9200r)   rI   )rF  r6   98.6200r)   r"   )rF  r6   rY  rF   r"   )rF  r6   rY  rH  r"   )rF  r6   rY  rI  r"   )rF  r6   rY  rJ  r"   )rF  r6   rY  rK  r"   )rF  r6   rY  rK  r.  )rF  r6   rY  r)   rI   )rL  r   r    rM  rI   )rL  r   r    rO  rI   )rP  r   z51.9300r)   r.  )rP  r6   rY  r)   rI   )rQ  r6   rY  rK  r"   )rQ  r6   rY  rR  r"   )rQ  r6   rY  rS  r"   )rQ  r6   z98.6100r)   r  )rQ  r6   rY  r<  rI   )rQ  r6   rY  rT  rI   )rQ  r6   rY  rU  rI   )rV  r6   rY  rK  rI   )rV  r6   rY  r)   rI   )rV  r6   rX  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   )r/  r6   rq   r1  )z20160525 13:30:00.088r6   r   r1  )z20160525 13:30:00.089r6   r1  r1  )r2  r6   r1  r1  )r2  r6   r4  r1  )r9  r6   r4  r1  )r=  r6   r4  r1  )rA  r6   r4  r1  )rC  r6   r4  r1  )rE  r6   r4  r1  )rF  r6   r4  r1  )rF  r6   rG  r1  )rL  r   rN  rj   )rL  r6   rG  r1  )z20160525 13:30:00.131r6   rG  r4  )rP  r   rv   rj   )rP  r6   rG  r4  )z20160525 13:30:00.136r6   rG  r4  )rQ  r6   rG  r4  )rV  r6   rG  r4  )rV  r6   rG  r1  )rV  r6   z98.60r1  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  s   							
																																																																				          <          ?
OR
:=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:0    Y  t jtdd$ t||ddgdd W d    n1 s|0    Y  t jtdd t||dd	 W d    n1 s0    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    02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   )rf  r   rf  r   )rf  r   r   r   r   df1df2r   r   r   r   r   test_with_duplicates_no_on~	  s    z(TestAsOfMerge.test_with_duplicates_no_onc                 C   sH   d}t jt|d" t||dddd W d    n1 s:0    Y  d S )Nz/allow_exact_matches must be boolean, passed foor   r   r   foor   r   r   r`  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 sj0    Y  tjt|d* t | | ddd	d W d    n1 s0    Y  d
}tjt|d( t ||ddtd d W d    n1 s0    Y  tjt|d* t | | dddd W d    n1 sF0    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	  s@    0$$z"TestAsOfMerge.test_valid_tolerancec                 C   s  |j ddd}|j ddd}|jjr(J |jjr4J tjtdd  t||ddd W d    n1 sh0    Y  | d}|jjsJ |jjrJ tjtdd  t||ddd W d    n1 s0    Y  | d}|jjsJ |jjsJ t||ddd d S )	Nr   F)Z	ascendingzleft keys must be sortedr   r   r   zright keys must be sorted)rc  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   rs  re   r{   r   r   r   r   r   r   test_tolerance	  s
    
zTestAsOfMerge.test_tolerancec                 C   st   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   rx  r   r   r   r   r   r   r   r   r   r   r   test_tolerance_forward	  s    z$TestAsOfMerge.test_tolerance_forwardc                 C   st   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   rw  r   r   rx  r   r   r   ry  r   r   r   r   r   test_tolerance_nearest	  s    z$TestAsOfMerge.test_tolerance_nearestc              	   C   s   t t jtdddtd|dtdd}t t jtdddtd|dtdd	}t	||d
t
dd}t t jtdddtd|dtdtdd}t|| d S )Nz
2016-01-02Dr   UTC)startfreqperiodstzr   )datevalue1z
2016-01-01ZABCDE)r  value2r  z1 dayr   r   ZBCDEE)r  r  r  )r`   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         ?ry  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   rt  )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   Frl  r   )r   re   r{   r   r   r   r   r   r   test_allow_exact_matchesG
  s
    
z&TestAsOfMerge.test_allow_exact_matchesc                 C   sp   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   rw  r   )r   r   rx  r   r   r   Fr   r   r   r   r   r   r   r    test_allow_exact_matches_forwardN
  s    
z.TestAsOfMerge.test_allow_exact_matches_forwardc                 C   sp   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   rw  r   )r   r   rx  r   r   r   Fr  r   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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   rg  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   rg  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   rx  r   r   rx  r   r   r   Fr   r   r   r   r   r   r   r   r   r   .test_allow_exact_matches_and_tolerance_forward
  s    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   rx  r   r  rx  r   r   r   Fr   r  r   r   r   r   r   .test_allow_exact_matches_and_tolerance_nearest
  s    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   rx  r     )r  r  r  r  r  r   r   r   r   rx  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   rx  rx  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   rf  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   rf  r  r   rf  r   )r  r  r  r  r  )r   rf  r  r  )r`   ra   r   r   r   r   rg  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  rc  r   r   r   r   rg  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&  rc  r   r   r   r   r   Zany_real_numpy_dtyper  rh  ri  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&  rf  r  )r  rf  r&  rY   r  )r   r   r   r   r  )r&  rf  r   r&  Tr   rf  r   r  )r   r   r   r   r   r   r   r  r\  y)r  rf  r&  r   )r   r  r  r`   ra   r  r&  rc  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  rg  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    n1 sp0    Y  d S )Nr'  @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   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    n1 sr0    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   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]  3      zTestAsOfMerge.<lambda>c                 C   s   t | S r  )r   r[  r   r   r   r]  3  r  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
6 |dkrxt||dd nt||dd W d    n1 s0    Y  d S )Nz"Merge keys contain null values on z sider   r  )r   r  g      $@r   r   )r   r   rx  r   r   r   r   r   )r   r   r`   ra   r   r   rq  r   )r   r  r  r   ZnullsZ	non_nullsZ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 r4t|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< |r|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  r^  r  r  r  r   r   r  r  r  value_xvalue_ystring[pyarrow_numpy])r`   arrayZNAr  kindr   ZiinfoZnumpy_dtypemaxZfinfora   r   r   r  rc   r   r   )	r   Zany_numeric_ea_dtyper  ZarrZ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   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_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 )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  re  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'  r(  z2019-10-01 00:30:00r   )r   r   r   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   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~  r+  r   val1rk  r)  val2bar)r-  r.  Tr  )r   r   r   )r   r   r`   r  r   Zas_unitra   r  r   r   r   )r   r   Zdr1Zdr2rh  ri  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*  rZ  r_  ra  rd  rj  rm  rp  rr  r   r  	timedeltarv  rz  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*  r0  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|t tjd|i|d}tjd|i|d}tjtdd" t||fi |  W d    n1 sf0    Y  W d    n1 s0    Y  d S )Nzfuture.infer_stringr\  r)  r  r   )r   r`   ra   r   r   r   r   )r9  r:  r8  r   r   r   r   r   #test_merge_asof_non_numerical_dtype7  s    r;  c               	   C   sv   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    n1 sh0    Y  d S )N)rK  Z13Z15r   )r   	left_val1)r  r  r^  r   r  r   r<  r   r   )r   r   r  r  r  r   r   r   r   r   *test_merge_asof_non_numerical_dtype_objectM  s    r>  )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   r?  r)  r   r   r   )r   r?  r   )r   r`   ra   r   r   r   )r9  r   r   r   r   r   r   r   r   test_merge_asof_index_behavior_  s    
rC  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   rx  r  re  r   rA  r)  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_indexu  s
    ""rJ  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   rD  re  r   r   r  )namesr)  r   rE  r  r  rH  )r`   ra   Z
MultiIndexZfrom_arraysr   r   r   rI  r   r   r   ,test_merge_asof_numeric_column_in_multiindex  s    

rL  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 sx0    Y  |  ddg} | ddg}tjtd
d  t| |ddd W d    n1 s0    Y  d S )Nr   rD  )r7  23r   rA  r)  r   rE  )mnor  r   rH  )	r`   ra   r   r   r   r   r   r   r   r=  r   r   r   3test_merge_asof_numeri_column_in_index_object_dtype  s    "".rR  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   rS  FZbackward)r   r   r   r   )r   r   rS  r  rT  )r   rS  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    rU  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 sb0    Y  tjtdd  t| |dd
d W d    n1 s0    Y  tjtdd  t| |ddd W d    n1 s0    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   rH  r   )r`   ra   r   r   rq  r   r=  r   r   r   +test_merge_asof_raise_for_duplicate_columns  s    ,.rV  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   re  )join_colr   )r   r   r  )rW  r   rW  r   r!  r#  )rW  r   r   )r`   ra   rc   r   r   r   r   r   )r  r   r   r   r   r   r   r   test_merge_asof_extension_dtype  s*    

rX  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&  rY  rn  r  )rY  r  r  )r`   Seriesr  ra   r   r   r   r   )Z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   rB  r   r   FTr   r=  r)  )
r`   rZ  r   r  flagsZ	writeabler   ra   r   r   rI  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   )
categoriesr\  r  r   )c1c2tvr   r_  r`  ra  r   _left_right)r   r   r   suffixesr  )r_  r`  ra  Zv_leftZv_right)	r`   ra   r  ranger   r   r   r   r   rI  r   r   r   (test_merge_asof_multiby_with_categorical&  s>    	rg  )(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   r4  r   r   r5  r6  r   Z
skip_if_nor;  r>  rC  rJ  rL  rR  rU  rV  rX  r[  r]  rg  r   r   r   r   <module>   s   
                          4

,

