U
    ¾mœd>  ã                   @   sZ   d dl mZ d dlZd dlZd dlZd dlmZmZm	Z	m
Z
 d dlmZ G dd„ dƒZdS )é    )ÚtimezoneN)Ú	DataFrameÚIndexÚSeriesÚ
date_rangec                
   @   s6  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
 dddejgddegddegddejgg¡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#d$„Ze	j
 d%d&d'g¡e	j
 d(d)d*d"g¡e	j
 d+d)d*g¡e	j
 d,d-d.d/d0g¡d1d2„ ƒƒƒƒZd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd"S )<ÚTestDataFrameAlignc                 C   s:  t ddddd�}t ddddd�}ttj t|ƒd¡|ƒ}ttj t|ƒd¡|ƒ}| |¡\}}|jj|jjksrt	‚|jj|jjks†t	‚| 
d¡}| |¡\}}|jjtjks°t	‚|jjtjksÂt	‚|j|d	 d	d
�\}}|jjtjksêt	‚|jjtjksüt	‚|d	 j|d	d
� |jjtjk�s"t	‚|jjtjk�s6t	‚d S )NZ2001é   ÚHz
US/Eastern)ZperiodsÚfreqÚtzZ2Hé   z
US/Centralr   ©Úaxis)r   r   ÚnpÚrandomZrandnÚlenÚalignÚindexr   ÚAssertionErrorZ
tz_convertr   Úutc)ÚselfZidx1Zidx2Údf1Údf2Znew1Znew2Zdf1_central© r   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/frame/methods/test_align.pyÚtest_frame_align_aware   s"    
z)TestDataFrameAlign.test_frame_align_awarec              	      sÂ  |  |¡\}}|j|jk	st‚|j |dd�\}}|sF|j|jksVt‚n|j|jk	sVt‚|jd d…d d…f }|j |ddd�\}}t |j|j¡ |j |j¡}|j 	|¡}| 
|¡j}|dk ¡ sÆt‚|j |ddd	�\}}t |j|j¡ t |j|j¡ t |j|j¡ |jd d…d d…f  ¡ }|j |d
d�\}}t |j|j¡ t |j|j¡ |j |j¡}|j 	|¡}| 
|¡j}|dk ¡ �sŽt‚|j |dd
d	�\}}t |j|j¡ |j |dd
dd�\}}t |j|j¡ |j |jd d …df dd
d d d�\}}t |jtg ƒ¡ |j |jd d …df dd
d dd�\}}t |jtg ƒ¡ d}	tjt|	d��$ |j |jdd d…f ddd	� W 5 Q R X |j}
ttt|
ƒƒ|
d�‰ |j ˆ dd�\}}t |j|j¡ t |j|j¡ t|tƒ�sàt‚|j ˆ d
d�\}}t |j|j¡ ‡ fdd„|jD ƒ}t||j|jd�}t ||¡ td
ddgdddgdœƒ}||d dk }tddggd
gddgd�}t ||¡ | |d dkd¡}tdddgdddgdœƒ}t ||¡ d S )NF)Úcopyéûÿÿÿr   r   éÿÿÿÿ)r   Ú
fill_valueÚright)Újoinr   é   r   ÚinnerÚpad©r!   r   Úmethod©r!   r   r&   r   z)No axis named 2 for object type DataFrame©Úmatché   ©r   )Zbroadcast_axisc                    s   i | ]
}|ˆ “qS r   r   )Ú.0Úc©Úsr   r   Ú
<dictcomp>s   s      z7TestDataFrameAlign.test_align_float.<locals>.<dictcomp>©r   Úcolumnsé   r   é   ©ÚaÚbr6   r7   )r   Z_mgrr   ÚilocÚtmÚassert_index_equalr2   r   r!   Ú
differenceÚreindexÚvaluesÚallr   r   ÚpytestÚraisesÚ
ValueErrorr   Úranger   Ú
isinstancer   Úassert_frame_equalÚwhere)r   Úfloat_frameZusing_copy_on_writeÚafÚbfÚotherZjoin_idxZdiff_aZdiff_a_valsÚmsgÚidxÚleftr    ÚexpectedÚdfÚresultr   r.   r   Útest_align_float+   sŒ        ÿ
    ÿ
