U
    f/e7A                     @   sh   d dl m Z mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ G dd dZG dd dZdS )	    )copydeepcopyN)	is_scalar)	DataFrameSeriesc                   @   s   e Zd Zedd Zdd Zd2ddZdd	 Zd
d Zdd Z	dd Z
dd Zdd Zd3ddZdd Zdd Zdd Zdd Zejddd d!d"gd#d$ Zd%d& Zd'd( Zejdeed)d* d+d* gejd,d-d.d/gd0d1 ZdS )4Genericc                 C   s   | j jS N)_typZ	_AXIS_LENself r   E/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/generic/test_generic.py_ndim   s    zGeneric._ndimc                 C   s   | j jS )z!return the axes for my object typ)r	   Z_AXIS_ORDERSr
   r   r   r   _axes   s    zGeneric._axesNc                 K   s   t |trt|g| j }|dk	rt|rh|dkrNd}tj}|| jj	d qtj
||d}|| qt|}| }||jd  }||jd  dkrtdt|||}ntjj| }| j|fd|i|S )z
        construct an object for the given shape
        if value is specified use that if its a scalar
        if value is an array, repeat it as needed
        Nemptydtyper   z"invalid value passed in _constructr   )
isinstanceinttupler   r   npfloat64popr	   Z_info_axis_namer   fillprodZravelshape	ExceptionrepeatZreshaperandomZrandn)r   r   valuer   kwargsarrZfshapeZ	new_shaper   r   r   
_construct   s$    

zGeneric._constructc                 C   s   |  || d S r   )Z_comparator)r   resultexpectedr   r   r   _compare=   s    zGeneric._comparec           	      C   s   t d}tjdd |D tdd |D g}|  D ]V}||i}| jd|}|D ]8}|jf ||i}| }t||t d | 	|| qPq4d S )NABCDc                 S   s   i | ]}||  qS r   lower.0xr   r   r   
<dictcomp>G   s      z'Generic.test_rename.<locals>.<dictcomp>c                 S   s   i | ]}||  qS r   r'   r)   r   r   r   r,   H   s         Zabcd)r-   )
liststrr(   r   r   r"   renamer   setattrr%   )	r   idxargsaxisr    objargr#   r$   r   r   r   test_rename@   s    zGeneric.test_renamec                    s   d  fddt jD }j f|}| }|| | }j fddi|}t|trx|jd d |_|| t	
ddddg}j fd|i|}| }|| d S )	Nr-   c                    s"   i | ]}j |tt qS r   )r	   _get_axis_namer.   range)r*   inr   r   r   r,   [   s    
 z1Generic.test_get_numeric_data.<locals>.<dictcomp>r   r   r   TF)r9   r   r"   Z_get_numeric_datar%   Z_get_bool_datar   r   columnsr   array)r   r    or#   r$   r!   r   r;   r   test_get_numeric_dataX   s     
zGeneric.test_get_numeric_datac              	   C   sZ  | j dd}d| jj d}tjt|d t|dk W 5 Q R X tjt|d t|dk W 5 Q R X tjt|d t| W 5 Q R X | j ddd}tjt|d t|dk W 5 Q R X tjt|d t|dk W 5 Q R X tjt|d t| W 5 Q R X | j dtjd}tjt|d t|dk W 5 Q R X tjt|d t|dk W 5 Q R X tjt|d t| W 5 Q R X | j dd}tjt|d t| W 5 Q R X | j ddd}| j ddd}tjt|d |rW 5 Q R X tjt|d |o| W 5 Q R X tjt|d |p*| W 5 Q R X tjt|d |  W 5 Q R X d S )	Nr-   r   zThe truth value of a z is ambiguousmatchr      r   r   )	r"   r	   __name__pytestraises
ValueErrorboolr   nan)r   r5   msgZobj1obj2r   r   r   test_nonzerou   sH    
zGeneric.test_nonzeroc                 C   sd   | j ddtjd}| }|j |_| || | j ddd}| }|j |_| || d S )Nr-   	   r   r   r   g      #@rE   )r"   r   int64r   Z_mgrZdowncastr%   )r   r?   r#   r   r   r   test_downcast   s    zGeneric.test_downcastc              	      s`    fdd}d j j d}tjt|d |dddg W 5 Q R X |d	 |d
 |d d S )Nc                    s    j dd| dS )N   rD   rP   )r"   r   r
   r   r   f   s    z3Generic.test_constructor_compound_dtypes.<locals>.fz+compound dtypes are not implemented in the z constructorrB   )Azdatetime64[h])Br/   )CZint32rQ   r   zM8[ns])r	   rF   rG   rH   NotImplementedError)r   rT   rL   r   r
   r    test_constructor_compound_dtypes   s    z(Generic.test_constructor_compound_dtypesc                 C   sF   |j D ]:}t||d }|d kr,|d ks@tq|t||d kstqd S r   )	_metadatagetattrAssertionError)r   r+   ymvr   r   r   check_metadata   s
    
