U
    f/eLs                     @  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   ?/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/indexes/common.pysimple_index*   s    zBase.simple_indexr   )returnc                 C  s   t dd S r   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 5 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 5 Q R X tjt|d |dd W 5 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   r4   r)   r   r   r   
test_shiftV   s    zBase.test_shiftc              	   C  s2   |}t jtdd t||g d W 5 Q R X d S )Nz"Index.name must be a hashable typer#   r-   )r&   r'   r(   r7   r   r   r4   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barr-   )r=   one)r=   two)r>   r?   )Zbazr@   )quxr?   )rA   r@   objectdtype)namesAB)
isinstancer   r+   r   tmassert_index_equalrE   )r   r   expectedresultr   r   r   test_create_index_existing_namej   sV    

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 5 Q R X dd| dd	| g}tj	t
|d d|  W 5 Q R X |d
d}tj	t
|d |d  W 5 Q R X |d
d}tj	t
|d d|  W 5 Q R X |d
d}tj	t
|d |d  W 5 Q R X |d
d}tj	t
|d d|  W 5 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//)rH   r   r0   r7   r   _datar8   r%   r&   r'   r(   replace)r   r   r4   typZlmsgZrmsgZdiv_errZfloordiv_errr   r   r   test_numeric_compat   s>    

zBase.test_numeric_compatc              	   C  sL   |}t jtdd |  W 5 Q R X t jtdd |  W 5 Q R X d S )Nzcannot perform allr#   zcannot perform any)r&   r'   r(   allanyr;   r   r   r   test_logical_compat   s
    zBase.test_logical_compatc                 C  s   |}t tt|| d S N)rI   rJ   evalreprr;   r   r   r   test_repr_roundtrip   s    zBase.test_repr_roundtripc              	   C  sB   |}| d}tdd  t| dt|ks4tW 5 Q R X d S )N2   zdisplay.max_seq_itemsz...)repeatpdZoption_contextrZ   strr0   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rb   r6   )r/      )	rH   r   r7   r0   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 5 Q R X t|j	 d}tjt
|d |jdggd W 5 Q R X d S )Nra   r-   z$Length of new names must be 1, got 2r#   Zluigiz.name must be a hashable type)rH   r   rb   r+   r0   r&   r'   
ValueErrorr7   r8   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freqrb   TUTCF)Zordinalrb   Zsame)Z
check_same)rH   r   rn   r   r   r   r7   r3   r   rD   Ztz_localizeZ
tz_converttzr	   r   
_with_freqrI   rJ   Zasi8assert_numpy_array_equalr   )r   r/   Zinit_kwargsZ
index_typerL   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deeprB   )
_engineZclear_mappingZmemory_usageemptyr0   get_locrH   r   r   Zinferred_type)r   r/   rL   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)rH   r   argsortnparrayrI   rr   )r   requestr/   rL   rK   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 5 Q R X d}tj	t
|d t j|dd W 5 Q R X d}tj	t
|d t j|d	d
 W 5 Q R X d S )N%the 'axis' parameter is not supportedr#   r.   Zaxisz%the 'kind' parameter is not supportedZ	mergesort)kindz&the 'order' parameter is not supported)ab)order)r{   rz   rI   rr   rH   r7   r   r   r&   r'   rl   )r   r/   rL   rK   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 )Nr6   r-   )
