U
    >vf`W  ã                   @   s„   d dl 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Zd dlmZ d dlmZ d dlmZ G dd„ deƒZdS )	é    N)ÚDtype)Úis_bool_dtype)Úna_value_for_dtype)Únargsort)ÚBaseExtensionTestsc                   @   sÖ  e Zd ZU 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ej dddg¡dd„ ƒZej dddg¡dd„ ƒZej d d!d"d#d$d%dejfd&dejfd'd(g¡d)d*„ ƒZd+d,„ Zej d-d.ejd/d0d1ge d2¡d3fd4ejd1d/d0ge d2¡d3fg¡d5d6„ ƒZej d7ddg¡d8d9„ ƒZej d7ddg¡d:d;„ ƒZej d7ddg¡d<d=„ ƒZej d>ejd?d@„ g¡ej ddAd@„ ejg¡dBdC„ ƒƒZ dDdE„ Z!dFdG„ Z"dHdI„ Z#dJdK„ Z$dLdM„ Z%dNdO„ Z&e e'¡Z(e)e*dP< dQdR„ Z+dSdT„ Z,dUdV„ Z-ej dWddg¡ej dXdYd/dZd[d\d\gfd0d0d1d/dZd[gfd/d\d\d0d1d/gfg¡d]d^„ ƒƒZ.d_d`„ Z/ej dad1dYg¡dbdc„ ƒZ0ej dXddd\d\ggd\d1d\ggd0d0d1ggd1d\d0ggd[d\d\ggg¡dedf„ ƒZ1ej daddd\d0d1d[g¡dgdh„ ƒZ2didj„ Z3dkdl„ Z4dmdn„ Z5dodp„ Z6dqdr„ Z7dsdt„ Z8ej dud0d1d/d1d/dZgg¡dvdw„ ƒZ9ej dxd/dyd1ie:dyfd\i e:dzfd1d/gi e:d{fd/d|d}ie;d~fg¡dd€„ ƒZ<dd‚„ Z=dƒd„„ Z>d…d†„ Z?d‡dˆ„ Z@ej d>ejejejAg¡d‰dŠ„ ƒZBd‹S )ŒÚBaseMethodsTestsz%Various Series and DataFrame methods.c                 C   sF   t |dƒst dt|ƒ› ¡ t |j¡}|jd }|jdksBt	‚d S )NÚvalue_countsz$value_counts is not implemented for ÚdropnaT)
ÚhasattrÚpytestÚskipÚtypeÚinspectÚ	signaturer   Ú
parametersÚdefaultÚAssertionError)ÚselfÚdataÚsigÚkwarg© r   úG/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/extension/base/methods.pyÚ test_value_counts_default_dropna   s
    

