o
    Û­jsD  ã                   @   sº  d dl m Z  d dlZd dlZd dl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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ej dddeddgddgdœddgd�fddeddgddgdœddgd�fd	deg d ¢ddejgdœg d!¢d�fd	deg d"¢ejddgdœg d#¢d�fddeejddgg d$¢dœg d%¢d�fddeddejgg d&¢dœg d'¢d�fd(ded ddejgejddd)gdœg d*¢d�fd(ded ddejgejddd)gdœg d*¢d�fg¡d+d,„ ƒZd-d.„ Zd/d0„ Zej d1d2d3g¡d4d5„ ƒZ d6d7„ Z!d8d9„ Z"d:d;„ Z#d<d=„ Z$d>d?„ Z%d@dA„ Z&dBdC„ Z'dDdE„ Z(dFdG„ Z)dHdI„ Z*ej dJddg¡dKdL„ ƒZ+G dMdN„ dNƒZ,dS )Oé    )ÚdatetimeN)Ú
MergeError)Ú	DataFrameÚIndexÚ
MultiIndexÚ
date_rangeÚperiod_range)Úconcatc                   C   s*   t t d¡ dd¡tdƒtdddd�d�S )	Né   é   é   ÚabcdeÚ2000ÚY)ÚstartÚfreqÚperiods©ÚdataÚcolumnsÚindex)r   ÚnpÚarangeÚreshapeÚlistr   © r   r   úa/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/tests/frame/methods/test_join.pyÚframe_with_period_index   s
   ýr   c                   C   ó   t dg d¢ig d¢d�S )NÚa©r
   é
   r   ©é   é   r   ©r   ©r   r   r   r   r   Úleft   ó   r'   c                   C   r   )NÚb©é,  éd   éÈ   ©é   r$   r#   r%   r&   r   r   r   r   Úright"   r(   r0   c                   C   s   t g d¢g d¢dœtdƒd�S )N©r   r)   ÚcÚd©ÚcatÚdogÚweaselÚhorse©r   r)   r   r%   )r   Úranger   r   r   r   Úleft_no_dup'   s   þr;   c                   C   s$   t g d¢g d¢dœtdƒd� d¡S )N)r   r)   r2   r3   Úe)ÚmeowÚbarkúum... weasel noise?ÚnayÚchirp©r   r2   r   r%   r   )r   r:   Ú	set_indexr   r   r   r   Úright_no_dup/   s   þûúrD   c                 C   s$   t | tdgdgdœdgd�gdd�S )Nr   Úcowr9   r/   r%   T)Úsort)r	   r   )r;   r   r   r   Úleft_w_dups:   s   ÿrG   c                 C   s&   t | tdgdgdœdgd�gƒ d¡S )Nr<   ÚmoorB   r/   r%   r   )r	   r   rC   )rD   r   r   r   Úright_w_dupsA   s
   ÿþrI   zhow, sort, expectedÚinnerFr
   r!   r-   r,   r9   r#   r$   r%   Tr    r"   ©r   r!   r
   )r   r$   r#   r*   r.   ©r,   r-   r+   ©r$   r#   r/   Úouterr+   )r   r$   r#   r/   c                 C   s"   | j |||dd�}t ||¡ d S )Nú1:1)ÚhowrF   Úvalidate)ÚjoinÚtmÚassert_frame_equal)r'   r0   rP   rF   ÚexpectedÚresultr   r   r   Ú	test_joinH   s   ,rW   c                  C   sb  t dg d¢iƒ} t g d¢g d¢dœƒ}t g d¢g d¢dœƒ}d}tjt|d�� | j|gd	d
� W d   ƒ n1 s:w   Y  tjt|d�� | j||gdd� W d   ƒ n1 sZw   Y  tjt|d�� | j||gd	dd� W d   ƒ n1 s{w   Y  tjtdd�� |  ||g¡ W d   ƒ n1 s™w   Y  |  |g¡}|  |¡}t ||¡ d S )NÚkey)r$   r#   r/   r   r   )r$   é   r/   r#   r   )rX   Úv1)r   r#   r/   r   r$   )ÚkeysÚv2z7Suffixes not supported when joining multiple DataFrames©ÚmatchÚy)ÚlsuffixÚx)Úrsuffix©r`   rb   zIndexes have overlapping values)r   ÚpytestÚraisesÚ
ValueErrorrR   rS   rT   )ÚfirstÚsecondÚthirdÚmsgÚ
arr_joinedÚnorm_joinedr   r   r   Útest_suffix_on_list_joinx   s&   ÿÿÿÿ
rm   c                 C   sH   d}t jt|d�� | j|ddd� W d   ƒ d S 1 sw   Y  d S )Nz—"invalid" is not a valid argument. Valid arguments are:
- "1:1"
- "1:m"
- "m:1"
- "m:m"
- "one_to_one"
- "one_to_many"
- "many_to_one"
- "many_to_many"r]   r   Úinvalid©ÚonrQ   )rd   re   rf   Úmerge)r;   rD   rj   r   r   r   Útest_join_invalid_validateŽ   s
   ÿ"ÿrr   ÚdtypeÚobjectústring[pyarrow]c                 C   s‚   |dkr	t  d¡ |  |¡} |j |¡|_| j|ddd� d}t jt|d�� | j|ddd� W d   ƒ d S 1 s:w   Y  d S )	Nru   Úpyarrowr   Úone_to_manyro   zBMerge keys are not unique in right dataset; not a one-to-one merger]   Ú
