U
    f/e>O                     @   sl   d dl Z d dlZd dlZd dl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)is_bool_dtype)nargsort)BaseExtensionTestsc                   @   s  e Zd Z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 ejdDdEdFgdGdH Z!ejdDdEdFgdIdJ Z"dKdL Z#dMdN Z$dOdP Z%dQdR Z&dSdT Z'dUdV Z(dWdX Z)ejdYddgejdZdFd/d[d\dEdEgfd0d0d1d/d[d\gfd/dEdEd0d1d/gfgd]d^ Z*d_d` Z+ejdad1dFgdbdc Z,ejdZdddEdEggdEd1dEggd0d0d1ggd1dEd0ggd\dEdEgggdedf Z-ejdadddEd0d1d\gdgdh Z.didj Z/dkdl Z0dmdn Z1dodp Z2dqdr Z3dsdt Z4ejdud0d1d/d1d/d[ggdvdw Z5ejdxd/dyd1ie6dyfdEi e6dzfd1d/gi e6d{fd/d|d}ie7d~fgdd Z8dd Z9ejd>ejejej:gdd Z;dS )BaseMethodsTestsz%Various Series and DataFrame methods.c                 C   s<   t |dstd t|j}|jd }|jdks8td S )Nvalue_countszvalue_counts is not implementeddropnaT)	hasattrpytestskipinspect	signaturer   
parametersdefaultAssertionError)selfdatasigkwarg r   G/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/extension/base/methods.py test_value_counts_default_dropna   s
    


z1BaseMethodsTests.test_value_counts_default_dropnar   TFc                 C   sf   |d d }|r&t ||   }n|}t|j|d }t|j|d }| || d S )N
   )r   )nparray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
sttjdt| gt| |jd}n$tjd|jd}dt| ||dk< | || d S )	Nr   dtypeT)	normalize   indexg        r   )uniquer   r   r   r   r   r$   r   r   
isinstanceZCategoricallenr(   r   )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_count7   s    zBaseMethodsTests.test_countc                 C   s&   t |}| }d}||ks"td S )Nr&   )r   r   r4   r   )r   r5   r-   r    r!   r   r   r   test_series_count=   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_seriesD   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   int64r   )r   data_for_sortingr    r!   r   r   r   test_argsortH   s    zBaseMethodsTests.test_argsortc                 C   sN   |  }tjdddgtdd}|jddd}|jddd}t|| d S )	Nr>   r   r&   intr#   rA   safe)Zcasting)r@   r   r   r$   Zastypetmassert_numpy_array_equalr   data_missing_for_sortingr    r!   r   r   r   test_argsort_missing_arrayM   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#   r?   rH   r   r   r   test_argsort_missingU   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&   r>   r      )argmaxr   argmintake)r   rB   rI   na_valuer   r   r   r   test_argmin_argmaxZ   s    z#BaseMethodsTests.test_argmin_argmaxmethodrN   rO   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   rS   r   err_msgr   r   r   test_argmin_argmax_empty_arrayk   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 )NrT   r#   rU   )type_from_sequencer$   r	   rW   rX   rY   )r   rS   r   rQ   rZ   data_nar   r   r   test_argmin_argmax_all_nar   s    z*BaseMethodsTests.test_argmin_argmax_all_nazop_name, skipna, expected)idxmaxTr   )idxminTr>   )rN   Tr   )rO   Tr>   r`   ra   )rN   FrK   )rO   FrK   c                 C   s*   t |}t|||d}t|| d S )Nskipna)r   r   rY   rF   Zassert_almost_equal)r   rI   Zop_namerc   r!   r-   r    r   r   r   test_argreduce_seriesz   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 rU   Frb   )r	   rW   NotImplementedErrorrO   rN   )r   rI   r   r   r   r   +test_argmax_argmin_no_skipna_notimplemented   s
    z<BaseMethodsTests.test_argmax_argmin_no_skipna_notimplementedzna_position, expectedlastr>   r   r&   intpr#   firstc                 C   s   t ||d}t|| d S )N)na_position)r   rF   rG   )r   rI   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   keyr>   r   r&   )r   r   sort_valuesilocZnuniquer   )r   rB   rm   sort_by_keyr-   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   rI   rm   rr   r-   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&   r>   r/   Br/   rv   r   r'   )r   r3   rp   rP   assert_frame_equal)r   rB   rm   r6   r    r!   r   r   r   test_sort_values_frame   s     z'BaseMethodsTests.test_sort_values_frameboxc                 C   s   | S r9   r   xr   r   r   <lambda>       zBaseMethodsTests.<lambda>c                 C   s   |   S r9   )r)   rz   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   ry   rS   Z
