U
    sVcd4                     @   s  d Z ddlZddlZddlZddlmZ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 ddlmZ dd	 Zejd
dgddd Zejdd Zejdd Zejdd Zejdd Zejdd Zejdd Zejdd ZG dd dejZ G dd  d ej!Z"G d!d" d"ej#Z$G d#d$ d$ej%Z&G d%d& d&ej'Z(G d'd( d(ej)Z*G d)d* d*ej+Z,G d+d, d,ej-Z.G d-d. d.ej/Z0G d/d0 d0ej1Z2G d1d2 d2ej3Z4G d3d4 d4ej5Z6G d5d6 d6ej7Z8G d7d8 d8ej9Z:G d9d: d:ej;Z<G d;d< d<ej=Z>dS )=aj  
This file contains a minimal set of tests for compliance with the extension
array interface test suite, and should contain no other tests.
The test suite for the full functionality of the array is located in
`pandas/tests/arrays/`.

The tests in this file are inherited from the BaseExtensionTests, and only
minimal tweaks should be applied to get the tests passing (by overwriting a
parent method).

Additional tests should either be added to one of the BaseExtensionTests
classes (if they are relevant for the extension interface for all dtypes), or
be added to the array-specific tests in `pandas/tests/arrays/`.

    N)pa_version_under6p0pa_version_under7p0)PerformanceWarning)ArrowStringArrayStringDtype)basec                 C   s&   | j jdkrtd dd }|| S )Npyarrowz-only applicable for pyarrow chunked array n/ac                 S   sV   dd l }| j}t|d }||d | j||d  j}|jdksJtt| |S )Nr      )r	   _datalenZchunked_arraychunksZ
