U
    NZf0                  
   @   s  d dl Z d dlZd dlmZ d dlmZ e jddgddd Ze jdd	gdd
d Z	dd Z
e jdddgdd Ze jdeddddgiedddddgifedddgdddgdeddddgifgdd Ze jdejddgddgdd gd!ejd"d#gddgdd gd!d$fejddgd%d&gddgd'd d(gd!ejd"d#gd%d&gddgd'd d(gd!d)fgd*d+ Zd,d- Ze jdddgd.d/ Ze jdddgd0d1 Zd2d3 Ze jded4d5d6gd7d8d9gd:ed4d5d6gd7d8d;gd:d<fed4d5d6gd7d8d9gd:ed d d gd=d=d=gd:d>fgd?d@ ZdAdB ZdCdD Ze jdEdFdGgdHdI Ze jdJdKdLdMgdNdO ZdPdQ ZdRdS ZdTdU Ze jdVdWdXgdYdZ Zd[d\ Zd]d^ Zd_d` Z dadb Z!dcdd Z"dedf Z#dS )g    N)	DataFrameTF)paramsc                 C   s   | j S Nparamrequest r	   M/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/util/test_assert_frame_equal.pyby_blocks_fixture   s    r   r   Seriesc                 C   s   | j S r   r   r   r	   r	   r
   obj_fixture   s    r   c                 K   s$   t j| |f| t j|| f| dS )a4  
    Check that two DataFrame equal.

    This check is performed commutatively.

    Parameters
    ----------
    a : DataFrame
        The first DataFrame to compare.
    b : DataFrame
        The second DataFrame to compare.
    kwargs : dict
        The arguments passed to `tm.assert_frame_equal`.
    N)tmassert_frame_equal)abkwargsr	   r	   r
   _assert_frame_equal_both   s    r   
check_likec              	   C   s   t dddgdddgddd	d
gd}t dddgdddgdd
d	dgd}| s| d}tjt|d tj||| |d W 5 Q R X nt||| |d d S )N                  ABr   r   cindexz.index are differentmatchr   obj)r   pytestraisesAssertionErrorr   r   r   )r   r   df1df2msgr	   r	   r
   #test_frame_equal_row_order_mismatch%   s    $$
r+   zdf1,df2r   r   r   r   r   r   r   r   c              	   C   s8   | d}t jt|d tj| ||d W 5 Q R X d S )Nz are differentr!   r$   r%   r&   r'   r   r   )r(   r)   r   r*   r	   r	   r
   test_frame_equal_shape_mismatch2   s    
r.   zdf1,df2,msgl1l2)r   r   r   r   g      ?g       @zDataFrame\.index are differentg @g      ?)r   r   r   r   z$MultiIndex level \[0\] are differentc              	   C   sL   d|i}|r8t jt|d tj| |f| W 5 Q R X ntj| |f| d S )Ncheck_index_typer!   r-   )r(   r)   r*   r1   r   r	   r	   r
   %test_frame_equal_index_dtype_mismatch@   s
    r2   c              	   C   s~   ddg}t |d}t |d}d| i}|d d|d< | rjd}tjt|d tj||f| W 5 Q R X ntj||f| d S )NZcol1Zcol2)columnscheck_dtypeint64z)Attributes of DataFrame\..* are differentr!   )r   astyper%   r&   r'   r   r   )r4   r3   r(   r)   r   r*   r	   r	   r
   test_empty_dtypes_   s    

r7   c              	   C   s   | d| d}t dddgdddgd	d
ddgd}t dddgdddgd	d
ddgd}tjt|d tj||| |d W 5 Q R X d S )Nz\.index are different

z\.index values are different \(33\.33333 %\)
\[left\]:  Index\(\['a', 'b', 'c'\], dtype='object'\)
\[right\]: Index\(\['a', 'b', 'd'\], dtype='object'\)
At positional index 2, first diff: c != dr   r   r   r   r   r   r   r   r   r   r   dr!   r#   r   r%   r&   r'   r   r   r   r   r*   r(   r)   r	   r	   r
   test_frame_equal_index_mismatcho   s
    $$r;   c              	   C   s   | d| d}t dddgdddgd	d
