B
    Z0dLs                 @  s   d dl mZ d dlmZ d dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ  d d	l!m"Z" G d
d dZ#G dd de#Z$dS )    )annotations)datetimeN)iNaT)	Timestamp)is_datetime64tz_dtype)CategoricalDtype)CategoricalIndexDatetimeIndexFloat64IndexIndex
Int64IndexIntervalIndex
MultiIndexPeriodIndex
RangeIndexSeriesTimedeltaIndexUInt64Indexisna)DatetimeIndexOpsMixinc               @  s  e Zd ZU dZded< ejdd Zdd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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/eeeje gd0d1 Z!d2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+dFdG Z,dHdI Z-ej
dJdKdL dMdL gdNdO Z.dPdQ Z/ej
dRdSdTgej
dddUgej
dVdSdTgdWdX Z0dYdZ Z1ej
j2d[d\ Z3d]d^ Z4d_d` Z5dadb Z6dcdd Z7dS )eBasez/
    Base class for index sub-class tests.
    ztype[Index]
_index_clsc             C  s   t dd S )NzMethod not implemented)NotImplementedError)self r   M/var/www/html/venv/lib/python3.7/site-packages/pandas/tests/indexes/common.pysimple_index*   s    zBase.simple_indexr   )returnc             C  s   t dd S )NzMethod not implemented)r   )r   r   r   r   create_index.   s    zBase.create_indexc          	   C  s:   d dddddg}tjt|d |   W d Q R X d S )N|zNIndex\(\.\.\.\) must be called with a collection of some kind, None was passedzPDatetimeIndex\(\) must be called with a collection of some kind, None was passedzQTimedeltaIndex\(\) must be called with a collection of some kind, None was passedz:__new__\(\) missing 1 required positional argument: 'data'z2__new__\(\) takes at least 2 arguments \(1 given\))match)joinpytestraises	TypeErrorr   )r   msgr   r   r   test_pickle_compat_construction1   s    z$Base.test_pickle_compat_constructionnameNnew_namec             C  s   |}|r|}n
|j pd}|j|d}|j|ks2tt|jdksDt|jd |ksVt|| j|jk	sjt|jd|d}|j|k	std S )Nr   )r'      F)indexr'   )r'   Zto_framer*   AssertionErrorlencolumnsvalues)r   r'   r   idxZidx_nameZdfr   r   r   test_to_frameB   s    
zBase.test_to_framec          	   C  sb   |}dt |j }tjt|d |d W d Q R X tjt|d |dd W d Q R X d S )Nz\This method is only implemented for DatetimeIndex, PeriodIndex and TimedeltaIndex; Got type )r    r)      )type__name__r"   r#   r   shift)r   r   r/   r%   r   r   r   
test_shiftV   s    zBase.test_shiftc          	   C  s2   |}t jtdd t||g d W d Q R X d S )Nz"Index.name must be a hashable type)r    )r'   )r"   r#   r$   r2   )r   r   r/   r   r   r    test_constructor_name_unhashablec   s    z%Base.test_constructor_name_unhashablec             C  s   |}t |tsHd|_t|}t|| t|dd}d|_t|| nzddg|_t|}t|ttdddddd	gd
dddgd t|ddgd}t|ttdddddd	gd
dddgd d S )Nfoobar)r'   )r7   one)r7   two)r8   r9   )Zbazr:   )quxr9   )r;   r:   object)dtype)namesAB)
isinstancer   r'   r   tmassert_index_equalr>   )r   r   expectedresultr   r   r   test_create_index_existing_namej   sF    

z$Base.test_create_index_existing_namec          	   C  sf  |}t |trtt|tkr"d S t|jj}dd| dd| g}tj	t
|d |d  W d Q R X dd| dd	| g}tj	t
|d d|  W d Q R X |d
d}tj	t
|d |d  W d Q R X |d
d}tj	t
|d d|  W d Q R X |d
d}tj	t
|d |d  W d Q R X |d
d}tj	t
|d d|  W d Q R X d S )Nr   z'unsupported operand type\(s\) for \*: 'z' and 'int'zHcannot perform (__mul__|__truediv__|__floordiv__) with this index type: )r    r)   z1unsupported operand type\(s\) for \*: 'int' and ''zKcannot perform (__rmul__|__rtruediv__|__rfloordiv__) with this index type: */z//)rA   r   r+   r2   r   _datar3   r!   r"   r#   r$   replace)r   r   r/   typZlmsgZrmsgZdiv_errZfloordiv_errr   r   r   test_numeric_compat   s6    

zBase.test_numeric_compatc          	   C  sL   |}t jtdd |  W d Q R X t jtdd |  W d Q R X d S )Nzcannot perform all)r    zcannot perform any)r"   r#   r$   allany)r   r   r/   r   r   r   test_logical_compat   s
    zBase.test_logical_compatc             C  s   |}t tt|| d S )N)rB   rC   evalrepr)r   r   r/   r   r   r   test_repr_roundtrip   s    zBase.test_repr_roundtripc          	   C  sB   |}| d}tdd  t| dt|ks4tW d Q R X d S )N2   zdisplay.max_seq_itemsz...)repeatpdZoption_contextrR   strr+   )r   r   r/   r   r   r   test_repr_max_seq_item_setting   s
    
z#Base.test_repr_max_seq_item_settingc             C  s   t |trd S t||ddd}t||dd}||k	s<t||sJt|jdksXt|jdksfttd|d}td|d d	 d}t |ts|| }|jjdkstd S )
NTmario)copyr'   F)rZ   r1   )r*      )	rA   r   r2   r+   equalsr'   r   r   r*   )r   r*   firstseconds1s2Zs3r   r   r   test_copy_name   s    

zBase.test_copy_namec          	   C  s   t |trd S |jddjdks$ttjtdd |jddgd W d Q R X t|j	 d}tjt
|d |jdggd W d Q R X d S )NrY   )r'   z$Length of new names must be 1, got 2)r    Zluigiz.name must be a hashable type)rA   r   rZ   r'   r+   r"   r#   
ValueErrorr2   r3   r$   )r   r*   r%   r   r   r   test_copy_name2   s    
zBase.test_copy_name2c             C  s   i }t |tr|j|d< nt |tttfr.d S t|}||jfddi|}t|j	rh|
d|j}t |ttfr|d }t|| t |tr|f |jdd|}tj|j|jdd n6t |trn*||jfddi|}tj|j|jdd d S )	NfreqrZ   TUTCF)ZordinalrZ   Zsame)Z
check_same)rA   r   re   r   r   r   r2   r.   r   r=   Ztz_localizeZ
tz_converttzr	   r   
_with_freqrB   rC   Zasi8assert_numpy_array_equalr   )r   r*   Zinit_kwargsZ
index_typerE   r   r   r   test_ensure_copied_data  s&    




zBase.test_ensure_copied_datac             C  s~   |j   | }|jr(|dks$td S ||d  | }|jdd}t|ttfsd||ksdt|j	dkrz||ksztd S )Nr   T)deepr<   )
_engineZclear_mappingZmemory_usageemptyr+   get_locrA   r   r   Zinferred_type)r   r*   rE   Zresult2Zresult3r   r   r   test_memory_usage&  s    

zBase.test_memory_usagec             C  s8   t |trd S | }t| }tj||dd d S )NF)Zcheck_dtype)rA   r   argsortnparrayrB   ri   )r   requestr*   rE   rD   r   r   r   test_argsort;  s
    
zBase.test_argsortc          	   C  s   t |}| }t|| tt|ttfrd}tj	t
|d t j|dd W d Q R X d}tj	t
|d t j|dd W d Q R X d}tj	t
|d t j|d	d
 W d Q R X d S )Nz%the 'axis' parameter is not supported)r    r)   )axisz%the 'kind' parameter is not supportedZ	mergesort)kindz&the 'order' parameter is not supported)ab)order)rq   rp   rB   ri   rA   r2   r   r   r"   r#   rc   )r   r*   rE   rD   r%   r   r   r   test_numpy_argsortD  s    
	zBase.test_numpy_argsortc             C  sr   d}|  }t|j||jd}t||| |}tt	|}t|j||jd}t||| d S )Nr1   )r'   )
rZ   r   r.   rU   r'   rB   rC   rq   aranger,   )r   r   repr/   rD   r   r   r   test_repeat^  s    zBase.test_repeatc          	   C  sX   d}|}| |}tt ||| d}tjt|d tj ||dd W d Q R X d S )Nr1   z%the 'axis' parameter is not supported)r    r   )ru   )rU   rB   rC   rq   r"   r#   rc   )r   r   r|   r/   rD   r%   r   r   r   test_numpy_repeati  s    
zBase.test_numpy_repeatklassc             C  s   |}t |ttfr|d }dgt| }|||}|}t|| dgdgt|dd    }t|j	g|dd  
  |jd}|||}t|| d S )NTFr)   )r=   )rA   r	   r   rh   r,   whererB   rC   r   Z	_na_valuetolistr=   )r   r   r   r/   ZcondrE   rD   r   r   r   
test_wheres  s    
"zBase.test_wherec             C  s>   |dd }t |sd S |dd |d|d s:td S )Nr)      r   )r,   r]   insertr+   )r   r*   rE   r   r   r   test_insert_base  s    zBase.test_insert_basec          	   C  s   t |sd S t|trd S |dd  }|d}||s>t|j|jksNt|d d }|d}||srt|j|jkstt |}d| d| }tjt	|d || W d Q R X d S )Nr)   r   r\   zindex z' is out of bounds for axis 0 with size )r    )
r,   rA   r   deleter]   r+   r'   r"   r#   
IndexError)r   r*   rD   rE   lengthr%   r   r   r   test_delete_base  s     


zBase.test_delete_basec             C  s   t |trd S ||st|| s.t||tsBt|t|rTt|t	|rhtt |t
st|td}||st||st|jdkr|t|rtd S )N)r=   r)   )rA   r   r]   r+   rZ   astyper<   listrq   rr   r   r   Znlevelsr   )r   r*   Zsame_valuesr   r   r   test_equals  s    


zBase.test_equalsc          	   C  s  |}t |}|dd }|dd |dd }|dd }d}tjt|d ||k W d Q R X tdg| }tdg|d  dg }	t||k| t||k|	 t|}
t|dd }t|dd |dd }t|dd }tjt|d ||k W d Q R X t||
k| t||k|	 t	|
}t	|}t	|}t	|}tjt|d ||k W d Q R X t||k| t||k|	 tjtd	d ||k W d Q R X tjtd	d ||k W d Q R X tjtd	d ||k W d Q R X d
}tjt|d ||k W d Q R X tjtd	d ||k W d Q R X t
|tstdgt |d  ddg }|d }t||k| t||kt	| d S )Nr   r\   r)   z)Lengths must match|could not be broadcast)r    TFzLengths must matchz3Can only compare identically-labeled Series objectsr1   )r,   appendr"   r#   rc   rq   rr   rB   ri   r   rA   r   Zassert_series_equal)r   r   Zindex_anZindex_bZindex_cZindex_dr%   Z	expected1Z	expected2Zarray_aZarray_bZarray_cZarray_dZseries_aZseries_bZseries_cZseries_dZ	expected3itemr   r   r   test_equals_op  sX    
  zBase.test_equals_opc             C  s&   |}dd |D }|  |ks"td S )Nc             S  s   g | ]}t |qS r   )rW   ).0xr   r   r   
<listcomp>  s    z$Base.test_format.<locals>.<listcomp>)formatr+   )r   r   r/   rD   r   r   r   test_format  s    zBase.test_formatc             C  s4   |  g }| g kst|jdddgks0td S )NT)r'    )r   r   r+   )r   Z	empty_idxr   r   r   test_format_empty   s    
zBase.test_format_emptyc             C  s
  |}|j dd}tjdgt| td}t|j| |jdksDt	|j dd}t
|j}t|dkrld S t|trt|d< nt|tttfrd S tj|d< t|trt|||jd}nJt||}tjdgt| td}d|d< t|j| |jdkst	d S )NT)rk   F)r=   r   r)   )re   )rZ   rq   rr   r,   boolrB   ri   _isnanhasnansr+   asarrayr.   rA   r   r   r   r   r   nanr   r2   re   )r   Z
index_flatr*   r/   rD   r.   r   r   r   test_hasnans_isnans  s*    



zBase.test_hasnans_isnansc          	   C  sn  t |dkrnZt|trV|jdd}d}tjt|d ||d  W d Q R X n|jdd}||d }t	|| ||k	st
d}tjt|d ||d g W d Q R X |jdd}t|j}t|trt|d< nt|tttfrd S tj|d< t|tr t|||jd}nt||}tjd	gt | td
}d|d< t|j| |jdksjt
d S )Nr   T)rk   z"isna is not defined for MultiIndex)r    z"'value' must be a scalar, passed: r)   )re   F)r=   )r,   rA   r   rZ   r"   r#   r   ZfillnarB   rC   r+   r$   rq   r   r.   r   r   r   r   r   r   r   r2   re   rr   r   ri   r   r   )r   r*   r/   r%   rE   r.   rD   r   r   r   test_fillna&  s8    



zBase.test_fillnac          	   C  s   t |dkr(t| tjg td nt|trb|	 }d}t
jt|d |  W d Q R X nn|jst| tjt |td t| tjt |td n*t|}t| | t| |  d S )Nr   )r=   z"isna is not defined for MultiIndex)r    )r,   rB   ri   r   rq   rr   r   rA   r   rZ   r"   r#   r   r   zerosZnotnaZones)r   r*   r/   r%   rE   r   r   r   
test_nullsM  s    
 zBase.test_nullsc             C  s$   |}|j rt|d d j s td S )Nr   )rm   r+   )r   r   r/   r   r   r   
test_empty_  s    
zBase.test_emptyc             C  s,   |}|j r(|j||d}||k s(td S )N)how)	is_uniquer!   rN   r+   )r   Z	join_typer   r/   Zjoinedr   r   r   test_join_self_uniquee  s    zBase.test_join_self_uniquec             C  s<   |}t |tr|d}n|}|dd }t|| d S )Nint64c             S  s   | S )Nr   )r   r   r   r   <lambda>u      zBase.test_map.<locals>.<lambda>)rA   r   r   maprB   rC   )r   r   r/   rD   rE   r   r   r   test_mapk  s    
zBase.test_mapmapperc             C  s   dd t | |D S )Nc             S  s   i | ]\}}||qS r   r   )r   eir   r   r   
<dictcomp>|  s    z!Base.<lambda>.<locals>.<dictcomp>)zip)r.   r*   r   r   r   r   |  r   zBase.<lambda>c             C  s
   t | |S )N)r   )r.   r*   r   r   r   r   }  r   c             C  s   |}t |tr"tdt|  ||j|}t |trNt |trN|d}n|}|	|}t
|| ttjgt| }|	|||}t
|| d S )Nzskipping tests for r   )rA   r   r"   skipr2   r.   r   dictr   r   rB   rC   r   rq   r   r,   )r   r   r   r/   identityrD   rE   r   r   r   test_map_dictlikey  s    	

zBase.test_map_dictlikec             C  s4   |}| t}tdd |D td}t|| d S )Nc             S  s   g | ]}t |qS r   )rW   )r   r   r   r   r   r     s    z%Base.test_map_str.<locals>.<listcomp>)r=   )r   rW   r   r<   rB   rC   )r   r   r/   rE   rD   r   r   r   test_map_str  s    
zBase.test_map_strrZ   TFr7   orderedc       	      C  s   |}|r| |}t|d}|j||d}t|||d}tj||dd t|  d d |}|j||d}t|||d}tj||dd |dkr|jd	|d}t||d
}tj||dd d S )N)r   )rZ   )r'   r   T)exactr\   )r'   r=   Fcategory)r'   )renamer   r   r   rB   rC   uniquer   )	r   rZ   r'   r   r   r/   r=   rE   rD   r   r   r   test_astype_category  s    

zBase.test_astype_categoryc             C  s   |  }|jdkst|d d }|jdks0t|d|d }|jdksNt|dtj}|jdksjt|dtj}|jdkstd S )NTr   F)Zdrop_duplicatesr   r+   r   rq   r   )r   r   r*   Zindex_emptyZ	index_dupZindex_naZindex_na_dupr   r   r   test_is_unique  s    zBase.test_is_uniquec             C  s2   |}t t|}|j t t||ks.td S )N)r,   gcZget_referrersrl   r+   )r   r   r*   Z	nrefs_prer   r   r   test_engine_reference_cycle  s    z Base.test_engine_reference_cyclec          	   C  s`   |}d}t |ttf }tjt||d |d d d f }W d Q R X t |tjs\tt	|d S )Nz&Support for multi-dimensional indexing)r    Zcheck_stacklevel)
rA   r   r   rB   Zassert_produces_warningFutureWarningrq   Zndarrayr+   r2   )r   r   r/   r%   checkresr   r   r   test_getitem_2d_deprecated  s    zBase.test_getitem_2d_deprecatedc             C  s.   |}| |d  | }|j|jks*td S )Nr   )rn   rZ   _cacher+   )r   r   r/   rZ   r   r   r   test_copy_shares_cache  s    zBase.test_copy_shares_cachec             C  sX   |}| |d  | }|j|jks*t||j}|j|jk	sFt|ji ksTtd S )Nr   )rn   Z_viewr   r+   Z_shallow_copyrJ   )r   r   r/   Zshallow_copyr   r   r   test_shallow_copy_shares_cache  s    z#Base.test_shallow_copy_shares_cachec          	   C  s   |d d }t ddt jddg}t|||ddg |ddg d ttdd	dtdd
dtj	tdd
dtdd	dgddj
}tdtdg}|d |ddg |d |ddg i}t||| d S )N   r)   r1   r   r   r[   )g      ?g       @i        rf   )rg   z
2011-11-01z
2011-12-01)rq   rr   r   rB   Zassert_dict_equalgroupbyr	   r   rV   NaTr.   r   )r   r   r/   Z
to_groupbyZex_keysrD   r   r   r   test_index_groupby  s    $



