U
    f/e                     @   s  d Z 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 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,d- d-e
j'Z(G d.d/ d/e
j)Z*G d0d1 d1e
j+Z,G d2d3 d3e
j-Z.G d4d5 d5e
j/Z0dS )6aj  
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StringDtype)basec                 C   s&   | j jdkrtd dd }|| S )Npyarrowz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-tiezk1ph/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   chunked,   s    r   c                 C   s
   t | dS )N)r   r   )Zstring_storager   r   r   r   1   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   data6   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_missing@   s    r.   c                 C   s$   |   dddg}|r t|S |S )NBCr)   )r%   r&   r   r-   r   r   r   data_for_sortingG   s    r1   c                 C   s&   |   dtjdg}|r"t|S |S )Nr/   r)   r*   r-   r   r   r   data_missing_for_sortingM   s    r2   c                   C   s   t jS r   )r+   r,   r   r   r   r   na_valueS   s    r3   c              
   C   s2   |   ddtjtjddddg}|r.t|S |S )Nr/   r)   r0   r*   r-   r   r   r   data_for_groupingX   s    r4   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   r8   a   s    zTestDtype.test_eq_with_str)__name__
__module____qualname__r8   __classcell__r   r   r:   r   r5   `   s   r5   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_markerr7   	test_viewr9   r(   r   rD   r:   r   r   rH   g   s    zTestInterface.test_view)r<   r=   r>   rH   r?   r   r   r:   r   r@   f   s   r@   c                   @   s   e Zd Zdd ZdS )TestConstructorsc                 C   s   d S r   r   r9   r(   r   r   r   test_from_dtypeo   s    z TestConstructors.test_from_dtypeN)r<   r=   r>   rL   r   r   r   r   rJ   n   s   rJ   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 rA   )	r   r   r   rD   rE   rF   rG   r7   test_transposerI   r:   r   r   rN   u   s    zTestReshaping.test_transpose)r<   r=   r>   rN   r?   r   r   r:   r   rM   t   s   rM   c                   @   s   e Zd ZdS )TestGetitemNr<   r=   r>   r   r   r   r   rO   |   s   rO   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 rA   )	r   r   r   rD   rE   rF   rG   r7   test_setitem_preserves_viewsrI   r:   r   r   rR      s    z(TestSetitem.test_setitem_preserves_views)r<   r=   r>   rR   r?   r   r   r:   r   rQ      s   rQ   c                   @   s   e Zd ZdS )TestMissingNrP   r   r   r   r   rS      s   rS   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)rU   )r+   Seriesr   Zraises	TypeErrorgetattr)r9   r(   Zall_numeric_reductionsrU   op_namesr   r   r   test_reduce_series_numeric   s    
z'TestNoReduce.test_reduce_series_numericN)r<   r=   r>   r   rD   Zparametrizer]   r   r   r   r   rT      s   rT   c                       s@   e Zd Zejjdd fddZejjdddd Z  ZS )TestMethodszreturns nullablerB   c                    s   t  ||S r   )r7   test_value_counts)r9   Zall_dataZdropnar:   r   r   r_      s    zTestMethods.test_value_countsc                 C   s   d S r   r   rK   r   r   r    test_value_counts_with_normalize   s    z,TestMethods.test_value_counts_with_normalize)	r<   r=   r>   r   rD   r   r_   r`   r?   r   r   r:   r   r^      s   r^   c                   @   s   e Zd ZdS )TestCastingNrP   r   r   r   r   ra      s   ra   c                   @   s   e Zd Zdd Zdd ZdS )TestComparisonOpsc                 C   s8   t |||}t |t||d}| || d S )Nboolean)rZ   ZastypeobjectZassert_series_equal)r9   r\   r(   r[   otherresultexpectedr   r   r   _compare_other   s    z TestComparisonOps._compare_otherc                 C   s"   |}t |}| |||d d S )Nabc)r+   rX   rh   )r9   r(   Zall_compare_operatorsr[   r\   r   r   r   test_compare_scalar   s    
z%TestComparisonOps.test_compare_scalarN)r<   r=   r>   rh   rj   r   r   r   r   rb      s   rb   c                   @   s   e Zd ZdS )TestParsingNrP   r   r   r   r   rk      s   rk   c                   @   s   e Zd ZdS )TestPrintingNrP   r   r   r   r   rl      s   rl   c                   @   s   e Zd ZdS )TestGroupByNrP   r   r   r   r   rm      s   rm   )1__doc__r#   Znumpyr   r   Zpandasr+   Zpandas.core.arrays.string_r   Zpandas.tests.extensionr   r   Zfixturer   r   r(   r.   r1   r2   r3   r4   ZBaseDtypeTestsr5   ZBaseInterfaceTestsr@   ZBaseConstructorsTestsrJ   ZBaseReshapingTestsrM   ZBaseGetitemTestsrO   ZBaseSetitemTestsrQ   ZBaseMissingTestsrS   ZBaseNoReduceTestsrT   ZBaseMethodsTestsr^   ZBaseCastingTestsra   ZBaseComparisonOpsTestsrb   ZBaseParsingTestsrk   ZBasePrintingTestsrl   ZBaseGroupbyTestsrm   r   r   r   r   <module>   sJ   


	





