U
    *if>                     @   sr   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 dddZG dd dZG d	d
 d
ZdS )    )copydeepcopyN)	is_scalar)	DataFrameSeriesc                 K   s   t |trt|g| j }|dk	rt|rf|dkrLd}tj}|| jd qtj	||d}|
| qt|}| }||jd  }||jd  dkrtdt|||}nt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tuple	_AXIS_LENr   npfloat64popZ_info_axis_namer   fillprodZravelshape	ExceptionrepeatZreshaperandomZrandn)boxr   valuer	   kwargsarrZfshapeZ	new_shape r   T/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/generic/test_generic.py	construct   s$    

r   c                	   @   s   e Zd Zejdejdd edD e	dd edD g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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d'd( Zd)S )*Genericfuncc                 C   s   i | ]}||  qS r   lower.0xr   r   r   
<dictcomp>:   s      zGeneric.<dictcomp>ABCDc                 C   s   i | ]}||  qS r   r    r"   r   r   r   r%   ;   s      c           	      C   s^   t d}|jD ]J}||i}td|}|jf ||i}| }t||t d t|| qd S )Nr&      abcd)r'   )listZ_AXIS_ORDERSr   renamer   setattrtmassert_equal)	selfframe_or_seriesr   idxaxisr   objresultexpectedr   r   r   test_rename6   s    

zGeneric.test_renamec                    s   d fddt  jD }tf|}| }t|| | }tfddi|}t|trt|j	d d |_	t|| t
ddddg}tfd|i|}| }t|| d S )	Nr'   c                    s    i | ]}  |ttqS r   )_get_axis_namer)   range)r#   ir/   nr   r   r%   P   s    z1Generic.test_get_numeric_data.<locals>.<dictcomp>r   r   r   TF)r7   r   r   Z_get_numeric_datar,   r-   Z_get_bool_datar
   r   columnsr   array)r.   r/   r   or3   r4   r   r   r9   r   test_get_numeric_dataM   s     
zGeneric.test_get_numeric_datac              	   C   sX  t |dd}d|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 t |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 t |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 t |dd}tjt|d t| W 5 Q R X t |ddd}t |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   __name__pytestraises
ValueErrorboolr   nan)r.   r/   r2   msgZobj1obj2r   r   r   test_nonzeroh   sH    
zGeneric.test_nonzeroc              	      s^    fdd}d j  d}tjt|d |dddg W 5 Q R X |d	 |d
 |d d S )Nc                    s   t  dd| dS )N   rB   )r   r   r	   )r   r   r/   r   r   f   s    z7Generic.test_frame_or_series_compound_dtypes.<locals>.fz+compound dtypes are not implemented in the z frame_or_seriesr@   )Azdatetime64[h])Bstr)CZint32Zint64r   zM8[ns])rC   rD   rE   NotImplementedError)r.   r/   rN   rI   r   rM   r   $test_frame_or_series_compound_dtypes   s    z,Generic.test_frame_or_series_compound_dtypesc                 C   s(  t |dd}d|_t |dd}d|_dD ]}t||d}t|| q(dD ]}t|||}t|| qLdD ]>}t|||}t|| t|||@  t|||B  qp||}t|| || }t| dD ]F}t|||}t|||}t| t||@  t||B  qd S )NrL   r?   foobar)__add____sub____truediv____mul__rB   )__eq____le____ge__)r   namegetattrr,   Zassert_metadata_equivalentZcombine_first)r.   r/   r=   o2opr3   Zv1Zv2r   r   r   test_metadata_propagation   s2    


z!Generic.test_metadata_propagationc                 C   s>   t |dd}|jt|jks"t|jdt|j ks:td S )N
   r?   )r   sizer   r   r   AssertionErrorlenaxesr.   r/   r=   r   r   r   test_size_compat   s    zGeneric.test_size_compatc                 C   s@   t |dd}tt|ddks$ttt|ddks<td S )Nrc   r?         )r   rf   r   Zarray_splitre   rh   r   r   r   test_split_compat   s    zGeneric.test_split_compatc              	   C   s   t |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 )Nrj   z	Star Warszunexpected keywordr@   )Zepic)r   rD   rE   	TypeErrormaxvarsumany)r.   r/   r2   Zstarwarserrmsgr   r   r   test_stat_unexpected_keyword   s    
