o
    ҷh                  
   @   sx  d dl Z d dlZd dlZd dlZd dlm  mZ d dl	Z
d dl	mZmZmZmZmZ d dlmZ d dlmZ ejg dddd ZG dd	 d	Zejd
ddidddgejdddgddggdd Zdd Zejd
dddddddddgdd Zdd Zd d! Zd"d# Zd$d% Z d&d' Z!ejd(d)ej"d*e#d+d,ej"d-e#d+d,gd.d/ Z$d0d1 Z%dS )2    N)Index	Timedelta
merge_asofread_csvto_datetime)
MergeError)smsusns)paramsc                 C   s   | j S )z-
    Resolution for datetimelike dtypes.
    )param)request r   ]/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/reshape/merge/test_merge_asof.pyunit   s   r   c                   @   s  e Zd ZdddZejdd Zejdd Zejdd	 Zejd
d Z	ejdd Z
ejdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&ej'j(dFe)dGe*j+dHdIgdJdKgdLdMdN Z,dOdP Z-dQdR Z.dSdT Z/dUdV Z0dWdX Z1dYdZ Z2d[d\ Z3d]d^ Z4d_d` Z5dadb Z6dcdd Z7dedf Z8dgdh Z9didj Z:dkdl Z;dmdn Z<dodp Z=dqdr Z>dsdt Z?dudv Z@dwdx ZAdydz ZBd{d| ZCej'j(d}d~d dd gddgdLej'(dddgdd ZDdd ZEdd ZFdd ZGej'(dddgdd ZHdd ZIdd ZJdd ZKdd ZLdS )TestAsOfMergeFc                 C   sD   |ddd|}t |}|r|jddgddjdd	}t|j|_|S )
Nreshapemergedatatimetickerlast)keepTdrop)r   drop_duplicatesreset_indexr   r   )selfdatapathnamededupepathxr   r   r   	read_data   s   zTestAsOfMerge.read_datac                 C      |  |dS )Nz
trades.csvr$   r   r   r   r   r   trades(      zTestAsOfMerge.tradesc                 C   s   | j |dddS )Nz
quotes.csvTr!   r&   r'   r   r   r   quotes,   s   zTestAsOfMerge.quotesc                 C   r%   )Nasof.csvr&   r'   r   r   r   asof0   r)   zTestAsOfMerge.asofc                 C   r%   )Nztolerance.csvr&   r'   r   r   r   	tolerance4   r)   zTestAsOfMerge.tolerancec                 C   r%   )Nzallow_exact_matches.csvr&   r'   r   r   r   allow_exact_matches8   r)   z!TestAsOfMerge.allow_exact_matchesc                 C   r%   )Nz%allow_exact_matches_and_tolerance.csvr&   r'   r   r   r   !allow_exact_matches_and_tolerance<   r)   z/TestAsOfMerge.allow_exact_matches_and_tolerancec                 C   sl   t g dg dd}t g dg dd}t g dg dg dd}t||dd	}t|| d
S )doc-string examples      
   abcr7   left_valr3               r7   	right_valr3   r>   r@   r7   r;   rB   r7   onNpd	DataFramer   tmassert_frame_equalr   leftrightexpectedresultr   r   r   test_examples1@   s   zTestAsOfMerge.test_examples1c                 C   sB  |dkr	t d tjtg dd| dg dg dg dd	g d	d
}tjtg dd| dg dg dg ddg dd
}t||ddd t||ddtdd tjtg dd| dg dg dg dtj	dtj	tj	tj	gtj	dtj	tj	tj	gdg dd
}t||ddtddd}t
|| dS )r1   r   zNThis test is invalid for unit='s' because that would round the trades['time']])20160525 13:30:00.023z20160525 13:30:00.03820160525 13:30:00.048rS   rS   zM8[]MSFTrV   GOOGrW   AAPL皙I@rZ   g\(@(\@g     X@K      d   r_   r_   )r   r   pricequantitycolumns)rR   rR   20160525 13:30:00.03020160525 13:30:00.041rS   20160525 13:30:00.049z20160525 13:30:00.072z20160525 13:30:00.075)rW   rV   rV   rV   rW   rX   rW   rV   )     @rZ   \(I@QI@rg   (\X@rg   gzGJ@)=
ףp@{GI@=
ףpI@      J@rk   q=
ףX@gףp=
@gp=
J@)r   r   bidaskr   r   rF   by2msrF   rs   r.   rh   rm   )r   r   r`   ra   rp   rq   10msFrF   rs   r.   r/   N)pytestskiprH   rI   r   astyper   r   npnanrJ   rK   )r   r   r(   r+   rO   rP   r   r   r   test_examples2L   sd   
zTestAsOfMerge.test_examples2c                 C   sr   t g dg dd}t g dg dd}t g dg dddtjgd}t||d	d
d}t|| dS )r1   r2   r6   r:   r<   rA   r3   r?   rD   r7   forwardrF   	directionNrH   rI   r{   r|   r   rJ   rK   rL   r   r   r   test_examples3   s   zTestAsOfMerge.test_examples3c                 C   sn   t g dg dd}t g dg dd}t g dg dg dd}t||dd	d
}t|| dS )r1   r2   r6   r:   r<   rA   )r3   r?   r@   rD   r7   nearestr   NrG   rL   r   r   r   test_examples4   s   zTestAsOfMerge.test_examples4c                 C   s$   |}t ||ddd}t|| d S )Nr   r   rr   r   rJ   rK   r   r(   r-   r+   rO   rP   r   r   r   
test_basic   s   zTestAsOfMerge.test_basicc                 C   sN   |}|j d|_ |j d|_ |j d|_ t||ddd}t|| d S )Ncategoryr   r   rr   )r   rz   r   rJ   rK   r   r   r   r   test_basic_categorical   s   z$TestAsOfMerge.test_basic_categoricalc                 C   sB   |}| d}t||dddd}|j|_||j }t|| d S )Nr   Tr   )
left_indexright_onrs   )	set_indexr   indexrc   rJ   rK   r   r   r   r   test_basic_left_index   s   


z#TestAsOfMerge.test_basic_left_indexc                 C   s0   |}| d}t||dddd}t|| d S )Nr   Tr   )left_onright_indexrs   r   r   rJ   rK   r   r   r   r   test_basic_right_index   s   

z$TestAsOfMerge.test_basic_right_indexc                 C   s@   | d}| d}| d}t||dddd}t|| d S )Nr   Tr   r   r   rs   r   r   r   r   r   !test_basic_left_index_right_index   s   



z/TestAsOfMerge.test_basic_left_index_right_indexc                 C   s\   | ddg}| d}tjtdd t||ddd W d    d S 1 s'w   Y  d S )Nr   r`   zleft can only have one indexmatchTr   r   r   rx   raisesr   r   r   r(   r+   r   r   r   test_multi_index_left   s
   
"z#TestAsOfMerge.test_multi_index_leftc                 C   s\   | d}| ddg}tjtdd t||ddd W d    d S 1 s'w   Y  d S )Nr   rp   zright can only have one indexr   Tr   r   r   r   r   r   test_multi_index_right   s
   
"z$TestAsOfMerge.test_multi_index_rightc                 C   ^   | d}| d}d}tjt|d t||dddd W d    d S 1 s(w   Y  d S )Nr   z:Can only pass argument "left_on" OR "left_index" not both.r   r`   T)r   r   r   r   r   r(   r+   msgr   r   r   test_on_and_index_left_on   s   


"z'TestAsOfMerge.test_on_and_index_left_onc                 C   r   )Nr   z<Can only pass argument "right_on" OR "right_index" not both.r   rp   T)r   r   r   r   r   r   r   r   test_on_and_index_right_on	  s   


"z(TestAsOfMerge.test_on_and_index_right_onc                 C   s&   |}t ||dddd}t|| d S )Nr   r   )rF   left_byright_byr   r   r   r   r   test_basic_left_by_right_by  s
   
z)TestAsOfMerge.test_basic_left_by_right_byc                 C   sL   |}||j dk }t||ddd}tj|j|j dkddgf< t|| d S )NrV   r   r   rr   rp   rq   )r   r   r{   r|   locrJ   rK   )r   r(   r-   r+   rO   qrP   r   r   r   test_missing_right_by  s
   z#TestAsOfMerge.test_missing_right_byc                 C      t jtg dg dg dg dg ddg dd}t jtg dg d	g d
g dg ddg dd}t jtg dg dg dg dg dtjdddtjgtjdddtjgdg dd}t||dddgd}t|| d S )NrR   rR   z20160525 13:30:00.046rS   20160525 13:30:00.050rU   ARCANSDQr   BATSr   rY   r\   r   r   exchr`   ra   rb   rR   rR   rd   re   z20160525 13:30:00.045rf   )rW   rV   rV   rV   rW   rX   r   r   r   r   r   r   Gz@rZ   rh   ri   rg   rj   r[   rl   rm   rn   rk   ro   r   r   r   rp   rq   rZ   rg   r   rl   rk   r[   r   r   r   r`   ra   rp   rq   r   r   r   rr   rH   rI   r   r{   r|   r   rJ   rK   r   r(   r+   rO   rP   r   r   r   test_multiby#  J   	
	zTestAsOfMerge.test_multibyc                 C   r   )Nr   )r   r   r3   r3   r=   r   rY   r\   r   rb   r   )r3   r   r   r   r3   r=   r   r   r   r   rZ   rg   r   rl   rk   r[   r   r   r   r   rr   r   r   r   r   r    test_multiby_heterogeneous_typesd  r   z.TestAsOfMerge.test_multiby_heterogeneous_typesc                 C   s   t jtdddgtdddgtdddgtdddggg ddd	}|jt d
 |_t jtddddgtddddgtddddgtddddggg ddd	}d}tjt|d t	||ddddgd W d    d S 1 suw   Y  d S )N20160602r3   r7   r=   20160603r8   r   k1k2rb   r   r   20160502      ?       @20160503      @      @r   r   r   valuezincompatible merge keysr   Tr   r   r   )
