a
    j=ic6<                     @   s  d Z ddlZddlZddlmZ ddlmZ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 edd	d
ZejZdHeed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"ejd"d# Z#ejd$d% Z$ej%&d%Z'G d&d' d'Z(G d(d) d)e(ej)Z*G d*d+ d+e(ej+Z,G d,d- d-e(ej-Z.G d.d/ d/e(ej/Z0G d0d1 d1e(ej1Z2G d2d3 d3e(ej3Z4G d4d5 d5e(ej5Z6G d6d7 d7e(ej7Z8G d8d9 d9e(ej9Z:G d:d; d;e(ej;Z<e'G d<d= d=e(ej=Z>G d>d? d?e(ej?Z@G d@dA dAe(ejAZBG dBdC dCe(ejCZDe'G dDdE dEe(ejEZFG dFdG dGe(ejGZHdS )Ia  
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/`.

Note: we do not bother with base.BaseIndexTests because PandasArray
will never be held in an Index.
    N)can_hold_element)ExtensionDtypePandasDtype)PandasArray)blocks)base)returnc                 C   s   t |tr| }t| |S N)
isinstancer   to_numpyr   )objelement r   r/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pandas/tests/extension/test_numpy.py_can_hold_element_patched"   s    
r   
Attributes)attrr   c                 C   st   | dkrbt |dd}t |dd}t|trBt|tsB||j}n t|trbt|tsb||j}t| ||| dS )zh
    patch tm.assert_attr_equal so PandasDtype("object") is closed enough to
    np.dtype("object")
    dtypeN)getattrr
   r   astypenumpy_dtypeorig_assert_attr_equal)r   leftrightr   ZlattrZrattrr   r   r   _assert_attr_equal+   s    r   floatobject)paramsc                 C   s   t t| jS r	   )r   npr   param)requestr   r   r   r   ;   s    r   c                 c   s^   |   B}|tdd |tdt |tjdt dV  W d   n1 sP0    Y  dS )a  
    A monkeypatch to tells pandas to let us in.

    By default, passing a PandasArray to an index / series / frame
    constructor will unbox that PandasArray to an ndarray, and treat
    it as a non-EA column. We don't want people using EAs without
    reason.

    The mechanism for this is a check against ABCPandasArray
    in each constructor.

    But, for testing, we need to allow them in pandas. So we patch
    the _typ of PandasArray, so that we evade the ABCPandasArray
    check.
    Z_typ	extensionr   assert_attr_equalN)contextsetattrr   r   r   tmZ	assertersr   )Zmonkeypatchmr   r   r   allow_in_pandas@   s
    
r'   c                 C   s:   |j dkr$tdd tdD jS ttjdd|jdS )Nr   c                 S   s   g | ]
}|fqS r   r   ).0ir   r   r   
<listcomp>[       zdata.<locals>.<listcomp>d      e   r   )	r   pdSeriesrangearrayr   r   arange_dtyper'   r   r   r   r   dataX   s    
r7   c                 C   s6   |j dkr"ttjtjdgtdS tttjdgS )Nr   r-   r/   g      ?r   r   r   r3   nanr   r6   r   r   r   data_missing_   s    
r;   c                   C   s   t jS r	   )r   r:   r   r   r   r   na_valuef   s    r<   c                  C   s   dd } | S )Nc                 S   s   t | ot |S r	   )r   isnan)abr   r   r   cmpm   s    zna_cmp.<locals>.cmpr   )r@   r   r   r   na_cmpk   s    rA   c                 C   s:   |j dkr(ttjg dtddd S ttg dS )ziLength-3 array with a known sort order.

    This should be three items [B, C, A] with
    A < B < C
    r   )r         r8   r/   r-   N)r-   rC   r   )r   r   r   r3   r   r6   r   r   r   data_for_sortings   s    
rF   c                 C   s:   |j dkr$ttjdtjdgtdS ttdtjdgS )zvLength-3 array with a known sort order.

    This should be three items [B, NA, A] with
    A < B and NA missing.
    r   r8   )r   r/   r-   r   r9   r6   r   r   r   data_missing_for_sorting   s    
rG   c              
   C   sN   |j dkrd\}}}ntd\}}}ttj||tjtj||||g|j dS )zData for factorization, grouping, and unique tests.

    Expected to be like [B, B, NA, NA, A, A, B, C]

    Where A < B < C and NA is missing
    r   )r8   rB   rD   rE   r/   )r   r   r4   r   r3   r:   )r'   r   r>   r?   cr   r   r   data_for_grouping   s    
"rI   c                 C   s&   | dkr"t jjdd}|j| dS )a  
    Tests for PandasArray with nested data. Users typically won't create
    these objects via `pd.array`, but they can show up through `.array`
    on a Series with nested data. Many of the base tests fail, as they aren't
    appropriate for nested data.

    This fixture allows these tests to be skipped when used as a usefixtures
    marker to either an individual test or a test class.
    r   Fails for object dtypereasonN)pytestmarkxfailnode
add_marker)r   r    rN   r   r   r   skip_numpy_object   s    rR   c                   @   s   e Zd Zedd ZdS )BaseNumPyTestsc                 O   sN   t |tjr4t |jts4t |jtr4|t|j}tj||g|R i |S r	   )	r
   r0   r1   r   r   r   r   r%   assert_series_equal)clsr   r   argskwargsr   r   r   rT      s    


z"BaseNumPyTests.assert_series_equalN)__name__
__module____qualname__classmethodrT   r   r   r   r   rS      s   rS   c                       s    e Zd Ze fddZ  ZS )TestCastingc                    s   t  | d S r	   )supertest_astype_strselfr7   	__class__r   r   r^      s    zTestCasting.test_astype_str)rX   rY   rZ   skip_nestedr^   __classcell__r   r   ra   r   r\      s   r\   c                       s6   e Zd Zejjdddd Ze fddZ  Z	S )TestConstructorszWe don't register our dtyperK   c                 C   s   d S r	   r   r_   r   r   r   test_from_dtype   s    z TestConstructors.test_from_dtypec                    s   t  || d S r	   )r]   )test_series_constructor_scalar_with_index)r`   r7   r   ra   r   r   rg      s    z:TestConstructors.test_series_constructor_scalar_with_index)
rX   rY   rZ   rM   rN   skiprf   rc   rg   rd   r   r   ra   r   re      s   
re   c                       s   e Zd Z fddZ  ZS )	TestDtypec                    s<   |j jdkr,|jtjjd|j j d t | d S )Nr   z2PandasArray expectedly clashes with a NumPy name: rK   )	r   r   rP   rQ   rM   rN   rO   r]   test_check_dtype)r`   r7   r    ra   r   r   rj      s    zTestDtype.test_check_dtype)rX   rY   rZ   rj   rd   r   r   ra   r   ri      s   ri   c                       s    e Zd Ze fddZ  ZS )TestGetitemc                    s   t  | d S r	   )r]   test_getitem_scalarr_   ra   r   r   rl      s    zTestGetitem.test_getitem_scalar)rX   rY   rZ   rc   rl   rd   r   r   ra   r   rk      s   rk   c                       s   e Zd Z fddZ  ZS )TestGroupbyc                    s   t  || d S r	   )r]   test_groupby_extension_apply)r`   rI   Zgroupby_apply_opra   r   r   rn      s    z(TestGroupby.test_groupby_extension_apply)rX   rY   rZ   rn   rd   r   r   ra   r   rm      s   rm   c                       s    e Zd Ze fddZ  ZS )TestInterfacec                    s   t  | d S r	   )r]   test_array_interfacer_   ra   r   r   rp      s    z"TestInterface.test_array_interface)rX   rY   rZ   rc   rp   rd   r   r   ra   r   ro      s   ro   c                       s   e Zd Ze fddZe fddZe fddZe fddZej	j
d	d
 fddZ fddZe fddZ  ZS )TestMethodsc                    s   t  | d S r	   )r]   test_shift_fill_valuer_   ra   r   r   rr      s    z!TestMethods.test_shift_fill_valuec                    s   t  | d S r	   )r]   test_fillna_copy_framer`   r;   ra   r   r   rs      s    z"TestMethods.test_fillna_copy_framec                    s   t  | d S r	   )r]   test_fillna_copy_seriesrt   ra   r   r   ru      s    z#TestMethods.test_fillna_copy_seriesc                    s   t  || d S r	   )r]   test_searchsorted)r`   rF   Z	as_seriesra   r   r   rv     s    zTestMethods.test_searchsortedz"PandasArray.diff may fail on dtyperK   c                    s   t  ||S r	   )r]   	test_diff)r`   r7   Zperiodsra   r   r   rw     s    zTestMethods.test_diffc                    s6   |j jtkr&tjjdd}|j| t 	| d S )Nz$Dimension mismatch in np.concatenaterK   )