z1BaseMethodsTests.test_value_counts_default_dropnar	   TFc                 C   s`   |d d… }|r ||  ¡   }n|}t |¡j|d ¡ }t |¡j|d ¡ }|  ||¡ d S )Né
   )r	   )ÚisnaÚpdÚSeriesr   Ú
sort_indexÚassert_series_equal)r   Zall_datar	   ÚotherÚresultÚexpectedr   r   r   Útest_value_counts   s    z"BaseMethodsTests.test_value_countsc                 C   sÆ   |d d…   ¡ }t || ¡   ¡}tj||jd}|jdd ¡ }t	|tj
ƒsvtjdt|ƒ gt|ƒ |jdd}n&tjd|jdd}dt|ƒ ||d	k< t|jƒtjkr¶| d
¡}|  ||¡ d S )Nr   ©ÚdtypeT)Ú	normalizeé   Z
proportion)ÚindexÚnameg        r   ZFloat64)ÚuniqueÚnpÚarrayr   r   r   r%   r   r   Ú
isinstanceZCategoricalÚlenr(   r   ZNAZastyper   )r   r   ÚvaluesÚserr!   r"   r   r   r   Ú test_value_counts_with_normalize*   s      ÿ
z1BaseMethodsTests.test_value_counts_with_normalizec                 C   s8   t  d|i¡}|jdd}t  ddg¡}|  ||¡ d S )NÚAÚcolumns©Úaxisr   r'   )r   Ú	DataFrameÚcountr   r   )r   Údata_missingÚdfr!   r"   r   r   r   Ú
test_count?   s    zBaseMethodsTests.test_countc                 C   s&   t  |¡}| ¡ }d}||ks"t‚d S )Nr'   )r   r   r7   r   )r   r8   r0   r!   r"   r   r   r   Útest_series_countE   s    
z"BaseMethodsTests.test_series_countc                 C   s$   t  |¡ t¡}t|t jƒs t‚d S ©N)r   r   ÚapplyÚidr-   r   ©r   r   r!   r   r   r   Útest_apply_simple_seriesL   s    z)BaseMethodsTests.test_apply_simple_seriesc                 C   s:   t  |¡ ¡ }t  tjdddgtjd¡}|  ||¡ d S ©Né   r   r'   r$   ©r   r   Úargsortr+   r,   Úintpr   )r   Údata_for_sortingr!   r"   r   r   r   Útest_argsortP   s    zBaseMethodsTests.test_argsortc                 C   s.   |  ¡ }tjdddgtjd}t ||¡ d S rA   )rD   r+   r,   rE   ÚtmÚassert_numpy_array_equal©r   Údata_missing_for_sortingr!   r"   r   r   r   Útest_argsort_missing_arrayV   s    z+BaseMethodsTests.test_argsort_missing_arrayc                 C   s:   t  |¡ ¡ }t  tjdddgtjd¡}|  ||¡ d S )Nr'   éÿÿÿÿr   r$   rC   rJ   r   r   r   Útest_argsort_missing\   s    z%BaseMethodsTests.test_argsort_missingc                 C   sz   |  ¡ dkst‚| ¡ dks t‚| ddddddg¡}|  ¡ dksFt‚| ¡ dksVt‚|  ¡ dksft‚| ¡ dksvt‚d S )Nr'   rB   r   é   )Úargmaxr   ÚargminÚtake)r   rF   rK   Úna_valuer   r   r   r   Útest_argmin_argmaxa   s    z#BaseMethodsTests.test_argmin_argmaxÚmethodrP   rQ   c              	   C   s6   d}t jt|d t|d d… |ƒƒ  W 5 Q R X d S )Núattempt to get©Úmatchr   )r   ÚraisesÚ
ValueErrorÚgetattr)r   rU   r   Úerr_msgr   r   r   Útest_argmin_argmax_empty_arrayr   s    z/BaseMethodsTests.test_argmin_argmax_empty_arrayc              	   C   sF   d}t |ƒj||g|jd}tjt|d t||ƒƒ  W 5 Q R X d S )NrV   r$   rW   )r   Ú_from_sequencer%   r   rY   rZ   r[   )r   rU   r   rS   r\   Údata_nar   r   r   Útest_argmin_argmax_all_nay   s    z*BaseMethodsTests.test_argmin_argmax_all_nazop_name, skipna, expected)ÚidxmaxTr   )ÚidxminTrB   )rP   Tr   )rQ   TrB   ra   rb   )rP   FrM   )rQ   FrM   c                 C   s*   t  |¡}t||ƒ|d}t ||¡ d S )N©Úskipna)r   r   r[   rH   Zassert_almost_equal)r   rK   Zop_namerd   r"   r0   r!   r   r   r   Útest_argreduce_series   s    
z&BaseMethodsTests.test_argreduce_seriesc              	   C   sT   |}t jtdd |jdd W 5 Q R X t jtdd |jdd W 5 Q R X d S )NÚ rW   Frc   )r   rY   ÚNotImplementedErrorrQ   rP   )r   rK   r   r   r   r   Ú+test_argmax_argmin_no_skipna_notimplemented–   s
    z<BaseMethodsTests.test_argmax_argmin_no_skipna_notimplementedzna_position, expectedÚlastrB   r   r'   rE   r$   Úfirstc                 C   s   t ||d}t ||¡ d S )N)Úna_position)r   rH   rI   )r   rK   rk   r"   r!   r   r   r   Útest_nargsort    s    	zBaseMethodsTests.test_nargsortÚ	ascendingc                 C   sj   t  |¡}|j||d}|jdddg }|sZ| ¡ dkrJ|jdddg }n|jdddg }|  ||¡ d S ©N)rm   ÚkeyrB   r   r'   )r   r   Úsort_valuesÚilocZnuniquer   )r   rF   rm   Úsort_by_keyr0   r!   r"   r   r   r   Útest_sort_values¬   s    
z!BaseMethodsTests.test_sort_valuesc                 C   sN   t  |¡}|j||d}|r.|jdddg }n|jdddg }|  ||¡ d S rn   )r   r   rp   rq   r   )r   rK   rm   rr   r0   r!   r"   r   r   r   Útest_sort_values_missingº   s    
z)BaseMethodsTests.test_sort_values_missingc                 C   s`   t  dddg|dœ¡}| ddg¡}t jdddg| dddg¡dœdddgd}|  ||¡ d S )Nr'   rB   ©r2   ÚBr2   rv   r   ©r(   )r   r6   rp   rR   Úassert_frame_equal)r   rF   rm   r9   r!   r"   r   r   r   Útest_sort_values_frameÆ   s     ÿz'BaseMethodsTests.test_sort_values_frameÚboxc                 C   s   | S r<   r   ©Úxr   r   r   Ú<lambda>Ï   ó    zBaseMethodsTests.<lambda>c                 C   s   |   ¡ S r<   )r*   r{   r   r   r   r}   Ð   r~   c                 C   s\   ||  |d |d g¡ƒ}||ƒ}t|ƒdks2t‚t|t|ƒƒsDt‚|d |d ksXt‚d S ©Nr   r'   )r^   r.   r   r-   r   )r   r   rz   rU   Z
duplicatedr!   r   r   r   Útest_uniqueÏ   s
    zBaseMethodsTests.test_uniquec              	   C   s^   t j|dd\}}tjddddddddgtjd}| ddd	g¡}t ||¡ |  ||¡ d S )