zGeneric.check_metadatac                 C   s(  | j dd}d|_| j dd}d|_dD ]}t||d}| || q(dD ]}t|||}| || qLdD ]>}t|||}| || | |||@  | |||B  qp||}| || || }| | dD ]F}t|||}t|||}| | | ||@  | ||B  qd S )NrS   rA   foobar)__add____sub____truediv____mul__rD   )__eq____le____ge__)r"   namer[   r`   Zcombine_first)r   r?   Zo2opr#   Zv1Zv2r   r   r   test_metadata_propagation   s2    


z!Generic.test_metadata_propagationc                 C   s>   | j dd}|jt|jks"t|jdt|j ks:td S )N
   rA   )r"   sizer   r   r   r\   lenaxesr   r?   r   r   r   test_size_compat  s    zGeneric.test_size_compatc                 C   s@   | j dd}tt|ddks$ttt|ddks<td S )Nrm   rA         )r"   ro   r   Zarray_splitr\   rq   r   r   r   test_split_compat  s    zGeneric.test_split_compatc              	   C   s   |  d}d}d}tjt|d |j|d W 5 Q R X tjt|d |j|d W 5 Q R X tjt|d |j|d W 5 Q R X tjt|d |j|d W 5 Q R X d S )Nrs   z	Star Warszunexpected keywordrB   )Zepic)r"   rG   rH   	TypeErrormaxvarsumany)r   r5   Zstarwarserrmsgr   r   r   test_stat_unexpected_keyword  s    
z$Generic.test_stat_unexpected_keywordfuncry   Zcumsumrz   rx   c                 C   s6   |  d}t||}|j|ks"t|j|s2td S )Nrs   )r"   r[   rF   r\   __qualname__endswith)r   r}   r5   rT   r   r   r   test_api_compat   s    

zGeneric.test_api_compatc              	   C   s   |  d}tdg}d}tjt|d |j|d W 5 Q R X tjt|d |j|d W 5 Q R X tjt|d |j|d W 5 Q R X tjt|d |j	|d W 5 Q R X d S )Nrs   r   $the 'out' parameter is not supportedrB   out)
r"   r   r>   rG   rH   rI   rw   rx   ry   rz   )r   r5   r   r{   r   r   r   test_stat_non_defaults_args+  s    
z#Generic.test_stat_non_defaults_argsc                 C   s   dgdg| j d   }| j|ddd}| | | | |jddd| | |jdd	d| d
gdg| j d   }| j|ddd}| | | | |jddd| | |jddd| d S )Ni  rD   Zint8)r   r   r   g     p@)beforeafterg     @@i g    `FAg    >A)r   r"   r%   truncate)r   r   smallbigr   r   r   test_truncate_out_of_bounds9  s    z#Generic.test_truncate_out_of_boundsc                 C   s   | j ddS )NFdeepr   r+   r   r   r   <lambda>L      zGeneric.<lambda>c                 C   s   | j ddS )NTr   r   r   r   r   r   r   L  r   r   r   rD   rt   c                 C   s.   |  |}||}||k	st| || d S r   )r"   r\   r%   )r   r   r}   r5   Zobj_copyr   r   r   test_copy_and_deepcopyJ  s    
zGeneric.test_copy_and_deepcopy)NN)N)rF   
__module__r~   propertyr   r   r"   r%   r7   r@   rN   rR   rY   r`   rl   rr   ru   r|   rG   markparametrizer   r   r   r   r   r   r   r   r   r   r      s2   

2
3