rH   rI   r   r   r   	Timestamprx   r   r   r   )r   rM   rN   r   r   r   r   test_mismatched_index_dtype  s2   

"z)TestAsOfMerge.test_mismatched_index_dtypec              	   C   sX  t jtdddgtdddgtdddgtdddggg ddd	}t jtd
dddgtd
dddgtddddgtddddggg ddd	}t jtddddgtddddgtddddgtddddggg ddd	}t||ddddgd}t|| tjt	dd t||ddddgdgd W d    d S 1 sw   Y  d S )Nr   r3   r7   r=   r   r8   r   rb   r   r   r   r   r   r   r   r   Tr   r   r   z,left_by and right_by must be the same lengthr   )r   r   r   r   )
rH   rI   r   r   r   rJ   rK   rx   r   r   rL   r   r   r   test_multiby_indexed  s\   


"z"TestAsOfMerge.test_multiby_indexedc                 C   sH   |  |d}|  |d}| j |ddd}t||ddd}t|| d S )	Nz	asof2.csvztrades2.csvzquotes2.csvTr*   r   r   rr   )r$   r   rJ   rK   )r   r   rO   r(   r+   rP   r   r   r   test_basic2  s
   zTestAsOfMerge.test_basic2c                 C   s>   dd }||}||}||}t ||dd}t|| d S )Nc                 S   s    | | j dk jdddjddS )NrV   r   r3   )axisTr   )r   r   r   r#   r   r   r   <lambda>  s
    z0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>r   rE   r   )r   r(   r-   r+   frO   rP   r   r   r   test_basic_no_by  s   zTestAsOfMerge.test_basic_no_byc                 C   s   d}t jt|d t||dddd W d    n1 sw   Y  t jtdd t||ddgdd W d    n1 s>w   Y  t jtdd t||dd	 W d    d S 1 s]w   Y  d S )
