
    Owg                    l   d dl Z d dlZd dlZd dlZd dlmc 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        Z G d d      Zej0                  j3                  d	d
 ej4                  d ej6                  d            g      ej0                  j3                  dddidddg      ej0                  j3                  dddgddgg      d                      Zd Zej0                  j3                  ddddddddddg      d        Zd Zd Z d  Z!d! Z"d" Z#ej0                  j3                  d#d$ ej4                  d% ej6                  d             ej4                  d& ej6                  d            g      d'        Z$ ej6                  d      d(        Z%d) Z&d* Z'y)+    N)Index	Timedelta
merge_asofoption_contextto_datetime)
MergeError)smsusns)paramsc                     | j                   S )z-
    Resolution for datetimelike dtypes.
    )param)requests    a/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/reshape/merge/test_merge_asof.pyunitr      s    
 ==    c                      e Zd ZdXdZej
                  d        Zej
                  d        Zej
                  d        Zej
                  d        Z	ej
                  d        Z
ej
                  d        Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej8                  j;                  dddg      d        Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(ej8                  j;                  d& e)d'       e*jV                  d()      gd*d+g,      d-        Z,d. Z-d/ Z.d0 Z/d1 Z0d2 Z1d3 Z2d4 Z3d5 Z4d6 Z5d7 Z6d8 Z7d9 Z8d: Z9d; Z:d< Z;d= Z<d> Z=d? Z>d@ Z?dA Z@dB ZAdC ZBdD ZCej8                  j;                  dEdF dG gdHdIg,      ej8                  j;                  dJdKdLg      dM               ZDdN ZEdO ZFdP ZGej8                  j;                  dg dQ      dR        ZHdS ZIdT ZJdU ZKdV ZLyW)YTestAsOfMergec                     |r%|j                  ddgd      j                  d      }t        |j                        |_        |S )Ntimetickerlast)keepTdrop)drop_duplicatesreset_indexr   r   )selfdfdedupes      r   	prep_datazTestAsOfMerge.prep_data   sJ    ##VX$6V#DPP Q B bgg&	r   c                 n   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j                  d            }|d   j                  d      |d<   |d   j                  d      |d<   | j	                  |      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.9200r0   r)   r.   r/   720.9300200r)   r.   r/   r3   300r)   r.   r/   r3   600r)   r.   r/   r3   44r)   20160525 13:30:00.074AAPL98.6700478343r)   20160525 13:30:00.075r=   r>   r?   r)   rA   r=   z98.66006r)   rA   r=   98.650030r)   rA   r=   rE   r(   r)   rA   r=   rE   20r)   rA   r=   rE   35r)   rA   r=   rE   10r)   rA   r=   98.5500rC   ARCA20160525 13:30:00.076r=   98.56001000rP   rR   r=   rS   r4   rP   rR   r=   rS   r6   rP   rR   r=   rS   400rP   rR   r=   rS   r8   rP   20160525 13:30:00.078r&   r'   783r)   r[   r&   r'   r0   r)   'time,ticker,price,quantity,marketCenter,columnspricefloat64quantityint64pd	DataFramesplitastyper"   r   r    s     r   tradeszTestAsOfMerge.trades&   s    \\LMNNNNNMPPKLLLLLIILKKKKKMMM7: >CCCH=
@ k((37J..w7:~~b!!r   c                 0   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
j                  d            }|d   j                  d      |d<   |d   j                  d      |d<   | j	                  |d      S )Nr%   r/   720.50720.93r%   r&   51.95rr   20160525 13:30:00.041r&   rr   rr   r.   r/   ro   rp   20160525 13:30:00.072r/   ro   z720.88rA   r=   98.5598.56rR   r=   ry   rz   r[   r&   rr   rr   r[   r&   51.92rr   time,ticker,bid,askr_   r`   bidrc   askTr!   rf   rk   s     r   quoteszTestAsOfMerge.quotesL   s    \\ECCEEEEECCCCCCCC!$ *//4'
* uI$$Y/5	uI$$Y/5	~~b~..r   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j	                  d            }|d    j                  d!      |d <   |d"   j                  d#      |d"<   |d$   j                  d!      |d$<   |d%   j                  d!      |d%<   | j                  |      S &Nr%   r&   rr   r(   r)   rr   rr   r+   r&   rr   r,   r)   rr   rr   r.   r/   z720.77r0   r)   720.5rp   r.   r/   z720.92r0   r)   r   rp   r.   r/   rp   r4   r)   r   rp   r.   r/   rp   r6   r)   r   rp   r.   r/   rp   r8   r)   r   rp   r.   r/   rp   r:   r)   r   rp   r<   r=   98.67r?   r)   rA   r=   r   r?   r)   ry   rz   rA   r=   98.66rC   r)   ry   rz   rA   r=   98.65rF   r)   ry   rz   rA   r=   r   r(   r)   ry   rz   rA   r=   r   rI   r)   ry   rz   rA   r=   r   rK   r)   ry   rz   rA   r=   r   rM   r)   ry   rz   rA   r=   ry   rC   rP   ry   rz   rR   r=   rz   rT   rP   ry   rz   rR   r=   rz   r4   rP   ry   rz   rR   r=   rz   r6   rP   ry   rz   rR   r=   rz   rX   rP   ry   rz   rR   r=   rz   r8   rP   ry   rz   r[   r&   rr   r\   r)   r~   rr   r[   r&   rr   r0   r)   r~   rr   /time,ticker,price,quantity,marketCenter,bid,askr_   r`   rb   rc   rd   re   r   r   rg   rh   npnanri   rj   r"   rk   s     r   asofzTestAsOfMerge.asofg   C   \\ ,FFFFWtj FKKCPmw
p k((37J..w7:uI$$Y/5	uI$$Y/5	~~b!!r   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j	                  d            }|d    j                  d!      |d <   |d"   j                  d#      |d"<   |d$   j                  d!      |d$<   |d%   j                  d!      |d%<   | j                  |      S r   r   rk   s     r   	tolerancezTestAsOfMerge.toleranceg  r   r   c                    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"j	                  d#      $      }|d%   j                  d&      |d%<   |d'   j                  d(      |d'<   |d)   j                  d&      |d)<   |d*   j                  d&      |d*<   | j                  |      S +Nr%   r&   rr   r(   r)   r   r   r   r   r   r   r   r<   r=   r   r?   rA   r   rC   r   rF   rI   rK   rM   ry   rP   r   r   r   r   r   )r[   r&   rr   r\   r)   rr   rr   )r[   r&   rr   r0   r)   rr   rr   r   r_   r`   rb   rc   rd   re   r   r   r   )r   datapathr    s      r   allow_exact_matchesz!TestAsOfMerge.allow_exact_matchesg  m   \\ ,FFFF ,FFFF ,FFFF ,FFFF ,FFFF ,FFFF ,FFFF ,FFFF ,FFFF )&'3PRPVPVW(&'3PRPVPVWwdJ FKKCPMg
P k((37J..w7:uI$$Y/5	uI$$Y/5	~~b!!r   c                    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"j	                  d#      $      }|d%   j                  d&      |d%<   |d'   j                  d(      |d'<   |d)   j                  d&      |d)<   |d*   j                  d&      |d*<   | j                  |      S r   r   rk   s     r   !allow_exact_matches_and_tolerancez/TestAsOfMerge.allow_exact_matches_and_toleranceW  r   r   c                     t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg dg dd      }t        ||d	      }t        j                  ||       y
)doc-string examples      
   abcr   left_valr               r   	right_valr   r   r   r   r   r   r   onNrg   rh   r   tmassert_frame_equalr   leftrightexpectedresults        r   test_examples1zTestAsOfMerge.test_examples1G  s`    ||*/JK?QR<</	R
 D%C0
fh/r   c                 l   |dk(  rt        j                  d       t        j                  t	        g d      j                  d| d      g dg dg dd	g d	
      }t        j                  t	        g d      j                  d| d      g dg dg ddg d
      }t        ||dd       t        ||ddt        d             t        j                  t	        g d      j                  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
      }t        ||ddt        d      d      }t        j                  ||       y)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/   r=   皙I@r   g\(@(\@g     X@K      d   r   r   )r   r   rb   rd   r`   )r%   r%   20160525 13:30:00.030rt   r.   20160525 13:30:00.049rw   rA   )r/   r&   r&   r&   r/   r=   r/   r&   )     @r   \(I@QI@r   (\X@r   gzGJ@)=
ףp@{GI@=
ףpI@      J@r   q=
ףX@gףp=
@gp=
J@)r   r   r   r   r   r   r   by2msr   r   r   r   r   )r   r   rb   rd   r   r   10msFr   r   r   r   N)pytestskiprg   rh   r   rj   r   r   r   r   r   r   )r   r   rl   r   r   r   s         r   test_examples2zTestAsOfMerge.test_examples2S  s   3;KK, # &3tfA'B>4 <
$ #	 &3tfA'	 SR14 57
< 	66f:66fYuEUV<<# &3tfA'B>4rvvrvvrvv>rvvrvvrvv>  J#
( ' %
 	fh/r   c                    t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg dddt        j                  gd      }t	        ||d	d
      }t        j                  ||       y)r   r   r   r   r   r   r   r   r   r   forwardr   	directionNrg   rh   r   r   r   r   r   r   s        r   test_examples3zTestAsOfMerge.test_examples3  sn     ||*/JK?QR<</ArvvW
 D%C9E
