U
    -e/#                     @   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   c/var/www/html/Darija-Ai-Train/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 )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_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   


	