Nz6incompatible merge keys \[1\] .* must be the same typer   r   rp   r   )r   r   rs   zcan only asof on a key for leftrr   )rs   rx   r   r   r   r   r   r   r   test_valid_join_keys
  s   "z"TestAsOfMerge.test_valid_join_keysc                 C   sL   t ||gddgjdd}t||ddd}| |d}t|| d S )Nr   r   Tr   rr   r,   )rH   concatsort_valuesr   r   r$   rJ   rK   )r   r   r(   r+   r   rP   rO   r   r   r   test_with_duplicates  s   
z"TestAsOfMerge.test_with_duplicatesc                 C   sl   t g dg dd}t g dg dd}t||dd}t g dg dg dd}t|| d S )	N)r3   r3   r>   r3   r=   r>   )keyr;   )r3   r=   r=   )r   rB   r   rE   )r   r;   rB   rG   r   df1df2rP   rO   r   r   r   test_with_duplicates_no_on   s   z(TestAsOfMerge.test_with_duplicates_no_onc                 C   sJ   d}t jt|d t||dddd W d    d S 1 sw   Y  d S )Nz/allow_exact_matches must be boolean, passed foor   r   r   foorF   rs   r/   r   r   r   r   r   test_valid_allow_exact_matches)  s   
"z,TestAsOfMerge.test_valid_allow_exact_matchesc                 C   sT  t ||ddtdd t | | dddd d}tjt|d t ||dddd W d    n1 s5w   Y  tjt|d t | | ddd	d W d    n1 sYw   Y  d
}tjt|d t ||ddtd d W d    n1 s~w   Y  tjt|d t | | dddd W d    d S 1 sw   Y  d S )Nr   r   1sru   r   r3   z6incompatible tolerance .*, must be compat with type .*r   r   ztolerance must be positive)r   r   r   rx   r   r   r   r   r   r   test_valid_tolerance1  sH   	"z"TestAsOfMerge.test_valid_tolerancec                 C   s  |j ddd}|j ddd}|jjrJ |jjrJ tjtdd t||ddd W d    n1 s4w   Y  | d}|jjsDJ |jjrJJ tjtdd t||ddd W d    n1 sdw   Y  | d}|jjstJ |jjszJ t||ddd d S )	Nr   F)	ascendingzleft keys must be sortedr   r   rr   zright keys must be sorted)r   r   is_monotonic_increasingrx   r   
ValueErrorr   r   r   r   r   test_non_sorted_  s"   