(  ÿz#TestDataFrameAlign.test_align_floatc                 C   s@   t tdƒdddgd�}|j|dddd	�\}}t |j|j¡ d S )
Nr   ÚAÚBÚCr1   r#   r"   r$   r%   )r   rB   r   r9   r:   r2   )r   Z	int_framerI   rG   rH   r   r   r   Útest_align_intƒ   s    z!TestDataFrameAlign.test_align_intc                 C   s*   |j |dddd�\}}t |j|j¡ d S )Nr#   r"   r$   r%   )r   r9   r:   r2   )r   Zfloat_string_framerG   rH   r   r   r   Útest_align_mixed_typeŠ   s       ÿ
z(TestDataFrameAlign.test_align_mixed_typec                 C   sR   t tdƒdddgd�}|j|jd d …df ddd dd	�\}}t |jtg ƒ¡ d S ©
Nr   rQ   rR   rS   r1   r   r#   r"   r'   ©r   rB   r   r8   r9   r:   r   r   )r   Zmixed_float_framerI   rG   rH   r   r   r   Útest_align_mixed_float�   s        ÿ
z)TestDataFrameAlign.test_align_mixed_floatc                 C   sR   t tdƒdddgd�}|j|jd d …df ddd dd	�\}}t |jtg ƒ¡ d S rV   rW   )r   Zmixed_int_framerI   rG   rH   r   r   r   Útest_align_mixed_int™   s        ÿ
z'TestDataFrameAlign.test_align_mixed_intzl_ordered,r_ordered,expectedTFc                 C   s¶   t tjddd�ttdƒƒ tjtdƒ|d�¡dœƒ d¡}t tjd	dd�ttd
ƒƒ tjtdƒ|d�¡dœƒ d¡}| 	|¡\}}t
|j|ƒs’t‚t
|j|ƒs¢t‚t |j|j¡ d S )Nr4   Úint64©ZdtypeZaabbcaZcab)Zordered)rQ   rR   rR   r   Zbabca)r   r   Úaranger   ÚlistZastypeÚpdZCategoricalDtypeZ	set_indexr   rC   r   r   r9   r:   )r   Z	l_orderedZ	r_orderedrM   Zdf_1Zdf_2Z	aligned_1Z	aligned_2r   r   r   Útest_align_categorical¡   s,    ÿþÿùÿþÿù	z)TestDataFrameAlign.test_align_categoricalc              	   C   s„  t jjtdƒtdƒtdƒgdd�}ttdƒdd�}ttjddd	�|d
�}ttjddd	�|d
�}|j|dd�\}}|j|dd�\}}|}	t	 
|	|¡ t	 
|	|¡ tddddtjtjgd |d
�}
t	 
|
|¡ t	 
|
|¡ |j|dd�\}}|j|dd�\}}t jjtdƒtdƒtdƒgdd�}tddddddddg|d
�}	t	 
|	|¡ t	 
|	|¡ tddddgd |d
�}
t	 
|
|¡ t	 
|
|¡ d S )Nr*   r   )r6   r7   r-   )Únamesr7   ©Únameé   rZ   r[   r+   rL   )r!   r    r   r"   r4   é   é   é	   )r^   Ú
MultiIndexÚfrom_productrB   r   r   r   r\   r   r9   rD   Únan)r   ZmidxrK   r   r   Zres1lZres1rZres2lZres2rZexplÚexprZexp_idxr   r   r   Útest_align_multiindexÂ   s6     ÿ  ÿz(TestDataFrameAlign.test_align_multiindexc                 C   sà   t dddgdddgdœtdƒd�}tdddgtd	ƒd
d�}|j|dd�\}}t dtjdtjdgdtjdtjdgdœtdƒd�}tddtjdtjgtdƒd
d�}t ||¡ t ||¡ | |¡\}}t ||¡ t ||¡ d S )Nr"   r   r   r5   ZACEr+   r*   r3   ZABDÚx©r   rb   r   r   ZABCDE)	r   r]   r   r   r   ri   r9   rD   Úassert_series_equal)r   rN   r/   Zres1Zres2Zexp1Zexp2r   r   r   Útest_align_series_combinationså   s    "$þ z1TestDataFrameAlign.test_align_series_combinationsc                 C   sœ   t dddgdd�}t ddgdd�}tddg|dd�}td	t d
¡itj ||g¡d�}tddgd |jdd�}|j	|dd�\}}t
 ||¡ t
 ||¡ d S )Nr"   r*   r   Úfoora   ÚbarÚ
