
    i                    .   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  G d d      Zej*                  j-                  dd ej.                  d ej0                  d	      
      g      ej*                  j-                  dddidddg      ej*                  j-                  dddgddgg      d                      Zd Zej*                  j-                  ddddddddddg      d        Zd Zd Zd Zd Zd Z ej*                  j-                  d d! ej.                  d" ej0                  d	      
       ej.                  d# ej0                  d	      
      g      d$        Z! ej0                  d	      d%        Z"d& Z#d' Z$y)(    N)Index	Timedelta
merge_asofoption_contextto_datetime)
MergeErrorc                      e Zd ZdUd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j4                  j7                  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j4                  j7                  d$ e'd%       e(jR                  d&'      gd(d)g*      d+        Z*d, Z+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 ZAej4                  j7                  dCdD eBgdEdFg*      ej4                  j7                  dGdHdIg      dJ               ZCdK ZDdL ZEdM ZFej4                  j7                  dg dN      dO        ZGdP ZHdQ ZIdR ZJdS ZKyT)V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      g/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/tests/reshape/merge/test_merge_asof.py	prep_datazTestAsOfMerge.prep_data   sJ    ##VX$6V#DPP Q B bgg&	    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.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.075r4   r5   r6   r    r8   r4   z98.66006r    r8   r4   98.650030r    r8   r4   r<   r   r    r8   r4   r<   20r    r8   r4   r<   35r    r8   r4   r<   10r    r8   r4   98.5500r:   ARCA20160525 13:30:00.076r4   98.56001000rG   rI   r4   rJ   r+   rG   rI   r4   rJ   r-   rG   rI   r4   rJ   400rG   rI   r4   rJ   r/   rG   20160525 13:30:00.078r   r   783r    rR   r   r   r'   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.95ri   20160525 13:30:00.041r   ri   ri   r%   r&   rf   rg   20160525 13:30:00.072r&   rf   z720.88r8   r4   98.5598.56rI   r4   rp   rq   rR   r   ri   ri   rR   r   51.92ri   time,ticker,bid,askrV   rW   bidrZ   askTr   r]   rb   s     r   quoteszTestAsOfMerge.quotesC   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   ri   r   r    ri   ri   r"   r   ri   r#   r    ri   ri   r%   r&   z720.77r'   r    720.5rg   r%   r&   z720.92r'   r    r   rg   r%   r&   rg   r+   r    r   rg   r%   r&   rg   r-   r    r   rg   r%   r&   rg   r/   r    r   rg   r%   r&   rg   r1   r    r   rg   r3   r4   98.67r6   r    r8   r4   r   r6   r    rp   rq   r8   r4   98.66r:   r    rp   rq   r8   r4   98.65r=   r    rp   rq   r8   r4   r   r   r    rp   rq   r8   r4   r   r@   r    rp   rq   r8   r4   r   rB   r    rp   rq   r8   r4   r   rD   r    rp   rq   r8   r4   rp   r:   rG   rp   rq   rI   r4   rq   rK   rG   rp   rq   rI   r4   rq   r+   rG   rp   rq   rI   r4   rq   r-   rG   rp   rq   rI   r4   rq   rO   rG   rp   rq   rI   r4   rq   r/   rG   rp   rq   rR   r   ri   rS   r    ru   ri   rR   r   ri   r'   r    ru   ri   /time,ticker,price,quantity,marketCenter,bid,askrV   rW   rY   rZ   r[   r\   rw   rx   r^   r_   npnanr`   ra   r   rb   s     r   asofzTestAsOfMerge.asof^   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   rb   s     r   	tolerancezTestAsOfMerge.tolerance^  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r^   r_   r   tmassert_frame_equalr   leftrightexpectedresults        r   test_examples1zTestAsOfMerge.test_examples1^  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   szNThis test is invalid for unit='s' because that would round the trades['time']])r   r"   r%   r%   r%   M8[]r   r   r&   r&   r4   皙I@r   g\(@(\@g     X@K      d   r   r   )r   r   rY   r[   rW   )r   r   20160525 13:30:00.030rk   r%   20160525 13:30:00.049rn   r8   )r&   r   r   r   r&   r4   r&   r   )     @r   \(I@QI@r   (\X@r   gzGJ@)=
ףp@{GI@=
ףpI@      J@r   q=
ףX@gףp=
@gp=
J@)r   r   rw   rx   r   r   r   by2msr   r   r   r   r   )r   r   rY   r[   rw   rx   10msFr   r   r   allow_exact_matchesN)pytestskipr^   r_   r   ra   r   r   r   r   r   r   )r   unitrc   rz   r   r   s         r   test_examples2zTestAsOfMerge.test_examples2j  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r^   r_   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   rc   r   rz   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   ra   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   indexrX   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   rY   zleft can only have one indexmatchTr   r   r   r   raisesr   r   r   rc   rz   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   rw   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  rY   T)r   r   r   r  r   rc   rz   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  rw   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_by0  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   rw   rx   )r   r   r   r   locr   r   )r   rc   r   rz   r   qr   s          r   test_missing_right_byz#TestAsOfMerge.test_missing_right_by9  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   rG   NSDQr  BATSr  r   r   r   r   exchrY   r[   rW   r   r   r   rk   z20160525 13:30:00.045r   )r&   r   r   r   r&   r4   r  r  rG   rG   r  rG   Gz@r   r   r   r   r   r   r   r   r   r   r   r   r   r!  rw   rx   r   r   r%  r   r   r   r   r   r!  rY   r[   rw   rx   r   r   r!  r   )r^   r_   r   r   r   r   r   r   )r   rc   rz   r   r   s        r   test_multibyzTestAsOfMerge.test_multibyA  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   rW   )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   ra   r   r   r   r   r   )r   r*  rc   rz   r   r   s         r    test_multiby_heterogeneous_typesz.TestAsOfMerge.test_multiby_heterogeneous_types  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k2rW   r   r   20160502      ?       @20160503      @      @r   r3  r4  valuezincompatible merge keysr  Tr3  r4  r   )
r^   r_   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)Nr0  r   r   r   r1  r   r2  rW   r   r5  r6  r7  r8  r9  r:  r;  Tr3  r4  r   z,left_by and right_by must be the same lengthr  )r   r   r  r  )
r^   r_   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   r3   r4   r   r6   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )20160525 13:30:00.084r4   z98.6440r    rp   rq   )rB  r4   rp   149EDGXrp   rq   )20160525 13:30:00.086r4   rq   500rG   rp   98.63)20160525 13:30:00.104r4   rH  647rE  98.62rH  )rI  r4   rH  r-   rE  rK  rH  )rI  r4   rH  50r    rK  rH  )rI  r4   rH  70r    rK  rH  )rI  r4   rH  1r    rK  rH  )rI  r4   rH  62r    rK  rH  )rI  r4   rH  rD   r    rK  rH  )rI  r4   rH  r'   rG   rK  rH  )20160525 13:30:00.105r4   rH  r'   rG   rK  rH  )rP  r4   rH  700rG   rK  rH  )20160525 13:30:00.106r4   rH  61rE  rK  rH  )20160525 13:30:00.107r4   rH  r'   rG   rK  rH  )rT  r4   rH  53rG   rK  rH  )20160525 13:30:00.108r4   rH  r'   rG   rK  rH  )rV  r4   rH  839rG   rK  rH  )20160525 13:30:00.115r4   rH  5rE  rK  rH  )20160525 13:30:00.118r4   rH  295rE  rK  rH  )rZ  r4   rH  rY  rE  rK  rH  )20160525 13:30:00.128r4   rH  r'   r    rK  rH  )r\  r   ru   r'   rG   ru   ri   )20160525 13:30:00.129r4   rK  r'   r    98.61rH  )r]  r4   rK  rD   r    r^  rH  )r]  r4   rK  59r    r^  rH  )r]  r4   rK  31r    r^  rH  )r]  r4   rK  69r    r^  rH  )r]  r4   rK  12r    r^  rH  )r]  r4   rK  rb  rE  r^  rH  )r]  r4   rK  r'   rG   r^  rH  )20160525 13:30:00.130r   ri   317rG   51.93ri   )rc  r   ri   283rG   re  ri   )20160525 13:30:00.135r   re  r'   rE  ru   ri   )rg  r4   rK  r'   rG   r^  rK  )20160525 13:30:00.144r4   rK  rb  r    r^  rK  )rh  r4   rK  88r    r^  rK  )rh  r4   rK  162r    r^  rK  )rh  r4   r^  r'   r  r^  rK  )rh  r4   rK  rS  rG   r^  rK  )rh  r4   rK  25rG   r^  rK  )rh  r4   rK  14rG   r^  rK  )20160525 13:30:00.145r4   rK  rb  rG   98.6rH  )rm  r4   rK  r'   rG   rn  rH  )rm  r4   rH  r'   r    rn  rH  r   rV   rW   rY   rZ   r[   r\   rw   rx   r   r!   r$   r(   r)   r,   r.   r0   r2   r7   r9   r;   r>   r?   rA   rC   rE   rH   rL   rM   rN   rP   rQ   rT   )rB  r4   z98.6400rC  r    )rB  r4   rF   rD  rE  )rF  r4   rJ   rG  rG   )rI  r4   98.6300rJ  rE  )rI  r4   ro  r-   rE  )rI  r4   ro  rL  r    )rI  r4   ro  rM  r    )rI  r4   ro  rN  r    )rI  r4   ro  rO  r    )rI  r4   ro  rD   r    )rI  r4   ro  r'   rG   )rP  r4   ro  r'   rG   )rP  r4   ro  rQ  rG   )rR  r4   ro  rS  rE  )rT  r4   ro  r'   rG   )rT  r4   ro  rU  rG   )rV  r4   ro  r'   rG   )rV  r4   ro  rW  rG   )rX  r4   ro  rY  rE  )rZ  r4   ro  r[  rE  )rZ  r4   ro  rY  rE  )r\  r4   ro  r'   r    )r\  r   z51.9200r'   rG   )r]  r4   98.6200r'   r    )r]  r4   rp  rD   r    )r]  r4   rp  r_  r    )r]  r4   rp  r`  r    )r]  r4   rp  ra  r    )r]  r4   rp  rb  r    )r]  r4   rp  rb  rE  )r]  r4   rp  r'   rG   )rc  r   r   rd  rG   )rc  r   r   rf  rG   )rg  r   z51.9300r'   rE  )rg  r4   rp  r'   rG   )rh  r4   rp  rb  r    )rh  r4   rp  ri  r    )rh  r4   rp  rj  r    )rh  r4   z98.6100r'   r  )rh  r4   rp  rS  rG   )rh  r4   rp  rk  rG   )rh  r4   rp  rl  rG   )rm  r4   rp  rb  rG   )rm  r4   rp  r'   rG   )rm  r4   ro  r'   r    rU   re   rh   rj   rl   rm   ro   rr   rs   rt   )z20160525 13:30:00.079r   ru   ri   )z20160525 13:30:00.080r4   rp   rq   )rB  r4   rp   rq   )rF  r4   rp   rH  )z20160525 13:30:00.088r4   r   rH  )z20160525 13:30:00.089r4   rH  rH  )rI  r4   rH  rH  )rI  r4   rK  rH  )rP  r4   rK  rH  )rT  r4   rK  rH  )rX  r4   rK  rH  )rZ  r4   rK  rH  )r\  r4   rK  rH  )r]  r4   rK  rH  )r]  r4   r^  rH  )rc  r   re  ri   )rc  r4   r^  rH  )z20160525 13:30:00.131r4   r^  rK  )rg  r   ru   ri   )rg  r4   r^  rK  )z20160525 13:30:00.136r4   r^  rK  )rh  r4   r^  rK  )rm  r4   r^  rK  )rm  r4   r^  rH  )rm  r4   z98.60rH  rv   Try   r   r   r   )
r^   r_   r   r   r`   ra   r   r   r   r   )r   datapathr   rc   rz   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>q  s6    ahh& !&&xa&8DD$DO r   r   r   r   )r   rc   r   rz   fr   r   s          r   test_basic_no_byzTestAsOfMerge.test_basic_no_byp  sD    

 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   rw   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_keys}  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   )r^   concatsort_valuesr   r   r   r   r   )r   rq  rc   rz   r   r  r   r   s           r   test_with_duplicatesz"TestAsOfMerge.test_with_duplicates  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  r6  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  rc   rz   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
                  |      t        j                  d      d      }t        j                  t        j                  t        d      ddt        j
                  |      t        d      d      }t        ||d	t        d
            }t        j                  t        j                  t        d      ddt        j
                  |      t        j                  d      t        d      d      }t        j                  ||       y )Nz