one_to_one)rd   ÚimportorskipÚastyper   rR   re   r   )r;   rI   rs   rj   r   r   r   Ú$test_join_on_single_col_dup_on_right¡   s"   

ýý"ÿr{   c                 C   sX   | j |ddd� d}tjt|d�� | j |ddd� W d   ƒ d S 1 s%w   Y  d S )Nr   Úmany_to_onero   zAMerge keys are not unique in left dataset; not a one-to-one merger]   rx   ©rR   rd   re   r   )rG   rD   rj   r   r   r   Ú#test_join_on_single_col_dup_on_left¹   s   ýý"ÿr~   c                 C   sš   | j |ddd� d}tjt|d�� | j |ddd� W d   ƒ n1 s$w   Y  d}tjt|d�� | j |ddd� W d   ƒ d S 1 sFw   Y  d S )	Nr   Úmany_to_manyro   zCMerge keys are not unique in right dataset; not a many-to-one merger]   r|   zBMerge keys are not unique in left dataset; not a one-to-many mergerw   r}   )rG   rI   rj   r   r   r   Ú#test_join_on_single_col_dup_on_bothÌ   s"   ýÿý"ÿr€   c                  C   s°   t g d¢g d¢g d¢dœtdƒd� ddg¡} t g d	¢g d
¢g d¢dœtdƒd� ddg¡}t g d	¢g d
¢g d¢g d¢dœtdƒd� ddg¡}| j|ddd�}t ||¡ d S )N)r   r   r)   r)   )r   r$   r   r$   r4   ©r   r)   r2   r   r%   r   r)   )r   r   r)   )r   r$   r   )r=   r>   r?   )r   r)   r3   r/   )r5   r6   r7   r1   rJ   rO   )rP   rQ   )r   r:   rC   rR   rS   rT   )r'   r0   Úexpected_multirV   r   r   r   Ú test_join_on_multi_col_check_dupä   s<   ýú
ù	ýú
ù	üù
ørƒ   c              	   C   s¾  | j | jd d… ddgf }| j | jdd … ddgf jd d d… }| |¡}t |j|j¡ tg d¢ƒ}t |j|¡ |j|d	d
�}t |j|j¡ t |j|¡ |j|dd
�}t |j|j¡ t |j|¡ |j|dd
�}t |j|jdd… ¡ t |j|¡ |j|dd
�}t |j| j ¡ ¡ t |j|¡ t	j
tdd�� |j|dd
� W d   ƒ n1 s³w   Y  d}dD ] }t	j
t|d�� | j| |d
� W d   ƒ n1 s×w   Y  q¼d S )Nr!   ÚAÚBr   ÚCÚDéÿÿÿÿ)r„   r…   r†   r‡   r'   ©rP   r0   rJ   rN   zjoin methodr]   Úfoozcolumns overlap but no suffix)rN   r'   rJ   )Úlocr   ÚilocrR   rS   Úassert_index_equalr   r   Úsort_valuesrd   re   rf   )Úfloat_frameÚfÚf2ÚjoinedÚexpected_columnsrj   rP   r   r   r   Útest_join_index  s8   (
ÿÿ€ÿr”   c                 C   sÊ   | j d d …ddgf }| j d d d…ddgf }| ¡ }| d d d d… |d< | d d d d… |d< | |¡}t ||¡ |j|dd�}t ||d d d… ¡ |j|dd�}t ||j d d …|jf ¡ d S )Nr„   r…   r#   r†   r‡   r0   r‰   )r‹   ÚcopyrR   rS   rT   r   )r�   ÚafÚbfrU   rV   r   r   r   Útest_join_index_more1  s   
 r˜   c                 C   sr   |   ¡ }| | jd ¡}| |¡}t || ¡ d |_tjt	dd�� | |¡ W d   ƒ d S 1 s2w   Y  d S )Nrˆ   zmust have a namer]   )