num_chunksAssertionErrortype)arrpaZarrow_arraysplit r   F/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/extension/test_string.py_split_array&   s    z!split_array.<locals>._split_array)dtypestoragepytestskip)r   r   r   r   r   split_array"   s    
r   TF)paramsc                 C   s   | j S N)param)requestr   r   r   chunked4   s    r   c                 C   s
   t | dS )N)r   r   )Zstring_storager   r   r   r   9   s    r   c                 C   s\   t jjttjdd}|d |d kr>t jjttjdd}q|  |}|rXt|S |S )Nd   )sizer      )	nprandomchoiceliststringascii_lettersconstruct_array_type_from_sequencer   )r   r   stringsr   r   r   r   data>   s
    r,   c                 C   s$   |   tjdg}|r t|S |S )zLength 2 array with [NA, Valid]Ar)   r*   pdNAr   r   r   r   r   r   r   data_missingH   s    r2   c                 C   s$   |   dddg}|r t|S |S )NBCr-   )r)   r*   r   r1   r   r   r   data_for_sortingO   s    r5   c                 C   s&   |   dtjdg}|r"t|S |S )Nr3   r-   r.   r1   r   r   r   data_missing_for_sortingU   s    r6   c                   C   s   t jS r   )r/   r0   r   r   r   r   na_value[   s    r7   c              
   C   s2   |   ddtjtjddddg}|r.t|S |S )Nr3   r-   r4   r.   r1   r   r   r   data_for_grouping`   s    r8   c                       s   e Zd Z fddZ  ZS )	TestDtypec                    s&   |d|j  dkstt | d S )Nzstring[])r   r   supertest_eq_with_str)selfr   	__class__r   r   r<   i   s    zTestDtype.test_eq_with_str)__name__
__module____qualname__r<   __classcell__r   r   r>   r   r9   h   s   r9   c                       s   e Zd Z fddZ  ZS )TestInterfacec                    s6   |j jdkr&tjjdd}|j| t | d S Nr	   znot implementedreason)	r   r   r   markxfailnode
add_markerr;   	test_viewr=   r,   r   rH   r>   r   r   rL   o   s    zTestInterface.test_view)r@   rA   rB   rL   rC   r   r   r>   r   rD   n   s   rD   c                   @   s   e Zd Zdd ZdS )TestConstructorsc                 C   s   d S r   r   r=   r,   r   r   r   test_from_dtypew   s    z TestConstructors.test_from_dtypeN)r@   rA   rB   rP   r   r   r   r   rN   v   s   rN   c                       s   e Zd Z fddZ  ZS )TestReshapingc                    s6   |j jdkr&tjjdd}|j| t | d S rE   )	r   r   r   rH   rI   rJ   rK   r;   test_transposerM   r>   r   r   rR   }   s    zTestReshaping.test_transpose)r@   rA   rB   rR   rC   r   r   r>   r   rQ   |   s   rQ   c                   @   s   e Zd ZdS )TestGetitemNr@   rA   rB   r   r   r   r   rS      s   rS   c                       s   e Zd Z fddZ  ZS )TestSetitemc                    s6   |j jdkr&tjjdd}|j| t | d S rE   )	r   r   r   rH   rI   rJ   rK   r;   test_setitem_preserves_viewsrM   r>   r   r   rV      s    z(TestSetitem.test_setitem_preserves_views)r@   rA   rB   rV   rC   r   r   r>   r   rU      s   rU   c                   @   s   e Zd ZdS )	TestIndexNrT   r   r   r   r   rW      s   rW   c                   @   s   e Zd Zdd ZdS )TestMissingc              	   C   sF   t tto|jjdk | }W 5 Q R X |dg }| || d S )Nr	   r"   )tmmaybe_produces_warningr   r   r   r   dropnaZassert_extension_array_equal)r=   r2   resultexpectedr   r   r   test_dropna_array   s    
zTestMissing.test_dropna_arrayN)r@   rA   rB   r^   r   r   r   r   rX      s   rX   c                   @   s&   e Zd Zejdddgdd ZdS )TestNoReduceskipnaTFc              	   C   sD   |}|dkrd S t |}tt t|||d W 5 Q R X d S )N)minmax)r`   )r/   Seriesr   raises	TypeErrorgetattr)r=   r,   Zall_numeric_reductionsr`   op_nameserr   r   r   test_reduce_series_numeric   s    
z'TestNoReduce.test_reduce_series_numericN)r@   rA   rB   r   rH   parametrizeri   r   r   r   r   r_      s   r_   c                       sX  e Zd Z fddZ fddZ fddZejddd	d
ddde	j
fdde	j
fddg fddZejdddgdd Zejd fddZ fddZejdde	jddd ge	d!d"fd#e	jd ddge	d!d"fg fd$d%Zejd&ddg fd'd(Zejd&ddg fd)d*Zejd&ddg fd+d,Z  ZS )-TestMethodsc              	      s>   t jttot|jdddkdd t | W 5 Q R X d S Nr    r	   F)Zcheck_stacklevel)rY   rZ   r   r   rf   r   r;   test_argsort)r=   r5   r>   r   r   rn      s    zTestMethods.test_argsortc              	      s>   t jttot|jdddkdd t | W 5 Q R X d S rl   rY   rZ   r   r   rf   r   r;   test_argsort_missingr=   r6   r>   r   r   rp      s    z TestMethods.test_argsort_missingc                    s<   t r(|jjdkr(|jtjjtdd t	 
||| d S Nr	   z min_max not supported in pyarrow)rd   rG   )r   r   r   rJ   rK   r   rH   rI   NotImplementedErrorr;   test_argmin_argmax)r=   r5   r6   r7   r   r>   r   r   rt      s    zTestMethods.test_argmin_argmaxzop_name, skipna, expected)idxmaxTr   )idxminTr
   )argmaxTr   )argminTr
   ru   Frv   )rw   F)rx   Fry   c                    sB   t r,|jjdkr,|r,|jtjjtdd t	 
|||| d S rr   )r   r   r   rJ   rK   r   rH   rI   rs   r;   test_argreduce_series)r=   r6   rg   r`   r]   r   r>   r   r   rz      s$    
   z!TestMethods.test_argreduce_seriesr[   Tc              	   C   s   |d d }|r ||    }n|}tttoPt|jdddkoP|oNd|jjk  t	
|j|d }W 5 Q R X tttot|jdddko|od|jjk  t	
|j|d }W 5 Q R X | || d S )N
   r   rm   r	   r2   )r[   )ZisnarY   rZ   r   r   rf   r   rJ   Znodeidr/   rc   Zvalue_countsZ