2016-01-02Dr   )startfreqperiodstzr   )datevalue1z
2016-01-01ABCDE)r  value2r  z1 dayr   r   BCDEE)r  r  r  )r^   r_   
date_ranger   datetimeUTCr   arangelistr   r   r   r   )r   r   r   r   r   r   s         r   test_tolerance_tzzTestAsOfMerge.test_tolerance_tz  s    ||%l3|| ))A,	
 %l3|| w-	
 D%Fi>PQ<<%l3|| ))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   )r6        @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   rc   rz   r   r   r   s         r   test_index_tolerancez"TestAsOfMerge.test_index_toleranceL  se    &&v.!!&)!!&)'
 	fh/r   c                    t        ||ddd      }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                  |      }t        j                  ||       y )/Nr   r   Fr  r   r   ri   r   r    r~   r   r   r   r   r   r   r3   r4   r   r6   r8   r   r:   r   r=   r@   rB   rD   rp   rG   r   r   r   r   r   rR   r   ri   rS   r    ri   ri   rR   r   ri   r'   r    ri   ri   r   rV   rW   rY   rZ   r[   r\   rw   rx   )
r   r^   r_   r   r   r`   ra   r   r   r   r   rc   rz   r   r   r   s         r   test_allow_exact_matchesz&TestAsOfMerge.test_allow_exact_matches\  s   Fv(
 \\ ,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	>>"%
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_forwardO	  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                    t        ||ddt        d      d      }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                  |      }t        j                  ||       y )0Nr   r   100msFr   r   r   ri   r   r    r~   r   r   r   r   r   r   r3   r4   r   r6   r8   r   r:   r   r=   r@   rB   rD   rp   rG   r   r   r   r   r   r  r  r   rV   rW   rY   rZ   r[   r\   rw   rx   )r   r   r^   r_   r   r   r`   ra   r   r   r   r  s         r   &test_allow_exact_matches_and_tolerancez4TestAsOfMerge.test_allow_exact_matches_and_tolerancem	  s   ( %
 \\ ,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	>>"%
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   )	r^   r_   r   r   r   r   r   r   r   r  s        r   'test_allow_exact_matches_and_tolerance2z5TestAsOfMerge.test_allow_exact_matches_and_tolerance2e
  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  )	r^   r_   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  rW   )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  )r^   r_   r   r   r   r   r  s        r   test_by_intzTestAsOfMerge.test_by_int   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)rY   symbolr  rY   rW   )        r6        Y@)-C6?{Gz?皙?)rY   mpvr  Tr   r   BGACEDF)r  r  r   r  r  r  r  )r  r  r  r  r  r  r  )r  rY   r  r^   r_   r  r  r   r   r   r   r  s        r   test_on_floatzTestAsOfMerge.test_on_float]  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  )r<  r  r  r<  rW   r   P   r  }   xyzw)r<  r   r   Tr   r   BACEGDFr   r   r  r  r  r   r  xxxxxyz)r  r<  r   )r   r*  typer^   r_   r  r<  r  r   r   r   r   r   any_real_numpy_dtyper*  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  )r<  r  r  )r  r  r<  rW   r  )r   r   r   r   r  )r<  r  r   r<  Tr   r  r   r  )r   r   r   r   r   r   r   r  rw  y)r  r  r<  r   )r   r*  r  r^   r_   r  r<  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!  rY   rW   )	r   r   r   r   r   r   r   r   r   )	r	  r6  r
  r	        @r
  r	  r1  g     @@)	r  r  r  r  r  皙?r        ?r6  )r!  rY   r  rY   Tr   r!  r   )	r   r   r   r   r   r   r   r   r   )	r*  r)  r(  r-  r+  r,  r.  r/  r0  )	r  r  r  r3  r  r  r  r2  r3  )r  r!  rY   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                     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)
