
    Eg                    t   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j                            d	d
 ej        d ej        d                    g          ej                            dddidddg          ej                            dddgddgg          d                                     Zd Ze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                            d#d$ ej        d% ej        d                     ej        d& ej        d                    g          d'             Z$ ej        d          d(             Z%d) Z&d* Z'dS )+    N)Index	Timedelta
merge_asofoption_contextto_datetime)
MergeError)smsusns)paramsc                     | j         S )z-
    Resolution for datetimelike dtypes.
    )param)requests    _/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/tests/reshape/merge/test_merge_asof.pyunitr      s    
 =    c                      e Zd ZdYd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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j                            d' e)d(           e*j+        d)*          gd+d,g-          d.             Z,d/ Z-d0 Z.d1 Z/d2 Z0d3 Z1d4 Z2d5 Z3d6 Z4d7 Z5d8 Z6d9 Z7d: Z8d; Z9d< Z:d= Z;d> Z<d? Z=d@ Z>dA Z?dB Z@dC ZAdD ZBdE ZCej                            dFdG dH gdIdJg-          ej                            dKdLdMg          dN                         ZDdO ZEdP ZFdQ ZGej                            dg dR          dS             ZHdT ZIdU ZJdV ZKdW ZLdXS )ZTestAsOfMergeFc                     |r-|                     ddgd                              d          }t          |j                  |_        |S )Ntimetickerlast)keepTdrop)drop_duplicatesreset_indexr   r   )selfdfdedupes      r   	prep_datazTestAsOfMerge.prep_data   sX     	##VX$6V#DDPP Q  B bg&&	r   c                    t          j        g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgd                    d                    }|d                             d          |d<   |d                             d          |d<   |                     |          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&   sn   \LLLMMMNNNNNNNNNNNNNNNMMMPPPPPPKKKLLLLLLLLLLLLLLLIIIIIILLLKKKKKKKKKKKKKKKMMMMMMMMM7: >CCCHH=
 
 
@ k((337J..w77:~~b!!!r   c                 Z   t          j        g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d	gd
                    d                    }|d                             d          |d<   |d                             d          |d<   |                     |d          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EECCCCCCEEEEEEEEEEEEEEECCCCCCCCCCCCCCCCCCCCCCCC!$ *//44'
 
 
* uI$$Y//5	uI$$Y//5	~~b~...r   c                 B   t          j        g dg dg dg dg dg dg dg dd	d
dddt          j        t          j        gg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgd                    d                    }|d                              d!          |d <   |d"                             d#          |d"<   |d$                             d!          |d$<   |d%                             d!          |d%<   |                     |          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   _   \                 ,FF                                    Wtj FKKCPPmw
 w
 w
p k((337J..w77:uI$$Y//5	uI$$Y//5	~~b!!!r   c                 B   t          j        g dg dg dg dg dg dg dg dd	d
dddt          j        t          j        gg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgd                    d                    }|d                              d!          |d <   |d"                             d#          |d"<   |d$                             d!          |d$<   |d%                             d!          |d%<   |                     |          S r   r   rk   s     r   	tolerancezTestAsOfMerge.toleranceg  r   r   c                 6   t          j        dddddt          j        t          j        gg dg dg dg d	g d
g dg ddddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gg dg dg dg dg dg dg d g d!g d!gd"                    d#          $          }|d%                             d&          |d%<   |d'                             d(          |d'<   |d)                             d&          |d)<   |d*                             d&          |d*<   |                     |          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     \ ,FF               ,FF ,FF ,FF ,FF ,FF ,FF ,FF ,FF )&'3PRPVW(&'3PRPVW                  wdJ FKKCPPMg
 g
 g
P k((337J..w77:uI$$Y//5	uI$$Y//5	~~b!!!r   c                 6   t          j        dddddt          j        t          j        gg dg dg dg d	g d
g dg ddddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gdddddt          j        t          j        gg dg dg dg dg dg dg d g d!g d!gd"                    d#          $          }|d%                             d&          |d%<   |d'                             d(          |d'<   |d)                             d&          |d)<   |d*                             d&          |d*<   |                     |          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        ||           d
S )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JKK???QQRR<**///			RR
 
 D%C000
fh/////r   c                 ~   |dk    rt          j        d           t          j        t	          g d                              d| d          g dg dg dd	g d	
          }t          j        t	          g d                              d| d          g dg dg ddg d
          }t          ||dd           t          ||ddt          d                     t          j        t	          g d                              d| d          g dg dg dt          j	        dt          j	        t          j	        t          j	        gt          j	        dt          j	        t          j	        t          j	        gdg d
          }t          ||ddt          d          d          }t          j        ||           dS )r   r	   zNThis test is invalid for unit='s' because that would round the trades['time']])r%   r+   r.   r.   r.   M8[]r&   r&   r/   r/   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  sN   3;;K,   #    &t''BBB>>>444  <;;
 
 