NT©Zuse_na_sentinelr   rM   r'   rB   r$   é   é   )	r   Ú	factorizer+   r,   rE   rR   rH   rI   Úassert_extension_array_equal)r   Údata_for_groupingÚcodesÚuniquesÚexpected_codesÚexpected_uniquesr   r   r   Útest_factorizeÚ   s
     zBaseMethodsTests.test_factorizec                 C   sh   t j|dd\}}|jdd\}}t ||¡ |  ||¡ t|ƒtt  |¡ƒksTt‚|j|jksdt‚d S )NTr   )	r   r„   rH   rI   r…   r.   r*   r   r%   )r   r†   Zcodes_1Z	uniques_1Zcodes_2Z	uniques_2r   r   r   Útest_factorize_equivalenceâ   s    z+BaseMethodsTests.test_factorize_equivalencec                 C   s^   t  |d d… ¡\}}tjg tjd}t|ƒjg |d d… jd}t 	||¡ |  
||¡ d S )Nr   r$   )r   r„   r+   r,   rE   r   r^   r%   rH   rI   r…   )r   r   r‡   rˆ   r‰   rŠ   r   r   r   Útest_factorize_emptyë   s
    z%BaseMethodsTests.test_factorize_emptyc                 C   sR   |  ddg¡}t d|i¡}| ¡ }|jd }| |¡}||jd< |  ||¡ d S )Nr'   r2   )r   r   )rR   r   r6   Úcopyrq   Úfillnarx   )r   r8   Úarrr9   Zdf_origÚ
filled_valr!   r   r   r   Útest_fillna_copy_frameó   s    


z'BaseMethodsTests.test_fillna_copy_framec                 C   sP   |  ddg¡}tj|dd}| ¡ }|d }| |¡}||jd< |  ||¡ d S )Nr'   F)rŽ   r   )rR   r   r   rŽ   r   rq   r   )r   r8   r   r0   Zser_origr‘   r!   r   r   r   Útest_fillna_copy_seriesÿ   s    

z(BaseMethodsTests.test_fillna_copy_seriesc              	   C   s4   d}t jt|d | | dg¡¡ W 5 Q R X d S )Nz!Length of 'value' does not match.rW   r'   )r   rY   rZ   r   rR   )r   r8   Úmsgr   r   r   Útest_fillna_length_mismatch
  s    z,BaseMethodsTests.test_fillna_length_mismatchÚ_combine_le_expected_dtypec                    s°   |dƒ\}}t  |¡}t  |¡}| |dd„ ¡}t jdd„ tt|ƒt|ƒƒD ƒ| jd}|  ||¡ |jd ‰ | ˆ dd„ ¡}t j‡ fd	d„t|ƒD ƒ| jd}|  ||¡ d S )