fh/r   c                     t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg dg dd      }t        ||dd	
      }t        j                  ||       y)r   r   r   r   r   r   )r   r   r   r   r   nearestr   Nr   r   s        r   test_examples4zTestAsOfMerge.test_examples4  sd     ||*/JK?QR<</	R
 D%C9E
fh/r   c                 R    |}t        ||dd      }t        j                  ||       y )Nr   r   r   r   r   r   r   rl   r   r   r   r   s         r   
test_basiczTestAsOfMerge.test_basic  s'    FFv(C
fh/r   c                    |}|j                   j                  d      |_         |j                   j                  d      |_         |j                   j                  d      |_         t        ||dd      }t        j                  ||       y )Ncategoryr   r   r   )r   rj   r   r   r   r   s         r   test_basic_categoricalz$TestAsOfMerge.test_basic_categorical  si    ,,Z8,,Z8"//00<FFv(C
fh/r   c                     |}|j                  d      }t        ||ddd      }|j                  |_        ||j                     }t	        j
                  ||       y )Nr   Tr   )
left_indexright_onr   )	set_indexr   indexra   r   r   r   s         r   test_basic_left_indexz#TestAsOfMerge.test_basic_left_index  sW    !!&)Ftf
  FNN+
fh/r   c                 v    |}|j                  d      }t        ||ddd      }t        j                  ||       y )Nr   Tr   )left_onright_indexr   r  r   r   r   r   s         r   test_basic_right_indexz$TestAsOfMerge.test_basic_right_index  s>    !!&)FF
 	fh/r   c                     |j                  d      }|j                  d      }|j                  d      }t        ||ddd      }t        j                  ||       y )Nr   Tr   r   r  r   r  r   s         r   !test_basic_left_index_right_indexz/TestAsOfMerge.test_basic_left_index_right_index  sW    >>&)!!&)!!&)Ft(
 	fh/r   c                     |j                  ddg      }|j                  d      }t        j                  t        d      5  t	        ||dd       d d d        y # 1 sw Y   y xY w)Nr   rb   zleft can only have one indexmatchTr   r  r  r   raisesr   r   r   rl   r   s      r   test_multi_index_leftz#TestAsOfMerge.test_multi_index_left  s]    !!67"34!!&)]]:-KL 	Jvv$DI	J 	J 	J    AA"c                     |j                  d      }|j                  ddg      }t        j                  t        d      5  t	        ||dd       d d d        y # 1 sw Y   y xY w)Nr   r   zright can only have one indexr  Tr  r  r  s      r   test_multi_index_rightz$TestAsOfMerge.test_multi_index_right  s\    !!&)!!65/2]]:-LM 	Jvv$DI	J 	J 	Jr  c                     |j                  d      }|j                  d      }d}t        j                  t        |      5  t	        ||ddd       d d d        y # 1 sw Y   y xY w)Nr   z:Can only pass argument "left_on" OR "left_index" not both.r  rb   T)r  r   r  r  r   rl   r   msgs       r   test_on_and_index_left_onz'TestAsOfMerge.test_on_and_index_left_on  s]    !!&)!!&)J]]:S1 	Dd	 	 	    AA#c                     |j                  d      }|j                  d      }d}t        j                  t        |      5  t	        ||ddd       d d d        y # 1 sw Y   y xY w)Nr   z<Can only pass argument "right_on" OR "right_index" not both.r  r   T)r  r   r  r  r  s       r   test_on_and_index_right_onz(TestAsOfMerge.test_on_and_index_right_on  s]    !!&)!!&)L]]:S1 	4T	 	 	r  c                 T    |}t        ||ddd      }t        j                  ||       y )Nr   r   )r   left_byright_byr   r   s         r   test_basic_left_by_right_byz)TestAsOfMerge.test_basic_left_by_right_by  s.    Fvx(
 	fh/r   c                     |}||j                   dk7     }t        ||dd      }t        j                  |j                  |j                   dk(  ddgf<   t        j                  ||       y )Nr&   r   r   r   r   r   )r   r   r   r   locr   r   )r   rl   r   r   r   qr   s          r   test_missing_right_byz#TestAsOfMerge.test_missing_right_by"  s^    6==F*+FA&X>BD&&X__.>?
fh/r   c                    t        j                  t        g d      g dg dg dg ddg d      }t        j                  t        g d      g d	g d
g dg ddg 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      }t        ||dddg      }t        j                  ||       y )Nr%   r%   z20160525 13:30:00.046r.   20160525 13:30:00.050r   rP   NSDQr+  BATSr+  r   r   r   r   exchrb   rd   r`   r%   r%   r   rt   z20160525 13:30:00.045r   )r/   r&   r&   r&   r/   r=   r,  r+  rP   rP   r+  rP   Gz@r   r   r   r   r   r   r   r   r   r   r   r   r   r.  r   r   r   r   r2  r   r   r   r   r   r.  rb   rd   r   r   r   r   r.  r   )rg   rh   r   r   r   r   r   r   )r   rl   r   r   r   s        r   test_multibyzTestAsOfMerge.test_multiby*  s    # C@>4 D!
& #	 KHCC  =#
( <<# C@>4vvrvv>vvrvv>" R%
* FFv8V:LM
fh/r   dtypeobjectstringc                 ~   t        j                  t        g d      g dg dg dg ddg d      }|j                  ||d      }t        j                  t        g d	      g d
g dg dg ddg d      }|j                  ||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      }|j                  ||d      }t        ||dddg      }t        j                  ||       y )Nr(  )r   r   r   r   r   r*  r   r   r-  r`   )r   r.  r/  )r   r   r   r   r   r   r0  r1  r3  r4  r   r   r2  r   r   r   r5  r   r   r.  r   )	rg   rh   r   rj   r   r   r   r   r   )r   r7  rl   r   r   r   s         r    test_multiby_heterogeneous_typesz.TestAsOfMerge.test_multiby_heterogeneous_typesk  s/    # *@>4 D!
$ %?@#	 -HCC  =#
& %?@<<# *@>4vvrvv>vvrvv>" R%
( ??eU#CDFFv8V:LM
fh/r   c           	      R   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      j                  d	      }|j                  t        j
                  d
      z
  |_        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      j                  d	      }d}t        j                  t        |      5  t        ||ddddg       d d d        y # 1 sw Y   y xY w)N20160602r   r   r   20160603r   r   k1k2r`   r   r   20160502      ?       @20160503      @      @r   r@  rA  valueincompatible merge keysr  Tr@  rA  r  )
