U
    *if{(                     @   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   S/home/mars/bis/venv/lib/python3.8/site-packages/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_2d1   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_2d9   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_reshapeA   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_2dO   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   Zobjsobjr   r   r   test_iter_2di   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_2du   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   )rG   )r   r	   Zisnar=   r   anyZfillnar   )r   Zdata_missingrG   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   rG   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   rN   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   Z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)rK   rL   rO   rP   )rO   rP   Ziubb)	r	   rQ   rR   r$   r   r5   rY   Zastyper   )r   r   rG   r   kwargsr   rS   rT   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   rV   )r   r   )r	   rQ   rR   r$   r   r
   r   )	r   r   rG   r   r   rS   rT   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   r8   r>   rF   r*   markZparametrizerJ   rU   r_   r`   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'\)r@   QC)
r   r	   Z_ndarrayflagsr   rB   r   r*   r+   r,   )r   r   r   r&   rE   Zarr_ncr   r   r   test_copy_order  s8    

z$NDArrayBacked2DTests.test_copy_orderN)r%   ra   rb   rj   r   r   r   r   rd      s   rd   )__doc__numpyr0   r*   Zpandas._libs.missingr   Zpandasr   Zpandas.core.arrays.integerr   Z pandas.tests.extension.base.baser   r   rd   r   r   r   r   <module>   s    s