NrB   c                 S   s   | |kS r<   r   ©Úx1Zx2r   r   r   r}     r~   z2BaseMethodsTests.test_combine_le.<locals>.<lambda>c                 S   s   g | ]\}}||k‘qS r   r   ©Ú.0ÚaÚbr   r   r   Ú
<listcomp>  s     z4BaseMethodsTests.test_combine_le.<locals>.<listcomp>r$   r   c                 S   s   | |kS r<   r   r—   r   r   r   r}      r~   c                    s   g | ]}|ˆ k‘qS r   r   ©rš   r›   ©Úvalr   r   r   "  s     )r   r   ÚcombineÚzipÚlistr–   r   rq   ©r   Zdata_repeatedZ
orig_data1Z
orig_data2Ús1Ús2r!   r"   r   rŸ   r   Útest_combine_le  s     

þ
þz BaseMethodsTests.test_combine_lec              
      sÈ   |dƒ\}}t  |¡}t  |¡}| |dd„ ¡}tjdd. t  | dd„ tt|ƒt|ƒƒD ƒ¡¡}W 5 Q R X |  ||¡ |j	d ‰ | ˆ d	d„ ¡}t  | ‡ fd
d„t|ƒD ƒ¡¡}|  ||¡ d S )NrB   c                 S   s   | | S r<   r   r—   r   r   r   r}   ,  r~   z3BaseMethodsTests.test_combine_add.<locals>.<lambda>Úignore)Zoverc                 S   s   g | ]\}}|| ‘qS r   r   r™   r   r   r   r   0  s     z5BaseMethodsTests.test_combine_add.<locals>.<listcomp>r   c                 S   s   | | S r<   r   r—   r   r   r   r}   6  r~   c                    s   g | ]}|ˆ  ‘qS r   r   rž   rŸ   r   r   r   8  s     )
r   r   r¡   r+   Zerrstater^   r¢   r£   r   rq   r¤   r   rŸ   r   Útest_combine_add'  s"    

ÿÿ
ÿz!BaseMethodsTests.test_combine_addc                 C   sZ   t  |d d… ¡}t j|dd… dddgd}| |¡}t  |d d… ¡}|  ||¡ d S )NrO   rB   é   r‚   rw   )r   r   Zcombine_firstr   )r   r   r›   rœ   r!   r"   r   r   r   Útest_combine_first<  s
    
z#BaseMethodsTests.test_combine_firstÚframezperiods, indiceséþÿÿÿrO   r‚   rM   c           	      C   sž   |d d… }t j|dd}t j|j|dddd}|r€|jddjdd |¡}t j|t jdgd dd |¡gdd	}| j}n| |¡}| j}|||ƒ d S )
Nrª   r2   ©r)   T©Z
allow_fillr'   )rv   rv   r4   )	r   r   rR   Úto_frameZassignÚshiftÚconcatrx   r   )	r   r   r¬   ÚperiodsÚindicesÚsubsetr"   r!   Úcomparer   r   r   Útest_container_shiftD  s     ÿ
z%BaseMethodsTests.test_container_shiftc                 C   sB   |  d¡}|d |d kst‚|d |d< |d |d ks>t‚d S r   ©r±   r   r?   r   r   r   Útest_shift_0_periods[  s    
z%BaseMethodsTests.test_shift_0_periodsr³   c           	      C   sþ   |d d… }t |jƒrtj}ntj}z|||ƒ W n( tk
rZ   t t|ƒ› d¡ Y nX t	 
|¡}| |¡}t	 
||| |¡ƒ¡}|  ||¡ t	 |dgd dœ¡}| |¡}|dkrÌtjddddg}ndddtjtjg}t	 ||dœ¡}|  ||¡ d S )Nrª   z does not support diffg      ð?ru   r'   r   )r   r%   ÚoperatorÚxorÚsubÚ	Exceptionr   r   r   r   r   Zdiffr±   r   r6   r+   Únanrx   )	r   r   r³   ÚopÚsr!   r"   r9   rœ   r   r   r   Ú	test_diffb  s&    