rg   rh   r   r  r  	Timestampr   r  r   r   )r   r   r   r  s       r   test_mismatched_index_dtypez)TestAsOfMerge.test_mismatched_index_dtype  s-   ||Z(!S1Z(!S1Z(!S1Z(!S1	 )
 )F
 	 ZZ",,q/1
Z(!S#6Z(!S#6Z(!S#6Z(!S#6	 2
 )F
 	 (]]:S1 	XtUt4QU,W	X 	X 	Xs   DD&c           	         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      j                  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      j                  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      j                  d	      }t	        ||ddddg      }t        j                  ||       t        j                  t        d      5  t	        ||ddddgdg       d d d        y # 1 sw Y   y xY w)Nr=  r   r   r   r>  r   r?  r`   r   rB  rC  rD  rE  rF  rG  rH  Tr@  rA  r  z,left_by and right_by must be the same lengthr  )r   r  r   r!  )
rg   rh   r   r  r   r   r   r   r  r   r   s        r   test_multiby_indexedz"TestAsOfMerge.test_multiby_indexed  s   ||Z(!S1Z(!S1Z(!S1Z(!S1	 )
 )F
 	 Z(!S#6Z(!S#6Z(!S#6Z(!S#6	 2
 )F
 	 <<Z(!S#6Z(!S#6Z(!S#6Z(!S#6	 2
 )F
 	 %Ddd|
 	h/]]L
 
	  t
	 
	 
	s    E>>Fc           
      	   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dJj	                  dK      L      }|dM   j                  dN      |dM<   |dO   j                  dP      |dO<   |dQ   j                  dN      |dQ<   |dR   j                  dN      |dR<   | j                  |      }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dj	                  dK      L      }|dM   j                  dN      |dM<   |dO   j                  dP      |dO<   | 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 dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg ddj	                  dK      L      }|dQ   j                  dN      |dQ<   |dR   j                  dN      |dR<   | j                  |d      }t        ||dd      }t        j                  ||       y )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   )20160525 13:30:00.084r=   z98.6440r)   ry   rz   )rP  r=   ry   149EDGXry   rz   )20160525 13:30:00.086r=   rz   500rP   ry   98.63)20160525 13:30:00.104r=   rV  647rS  98.62rV  )rW  r=   rV  r6   rS  rY  rV  )rW  r=   rV  50r)   rY  rV  )rW  r=   rV  70r)   rY  rV  )rW  r=   rV  1r)   rY  rV  )rW  r=   rV  62r)   rY  rV  )rW  r=   rV  rM   r)   rY  rV  )rW  r=   rV  r0   rP   rY  rV  )20160525 13:30:00.105r=   rV  r0   rP   rY  rV  )r^  r=   rV  700rP   rY  rV  )20160525 13:30:00.106r=   rV  61rS  rY  rV  )20160525 13:30:00.107r=   rV  r0   rP   rY  rV  )rb  r=   rV  53rP   rY  rV  )20160525 13:30:00.108r=   rV  r0   rP   rY  rV  )rd  r=   rV  839rP   rY  rV  )20160525 13:30:00.115r=   rV  5rS  rY  rV  )20160525 13:30:00.118r=   rV  295rS  rY  rV  )rh  r=   rV  rg  rS  rY  rV  )20160525 13:30:00.128r=   rV  r0   r)   rY  rV  )rj  r&   r~   r0   rP   r~   rr   )20160525 13:30:00.129r=   rY  r0   r)   98.61rV  )rk  r=   rY  rM   r)   rl  rV  )rk  r=   rY  59r)   rl  rV  )rk  r=   rY  31r)   rl  rV  )rk  r=   rY  69r)   rl  rV  )rk  r=   rY  12r)   rl  rV  )rk  r=   rY  rp  rS  rl  rV  )rk  r=   rY  r0   rP   rl  rV  )20160525 13:30:00.130r&   rr   317rP   51.93rr   )rq  r&   rr   283rP   rs  rr   )20160525 13:30:00.135r&   rs  r0   rS  r~   rr   )ru  r=   rY  r0   rP   rl  rY  )20160525 13:30:00.144r=   rY  rp  r)   rl  rY  )rv  r=   rY  88r)   rl  rY  )rv  r=   rY  162r)   rl  rY  )rv  r=   rl  r0   r,  rl  rY  )rv  r=   rY  ra  rP   rl  rY  )rv  r=   rY  25rP   rl  rY  )rv  r=   rY  14rP   rl  rY  )20160525 13:30:00.145r=   rY  rp  rP   98.6rV  )r{  r=   rY  r0   rP   r|  rV  )r{  r=   rV  r0   r)   r|  rV  r   r_   r`   rb   rc   rd   re   r   r   r$   r*   r-   r1   r2   r5   r7   r9   r;   r@   rB   rD   rG   rH   rJ   rL   rN   rQ   rU   rV   rW   rY   rZ   r]   )rP  r=   z98.6400rQ  r)   )rP  r=   rO   rR  rS  )rT  r=   rS   rU  rP   )rW  r=   98.6300rX  rS  )rW  r=   r}  r6   rS  )rW  r=   r}  rZ  r)   )rW  r=   r}  r[  r)   )rW  r=   r}  r\  r)   )rW  r=   r}  r]  r)   )rW  r=   r}  rM   r)   )rW  r=   r}  r0   rP   )r^  r=   r}  r0   rP   )r^  r=   r}  r_  rP   )r`  r=   r}  ra  rS  )rb  r=   r}  r0   rP   )rb  r=   r}  rc  rP   )rd  r=   r}  r0   rP   )rd  r=   r}  re  rP   )rf  r=   r}  rg  rS  )rh  r=   r}  ri  rS  )rh  r=   r}  rg  rS  )rj  r=   r}  r0   r)   )rj  r&   z51.9200r0   rP   )rk  r=   98.6200r0   r)   )rk  r=   r~  rM   r)   )rk  r=   r~  rm  r)   )rk  r=   r~  rn  r)   )rk  r=   r~  ro  r)   )rk  r=   r~  rp  r)   )rk  r=   r~  rp  rS  )rk  r=   r~  r0   rP   )rq  r&   r'   rr  rP   )rq  r&   r'   rt  rP   )ru  r&   z51.9300r0   rS  )ru  r=   r~  r0   rP   )rv  r=   r~  rp  r)   )rv  r=   r~  rw  r)   )rv  r=   r~  rx  r)   )rv  r=   z98.6100r0   r,  )rv  r=   r~  ra  rP   )rv  r=   r~  ry  rP   )rv  r=   r~  rz  rP   )r{  r=   r~  rp  rP   )r{  r=   r~  r0   rP   )r{  r=   r}  r0   r)   r^   rn   rq   rs   ru   rv   rx   r{   r|   r}   )z20160525 13:30:00.079r&   r~   rr   )z20160525 13:30:00.080r=   ry   rz   )rP  r=   ry   rz   )rT  r=   ry   rV  )z20160525 13:30:00.088r=   r   rV  )z20160525 13:30:00.089r=   rV  rV  )rW  r=   rV  rV  )rW  r=   rY  rV  )r^  r=   rY  rV  )rb  r=   rY  rV  )rf  r=   rY  rV  )rh  r=   rY  rV  )rj  r=   rY  rV  )rk  r=   rY  rV  )rk  r=   rl  rV  )rq  r&   rs  rr   )rq  r=   rl  rV  )z20160525 13:30:00.131r=   rl  rY  )ru  r&   r~   rr   )ru  r=   rl  rY  )z20160525 13:30:00.136r=   rl  rY  )rv  r=   rl  rY  )r{  r=   rl  rY  )r{  r=   rl  rV  )r{  r=   z98.60rV  r   Tr   r   r   r   )