$ #	 	 	  &t''	 	 	 SRRRRR1 4 5447
 
 
< 	66f::::66fYuEUEUVVVV<#    &t''BBB>>>444rvrvrv>rvrvrv>   JII#
 
 
( '' %
 
 
 	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        ||           dS )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  s     |***///JJKK???QQRR<**///ArvWW
 
 D%C9EE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        ||           dS )r   r   r   r   r   r   )r   r   r   r   r   nearestr   Nr   r   s        r   test_examples4zTestAsOfMerge.test_examples4  s     |***///JJKK???QQRR<**///			RR
 
 D%C9EEE
fh/////r   c                 Z    |}t          ||dd          }t          j        ||           d S )Nr   r   r   r   r   r   r   rl   r   r   r   r   s         r   
test_basiczTestAsOfMerge.test_basic  s6    FFv(CCC
fh/////r   c                    |}|j                             d          |_         |j                             d          |_         |j                             d          |_         t          ||dd          }t          j        ||           d S )Ncategoryr   r   r   )r   rj   r   r   r   r   s         r   test_basic_categoricalz$TestAsOfMerge.test_basic_categorical  s{    ,,Z88,,Z88"/00<<FFv(CCC
fh/////r   c                     |}|                     d          }t          ||ddd          }|j        |_        ||j                 }t	          j        ||           d S )Nr   Tr   )
left_indexright_onr   )	set_indexr   indexra   r   r   r   s         r   test_basic_left_indexz#TestAsOfMerge.test_basic_left_index  si    !!&))Ftf
 
 
  FN+
fh/////r   c                     |}|                     d          }t          ||ddd          }t          j        ||           d S )Nr   Tr   )left_onright_indexr   r  r   r   r   r   s         r   test_basic_right_indexz$TestAsOfMerge.test_basic_right_index  sT    !!&))FF
 
 
 	fh/////r   c                     |                     d          }|                     d          }|                     d          }t          ||ddd          }t          j        ||           d S )Nr   Tr   r   r  r   r  r   s         r   !test_basic_left_index_right_indexz/TestAsOfMerge.test_basic_left_index_right_index  ss    >>&))!!&))!!&))Ft(
 
 
 	fh/////r   c                     |                     ddg          }|                     d          }t          j        t          d          5  t	          ||dd           d d d            d S # 1 swxY w Y   d S )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4!!&))]:-KLLL 	J 	Jvv$DIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J   A))A-0A-c                     |                     d          }|                     ddg          }t          j        t          d          5  t	          ||dd           d d d            d S # 1 swxY w Y   d S )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2]:-LMMM 	J 	Jvv$DIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Jr  c                     |                     d          }|                     d          }d}t          j        t          |          5  t	          ||ddd           d d d            d S # 1 swxY w Y   d S )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11 	 	Dd   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   A**A.1A.c                     |                     d          }|                     d          }d}t          j        t          |          5  t	          ||ddd           d d d            d S # 1 swxY w Y   d S )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11 	 	4T   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                 \    |}t          ||ddd          }t          j        ||           d S )Nr   r   )r   left_byright_byr   r   s         r   test_basic_left_by_right_byz)TestAsOfMerge.test_basic_left_by_right_by  sA    Fvx(
 
 
 	fh/////r   c                     |}||j         dk             }t          ||dd          }t          j        |j        |j         dk    ddgf<   t          j        ||           d S )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"  se    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        ||           d S )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BB@@@>>>444  DCC!
 
 