rb   r   r3   r]   r+   rI   rJ   r{   aranger1   )r   r   repr4   rK   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 5 Q R X d S )Nr6   r   r#   r   r   )r]   rI   rJ   r{   r&   r'   rl   )r   r   r   r4   rK   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.   rC   )rH   r	   r   rq   r1   whererI   rJ   r   Z	_na_valuetolistrD   )r   r   r   r4   ZcondrL   rK   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   )r1   rf   insertr0   )r   r/   rL   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 5 Q R X d S )Nr.   r   re   zindex z' is out of bounds for axis 0 with size r#   )
r1   rH   r   deleterf   r0   r+   r&   r'   
IndexError)r   r/   rK   rL   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 )NrC   r.   )rH   r   rf   r0   rb   astyperB   listr{   r|   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 5 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 5 Q R X t||
k| t||k|	 t	|
}t	|}t	|}t	|}tjt|d ||k W 5 Q R X t||k| t||k|	 tjtd	d ||k W 5 Q R X tjtd	d ||k W 5 Q R X tjtd	d ||k W 5 Q R X d
}tjt|d ||k W 5 Q R X tjtd	d ||k W 5 Q R X t
|tstdgt |d  ddg }|d }t||k| t||kt	| d S )Nr   re   r.   z)Lengths must match|could not be broadcastr#   TFzLengths must matchz3Can only compare identically-labeled Series objectsr6   )r1   appendr&   r'   rl   r{   r|   rI   rr   r   rH   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   r_   .0xr   r   r   
<listcomp>  s     z$Base.test_format.<locals>.<listcomp>)formatr0   r   r   r4   rK   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 )NTr-    )r   r   r0   )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 )NTrt   FrC   r   r.   rn   )rb   r{   r|   r1   boolrI   rr   _isnanhasnansr0   asarrayr3   rH   r   r   r   r   r   nanr   r7   rn   )r   Z
index_flatr/   r4   rK   r3   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 5 Q R X n|jdd}||d }t	|| ||k	st
d}tjt|d ||d g W 5 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   Trt   "isna is not defined for MultiIndexr#   z"'value' must be a scalar, passed: r.   r   FrC   )r1   rH   r   rb   r&   r'   r   ZfillnarI   rJ   r0   r(   r{   r   r3   r   r   r   r   r   r   r   r7   rn   r|   r   rr   r   r   )r   r/   r4   r)   rL   r3   rK   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 5 Q R X nn|jst| tjt |td t| tjt |td n*t|}t| | t| |  d S )Nr   rC   r   r#   )r1   rI   rr   r   r{   r|   r   rH   r   rb   r&   r'   r   r   zerosZnotnaZones)r   r/   r4   r)   rL   r   r   r   
test_nullsM  s    
 zBase.test_nullsc                 C  s$   |}|j rt|d d j s td S Nr   )rw   r0   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%   rU   r0   )r   Z	join_typer   r4   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 rX   r   )r   r   r   r   <lambda>u      zBase.test_map.<locals>.<lambda>)rH   r   r   maprI   rJ   )r   r   r4   rK   rL   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r3   r/   r   r   r   r   |  r   zBase.<lambda>c                 C  s
   t | |S rX   )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   )rH   r   r&   skipr7   r3   r   dictr   r   rI   rJ   r   r{   r   r1   )r   r   r   r4   identityrK   rL   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   r   r   r   r   r   r     s     z%Base.test_map_str.<locals>.<listcomp>rC   )r   r_   r   rB   rI   rJ   )r   r   r4   rL   rK   r   r   r   test_map_str  s    
zBase.test_map_strrb   TFr=   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   rc   )r+   r   T)exactre   )r+   rD   Fcategoryr-   )renamer   r   r   rI   rJ   uniquer   )	r   rb   r+   r   r   r4   rD   rL   rK   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   r0   r   r{   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 rX   )r1   gcZget_referrersrv   r0   )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 5 Q R X t |tjs\tt	|d S )Nz&Support for multi-dimensional indexing)r$   Zcheck_stacklevel)
rH   r   r   rI   Zassert_produces_warningFutureWarningr{   Zndarrayr0   r7   )r   r   r4   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 r   )rx   rb   _cacher0   )r   r   r4   rb   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 r   )rx   Z_viewr   r0   Z_shallow_copyrQ   )r   r   r4   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.   r6   r   r   rd   )g      ?g       @i        ro   )rp   z
2011-11-01z
2011-12-01)r{   r|   r   rI   Zassert_dict_equalgroupbyr	   r   r^   NaTr3   r   )r   r   r4   Z
to_groupbyZex_keysrK   r   r   r   test_index_groupby  s$     



$zBase.test_index_groupby)8r8   
__module____qualname____doc____annotations__r&   Zfixturer   r!   r*   markZparametrizer5   r:   r<   rM   rT   rW   r[   r`   rk   rm   rs   ry   r~   r   r   r   r   tupler{   r|   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   #   sp   


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.   r6   rC   )r   r   r{   r|   rI   rr   rQ   )r   rD   r4   rL   rK   r   r   r   test_constructor_unwraps_index  s    
z*NumericBase.test_constructor_unwraps_indexc                 C  s   d S rX   r   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_namer0   )r   r   r4   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 rX   )r1   r_   r   r   r   r   	<genexpr>$  s     z*NumericBase.test_format.<locals>.<genexpr>c                   s   g | ]}t | qS r   )r_   ljustr   	max_widthr   r   r   %  s     z+NumericBase.test_format.<locals>.<listcomp>)maxr   r0   r   r   r   r   r   !  s    zNumericBase.test_formatc                 C  s   d S rX   r   r   r   r   r   rT   (  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.   rC   )r^   r   r   r   rB   r
   r{   r   r   rI   rJ   )r   Znulls_fixturer   r/   Zna_valrK   rL   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   rC   g	@Zfloat64)r   r   r{   r   r
   rI   rJ   r   )r   Z	index_clsr4   ZarrrK   Zfidxr   rL   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 5 Q R X d S )Nz:Incorrect `dtype` passed: expected \w+(?: \w+)?, received r#   r.   r6   rd   rC   )r&   r'   rl   r   )r   Zinvalid_dtyperD   r)   r   r   r   test_invalid_dtypeT  s    
zNumericBase.test_invalid_dtypeN)r8   r   r   r   r   r   r   r   rT   r   r   r   r   r   r   r   r     s   r   )%
__future__r   r   r   Znumpyr{   r&   Zpandas._libsr   Zpandas._libs.tslibsr   Zpandas.core.dtypes.commonr   Zpandas.core.dtypes.dtypesr   Zpandasr^   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingrI   Z pandas.core.indexes.datetimeliker   r   r   r   r   r   r   <module>   s&   <     o