rg   rh   r   r   ri   rj   r"   r   r   r   )r   r   r   rl   r   r   s         r   test_basic2zTestAsOfMerge.test_basic2  s   <<v
v
v
&'v
89v
JKv
\]v
nov
@Av
T ,FFFFSv
dev
vwv
HIv
Z[v
lmv
~v
PQv
bcv
tuv
FGv
XYv
jkv
|}v
NOv
`av
rsv
DEv
VWv
hiv
z{v
LMv
^_v
pqv
B	C	v
T	U	v
f	g	v
x	y	v
J
K
v
\
]
v
n
o
v
@Av
RSv
dev
vwv
HIv
Z[v
lmv
~v
PQv
bcv
tuv
FGv
XYv
jkv
|}v
NOv
`av
rsv
DEv
VWv
hiv
z{v
LMv
^_v
pqv
BCv
TUv
fgv
xyv
JKv
\]v
nov
@Av
RSv
dev
vwv
HIv
Z[v
n FKKCPqy

t %W-44Y?'
3::7C"5/00;"5/00;>>(+NLNMN ON O	N
 ON ON ON NN QN QN LN MN MN MN MN  M!N" J#N$ J%N& M'N( L)N* L+N, L-N. L/N0 L1N2 N3N4 N5N6 N7N8 M9N: L;N< L=N> L?N@ LANB MCND MENF MGNH MINJ LKNL MMNN MONP LQNR LSNT LUNV KWNX LYNZ K[N\ L]N^ L_N` JaNb LcNd JeNf NgNh NiNj LkNl NmNn MoNp MqNr MsNt MuNv MwNx KyNz L{N| L}N~ LN@ LANB LCND LENF MGNH MINJ NKNL LMNN KONP KQNR KSNT KUNV LWNX NYNZ N[N^ >CCCHaQ
d !/00;w#J/66w?z'9E9C9 D9 F	9
 F9 F9 F9 F9 D9 D9 D9 D9 D9 D9 D9  D!9" D#9$ D%9& D'9( D)9* D+9, D-9. D/90 D192 D394 D596 D798 D99: D;9< D=9> D?9@ DA9B DC9D DE9F DG9H DI9J DK9L DM9N DO9P DQ9R DS9T DU9V DW9X DY9Z D[9\ D]9^ D_9` Da9b Dc9d De9f Dg9h Di9j Dk9l Dm9n Do9p Dq9t *//4w<
z u,,Y7uu,,Y7ut4FFv(C
fh/r   c                     d } ||      } ||      } ||      }t        ||d      }t        j                  ||       y )Nc                 h    | | j                   dk(     j                  dd      j                  d      S )Nr&   r   r   )axisTr   )r   r   r   xs    r   <lambda>z0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>[	  s1    aF*+T(T#[d[# r   r   r   r   )r   rl   r   r   fr   r   s          r   test_basic_no_byzTestAsOfMerge.test_basic_no_byY	  sG    $ 	
 T766FFv6
fh/r   c                    d}t        j                  t        |      5  t        ||ddd       d d d        t        j                  t        d      5  t        ||ddgd       d d d        t        j                  t        d      5  t        ||d	       d d d        y # 1 sw Y   qxY w# 1 sw Y   HxY w# 1 sw Y   y xY w)
Nz6incompatible merge keys \[1\] .* must be the same typer  r   r   r   )r  r  r   zcan only asof on a key for leftr   )r   r   r  r   r   r  s       r   test_valid_join_keysz"TestAsOfMerge.test_valid_join_keysh	  s    G]]:S1 	Tvvv(S	T ]]:-NO 	Kvv68*<J	K ]]:-NO 	4vv(3	4 	4	T 	T	K 	K	4 	4s#   BB+B7B(+B47C c                     t        j                  ||g      j                  ddg      j                  d      }t	        ||dd      }| j                  |      }t        j                  ||       y )Nr   r   Tr   r   )rg   concatsort_valuesr   r   r"   r   r   )r   r   rl   r   r   r%  r   r   s           r   test_with_duplicatesz"TestAsOfMerge.test_with_duplicatest	  sc    IIvv&'[&(+,[d[# 	

 FA&X>>>$'