r•   Úpopr   rR   rS   rT   Únamerd   re   rf   )r�   ÚdfÚserr’   r   r   r   Útest_join_index_seriesC  s   
"ÿr�   c                 C   sº   | j d d …g d¢f }| j d d …g d¢f }|j|ddd�}|j d d …ddgf  d¡}|j d d …ddgf  d¡}| j d d …dd	gf }| |¡ |¡}t ||j d d …|jf ¡ d S )
N)r„   r…   r†   )r…   r†   r‡   Ú_df1Ú_df2rc   r…   r†   r„   r‡   )r‹   rR   Ú
add_suffixrS   rT   r   )r�   Údf1Údf2r’   Údf1_sufÚdf2_sufÚ
no_overlaprU   r   r   r   Útest_join_overlapO  s    r¦   c                 C   s^   | j dd„ d�}tj| jgd dd�}| j |j¡}|  |¡}t||| jd�}t	 
||¡ d S )Nc                 S   s   | › | › �S )Nr   )rX   r   r   r   Ú<lambda>_  s    z(test_join_period_index.<locals>.<lambda>©r   r#   r$   )Úaxisr   )Úrenamer   ÚconcatenateÚvaluesr   ÚappendrR   r   r   rS   rT   )r   ÚotherÚjoined_valuesÚjoined_colsr’   rU   r   r   r   Útest_join_period_index^  s   
ÿr±   c                  C   sœ   t dg d¢ig d¢d�} t dg d¢ig d¢d�}t dg d	¢ig d
¢d�}| j||gdd�}t g d¢tjdddgtjddtjgdœg d¢d�}t ||¡ d S )Nr   rK   rM   r%   r)   rL   )r   r/   r#   r2   )é�  éô  iX  )r#   r#   r   r'   r‰   )r   r!   r!   r
   r+   r-   r²   r³   r�   )r$   r#   r#   r/   )r   rR   r   ÚnanrS   rT   )r¡   r¢   Údf3r’   rU   r   r   r   Ú(test_join_left_sequence_non_unique_indexm  s   ýú	r¶   c                 C   s6   | j  ¡ }| j| ddg g}| |¡}t || ¡ d S )Nr†   r‡   )r„   Úto_framer…   rR   rS   rT   )r�   r'   r0   rV   r   r   r   Útest_join_list_series�  s   

r¸   Úsort_kwc                 C   sâ   t dddgiddgd�}t ddd	gid
dgd�}t dddgidd
gd�}t dtdƒddœddtdƒdœddtdƒdœdœƒ}| du rJ|jg d¢d�}t d ¡� |j||gd| d�}W d   ƒ n1 sdw   Y  t ||¡ d S )NÚcol1r$   r#   r2   r   r%   Úcol2r   r   r)   Úcol3é   rY   ç       @r´   ç      ð?r�   g      @g      @g      @g       @©rº   r»   r¼   F)r2   r   r)   rN   )rP   rF   )r   ÚfloatÚreindexrS   Úassert_produces_warningrR   rT   )r¹   r   r)   r2   rU   rV   r   r   r   Ú)test_suppress_future_warning_with_sort_kwŠ  s   ýÿÿrÄ   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestDataFrameJoinc                 C   s¦   |}|j |jd d… dgf }|j |jdd … ddgf }|j|dd� |j¡}| ¡ j ¡ }tj|t |j¡< t	||j|j
d�}t |j¡ ¡ rKJ ‚t ||¡ d S )	Nr   r„   r#   r…   r†   rN   r‰   ©r   r   )r‹   r   rR   rÂ   r•   r¬   r   r´   Úisnanr   r   ÚallrS   rT   )ÚselfÚ multiindex_dataframe_random_dataÚframer   r)   r’   rU   r   r   r   rW   ¢  s   zTestDataFrameJoin.test_joinc                 C   sp   t ddgddgddgdœƒ}t ddgddgddgdœƒ}| ddg¡}| ddg¡}dD ]	}|j||d� q,d S )	Nr$   r#   )r   r)   ra   )r   r)   r_   r   r)   )r'   r0   rN   r‰   )r   rC   rR   )rÉ   r¡   r¢   rP   r   r   r   Útest_join_segfault±  s   ÿz$TestDataFrameJoin.test_join_segfaultc                 C   sr   ddg}t dddƒt dddƒg}t|tdƒdgd�}td	dgd
dgg||d�}|j|dd�}t|jƒd
ks7J ‚d S )NÚ20120209Ú20120222iÜ  r#   é	   é   ÚaarÆ   r$   r/   r   ©rp   )r   r   r:   rR   Úlenr   )rÉ   Ú	str_datesÚdt_datesr„   r†   Útstr   r   r   Útest_join_str_datetime»  s   z(TestDataFrameJoin.test_join_str_datetimec                 C   s„  t g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g	g d
¢d� ddg¡}t ddgddggddgd� dg¡}t ddgddgddgddgddgddgdtjgdtjgdtjgg	|jddgd�}t |j|dd�|¡ t |j|d d�|ddg ¡ tj	ddgg d!¢gddgd"�}t ddgddgddgddgddgddgg|ddgd�}t |j|d d�|¡ t |j|dd�|ddg ¡ d S )#N)r   ra   çR
º½¤1Þ?)r   r_   ç¡­ÜÌè?)r   Úzç¼<�+J	â?)r)   ra   çµá°4ð£Ö¿)r)   r_   ç^Ÿ9ëSŽ×?)r)   rÚ   ç?�¨Œû¿)r2   ra   r$   )r2   r_   r#   )r2   rÚ   r/   )rg   rh   Úvalue1r¨   rg   rh   r   r!   r)   r
   Úvalue2rØ   rÙ   rÛ   rÜ   rÝ   rÞ   r¿   r¾   g      @rß   rÆ   r'   r‰   r0   )ra   r_   rÚ   ©Únames)
