U
    sVcsX                     @   sx   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	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)na_value_for_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 Z9dd Z:dd Z;dd Z<ejd>ejejej=gdd Z>dS )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-xj8nt62q/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
sttjdt| gt| |jd}n$tjd|jd}dt| ||dk< t|jtjkr|d	}| || d S )
Nr   dtypeT)	normalize   indexg        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   r6   r   )r   r7   r/   r    r!   r   r   r   test_series_countA   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_seriesH   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_argsortL   s    zBaseMethodsTests.test_argsortc                 C   s.   |  }tjdddgtjd}t|| d S r@   )rC   r*   r+   rD   tmassert_numpy_array_equalr   data_missing_for_sortingr    r!   r   r   r   test_argsort_missing_arrayR   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#   rB   rI   r   r   r   test_argsort_missingX   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&   rA   r      )argmaxr   argmintake)r   rE   rJ   na_valuer   r   r   r   test_argmin_argmax]   s    z#BaseMethodsTests.test_argmin_argmaxmethodrO   rP   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   rT   r   err_msgr   r   r   test_argmin_argmax_empty_arrayn   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 )NrU   r#   rV   )r   _from_sequencer$   r
   rX   rY   rZ   )r   rT   r   rR   r[   data_nar   r   r   test_argmin_argmax_all_nau   s    z*BaseMethodsTests.test_argmin_argmax_all_nazop_name, skipna, expected)idxmaxTr   )idxminTrA   )rO   Tr   )rP   TrA   r`   ra   )rO   FrL   )rP   FrL   c                 C   s*   t |}t|||d}t|| d S )Nskipna)r   r   rZ   rG   Zassert_almost_equal)r   rJ   Zop_namerc   r!   r/   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 rV   Frb   )r
   rX   NotImplementedErrorrP   rO   )r   rJ   r   r   r   r   +test_argmax_argmin_no_skipna_notimplemented   s
    z<BaseMethodsTests.test_argmax_argmin_no_skipna_notimplementedzna_position, expectedlastrA   r   r&   rD   r#   firstc                 C   s   t ||d}t|| d S )N)na_position)r   rG   rH   )r   rJ   rj   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)rl   keyrA   r   r&   )r   r   sort_valuesilocZnuniquer   )r   rE   rl   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 rm   )r   r   ro   rp   r   )r   rJ   rl   rq   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&   rA   r1   Br1   ru   r   r'   )r   r5   ro   rQ   assert_frame_equal)r   rE   rl   r8   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)   ry   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   rx   rT   Z
duplicatedr    r   r   r   test_unique   s
    zBaseMethodsTests.test_uniquena_sentinelrL   c              	   C   s   |dkrd}nd}t jt|d tj||d\}}W 5 Q R X tjdd||ddddgtjd	}|dd
dg}t 	|| | 
|| d S )NrL   )Specifying `na_sentinel=-1` is deprecatedDSpecifying the specific value to use for `na_sentinel` is deprecatedrV   r   r   r&   rA   r#         )rG   assert_produces_warningFutureWarningr   	factorizer*   r+   rD   rQ   rH   assert_extension_array_equal)r   data_for_groupingr   msgcodesuniquesexpected_codesexpected_uniquesr   r   r   test_factorize   s     zBaseMethodsTests.test_factorizec              	   C   s   |dkrd}nd}t jt|d( tj||d\}}|j|d\}}W 5 Q R X t || | || t|tt|kst	|j
|j
kst	d S )NrL   r   r   rV   r   )rG   r   r   r   r   rH   r   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+   rD   r   r]   r$   rG   rH   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&   r1   )r   r   )rQ   r   r5   rp   fillnar1   r.   r   )r   r7   arrr8   
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   )rQ   r   r   r   Z_valuesr   )r   r7   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.rV   r&   )r
   rX   rY   r   rQ   )r   r7   r   r   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 )	NrA   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   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   rp   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 )NrA   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   1  s     z5BaseMethodsTests.test_combine_add.<locals>.<listcomp>r   c                 S   s   | | S r;   r   r   r   r   r   r{   7  r|   c                    s   g | ]}|  qS r   r   r   r   r   r   r   9  s     )
r   r   r   r*   Zerrstater]   r   r   r   rp   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 )NrN   rA      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, indicesrN   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   r1   nameTZ
allow_fillr&   )ru   ru   r3   )	r   r   rQ   to_frameZassignshiftconcatrv   r   )	r   r   r   periodsindicessubsetr!   r    comparer   r   r   test_container_shiftE  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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      ?rt   r&   r   )r   r$   operatorxorsub	Exceptionr
   r   r   r   r   Zdiffr   r   r5   r*   nanrv   )	r   r   r   opsr    r!   r8   r   r   r   r   	test_diffc  s&    



zBaseMethodsTests.test_diffc                 C   s4   |d d }| |}|j|dd}| || d S )NrA   Tr   r   rQ   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   rA   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_valuerA   r   rN   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 typerV   )r
   rX   	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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 )	NrA   r   r&   right)ZsiderN   r#   )sorter)
rQ   r   r   Zsearchsortedr   r*   r+   rD   rG   rH   )
r   rE   	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&   rA   r#   TFr   r   rL   )Zinplace)r   r   r   r   r]   r$   copyr*   r+   r   Zreshapewherer   maskr5   )r   r   rR   r   clsr   r   origr/   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}|rtj||j
|d}| || d S )NrN   r#   c                 S   s"   g | ]\}}t |D ]}|qqS r   )range)r   rz   n_r   r   r   r     s     
  z0BaseMethodsTests.test_repeat.<locals>.<listcomp>r'   )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, msgr4   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 )NrV   )r
   rX   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&   rN   rA   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   rL   r   r   )insertr   r-   r*   ZarangerQ   )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
   rX   r   rY   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
   rX   
IndexErrorr   r   )r   r   Zubr   r   r   test_insert_invalid_loc:  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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	transposeTrA   rN   )	r   r]   r-   r$   rG   Zbox_expectedequalsr   r   )r   r   rR   r   rx   Zdata2r^   r   r   r   test_equalsG  s    ""$zBaseMethodsTests.test_equalsN)?__name__
__module____qualname____doc__r   r
   markZparametrizer"   r0   r9   r:   r?   rF   rK   rM   rS   r\   r_   r*   r   rd   rg   r+   r$   rk   rr   rs   rw   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   rY   r   r   r   r   r   r   r5   r   r   r   r   r   r      s   










	

	
2
4

	+

	
	r   )r   r   Znumpyr*   r
   Zpandas.core.dtypes.commonr   Zpandas.core.dtypes.missingr   Zpandasr   Zpandas._testingZ_testingrG   Zpandas.core.sortingr   Z pandas.tests.extension.base.baser   r   r   r   r   r   <module>   s   