o
    ôT·jyÚ ã                
   @   s´  d dl Z d dlZd dlZd dlZd dlm  mZ d dl	Z
d dl	mZmZmZmZmZ d dlmZ d dlmZ ejg d¢d�dd„ ƒZG dd	„ d	ƒZej d
dejde d¡d�g¡ej dddidddœg¡ej dddgddgg¡dd„ ƒƒƒZdd„ Zej ddddœdddœdddœg¡d d!„ ƒZd"d#„ Zd$d%„ Z d&d'„ Z!d(d)„ Z"d*d+„ Z#ej d,d-ejd.e d¡d�ejd/e d¡d�g¡d0d1„ ƒZ$e d¡d2d3„ ƒZ%d4d5„ Z&d6d7„ Z'dS )8é    N)ÚIndexÚ	TimedeltaÚ
merge_asofÚoption_contextÚto_datetime)Ú
MergeError)ÚsÚmsÚusÚns)Úparamsc                 C   s   | j S )z-
    Resolution for datetimelike dtypes.
    )Úparam)Úrequest© r   úm/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/pandas/tests/reshape/merge/test_merge_asof.pyÚunit   s   r   c                   @   sÈ  e Zd Zd�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
ejdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zej d0d1d2g¡d3d4„ ƒZd5d6„ Zd7d8„ Z d9d:„ Z!d;d<„ Z"d=d>„ Z#d?d@„ Z$dAdB„ Z%dCdD„ Z&dEdF„ Z'dGdH„ Z(ejjdIe)dJƒe*j+dKdL�gdMdNgdO�dPdQ„ ƒZ,dRdS„ Z-dTdU„ Z.dVdW„ Z/dXdY„ Z0dZd[„ Z1d\d]„ Z2d^d_„ Z3d`da„ Z4dbdc„ Z5ddde„ Z6dfdg„ Z7dhdi„ Z8djdk„ Z9dldm„ Z:dndo„ Z;dpdq„ Z<drds„ Z=dtdu„ Z>dvdw„ Z?dxdy„ Z@dzd{„ ZAd|d}„ ZBd~d„ ZCejjd€d�d‚„ dƒd‚„ gd„d…gdO�ej d†d‡dˆg¡d‰dŠ„ ƒƒZDd‹dŒ„ ZEd�dŽ„ ZFd�d�„ ZGej d0g d‘¢¡d’d“„ ƒZHd”d•„ ZId–d—„ ZJd˜d™„ ZKdšd›„ ZLdœS )žÚTestAsOfMergeFc                 C   s.   |r|j ddgdd�jdd�}t|jƒ|_|S )NÚtimeÚtickerÚlast)ÚkeepT©Údrop)Údrop_duplicatesÚreset_indexr   r   )ÚselfÚdfÚdeduper   r   r   Ú	prep_data   s   ÿzTestAsOfMerge.prep_datac                 C   sä   t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gd d¡d�}|d  d¡|d< |d  d¡|d< |  |¡S ) N©ú20160525 13:30:00.023ÚMSFTú51.9500Ú75ÚNASDAQ©ú20160525 13:30:00.038r!   r"   Ú155r$   ©ú20160525 13:30:00.048ÚGOOGz720.7700Ú100r$   ©r)   r*   z720.9200r+   r$   ©r)   r*   ú720.9300Ú200r$   ©r)   r*   r.   Ú300r$   ©r)   r*   r.   Ú600r$   ©r)   r*   r.   Ú44r$   ©ú20160525 13:30:00.074ÚAAPLú98.6700Ú478343r$   ©ú20160525 13:30:00.075r8   r9   r:   r$   ©r<   r8   z98.6600Ú6r$   ©r<   r8   ú98.6500Ú30r$   ©r<   r8   r@   r#   r$   ©r<   r8   r@   Ú20r$   ©r<   r8   r@   Ú35r$   ©r<   r8   r@   Ú10r$   ©r<   r8   ú98.5500r>   ÚARCA©ú20160525 13:30:00.076r8   ú98.5600Ú1000rK   ©rM   r8   rN   r/   rK   ©rM   r8   rN   r1   rK   ©rM   r8   rN   Ú400rK   ©rM   r8   rN   r3   rK   ©ú20160525 13:30:00.078r!   r"   Ú783r$   ©rV   r!   r"   r+   r$   ú'time,ticker,price,quantity,marketCenterú,©ÚcolumnsÚpriceÚfloat64ÚquantityÚint64©ÚpdÚ	DataFrameÚsplitÚastyper   ©r   r   r   r   r   Útrades&   sD   åâ 
zTestAsOfMerge.tradesc                 C   s¦   t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢gd
 d¡d�}|d  d¡|d< |d  d¡|d< | j|dd�S )N©r    r*   ú720.50ú720.93©r    r!   ú51.95rl   ©ú20160525 13:30:00.041r!   rl   rl   ©r)   r*   ri   rj   ©ú20160525 13:30:00.072r*   ri   z720.88©r<   r8   ú98.55ú98.56©rM   r8   rs   rt   ©rV   r!   rl   rl   ©rV   r!   ú51.92rl   útime,ticker,bid,askrZ   r[   Úbidr^   ÚaskT©r   ra   rf   r   r   r   ÚquotesL   s.   ðízTestAsOfMerge.quotesc                 C   ó  t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢d	d
dddtjtjgg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gd d¡d�}|d   d!¡|d < |d"  d#¡|d"< |d$  d!¡|d$< |d%  d!¡|d%< |  |¡S ©&N©r    r!   rl   r#   r$   rl   rl   ©r&   r!   rl   r'   r$   rl   rl   ©r)   r*   z720.77r+   r$   ú720.5rj   ©r)   r*   z720.92r+   r$   rƒ   rj   ©r)   r*   rj   r/   r$   rƒ   rj   ©r)   r*   rj   r1   r$   rƒ   rj   ©r)   r*   rj   r3   r$   rƒ   rj   ©r)   r*   rj   r5   r$   rƒ   rj   r7   r8   ú98.67r:   r$   ©r<   r8   r‰   r:   r$   rs   rt   ©r<   r8   ú98.66r>   r$   rs   rt   ©r<   r8   ú98.65rA   r$   rs   rt   ©r<   r8   rŽ   r#   r$   rs   rt   ©r<   r8   rŽ   rD   r$   rs   rt   ©r<   r8   rŽ   rF   r$   rs   rt   ©r<   r8   rŽ   rH   r$   rs   rt   ©r<   r8   rs   r>   rK   rs   rt   ©rM   r8   rt   rO   rK   rs   rt   ©rM   r8   rt   r/   rK   rs   rt   ©rM   r8   rt   r1   rK   rs   rt   ©rM   r8   rt   rS   rK   rs   rt   ©rM   r8   rt   r3   rK   rs   rt   ©rV   r!   rl   rW   r$   rx   rl   ©rV   r!   rl   r+   r$   rx   rl   ú/time,ticker,price,quantity,marketCenter,bid,askrZ   r[   r]   r^   r_   r`   rz   r{   ©rb   rc   ÚnpÚnanrd   re   r   rf   r   r   r   Úasofg   ó^   							
ù																		 �” v �‰ y
zTestAsOfMerge.asofc                 C   r~   r   rœ   rf   r   r   r   Ú	toleranceg  r    zTestAsOfMerge.tolerancec                 C   s¢  t jdddddtjtjgg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢dddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgg d¢g d¢g d¢g d¢g d¢g d¢g d ¢g d!¢g d!¢gd" d#¡d$�}|d%  d&¡|d%< |d'  d(¡|d'< |d)  d&¡|d)< |d*  d&¡|d*< |  |¡S ©+Nr    r!   rl   r#   r$   r�   r‚   r„   r…   r†   r‡   rˆ   r7   r8   r‰   r:   r<   rŒ   r>   rŽ   rA   rD   rF   rH   rs   rK   r”   r•   r–   r—   r˜   )rV   r!   rl   rW   r$   rl   rl   )rV   r!   rl   r+   r$   rl   rl   r›   rZ   r[   r]   r^   r_   r`   rz   r{   rœ   )r   Údatapathr   r   r   r   Úallow_exact_matchesg  óÎ   ù							
ù
ù
ù
ù
ù
ù
ù
ù									 �¤ f �™ i
z!TestAsOfMerge.allow_exact_matchesc                 C   s¢  t jdddddtjtjgg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢dddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgdddddtjtjgg d¢g d¢g d¢g d¢g d¢g d¢g d ¢g d!¢g d!¢gd" d#¡d$�}|d%  d&¡|d%< |d'  d(¡|d'< |d)  d&¡|d)< |d*  d&¡|d*< |  |¡S r¢   rœ   rf   r   r   r   Ú!allow_exact_matches_and_toleranceW  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©r­   Úleft_val©r©   é   é   é   é   ©r­   Ú	right_val©r©   r´   r¶   ©r­   r±   r¸   r­   ©ÚonN©rb   rc   r   ÚtmÚassert_frame_equal©r   ÚleftÚrightÚexpectedÚresultr   r   r   Útest_examples1G  s   ÿzTestAsOfMerge.test_examples1c                 C   sB  |dkr	t  d¡ tjtg d¢ƒ d|› d�¡g d¢g d¢g d¢d	œg d	¢d
�}tjtg d¢ƒ d|› d�¡g d¢g d¢g d¢dœg d¢d
�}t||ddd� t||ddtdƒd� tjtg d¢ƒ d|› d�¡g d¢g d¢g d¢tj	dtj	tj	tj	gtj	dtj	tj	tj	gdœg d¢d
�}t||ddtdƒdd�}t
 ||¡ dS )r§   r   zNThis test is invalid for unit='s' because that would round the trades['time']])r    r&   r)   r)   r)   úM8[ú]©r!   r!   r*   r*   r8   ©çš™™™™ùI@rÊ   g\�Âõ(††@ç�Âõ(\‡†@g     €X@©éK   é›   éd   rÏ   rÏ   )r   r   r]   r_   r[   )r    r    ú20160525 13:30:00.030rn   r)   ú20160525 13:30:00.049rq   r<   )r*   r!   r!   r!   r*   r8   r*   r!   )ç     „†@rÊ   ç\�Âõ(üI@ç…ëQ¸þI@rÒ   ç�Âõ(\X@rÒ   gáz®GJ@)ç=
×£p‡†@ç{®GáúI@ç=
×£pýI@ç      J@rÖ   çq=
×£€X@g×£p=
‡†@g¤p=
×J@)r   r   rz   r{   r   r   ©r¼   ÚbyÚ2ms©r¼   rÜ   r¡   rÓ   rØ   )r   r   r]   r_   rz   r{   Ú10msF©r¼   rÜ   r¡   r¤   N)ÚpytestÚskiprb   rc   r   re   r   r   r�   rž   r¾   r¿   )r   r   rg   r}   rÃ   rÄ   r   r   r   Útest_examples2S  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 )r§   r¨   r¬   r°   r²   r·   r©   rµ   rº   r­   Úforward©r¼   Ú	directionN©rb   rc   r�   rž   r   r¾   r¿   rÀ   r   r   r   Útest_examples3¬  s   ÿzTestAsOfMerge.test_examples3c                 C   sn   t  g d¢g d¢dœ¡}t  g d¢g d¢dœ¡}t  g d¢g d¢g d¢dœ¡}t||dd	d
�}t ||¡ dS )r§   r¨   r¬   r°   r²   r·   )r©   rµ   r¶   rº   r­   Únearestrå   Nr½   rÀ   r   r   r   Útest_examples4º  s   ÿzTestAsOfMerge.test_examples4c                 C   s$   |}t ||ddd�}t ||¡ d S )Nr   r   rÛ   ©r   r¾   r¿   ©r   rg   rŸ   r}   rÃ   rÄ   r   r   r   Ú
test_basicÈ  s   zTestAsOfMerge.test_basicc                 C   sN   |}|j  d¡|_ |j  d¡|_ |j  d¡|_ t||ddd�}t ||¡ d S )NÚcategoryr   r   rÛ   )r   re   r   r¾   r¿   rì   r   r   r   Útest_basic_categoricalÎ  s   z$TestAsOfMerge.test_basic_categoricalc                 C   sB   |}|  d¡}t||dddd�}|j|_||j }t ||¡ d S )Nr   Tr   )Ú
left_indexÚright_onrÜ   )Ú	set_indexr   Úindexr\   r¾   r¿   rì   r   r   r   Útest_basic_left_index×  s   