& #  	 	 KJJHHHCCCCCC   =<<#
 
 
( <#    CBB@@@>>>444vvrv>vvrv> " RQQ%
 
 
* FFv8V:LMMM
fh/////r   dtypeobjectstringc                    t          j        t          g d          g dg dg dg ddg d          }|                    ||d          }t          j        t          g d	          g d
g dg dg ddg d          }|                    ||d          }t          j        t          g d          g dg dg dg dt          j        dddt          j        gt          j        dddt          j        gdg d          }|                    ||d          }t          ||dddg          }t          j        ||           d S )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44  DCC!
 
 
$ %??@@#  	 	 -,,HHHCCCCCC   =<<#
 
 
& %??@@<#    *//@@@>>>444vvrv>vvrv> " RQQ%
 
 
( ??eU#C#CDDFFv8V:LMMM
fh/////r   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                              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                              d	          }d}t          j        t          |          5  t          ||ddddg           d d d            d S # 1 swxY w Y   d S )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

 	 Z",q//1
Z((!S#6Z((!S#6Z((!S#6Z((!S#6	 211
 
 
 )F

 	 (]:S111 	X 	XtUt4QU,WWWW	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	Xs   !EE	E	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                              d	          }t          j        t          d
          dddgt          d
          dddgt          d          dddgt          d          dddggg d                              d	          }t          j        t          d          dddgt          d          dddgt          d          dddgt          d          dddggg d                              d	          }t	          ||ddddg          }t          j        ||           t          j        t          d          5  t	          ||ddddgdg           d d d            d S # 1 swxY w Y   d S )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11
 
 
 )F

 	 <Z((!S#6Z((!S#6Z((!S#6Z((!S#6	 211
 
 
 )F

 	 %Ddd|
 
 
 	h///]L
 
 
 
	 
	  t   
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s   GG	Gc           
      p
   t          j        g g dg dg dg dg dg dg dg dd	d
dddt          j        t          j        gg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d"g d#g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dIdJ                    dK          L          }|dM                             dN          |dM<   |dO                             dP          |dO<   |dQ                             dN          |dQ<   |dR                             dN          |dR<   |                     |          }t          j        g g dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg dcg ddg deg dfg dgg dhg deg dig djg djg dkg dlg dmg dng dog dpg dpg dqg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dd                    dK          L          }|dM                             dN          |dM<   |dO                             dP          |dO<   |                     |          }t          j        g g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dd                    dK          L          }|dQ                             dN          |dQ<   |dR                             dN          |dR<   |                     |d          }t          ||dd          }t          j	        ||           d S )Nr   r   r   r   r   r   r   r   r<   r=   r   r?   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )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 ,FF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PPqy

 y

 y

t %W-44Y??'
3::7CC"5/00;;"5/00;;>>(++NLLLNMMMN ONNN ONN	N
 ONNN ONNN ONNN NMMN QPPN QPPN LKKN MLLN MLLN MLLN MLLN  MLL!N" JII#N$ JII%N& MLL'N( LKK)N* LKK+N, LKK-N. LKK/N0 LKK1N2 NMM3N4 NMM5N6 NMM7N8 MLL9N: LKK;N< LKK=N> LKK?N@ LKKANB MLLCND MLLENF MLLGNH MLLINJ LKKKNL MLLMNN MLLONP LKKQNR LKKSNT LKKUNV KJJWNX LKKYNZ KJJ[N\ LKK]N^ LKK_N` JIIaNb LKKcNd JIIeNf NMMgNh NMMiNj LKKkNl NMMmNn MLLoNp MLLqNr MLLsNt MLLuNv MLLwNx KJJyNz LKK{N| LKK}N~ LKKN@ LKKANB LKKCND LKKENF MLLGNH MLLINJ NMMKNL LKKMNN KJJONP KJJQNR KJJSNT KJJUNV LKKWNX NMMYNZ NMM[N^ >CCCHHaQ
 Q
 Q
d !/00;;w#J/66w??z''9EEE9CCC9 DCC9 FEE	9
 FEE9 FEE9 FEE9 FEE9 DCC9 DCC9 DCC9 DCC9 DCC9 DCC9 DCC9  DCC!9" DCC#9$ DCC%9& DCC'9( DCC)9* DCC+9, DCC-9. DCC/90 DCC192 DCC394 DCC596 DCC798 DCC99: DCC;9< DCC=9> DCC?9@ DCCA9B DCCC9D DCCE9F DCCG9H DCCI9J DCCK9L DCCM9N DCCO9P DCCQ9R DCCS9T DCCU9V DCCW9X DCCY9Z DCC[9\ DCC]9^ DCC_9` DCCa9b DCCc9d DCCe9f DCCg9h DCCi9j DCCk9l DCCm9n DCCo9p DCCq9t *//44w<
 <
 <
z u,,Y77uu,,Y77ut44FFv(CCC
fh/////r   c                     d } ||          } ||          } ||          }t          ||d          }t          j        ||           d S )Nc                 v    | | j         dk                                 dd                              d          S )Nr&   r   r   )axisTr   )r   r   r   xs    r   <lambda>z0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>[	  s5    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    $ $ 	
 1T7766FFv666
fh/////r   c                    d}t          j        t          |          5  t          ||ddd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||ddgd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||d	           d d d            d S # 1 swxY w Y   d S )
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11 	T 	Tvvv(SSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T ]:-NOOO 	K 	Kvv68*<JJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K ]:-NOOO 	4 	4vv(3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s3   ?AA%BBB-CCCc                     t          j        ||g                              ddg                              d          }t	          ||dd          }|                     |          }t          j        ||           d S )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	  s|    Ivv&''[&(+,,[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        ||           d S )	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    l999)))DDEEl999999EEFFC///<II999999MM
 
 	fh/////r   c                     d}t          j        t          |          5  t          ||ddd           d d d            d S # 1 swxY w Y   d S )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11 	 	6hE   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A  AAc           
         t          ||ddt          d                     t          |                                |                                ddd           d}t          j        t
          |          5  t          ||ddd           d d d            n# 1 swxY w Y   t          j        t
          |          5  t          |                                |                                ddd	           d d d            n# 1 swxY w Y   d
}t          j        t
          |          5  t          ||ddt          d                      d d d            n# 1 swxY w Y   t          j        t
          |          5  t          |                                |                                ddd           d d d            d S # 1 swxY w Y   d S )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	  s    66fYt__UUUU 	    	
 	
 	
 	
 H ]:S111 	L 	Lvv&XKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L ]:S111 	 	""$$""$$   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 + ]:S111 	 	6h9T??BR   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ]:S111 	 	""$$""$$   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   7BBB>9DD