r   rC   r   r´   r   rS   rT   rR   r   Úfrom_product)rÉ   r¡   r¢   ÚexpÚexp_idxr   r   r   Útest_join_multiindex_leftrightÆ  sd   ÷ô
óÿ÷óÿúö"z0TestDataFrameJoin.test_join_multiindex_leftrightc                 C   sà   t  ddd¡ ¡ }tjd|fgddgd�}tddgi|d�}tjd|fgddgd�}td	dgi|d�}tjd|fgddgd�}td
dgi|d�}| ||g¡}tjd|fgddgd�}	tdgdgdgdœ|	d�}
t ||
¡ d S )NiÐ  r$   r   Úindex_0Údaterá   rº   r%   r»   r¼   rÀ   )	ÚpdÚ	Timestamprè   r   Úfrom_tuplesr   rR   rS   Úassert_equal)rÉ   rè   Ú	df1_indexr¡   Ú	df2_indexr¢   Ú	df3_indexrµ   rV   Úexpected_indexrU   r   r   r   Útest_join_multiindex_dates  s   ÿz,TestDataFrameJoin.test_join_multiindex_datesc                 C   sÂ   t ddgddgddggd�}t dd	g¡}t |dd
gddggd�}tjtdd�� tj||dd� W d   ƒ n1 s;w   Y  tjtdd�� |j|dd� W d   ƒ d S 1 sZw   Y  d S )Nr   r)   r$   é   r   rÐ   )r   r   )r   Ú )r2   Úc1é!   é,   z-Not allowed to merge between different levelsr]   rÒ   )	r   r   rë   rd   re   r   ré   rq   rR   )rÉ   r¡   r   r¢   r   r   r   Ú'test_merge_join_different_levels_raises  s   ÿýÿ"ýz9TestDataFrameJoin.test_merge_join_different_levels_raisesc                 C   s„   t t d¡tddddd�d�}t t d¡tdd	d
dd�td	dƒd�}|j|dd�}|j |j¡}t 	|j|¡ |jj
jdks@J ‚d S )N)é   r/   z2012-11-15 00:00:00rø   Ú100msz
US/Central)r   r   Útzr%   )r/   r/   r/   Ú250msrÆ   rN   r‰   )r   r   Úzerosr   r:   rR   r   ÚunionrS   r�   rú   Úzone)rÉ   Útest1Útest2rV   rU   r   r   r   Útest_frame_join_tzaware-  s"   ÿþÿûz)TestDataFrameJoin.test_frame_join_tzawareN)
Ú__name__Ú
__module__Ú__qualname__rW   rÌ   r×   ræ   rñ   r÷   r  r   r   r   r   rÅ   ¡  s    
<rÅ   )-r   Únumpyr   rd   Úpandas.errorsr   Úpandasré   r   r   r   r   r   Úpandas._testingÚ_testingrS   Úpandas.core.reshape.concatr	   Úfixturer   r'   r0   r;   rD   rG   rI   ÚmarkÚparametrizer´   rW   rm   rr   r{   r~   r€   rƒ   r”   r˜   r�   r¦   r±   r¶   r¸   rÄ   rÅ   r   r   r   r   Ú<module>   s˜    







"" ý ý ý ýþý	þýáþ
+
$)	