ÿ
z#TestAsOfMerge.test_basic_left_indexc                 C   s0   |}|  d¡}t||dddd�}t ||¡ d S )Nr   Tr   )Úleft_onÚright_indexrÜ   ©rò   r   r¾   r¿   rì   r   r   r   Útest_basic_right_indexå  s   

ÿz$TestAsOfMerge.test_basic_right_indexc                 C   s@   |  d¡}|  d¡}|  d¡}t||dddd�}t ||¡ d S )Nr   Tr   ©rð   rö   rÜ   r÷   rì   r   r   r   Ú!test_basic_left_index_right_indexî  s   



ÿz/TestAsOfMerge.test_basic_left_index_right_indexc                 C   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ò   rá   Úraisesr   r   ©r   rg   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   rz   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   rg   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û   rz   T)rñ   rð   rö   rþ   r  r   r   r   Útest_on_and_index_right_on  s   


ÿ"ÿz(TestAsOfMerge.test_on_and_index_right_onc                 C   s&   |}t ||dddd�}t ||¡ d S )Nr   r   )r¼   Úleft_byÚright_byrë   rì   r   r   r   Útest_basic_left_by_right_by  s
   
ÿz)TestAsOfMerge.test_basic_left_by_right_byc                 C   sL   |}||j dk }t||ddd�}tj|j|j dkddgf< t ||¡ d S )Nr!   r   r   rÛ   rz   r{   )r   r   r�   rž   Úlocr¾   r¿   )r   rg   rŸ   r}   rÃ   ÚqrÄ   r   r   r   Útest_missing_right_by"  s
   z#TestAsOfMerge.test_missing_right_byc                 C   sæ   t jtg d¢ƒg d¢g d¢g d¢g d¢dœg d¢d�}t jtg d¢ƒg d	¢g d