fh/r   c                     t        j                  g dg dd      }t        j                  g dg dd      }t        ||d      }t        j                  g dg dg dd      }t        j                  ||       y )	N)r   r   r   r   r   r   )keyr   )r   r   r   )r  r   r  r   )r  r   r   r   r   df1df2r   r   s        r   test_with_duplicates_no_onz(TestAsOfMerge.test_with_duplicates_no_on~	  s`    ll9)DEll99EFC/<<99M
 	fh/r   c                     d}t        j                  t        |      5  t        ||ddd       d d d        y # 1 sw Y   y xY w)Nz/allow_exact_matches must be boolean, passed foor  r   r   foor   r   r   r  r  s       r   test_valid_allow_exact_matchesz,TestAsOfMerge.test_valid_allow_exact_matches	  s=    ?]]:S1 	6hE	 	 	s	   8Ac           
         t        ||ddt        d             t        |j                         |j                         ddd       d}t        j                  t
        |      5  t        ||ddd       d d d        t        j                  t
        |      5  t        |j                         |j                         ddd	       d d d        d
}t        j                  t
        |      5  t        ||ddt        d              d d d        t        j                  t
        |      5  t        |j                         |j                         ddd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   y xY w)Nr   r   1sr   r  r   z6incompatible tolerance .*, must be compat with type .*r  rC  ztolerance must be positive)r   r   r   r   r  r   r  s       r   test_valid_tolerancez"TestAsOfMerge.test_valid_tolerance	  si   66fYt_U 	  	
 H ]]:S1 	Lvv&XK	L ]]:S1 	""$""$	 + ]]:S1 	6h9T?BR	
 ]]:S1 	""$""$	 	+	L 	L	 		 	
	 	s0   #E-E))E5'-FE&)E25E>F
c                    |j                  dd      }|j                  dd      }|j                  j                  rJ |j                  j                  rJ t        j                  t
        d      5  t        ||dd       d d d        |j                  d      }|j                  j                  sJ |j                  j                  rJ t        j                  t
        d      5  t        ||dd       d d d        |j                  d      }|j                  j                  sJ |j                  j                  sJ t        ||dd       y # 1 sw Y   xY w# 1 sw Y   fxY w)	Nr   F)	ascendingzleft keys must be sortedr  r   r   zright keys must be sorted)r  r   is_monotonic_increasingr   r  
ValueErrorr   r  s      r   test_non_sortedzTestAsOfMerge.test_non_sorted	  s8   ##Fe#<##Fe#< ;;6666;;6666]]:-GH 	?vv&X>	? ##F+{{2222;;6666]]:-HI 	?vv&X>	? ##F+{{2222{{2222 	66f:	? 	?	? 	?s   2E&EEE$tolerance_ts1dayr   )daysr   zdatetime.timedelta)idsc                 T    t        ||dd|      }|}t        j                  ||       y )Nr   r   r   r   )r   r  rl   r   r   r   r   s          r   test_tolerancezTestAsOfMerge.test_tolerance	  s0     Fv(l
 
fh/r   c                    t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg ddt        j                  dgd      }t	        ||d	d
d      }t        j                  ||       y )Nr   r   r   r   r   r   r      r   r   r  r   r   r   r   r   r   r   r   s        r   test_tolerance_forwardz$TestAsOfMerge.test_tolerance_forward	  t     ||*/JK#3BRST<</BFFTVX
 D%C9PQR
fh/r   c                    t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg ddt        j                  dgd      }t	        ||d	d
d      }t        j                  ||       y )Nr   r   r   r  r   r   r  r   r   r   r  r   r   s        r   test_tolerance_nearestz$TestAsOfMerge.test_tolerance_nearest	  r  r   c           
         t        j                  t        j                  t        d      ddt	        j
                  d      |      t        j                  d      d      }t        j                  t        j                  t        d      ddt	        j
                  d      |      t        d      d	      }t        ||d
t        d            }t        j                  t        j                  t        d      ddt	        j
                  d      |      t        j                  d      t        d      d      }t        j                  ||       y )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  )rg   rh   
date_ranger   pytztimezoner   arangelistr   r   r   r   )r   r   r   r   r   r   s         r   test_tolerance_tzzTestAsOfMerge.test_tolerance_tz	  s   ||%l3}}U+ ))A,	
 %l3}}U+ w-	
 D%Fi>PQ<<%l3}}U+ ))A,w-

 	fh/r   c                    t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg dddt        j                  gd      }t	        ||d	d
d      }t        j                  ||       y )N)皙?g      @g%@r   r   )rC        @ffffff
@g      @g      '@r   r   r  r   r   r         ?r  r   r   s        r   test_tolerance_floatz"TestAsOfMerge.test_tolerance_float%
  s{    ||"2PQ,;UV
 <<%+bff-
 D%C9PST
fh/r   c           
          |j                  d      }|j                  d      }|j                  d      }t        ||dddt        d            }t        j                  ||       y )Nr   Tr   r  )r   r  r   r   )r  r   r   r   r   )r   rl   r   r   r   r   s         r   test_index_tolerancez"TestAsOfMerge.test_index_tolerance7
  se    &&v.!!&)!!&)'
 	fh/r   c                 T    t        ||ddd      }|}t        j                  ||       y )Nr   r   Fr  r   )r   rl   r   r   r   r   s         r   test_allow_exact_matchesz&TestAsOfMerge.test_allow_exact_matchesG
  s.    Fv(
 '
fh/r   c                     t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg dg dd      }t        ||dd	d
      }t        j                  ||       y )Nr   r   r   r  r   )r   r   r  r   r   r   Fr   r   r   r   r   s        r    test_allow_exact_matches_forwardz.TestAsOfMerge.test_allow_exact_matches_forwardN
  m     ||*/JK#3BRST<</
S
 %C9%
 	fh/r   c                     t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg dg dd      }t        ||dd	d
      }t        j                  ||       y )Nr   r   r   r  r   )r   r   r  r   r   r   Fr  r   r   s        r    test_allow_exact_matches_nearestz.TestAsOfMerge.test_allow_exact_matches_nearest]
  r  r   c           	      h    t        ||ddt        d      d      }|}t        j                  ||       y )Nr   r   100msFr   )r   r   r   r   )r   rl   r   r   r   r   s         r   &test_allow_exact_matches_and_tolerancez4TestAsOfMerge.test_allow_exact_matches_and_tolerancel
  s<     ( %
 5
fh/r   c           	      ~   t        j                  t        dg      dgd      }t        j                  t        ddg      ddgd      }t        ||d	      }t        j                  t        dg      dgdgd
      }t	        j
                  ||       t        ||dd      }t        j                  t        dg      dgdgd
      }t	        j
                  ||       t        ||ddt        d            }t        j                  t        dg      dgt        j                  gd
      }t	        j
                  ||       y )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   )	rg   rh   r   r   r   r   r   r   r   r  s        r   'test_allow_exact_matches_and_tolerance2z5TestAsOfMerge.test_allow_exact_matches_and_tolerance2z
  sG   ll ";!<=E7S
 ll#.0IJ q6	
 C0<<#%>$?@"G3
 	fh/CUK<<#%>$?@"G3
 	fh/ %'
 <<#%>$?@"GFF8
 	fh/r   c           	      ~   t        j                  t        ddg      ddgd      }t        j                  t        ddg      ddgd      }t        ||d	d
t	        d            }t        j                  t        ddg      ddgt
        j                  t
        j                  gd      }t        j                  ||       y )Nr  r  charlier  r  r   r   r  r   Fr   r  r  )	rg   rh   r   r   r   r   r   r   r   r  s        r   'test_allow_exact_matches_and_tolerance3z5TestAsOfMerge.test_allow_exact_matches_and_tolerance3
  s    ll#.0IJ #I.	
 ll#.0IJ q6	
  %'
 <<#.0IJ #I.FFBFF+
 	fh/r   c                    t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg dt        j                  ddgd      }t	        ||d	d
dd      }t        j                  ||       y )Nr   r   r   r   r      r   r  r   r   r  r   r   r   Fr   r   r   r   r   r   r   s        r   .test_allow_exact_matches_and_tolerance_forwardz<TestAsOfMerge.test_allow_exact_matches_and_tolerance_forward
       ||*/JK#3BRST<</QRTVX
  %
 	fh/r   c                    t        j                  g dg dd      }t        j                  g dg dd      }t        j                  g dg dt        j                  ddgd	      }t	        ||d
ddd      }t        j                  ||       y )Nr   r   r   r  )r   r   r  r   r  r   r  r  r   r   r   Fr   r  r   r   s        r   .test_allow_exact_matches_and_tolerance_nearestz<TestAsOfMerge.test_allow_exact_matches_and_tolerance_nearest
  r  r   c           
      2   t        j                  g dg dg dd      }t        j                  g dg dg dd      }t        j                  g dg dg ddt        j                  d	d
dgd      }t	        ||ddd      }t        j                  ||       y )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   s        r   test_forward_byzTestAsOfMerge.test_forward_by
  s     ||'.5
 './
 <<'.5R4	
 D%CC9M
fh/r   c                    t        j                  g dg dg dd      }t        j                  g dg dg dd      }t        j                  g dg dg dg dd	      }t        ||d
dd      }t        j                  ||       y )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   s        r   test_nearest_byzTestAsOfMerge.test_nearest_by  s     ||'.5
 './
 <<'.5/	
 D%CC9M
fh/r   c                 \   t        j                  t        g d      g dg ddg d      }t        j                  t        g d      g dg dd	g d	      }t        ||d
d      }t        j                  t        g d      g dg dg ddg d      }t	        j
                  ||       y )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   r  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   r  r  r   r  r   )r  r  r  r  r  )r   r  r  r  )rg   rh   r   r   r   r   r  s        r   test_by_intzTestAsOfMerge.test_by_int5  s    ll# '3 .
" ll#	 0B  .#
( CE:<<# '33 8
$ 	fh/r   c                 p   t        j                  g dt        d      dddg      }t        j                  g dg dd	dd
g      }|j                  d      j	                  d      }t        ||d      }t        j                  t        d      g dg ddg d      }t        j                  ||       y )N)
ףp=
@HPsb?zG!9@@u@Hz>@皙C@q?ABCDEFG)rb   symbolr  rb   r`   )        rC        Y@)-C6?{Gz?皙?)rb   mpvr  Tr   r   BGACEDF)r  r  r  r  r  r  r  )r  r  r  r  r  r  r  )r  rb   r  rg   rh   r  r  r   r   r   r   r  s        r   test_on_floatzTestAsOfMerge.test_on_floatr  s    llNy/ w'
 ll'0DEe$

 oog&222=C1<<y/NE
 /
 	fh/r   c                 T   t        j                  |      j                  }t        j                  g dt        d      dddg      } ||j                        |_        t        j                  g dt        d      d	dd