D+#EE!E 9GG
G
c                    |                     dd          }|                     dd          }|j        j        rJ |j        j        rJ t          j        t
          d          5  t          ||dd           d d d            n# 1 swxY w Y   |                     d          }|j        j        sJ |j        j        rJ t          j        t
          d          5  t          ||dd           d d d            n# 1 swxY w Y   |                     d          }|j        j        sJ |j        j        sJ t          ||dd           d S )	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	  s   ##Fe#<<##Fe#<< ;6666;6666]:-GHHH 	? 	?vv&X>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? ##F++{2222;6666]:-HIII 	? 	?vv&X>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? ##F++{2222{2222 	66f::::::s$   &BB
B
C==DDtolerance_ts1dayr   )daysr   zdatetime.timedelta)idsc                 \    t          ||dd|          }|}t          j        ||           d S )Nr   r   r   r   )r   r  rl   r   r   r   r   s          r   test_tolerancezTestAsOfMerge.test_tolerance	  sC     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        ||           d S )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	       |***///JJKK#3#3#3BRBRBRSSTT<**///BFTVXX
 
 D%C9PQRR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        ||           d S )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        ||           d S )Nz
2016-01-02Dr   UTC)startfreqperiodstzr   )datevalue1z
2016-01-01ABCDE)r  value2r  z1 dayr   r   BCDEE)r  r  r  )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3}U++   )A,,	 	
 
 %l33}U++   w--	 	
 
 D%Fi>P>PQQQ<%l3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        ||           d S )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"2"2PPQQ,,,;U;U;UVV
 
 <%%%+OObf- 
 
 D%C9PSTTT
fh/////r   c           
          |                     d          }|                     d          }|                     d          }t          ||dddt          d                    }t          j        ||           d S )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
  s    &&v..!!&))!!&))''
 
 
 	fh/////r   c                 \    t          ||ddd          }|}t          j        ||           d S )Nr   r   Fr  r   )r   rl   r   r   r   r   s         r   test_allow_exact_matchesz&TestAsOfMerge.test_allow_exact_matchesG
  sA    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        ||           d S )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
       |***///JJKK#3#3#3BRBRBRSSTT<**///