duplicatedr    r   r   r   test_unique   s
    zBaseMethodsTests.test_uniquena_sentinelrK   c              	   C   s^   t j||d\}}tjdd||ddddgtjd}|dddg}t|| | || d S )Nr   r   r&   r>   r#         )	r   	factorizer   r   ri   rP   rF   rG   assert_extension_array_equal)r   data_for_groupingr   codesuniquesexpected_codesexpected_uniquesr   r   r   test_factorize   s     zBaseMethodsTests.test_factorizec                 C   sh   t j||d\}}|j|d\}}t|| | || t|tt |ksTt|j|jksdtd S )Nr   )	r   r   rF   rG   r   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   ri   r\   r]   r$   rF   rG   r   )r   r   r   r   r   r   r   r   r   test_factorize_empty   s
    z%BaseMethodsTests.test_factorize_emptyc                 C   sH   | ddg}td|i}|jd }||}|jj|jjk	sDtd S )Nr&   r/   )r   r   )rP   r   r3   rq   fillnar/   r,   r   )r   r5   arrr6   
filled_valr    r   r   r   test_fillna_copy_frame   s
    

z'BaseMethodsTests.test_fillna_copy_framec                 C   sL   | ddg}t|}|d }||}|j|jk	s:t|j|ksHtd S )Nr&   r   )rP   r   r   r   Z_valuesr   )r   r5   r   r-   r   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.rU   r&   )r	   rW   rX   r   rP   )r   r5   msgr   r   r   test_fillna_length_mismatch  s    z,BaseMethodsTests.test_fillna_length_mismatchc                    s   |d\}}t |}t |}||dd }t dd tt|t|D }| || |jd  | dd }t  fddt|D }| || d S )	Nr>   c                 S   s   | |kS r9   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   c                 S   s   | |kS r9   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   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 )Nr>   c                 S   s   | | S r9   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   "  s     z5BaseMethodsTests.test_combine_add.<locals>.<listcomp>r   c                 S   s   | | S r9   r   r   r   r   r   r|   (  r}   c                    s   g | ]}|  qS r   r   r   r   r   r   r   *  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 )NrM   r>      r   r'   )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, indicesrM   r   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   r/   nameTZ
allow_fillr&   )rv   rv   r1   )	r   r   rP   to_frameZassignshiftconcatrw   r   )	r   r   r   periodsindicessubsetr!   r    comparer   r   r   test_container_shift6  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_periodsM  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rt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   r3   r   nanrw   )	r   r   r   opsr    r!   r6   r   r   r   r   	test_diffT  s&    



zBaseMethodsTests.test_diffc                 C   s4   |d d }| |}|j|dd}| || d S )Nr>   Tr   r   rP   r   )r   r   r   r   r   r    r!   r   r   r   test_shift_non_empty_arrayn  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_arrayy  s    
z'BaseMethodsTests.test_shift_empty_arrayc                 C   s8   | d}||k	st|d d  d}||k	s4td S )Nr   r>   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_valuer>   r   rM   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 typerU   )r	   rW   	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 r9   )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st|j|dddkst|| ddg}tjddgtjd}t	|| tdddg}	|j||	ddkstd S )	Nr>   r   r&   right)ZsiderM   r#   )sorter)
rP   r   r   Zsearchsortedr   r   r   ri   rF   rG   )
r   rB   	as_seriesr   cr   r   r    r!   r   r   r   r   test_searchsorted  s    

z"BaseMethodsTests.test_searchsortedc                 C   sT  |d |d kst t|}|d d \}}t|j||||g|jd}tddddg}|rx|jdd}|	d	d}|
|}	t|j||||g|jd}
|r|
jdd}
| |	|
 tddddg}|j||||g|jd}|rtd|i}td|i}|
||}	t|j||||g|jd}
|rD|
jdd}
| |	|
 d S )
Nr   r&   r>   r#   TFr   r   rK   )r   r\   r   r   r]   r$   r   r   r   Zreshapewherer   r3   )r   r   rQ   r   clsr   r   r-   Zcondr    r!   r   r   r   r   test_where_series  s2    
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}|rtj||j
|d}| || d S )NrM   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>r'   )r\   r]   r$   r   r   r   repeatr*   rD   r   r(   r   )r   r   r   r   	use_numpyr   r    r!   r   r   r   test_repeat  s    
zBaseMethodsTests.test_repeatzrepeats, kwargs, error, msgr2   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 )NrU   )r	   rW   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&   rM   r>   r   )deleter   Z_concat_same_type)r   r   r    r!   r   r   r   test_delete  s    
$zBaseMethodsTests.test_deletec                 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st|| dkst||dkst||dkst|d d |d d dkst|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	transposeTr>   rM   )	r\   r]   r+   r$   rF   Zbox_expectedequalsr   copy)r   r   rQ   r   ry   Zdata2r^   r   r   r   test_equals  s    ""$zBaseMethodsTests.test_equalsN)<__name__
__module____qualname____doc__r   r	   markZparametrizer"   r.   r7   r8   r=   rC   rJ   rL   rR   r[   r_   r   r   rd   rg   r   r$   rl   rs   rt   rx   r   r   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rX   r   r   r   r3   r   r   r   r   r   r      s   










	


		
2
4

	!

	
	r   )r   r   Znumpyr   r	   Zpandas.core.dtypes.commonr   Zpandasr   Zpandas._testingZ_testingrF   Zpandas.core.sortingr   Z pandas.tests.extension.base.baser   r   r   r   r   r   <module>   s   