g      } ||j                        |_        |j                  d      j                  d      }t        ||d      }t        j                  t        d      g dt        d      dg d      } ||j                        |_        t        j                  ||       y )Nr   r      r   N   x   O   r  )rI  r  r  rI  r`   r   P   r!  }   xyzw)rI  r   r   Tr   r   BACEGDFr   r   r  r   r"  r   r!  xxxxxyz)r  rI  r   )r   r7  typerg   rh   r  rI  r  r   r   r   r   r   any_real_numpy_dtyper7  r  r  r   r   s          r   test_on_specialized_typez&TestAsOfMerge.test_on_specialized_type  s    -.33ll2d9oNw'
 #))$	ll'4<@h'
 #))$	oog&222=C1<<y/5y/
 2
 x~~.
fh/r   c                    t        j                  |      j                  }t        j                  g dg dt        d      dg d      } ||j                        |_        t        j                  g dg dt        d	      d
g d
      } ||j                        |_        |j                  d      j                  d      }t        ||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      } ||j                        |_        t        j                  ||       y )Nr  )r   r   r   r   r   r   r   r  )rI  r  r  )r  r  rI  r`   r#  )r   r   r   r   r&  )rI  r  r   rI  Tr   r  r   r'  )r   r   r   r   r   r   r   r(  r  y)r  r  rI  r   )r   r7  r*  rg   rh   r  rI  r  r   r   r   r   r   r+  s          r   test_on_specialized_type_by_intz-TestAsOfMerge.test_on_specialized_type_by_int  s   -.33ll5,y/
 /
 #))$	ll'VU.
 #))$	oog&222=CU;<<y/,5663SI	 9
 x~~.
fh/r   c                    t        j                  t        d      g dg ddg d      }t        j                  g dg dg dd	g d	      }|j                  d
      j	                  d      }|j                  d
      j	                  d      }t        ||d
d      }t        j                  t        d      g dg dg ddg d      }t        j                  ||       y )N	AAABBBCCC)	r   r   r   r   r   r   r   r   r   )	Gz
@ׁsF
@
@)\()@Gz.)@      )@fffffw@33333w@     w@)r  r.  rb   r`   )	r   r   r   r   r   r   r   r   r   )	r  rC  r  r        @r  r  r<  g     @@)	r  r  r  r  r  皙?r        ?rC  )r.  rb   r  rb   Tr   r.  r   )	r   r   r   r   r   r   r   r   r   )	r5  r4  r3  r8  r6  r7  r9  r:  r;  )	r  r  r  r>  r  r  r  r=  r>  )r  r.  rb   r  r  r  s        r   test_on_float_by_intz"TestAsOfMerge.test_on_float_by_int  s    ll{+3
 0!
& ll3MQ
 -
 oog&222=oog&222=CV<<<{+3
 Q  7#
( 	fh/r   c                     |rd}nd}t        j                  g dg dd      }t        j                  g dg dd      }t        j                  t        |      5  t        ||d	
       d d d        y # 1 sw Y   y xY w)NrJ  @Incompatible merge dtype, .*, both sides must have numeric dtyper   r   r   r   r   r   r   r  r   r   rg   rh   r   r  r   r   )r   using_infer_stringr  r   r   s        r    test_merge_datatype_error_raisesz.TestAsOfMerge.test_merge_datatype_error_raises  sd    +CUC||/JK?QR]]:S1 	,tUs+	, 	, 	,s   A33A<c                 @   d}t        j                  g dt        j                  g d      d      }t        j                  g dt        j                  g d      d      }t        j                  t
        |      5  t        ||d	
       d d d        y # 1 sw Y   y xY w)NzHincompatible merge keys \[0\] .* both sides category, but not equal onesr   r   rB  r   )r   r  r   r  r   rC  r  r   r   )rg   rh   Categoricalr   r  r   r   )r   r  r   r   s       r   ,test_merge_datatype_categorical_error_raisesz:TestAsOfMerge.test_merge_datatype_categorical_error_raises  s    ! 	
 ||#"..*IJ
 ,^^$=>
 ]]:S1 	,tUs+	, 	, 	,s   <BBc                    t        j                  dgdgt        j                  dg      d      }t        ||dddg      }t        j                  dgdgt        j                  dg      d      }t	        j
                  ||       y )Nr   r  r/  zr  r/  rL  r   )rg   rh   rH  r   r   r   )r   r    r   r   s       r   :test_merge_groupby_multiple_column_with_categorical_columnzHTestAsOfMerge.test_merge_groupby_multiple_column_with_categorical_column+  sn    \\1#BNNA34GHIBsSz:<<qc"..!:M NO
fh/r   funcc                     | S N r  s    r   r  zTestAsOfMerge.<lambda>3  s    1 r   c                     t        |       S rP  )r   r  s    r   r  zTestAsOfMerge.<lambda>3  s
    A r   numericdatetimesider   r   c                 b   d| d} |ddt         j                  g      } |g d      }t        j                  |g dd      }t        j                  |g dd	      }t	        j
                  t        |
      5  |dk(  rt        ||d       nt        ||d       d d d        y # 1 sw Y   y xY w)Nz"Merge keys contain null values on z siderC  r<  )rC  r<  g      $@r   r   )r   r   r  r   r  r   r   r   )r   r   rg   rh   r   r  r  r   )r   rN  rU  r  nulls	non_nullsdf_nullr    s           r   test_merge_on_nansz TestAsOfMerge.test_merge_on_nans2  s     34&>c3'()*	,,UHI\\	
CD]]:S1 	0v~7B3/2w3/		0 	0 	0s   9#B%%B.c                 2   t        j                  t         j                  ddg|      }|j                  j                  dv r4t        j                  |j                  j                        j                  }n3t        j                  |j                  j                        j                  }||d<   t        j                  |g dg dg dd	      }t        j                  |g d
g dg dd	      }t        ||ddgd      }t        j                  |g dg dg dd      }t        j                  t
        j                  t
        j                  t
        j                  gt              |d<   |r|d   j                  d      |d<   t        j                   ||       y )Nr   r   r7  )iur   )HELLOToYou)r   r  r   )r   r   r  by_col1by_col2on_colrI  )WORLDWideWeb)r   r   r   )r   r  r  rc  rd  re  r   r   rc  rd  re  value_xvalue_ystring[pyarrow_numpy])rg   arrayNAr7  kindr   iinfonumpy_dtypemaxfinforh   r   r   r8  rj   r   r   )	r   any_numeric_ea_dtyperE  arrmax_valr   r   r   r   s	            r   test_by_nullablezTestAsOfMerge.test_by_nullableD  sD    hhq!},@A99>>Z'hhsyy44599Ghhsyy44599G A||1#(	
 3#(	
 D%Y	,BxP<<1#*	
 !hh'?vN"*9"5"<"<=T"UHY
fh/r   c                    t        j                  t        j                  dg      j                  d      dgdgd      }t        j                  t        j                  dg      j                  d      dgdgd      }t	        ||dd	
      }t        j                  t        j
                  dd      dddggg d      }t        j                  ||       y )N
2018-01-01r  r   r   )by_colre  valuesr   r   r{  re  ri  r  )r{  re  values_xvalues_yr`   )rg   rh   DatetimeIndextz_localizer   rK  r   r   )r   r   r   r   r   s        r   test_merge_by_col_tz_awarez(TestAsOfMerge.test_merge_by_col_tz_awarer  s    ||**L>:FFuM#%
 **L>:FFuM#%
 D%HB<<ll<E2AsC@A@
 	fh/r   c                 D   t        j                  t        j                  dg      j                  d      dgdgdgd      }t        j                  t        j                  dg      j                  d      dgdgd	gd      }t	        ||d