¢g d¢g d¢dœg d¢d�}t jtg d¢ƒg d¢g d¢g d¢g d¢tjdddtjgtjdddtjgdœg d¢d�}t||dddgd�}t ||¡ d S )N©r    r    z20160525 13:30:00.046r)   ú20160525 13:30:00.050rÈ   ©rK   ÚNSDQr  ÚBATSr  rÉ   rÌ   ©r   r   Úexchr]   r_   r[   ©r    r    rÐ   rn   z20160525 13:30:00.045rÑ   )r*   r!   r!   r!   r*   r8   ©r  r  rK   rK   r  rK   ©ç®Gáz„†@rÊ   rÓ   rÔ   rÒ   rÕ   ©rË   r×   rØ   rÙ   rÖ   rÚ   ©r   r   r  rz   r{   rÊ   rÒ   r  r×   rÖ   rË   ©r   r   r  r]   r_   rz   r{   r   r   r  rÛ   )rb   rc   r   r�   rž   r   r¾   r¿   )r   rg   r}   rÃ   rÄ   r   r   r   Útest_multiby*  sJ   ÿ	óðÿ
òïÿ	ñîzTestAsOfMerge.test_multibyÚdtypeÚobjectÚstringc                 C   s  t jtg d¢ƒg d¢g d¢g d¢g d¢dœg d¢d�}| ||dœ¡}t jtg d	¢ƒg d
¢g d¢g d¢g d¢dœg d¢d�}| ||dœ¡}t jtg d¢ƒg d¢g d¢g d¢g d¢tjdddtjgtjdddtjgdœg d¢d�}| ||dœ¡}t||dddgd�}t ||¡ d S )Nr  )r   r   r©   r©   r³   r  rÉ   rÌ   r  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Û   )	rb   rc   r   re   r�   rž   r   r¾   r¿   )r   r  rg   r}   rÃ   rÄ   r   r   r   Ú test_multiby_heterogeneous_typesk  sP   ÿ	óðÿ
òïÿ	ñîz.TestAsOfMerge.test_multiby_heterogeneous_typesc                 C   sø   t jtdƒddgtdƒddgtdƒddgtdƒddggg d¢d� d	¡}|jt  d
¡ |_t jtdƒdddgtdƒdddgtdƒdddgtdƒdddggg d¢d� d	¡}d}tjt|d�� t	||ddddgd� W d   ƒ d S 1 suw   Y  d S )NÚ20160602r©   r­   r³   Ú20160603r®   ©r   Úk1Úk2r[   r   r   Ú20160502ç      ð?ç       @Ú20160503ç      @ç      @©r   r$  r%  Úvaluezincompatible merge keysrû   Tr$  r%  rù   )
rb   rc   r   rò   ró   Ú	Timestamprá   rÿ   r   r   )r   rÁ   rÂ   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 s¥w   Y  d S )Nr!  r©   r­   r³   r"  r®   r#  r[   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	  )
rb   rc   r   rò   r   r¾   r¿   rá   rÿ   r   rÀ   r   r   r   Útest_multiby_indexedÌ  s\   üùø
üùø
üùø
ÿÿú"ýz"TestAsOfMerge.test_multiby_indexedc              	   C   s¬  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¡dL�}|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¡dL�}|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¡dL�}|dQ  dN¡|dQ< |dR  dN¡|dR< | j|d¼d½�}t||d¾d¿dÀ�}t 	||¡ d S )ÁNr€   r�   r‚   r„   r…   r†   r‡   rˆ   r7   r8   r‰   r:   r$   rŠ   r‹   r�   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   )ú20160525 13:30:00.084r8   z98.64Ú40r$   rs   rt   )r1  r8   rs   Ú149ÚEDGXrs   rt   )ú20160525 13:30:00.086r8   rt   Ú500rK   rs   ú98.63)ú20160525 13:30:00.104r8   r7  Ú647r4  ú98.62r7  )r8  r8   r7  r1   r4  r:  r7  )r8  r8   r7  Ú50r$   r:  r7  )r8  r8   r7  Ú70r$   r:  r7  )r8  r8   r7  Ú1r$   r:  r7  )r8  r8   r7  Ú62r$   r:  r7  )r8  r8   r7  rH   r$   r:  r7  )r8  r8   r7  r+   rK   r:  r7  )ú20160525 13:30:00.105r8   r7  r+   rK   r:  r7  )r?  r8   r7  Ú700rK   r:  r7  )ú20160525 13:30:00.106r8   r7  Ú61r4  r:  r7  )ú20160525 13:30:00.107r8   r7  r+   rK   r:  r7  )rC  r8   r7  Ú53rK   r:  r7  )ú20160525 13:30:00.108r8   r7  r+   rK   r:  r7  )rE  r8   r7  Ú839rK   r:  r7  )ú20160525 13:30:00.115r8   r7  Ú5r4  r:  r7  )ú20160525 13:30:00.118r8   r7  Ú295r4  r:  r7  )rI  r8   r7  rH  r4  r:  r7  )ú20160525 13:30:00.128r8   r7  r+   r$   r:  r7  )rK  r!   rx   r+   rK   rx   rl   )ú20160525 13:30:00.129r8   r:  r+   r$   ú98.61r7  )rL  r8   r:  rH   r$   rM  r7  )rL  r8   r:  Ú59r$   rM  r7  )rL  r8   r:  Ú31r$   rM  r7  )rL  r8   r:  Ú69r$   rM  r7  )rL  r8   r:  Ú12r$   rM  r7  )rL  r8   r:  rQ  r4  rM  r7  )rL  r8   r:  r+   rK   rM  r7  )ú20160525 13:30:00.130r!   rl   Ú317rK   ú51.93rl   )rR  r!   rl   Ú283rK   rT  rl   )ú20160525 13:30:00.135r!   rT  r+   r4  rx   rl   )rV  r8   r:  r+   rK   rM  r:  )ú20160525 13:30:00.144r8   r:  rQ  r$   rM  r:  )rW  r8   r:  Ú88r$   rM  r:  )rW  r8   r:  Ú162r$   rM  r:  )rW  r8   rM  r+   r  rM  r:  )rW  r8   r:  rB  rK   rM  r:  )rW  r8   r:  Ú25rK   rM  r:  )rW  r8   r:  Ú14rK   rM  r:  )ú20160525 13:30:00.145r8   r:  rQ  rK   ú98.6r7  )r\  r8   r:  r+   rK   r]  r7  )r\  r8   r7  r+   r$   r]  r7  r›   rZ   r[   r]   r^   r_   r`   rz   r{   r   r%   r(   r,   r-   r0   r2   r4   r6   r;   r=   r?   rB   rC   rE   rG   rI   rL   rP   rQ   rR   rT   rU   rX   )r1  r8   z98.6400r2  r$   )r1  r8   rJ   r3  r4  )r5  r8   rN   r6  rK   )r8  r8   ú98.6300r9  r4  )r8  r8   r^  r1   r4  )r8  r8   r^  r;  r$   )r8  r8   r^  r<  r$   )r8  r8   r^  r=  r$   )r8  r8   r^  r>  r$   )r8  r8   r^  rH   r$   )r8  r8   r^  r+   rK   )r?  r8   r^  r+   rK   )r?  r8   r^  r@  rK   )rA  r8   r^  rB  r4  )rC  r8   r^  r+   rK   )rC  r8   r^  rD  rK   )rE  r8   r^  r+   rK   )rE  r8   r^  rF  rK   )rG  r8   r^  rH  r4  )rI  r8   r^  rJ  r4  )rI  r8   r^  rH  r4  )rK  r8   r^  r+   r$   )rK  r!   z51.9200r+   rK   )rL  r8   ú98.6200r+   r$   )rL  r8   r_  rH   r$   )rL  r8   r_  rN  r$   )rL  r8   r_  rO  r$   )rL  r8   r_  rP  r$   )rL  r8   r_  rQ  r$   )rL  r8   r_  rQ  r4  )rL  r8   r_  r+   rK   )rR  r!   r"   rS  rK   )rR  r!   r"   rU  rK   )rV  r!   z51.9300r+   r4  )rV  r8   r_  r+   rK   )rW  r8   r_  rQ  r$   )rW  r8   r_  rX  r$   )rW  r8   r_  rY  r$   )rW  r8   z98.6100r+   r  )rW  r8   r_  rB  rK   )rW  r8   r_  rZ  rK   )rW  r8   r_  r[  rK   )r\  r8   r_  rQ  rK   )r\  r8   r_  r+   rK   )r\  r8   r^  r+   r$   rY   rh   rk   rm   ro   rp   rr   ru   rv   rw   )z20160525 13:30:00.079r!   rx   rl   )z20160525 13:30:00.080r8   rs   rt   )r1  r8   rs   rt   )r5  r8   rs   r7  )z20160525 13:30:00.088r8   rŽ   r7  )z20160525 13:30:00.089r8   r7  r7  )r8  r8   r7  r7  )r8  r8   r:  r7  )r?  r8   r:  r7  )rC  r8   r:  r7  )rG  r8   r:  r7  )rI  r8   r:  r7  )rK  r8   r:  r7  )rL  r8   r:  r7  )rL  r8   rM  r7  )rR  r!   rT  rl   )rR  r8   rM  r7  )z20160525 13:30:00.131r8   rM  r:  )rV  r!   rx   rl   )rV  r8   rM  r:  )z20160525 13:30:00.136r8   rM  r:  )rW  r8   rM  r:  )r\  r8   rM  r:  )r\  r8   rM  r7  )r\  r8   z98.60r7  ry   Tr|   r   r   rÛ   )
rb   rc   r�   rž   rd   re   r   r   r¾   r¿   )r   r£   rÃ   rg   r}   rÄ   r   r   r   Útest_basic2þ  sN  ÿ
öíä%Û.Ò7É@ÀJù·R®[¥dœm“vŠ� 	 �÷  �î  �å $ �Ü - �Ó 6 �Ê ? �Á H �¸ Q �¯ Z �¦ c �� l �” u �‹ ~ �‚   � �ø   � �ï   � �æ  # � �Ý  , � �Ô  5 � �Ë  > � �Â  G � �¹  P � �°  Y � �§  b � �ž  k � �•  t � �Œ  } � �ƒ    � � �ù    � � �ð    � � �ç   " � � �Þ   + � � �Õ   4 � � �Ì   = � � �Ã   F � � �º   O � � �±   X � � �¨   a � � �Ÿ   j � � �–   s � � ��   | � � �„     � � � �ú     � � � �ñ     � � � �è    ! � � � �ß    * � � � �Ö    3 � � � �Í    < � � � �Ä    E � � � �»    N � � � �²    W � � � �©    ` � � � �     i � � � �—    r � � � �Ž    { � � � �…      � � � � �û      � � � � �ò      � � � � �é       � � � � �à     ) � � � � �×     2 � � � � �Î     < � � � � �Ã     ?
ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5Ë6Ê7É8È9Ç:Æ;Å<Ä=Ã>Â?Á@ÀA¿B¾C½D¼E»FºG¹H¸I·J¶KµL´M³O°R
ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5Ë6Ê7É8È:Å=zTestAsOfMerge.test_basic2c                 C   s>   dd„ }||ƒ}||ƒ}||ƒ}t ||dd�}t ||¡ d S )Nc                 S   s    | | j dk jddd�jdd�S )Nr!   r   r©   )ÚaxisTr   )r   r   r   ©Úxr   r   r   Ú<lambda>[	  s
    ÿþz0TestAsOfMerge.test_basic_no_by.<locals>.<lambda>r   r»   rë   )r   rg   rŸ   r}   ÚfrÃ   rÄ   r   r   r   Útest_basic_no_byY	  s   ÿzTestAsOfMerge.test_basic_no_byc                 C   sÈ   d}t jt|d�� t||dddd� W d   ƒ n1 s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   rz   r   )rõ   rñ   rÜ   zcan only asof on a key for leftrÛ   )rÜ   ©rá   rÿ   r   r   r  r   r   r   Útest_valid_join_keysh	  s   ÿÿ"ÿz"TestAsOfMerge.test_valid_join_keysc                 C   sJ   t  ||g¡ ddg¡jdd�}t||ddd�}|  |¡}t ||¡ d S )Nr   r   Tr   rÛ   )rb   ÚconcatÚsort_valuesr   r   r   r¾   r¿   )r   r£   rg   r}   rŸ   r  rÄ   rÃ   r   r   r   Útest_with_duplicatest	  s   