sort_indexassert_series_equal)r=   Zall_datar[   r   otherr\   r]   r   r   r   test_value_counts   s*      zTestMethods.test_value_counts4ignore:Falling back:pandas.errors.PerformanceWarningc                    s   t  | d S r   )r;    test_value_counts_with_normalizerO   r>   r   r   r     s    z,TestMethods.test_value_counts_with_normalizec              	      s>   t jttot|jdddkdd t | W 5 Q R X d S rl   ro   rq   r>   r   r   test_argsort_missing_array  s    z&TestMethods.test_argsort_missing_arrayzna_position, expectedlastr
   r   r"   Zintp)r   firstc              	      sB   t jttot|jdddkdd t ||| W 5 Q R X d S rl   )rY   rZ   r   r   rf   r   r;   test_nargsort)r=   r6   Zna_positionr]   r>   r   r   r     s    	zTestMethods.test_nargsort	ascendingc              	      sB   t jttot|jdddkdd t ||| W 5 Q R X d S rl   )rY   rZ   r   r   rf   r   r;   test_sort_values)r=   r5   r   sort_by_keyr>   r   r   r      s    zTestMethods.test_sort_valuesc              	      sB   t jttot|jdddkdd t ||| W 5 Q R X d S rl   )rY   rZ   r   r   rf   r   r;   test_sort_values_missing)r=   r6   r   r   r>   r   r   r   *  s      z$TestMethods.test_sort_values_missingc              	      s@   t jttot|jdddkdd t || W 5 Q R X d S rl   )rY   rZ   r   r   rf   r   r;   test_sort_values_frame)r=   r5   r   r>   r   r   r   8  s    z"TestMethods.test_sort_values_frame)r@   rA   rB   rn   rp   rt   r   rH   rj   r#   nanrz   r~   filterwarningsr   r   arrayr   r   r   r   r   rC   r   r   r>   r   rk      sD   		



	
	rk   c                   @   s   e Zd ZdS )TestCastingNrT   r   r   r   r   r   C  s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestComparisonOpsc                 C   sF   d|j  d}t|||}t|t||d}| || d S )N__boolean)r@   rf   Zastypeobjectr|   )r=   rh   r,   opr}   rg   r\   r]   r   r   r   _compare_otherH  s    z TestComparisonOps._compare_otherc                 C   s   t |}| |||d d S )Nabc)r/   rc   r   )r=   r,   Zcomparison_oprh   r   r   r   test_compare_scalarN  s    
z%TestComparisonOps.test_compare_scalarN)r@   rA   rB   r   r   r   r   r   r   r   G  s   r   c                   @   s   e Zd ZdS )TestParsingNrT   r   r   r   r   r   S  s   r   c                   @   s   e Zd ZdS )TestPrintingNrT   r   r   r   r   r   W  s   r   c                       sN   e Zd Zejdddgdd Z fddZejd fd	d
Z	  Z
S )TestGroupByas_indexTFc           	   
   C   s   t ddddddddg|d}ttto:t|jdddk |jd	|d
j	
 }W 5 Q R X tttoxt|jdddk t j|dd\}}W 5 Q R X |rt jj|d	d}t jdddg|dd}| || n"t |dddgd}| || d S )Nr"   r
         )r-   r3   r   rm   r	   r3   )r   T)sort)nameg      @g      ?g      @r-   )indexr   )r3   r-   )r/   Z	DataFramerY   rZ   r   r   rf   r   groupbyr-   ZmeanZ	factorizeZIndexZ_with_inferrc   r|   Zassert_frame_equal)	r=   r   r8   Zdfr\   _Zuniquesr   r]   r   r   r   test_groupby_extension_agg\  s&     z&TestGroupBy.test_groupby_extension_aggc              	      s>   t jttot|jdddkdd t | W 5 Q R X d S rl   )rY   rZ   r   r   rf   r   r;    test_groupby_extension_transform)r=   r8   r>   r   r   r   t  s    z,TestGroupBy.test_groupby_extension_transformr   c                    s   t  || d S r   )r;   test_groupby_extension_apply)r=   r8   Zgroupby_apply_opr>   r   r   r   }  s    z(TestGroupBy.test_groupby_extension_apply)r@   rA   rB   r   rH   rj   r   r   r   r   rC   r   r   r>   r   r   [  s
   
	
r   c                   @   s    e Zd Zejdddd ZdS )Test2DCompatT)Zautousec                 C   s(   t |tr$tjjdd}|j| d S )Nz/2D support not implemented for ArrowStringArrayrF   )
isinstancer   r   rH   rI   rJ   rK   rM   r   r   r   arrow_not_supported  s
    
z Test2DCompat.arrow_not_supportedN)r@   rA   rB   r   fixturer   r   r   r   r   r     s   
r   )?__doc__r'   Znumpyr#   r   Zpandas.compatr   r   Zpandas.errorsr   Zpandasr/   Zpandas._testingZ_testingrY   Zpandas.core.arraysr   Zpandas.core.arrays.string_r   Zpandas.tests.extensionr   r   r   r   r   r,   r2   r5   r6   r7   r8   ZBaseDtypeTestsr9   ZBaseInterfaceTestsrD   ZBaseConstructorsTestsrN   ZBaseReshapingTestsrQ   ZBaseGetitemTestsrS   ZBaseSetitemTestsrU   ZBaseIndexTestsrW   ZBaseMissingTestsrX   ZBaseNoReduceTestsr_   ZBaseMethodsTestsrk   ZBaseCastingTestsr   ZBaseComparisonOpsTestsr   ZBaseParsingTestsr   ZBasePrintingTestsr   ZBaseGroupbyTestsr   ZDim2CompatTestsr   r   r   r   r   <module>   sX   


	




 '