dgd      }t        j                  t        j
                  dd      dddggg d      }t        j                  t        j                  gt              |d<   |r|d   j                  d      |d<   t        j                  ||       y )Nrz  r  r_  r   r   rb  rf  r   r   rc  rd  re  ri  r}  rj  r`   r\  rl  rm  )rg   rh   r  r  r   rK  r   rn  r   r8  rj   r   r   )r   rE  r   r   r   r   s         r   test_by_mixed_tz_awarez$TestAsOfMerge.test_by_mixed_tz_aware  s   ||++\N;GGN#9#	
 ++\N;GGN#9#	
 D%Y	,BxP<<ll<E2GQDE?
 !hhxv>"*9"5"<"<=T"UHY
fh/r   )rc   int16zm8[ns]zM8[us]c                 x   t        j                  t        j                  dg|      dgdgd      }t        j                  t        j                  dg|      dgdgd      }t	        ||dd	      }t        j                  t        j                  dg|      dgdgdgd
      }t        j                  ||       y )Nr   r\  r   r   )r{  re  rI  r   r{  re  ri  )r{  re  rk  rl  )rg   rh   r   rn  r   r   r   )r   r7  r   r   r   r   s         r   test_by_dtypezTestAsOfMerge.test_by_dtype  s     ||((A3e4#
 ((A3e4#
 D%HB<<((A3e4#55	
 	fh/r   c                 2   |dk(  rt        j                  d       t        j                  t	        t        g dg d            ddg      }t        j                  |d   d      j                  d	| d
      |d<   t        j                  t	        t        g dg d            ddg      }t        j                  |d   d      j                  d	| d
      |d<   t        j                  t	        t        g dg ddt        j                  ddt        j                  t        j                  g            g d      }t        j                  |d   d      j                  d	| d
      |d<   t        ||dt        d      d      }t        j                  ||       y )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   rg   rh   r  zipto_timedeltarj   r   r   r   r   r   r   )r   r   r   r   r   r   s         r    test_timedelta_tolerance_nearestz.TestAsOfMerge.test_timedelta_tolerance_nearest  sf   3;KK%
 ||+-?@AV$

 tF|T:AACvQ-PV*,>?@W%

 ft<CCc$qMRf<<*&1bffbff5 .	
 ??8F+;TBIICPTvUV-X%Fi.>)
 	fh/r   c                    t        j                  g dg dd      }t        j                  g dg dd      }|d   j                  |      |d<   |d   j                  |      |d<   t        j                  g dg dt        j                  ddgd	      }|d   j                  |      |d<   t        ||dd
      }t        j                  ||       y )N)r   r   r  r  r   )r   r  r  r   r   rC  rD  r   r   r  )rg   rh   rj   r   r   r   r   r   )r   any_int_dtyper   r   r   r   s         r   test_int_type_tolerancez%TestAsOfMerge.test_int_type_tolerance  s     ||+9EF;YGHI$$]3S	3Z&&}5c
<<9BFFCQTCUV
 !,,];D%C2>
fh/r   c           	      J   t        j                  dddd      }t        j                  g ddg|dd  	      }t        j                  |d
gdz  dgz   d      }t        ||ddg      }t        j                  g d|dd  d
gdz  dgz   dt        j                  dddd            }t	        j
                  ||       t        ||ddg      }t        j                  |d
gdz  dgz   t        j                  ddddgdt        g d            }t	        j
                  ||       y )Nz
2019-10-0130minr   r  )r  r  r  )?皙?ffffff?333333?xyzr   )ra   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  )	rg   r  rh   r   r   r   r   r   r   )r   r  r   r   r   r   s         r   test_merge_index_column_tzz(TestAsOfMerge.test_merge_index_column_tz  s+   l!N||05'qrS5$!tf9LMNUt{m
 <<+"12YvzTF*
 --%GQ5	
 	fh/d{m
 <<"vzTF*S#s3
 (
 	fh/r   c           	      <   |dk(  rt        j                  d       t        j                  ddd|      t	        d      j                  |      z   }t        j                  dd	|
      }t        j                  ddit        j                  |            }t        j                  ddit        j                  |            }t        j                  dddt        j                  |            }t        ||ddt	        d            }t        j                  ||       y )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  r  r   val1r  r  val2bar)r  r  Tr  )r   r  r   )r   r   rg   r  r   as_unitrh   r  r   r   r   )r   r   dr1dr2r  r  r   r   s           r   %test_left_index_right_index_tolerancez3TestAsOfMerge.test_left_index_right_index_tolerance  s    3;KKQ mm+Dt
c"**401 mm**4HllFE?"2B2B32GHllFE?"2B2B32GH<<E*"2B2B32G
 ,
 	fh/r   N)F)M__name__
__module____qualname__r"   r   fixturerl   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r"  r&  r6  markparametrizer;  rL  rN  r  r  r  r  r  r  r  r  r   rT  	timedeltar  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r-  r0  r?  rF  rI  rM  rZ  rx  r  r  r  r  r  r  r  rQ  r   r   r   r      s    ^^#" #"J ^^/ /4 ^^}" }"~ ^^}" }"~ ^^m" m"^ ^^m" m"^
0W0r0000000JJ00?0B [[Wx&:;B0 <B0HX80dY0v0
400,\;. [[	6	.H..A67./  
0
000)0V0$0 000000d#0J0(0(0<0<;0z0<0>"0H70r
,,&0 [[67i=T   [[Vfg%670 80,0\0.08 [[W&NO0 P06'0R0 0B0r   r   infer_stringFTpyarrow)markskwargsr   r  r  dataz2019-06-01 00:09:12z2019-06-01 00:10:29rC  c                 $   t        d|      5  t        j                  d|i|      }t        j                  d|i|      }t        j                  t
        d      5  t        ||fi |  d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzfuture.infer_stringr  r  rA  r  )r   rg   rh   r   r  r   r   )r  r  r  r   r   s        r   #test_merge_asof_non_numerical_dtyper  7  s     
-|	< .||S$Kt4c4[5]]U
 	. tU-f-		.. .	. 	.. .s$   ABA:)B:B	?BBc            	          t        j                  g dg dd      } t        j                  g dg dd      }t        j                  t        d      5  t        | |dd	d	d
       d d d        y # 1 sw Y   y xY w)N)rp  1315r   )r   	left_val1)r  r  r  r   rA  r  r  r   r   )r  r  r   r!  rD  r   r   s     r   *test_merge_asof_non_numerical_dtype_objectr  M  sl    <<0OPDLLOLME	Q
 
 		
	
 
 
s   A//A8)r  r   	left_time)r  r  r   )r   r  c                     t        g dd      }t        j                  g dg dd|      }t        j                  dg d	ig d	      }t        ||fi | }t        j                  g dg dg d
d|      }t	        j
                  ||       y )Nr   testnamer   )r   r  r   )r   r  r  r   r   r   )r   r  r   )r   rg   rh   r   r   r   )r  r  r   r   r   r   s         r   test_merge_asof_index_behaviorr  _  sy     *6*E<<zJRWXDLL'?3?KEe.v.F|| zINH &(+r   c                  ,   t        j                  dg dit        g dd            } t        j                  dg dit        g d	d            }t        | |dd
      }t        j                  g dg dg dd      }t	        j
                  ||       y )Nr   r   r  r  r  r   r  r  r   r        )r   r   r   r  r  r   )rg   rh   r   r   r   r   r   r   r   r   s       r   'test_merge_asof_numeric_column_in_indexr  u  so    <<l+53MNDLL#|,E)#4NOEeS3?F||),\RSH&(+r   c                     t        j                  dg dit         j                  j                  g dg dgddg            } t        j                  d	g d
it         j                  j                  g dg dgddg            }t	        | |dd      }t        j                  g dg dg d
d      }t        j                  ||       y )Nr   r  r  r   r   rL  )namesr  r   r  rK  r/  r  )rg   rh   
MultiIndexfrom_arraysr   r   r   r  s       r   ,test_merge_asof_numeric_column_in_multiindexr    s    <<	lmm''O(DSRUJ'WD LL	lmm''O(DSRUJ'WE
 eS3?F||),\RSH&(+r   c                  $   t        j                  dg dit        g dd            } t        j                  dg dit        g d	d            }t        j                  t
        d
      5  t        | |dd       d d d        | j                         j                  ddg      } |j                         j                  ddg      }t        j                  t
        d
      5  t        | |dd       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  )r\  23r   r  r  r   r  )mnorA  r  r  )	rg   rh   r   r   r  r   r   r   r  r  s     r   3test_merge_asof_numeri_column_in_index_object_dtyper    s    <<l+5s3STDLL#|,E/PS4TUE	Q
 ; 	4c:	; ''c
3D))3*5E	Q
 ; 	4c:	; ;; ;; ;s   ,C:!D:DDc                 *   t        j                  ddgd|  d      }t        j                  ddg|d      }t        j                  t        j                  d	      d
d|       }t        j                  dg di      }t        |||ddd      }t        j                  g dt        j                  ddg|d      }t        j                  ||       t        ||d|dd      }t        j                  ddg|ddgd      }t        j                  ||       y )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   )
rg   r  rh   r  rK  r   r   r   r   r   )r   dtir   ts_merger   r   r   s          r   test_merge_asof_array_as_onr    s   


	/0#dV1C LLQ	
E }}ll-.4H <<i()D!F ||)2661a.QRH&(+!F ||QQ	
H &(+r   c                     t        j                  g dgg d      } t        j                  g dgg d      }t        j                  t        d      5  t        | |d	       d d d        t        j                  t        d      5  t        | |dd
       d d d        t        j                  t        d      5  t        | |dd       d d d        y # 1 sw Y   pxY w# 1 sw Y   IxY w# 1 sw Y   y xY w)N)r   r   r   )r   r   r   r`   )r   r   r   )r   r   r   zcolumn label 'a'r  r   r   r   r  r   )rg   rh   r   r  r  r   r  s     r   +test_merge_asof_raise_for_duplicate_columnsr    s    <</EFDLL).EFE	z);	< (43'( 
z);	< C4kBC 
z);	< B4
SAB B( (C CB Bs$   CC9C*CC'*C3r7  Int64zint64[pyarrow]ztimestamp[s][pyarrow]c                    t        j                  g dg dd      }t        j                  g dg dd      }|j                  d| i      }|j                  d| i      }t        ||d      }t        j                  g dg dt        j
                  dd	gd
      }|j                  d| i      }t        j                  ||       y )N)r   r   r   r  )join_colr   )r   r   r  )r  r   r  r   rD  rF  )r  r   r   )rg   rh   rj   r   r   r   r   r   )r7  r   r   r   r   s        r   test_merge_asof_extension_dtyper    s     <<!!	