þÿ
z"TestAsOfMerge.test_with_duplicatesc                 C   sl   t  g d¢g d¢dœ¡}t  g d¢g d¢dœ¡}t||dd�}t  g d¢g d¢g d¢dœ¡}t ||¡ d S )	N)r©   r©   r´   ©r©   r³   r´   )Úkeyr±   )r©   r³   r³   )rm  r¸   rm  r»   )rm  r±   r¸   r½   ©r   Údf1Údf2rÄ   rÃ   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©r¼   rÜ   r¤   rg  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 s£w   Y  d S )Nr   r   Ú1srÞ   ró   r©   z6incompatible tolerance .*, must be compat with type .*rû   r'  ztolerance must be positiveéÿÿÿÿ)r   r   r   rá   rÿ   r   r  r   r   r   Útest_valid_tolerance�	  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   rÛ   zright keys must be sorted)rj  r   Úis_monotonic_increasingrá   rÿ   Ú
ValueErrorr   r   r   r   r   Útest_non_sorted½	  s"   ÿ
ÿ
zTestAsOfMerge.test_non_sortedÚtolerance_tsÚ1dayr©   )Údaysr   zdatetime.timedelta)Úidsc                 C   s&   t ||dd|d�}|}t ||¡ d S )Nr   r   rÞ   rë   )r   r|  rg   r}   r¡   rÄ   rÃ   r   r   r   Útest_toleranceÔ	  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 )Nr¨   r¬   r°   ©r©   r³   r´   r¶   é   r·   r©   rƒ  rº   r­   rä   ©r¼   ræ   r¡   rç   rÀ   r   r   r   Útest_tolerance_forwardà	  ó   ÿz$TestAsOfMerge.test_tolerance_forwardc                 C   r�  )Nr¨   r¬   r°   r‚  r·   r©   rƒ  rº   r­   ré   r„  rç   rÀ   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ÚDrª   ÚUTC)ÚstartÚfreqÚperiodsÚtzr   )ÚdateÚvalue1z
2016-01-01ÚABCDE)rŽ  Úvalue2rŽ  z1 day©r¼   r¡   ÚBCDEE)rŽ  r�  r‘  )rb   rc   Ú
date_ranger   ÚpytzÚtimezoner�   ÚarangeÚlistr   r   r¾   r¿   )r   r   rÁ   rÂ   rÄ   rÃ   r   r   r   Útest_tolerance_tzú	  sH   ûøÿûøÿû÷ÿzTestAsOfMerge.test_tolerance_tzc                 C   st   t  g d¢g d¢dœ¡}t  g d¢g d¢dœ¡}t  g d¢g d¢ddtjgdœ¡}t||d	d
dd�}t ||¡ d S )N)çš™™™™™ñ?g      @gÍÌÌÌÌÌ%@r¬   r°   )r'  ç      @çffffff
@g      @g      '@r·   r©   rœ  rº   r­   ré   ç      à?r„  rç   rÀ   r   r   r   Útest_tolerance_float%
  s   ÿ
