U
    *ifO+                     @   sV   d dl 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 )    N)	DataFrameIndexSeries
date_rangec                
   @   s   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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#d$gd%d& Zd'd( 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st	|
d}||\}}|jjtjkst	|jjtjkst	|j|d	 d	d
\}}|jjtjkst	|jjtjkst	|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_convertpytzUTC)selfZidx1Zidx2df1df2Znew1Znew2Zdf1_central r   X/home/mars/bis/venv/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\}}|j|jks@t|jd dd df }|j |ddd\}}t|j|j |j|j}|j	|}|
|j}|dk st|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 sxt|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st|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)copyr   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>o   s      z7TestDataFrameAlign.test_align_float.<locals>.<dictcomp>r   columns   r      abr5   r6   )r   Z_mgrr   iloctmassert_index_equalr1   r   r!   
differencereindexvaluesallr   r   pytestZraises
ValueErrorr   ranger   
isinstancer   assert_frame_equalwhere)r   float_frame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Cr0   r#   r"   r$   r%   )r   r@   r   r8   r9   r1   )r   Z	int_framerG   rE   rF   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   r8   r9   r1   )r   Zfloat_string_framerE   rF   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   rO   rP   rQ   r0   r   r#   r"   r'   r   r@   r   r7   r8   r9   r   r   )r   Zmixed_float_framerG   rE   rF   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 rT   rU   )r   Zmixed_int_framerG   rE   rF   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|stt
|j|stt|j|j d S )Nr3   int64ZdtypeZaabbcaZcab)Zordered)rO   rP   rP   r   Zbabca)r   r   aranger   listZastypepdZCategoricalDtypeZ	set_indexr   rA   r   r   r8   r9   )r   Z	l_orderedZ	r_orderedrK   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   )r5   r6   r,   )namesr6   )name   rX   rY   r*   rJ   )r!   r    r   r"   r3         	   )r\   Z
MultiIndexZfrom_productr@   r   r   r   rZ   r   r8   rB   nan)r   ZmidxrI   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   r4   ZACEr*   r)   r2   ZABDx)r   r_   r   r   ZABCDE)	r   r[   r   r   r   rd   r8   rB   Zassert_series_equal)r   rL   r.   Zres1Zres2Zexp1Zexp2r   r   r   test_align_series_combinations   s    "$ z1TestDataFrameAlign.test_align_series_combinationsNc                 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"   )r1   )r   r&   ri   )r   r   r!   r;   r1   Zfillnar8   rB   )r   r5   r6   r   rj   rk   r&   ri   ZaaabZ
join_indexZjoin_columnsZeaZebr   r   r   _check_align   s,         

zTestDataFrameAlign._check_alignmethr$   Zbfillaxr   r"   faxrk   r#   outerrJ   r    c                 C   s   |}|  ||||| d S )N)_check_align_fill)r   rk   rn   ro   rp   rD   rL   r   r   r   test_align_fill_method  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   r2   
   r)   r3   )r   rj   rk   r&   r"   )r   rj   rk   r&   ri   )r7   rm   )	r   framekindrn   ro   rp   rJ   r    emptyr   r   r   rr     sV                            z$TestDataFrameAlign._check_align_fill)N)__name__
__module____qualname__r   rN   rR   rS   rV   rW   r>   markZparametrizer\   ZCategoricalIndexr   r]   rf   rh   rm   rs   rr   r   r   r   r   r      s0   U	

	
#
r   )numpyr   r>   r   Zpandasr\   r   r   r   r   Zpandas._testingZ_testingr8   r   r   r   r   r   <module>   s   