N@Incompatible merge dtype, .*, both sides must have numeric dtyper   r   r   r   r   r   r   r  r   r   r^   r_   r   r  r   r   r   r  r   r   s       r    test_merge_datatype_error_raisesz.TestAsOfMerge.test_merge_datatype_error_raises  s\    Q||/JK?QR]]:S1 	,tUs+	, 	, 	,s   A..A7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   r7  r   )r   r  r   r  r   r8  r  r   r   )r^   r_   Categoricalr   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   rw  r$  zrw  r$  rA  r   )r^   r_   r=  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 rv  s    r   rx  zTestAsOfMerge.<lambda>  s    1 r   numericr  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 sider6  r1  )r6  r1  g      $@r   r   )r   r   r  r   r  r   r   r   )r   r   r^   r_   r   r  r  r   )r   rC  rG  r  nulls	non_nullsdf_nullr   s           r   test_merge_on_nansz TestAsOfMerge.test_merge_on_nans  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   r*  )iur   )HELLOToYou)r   r  r   )r   r   r  by_col1by_col2on_colr<  )WORLDWideWeb)r   r   r   )r   r  ry  rU  rV  rW  r   r   rU  rV  rW  value_xvalue_ystr)r^   arrayNAr*  kindr   iinfonumpy_dtypemaxfinfor_   r   r   r+  ra   r   r   )	r   any_numeric_ea_dtypeusing_infer_stringarrmax_valr   r   r   r   s	            r   test_by_nullablezTestAsOfMerge.test_by_nullable,  sC    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"<"<U"CHY
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_colrW  valuesr   r   rn  rW  r[  r  )rn  rW  values_xvalues_yrW   )r^   r_   DatetimeIndextz_localizer   r=  r   r   )r   r   r   r   r   s        r   test_merge_by_col_tz_awarez(TestAsOfMerge.test_merge_by_col_tz_awareZ  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 )Nrm  r  rQ  r   r   rT  rX  r   r   rU  rV  rW  r[  rp  r\  rW   rN  r^  r_  )r^   r_   rs  rt  r   r=  r   r`  r   r+  ra   r   r   )r   rh  r   r   r   r   s         r   test_by_mixed_tz_awarez$TestAsOfMerge.test_by_mixed_tz_awareq  s
   ||++\N;GGN#9#	
 ++\N;GGN#9#	
 D%Y	,BxP<<ll<E2GQDE?
 !hhxv>"*9"5"<"<U"CHY
fh/r   )rZ   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   rN  r   r   )rn  rW  r<  r   rn  rW  r[  )rn  rW  r]  r^  )r^   r_   r   r`  r   r   r   )r   r*  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                 >   |dk(  rt        j                  d       t        j                  t	        t        g dg dd            ddg	      }t        j                  |d   d
      j                  d| d      |d<   t        j                  t	        t        g dg d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d            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   T)strictr   r   rW   mszm8[r   )r   r   	   r  r     r   r   r   r  )r   r   r   1msr   )r   r   r   )r   r   r^   r_   r  zipto_timedeltara   r   r   r   r   r   r   )r   r   r   r   r   r   s         r    test_timedelta_tolerance_nearestz.TestAsOfMerge.test_timedelta_tolerance_nearest  sm   3;KK%
 ||+-?MNV$

 tF|T:AACvQ-PV*,>tLM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   r6  r7  r   r   r  )r^   r_   ra   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   )rX   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  r_   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   r^   r  r   as_unitr_   rs  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)L__name__