zBaseMethodsTests.test_difféüÿÿÿc                 C   s4   |d d… }|  |¡}|j|dd}|  ||¡ d S )NrB   Tr¯   ©r±   rR   r…   )r   r   r³   r´   rµ   r!   r"   r   r   r   Útest_shift_non_empty_array|  s    
z+BaseMethodsTests.test_shift_non_empty_arrayc                 C   s*   |d d… }|  |¡}|}|  ||¡ d S )Nr   )r±   r…   )r   r   r³   Úemptyr!   r"   r   r   r   Útest_shift_empty_array‡  s    
z'BaseMethodsTests.test_shift_empty_arrayc                 C   s8   |  d¡}||k	st‚|d d…   d¡}||k	s4t‚d S )Nr   rB   r¸   r?   r   r   r   Útest_shift_zero_copies  s    
z'BaseMethodsTests.test_shift_zero_copiesc                 C   sp   |d d… }|d }|j d|d}| ddddg¡}|  ||¡ |j d|d}| ddddg¡}|  ||¡ d S )Nr‚   r   r'   )Ú
fill_valuerB   r­   rO   rÃ   )r   r   r   rÈ   r!   r"   r   r   r   Útest_shift_fill_value—  s    z&BaseMethodsTests.test_shift_fill_valuec              	   C   s&   t jtdd t|ƒ W 5 Q R X d S )Nzunhashable typerW   )r   rY   Ú	TypeErrorÚhash)r   r   r   r   r   Útest_not_hashable¢  s    z"BaseMethodsTests.test_not_hashablec                 C   s>   t  |¡}|r| ¡ }t j |¡}t j |¡}|  ||¡ d S r<   )r   r   r°   ÚutilZhash_pandas_objectÚassert_equal)r   r   Úas_framer›   rœ   r   r   r   Útest_hash_pandas_object_works§  s    
z.BaseMethodsTests.test_hash_pandas_object_worksc           
      C   sþ   |\}}}|  dddg¡}|r(t |¡}| |¡dks:t‚|j|dddksPt‚| |¡dksbt‚|j|dddksxt‚| |¡dksŠt‚|j|dddks t‚| |  ddg¡¡}tjddgtjd}t 	||¡ t dddg¡}	|j||	ddksút‚d S )	NrB   r   r'   Úright)ZsiderO   r$   )Úsorter)
rR   r   r   Zsearchsortedr   r+   r,   rE   rH   rI   )
r   rF   Ú	as_seriesrœ   Úcr›   r   r!   r"   rÒ   r   r   r   Útest_searchsorted°  s    

z"BaseMethodsTests.test_searchsortedc                 C   s®  |d |d kst ‚t|ƒ}|d d… \}}t |j||||g|jd¡}| ¡ }t ddddg¡}	|r€|j	dd}|	 
d	d¡}	| |	¡}
t |j||||g|jd¡}|r¸|j	dd}|  |
|¡ |j|	 dd
 |  ||¡ | ¡ }|rø|j	dd}t ddddg¡}	|j||||g|jd}|rDt d|i¡}t d|	i¡}	| |	|¡}
t |j||||g|jd¡}|r€|j	dd}|  |
|¡ |j|	 |dd
 |  ||¡ d S )Nr   r'   rB   r$   TFr›   r®   rM   )Zinplace)r   r   r   r   r^   r%   rŽ   r+   r,   r°   ZreshapeÚwhererÎ   Úmaskr6   )r   r   rS   rÏ   Úclsr›   rœ   Úorigr0   Zcondr!   r"   r    r   r   r   Útest_where_seriesÈ  sB    
ÿz"BaseMethodsTests.test_where_seriesÚrepeatsc                 C   s®   t |ƒj|d d… |jd}|r*t |¡}|r:t ||¡n| |¡}t|tƒrX|gd n|}dd„ t	||ƒD ƒ}t |ƒj||jd}|ržtj||j
 |¡d}|  ||¡ d S )NrO   r$   c                 S   s"   g | ]\}}t |ƒD ]}|‘qqS r   )Úrange)rš   r|   ÚnÚ_r   r   r   r   ü  s     
  z0BaseMethodsTests.test_repeat.<locals>.<listcomp>rw   )r   r^   r%   r   r   r+   Úrepeatr-   Úintr¢   r(   rÎ   )r   r   rÛ   rÓ   Ú	use_numpyr   r!   r"   r   r   r   Útest_repeató  s    