ddgd}t dddgdddgdd
ddgd}tjt|d tj||| |d W 5 Q R X d S )Nz\.columns are different

z\.columns values are different \(50\.0 %\)
\[left\]:  Index\(\['A', 'B'\], dtype='object'\)
\[right\]: Index\(\['A', 'b'\], dtype='object'\)r   r   r   r   r   r   r   r   r   r   r   )r   r   r!   r#   r9   r:   r	   r	   r
   !test_frame_equal_columns_mismatch   s
    $$r<   c              	   C   sx   |}| d| d}t dddgdddgd	}t dddgddd
gd	}tjt|d tj||| |d W 5 Q R X d S )Nz2\.iloc\[:, 1\] \(column name="B"\) are different

z\.iloc\[:, 1\] \(column name="B"\) values are different \(33\.33333 %\)
\[index\]: \[0, 1, 2\]
\[left\]:  \[4, 5, 6\]
\[right\]: \[4, 5, 7\]r   r   r   r   r   r   r      r!   Z	by_blocksr$   r9   )r   r   r$   r*   r(   r)   r	   r	   r
   test_frame_equal_block_mismatch   s    r?      á   à   ä   é   è   ë)r   Eu   e̊u   {obj}\.iloc\[:, 1\] \(column name="E"\) are different

{obj}\.iloc\[:, 1\] \(column name="E"\) values are different \(33\.33333 %\)
\[index\]: \[0, 1, 2\]
\[left\]:  \[é, è, ë\]
\[right\]: \[é, è, e̊\]eu   {obj}\.iloc\[:, 0\] \(column name="A"\) are different

{obj}\.iloc\[:, 0\] \(column name="A"\) values are different \(100\.0 %\)
\[index\]: \[0, 1, 2\]
\[left\]:  \[á, à, ä\]
\[right\]: \[a, a, a\]c              	   C   s<   |j |d}tjt|d tj| |||d W 5 Q R X d S )Nr,   r!   r>   )formatr%   r&   r'   r   r   )r(   r)   r*   r   r   r	   r	   r
   test_frame_equal_unicode   s    rI   c               	   C   sb   t ddddgidd} | t}d}tj| |dd	 tjt|d
 tj| |dd	 W 5 Q R X d S )Nr   r   r   r   Int64dtypezAttributes of DataFrame\.iloc\[:, 0\] \(column name="a"\) are different

Attribute "dtype" are different
\[left\]:  Int64
\[right\]: int[32|64]Fr4   r!   T)r   r6   intr   r   r%   r&   r'   leftrightr*   r	   r	   r
   0test_assert_frame_equal_extension_dtype_mismatch   s    
rR   c               	   C   sf   t dtddgidd} | t}d}tj| |dd tjt	|d	 tj| |d
d W 5 Q R X d S )Nr   r   r   intervalrK   zAttributes of DataFrame\.iloc\[:, 0\] \(column name="a"\) are different

Attribute "dtype" are different
\[left\]:  interval\[int64, right\]
\[right\]: objectFrM   r!   T)
r   pdZIntervalr6   objectr   r   r%   r&   r'   rO   r	   r	   r
   /test_assert_frame_equal_interval_dtype_mismatch   s    