zTestAsOfMerge.test_non_sortedtolerance_ts1dayr3   )daysr   zdatetime.timedelta)idsc                 C   s&   t ||dd|d}|}t|| d S )Nr   r   ru   r   )r   r   r(   r+   r.   rP   rO   r   r   r   test_tolerancev  s
   
zTestAsOfMerge.test_tolerancec                 C   t   t g dg dd}t g dg dd}t g dg ddtjdgd}t||d	d
dd}t|| d S )Nr2   r6   r:   r3   r=   r>   r@      rA   r3   r   rD   r7   r~   rF   r   r.   r   rL   r   r   r   test_tolerance_forward     z$TestAsOfMerge.test_tolerance_forwardc                 C   r   )Nr2   r6   r:   r   rA   r3   r   rD   r7   r   r   r   rL   r   r   r   test_tolerance_nearest  r   z$TestAsOfMerge.test_tolerance_nearestc              	   C   s   t t jtdddtd|dtdd}t t jtdddtd|dtdd	}t	||d
t
dd}t t jtdddtd|dtdtdd}t|| d S )Nz
2016-01-02Dr4   UTC)startfreqperiodstzr   )datevalue1z
2016-01-01ABCDE)r   value2r   z1 dayrF   r.   BCDEE)r   r   r   )rH   rI   
date_ranger   pytztimezoner{   arangelistr   r   rJ   rK   )r   r   rM   rN   rP   rO   r   r   r   test_tolerance_tz  sH   zTestAsOfMerge.test_tolerance_tzc                 C   st   t g dg dd}t g dg dd}t g dg dddtjgd}t||d	d
dd}t|| d S )N)皙?g      @g%@r6   r:   )r         @ffffff
@g      @g      '@rA   r3   r  rD   r7   r         ?r   r   rL   r   r   r   test_tolerance_float  s   
z"TestAsOfMerge.test_tolerance_floatc                 C   sF   | d}| d}| d}t||dddtdd}t|| d S )Nr   Tr   r   )r   r   rs   r.   )r   r   r   rJ   rK   )r   r(   r+   r.   rO   rP   r   r   r   test_index_tolerance  s   


z"TestAsOfMerge.test_index_tolerancec                 C   s&   t ||dddd}|}t|| d S )Nr   r   Fr   r   )r   r(   r+   r/   rP   rO   r   r   r   test_allow_exact_matches  s
   
z&TestAsOfMerge.test_allow_exact_matchesc                 C   p   t g dg dd}t g dg dd}t g dg dg dd}t||dd	d
d}t|| d S )Nr2   r6   r:   r   rA   )r=   r@   r   rD   r7   r~   FrF   r   r/   rG   rL   r   r   r    test_allow_exact_matches_forward     
z.TestAsOfMerge.test_allow_exact_matches_forwardc                 C   r  )Nr2   r6   r:   r   rA   )r=   r>   r   rD   r7   r   Fr  rG   rL   r   r   r    test_allow_exact_matches_nearest  r  z.TestAsOfMerge.test_allow_exact_matches_nearestc                 C   s,   t ||ddtddd}|}t|| d S )Nr   r   100msFrw   )r   r   rJ   rK   )r   r(   r+   r0   rP   rO   r   r   r   &test_allow_exact_matches_and_tolerance  s   z4TestAsOfMerge.test_allow_exact_matches_and_tolerancec                 C   s   t tdgdgd}t tddgddgd}t||dd	}t tdgdgdgd
}t|| t||ddd}t tdgdgdgd
}t|| t||ddtdd}t tdgdgtjgd
}t|| d S )N2016-07-15 13:30:00.030bobr   username2016-07-15 13:30:00.000r3   r=   r   versionr   rE   r   r  r  F)rF   r/   rv   rF   r/   r.   )	rH   rI   r   r   rJ   rK   r   r{   r|   r   r   r   r   'test_allow_exact_matches_and_tolerance2  sP   	z5TestAsOfMerge.test_allow_exact_matches_and_tolerance2c                 C   s   t tddgddgd}t tddgddgd}t||d	d
tdd}t tddgddgtjtjgd}t|| d S )Nr  r  charlier  r  r3   r=   r  r   Frv   r  r  )	rH   rI   r   r   r   r{   r|   rJ   rK   r   r   r   r   'test_allow_exact_matches_and_tolerance3N  s<   	
	z5TestAsOfMerge.test_allow_exact_matches_and_tolerance3c                 C   sv   t g dg dd}t g dg dd}t g dg dtjddgd}t||d	d
