U
    sVc}                     @  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
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 d dlmZ d dlmZmZm Z m!Z! d d	l"m#Z# G d
d dZ$G dd de$Z%dS )    )annotations)datetimeN)	Timestamp)is_datetime64tz_dtypeis_integer_dtype)CategoricalDtype)
CategoricalIndexDatetimeIndexIndexIntervalIndex
MultiIndexPeriodIndex
RangeIndexSeriesTimedeltaIndexisna)Float64Index
Int64IndexNumericIndexUInt64Index)BaseMaskedArrayc                   @  s  e Zd ZU dZded< ejdd Zdd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d(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#ej$%d@dAdB dCdB gdDdE Z&dFdG Z'ej$%dHdIdJgej$%dKdLdMgej$%dNdIdJgdOdP Z(dQdR Z)ej$j*dSdT Z+dUdV Z,dWdX Z-dYdZ Z.d[d\ Z/d]d^ Z0d_d` Z1dLS )a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-xj8nt62q/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_index3   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_construction6   s    z$Base.test_pickle_compat_constructionc              	   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$         )type__name__r'   r(   r   shift)r   r    idxr*   r   r   r   
test_shiftG   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$   name)r'   r(   r)   r.   r   r    r1   r   r   r    test_constructor_name_unhashableT   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barr3   )r7   one)r7   two)r8   r9   )Zbazr:   )quxr9   )r;   r:   objectdtype)namesAB)
isinstancer   r4   r
   tmassert_index_equalr?   )r   r    expectedresultr   r   r   test_create_index_existing_name[   sV    

z$Base.test_create_index_existing_namec           	   	   C  s  |}t |trtt|tkr"d S t|jj}t|j}dd| dd| d| dg}tj	t
|d |d  W 5 Q R X dd| 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'zIcannot perform (__mul__|__truediv__|__floordiv__) with this index type: ()r$   r,   z1unsupported operand type\(s\) for \*: 'int' and ''zLcannot perform (__rmul__|__rtruediv__|__rfloordiv__) with this index type: (*/z//)rB   r   AssertionErrorr.   r
   _datar/   r&   r'   r(   r)   replace)	r   r    r1   typclsZ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anyr5   r   r   r   test_logical_compat   s
    zBase.test_logical_compatc                 C  s   |}t tt|| d S N)rC   rD   evalreprr5   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_contextrW   strrL   r5   r   r   r   test_repr_max_seq_item_setting   s
    
z#Base.test_repr_max_seq_item_settingc                 C  sB  i }t |tr|j|d< n2t |tttfr.d S |jtkrL|jdkrL|j|d< t	|}||j
fddi|}t|jr|d|j}t |ttfr|d }t|| t |tr|f |jdd|}tj|j|jd	d
 n\t |trnNt	|tkrt |jtjs||j
fddi|}t|| t |jtrt|jj|jjsXttj|jj|jjd	d
 t|jj|jjsttj|jj|jjd	d
 nn|jdkrt|jj|jjsttj|jj|jjd	d
 n.|jdkrt|j|jstn
t |jn*||j
fddi|}tj|j
|j
d	d
 d S )Nfreqbooleanr>   copyTUTCF)Zordinalr`   Zsame)Z
check_samezstring[python]zstring[pyarrow])!rB   r   r^   r   r   r   r>   r<   inferred_typer.   valuesr   Ztz_localizeZ
tz_converttzr	   r   
_with_freqrC   rD   Zasi8assert_numpy_array_equalr   r
   np_valuesr   Zshares_memoryrM   rL   Z_maskZ_ndarrayr   )r   indexZinit_kwargsZ
index_typerF   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s~t	|t
krrt|jtjr~||ks~t|jdkr||kstd S )Nr   Tdeepr<   )_engineZclear_mappingZmemory_usageemptyrL   get_locrB   r   r   r.   r
   r>   rg   rb   )r   ri   rF   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)rB   r   argsortrg   arrayrC   rf   )r   requestri   rF   rE   r   r   r   test_argsort   s
    
zBase.test_argsortc              	   C  s   t |}| }t|| t j|dd}|jdd}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 S )
NZ	mergesort)kind%the 'axis' parameter is not supportedr$   r,   Zaxisz&the 'order' parameter is not supported)ab)order)
rg   rr   rC   rf   rB   r   r   r'   r(   
ValueError)r   ri   rF   rE   r*   r   r   r   test_numpy_argsort)  s    
	zBase.test_numpy_argsortc                 C  s   d}|  }t|trtn|j}||j||jd}t	||| |}t
t|}||j||jd}t	||| d S )Nr-   r3   )r`   rB   r   r   Z_constructorrc   rZ   r4   rC   rD   rg   arangelen)r   r    repr1   new_index_clsrE   r   r   r   test_repeatB  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 )Nr-   rw   r$   r   rx   )rZ   rC   rD   rg   r'   r(   r|   )r   r    r   r1   rE   r*   r   r   r   test_numpy_repeatN  s    
zBase.test_numpy_repeatc                 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=   )rB   r	   r   re   r   whererC   rD   r
   Z	_na_valuetolistr>   )r   Zlistlike_boxr    klassr1   ZcondrF   rE   r   r   r   