__module____qualname__r   r   fixturerc   rz   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r)  markparametrizer.  r>  r@  rr  rz  r}  r  r  r  r  r  r   r  	timedeltar  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r%  r4  r;  r>  rB  r   rL  rk  ru  rw  rz  r  r  r  r  rE  r   r   r
   r
      s    ^^#" #"J ^^/ /4 ^^}" }"~ ^^}" }"~
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 q0f00v0p00d#0J0(0(0<0<;0z0<0>"0H70r,,&0 [[k*J0G   [[Vfg%670 80,0\0.08 [[W&NO0 P06(0T0 0B0r   r
   infer_stringFTpyarrow)markskwargsr   rw  r  dataz2019-06-01 00:09:12z2019-06-01 00:10:29r6  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_stringrw  r  r6  r  )r   r^   r_   r   r  r   r   )r  r  r  r   r   s        r   #test_merge_asof_non_numerical_dtyper     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)rb  1315r   )r   	left_val1)r  r  ry  r   r6  r  r  r   r   )r   r   r  r  r9  r   r   s     r   *test_merge_asof_non_numerical_dtype_objectr  6  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   r^   r_   r   r   r   )r  r   r   r   r   r   s         r   test_merge_asof_index_behaviorr  H  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   )r^   r_   r   r   r   r   r   r   r   r   s       r   'test_merge_asof_numeric_column_in_indexr  ^  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   rA  )namesr  r   r  r@  r$  r  )r^   r_   