ddd}t|| d S )Nr2   r6   r:   r3   r>      r?   r   rA   r?   r   rD   r7   r~   Fr3   rF   r   r/   r.   r   rL   r   r   r   .test_allow_exact_matches_and_tolerance_forwards     z<TestAsOfMerge.test_allow_exact_matches_and_tolerance_forwardc                 C   sv   t g dg dd}t g dg dd}t g dg dtjddgd	}t||d
dddd}t|| d S )Nr2   r6   r:   r   )r3   r>   r!  r@   r   rA   r!  r   rD   r7   r   Fr3   r"  r   rL   r   r   r   .test_allow_exact_matches_and_tolerance_nearest  r$  z<TestAsOfMerge.test_allow_exact_matches_and_tolerance_nearestc              
   C   s   t g dg dg dd}t g dg dg dd}t g dg dg ddtjd	d
dgd}t||dddd}t|| d S )Nr3   r4   r5         )Xr)  YZr*  r7   r8   r9   der7   r8   r;   r3   r?   r   r(     )r)  r+  r*  r+  r*  r7   r8   rB   r3   r   r(  r1  r7   r8   r;   rB   r7   r8   r~   rF   rs   r   r   rL   r   r   r   test_forward_by  s*   	zTestAsOfMerge.test_forward_byc                 C   s   t g dg dg dd}t g dg dg dd}t g dg dg dg dd	}t||d
ddd}t|| d S )Nr&  )r)  r)  r+  r+  r*  r,  r/  r0  )r)  r+  r+  r+  r*  r2  )r3   r3   r   r   r1  r3  r7   r8   r   r4  rG   rL   r   r   r   test_nearest_by  s*   	zTestAsOfMerge.test_nearest_byc                 C   s   t jtg dg dg ddg dd}t jtg dg dg dd	g d	d}t||d
dd}t jtg dg dg dg ddg dd}t|| d S )N)20160525 13:30:00.020rd   20160525 13:30:00.040r   20160525 13:30:00.060)r3   r=   r3   r>   r=   )r  g333333?g?gffffff?g      ?)r   r   r   rb   )z20160525 13:30:00.015r7  z20160525 13:30:00.025z20160525 13:30:00.035r8  z20160525 13:30:00.055r9  z20160525 13:30:00.065)r=   r3   r3   r>   r=   r3   r=   r>   ) @皙@ffffff@333333@r  g@皙@gffffff@)r   r   r   r   r   rr   )r;  r:  r<  r=  r>  )r   r   r   r   )rH   rI   r   r   rJ   rK   r   r   r   r   test_by_int  s<   		zTestAsOfMerge.test_by_intc                 C   s   t jg dtddddgd}t jg dg dd	dd
gd}|djdd}t||dd}t jtdg dg ddg dd}t|| d S )N)
ףp=
@HPsb?zG!9@@u@Hz>@皙C@q?ABCDEFG)r`   symbolrH  r`   rb   )        r         Y@)-C6?{Gz?皙?)r`   mpvrN  Tr   rE   BGACEDF)rA  rF  r@  rB  rD  rC  rE  )rK  rK  rL  rL  rL  rM  rM  )rH  r`   rN  rH   rI   r  r   r   r   rJ   rK   r   r   r   r   test_on_float  s(   	zTestAsOfMerge.test_on_floatc                 C   s   t |j}tjg dtddddgd}||j|_tjg dtdd	dd
gd}||j|_|djdd}t	||dd}tjtdg dtddg dd}||j|_t
|| d S )Nr4   r=      r_   N   x   O   rG  )r   rH  rH  r   rb   r   P   rU  }   xyzw)r   rP   rP   Tr   rE   BACEGDFr=   r4   rS  rT  rV  r_   rU  xxxxxyz)rH  r   rP   )r{   dtypetyperH   rI   r  r   r   r   r   rJ   rK   r   any_real_numpy_dtyper^  r   r   rP   rO   r   r   r   test_on_specialized_type2  s,   z&TestAsOfMerge.test_on_specialized_typec                 C   s   t |j}tjg dg dtddg dd}||j|_tjg dg dtd	d
g d
d}||j|_|djdd}t	||ddd}tjtdg dg dt j
dt j
t j
t j
ddgdg dd}||j|_t|| d S )NrR  )r3   r=   r>   r=   r>   r3   r=   rG  )r   r   rH  )rH  r   r   rb   rW  )r3   r=   r=   r>   rZ  )r   r   rP   r   Tr   r   rr   r[  )r=   r3   r>   r>   r=   r=   r3   r\  r#   y)rH  r   r   rP   )r{   r^  r_  rH   rI   r  r   r   r   r   r|   rJ   rK   r`  r   r   r   test_on_specialized_type_by_intQ  s4   	z-TestAsOfMerge.test_on_specialized_type_by_intc                 C   s   t jtdg dg ddg dd}t jg dg dg dd	g d	d}|d
jdd}|d
jdd}t||d
dd}t jtdg dg dg ddg dd}t|| d S )N	AAABBBCCC)	r3   r=   r>   r3   r=   r>   r3   r=   r>   )	Gz
@ׁsF
@
@)\()@Gz.)@      )@fffffw@33333w@     w@)rH  r   r`   rb   )	r3   r3   r3   r=   r=   r=   r>   r>   r>   )	rI  r   rJ  rI        @rJ  rI  ro  g     @@)	rK  rL  rM  rK  rL  皙?rK        ?r   )r   r`   rN  r`   Tr   r   rr   )	r>   r=   r3   r>   r3   r=   r3   r=   r>   )	rh  rg  rf  rk  ri  rj  rl  rm  rn  )	rK  rK  rL  rq  rL  rL  rM  rp  rq  )rH  r   r`   rN  rP  r   r   r   r   test_on_float_by_intu  s4   	z"TestAsOfMerge.test_on_float_by_intc                 C   sv   d}t g dg dd}t g dg dd}tjt|d t||dd	 W d    d S 1 s4w   Y  d S )
N@Incompatible merge dtype, .*, both sides must have numeric dtyper2   r6   r;   r7   r<   rB   r7   r   r7   rE   rH   rI   rx   r   r   r   r   r   rM   rN   r   r   r    test_merge_datatype_error_raises  s   "z.TestAsOfMerge.test_merge_datatype_error_raisesc                 C   s   d}t g dt g dd}t g dt g dd}tjt|d t||d	d
 W d    d S 1 s:w   Y  d S )NzHincompatible merge keys \[0\] .* both sides category, but not equal onesr2   r6   rt  r<   )r7   r)  r9   r)  r8   ru  r   r7   rE   )rH   rI   Categoricalrx   r   r   r   rw  r   r   r   ,test_merge_datatype_categorical_error_raises  s   "z:TestAsOfMerge.test_merge_datatype_categorical_error_raisesc                 C   s`   t dgdgt dgd}t||dddgd}t dgdgt dgd}t|| d S )Nr   r#   rc  zr#   rc  r|  rr   )rH   rI   ry  r   rJ   rK   )r   dfrP   rO   r   r   r   :test_merge_groupby_multiple_column_with_categorical_column  s   zHTestAsOfMerge.test_merge_groupby_multiple_column_with_categorical_columnfuncc                 C   s   | S Nr   r   r   r   r   r     s    zTestAsOfMerge.<lambda>c                 C   s   t | S r  )r   r   r   r   r   r     s    numericdatetimesiderM   rN   c                 C   s   d| d}|ddt jg}|g d}t|g dd}t|g dd	}tjt|d