$zBase.test_index_groupby)8r3   
__module____qualname____doc____annotations__r"   Zfixturer   r   r&   markZparametrizer0   r5   r6   rF   rM   rP   rS   rX   rb   rd   rj   ro   rt   rz   r}   r~   r   tuplerq   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zarm_slowr   r   r   r   r   r   r   r   r   r   #   s`   
5+ 	
 	? 'r   c               @  sP   e Zd 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S )NumericBasezJ
    Base class for numeric index (incl. RangeIndex) sub-class tests.
    c             C  s>   t ddg|d}| |}tjddg|d}t|j| d S )Nr)   r1   )r=   )r   r   rq   rr   rB   ri   rJ   )r   r=   r/   rE   rD   r   r   r   test_constructor_unwraps_index  s    
z*NumericBase.test_constructor_unwraps_indexc             C  s   d S )Nr   )r   r   r   r   r     s    zNumericBase.test_wherec             C  s"   |}|d }| |dkstd S )Nr   F)Z$_can_hold_identifiers_and_holds_namer+   )r   r   r/   keyr   r   r   test_can_hold_identifiers  s    z%NumericBase.test_can_hold_identifiersc               s<   |}t dd |D   fdd|D }| |ks8td S )Nc             s  s   | ]}t t|V  qd S )N)r,   rW   )r   r   r   r   r   	<genexpr>$  s    z*NumericBase.test_format.<locals>.<genexpr>c               s   g | ]}t | qS r   )rW   ljust)r   r   )	max_widthr   r   r   %  s    z+NumericBase.test_format.<locals>.<listcomp>)maxr   r+   )r   r   r/   rD   r   )r   r   r   !  s    zNumericBase.test_formatc             C  s   d S )Nr   )r   r   r   r   rM   (  s    zNumericBase.test_numeric_compatc             C  sx   |}|}|t jkr:t|d t jgt|dd   td}n"t|d tjgt|dd   }|d|}t	
|| d S )Nr   r)   )r=   )rV   r   r   r   r<   r
   rq   r   r   rB   rC   )r   Znulls_fixturer   r*   Zna_valrD   rE   r   r   r   test_insert_na+  s    