foo_seriesrm   Úcolr4   r+   r   r   ©r   r   r   r   r\   r^   rg   rh   r   r   r9   rD   rn   ©r   Ú	foo_indexÚ	bar_indexÚseriesrN   Z
expected_rZresult_lZresult_rr   r   r   Ú7test_multiindex_align_to_series_with_common_index_levelù   s    þzJTestDataFrameAlign.test_multiindex_align_to_series_with_common_index_levelc                 C   s°   t dddgdd�}t ddgdd�}tddddgt ddddgdd�dd	�}td
t d¡itj ||g¡d�}tddgd |jdd	�}|j	|dd�\}}t
 ||¡ t
 ||¡ d S )Nr"   r*   r   rp   ra   rq   r3   rr   rm   rs   r4   r+   r   r   rt   ru   r   r   r   ÚGtest_multiindex_align_to_series_with_common_index_level_missing_in_left
  s    
  ÿþzZTestDataFrameAlign.test_multiindex_align_to_series_with_common_index_level_missing_in_leftc                 C   s´   t dddgdd�}t ddddgdd�}tddgt ddgdd�dd	�}td
t d¡itj ||g¡d�}tddtjtjgd |j	dd	�}|j
|dd�\}}t ||¡ t ||¡ d S )Nr"   r*   r   rp   ra   r3   rq   rr   rm   rs   rc   r+   r   r   ©r   r   r   r   r\   r^   rg   rh   ri   r   r   r9   rD   rn   ru   r   r   r   ÚHtest_multiindex_align_to_series_with_common_index_level_missing_in_right  s    þ  ÿz[TestDataFrameAlign.test_multiindex_align_to_series_with_common_index_level_missing_in_rightc                 C   s²   t dddgdd�}t dddgdd�}tdddgt dddgdd�dd	�}td
t d¡itj ||g¡d�}tdtjdgd |j	dd	�}|j
|dd�\}}t ||¡ t ||¡ d S )Nr"   r*   r   rp   ra   r3   rq   rr   rm   rs   rf   r+   r   r   r{   ru   r   r   r   ÚGtest_multiindex_align_to_series_with_common_index_level_missing_in_both0  s      ÿþzZTestDataFrameAlign.test_multiindex_align_to_series_with_common_index_level_missing_in_bothc                 C   s°   t dddgdd�}t ddgdd�}tddg|dd�}tt d	¡ d
d¡tj ||g¡d�}dddg|_	tddgd |j
dd�}|j|dd�\}}t ||¡ t |j	|j	¡ d S )Nr"   r*   r   rp   ra   rq   rr   rm   é   r4   r+   ZcfooZcbarr   r   )r   r   r   r   r\   Úreshaper^   rg   rh   r2   r   r   r9   rn   r:   )r   rv   rw   rx   rN   rM   Zresult_leftZresult_rightr   r   r   ÚGtest_multiindex_align_to_series_with_common_index_level_non_unique_colsC  s    þzZTestDataFrameAlign.test_multiindex_align_to_series_with_common_index_level_non_unique_colsc              	   C   sJ   t t d¡ d¡ƒ}tt d¡ƒ}tjtdd�� | |¡ W 5 Q R X d S )Né2   )é
   r   r   zaxis=0 or 1r(   )	r   r   r\   r   r   r?   r@   rA   r   )r   rN   rx   r   r   r   Ú)test_missing_axis_specification_exceptionU  s    z<TestDataFrameAlign.test_missing_axis_specification_exceptionNc                 C   sÜ   |j ||||||d�\}}	d\}
}|| }}|d ks<|dkrf|jj|j|d�}
|j|
d�}|j|
d�}|d ksv|dkr |jj|j|d�}|j|d�}|j|d�}|j|||d�}|j|||d�}t ||¡ t |	|¡ d S )	N)r   r!   r&   ÚlimitÚ	fill_axis)NNr   )Úhowr+   r"   )r2   )r   r&   r„   )r   r   r!   r<   r2   Zfillnar9   rD   )r   r6   r7   r   r…   r†   r&   r„   ZaaÚabZ
join_indexZjoin_columnsZeaZebr   r   r   Ú_check_align\  s,         ÿ