z$Generic.test_stat_unexpected_keywordrp   Zcumsumrq   ro   c                 C   s4   |df}t ||}|j|ks t|j|s0td S )Nrj   )r_   rC   re   __qualname__endswith)r.   r   r/   r2   rN   r   r   r   test_api_compat   s    
zGeneric.test_api_compatc              	   C   s   t |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 )Nrj   r   $the 'out' parameter is not supportedr@   out)
r   r   r<   rD   rE   rF   rn   ro   rp   rq   )r.   r/   r2   ry   rr   r   r   r   test_stat_non_defaults_args	  s    
z#Generic.test_stat_non_defaults_argsc                 C   s   dgdg|j d   }t||ddd}t| | t|jddd| t|jdd	d| d
gdg|j d   }t||ddd}t| | t|jddd| t|jddd| d S )Ni  rB   Zint8)r	   r   r   g     p@)beforeafterg     @@i g    `FAg    >A)r   r   r,   r-   truncate)r.   r/   r   Zsmallbigr   r   r   test_truncate_out_of_bounds  s    z#Generic.test_truncate_out_of_boundsc                 C   s   | j ddS )NFdeepr   r$   r   r   r   <lambda>*      zGeneric.<lambda>c                 C   s   | j ddS )NTr   r   r   r   r   r   r   *  r   r   r   rB   rk   c                 C   s.   t ||}||}||k	stt|| d S N)r   re   r,   r-   )r.   r/   r   r   r2   Zobj_copyr   r   r   test_copy_and_deepcopy(  s    
zGeneric.test_copy_and_deepcopyN)rC   
__module__rt   rD   markparametrizerQ   r!   r)   r   r5   r>   rK   rT   rb   ri   rl   rs   rv   rz   r   r   r   r   r   r   r   r   r   5   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 )NrO   r;   five)r^   r	   rB   )Znper)rB   rB   r   r1   indexr;   )r   r   z)No axis named 2 for object type DataFramer@   rk   z)No axis named x for object type DataFramer$   rL   )r,   makeFloatSeriesmakeStringSeriesmakeObjectSeriesassert_series_equalsqueezemakeTimeDataFrameassert_frame_equalreindexr   r   r   r   Zilocr   re   rD   rE   rF   )r.   sdfZempty_seriesZempty_framerI   r   r   r   test_squeeze8  s2    
""
zTestNDFrame.test_squeezec                 C   sF   t  }t t|| t  jdgd}t t||d  d S )NrO   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_transposeb  s    zTestNDFrame.test_transposec              	   C   sv   t  }t ||}|tkr.t t|| t tt|| d}tj	t
|d tj|dd W 5 Q R X d S )Nz%the 'axes' parameter is not supportedr@   rB   )rg   )r,   r   get_objr   r   r   r   r-   rD   rE   rF   )r.   r/   r2   rI   r   r   r   test_numpy_transposei  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 )NrB   rj      rL   r}   )datar   r	   r   r   )r   r   r;   )r,   r   r   r   taker   valuesr   r	   r   r   r   r;   r   )r.   indicesr   ry   r4   r   r   r   r   	test_takey  s"    

 
 

zTestNDFrame.test_takec              	   C   s   ddddg}t  }t ||}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 )Nrk   r   rB   z1take\(\) got an unexpected keyword argument 'foo'r@   )rU   rw   rx   z%the 'mode' parameter is not supportedZclip)mode)r,   r   r   rD   rE   rm   r   rF   )r.   r/   r   r2   rI   r   r   r   test_take_invalid_kwargs  s    z$TestNDFrame.test_take_invalid_kwargsis_copyTFc              	   C   sf   t ddddgi}t||}d}tt}|jddg|d W 5 Q R X |d jjd |ksbtd S )NrO   rB   rk   rL   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   messageargsre   )r.   r   r/   r2   rI   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_numberre   r6   Z_get_block_manager_axis)r.   r/   r   r2   r   vr   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 deprecatedr@   )r   r,   r   r   Z_AXIS_NAMESr.   r/   r   r2   rI   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 deprecatedr@   )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 )NrB   rk   )r   r   Zto_frameflagsre   r   )r.   r/   r2   rJ   r   r   r   test_flags_identity  s    zTestNDFrame.test_flags_identityc              	   C   sB   t dddddgi}t||}tt |  W 5 Q R X d S )NrO   rB   rk   rL   r'   )r   r,   r   r   r   Zslice_shift)r.   r/   r2   r   r   r   test_slice_shift_deprecated  s    z'TestNDFrame.test_slice_shift_deprecatedN)rC   r   rt   r   r   r   r   r   r   rD   r   r   r   r   r   r   r   r   r   r   r   r   r   5  s   #
		r   )NN)r   r   numpyr   rD   Zpandas.core.dtypes.commonr   Zpandasr   r   Zpandas._testingZ_testingr,   r   r   r   r   r   r   r   <module>   s   
   