("zNumericBase.test_insert_nac             C  s   | j }|tkrtd}n|tjddd}tjdddd }t|}|d }t|| d| }t|| t|}tjddd}|| }t|| t| }tjddd}|| }t|| d S )Nr   r   )r=   g	@Zfloat64)r   r   rq   r{   r
   rB   rC   r   )r   Z	index_clsr/   ZarrrD   Zfidxrw   rE   r   r   r   $test_arithmetic_explicit_conversions8  s$    

z0NumericBase.test_arithmetic_explicit_conversionsc          	   C  s@   |}d| }t jt|d | jdddg|d W d Q R X d S )Nz:Incorrect `dtype` passed: expected \w+(?: \w+)?, received )r    r)   r1   r[   )r=   )r"   r#   rc   r   )r   Zinvalid_dtyper=   r%   r   r   r   test_invalid_dtypeT  s    
zNumericBase.test_invalid_dtypeN)r3   r   r   r   r   r   r   r   rM   r   r   r   r   r   r   r   r     s   r   )%
__future__r   r   r   numpyrq   r"   Zpandas._libsr   Zpandas._libs.tslibsr   Zpandas.core.dtypes.commonr   Zpandas.core.dtypes.dtypesr   ZpandasrV   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingrB   Z pandas.core.indexes.datetimeliker   r   r   r   r   r   r   <module>   s&   <     o