zBaseMethodsTests.test_repeatzrepeats, kwargs, error, msgr5   ÚnegativeÚshapeZfooÚbarz'foo'c              	   C   sB   t j||d* |r&tj||f|Ž n|j|f|Ž W 5 Q R X d S )NrW   )r   rY   r+   rß   )r   r   rÛ   ÚkwargsÚerrorr”   rá   r   r   r   Útest_repeat_raises  s    
z#BaseMethodsTests.test_repeat_raisesc                 C   sd   |  d¡}|dd … }|  ||¡ |  ddg¡}| |dg |dg |dd … g¡}|  ||¡ d S )Nr   r'   rO   rB   r‚   )Údeleter…   Z_concat_same_type)r   r   r!   r"   r   r   r   Útest_delete  s    
$zBaseMethodsTests.test_deletec                 C   sº   |dd …   d|d ¡}|  ||¡ |dd …   t|dd … ƒ |d ¡}|  ||¡ |d d…   d|d ¡}t t|ƒ¡}|dd… |dd …< t|ƒd |d< | |¡}|  ||¡ d S )Nr'   r   rM   r‚   rª   )Úinsertr…   r.   r+   ZarangerR   )r   r   r!   Ztakerr"   r   r   r   Útest_insert  s    &
zBaseMethodsTests.test_insertc              	   C   s‚   |}t  ttf¡ | d|¡ W 5 Q R X t  ttf¡ | d|¡ W 5 Q R X t  ttf¡ | t|ƒd |¡ W 5 Q R X d S )Nr   r‚   r'   )r   rY   rÊ   rZ   rë   r.   )r   r   Zinvalid_scalarÚitemr   r   r   Útest_insert_invalid-  s    z$BaseMethodsTests.test_insert_invalidc              	   C   sˆ   t |ƒ}t t¡ | |d |d ¡ W 5 Q R X t t¡ | | d |d ¡ W 5 Q R X t t¡ | d|d ¡ W 5 Q R X d S )Nr'   r   g      ø?)r.   r   rY   Ú
IndexErrorrë   rÊ   )r   r   Zubr   r   r   Útest_insert_invalid_loc9  s     z(BaseMethodsTests.test_insert_invalid_locc                 C   s8  t |ƒj|d gt|ƒ |jd}t |ƒj|gt|ƒ |jd}tj||dd}tj||dd}tj||dd}| |¡dks‚t‚| | ¡ ¡dks˜t‚| |¡dksªt‚| |¡dks¼t‚|d d…  |d d… ¡dksÞt‚|d d…  |d d… ¡dkst‚| d ¡dkst‚|dg  |d ¡dks4t‚d S )Nr   r$   F)Z	transposeTrB   rO   )	r   r^   r.   r%   rH   Zbox_expectedÚequalsr   rŽ   )r   r   rS   rÓ   rz   Zdata2r_   r   r   r   Útest_equalsF  s    ""$zBaseMethodsTests.test_equalsN)CÚ__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚmarkZparametrizer#   r1   r:   r;   r@   rG   rL   rN   rT   r]   r`   r+   r¾   re   rh   r,   r%   rl   rs   rt   ry   r   r   r*   r€   r‹   rŒ   r   r’   r“   r•   Úboolr–   r   Ú__annotations__r§   r©   r«   r·   r¹   rÁ   rÄ   rÆ   rÇ   rÉ   rÌ   rÐ   rÕ   rÚ   râ   rZ   rÊ   rè   rê   rì   rî   rð   r6   rò   r   r   r   r   r      s¾   





øþ

þþ



		2þ
4þ

	+

üþ	
	r   )r   rº   Znumpyr+   r   Zpandas._typingr   Zpandas.core.dtypes.commonr   Zpandas.core.dtypes.missingr   Zpandasr   Zpandas._testingZ_testingrH   Zpandas.core.sortingr   Z pandas.tests.extension.base.baser   r   r   r   r   r   Ú<module>   s   