r   r   r   rM   rN   rO   rP   rQ   r]   test_insert)r`   r7   r    rN   ra   r   r   rx   
  s    zTestMethods.test_insertc                    s   t  || d S r	   )r]   test_insert_invalidr`   r7   Zinvalid_scalarra   r   r   ry     s    zTestMethods.test_insert_invalid)rX   rY   rZ   rc   rr   rs   ru   rv   rM   rN   rO   rw   rx   ry   rd   r   r   ra   r   rq      s   rq   c                       sh   e Zd ZdZdZdZdZe fddZedd Z	e fddZ
 fdd	Ze fd
dZ  ZS )TestArithmeticsNc                    s   t  | d S r	   )r]   test_divmodr_   ra   r   r   r|     s    zTestArithmetics.test_divmodc                 C   s    t |}| j|t|d d d S )N)exc)r0   r1   Z_check_divmod_opdivmod)r`   r7   Zserr   r   r   test_divmod_series_array!  s    
z(TestArithmetics.test_divmod_series_arrayc                    s   t  || d S r	   )r]   test_arith_series_with_scalarr`   r7   all_arithmetic_operatorsra   r   r   r   &  s    z-TestArithmetics.test_arith_series_with_scalarc                    sD   |}|j jtkr2|dvr2tjjdd}|j| t 	|| d S )N)__add____radd__rJ   rK   )
r   r   r   rM   rN   rO   rP   rQ   r]   test_arith_series_with_array)r`   r7   r   r    opnamerN   ra   r   r   r   *  s
    z,TestArithmetics.test_arith_series_with_arrayc                    s   t  || d S r	   )r]   test_arith_frame_with_scalarr   ra   r   r   r   1  s    z,TestArithmetics.test_arith_frame_with_scalar)rX   rY   rZ   Z
divmod_excZseries_scalar_excZframe_scalar_excZseries_array_excrc   r|   r   r   r   r   rd   r   r   ra   r   r{     s   
r{   c                   @   s   e Zd ZdS )TestPrintingNrX   rY   rZ   r   r   r   r   r   6  s   r   c                       s6   e Zd Zdd Zejdddg fddZ  ZS )TestNumericReducec                 C   s:   t |||d}t ||jj||d}t|| d S )N)skipna)r   r   r   r5   r%   Zassert_almost_equal)r`   sZop_namer   resultexpectedr   r   r   check_reduce;  s    zTestNumericReduce.check_reducer   TFc                    s   t  ||| d S r	   )r]   test_reduce_series)r`   r7   Zall_boolean_reductionsr   ra   r   r   r   A  s    z$TestNumericReduce.test_reduce_series)	rX   rY   rZ   r   rM   rN   parametrizer   rd   r   r   ra   r   r   :  s   r   c                   @   s   e Zd ZdS )TestBooleanReduceNr   r   r   r   r   r   F  s   r   c                       s0   e Zd Ze fddZe fddZ  ZS )TestMissingc                    s   t  | d S r	   )r]   test_fillna_seriesrt   ra   r   r   r   L  s    zTestMissing.test_fillna_seriesc                    s   t  | d S r	   )r]   test_fillna_framert   ra   r   r   r   Q  s    zTestMissing.test_fillna_frame)rX   rY   rZ   rc   r   r   rd   r   r   ra   r   r   K  s   r   c                	       sB   e Zd Zejddejdejjdddg fddZ  Z	S )	TestReshapingin_frameTFz$PandasArray inconsistently extractedrK   Zmarksc                    s   t  || d S r	   )r]   test_concat)r`   r7   r   ra   r   r   r   X  s    zTestReshaping.test_concat)
rX   rY   rZ   rM   rN   r   r   rO   r   rd   r   r   ra   r   r   W  s   
r   c                
       s  e Zd Ze fddZe fddZeejdddg fdd	Z	e fd