S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        ||           d S )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           	      x    t          ||ddt          d          d          }|}t          j        ||           d S )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
  sR     (( %
 
 
 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        ||           d S )N2016-07-15 13:30:00.030bobr   username2016-07-15 13:30:00.000r   r   r   versionr   r   r   r  r  F)r   r   r   r   r   r   )	rg   rh   r   r   r   r   r   r   r   r  s        r   'test_allow_exact_matches_and_tolerance2z5TestAsOfMerge.test_allow_exact_matches_and_tolerance2z
  s   l ";!<==E7SS
 
 l#.0IJ  q6	 
 
 C000<#%>$?@@"G3 
 
 	fh///CUKKK<#%>$?@@"G3 
 
 	fh/// %''
 
 
 <#%>$?@@"GF8 
 
 	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        ||           d S )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
   l#.0IJ  #I.	 
 
 l#.0IJ  q6	 
 
  %''
 
 
 <#.0IJ  #I.FBF+ 
 
 	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        ||           d S )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JKK#3#3#3BRBRBRSSTT<**///QRTVX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        ||           d S )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           
      ,   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        ||           d S )Nr   r   r         )Xr  YZr  r   r   r   der   r   r   r   r   r  r     )r  r  r  r  r  r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   s        r   test_forward_byzTestAsOfMerge.test_forward_by
  s     |'''...555 
 
 '''.../// 
 
 <'''...555R4	 
 
 D%CC9MM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        ||           d S )Nr  )r  r  r  r  r  r  r  r  )r  r  r  r  r  r  )r   r   r  r  r  r  r   r   r   r  r   r   s        r   test_nearest_byzTestAsOfMerge.test_nearest_by  s     |'''...555 
 
 '''.../// 
 
 <'''...555///	 
 
 D%CC9MMM
fh/////r   c                 v   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        ||           d S )N)20160525 13:30:00.020r   20160525 13:30:00.040r)  20160525 13:30:00.060)r   r   r   r   r   )r  g333333?g?gffffff?g      ?)r   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  sM   l#    '333  .--
 
 
" l#	 	 	  0//BBB   .--#
 
 
( CE:::<#    '333333  877
 
 
$ 	fh/////r   c                    t          j        g dt          d          dddg          }t          j        g dg dd	dd
g          }|                    d                              d          }t          ||d          }t          j        t          d          g dg ddg d          }t          j        ||           d S )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   lNNNy//  w'
 
 
 l'''0D0D0DEEe$
 
 

 oog&&222==C111<y//NNNEEE 
 /..
 
 
 	fh/////r   c                 n   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                  |_        |                    d                              d          }t          ||d          }t          j        t          d          g dt          d          dg d          } ||j                  |_        t          j        ||           d S )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  sS   -..3l222d9ooNNw'
 
 
 E#)$$	l'''4<<@@h'
 
 
 E#)$$	oog&&222==C111<y//555y// 
 211
 
 
 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                  |_        |                    d                              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        ||           d S )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l555,,,y// 
 /..
 
 
 E#)$$	l'''VUU...
 
 
 E#)$$	oog&&222==CU;;;<y//,,,55563SI	  988
 
 
 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	          }|                    d
                              d          }|                    d
                              d          }t          ||d
d          }t          j        t          d          g dg dg ddg d          }t          j        ||           d S )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  si   l{++333
 
 
  0//!
 
 
& l333MMMQQQ 
 -,,
 
 
 oog&&222==oog&&222==CV<<<<{++333
 
 
 QPP   766#
 
 
( 	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            d S # 1 swxY w Y   d S )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  s     	V+CCUC|///JJKK???QQRR]:S111 	, 	,tUs++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   A99A= A=c                 J   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            d S # 1 swxY w Y   d S )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*IJJ
 
 ,__^$=$=$=>> 
 
 ]:S111 	, 	,tUs++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   8B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        ||           d S )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+  s    \1#BNA34G4GHHIIBsSz:::<qc".!:M:M N NO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                 ~   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            d S # 1 swxY w Y   d S )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'    ?4>>>c3'((D)))**	,UHHII\	


CCDD]:S111 	0 	0v~~7B3/////2w3////		0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   9,B22B69B6c                    t          j        t           j        ddg|          }|j        j        dv r$t          j        |j        j                  j        }n#t          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                             d          |d<   t          j        ||           d S )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  s    hq!},@AAA9>Z''hsy4559GGhsy4559G A|111#))(	 
 
 333#))(	 
 
 D%Y	,BxPPP<111#))*??	 
 
 !h'?vNNN 	V"*9"5"<"<=T"U"UHY