MultiIndexfrom_arraysr   r   r   r  s       r   ,test_merge_asof_numeric_column_in_multiindexr  h  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  )rN  23r   r  r  r   r  )mnor6  r  r  )	r^   r_   r   r   r  r   r   r   r   r  s     r   3test_merge_asof_numeri_column_in_index_object_dtyper  x  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   rN  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   )
r^   rs  r_   r  r=  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   rW   )r   r   r   )r   r   r   zcolumn label 'a'r  r   r   r   r  r   )r^   r_   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r*  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   r7  r9  )r  r   r   )r^   r_   ra   r   r   r   r   r   )r*  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]rN  )	timestampr<  r  r  r  )r  r]  r^  )r^   Seriesr  r_   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  )
r^   r  r   ro  flags	writeabler   r_   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   )
categoriesrw  r  r   )c1c2tvr   r  r  r  r   _left_right)r   r   r   suffixesr	  )r  r  r  v_leftv_right)	r^   r_   r=  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   )%r  numpyr   r   pandas.util._test_decoratorsutil_test_decoratorstdpandasr^   r   r   r   r   r   pandas._testing_testingr   pandas.core.reshape.merger   r
   r  r  param
skip_if_nor  r  r  r  r  r  r  r  r  r  r  r  rE  r   r   <module>r     s      ) )    0I40 I40Xh 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   