ýÿz"TestAsOfMerge.test_tolerance_floatc                 C   sF   |  d¡}|  d¡}|  d¡}t||dddtdƒd�}t ||¡ d S )Nr   Tr   r}  )rð   rö   rÜ   r¡   )rò   r   r   r¾   r¿   )r   rg   r}   r¡   rÃ   rÄ   r   r   r   Útest_index_tolerance7
  s   


úz"TestAsOfMerge.test_index_tolerancec                 C   s&   t ||dddd�}|}t ||¡ d S )Nr   r   Frs  rë   )r   rg   r}   r¤   rÄ   rÃ   r   r   r   Útest_allow_exact_matchesG
  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 )Nr¨   r¬   r°   r‚  r·   )r³   r¶   rƒ  rº   r­   rä   F©r¼   ræ   r¤   r½   rÀ   r   r   r   Ú test_allow_exact_matches_forwardN
  ó   ÿ
ÿz.TestAsOfMerge.test_allow_exact_matches_forwardc                 C   r¡  )Nr¨   r¬   r°   r‚  r·   )r³   r´   rƒ  rº   r­   ré   Fr¢  r½   rÀ   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   Ú100msFrà   )r   r   r¾   r¿   )r   rg   r}   r¦   rÄ   rÃ   r   r   r   Ú&test_allow_exact_matches_and_tolerancel
  s   úz4TestAsOfMerge.test_allow_exact_matches_and_tolerancec                 C   sæ   t  tdgƒdgdœ¡}t  tddgƒddgdœ¡}t||dd	�}t  tdgƒdgdgd
œ¡}t ||¡ t||ddd�}t  tdgƒdgdgd
œ¡}t ||¡ t||ddtdƒd�}t  tdgƒdgtjgd
œ¡}t ||¡ d S )Nú2016-07-15 13:30:00.030Úbob©r   Úusernameú2016-07-15 13:30:00.000r©   r³   ©r   Úversionr   r»   ©r   r«  r®  F)r¼   r¤   rß   ©r¼   r¤   r¡   )	rb   rc   r   r   r¾   r¿   r   r�   rž   rn  r   r   r   Ú'test_allow_exact_matches_and_tolerance2z
  sP   ÿÿüÿ	ýÿýÿûýÿz5TestAsOfMerge.test_allow_exact_matches_and_tolerance2c                 C   s„   t  tddgƒddgdœ¡}t  tddgƒddgdœ¡}t||d	d
tdƒd�}t  tddgƒddgtjtjgdœ¡}t ||¡ d S )Nr¨  r©  Úcharlierª  r¬  r©   r³   r­  r   Frß   r°  r¯  )	rb   rc   r   r   r   r�   rž   r¾   r¿   rn  r   r   r   Ú'test_allow_exact_matches_and_tolerance3¬
  s<   ÿüÿÿüÿ	ûÿ
ûÿ	z5TestAsOfMerge.test_allow_exact_matches_and_tolerance3c                 C   sv   t  g d¢g d¢dœ¡}t  g d¢g d¢dœ¡}t  g d¢g d¢tjddgdœ¡}t||d	d
ddd�}t ||¡ d S )Nr¨   r¬   r°   ©r©   r´   é   rµ   rƒ  r·   rµ   rƒ  rº   r­   rä   Fr©   ©r¼   ræ   r¤   r¡   rç   rÀ   r   r   r   Ú.test_allow_exact_matches_and_tolerance_forwardÑ
  ó   ÿúz<TestAsOfMerge.test_allow_exact_matches_and_tolerance_forwardc                 C   sv   t  g d¢g d¢dœ¡}t  g d¢g d¢dœ¡}t  g d¢g d¢tjddgd	œ¡}t||d
dddd�}t ||¡ d S )Nr¨   r¬   r°   r´  )r©   r´   rµ  r¶   rƒ  r·   rµ  rƒ  rº   r­   ré   Fr©   r¶  rç   rÀ   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©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À   r   r   r   Útest_forward_byù
  s*   ýÿýÿüÿ	zTestAsOfMerge.test_forward_byc                 C   s‚   t  g d¢g d¢g d¢dœ¡}t  g d¢g d¢g d¢dœ¡}t  g d¢g d¢g d¢g d¢d	œ¡}t||d
