U
    ¾mœd/#  ã                   @   s  d 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 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.ƒZ/G d/d0„ d0ej0ƒZ1G d1d2„ d2ej2ƒZ3G d3d4„ d4ej4ƒZ5G d5d6„ d6ej6ƒZ7G d7d8„ d8ej8ƒZ9G d9d:„ d:ej:ƒZ;G d;d<„ d<ej<ƒZ=d=d>„ 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)ÚPerformanceWarning)Úis_string_dtype)Ú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   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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   Úchunked1   s    r   c                 C   s
   t | d�S )N©r   r   )Zstring_storager   r   r   r   6   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 )Néd   )Ú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_missingE   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_sortingL   s    r5   c                 C   s&   |   ¡  dtjdg¡}|r"t|ƒS |S )Nr3   r-   r.   r1   r   r   r   Údata_missing_for_sortingR   s    r6   c                   C   s   t jS r   )r/   r0   r   r   r   r   Úna_valueX   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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<   f   s    zTestDtype.test_eq_with_strc                 C   s   t |ƒst‚d S r   )r   r   r=   r   r   r   Útest_is_not_string_typej   s    z!TestDtype.test_is_not_string_type)Ú__name__Ú
__module__Ú__qualname__r<   rA   Ú__classcell__r   r   r?   r   r9   e   s   r9   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚTestInterfacec                    s(   |j jdkrtjdd� tƒ  |¡ d S ©Nr   ú/2D support not implemented for ArrowStringArray©Úreason)r   r   r   r   r;   Ú	test_view©r>   r,   r   r?   r   r   rK   q   s    zTestInterface.test_view)rB   rC   rD   rK   rE   r   r   r?   r   rF   p   s   rF   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestConstructorsc                 C   s   d S r   r   )r>   r,   r   r   r   Útest_from_dtypex   s    z TestConstructors.test_from_dtypec                 C   sH   t jddd� tjdgtdd�d�}t|jtƒs4t‚|jjdksDt‚d S )Nr   z1.0.0)Z
minversionÚEr   ©r   )	r   Zimportorskipr/   ÚSeriesr   Ú
isinstancer   r   r   )r>   Úresultr   r   r   Útest_constructor_from_list|   s    z+TestConstructors.test_constructor_from_listN)rB   rC   rD   rN   rT   r   r   r   r   rM   w   s   rM   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚTestReshapingc                    s(   |j jdkrtjdd� tƒ  |¡ d S rG   )r   r   r   r   r;   Útest_transposerL   r?   r   r   rV   …   s    zTestReshaping.test_transpose)rB   rC   rD   rV   rE   r   r   r?   r   rU   „   s   rU   c                   @   s   e Zd ZdS )ÚTestGetitemN©rB   rC   rD   r   r   r   r   rW   ‹   s   rW   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚTestSetitemc                    s(   |j jdkrtjdd� tƒ  |¡ d S rG   )r   r   r   r   r;   Útest_setitem_preserves_viewsrL   r?   r   r   rZ   �   s    z(TestSetitem.test_setitem_preserves_views)rB   rC   rD   rZ   rE   r   r   r?   r   rY   �   s   rY   c                   @   s   e Zd ZdS )Ú	TestIndexNrX   r   r   r   r   r[   –   s   r[   c                       s,   e Zd Zdd„ Zdd„ Z‡ fdd„Z‡  ZS )ÚTestMissingc                 C   s"   |  ¡ }|dg }|  ||¡ d S )Nr"   )ZdropnaÚassert_extension_array_equal)r>   r2   rS   Úexpectedr   r   r   Útest_dropna_array›   s    
zTestMissing.test_dropna_arrayc              	   C   s€   ||  ¡   }|d }| |¡}||k	s,t‚|  ||¡ t t|jjdk¡� |jdd�}W 5 Q R X ||k	spt‚|  ||¡ d S )Nr   r   Zbackfill)Úmethod)	ÚisnaZfillnar   r]   ÚtmÚmaybe_produces_warningr   r   r   )r>   r,   ZvalidrS   r   r   r   Útest_fillna_no_op_returns_copy    s    
 
ÿz*TestMissing.test_fillna_no_op_returns_copyc              	      s>   t jt|d k	o|jjdkdd�� tƒ  ||¡ W 5 Q R X d S )Nr   F)Zcheck_stacklevel)rb   rc   r   r   r   r;   Útest_fillna_series_method)r>   r2   Zfillna_methodr?   r   r   re   ¯   s    ýz%TestMissing.test_fillna_series_method)rB   rC   rD   r_   rd   re   rE   r   r   r?   r   r\   š   s   r\   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)rg   )r/   rQ   r   ÚraisesÚ	TypeErrorÚgetattr)r>   r,   Zall_numeric_reductionsrg   Úop_nameÚserr   r   r   Útest_reduce_series_numeric¹   s    
z'TestNoReduce.test_reduce_series_numericN)rB   rC   rD   r   ÚmarkÚparametrizero   r   r   r   r   rf   ¸   s   rf   c                   @   s   e Zd Zdd„ ZdS )ÚTestMethodsc                 C   s    |d d…   ¡ }t || ¡   ¡}tj||jd�}|jdd� ¡ }tjdt	|ƒ gt	|ƒ |j
dd�}t|jdd	ƒd
kr†| d¡}n
| d¡}|  ||¡ d S )Né
   rP   T)Ú	normalizer"   Z
