U
    sVc(                     @   sd   d Z ddlZddlZddl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)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-xj8nt62q/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_2d4   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_2d<   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_reshapeD   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_2dR   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_2dl   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)r4   r2   ).0xr   r   r   	<genexpr>   s     z1Dim2CompatTests.test_tolist_2d.<locals>.<genexpr>)r	   tolistr4   r2   r   allr   r   r   r   test_tolist_2dx   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   )rH   )r   r	   Zisnar>   r   anyZfillnar   )r   Zdata_missingrH   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   rH   r   Zerr_expectedZ
err_resultr   errr   err2r   r   r   test_reductions_2d_axis_none   s     (z,Dim2CompatTests.test_reductions_2d_axis_nonec                 C   sr  | 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| ||	 n|dkrn| |||  d S )Nr   r   rO   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   r0   r5   intnameZuint)r5   r   r   r   get_reduction_result_dtype   s
    

zLDim2CompatTests.test_reductions_2d_axis0.<locals>.get_reduction_result_dtype)rL   rM   rP   rQ   )rP   rQ   Ziubb)	r	   rR   rS   r$   r   r5   r[   Zastyper   )r   r   rH   r   kwargsr   rT   rU   r^   r   r5   r   r   r   test_reductions_2d_axis0   s4    



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   rW   )r   r   )r	   rR   rS   r$   r   r
   r   )	r   r   rH   r   r   rT   rU   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-   r1   r9   r?   rG   r*   markZparametrizerK   rV   ra   rb   r   r   r   r   r      s&   



1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'\)rA   QC)
r   r	   Z_ndarrayflagsr   rC   r   r*   r+   r,   )r   r   r   r&   rF   Zarr_ncr   r   r   test_copy_order  s8    

z$NDArrayBacked2DTests.test_copy_orderN)r%   rc   rd   rl   r   r   r   r   rf     s   rf   )__doc__Znumpyr0   r*   Zpandas._libs.missingr   Zpandasr   Zpandas.core.arrays.integerr   Z pandas.tests.extension.base.baser   r   rf   r   r   r   r   <module>   s    v