dZ
eejjdeg dejg dddgddgd fddZ fddZeejjdg dejg dddeg dgg dd fddZejjdddd ejgd!fejddd ejgd"ejjd#ejddd ejgddd!fejddd ejgddd!fgg d$d fd%d&Ze fd'd(Ze fd)d*Zd+d, Z  ZS )-TestSetitemc                    s   t  || d S r	   )r]   test_setitem_invalidrz   ra   r   r   r   g  s    z TestSetitem.test_setitem_invalidc                    s   t  || d S r	   )r]    test_setitem_sequence_broadcastsr`   r7   box_in_seriesra   r   r   r   l  s    z,TestSetitem.test_setitem_sequence_broadcastssetterlocNc                    s   t  || d S r	   )r]   test_setitem_mask_broadcast)r`   r7   r   ra   r   r   r   r  s    z'TestSetitem.test_setitem_mask_broadcastc                    s   t  | d S r	   )r]   &test_setitem_scalar_key_sequence_raiser_   ra   r   r   r   y  s    z2TestSetitem.test_setitem_scalar_key_sequence_raisemask)TTTFFbooleanr/   numpy-arrayzboolean-array)Zidsc                    s   t  ||| d S r	   )r]   test_setitem_mask)r`   r7   r   r   ra   r   r   r     s    
zTestSetitem.test_setitem_maskc                    s   t  || d S r	   )r]   test_setitem_mask_raisesr   ra   r   r   r     s    z$TestSetitem.test_setitem_mask_raisesidx)r   r-   rC   ZInt64)listzinteger-arrayr   c                    s   t  ||| d S r	   )r]   test_setitem_integer_arrayr`   r7   r   r   ra   r   r   r     s    z&TestSetitem.test_setitem_integer_arrayzidx, box_in_seriesr   r-   rC   FTr   )z
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec                    s   t  ||| d S r	   )r]   (test_setitem_integer_with_missing_raisesr   ra   r   r   r     s    z4TestSetitem.test_setitem_integer_with_missing_raisesc                    s   t  || d S r	   )r]   test_setitem_slicer   ra   r   r   r     s    zTestSetitem.test_setitem_slicec                    s   t  | d S r	   )r]   test_setitem_loc_iloc_slicer_   ra   r   r   r     s    z'TestSetitem.test_setitem_loc_iloc_slicec                 C   s   t dt |i }}t j|jd}||}|d |j|df< |jjtkrtt|t	rb|t	d krtt d|
 i}| || d S )Nr7   )index)r0   Z	DataFramer1   r   r   r   r   r   r
   slicer   Zassert_frame_equal)r`   r7   Zfull_indexerdfr   r   keyr   r   r   ,test_setitem_with_expansion_dataframe_column  s    z8TestSetitem.test_setitem_with_expansion_dataframe_column)rX   rY   rZ   rc   r   r   rM   rN   r   r   r   r   r3   r0   r   r   r   ZNAr   rO   r   r   r   r   rd   r   r   ra   r   r   f  sR   $
r   c                   @   s   e Zd ZdS )TestParsingNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )Test2DCompatNr   r   r   r   r   r     s   r   )r   )I__doc__numpyr   rM   Zpandas.core.dtypes.castr   Zpandas.core.dtypes.dtypesr   r   Zpandasr0   Zpandas._testingZ_testingr%   Zpandas.core.arrays.numpy_r   Zpandas.core.internalsr   Zpandas.tests.extensionr   boolr   r"   r   strr   Zfixturer   r'   r7   r;   r<   rA   rF   rG   rI   rR   rN   Zusefixturesrc   rS   ZBaseCastingTestsr\   ZBaseConstructorsTestsre   ZBaseDtypeTestsri   ZBaseGetitemTestsrk   ZBaseGroupbyTestsrm   ZBaseInterfaceTestsro   ZBaseMethodsTestsrq   ZBaseArithmeticOpsTestsr{   ZBasePrintingTestsr   ZBaseNumericReduceTestsr   ZBaseBooleanReduceTestsr   ZBaseMissingTestsr   ZBaseReshapingTestsr   ZBaseSetitemTestsr   ZBaseParsingTestsr   ZNDArrayBacked2DTestsr   r   r   r   r   <module>   sh   









&Z