U
    >vf*                     @   st   d Z ddlZddlZddlmZ ddlmZmZ ddl	Z
ddlmZ ddlmZ G dd deZG d	d
 d
eZdS )z
Tests for 2D compatibility.
    N)is_matching_na)is_bool_dtypeis_integer_dtype)INT_STR_TO_DTYPE)BaseExtensionTestsc                	   @   s   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d Z
dd Zdd Zdd Zejdddgdd Zejdddddd d!gd"d# Zejdddddd d!gd$d% Zejdddddd d!gd&d' Zd(S ))Dim2CompatTestsc                 C   sJ   | ddd}|j}|d |d ks,t|jj|d d d ksFtd S )N   r   )repeatreshapeshapeAssertionErrorT)selfdataarr2dr    r   D/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/extension/base/dim2.pytest_transpose   s    zDim2CompatTests.test_transposec                 C   sT   | ddd}t|}t|d d df |d d df d}| || d S )Nr   r	   r      )r   r   )r
   r   pdZ	DataFrameZassert_frame_equal)r   r   r   Zdfexpectedr   r   r   test_frame_from_2d_array   s    
(z(Dim2CompatTests.test_frame_from_2d_arrayc                 C   s4   | ddd}|dd}|j}| || d S )Nr   r	   r   r   )r
   r   Zswapaxesr   assert_extension_array_equalr   r   r   resultr   r   r   r   test_swapaxes%   s    zDim2CompatTests.test_swapaxesc                 C   st   | ddd}|jddd}|d ddd}| || |jddd}| ddd}| || d S )N   r	   r   r   axisr   )r
   r   deleter   r   r   r   r   test_delete_2d,   s    zDim2CompatTests.test_delete_2dc                 C   sH   | dd}|jdddgdd}|dddg dd}| || d S )Nr	   r   r   r   )r   Ztaker   r   r   r   r   test_take_2d9   s    zDim2CompatTests.test_take_2dc                 C   s`   t |dd}|dt|j dks.tt |dd}|dt|j dks\td S )Nr   r	   <)reprr   counttype__name__r   )r   r   resr   r   r   test_repr_2dA   s    zDim2CompatTests.test_repr_2dc              	   C   s   | dd}|j|jdfks tt|t|ks4t| d}|j|jdfksRtt|t|ksfttt | |jdf W 5 Q R X tt | |jd W 5 Q R X d S )Nr	   r   )r	   r   r   )r   r   sizer   lenpytestraises
ValueError)r   r   r   r   r   r   test_reshapeI   s    
zDim2CompatTests.test_reshapec              	   C   s   | dd}|d }| || tt |d  W 5 Q R X tt |d  W 5 Q R X |d d  }| || |d d d d f }| || |d d df }|dg }| || |d d tjf }| ||j d S )Nr   r	   r   )r   r   r,   r-   
IndexErrornpZnewaxisr   r   r   r   r   test_getitem_2dW   s     
zDim2CompatTests.test_getitem_2dc                 C   s   | dd}tt|}t||jd ks.t|D ]J}t|t|sHt|j|jksXt|j	dksftt||jd ks2tq2d S )Nr   r	   r   )
r   listiterr+   r   r   
isinstancer&   dtypendim)r   r   r   objsobjr   r   r   test_iter_2dq   s    zDim2CompatTests.test_iter_2dc                 C   sR   | dd}| }| g}t|ts,ttdd |D sBt||ksNtd S )Nr   r	   c                 s   s   | ]}t |tV  qd S )N)r6   r4   ).0xr   r   r   	<genexpr>   s     z1Dim2CompatTests.test_tolist_2d.<locals>.<genexpr>)r   tolistr6   r4   r   allr   r   r   r   test_tolist_2d}   s    
zDim2CompatTests.test_tolist_2dc              	   C   s   t |||gdd}| }|j||gdd}||gd dd}| || |j||gdd}|jt|dfkst| |d d d df | | |d d dd f | d}tj	t
|d |j||gdd W 5 Q R X d S )	Nr	   r   r   r      r   z0axis 2 is out of bounds for array of dimension 2match)r&   Z_concat_same_typer   copyr   r   r+   r   r,   r-   r.   )r   r   leftrightr   r   msgr   r   r   test_concat_2d   s    zDim2CompatTests.test_concat_2dmethodZbackfillpadc                 C   sp   | ddd}|d   s&t|d   r:t|j|d}|j|d ddd}| || d S )Nr   r   r   )rJ   )r
   r   Zisnar@   r   anyZfillnar   )r   Zdata_missingrJ   Zarrr   r   r   r   r   test_fillna_2d_method   s    z%Dim2CompatTests.test_fillna_2d_methodmeanmedianvarstdsumprodc           
      C   s   | dd}d }d }zt|| }W nb tk
r } zD|}zt||d d}W n& tk
rt }	 z|	}W 5 d }	~	X Y nX W 5 d }~X Y nX t||d d}|d k	s|d k	rt|t|kstd S t||s||kstd S )Nr   r	   r   )r   getattr	Exceptionr&   r   r   )
r   r   rJ   r   Zerr_expectedZ
err_resultr   errr   err2r   r   r   test_reductions_2d_axis_none   s     (z,Dim2CompatTests.test_reductions_2d_axis_nonec                 C   s  | dd}i }|dkr d|d< zt||f ddi|}W n~ tk
r } z`zt||  W nB tk
r } z$t|t|kstW Y 
W Y d S d }~X Y n
X tdW 5 d }~X Y nX dd	 }|d
krT|}	|dkrF|jjdkrF||j}
||
}	|jjdkr|dkrnt|	t|ks6tt|	|
|	jksFt| ||	 nP|dkrt	|srt
|r||d}|dkr| || n| |||  d S )Nr   r	   )rQ   rP   r   Zddofr   'Both reductions should raise or neitherc                 S   s>   | j dkr| S | jdkr(tttj S tttjj S d S )N   ib)itemsizekindr   r2   r7   intnameZuint)r7   r   r   r   get_reduction_result_dtype   s
    