test_whereX  s    
"zBase.test_wherec                 C  s>   |dd }t |sd S |dd |d|d s:td S )Nr,      r   )r   equalsinsertrL   )r   ri   rF   r   r   r   test_insert_basej  s    zBase.test_insert_basec              	   C  s   t |dkrt}nt}t |dkr(d}nd}tj||d |dd W 5 Q R X ddd	g}tjt|d |t |d
 d
 W 5 Q R X tjt|d |t | d
 d
 W 5 Q R X d S )Nr   z5index (0|0.5) is out of bounds for axis 0 with size 0zBslice indices must be integers or None or have an __index__ methodr$   g      ?r7   r#   z5index -?\d+ is out of bounds for axis 0 with size \d+zloc must be an integer betweenr,   )r   r)   
IndexErrorr'   r(   r   r&   )r   ri   errr*   r   r   r   test_insert_out_of_boundss  s"    zBase.test_insert_out_of_boundsc              	   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   zindex z' is out of bounds for axis 0 with size r$   )
r   rB   r   deleter   rL   r4   r'   r(   r   )r   ri   rE   rF   lengthr*   r   r   r   test_delete_base  s     


zBase.test_delete_basec                 C  s   t |trd S t|tko(t |jtj }||s8t|| sJt|sb||	t
sbt|t|rtt|t|rtt |ts|st|t
d}||st||st|jdkr|t|rtd S )Nr=   r,   )rB   r   r.   r
   r>   rg   r   rL   r`   astyper<   listrs   r   Znlevelsr   )r   ri   Z	is_ea_idxZ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   r   r,   z)Lengths must match|could not be broadcastr$   TFzLengths must matchz3Can only compare identically-labeled Series objectsr-   )r   appendr'   r(   r|   rg   rs   rC   rf   r   rB   r   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>)formatrL   r   r    r1   rE   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 )NTr3    )r   r   rL   )r   Z	empty_idxr   r   r   test_format_empty  s    
zBase.test_format_emptyc              	   C  st  t |dkrd S |jtkrd S t|tr6t|jr6d S t|trz|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}|j}tj|d< t||}d}tj	t
|d |j|d d	d
 W 5 Q R X tjdgt | td}d|d< t|j| |jdksptd S )Nr   Trk   "isna is not defined for MultiIndexr$   z"'value' must be a scalar, passed: r,   zdoes not support 'downcast'Zinfer)ZdowncastFr=   )r   r>   boolrB   r   r   r   r`   r'   r(   r   ZfillnarC   rD   rL   r)   rh   rg   nanr.   rs   rf   Z_isnanhasnans)r   ri   r1   r*   rF   rc   rE   r   r   r   test_fillna  s:    


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   r=   r   r$   )r   rC   rf   r   rg   rs   r   rB   r   r`   r'   r(   r   r   zerosZnotnaZones)r   ri   r1   r*   rF   r   r   r   
test_nulls4  s    
 zBase.test_nullsc                 C  s$   |}|j rt|d d j s td S Nr   )rn   rL   r5   r   r   r   
test_emptyF  s    
zBase.test_emptyc                 C  s,   |}|j r(|j||d}||k s(td S )N)how)	is_uniquer&   rR   rL   )r   Z	join_typer    r1   Zjoinedr   r   r   test_join_self_uniqueL  s    zBase.test_join_self_uniquec                 C  s&   |}| dd }tj||dd d S )Nc                 S  s   | S rU   r   )r   r   r   r   <lambda>V      zBase.test_map.<locals>.<lambda>equivexact)maprC   rD   )r   r    r1   rF   r   r   r   test_mapR  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rc   ri   r   r   r   r   ]  r   zBase.<lambda>c                 C  s
   t | |S rU   )r   r   r   r   r   r   ^  r   c           	      C  s   |}t |tr"tdt|  ||j|}||}tj||dd d }|j	rjt
}|jjdkrn|j}nt}|tjgt| |d}||||}t|| d S )Nzskipping tests for r   r   fr=   )rB   r   r'   skipr.   rc   r   rC   rD   (_is_backward_compat_public_numeric_indexr   r>   rv   r   rg   r   r   )	r   r   r    r1   identityrF   r>   r   rE   r   r   r   test_map_dictlikeZ  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>r=   )r   r\   r
   r<   rC   rD   )r   r    r1   rF   rE   r   r   r   test_map_str|  s    
zBase.test_map_strr`   TFr4   Nr7   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   )r`   )r4   r   Tr   r   )r4   r>   Fcategoryr3   )renamer   r   r   rC   rD   uniquer   )	r   r`   r4   r   r    r1   r>   rF   rE   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   rL   r   rg   r   )r   r    ri   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 rU   )r   gcZget_referrersrm   rL   )r   r    ri   Z	nrefs_prer   r   r   test_engine_reference_cycle  s    z Base.test_engine_reference_cyclec              	   C  s  |}d}t jt|d |d d d f }W 5 Q R X t|tjsJtt|t|tst jt|d |d }W 5 Q R X t|tjstt|t jt|d |d }W 5 Q R X t|tjstt|nHd}t	j
t|d |d  W 5 Q R X t	j
t|d |d  W 5 Q R X d S )Nz&Support for multi-dimensional indexingr$   TFzonly integers, slices)rC   Zassert_produces_warningFutureWarningrB   rg   ZndarrayrL   r.   r   r'   r(   r   )r   r    r1   r*   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   )ro   r`   _cacherL   )r   r    r1   r`   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   )ro   Z_viewr   rL   Z_shallow_copyrM   )r   r    r1   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,   r-   r   r      )g      ?g       @i        ra   )rd   z
2011-11-01z
2011-12-01)rg   rs   r   rC   Zassert_dict_equalgroupbyr	   r   r[   NaTrc   r   )r   r    r1   Z
to_groupbyZex_keysrE   r   r   r   test_index_groupby  s$     