r   c                   @   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gdd Zdd Zdd Zdd Zdd Zdd ZdS )TestNDFramec              	   C   s  t  t  t  fD ]}t | | qt  fD ]}t | | q6t  jdgd}t | |d  t	g dt
jd}t|g}t ||  t ||  t jddjd d d df }|jdkstt |jdd	|jd  t |jd
d	|jd  t |jdd	|jd d df  t |jdd	|jd d df  | |jd kshtd}tjt|d |jdd	 W 5 Q R X d}tjt|d |jdd	 W 5 Q R X t d}t |jdd	| d S )NrU   r=   Zfive)rj   r   rD   )Znper)rD   rD   r   r4   indexr=   )r   r   z)No axis named 2 for object type DataFramerB   rt   z)No axis named x for object type DataFramer+   rS   )tmmakeFloatSeriesmakeStringSeriesmakeObjectSeriesassert_series_equalsqueezemakeTimeDataFrameassert_frame_equalreindexr   r   r   r   Zilocr   r\   rG   rH   rI   )r   sdfZempty_seriesZempty_framerL   r   r   r   test_squeezeZ  s2    
""
zTestNDFrame.test_squeezec                 C   sF   t  }t t|| t  jdgd}t t||d  d S )NrU   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   test_numpy_squeeze}  s    zTestNDFrame.test_numpy_squeezec                 C   sT   t  t  t  fD ]}t | | qt  fD ]}t |  | q6d S r   )r   r   r   r   r   	transposer   r   r   r   r   r   test_transpose  s    zTestNDFrame.test_transposec              	   C   sz   t  }|tkr|d }|tkr2t t|| t tt|| d}tjt	|d tj|dd W 5 Q R X d S )NrU   z%the 'axes' parameter is not supportedrB   rD   )rp   )
r   r   r   r   r   r   Zassert_equalrG   rH   rI   )r   frame_or_seriesr5   rL   r   r   r   test_numpy_transpose  s    z TestNDFrame.test_numpy_transposec                 C   s   ddddddg}t  t  t  fD ]:}||}t|j||j||jd}t 	|| q&t 
 fD ]>}||}t|jj|dd	|j||jd
}t || qld S )NrD   rs      rS   r   )datar   r   r   r   )r   r   r=   )r   r   r   r   taker   valuesr   r   r   r   r   r=   r   )r   indicesr   r   r$   r   r   r   r   	test_take  s"    

 
 

zTestNDFrame.test_takec              	   C   s   ddddg}t  }|tkr$|d }d}tjt|d |j|dd W 5 Q R X d	}tjt|d |j||d
 W 5 Q R X d}tjt|d |j|dd W 5 Q R X d S )Nrt   r   rD   rU   z1take\(\) got an unexpected keyword argument 'foo'rB   )ra   r   r   z%the 'mode' parameter is not supportedZclip)mode)r   r   r   rG   rH   rv   r   rI   )r   r   r   r5   rL   r   r   r   test_take_invalid_kwargs  s    z$TestNDFrame.test_take_invalid_kwargsis_copyTFc              	   C   sj   t ddddgi}|tkr"|d }d}tt}|jddg|d W 5 Q R X |d jjd |ksftd S )NrU   rD   rt   rS   zis_copy is deprecated and will be removed in a future version. 'take' always returns a copy, so there is no need to specify this.r   )r   )	r   r   r   assert_produces_warningFutureWarningr   messager3   r\   )r   r   r   r5   rL   wr   r   r   test_depr_take_kwarg_is_copy  s    z(TestNDFrame.test_depr_take_kwarg_is_copyc                 C   sn   |}|t d}|j }|D ]L}||||ks8t||||ksPt||||kstqd S )Nr   )objectZ_AXIS_TO_AXIS_NUMBERkeysZ_get_axis_numberr\   r8   Z_get_block_manager_axis)r   r   boxr5   r   r_   r   r   r   test_axis_classmethods  s    

z"TestNDFrame.test_axis_classmethodsc              	   C   s6   |}|t d}d}tjt|d |j W 5 Q R X d S )Nr   z_AXIS_NAMES has been deprecatedrB   )r   r   r   r   Z_AXIS_NAMESr   r   r   r5   rL   r   r   r   test_axis_names_deprecated  s
    
z&TestNDFrame.test_axis_names_deprecatedc              	   C   s6   |}|t d}d}tjt|d |j W 5 Q R X d S )Nr   z!_AXIS_NUMBERS has been deprecatedrB   )r   r   r   r   Z_AXIS_NUMBERSr   r   r   r   test_axis_numbers_deprecated  s
    
z(TestNDFrame.test_axis_numbers_deprecatedc                 C   sH   t ddg}|tkr| }|j|jks,t| }|j|jk	sDtd S )NrD   rt   )r   r   Zto_frameflagsr\   r   )r   r   r5   rM   r   r   r   test_flags_identity  s    zTestNDFrame.test_flags_identityc              	   C   sF   t dddddgi}|t kr$|d }tt |  W 5 Q R X d S )NrU   rD   rt   rS   r-   )r   r   r   r   Zslice_shift)r   r   r5   r   r   r   test_slice_shift_deprecated  s
    z'TestNDFrame.test_slice_shift_deprecatedN)rF   r   r~   r   r   r   r   r   r   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   W  s   #
		r   )r   r   Znumpyr   rG   Zpandas.core.dtypes.commonr   Zpandasr   r   Zpandas._testingZ_testingr   r   r   r   r   r   r   <module>   s     D