fh/////r   c                    t          j        t          j        dg                              d          dgdgd          }t          j        t          j        dg                              d          dgdgd          }t	          ||dd	
          }t          j        t          j        dd          dddggg d          }t          j        ||           d S )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M#% 
 
 *L>::FFuMM#% 
 
 D%HBBB<l<E222AsC@A@@@
 
 
 	fh/////r   c                 V   t          j        t          j        dg                              d          dgdgdgd          }t          j        t          j        dg                              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         
                    d          |d<   t          j        ||           d S )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  sM   |+\N;;GGNN#9#	 
 
 +\N;;GGNN#9#	 
 
 D%Y	,BxPPP<l<E222GQDE???
 
 
 !hxv>>> 	V"*9"5"<"<=T"U"UHY
fh/////r   )rc   int16zm8[ns]zM8[us]c                 t   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        ||           d S )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44# 
 
 (A3e444# 
 
 D%HBBB<(A3e444#55	 
 
 	fh/////r   c                 x   |dk    rt          j        d           t          j        t	          t          g dg d                    ddg          }t          j        |d         d                              d	| d
          |d<   t          j        t	          t          g dg d                    ddg          }t          j        |d         d                              d	| d
          |d<   t          j        t	          t          g dg ddt          j	        ddt          j	        t          j	        g                    g d          }t          j        |d         d                              d	| d
          |d<   t          ||dt          d          d          }t          j        ||           d S )Nr	   zHThis test is invalid with unit='s' because that would round left['time'])r   r   r   r     r  )r   r   r   r   r  r   r   r   r`   r
   zm8[r   )r   r   	   r  r     r   r   r   r  )r   r   r   1msr   )r   r   r   )r   r   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  s   3;;K%  
 |+++-?-?-?@@AAV$
 
 

 tF|T::AA----PPV***,>,>,>??@@W%
 
 

 ft<<CCM$MMMRRf<***&&&1bfbf5   .--	
 	
 	
 ?8F+;TBBII-PT---XX%Fi.>.>)
 
 
 	fh/////r   c                    t          j        g dg dd          }t          j        g dg dd          }|d                             |          |d<   |d                             |          |d<   t          j        g dg dt          j        ddgd	          }|d                             |          |d<   t          ||dd
          }t          j        ||           d S )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     |+++999EEFF;;;YYYGGHHI$$]33S	3Z&&}55c
<++999BFCQTCUVV
 
 !,,];;D%C2>>>
fh/////r   c           	      `   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        ||           d S )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NN|0005'qrrSSS5$!tf9LMMNNUt{m
 
 
 <+++"122YvzTF* 
 -%GQ5  	
 	
 	
 	fh///d{m
 
 
 <"vzTF*S#s3 
 ((
 
 
 	fh/////r   c           	      L   |dk    rt          j        d           t          j        ddd|          t	          d                              |          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
        ||           d S )Nr	   z?This test is invalid with unit='s' because that would round dr1z1/1/2020z	1/20/20202D)r  endr  r   g?)secondsz2/1/2020)r  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;;KQ   m+Dt
 
 