ddd�}t ||¡ d S )Nrº  )r½  r½  r¿  r¿  r¾  rÀ  rÃ  rÄ  )r½  r¿  r¿  r¿  r¾  rÆ  )r©   r©   rƒ  rƒ  rÅ  rÇ  r­   r®   ré   rÈ  r½   rÀ   r   r   r   Útest_nearest_by  s*   ýÿýÿüÿ	zTestAsOfMerge.test_nearest_byc                 C   s¤   t jtg d¢ƒg d¢g d¢dœg d¢d�}t jtg d¢ƒg d¢g d¢d	œg d	¢d�}t||d
dd�}t jtg d¢ƒg d¢g d¢g d¢dœg d¢d�}t ||¡ d S )N)ú20160525 13:30:00.020rÐ   ú20160525 13:30:00.040r  ú20160525 13:30:00.060)r©   r³   r©   r´   r³   )rš  g333333ó?gÍÌÌÌÌÌô?gffffffö?g      ø?)r   rm  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   rm  r‘  r   rm  rÛ   )rÏ  rÎ  rÐ  rÑ  rÒ  )r   rm  r�  r‘  )rb   rc   r   r   r¾   r¿   rn  r   r   r   Útest_by_int5  s<   ÿ	õòÿòïÿ	ôñzTestAsOfMerge.test_by_intc                 C   s–   t jg d¢tdƒdœddgd�}t jg d¢g d¢d	œdd
gd�}| d¡jdd�}t||dd�}t jtdƒg d¢g d¢dœg d¢d�}t ||¡ d S )N)ç
×£p=
@çHPüs×b?çáz®G!9@çÍÌÌÌÌ@u@çHáz®Ç>@çš™™™™C�@çÞqŠŽäò?ÚABCDEFG)r]   ÚsymbolrÜ  r]   r[   )ç        r'  ç      Y@)ç-Cëâ6?ç{®Gáz„?çš™™™™™©?)r]   Úmpvrâ  Tr   r»   ÚBGACEDF)rÕ  rÚ  rÔ  rÖ  rØ  r×  rÙ  )rß  rß  rà  rà  rà  rá  rá  )rÜ  r]   râ  ©rb   rc   r˜  rj  r   r   r¾   r¿   rn  r   r   r   Útest_on_floatr  s(   þûþýú	zTestAsOfMerge.test_on_floatc                 C   sÆ   t  |¡j}tjg d¢tdƒdœddgd�}||jƒ|_tjg d¢tdƒd	œdd
gd�}||jƒ|_| d¡jdd�}t	||dd�}tjtdƒg d¢tdƒdœg d¢d�}||jƒ|_t
 ||¡ d S )N©rª   r³   é   rÏ   éN   éx   éO   rÛ  )r-  rÜ  rÜ  r-  r[   ©r   éP   ré  é}   Úxyzw)r-  rÄ   rÄ   Tr   r»   ÚBACEGDF©r³   rª   rç  rè  rê  rÏ   ré  Úxxxxxyz)rÜ  r-  rÄ   )r�   r  Útyperb   rc   r˜  r-  rj  r   r   r¾   r¿   ©r   Úany_real_numpy_dtyper  ro  rp  rÄ   rÃ   r   r   r   Útest_on_specialized_type�  s,   þþýúz&TestAsOfMerge.test_on_specialized_typec                 C   sì   t  |¡j}tjg d¢g d¢tdƒdœg d¢d�}||jƒ|_tjg d¢g d¢td	ƒd
œg d
¢d�}||jƒ|_| d¡jdd�}t	||ddd�}tjtdƒg d¢g d¢t j
dt j
t j
t j
ddgdœg d¢d�}||jƒ|_t ||¡ d S )Nræ  )r©   r³   r´   r³   r´   r©   r³   rÛ  )r-  rm  rÜ  )rÜ  rm  r-  r[   rë  )r©   r³   r³   r´   rî  )r-  rm  rÄ   r-  Tr   rm  rÛ   rï  )r³   r©   r´   r´   r³   r³   r©   rð  rc  Úy)rÜ  rm  r-  rÄ   )r�   r  rò  rb   rc   r˜  r-  rj  r   r   rž   r¾   r¿   ró  r   r   r   Útest_on_specialized_type_by_int¯  s4   ýúþüù	z-TestAsOfMerge.test_on_specialized_type_by_intc                 C   s¼   t jtdƒg d¢g d¢dœg d¢d�}t jg d¢g d¢g d¢d	œg d	¢d�}| d
¡jdd�}| d
¡jdd�}t||d
dd�}t jtdƒg d¢g d¢g d¢dœg d¢d�}t ||¡ d S )NÚ	AAABBBCCC)	r©   r³   r´   r©   r³   r´   r©   r³   r´   )	ç®Gáz
@çÜ×�sF
@ç£¼
@ç)\�Âõ()@ç®Gáz.)@ç      )@çfffff¢w@ç33333£w@ç     ¤w@)rÜ  r  r]   r[   )	r©   r©   r©   r³   r³   r³   r´   r´   r´   )	rÝ  r'  rÞ  rÝ  ç      @rÞ  rÝ  r  g     @�@)	rß  rà  rá  rß  rà  çš™™™™™¹?rß  ç      Ð?r'  )r  r]   râ  r]   Tr   r  rÛ   )	r´   r³   r©   r´   r©   r³   r©   r³   r´   )	rû  rú  rù  rþ  rü  rý  rÿ  r   r  )	rß  rß  rà  r  rà  rà  rá  r  r  )rÜ  r  r]   râ  rä  rn  r   r   r   Útest_on_float_by_intÓ  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 dtyper¨   r¬   ©r±   r­   r²   ©r¸   r­   rû   r­   r»   ©rb   rc   rá   rÿ   r   r   ©r   r  rÁ   rÂ   r   r   r   Ú test_merge_datatype_error_raises  s   "ÿz.TestAsOfMerge.test_merge_datatype_error_raisesc                 C   s‚   d}t  g d¢t  g d¢¡dœ¡}t  g d¢t  g d¢¡dœ¡}tjt|d�� t||d	d
� W d   ƒ d S 1 s:w   Y  d S )NzHincompatible merge keys \[0\] .* both sides category, but not equal onesr¨   r¬   r  r²   )r­   r½  r¯   r½  r®   r  rû   r­   r»   )rb   rc   ÚCategoricalrá   rÿ   r   r   r
  r   r   r   Ú,test_merge_datatype_categorical_error_raises  s   ÿÿþÿ"ÿz:TestAsOfMerge.test_merge_datatype_categorical_error_raisesc                 C   s`   t  dgdgt  dg¡dœ¡}t||dddgd�}t  dgdgt  dg¡dœ¡}t ||¡ d S )Nr   ©rc  rö  Úzrc  rö  r  rÛ   )rb   rc   r  r   r¾   r¿   )r   r   rÄ   rÃ   r   r   r   Ú:test_merge_groupby_multiple_column_with_categorical_column(  s   zHTestAsOfMerge.test_merge_groupby_multiple_column_with_categorical_columnÚfuncc                 C   s   | S ©Nr   rb  r   r   r   rd  0  s    zTestAsOfMerge.<lambda>c                 C   s   t | ƒS r  )r   rb  r   r   r   rd  0  s    ÚnumericÚdatetimeÚsiderÁ   rÂ   c                 C   sº   d|› d�}|ddt jgƒ}|g d¢ƒ}t |g d¢dœ¡}t |g d¢d	œ¡}tjt|d