$ |dkr<t||dd nt||dd W d    d S W d    d S 1 sVw   Y  d S )Nz"Merge keys contain null values on z sider   ro  )r   ro  g      $@r6   r:   )r3   r?   r   rA   r   rM   r7   rE   )r{   r|   rH   rI   rx   r   r   r   )r   r  r  r   nulls	non_nullsdf_nullr}  r   r   r   test_merge_on_nans  s   "z TestAsOfMerge.test_merge_on_nansc                 C   s   t jt jddg|d}|jjdv rt|jjj}nt	|jjj}||d< t 
|g dg dg dd	}t 
|g d
g dg dd	}t||ddgdd}t 
|g dg dg dd}tjtjtjtjgtd|d< t|| d S )Nr   r3   r^  )iur=   )HELLOToYou)r=   r!  r?   )r7   r9   r.  by_col1by_col2on_colr   )WORLDWideWeb)r3   r=   r?   )r8   r-  r   r  r  r  rs   rF   r  r  r  value_xvalue_y)rH   arrayNAr^  kindr{   iinfonumpy_dtypemaxfinforI   r   r|   objectrJ   rK   )r   any_numeric_ea_dtypearrmax_valrM   rN   rP   rO   r   r   r   test_by_nullable  s:   	zTestAsOfMerge.test_by_nullablec                 C   s   t t dgddgdgd}t t dgddgdgd}t||dd	d
}t jt jddddddggg dd}t|| d S )N
2018-01-01r   r=   r7   )by_colr  valuesr3   r8   r  r  r  r   )r  r  values_xvalues_yrb   )rH   rI   DatetimeIndextz_localizer   r   rJ   rK   r   rM   rN   rP   rO   r   r   r   test_merge_by_col_tz_aware  s$   z(TestAsOfMerge.test_merge_by_col_tz_awarec                 C   s   t t dgddgdgdgd}t t dgddgdgd	gd}t||d
dgdd}t jt jddddddggg dd}tjtjgt	d|d< t
|| d S )Nr  r   r  r=   r7   r  r  r3   r8   r  r  r  r  r  r  rb   r  r  )rH   rI   r  r  r   r   r{   r  r|   r  rJ   rK   r  r   r   r   test_by_mixed_tz_aware&  s*   z$TestAsOfMerge.test_by_mixed_tz_awarer^  zm8[ns]zM8[us]c                 C   s   t tjdg|ddgdgd}t tjdg|ddgdgd}t||ddd	}t tjdg|ddgdgdgd
}t|| d S )Nr3   r  r=   r7   )r  r  r   r8   r  r  r  )r  r  r  r  )rH   rI   r{   r  r   rJ   rK   )r   r^  rM   rN   rP   rO   r   r   r   test_by_datelike@  s*   zTestAsOfMerge.test_by_datelikec                 C   s  |dkr	t d tjttg dg dddgd}t|d dd	| d
|d< tjttg dg dddgd}t|d dd	| d
|d< tjttg dg ddtj	ddtj	tj	gg dd}t|d dd	| d
|d< t
||dtddd}t|| d S )Nr   zHThis test is invalid with unit='s' because that would round left['time'])r   r4   r5   r(     rS  )r   r3   r=   r>   r!  r4   r   rM   rb   r	   zm8[rT   )r   r>   	   r'  r(     rN   r   r=   r!  )r   rM   rN   1msr   )rF   r.   r   )rx   ry   rH   rI   r  zipto_timedeltarz   r{   r|   r   r   rJ   rK   )r   r   rM   rN   rO   rP   r   r   r    test_timedelta_tolerance_nearest\  s:   """z.TestAsOfMerge.test_timedelta_tolerance_nearestc                 C   s   t g dg dd}t g dg dd}|d ||d< |d ||d< t g dg dtjddgd	}|d ||d< t||dd
d}t|| d S )N)r   r5   r  r   r:   )r4   r(  rS  rA   r7   r   r   rD   r5   r   )rH   rI   rz   r{   r|   r   rJ   rK   )r   any_int_dtyperM   rN   rO   rP   r   r   r   test_int_type_tolerance  s   z%TestAsOfMerge.test_int_type_tolerancec                 C   s   t jddddd}t jg ddg|dd  d	}t |d
gd dg d}t||ddgd}t jg d|dd  d
gd dg dt jdddddd}t|| t||ddgd}t j|d
gd dg tjddddgdtg dd}t|| d S )Nz
2019-10-0130minr4   r   )r   r   r   )?皙?ffffff?333333?xyzr3   )rc   r   gGz@r!  gQ@)	from_dateabcTr  )rM   rN   r   r   r>   )r  r  r  z2019-10-01 00:30:00r   )rM   rN   r   r   r  r  r  r  )r  r  r  )r   r3   r=   r>   r!  )	rH   r   rI   r   rJ   rK   r{   r|   r   )r   r   rM   rN   rP   rO   r   r   r   test_merge_index_column_tz  s6   