zTestDataFrameAlign._check_alignÚmethr$   ZbfillÚaxr   r"   Úfaxr†   r#   ÚouterrL   r    c                 C   s   |}|   |||||¡ d S )N)Ú_check_align_fill)r   r†   r‰   rŠ   r‹   rF   rN   r   r   r   Útest_align_fill_methodt  s    z)TestDataFrameAlign.test_align_fill_methodc           	   	   C   sþ   |j dd…d d…f }|j dd …dd …f }|j d d…d d…f }| j||||||d� | j||||||dd� | j||||||d� | j||||||dd� | j||||||d� | j||||||dd� | j||||||d� | j||||||dd� d S )	Nr   r3   r‚   r*   r4   )r   r…   r†   r&   r"   )r   r…   r†   r&   r„   )r8   rˆ   )	r   ÚframeÚkindr‰   rŠ   r‹   rL   r    Úemptyr   r   r   r�   |  sV          ÿ      ÿ      ÿ      ÿz$TestDataFrameAlign._check_align_fillc                 C   sR   t dddgiƒ}tdgdd�}| ¡ }|j|dd�\}}d|jd< t ||¡ d S )Nr   r"   r*   ra   r   éd   )r   r   r   r   r8   r9   rn   )r   rN   ÚserrM   rO   rI   r   r   r   Útest_align_series_check_copy˜  s    
z/TestDataFrameAlign.test_align_series_check_copyc                 C   sb   t dddgiƒ}tddgƒ}|j|dd�\}}t ||¡ t ||¡ ||k	sRt‚||k	s^t‚d S )Nr6   r"   r*   r   r3   r   r   ©r   r   r   r9   rD   rn   r   ©r   rN   r“   rO   Zresult2r   r   r   Ú%test_align_identical_different_object¡  s    z8TestDataFrameAlign.test_align_identical_different_objectc                 C   sf   t dddgiƒ}tdgdgd�}|j|dd�\}}t ||¡ t ||¡ ||k	sVt‚||k	sbt‚d S )Nr6   r"   r*   r+   r   r•   r–   r   r   r   Ú-test_align_identical_different_object_columns«  s    z@TestDataFrameAlign.test_align_identical_different_object_columns)N)Ú__name__Ú
__module__Ú__qualname__r   rP   rT   rU   rX   rY   r?   ÚmarkZparametrizer^   ZCategoricalIndexr   r_   rk   ro   ry   rz   r|   r}   r€   rƒ   rˆ   rŽ   r�   r”   r—   r˜   r   r   r   r   r      sB   X	

üþ	
#
	
r   )Údatetimer   Únumpyr   r?   Zpandasr^   r   r   r   r   Zpandas._testingZ_testingr9   r   r   r   r   r   Ú<module>   s   