c"""**4001 m**4HHHlFE?"2B32G2GHHHlFE?"2B32G2GHHH<E**"2B32G2G
 
 
 ,,,
 
 
 	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" m" ^m"^
0 
0 
0W0 W0 W0r0 0 00 0 00 0 00 0 00 0 00 0 00 0 0J J JJ J J    0 0 00 0 0?0 ?0 ?0B [Wx&:;;B0 B0 <;B0HX X X80 0 0dY0 Y0 Y0v0 0 0
4 
4 
40 0 00 0 0  , , ,\; ; ;. [	6		.H.A6667./   
0 0 
00 0 00 0 0)0 )0 )0V0 0 0$0 0 0 0 0 00 0 00 0 00 0 000 00 00d#0 #0 #0J0 0 0(0 0 0(0 0 0<0 0 0<;0 ;0 ;0z0 0 0<0 0 0>"0 "0 "0H70 70 70r
, 
, 
,, , ,&0 0 0 [667i=T    [Vfg%6770 0 87 0,0 ,0 ,0\0 0 0.0 0 08 [W&N&N&NOO0 0 PO06'0 '0 '0R0 0 0 0 0 0B0 0 0 0 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            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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  s5    
-|	<	< . .|S$Kt444c4[555]U
 
 
 	. 	. tU--f---		. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.. . . . . . . . . . . . . . . . . .s6   ABA8,B8A<	<B?A<	 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            d S # 1 swxY w Y   d S )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  s    <000OOPPDLOOOLLMME	Q
 
 
 
 
 		
 	
 	
 	
	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A55A9<A9)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        ||           d S )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  _  s     ***6***E<zzzJJRWXXXDL'???3???KKKEe..v..F| zzzIIIN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        ||           d S )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  s    <lll+53M3M3MNNNDL#|||,E)))#4N4N4NOOOEeS3???F|))),,,\\\RRSSH&(+++++r   c                     t          j        dg dit           j                            g dg dgddg                    } t          j        d	g d
it           j                            g dg dgddg                    }t	          | |dd          }t          j        g dg dg d
d          }t          j        ||           d S )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    <	lllm''OOO(DSRUJ'WW  D L	lllm''OOO(DSRUJ'WW  E
 eS3???F|))),,,\\\RRSSH&(+++++r   c                  p   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            n# 1 swxY w Y   |                                                     ddg          } |                                                    ddg          }t          j        t
          d
          5  t          | |dd           d d d            d S # 1 swxY w Y   d S )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   <lll+5s3S3S3STTTDL#|||,E///PS4T4T4TUUUE	Q
 
 
 ; ; 	4c::::	; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ''c
33D))3*55E	Q
 
 
 ; ; 	4c::::	; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s$   2BBB
D++D/2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	        ||           d S )Nz2021/01/01 00:37z2021/01/01 01:40r   r   r\  r   r   )r   tsz2021/01/01 00:00r   1h)r  r  r  r   r   )r     r   r  Fbackward)r  r  r   r   )r   r   r  r  r  )r   r  r   )
rg   r  rh   r  rK  r   r   r   r   r   )r   dtir   ts_merger   r   r   s          r   test_merge_asof_array_as_onr    sh   

	/0d  C LQ	
 	
 E }l-..4  H <iii())D!  F |)))261a.QQR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            n# 1 swxY w Y   t          j        t          d          5  t          | |dd
           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | |dd           d d d            d S # 1 swxY w Y   d S )N)r   r   r   )r   r   r   r`   )r   r   r   )r   r   r   zcolumn label 'a'r  r   r   r   r  r   )rg   rh   r   r  r  r   r  s     r   +test_merge_asof_raise_for_duplicate_columnsr    s    </E/E/EFFFDL))).E.E.EFFFE	z);	<	<	< ( (43''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
z);	<	<	< C C4kBBBBC C C C C C C C C C C C C C C 
z);	<	<	< B B4
SAAAAB B B B B B B B B B B B B B B B B Bs6   A11A58A5B77B;>B;C>>DDr7  Int64zint64[pyarrow]ztimestamp[s][pyarrow]c                    t          j        g dg dd          }t          j        g dg dd          }|                    d| i          }|                    d| i          }t          ||d          }t          j        g dg dt          j        dd	gd
          }|                    d| i          }t          j        ||           d S )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 L!		"	
 	
 E ;;
E*++DLL*e,--Ee
333F|!		!		&#s+	
 	
 H 
E23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        ||           d S )
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//JJJF|ss	
 	
 H &(+++++r   c                  J   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	        ||           d S )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    9aS&111DIqc!7333E(-DJ%).EK&e$GGGF|aSA377sCCCH&(+++++r   c            
      4   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        ||           d S )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  &  sV   <.!5!5!53*MMM%!)qq		
 	
 D L.#sc
CCC%!)Qq		
 	
 E $<8$  F |.!5!5!53*MMM%!)qAhh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     sm          ) ) ) ) ) ) ) ) )                        0 0 0 0 0 0 ...///  0/W40 W40 W40 W40 W40 W40 W40 W40th ULFL]R]95M5MNNNO  c{4EEF  
23c;P5QR 	. 	.	   	.
 
 
$ D115511 , , ,, , ,, , , ; ; ;*), ), ),XB B B %]R]9-E-EFFF,MBM)4L4LMMM , , ,8 y, , ,,	, 	, 	,#, #, #, #, #,r   