rV   right_dtypeZInt32r5   c                 C   s@   t ddddgidd}t ddddgi| d}tj||dd d S )	Nr   r   r   r   rJ   rK   FrM   r   r   r   )rW   rP   rQ   r	   r	   r
   7test_assert_frame_equal_ignore_extension_dtype_mismatch   s    rY   rL   ztimedelta64[ns]zdatetime64[ns, UTC]z	Period[D]c                 C   s0   t dg i| d}t dg i}tj||dd d S )Nr   rK   FrM   rX   )rL   r(   r)   r	   r	   r
   4test_assert_frame_equal_datetime_like_dtype_mismatch   s    	rZ   c               	   C   s   t  } t  jdd}t| |  t|| tj| |dd tj|| dd tjtdd t| | W 5 Q R X tjtdd t| | W 5 Q R X d S )NF)allows_duplicate_labelsZcheck_flagsz<Flagsr!   )r   Z	set_flagsr   r   r%   r&   r'   rP   rQ   r	   r	   r
   test_allows_duplicate_labels   s    r^   c                  C   s6   t dddggdddgdddgd} tj| | d	d
 d S )Nr   r   r   Zfoobar*   test)r3   r    Tr   rX   )Zdfr	   r	   r
   +test_assert_frame_equal_columns_mixed_dtype  s    "rc   c                 C   s$   | ddg|d}t j||dd d S )Nr   r   rK   Tcheck_exact)r   assert_equal)frame_or_seriesany_numeric_ea_dtyper$   r	   r	   r
    test_frame_equal_extension_dtype  s    ri   indexer)r   r   )r   r   c              	   C   sl   |df}| ddg||d  d}| ddg||d  d}d}t jt|d tj||dd	d
 W 5 Q R X d S )Nr5   r   r   r   rK   zI(Series|DataFrame.iloc\[:, 0\] \(column name="0"\) classes) are differentr!   TF)re   r4   )r%   r&   r'   r   rf   )rg   rh   rj   ZdtypesZobj1obj2r*   r	   r	   r
   test_frame_equal_mixed_dtypes  s    rl   c               	   C   sX   t tjg ddd} t tjddddd}tjtdd tj| |d	d
 W 5 Q R X d S )NrU   rK   r   r   r   )startstopstepzDataFrame.index are differentr!   Trb   )	r   rT   ZIndexZ
RangeIndexr%   r&   r'   r   r   )r(   r)   r	   r	   r
   4test_assert_frame_equal_check_like_different_indexes"  s    rp   c               	   C   sv   t ddgddgg} d| j_t ddgddgg}d|j_tj| |dd tjtdd	 tj| |dd W 5 Q R X d S )
Nr   r   r   r   FTr\   r[   r!   )r   flagsr[   r   r   r%   r&   r'   r]   r	   r	   r
   0test_assert_frame_equal_checking_allow_dups_flag*  s    rr   c               
   C   s   t dgdgdggtjtdddgtdddggd} t dgdgdggtjtdddgtdddggd}tj| |dd	 d S )
Nr   r   r   r   r   r   r   Trb   )r   rT   Z
MultiIndexZfrom_arraysZCategoricalr   r   r]   r	   r	   r
   3test_assert_frame_equal_check_like_categorical_midx7  s"    		rs   c               	   C   sd   t dtjtjdgddi} t dtjddgddi}d}tjt|d t| | W 5 Q R X d S )Nr   r   rJ   rK   zGDataFrame.iloc\[:, 0\] \(column name="a"\) NA mask values are differentr!   	r   rT   r   ZNAr%   r&   r'   r   r   r(   r)   r*   r	   r	   r
   >test_assert_frame_equal_ea_column_definition_in_exception_maskN  s
    rv   c               	   C   s   t dtjtjdgddi} t dtjtjdgddi}d}tjt|d t| | W 5 Q R X tjt|d tj| |dd	 W 5 Q R X d S )
Nr   r   rJ   rK   r   ?DataFrame.iloc\[:, 0\] \(column name="a"\) values are differentr!   Trd   rt   ru   r	   r	   r
   9test_assert_frame_equal_ea_column_definition_in_exceptionX  s    rx   c               	   C   sf   t dtdtdgi} t dtdtdgi}d}tjt|d t| | W 5 Q R X d S )Nr   z
2019-12-31z
2020-12-31rw   r!   )r   rT   Z	Timestampr%   r&   r'   r   r   ru   r	   r	   r
   !test_assert_frame_equal_ts_columne  s
    ry   )$r%   ZpandasrT   r   Zpandas._testingZ_testingr   Zfixturer   r   r   markZparametrizer+   r.   Zfrom_recordsr2   r7   r;   r<   r?   rI   rR   rV   rY   rZ   r^   rc   ri   rl   rp   rr   rs   rv   rx   ry   r	   r	   r	   r
   <module>   s   


$*
  








	