zLDim2CompatTests.test_reductions_2d_axis0.<locals>.get_reduction_result_dtype)rO   rR   rS   )rR   rS   Ziubb)rN   rQ   rP   ZFloat64rN   )r   rT   rU   r&   r   r7   r]   Zastyper   r   r   )r   r   rJ   r   kwargsr   rV   rW   r`   r   r7   r   r   r   test_reductions_2d_axis0   s<    





z(Dim2CompatTests.test_reductions_2d_axis0c           	      C   s   | dd}zt||dd}W n~ tk
r } z`zt||  W nB tk
r } z$t|t|kshtW Y 
W Y d S d }~X Y n
X tdW 5 d }~X Y nX |jdkstt|| }|d }t||s||kstd S )Nr   r	   r   rY   )r   r   )r   rT   rU   r&   r   r   r   )	r   r   rJ   r   r   rV   rW   Zexpected_scalarr(   r   r   r   test_reductions_2d_axis1   s    z(Dim2CompatTests.test_reductions_2d_axis1N)r'   
__module____qualname__r   r   r   r!   r"   r)   r/   r3   r;   rA   rI   r,   markZparametrizerM   rX   rc   rd   r   r   r   r   r      s&   



5r   c                   @   s   e Zd Zdd ZdS )NDArrayBacked2DTestsc              	   C   s  | ddd}|jjd s"t| }|jjd s:t|d d dd d df  }|jjd sft|d}|jjd rt|jjd st|d}|jjd st|jd}|jjd rt|jjd std}tjt	|d |d	 W 5 Q R X |d d d }|jjd rt|jjd r0t| jjd sFt| jjd r\t|d
jjd stt|d
jjd rt|djjd rt|djjd st|djjd st|djjd rtd S )Nr   r	   ZC_CONTIGUOUSFZF_CONTIGUOUSKz6order must be one of 'C', 'F', 'A', or 'K' \(got 'Q'\)rC   QC)
r
   r   Z_ndarrayflagsr   rE   r   r,   r-   r.   )r   r   r   r(   rH   Zarr_ncr   r   r   test_copy_order  s8    

z$NDArrayBacked2DTests.test_copy_orderN)r'   re   rf   rn   r   r   r   r   rh     s   rh   )__doc__Znumpyr2   r,   Zpandas._libs.missingr   Zpandas.core.dtypes.commonr   r   Zpandasr   Zpandas.core.arrays.integerr   Z pandas.tests.extension.base.baser   r   rh   r   r   r   r   <module>   s    z