$zBase.test_index_groupbyc                 C  s   |}t |}||}|j|jks&ttj|d | |dd tj||d  |dd |tt|d }tj||dd d S )NT)Zcheck_exactr-   )	r   r   r>   rL   rC   rD   Ztaker   range)r   r    ri   NrF   Zaltr   r   r   test_append_preserves_dtype  s    
z Base.test_append_preserves_dtypec              	   C  s   |}|j jdkrT| }t|j |jd}t|| t| }tj|t|dd nZ|j jdkrfd}nd}t	j
t|d |  W 5 Q R X t	j
t|d t|  W 5 Q R X d S )	N)r   ur3   Frq   r   z0ufunc 'invert' not supported for the input typeszbad operandr$   )r>   rv   r
   rc   r4   rC   rD   r   r   r'   r(   r)   )r   r    r1   r   rE   Zres2r*   r   r   r   test_inv
  s    
zBase.test_inv)2r/   
__module____qualname____doc____annotations__r'   Zfixturer    r"   r+   r2   r6   rG   rQ   rT   rX   r]   rj   rp   ru   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   Zarm_slowr   r   r   r   r   r   r   r   r   r   r   r   (   sj   

5,8	
	?)

r   c                   @  sX   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d ZdS )NumericBasezJ
    Base class for numeric index (incl. RangeIndex) sub-class tests.
    c                 C  sD   | j }tddg|d}||}tjddg|jd}t|j| d S )Nr,   r-   r=   )r   r
   rg   rs   r>   rC   rf   rM   )r   r>   	index_clsr1   rF   rE   r   r   r   test_constructor_unwraps_index(  s
    z*NumericBase.test_constructor_unwraps_indexc                 C  s   d S rU   r   r   r   r   r   r   0  s    zNumericBase.test_wherec                 C  s"   |}|d }| |dkstd S )Nr   F)Z$_can_hold_identifiers_and_holds_namerL   )r   r    r1   keyr   r   r   test_can_hold_identifiers4  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 rU   )r   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   rL   r   r   r   r   r   9  s    zNumericBase.test_formatc                 C  s   d S rU   r   r   r   r   r   rQ   @  s    zNumericBase.test_numeric_compatc                 C  sX   |}| d|d }t|}|tkr(t}||d gt| |jd}tj||dd d S )Nr   r=   Tr   )r   r.   r   r   r   r>   rC   rD   )r   r    ri   rF   rP   rE   r   r   r   test_insert_non_naC  s    zNumericBase.test_insert_non_nac                 C  s   |}|}|t jkr:t|d t jgt|dd   td}nLt|d tjgt|dd   }|jr|j	j
dkr~t||j	d}nt|}|d|}tj||dd d S )Nr   r,   r=   r   Tr   )r[   r   r
   r   r<   r   rg   r   r   r>   rv   r   r   rC   rD   )r   Znulls_fixturer    ri   Zna_valrE   rF   r   r   r   test_insert_naQ  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   Zint64r=   g	@Zfloat64)r   r   rg   r~   r   rC   rD   r   )r   r   r1   ZarrrE   Zfidxry   rF   r   r   r   $test_arithmetic_explicit_conversionse  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,   r-   r   r=   )r'   r(   r|   r   )r   Zinvalid_dtyper>   r*   r   r   r   test_invalid_dtype  s    
zNumericBase.test_invalid_dtypeN)r/   r   r   r   r   r   r   r   rQ   r   r   r   r   r   r   r   r   r   #  s   r   )&
__future__r   r   r   Znumpyrg   r'   Zpandas._libs.tslibsr   Zpandas.core.dtypes.commonr   r   Zpandas.core.dtypes.dtypesr   Zpandasr[   r   r	   r
   r   r   r   r   r   r   r   Zpandas._testingZ_testingrC   Zpandas.core.apir   r   r   r   Zpandas.core.arraysr   r   r   r   r   r   r   <module>   s(   0      