proportion©ÚindexÚnamer   Ú r   zdouble[pyarrow]ZFloat64)Úuniquer#   Úarrayra   r/   rQ   r   Zvalue_countsZ
sort_indexr   rv   rl   ÚastypeÚassert_series_equal)r>   r,   Úvaluesrn   rS   r^   r   r   r   Ú test_value_counts_with_normalizeÆ   s      ÿ
z,TestMethods.test_value_counts_with_normalizeN)rB   rC   rD   r~   r   r   r   r   rr   Å   s   rr   c                   @   s   e Zd ZdS )ÚTestCastingNrX   r   r   r   r   r   Ø   s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestComparisonOpsc           	      C   sZ   d|j › d�}t||ƒ|ƒ}|jjdkr,dnd}t| t¡|ƒ|ƒ |¡}|  ||¡ d S )NÚ__r   zboolean[pyarrow]Úboolean)rB   rl   r   r   r{   Úobjectr|   )	r>   rn   r,   ÚopÚotherrm   rS   r   r^   r   r   r   Ú_compare_otherÝ   s
    z TestComparisonOps._compare_otherc                 C   s   t  |¡}|  |||d¡ d S )NÚabc)r/   rQ   r†   )r>   r,   Zcomparison_oprn   r   r   r   Útest_compare_scalarä   s    
z%TestComparisonOps.test_compare_scalarN)rB   rC   rD   r†   rˆ   r   r   r   r   r€   Ü   s   r€   c                   @   s   e Zd ZdS )ÚTestParsingNrX   r   r   r   r   r‰   é   s   r‰   c                   @   s   e Zd ZdS )ÚTestPrintingNrX   r   r   r   r   rŠ   í   s   rŠ   c                       sB   e Zd Zej dddg¡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œ¡}|jd|d�j ¡ }t j|dd	�\}}|r|t j|dd
�}t jdddg|dd�}|  ||¡ n"t  |dddgdœ¡}|  	||¡ d S )Nr"   r	   é   é   )r-   r3   r3   )rŒ   T)Úsort)rw   g      @g      ð?g      @r-   ru   )r3   r-   )
r/   Z	DataFrameÚgroupbyr-   ZmeanZ	factorizeÚIndexrQ   r|   Zassert_frame_equal)	r>   rŒ   r8   ZdfrS   Ú_Zuniquesrv   r^   r   r   r   Útest_groupby_extension_aggò   s     z&TestGroupBy.test_groupby_extension_aggz4ignore:Falling back:pandas.errors.PerformanceWarningc                    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)
rB   rC   rD   r   rp   rq   r“   Úfilterwarningsr”   rE   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dd� d S )NrH   rI   )rR   r   r   r   rL   r   r   r   Úarrow_not_supported  s    
z Test2DCompat.arrow_not_supportedN)rB   rC   rD   r   Úfixturer—   r   r   r   r   r–     s   
r–   c              	   C   s^   | \}}}|   dddg¡}tj|d< |r2t |¡}d}tjt|d�� | |¡ W 5 Q R X d S )Nr	   r   r"   éÿÿÿÿzOsearchsorted requires array to be sorted, which is impossible with NAs present.)Úmatch)Ztaker/   r0   rQ   r   rj   Ú
ValueErrorZsearchsorted)r5   Z	as_seriesÚbÚcÚar   Úmsgr   r   r   Ú test_searchsorted_with_na_raises  s    


ÿr    )?Ú__doc__r'   Únumpyr#   r   Zpandas.errorsr   Zpandasr/   Zpandas._testingZ_testingrb   Zpandas.api.typesr   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BaseInterfaceTestsrF   ZBaseConstructorsTestsrM   ZBaseReshapingTestsrU   ZBaseGetitemTestsrW   ZBaseSetitemTestsrY   ZBaseIndexTestsr[   ZBaseMissingTestsr\   ZBaseNoReduceTestsrf   ZBaseMethodsTestsrr   ZBaseCastingTestsr   ZBaseComparisonOpsTestsr€   ZBaseParsingTestsr‰   ZBasePrintingTestsrŠ   ZBaseGroupbyTestsr‹   ZDim2CompatTestsr–   r    r   r   r   r   Ú<module>   sX   


	