��$ |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'  r  )r'  r  g      $@r¬   r°   )r©   rµ   rƒ  r·   rû   rÁ   r­   r»   )r�   rž   rb   rc   rá   rÿ   rz  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< |rz|d  d¡|d< t ||¡ d S )Nr   r©   ©r  )ÚiÚur³   )ÚHELLOÚToÚYou)r³   rµ  rµ   )r­   r¯   rÂ  ©Úby_col1Úby_col2Úon_colr-  )ÚWORLDÚWideÚWeb)r©   r³   rµ   )r®   rÁ  re  r!  r"  r#  ©rÜ   r¼   ©r!  r"  r#  Úvalue_xÚvalue_yÚstr)rb   ÚarrayÚNAr  Úkindr�   ÚiinfoÚnumpy_dtypeÚmaxÚfinforc   r   rž   r  re   r¾   r¿   )	r   Úany_numeric_ea_dtypeÚusing_infer_stringÚarrÚmax_valrÁ   rÂ   rÄ   rÃ   r   r   r   Útest_by_nullableA  s>   üÿüÿ	üÿzTestAsOfMerge.test_by_nullablec                 C   sŽ   t  t  dg¡ d¡dgdgdœ¡}t  t  dg¡ d¡dgdgdœ¡}t||dd	d
�}t jt jddd�dddggg d¢d�}t ||¡ d S )Nú
2018-01-01r‰  r³   r­   )Úby_colr#  Úvaluesr©   r®   r9  r#  r'  ©r�  )r9  r#  Úvalues_xÚvalues_yr[   )rb   rc   ÚDatetimeIndexÚtz_localizer   r.  r¾   r¿   )r   rÁ   rÂ   rÄ   rÃ   r   r   r   Útest_merge_by_col_tz_awareo  s$   ýÿýÿþz(TestAsOfMerge.test_merge_by_col_tz_awarec                 C   sÆ   t  t  dg¡ d¡dgdgdgdœ¡}t  t  dg¡ d¡dgdgd	gdœ¡}t||d
dgdd�}t jt jddd�dddggg d¢d�}tjtjgt	d�|d< |r[|d  
d¡|d< t ||¡ d S )Nr8  r‰  r  r³   r­   r   r$  r©   r®   r!  r"  r#  r'  r;  r(  r[   r  r*  r+  )rb   rc   r>  r?  r   r.  r�   r,  rž   r  re   r¾   r¿   )r   r4  rÁ   rÂ   rÄ   rÃ   r   r   r   Útest_by_mixed_tz_aware†  s.   üÿüÿþz$TestAsOfMerge.test_by_mixed_tz_aware)r^   Úint16zm8[ns]zM8[us]c                 C   sŠ   t  tjdg|d�dgdgdœ¡}t  tjdg|d�dgdgdœ¡}t||ddd	�}t  tjdg|d�dgdgdgd
œ¡}t ||¡ d S )Nr©   r  r³   r­   )r9  r#  r-  r®   r9  r#  r'  )r9  r#  r)  r*  )rb   rc   r�   r,  r   r¾   r¿   )r   r  rÁ   rÂ   rÄ   rÃ   r   r   r   Útest_by_dtype¢  s*   ýÿýÿüÿzTestAsOfMerge.test_by_dtypec                 C   s  |dkr	t  d¡ tjttg d¢g d¢ƒƒddgd�}t |d d¡ d	|› d
�¡|d< tjttg d¢g d¢ƒƒddgd�}t |d d¡ d	|› d
�¡|d< tjttg d¢g d¢dtj	ddtj	tj	gƒƒg d¢d�}t |d d¡ d	|› d
�¡|d< t
||dtdƒdd�}t ||¡ d S )Nr   zHThis test is invalid with unit='s' because that would round left['time'])r   rª   r«   r¼  é   rç  )r   r©   r³   r´   rµ  rª   r   rÁ   r[   r	   zm8[rÇ   )r   r´   é	   r»  r¼  é   rÂ   r   r³   rµ  )r   rÁ   rÂ   Ú1msré   )r¼   r¡   ræ   )rá   râ   rb   rc   r˜  ÚzipÚto_timedeltare   r�   rž   r   r   r¾   r¿   )r   r   rÁ   rÂ   rÃ   rÄ   r   r   r   Ú test_timedelta_tolerance_nearest¾  s:   ÿþ"þ"ýÿø"ÿz.TestAsOfMerge.test_timedelta_tolerance_nearestc                 C   s¨   t  g d¢g d¢dœ¡}t  g d¢g d¢dœ¡}|d  |¡|d< |d  |¡|d< t  g d¢g d¢tjddgd	œ¡}|d  |¡|d< t||dd
d�}t ||¡ d S )N)r   r«   rD  rl  r°   )rª   r¼  rç  r·   r­   r'  r(  rº   r«   r’  )rb   rc   re   r�   rž   r   r¾   r¿   )r   Úany_int_dtyperÁ   rÂ   rÃ   rÄ   r   r   r   Útest_int_type_toleranceç  s   ÿz%TestAsOfMerge.test_int_type_tolerancec                 C   sþ   t jddddd�}t jg d¢dg|dd … d	�}t  |d
gd dg dœ¡}t||ddgd�}t jg d¢|dd … d
gd dg dœt jddddd�d�}t ||¡ t||ddgd�}t j|d
gd dg tjddddgdœtg d¢ƒd�}t ||¡ d S )Nz
2019-10-01Ú30minrª   r‰  )r‹  rŒ  r�  )çÍÌÌÌÌÌì?çš™™™™™é?çffffffæ?ç333333ã?Úxyzr©   )r\   ró   g®Gáz®@rµ  g…ëQ¸…@)Ú	from_dateÚabcTrS  )rÁ   rÂ   rð   rñ   r´   )rR  rS  rT  z2019-10-01 00:30:00©ró   )rÁ   rÂ   rö   rõ   rN  rO  rP  rQ  )rS  rT  rR  )r   r©   r³   r´   rµ  )	rb   r”  rc   r   r¾   r¿   r�   rž   r   )r   ró   rÁ   rÂ   rÄ   rÃ   r   r   r   Útest_merge_index_column_tz÷  s6   
ÿ
ýÿú

ÿý
úz(TestAsOfMerge.test_merge_index_column_tzc                 C   s¶   |dkr	t  d¡ tjddd|d�tdd� |¡ }tjdd	|d
�}tjddit |¡d�}tjddit |¡d�}tjdddœt |¡d�}t||ddtdd�d�}t	 
||¡ d S )Nr   z?This test is invalid with unit='s' because that would round dr1z1/1/2020z	1/20/2020Ú2D)rŠ  Úendr‹  r   gš™™™™™Ù?)Úsecondsz2/1/2020)rŠ  rX  r   Úval1rr  rU  Úval2Úbar)rZ  r[  Tr�  )rð   rö   r¡   )rá   râ   rb   r”  r   Úas_unitrc   r>  r   r¾   r¿   )r   r   Údr1Údr2ro  rp  rÃ   rÄ   r   r   r   Ú%test_left_index_right_index_tolerance  s.   ÿÿþÿûz3TestAsOfMerge.test_left_index_right_index_toleranceN)F)MÚ__name__Ú
__module__Ú__qualname__r   rá   Úfixturerg   r}   rŸ   r¡   r¤   r¦   rÅ   rã   rè   rê   rí   rï   rô   rø   rú   r  r  r  r  r
  r  r  ÚmarkÚparametrizer   r/  r0  r`  rf  rh  rk  rq  rt  rw  r{  r   r  Ú	timedeltar€  r…  r‡  r™  rž  rŸ  r   r£  r¥  r§  r±  r³  r·  r¹  rÉ  rÊ  rÓ  rå  rõ  r÷  r  r  r  r  r  r7  r@  rA  rC  rJ  rL  rV  r`  r   r   r   r   r      sÂ    

%

  
  
 p
 pY		

		A
D2      a
	.ý