D LL!"	
E ;;
E*+DLL*e,-Ee
3F||!!&&#s+	
H 
E23H&(+r   c                  "   t        j                  t        j                  ddd      gd      } t        j                  | dgd      }t	        ||dt        d            }t        j                  | dgdgd	      }t        j                  ||       y )
Ni  r   ztimestamp[us, UTC][pyarrow]r\  )	timestamprI  r  r  r  )r  rk  rl  )rg   SeriesrT  rh   r   r   r   r   )serr    r   r   s       r   $test_merge_asof_pyarrow_td_tolerancer    s     ))			4A	&'/LC 
S	

B B;)D/JF||ss	
H &(+r   c                     t        j                  dgdgd      } t        j                  dgdgd      }d| j                  j                  j                  _        d|j                  j                  j                  _        t        | |dd      }t        j                  dgdgd	dg
      }t        j                  ||       y )Nr   r   )r  r  r   r   FTr  r  r  )
rg   r  r  r|  flags	writeabler   rh   r   r   r  s       r   !test_merge_asof_read_only_ndarrayr    s    99aS&1DIIqc!73E(-DJJ%).EKK&e$GF||aSA37sCH&(+r   c            
      0   t        j                  t        j                  g dddg      dgdz  dgdz  t        d      d      } t        j                  t        j                  ddgddg      dgd	z  dd	gt        d	      d      }t	        | |d
dgddddg      }t        j                  t        j                  g dddg      dgdz  dgdz  t        d      t
        j                  t
        j                  ddgd      }t        j                  ||       y )N)r   r   r   r   r   r   )
categoriesr  r  r   )c1c2tvr   r  r  r  r   _left_right)r   r   r   suffixesr  )r  r  r  v_leftv_right)	rg   rh   rH  ranger   r   r   r   r   r  s       r   (test_merge_asof_multiby_with_categoricalr  &  s   <<..!53*M%!)qq		
D LL..#sc
C%!)Qq		
E $<8$F ||..!53*M%!)qAhS1	
H &(+r   )(rT  numpyr   r   r  pandas.util._test_decoratorsutil_test_decoratorstdpandasrg   r   r   r   r   r   pandas._testing_testingr   pandas.core.reshape.merger   r  r   r   r  r  r   
skip_if_nor  r  r  r  r  r  r  r  r  r  r  r  rQ  r   r   <module>r     s       ) )    0 ./ 0W40 W40th ULFLL]R]]95MNO c{4EF 
23c;P5QR	.		.
$ D151,,,, ;*),XB %]R]]9-EF,MBMM)4LM,,8 y, ,,	,#,r   