z(TestAsOfMerge.test_merge_index_column_tzc                 C   s   |dkr	t d tjddd|dtdd| }tjdd	|d
}tjddit|d}tjddit|d}tjdddt|d}t||ddtddd}t	
|| d S )Nr   z?This test is invalid with unit='s' because that would round dr1z1/1/2020z	1/20/20202D)r   endr   r   g?)secondsz2/1/2020)r   r  r   val1r   r  val2bar)r  r  Tr	  )r   r   r.   )rx   ry   rH   r   r   as_unitrI   r  r   rJ   rK   )r   r   dr1dr2r   r   rO   rP   r   r   r   %test_left_index_right_index_tolerance  s.   z3TestAsOfMerge.test_left_index_right_index_toleranceN)F)M__name__
__module____qualname__r$   rx   fixturer(   r+   r-   r.   r/   r0   rQ   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   markparametrizer   r  	timedeltar   r   r   r  r
  r  r  r  r  r  r  r  r#  r%  r5  r6  r?  rQ  rb  rd  rr  rx  rz  r~  r  r  r  r  r  r  r  r  r  r   r   r   r   r      s    







Y		

		AA2
	.
+2%=$9	,
)!r   kwargsrF   r#   Tr   r   z2019-06-01 00:09:12z2019-06-01 00:10:29r   c                 C   sj   t jd|i|d}t jd|i|d}tjtdd t||fi |  W d    d S 1 s.w   Y  d S )Nr#   r  rs  r   rv  )r  r   rM   rN   r   r   r   #test_merge_asof_non_numerical_dtype  s   	"r  c               	   C   sx   t g dg dd} t g dg dd}tjtdd t| |dd	d	d
d W d    d S 1 s5w   Y  d S )N)121315r6   )r7   	left_val1)r-  r.  r   r:   rs  r   r  r7   r;   )r   r   r   r   rv  rM   rN   r   r   r   *test_merge_asof_non_numerical_dtype_object  s   "r  )r   r   	left_time)r   r   rN   )r   r   c                 C   s   t g ddd}tjg dg dd|d}tjdg d	ig d	d}t||fi | }tjg dg dg d
d|d}t|| d S )Nr2   testr    r6   )r3   r!  r5   )rM   r  r  rN   r<   rC   )rM   r  rN   )r   rH   rI   r   rJ   rK   )r  r   rM   rN   rP   rO   r   r   r   test_merge_asof_index_behavior  s   
r  c                  C   s   t jdg ditg dddd} t jdg ditg d	ddd}t| |ddd
}t g dg dg dd}t|| d S )Nr8   r5   r   r'  r   r7   r  r  r9   r        )r   r=   r>   r   r   r6   )rH   rI   r   r   rJ   rK   rM   rN   rP   rO   r   r   r   'test_merge_asof_numeric_column_in_index  s
   ""r  c                  C   s   t jdg dit jjg dg dgddgdd} t jd	g d