+2%=$9	ÿ.
)!r   Úinfer_stringFTÚpyarrow)ÚmarksÚkwargsr¼   rc  rý   Údataz2019-06-01 00:09:12z2019-06-01 00:10:29r'  c              	   C   s¤   t d|ƒ�C tjd|i|d�}tjd|i|d�}tjtdd�� t||fi | ¤Ž W d   ƒ n1 s3w   Y  W d   ƒ d S W d   ƒ d S 1 sKw   Y  d S )Nzfuture.infer_stringrc  rU  r  rû   )r   rb   rc   rá   rÿ   r   r   )rk  rl  rh  rÁ   rÂ   r   r   r   Ú#test_merge_asof_non_numerical_dtype4  s   þüý"ýrm  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)rQ  Ú13Ú15r¬   )r­   Ú	left_val1)rÁ  rÂ  re  r°   r  rû   rp  r­   r±   )rõ   rñ   r  r	  r	  ©rÁ   rÂ   r   r   r   Ú*test_merge_asof_non_numerical_dtype_objectJ  s   þú"ürr  )rö   rð   Ú	left_time)rõ   rö   rÂ   )rð   rñ   c                 C   sŠ   t g d¢dd�}tjg d¢g d¢dœ|d�}tjdg d	¢ig d	¢d�}t||fi | ¤Ž}tjg d¢g d¢g d
¢dœ|d�}t ||¡ d S )Nr¨   Útest©Únamer¬   )r©   rµ  r«   )rÁ   rs  rU  rÂ   r²   r¹   )rÁ   rs  rÂ   )r   rb   rc   r   r¾   r¿   )rk  ró   rÁ   rÂ   rÄ   rÃ   r   r   r   Útest_merge_asof_index_behavior\  s   
þrw  c                  C   s‚   t jdg d¢itg d¢dd�d�} t jdg d¢itg d	¢dd�d�}t| |ddd
�}t  g d¢g d¢g d¢dœ¡}t ||¡ d S )Nr®   ©r«   rƒ  r»  rl  r­   ru  rU  r¯   ©rD  é   é   )r   r³   r´   ©rõ   rñ   r¬   )rb   rc   r   r   r¾   r¿   ©rÁ   rÂ   rÄ   rÃ   r   r   r   Ú'test_merge_asof_numeric_column_in_indexr  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 )Nr®   rx  rl  r¬   r­   r  )ÚnamesrU  r¯   ry  r  rö  r|  )rb   rc   Ú
MultiIndexÚfrom_arraysr   r¾   r¿   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 )Nr®   rx  )r=  Ú2Ú3r­   ru  rU  r¯   ry  )ÚmÚnÚor  rû   r|  )	rb   rc   r   rá   rÿ   r   r   r   rò   rq  r   r   r   Ú3test_merge_asof_numeri_column_in_index_object_dtypeŒ  s    ""þüþ"ürˆ  c                 C   sÔ   t jddgd| › d�d�}t  ddg|dœ¡}t jt  d	¡d
d| d�}t  dg d¢i¡}t|||dddd�}t  g d¢tjddg|dœ¡}t 	||¡ t||d|ddd�}t  ddg|ddgdœ¡}t 	||¡ d S )Nz2021/01/01 00:37z2021/01/01 01:40rÆ   rÇ   r  r³   rµ   )r­   Útsz2021/01/01 00:00r´   Ú1h)rŠ  rŒ  r‹  r   r®   )rµ  é   r¶   r‰  FÚbackward)rõ   rñ   r¤   ræ   )r®   r­   r‰  rµ  r‹  )r­   r‰  r®   )
rb   r>  rc   r”  r.  r   r�   rž   r¾   r¿   )r   ÚdtirÂ   Úts_mergerÁ   rÄ   rÃ   r   r   r   Útest_merge_asof_array_as_on¡  sJ   ÿþÿÿúúýÿ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)r©   r³   r­   )r­   r­   r±   r[   )r©   r©   r©   )r­   r­   r¸   zcolumn label 'a'rû   r­   r»   r¸   r|  r±   )rb   rc   rá   rÿ   rz  r   rq  r   r   r   Ú+test_merge_asof_raise_for_duplicate_columnsÍ  s   ÿÿ"ÿr�  r  ÚInt64zint64[pyarrow]ztimestamp[s][pyarrow]c                 C   sš   t  g d¢g d¢dœ¡}t  g d¢g d¢dœ¡}| d| i¡}| d| i¡}t||dd�}t  g d¢g d¢tjdd	gd
œ¡}| d| i¡}t ||¡ d S )N)r©   r´   rª   rl  )Újoin_colr±   )r³   r´   rµ  )r’  r¸   r’  r»   r(  r*  )r’  r±   r¸   )rb   rc   re   r   r�   rž   r¾   r¿   )r  rÁ   rÂ   rÄ   rÃ   r   r   r   Útest_merge_asof_extension_dtypeÜ  s*   
þÿþÿ
ýÿr“  c                  C   sf   t jt ddd¡gdd�} t  | dgdœ¡}t||dtdƒd�}t  | dgdgd	œ¡}t ||¡ d S )
Niç  r©   ztimestamp[us, UTC][pyarrow]r  )Ú	timestampr-  r”  ru  r’  )r”  r)  r*  )rb   ÚSeriesr  rc   r   r   r¾   r¿   )Úserr   rÄ   rÃ   r   r   r   Ú$test_merge_asof_pyarrow_td_tolerance   s    ÿþÿýÿr—  c                  C   sz   t jdgdgdd�} t jdgdgdd�}d| jjj_d|jjj_t| |ddd�}t jdgdgd	œdgd
�}t 	||¡ d S )Nr³   rÁ   )ró   rv  r©   rÂ   FTrý   rq  rU  )
rb   r•  ró   r:  ÚflagsÚ	writeabler   rc   r¾   r¿   r}  r   r   r   Ú!test_merge_asof_read_only_ndarray  s   rš  c               
   C   sÚ   t  t jg d¢ddgd�dgd dgd tdƒdœ¡} t  t jddgddgd�dgd	 dd	gtd	ƒdœ¡}t| |d
dgddddgd�}t  t jg d¢ddgd�dgd dgd tdƒtjtjddgdœ¡}t ||¡ d S )N)r­   r­   r®   r®   r­   r®   )Ú
categoriesrc  rµ  r©   )Úc1Úc2ÚtÚvr³   rœ  r�  rž  rä   Ú_leftÚ_right)rÜ   r¼   ræ   ÚsuffixesrÝ  )rœ  r�  rž  Úv_leftÚv_right)	rb   rc   r  Úranger   r�   rž   r¾   r¿   r}  r   r   r   Ú(test_merge_asof_multiby_with_categorical#  s>   üÿüÿúûÿ	r¦  )(r  Únumpyr�   rá   r•  Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsÚtdÚpandasrb   r   r   r   r   r   Úpandas._testingÚ_testingr¾   Úpandas.core.reshape.merger   rd  r   r   re  rf  r   Ú
skip_if_norm  rr  rw  r~  r‚  rˆ  r�  r�  r“  r—  rš  r¦  r   r   r   r   Ú<module>   s–    
                          1ÿÿþýþ

,ýþ