it jjg dg dgddgdd}t| |ddd}t g dg dg d
d}t|| d S )Nr8   r  r   r6   r7   r|  )namesr  r9   r  r{  rc  r  )rH   rI   
MultiIndexfrom_arraysr   rJ   rK   r  r   r   r   ,test_merge_asof_numeric_column_in_multiindex  s   

r  c                  C   s   t jdg ditg dddd} t jdg ditg d	ddd}tjtd
d t| |ddd W d    n1 s<w   Y  |  ddg} | ddg}tjtd
d t| |ddd W d    d S 1 snw   Y  d S )Nr8   r  )123r7   r  r  r9   r  )mnors  r   r  )	rH   rI   r   rx   r   r   r   r   r   r  r   r   r   3test_merge_asof_numeri_column_in_index_object_dtype&  s    """r  c                  C   s   t ddgt dt dgd} t jt dddd	}t d
g di}t|| |dddd}t g dtjddg|d}t|| t| |d|ddd}t ddgt dt dgddgd}t|| d S )Nr=   r?   z2021/01/01 00:37z2021/01/01 01:40)r7   tsz2021/01/01 00:00r>   1h)r   r   r   r8   )r!     r@   r  Fbackward)r   r   r/   r   )r8   r7   r  r!  r  )r7   r  r8   )	rH   rI   r   r   r   r{   r|   rJ   rK   )rN   ts_mergerM   rP   rO   r   r   r   test_merge_asof_array_as_on;  sD   r  c                  C   s   t jg dgg dd} t jg dgg dd}tjtdd t| |dd	 W d    n1 s1w   Y  tjtdd t| |dd
d W d    n1 sPw   Y  tjtdd t| |ddd W d    d S 1 spw   Y  d S )N)r3   r=   r7   )r7   r7   r;   rb   )r3   r3   r3   )r7   r7   rB   zcolumn label 'a'r   r7   rE   rB   r  r;   )rH   rI   rx   r   r   r   r  r   r   r   +test_merge_asof_raise_for_duplicate_columnsd  s   "r  r^  Int64zint64[pyarrow]pyarrow)marksztimestamp[s][pyarrow]c                 C   s   t g dg dd}t g dg dd}|d| i}|d| i}t||dd}t g dg dtjdd	gd
}|d| i}t|| d S )N)r3   r>   r4   r   )join_colr;   )r=   r>   r!  )r  rB   r  rE   r   r   )r  r;   rB   )rH   rI   rz   r   r{   r|   rJ   rK   )r^  rM   rN   rP   rO   r   r   r   test_merge_asof_extension_dtypes  s*   

r  c                  C   sz   t jdgdgdd} t jdgdgdd}d| jjj_d|jjj_t| |ddd}t jdgdgd	dgd
}t	|| d S )Nr=   rM   )r   r    r3   rN   FTr   r  r  )
rH   Seriesr   r  flags	writeabler   rI   rJ   rK   r  r   r   r   !test_merge_asof_read_only_ndarray  s   r  )&r  numpyr{   rx   r  pandas.util._test_decoratorsutil_test_decoratorstdpandasrH   r   r   r   r   r   pandas._testing_testingrJ   pandas.core.reshape.merger   r  r   r   r  r  r  r  r  r  r  r  r  r  r   
skip_if_nor  r  r   r   r   r   <module>   sl    
           @

)
