
    o[weH:                        d Z ddlZddlZddl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lmZ d	efd
Zej        Zd=dedefdZ ej        ddg          d             Zej        d             Zej        d             Zej        d             Zej        d             Z ej        d             Z!ej        d             Z"ej        d             Z#ej        d             Z$ej        d             Z%ej&        '                    d          Z( G d d          Z) G d d e)ej*                  Z+ G d! d"e)ej,                  Z- G d# d$e)ej.                  Z/ G d% d&e)ej0                  Z1 G d' d(e)ej2                  Z3 G d) d*e)ej4                  Z5 G d+ d,e)ej6                  Z7 G d- d.e)ej8                  Z9 G d/ d0e)ej:                  Z; G d1 d2e)ej<                  Z= G d3 d4e)ej>                  Z? G d5 d6e)ej@                  ZA G d7 d8e)ejB                  ZCe( G d9 d:e)ejD                              ZE G d; d<e)ejF                  ZGdS )>a  
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 NumpyExtensionArray
will never be held in an Index.
    N)can_hold_element)NumpyEADtype)is_object_dtype)NumpyExtensionArray)blocks)basereturnc                 t    t          |t                    r|                                }t          | |          S N)
isinstancer   to_numpyr   )objelements     Alib/python3.11/site-packages/pandas/tests/extension/test_numpy.py_can_hold_element_patchedr       s6    '.// %""$$C)))    
Attributesattrr   c                    | dk    rt          |dd          }t          |dd          }t          |t                    r0t          |t                    s|                    |j                  }nDt          |t                    r/t          |t                    s|                    |j                  }t          | |||           dS )zi
    patch tm.assert_attr_equal so NumpyEADtype("object") is closed enough to
    np.dtype("object")
    dtypeN)getattrr   r   astypenumpy_dtypeorig_assert_attr_equal)r   leftrightr   lattrrattrs         r   _assert_attr_equalr   )   s    
 wgt,,w--e\** 	4:e\3R3R 	4;;u011DD|,, 	4Z|5T5T 	4LL!233E4uc22222r   floatobject)paramsc                 N    t          t          j        | j                            S r   )r   npr   param)requests    r   r   r   9   s    //000r   c              #   2  K   |                                  5 }|                    t          dd           |                    t          dt                     |                    t
          j        dt                     dV  ddd           dS # 1 swxY w Y   dS )a  
    A monkeypatch to tells pandas to let us in.

    By default, passing a NumpyExtensionArray to an index / series / frame
    constructor will unbox that NumpyExtensionArray 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 ABCNumpyExtensionArray
    in each constructor.

    But, for testing, we need to allow them in pandas. So we patch
    the _typ of NumpyExtensionArray, so that we evade the ABCNumpyExtensionArray
    check.
    _typ	extensionr   assert_attr_equalN)contextsetattrr   r   r   tm	assertersr   )monkeypatchms     r   allow_in_pandasr1   >   s      " 
				 !			%v{;;;			&,.GHHH			", 35GHHH	                 s   A(BBBc                     |j         dk    r0t          j        d t          d          D                       j        S t          t          j        dd|j                            S )Nr!   c                     g | ]}|fS  r4   ).0is     r   
<listcomp>zdata.<locals>.<listcomp>Y   s    33311$333r   d      e   r   )	r   pdSeriesrangearrayr   r$   arange_dtyper1   r   s     r   datarC   V   sY    H$$y33c

33344::ryCu|DDDEEEr   c                     |j         dk    r4t          t          j        t          j        dgt
                              S t          t          j        t          j        dg                    S )Nr!   r9   r;   g      ?r   r   r$   r?   nanr!   rB   s     r   data_missingrH   ]   sQ    H$$"28RVTN&#I#I#IJJJrx66777r   c                      d } | S )Nc                 R    t          j        |           ot          j        |          S r   )r$   isnan)abs     r   cmpzna_cmp.<locals>.cmpf   s    x{{*rx{{*r   r4   )rN   s    r   na_cmprO   d   s    + + + Jr   c                     |j         dk    r2t          t          j        g dt                    dd                   S t          t          j        g d                    S )ziLength-3 array with a known sort order.

    This should be three items [B, C, A] with
    A < B < C
    r!   )r4         rE   r;   r9   N)r9   rR   r   )r   r   r$   r?   r!   rB   s     r   data_for_sortingrU   l   s`     H$$ #28,B,B,B&#Q#Q#QRSRTRT#UVVVrx			22333r   c                     |j         dk    r5t          t          j        dt          j        dgt
                              S t          t          j        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!   rE   )r   r;   r9   r   rF   rB   s     r   data_missing_for_sortingrW   z   sX     H$$"28T264,@#O#O#OPPPrxBFA77888r   c                     |j         dk    rd\  }}}nt          j        d          \  }}}t          t          j        ||t          j        t          j        ||||g|j                             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!   )rE   rQ   rS   rT   r;   )r   r$   r@   r   r?   rG   )r1   r   rL   rM   cs        r   data_for_groupingrZ      sn     H$$"1aa)A,,1a
!Q1a35;LMMM  r   c                     | j         dk    rt          j        d           t          j        d          dz  }t          j        ||           S )NOzNot a numeric dtyper8   rR   r;   )kindpytestskipr$   onesr   _from_sequence)r   arrs     r   data_for_twosrc      sH    zS)***
'#,,
C-c????r   c                     | dk    r<t           j                            d          }|j                            |           dS dS )a  
    Tests for NumpyExtensionArray 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)r^   markxfailnode
add_marker)r   r&   rh   s      r   skip_numpy_objectrl      sL     {  (@ AA%%%%% r   rl   c                       e Zd ZdS )BaseNumPyTestsN__name__
__module____qualname__r4   r   r   rn   rn              Dr   rn   c                       e Zd ZdS )TestCastingNro   r4   r   r   ru   ru      rs   r   ru   c                   v     e Zd Zej                            d          d             Ze fd            Z xZ	S )TestConstructorszWe don't register our dtyperf   c                     d S r   r4   )selfrC   s     r   test_from_dtypez TestConstructors.test_from_dtype   	     	r   c                 L    t                                          ||           d S r   )super)test_series_constructor_scalar_with_index)ry   rC   r   	__class__s      r   r~   z:TestConstructors.test_series_constructor_scalar_with_index   s%     	99$FFFFFr   )
rp   rq   rr   r^   rh   r_   rz   skip_nestedr~   __classcell__r   s   @r   rw   rw      s{        [:;;  <; G G G G [G G G G Gr   rw   c                   (     e Zd Z fdZ fdZ xZS )	TestDtypec                     |j         j        dk    rE|j                            t          j                            d|j         j                              t                                          |           d S )Nr!   z:NumpyExtensionArray expectedly clashes with a NumPy name: rf   )	r   r   rj   rk   r^   rh   ri   r}   test_check_dtype)ry   rC   r&   r   s      r   r   zTestDtype.test_check_dtype   s~    :!X--L##!!<#':#9< < "     	  &&&&&r   c                     |j         dk    rt          |          sJ d S t                                          |           d S )Nr!   )r   r   r}   test_is_not_object_type)ry   r   r&   r   s      r   r   z!TestDtype.test_is_not_object_type   sK    (( #5)))))))GG++E22222r   )rp   rq   rr   r   r   r   r   s   @r   r   r      sQ        ' ' ' ' '3 3 3 3 3 3 3 3 3r   r   c                   .     e Zd Ze fd            Z xZS )TestGetitemc                 J    t                                          |           d S r   )r}   test_getitem_scalarry   rC   r   s     r   r   zTestGetitem.test_getitem_scalar   s#     	##D)))))r   )rp   rq   rr   r   r   r   r   s   @r   r   r      sB        * * * * [* * * * *r   r   c                       e Zd ZdS )TestGroupbyNro   r4   r   r   r   r      rs   r   r   c                   .     e Zd Ze fd            Z xZS )TestInterfacec                 J    t                                          |           d S r   )r}   test_array_interfacer   s     r   r   z"TestInterface.test_array_interface   s#     	$$T*****r   )rp   rq   rr   r   r   r   r   s   @r   r   r      sB        + + + + [+ + + + +r   r   c                        e Zd Ze fd            Ze fd            Ze fd            Ze fd            Zej	        
                    d           fd            Z fdZe fd	            Z xZS )
TestMethodsc                 J    t                                          |           d S r   )r}   test_shift_fill_valuer   s     r   r   z!TestMethods.test_shift_fill_value   s#     	%%d+++++r   c                 J    t                                          |           d S r   )r}   test_fillna_copy_framery   rH   r   s     r   r   z"TestMethods.test_fillna_copy_frame   s#     	&&|44444r   c                 J    t                                          |           d S r   )r}   test_fillna_copy_seriesr   s     r   r   z#TestMethods.test_fillna_copy_series   s#     	''55555r   c                 L    t                                          ||           d S r   )r}   test_searchsorted)ry   rU   	as_seriesr   s      r   r   zTestMethods.test_searchsorted   s&     	!!"2I>>>>>r   z*NumpyExtensionArray.diff may fail on dtyperf   c                 H    t                                          ||          S r   )r}   	test_diff)ry   rC   periodsr   s      r   r   zTestMethods.test_diff  s    ww  w///r   c                     |j         j        t          k    r:t          j                            d          }|j                            |           t                      	                    |           d S )Nz$Dimension mismatch in np.concatenaterf   )
r   r   r!   r^   rh   ri   rj   rk   r}   test_insert)ry   rC   r&   rh   r   s       r   r   zTestMethods.test_insert  s`    :!V++;$$,R$SSDL##D)))D!!!!!r   c                 L    t                                          ||           d S r   )r}   test_insert_invalidry   rC   invalid_scalarr   s      r   r   zTestMethods.test_insert_invalid  s%     	##D.99999r   )rp   rq   rr   r   r   r   r   r   r^   rh   ri   r   r   r   r   r   s   @r   r   r      s*       , , , , [, 5 5 5 5 [5 6 6 6 6 [6 ? ? ? ? [? [JKK0 0 0 0 LK0" " " " " : : : : [: : : : :r   r   c                   |     e Zd ZdZdZdZdZe fd            Ze fd            Z	 fdZ
e fd            Z xZS )TestArithmeticsNc                 J    t                                          |           d S r   )r}   test_divmodr   s     r   r   zTestArithmetics.test_divmod  s!    D!!!!!r   c                 L    t                                          ||           d S r   )r}   test_arith_series_with_scalarry   rC   all_arithmetic_operatorsr   s      r   r   z-TestArithmetics.test_arith_series_with_scalar  s$    --d4LMMMMMr   c                     |}|j         j        t          k    r>|dvr:t          j                            d          }|j                            |           t                      	                    ||           d S )N)__add____radd__re   rf   )
r   r   r!   r^   rh   ri   rj   rk   r}   test_arith_series_with_array)ry   rC   r   r&   opnamerh   r   s         r   r   z,TestArithmetics.test_arith_series_with_array   ss    ):!V++>U0U0U;$$,D$EEDL##D))),,T3KLLLLLr   c                 L    t                                          ||           d S r   )r}   test_arith_frame_with_scalarr   s      r   r   z,TestArithmetics.test_arith_frame_with_scalar'  s$    ,,T3KLLLLLr   )rp   rq   rr   
divmod_excseries_scalar_excframe_scalar_excseries_array_excr   r   r   r   r   r   r   s   @r   r   r     s        J" " " " [" N N N N [NM M M M M M M M M [M M M M Mr   r   c                       e Zd ZdS )TestPrintingNro   r4   r   r   r   r   ,  rs   r   r   c                       e Zd ZdedefdZd Zej        	                    d          ej        
                    dddg          d	                         Zd
S )
TestReduceop_namer	   c                 H    t          j        |          j        dk    r|dv S dS )Nr\   )summinmaxanyallT)r-   	get_dtyper]   )ry   r   r   s      r   _supports_reductionzTestReduce._supports_reduction1  s+    <!S((AAAtr   c                    t          ||          }t          |                    |j        j                  |          }|dk    r |            } |            }n ||          } ||          }t	          j        ||           d S )Ncount)skipna)r   r   r   rA   r-   assert_almost_equal)ry   sr   r   res_opexp_opresultexpecteds           r   check_reducezTestReduce.check_reduce6  s    G$$!'.117;;gVXXFvxxHHV6***FvV,,,H
vx00000r   ztests not written yetr   TFc                     d S r   r4   )ry   rC   all_numeric_reductionsr   s       r   test_reduce_framezTestReduce.test_reduce_frameB  r{   r   N)rp   rq   rr   strboolr   r   r^   rh   r_   parametrizer   r4   r   r   r   r   0  s             

1 
1 
1 [-..[Xe}55  65 /.  r   r   c                   H     e Zd Ze fd            Ze fd            Z xZS )TestMissingc                 J    t                                          |           d S r   )r}   test_fillna_seriesr   s     r   r   zTestMissing.test_fillna_seriesI  s#     	""<00000r   c                 J    t                                          |           d S r   )r}   test_fillna_framer   s     r   r   zTestMissing.test_fillna_frameN  s#     	!!,/////r   )rp   rq   rr   r   r   r   r   r   s   @r   r   r   H  sg        1 1 1 1 [1 0 0 0 0 [0 0 0 0 0r   r   c                       e Zd ZdS )TestReshapingNro   r4   r   r   r   r   T  rs   r   r   c                       e Zd Ze fd            Ze fd            Zeej                            dddg           fd                        Z	e fd            Z
eej                            d ej        g d	           ej        g d	d
          gddg           fd                        Zeej                            dg d ej        g dd           ej        g d          gg d           fd                        Zej                            ddddej        gdf ej        dddej        gdej        j                   ej        dddej        gd          df ej        dddej        gd          dfgg d           fd            Ze fd            Ze fd            Zd  Z xZS )!TestSetitemc                 L    t                                          ||           d S r   )r}   test_setitem_invalidr   s      r   r   z TestSetitem.test_setitem_invalidY  s%     	$$T>:::::r   c                 L    t                                          ||           d S r   )r}    test_setitem_sequence_broadcastsry   rC   box_in_seriesr   s      r   r   z,TestSetitem.test_setitem_sequence_broadcasts^  s%     	00}EEEEEr   setterlocNc                 L    t                                          ||           d S r   )r}   test_setitem_mask_broadcast)ry   rC   r   r   s      r   r   z'TestSetitem.test_setitem_mask_broadcastd  s%    
 	++D&99999r   c                 J    t                                          |           d S r   )r}   &test_setitem_scalar_key_sequence_raiser   s     r   r   z2TestSetitem.test_setitem_scalar_key_sequence_raisek  s#     	66t<<<<<r   mask)TTTFFbooleanr;   numpy-arrayzboolean-array)idsc                 N    t                                          |||           d S r   )r}   test_setitem_mask)ry   rC   r   r   r   s       r   r   zTestSetitem.test_setitem_masks  s'     	!!$m<<<<<r   idx)r   r9   rR   Int64)listzinteger-arrayr   c                 N    t                                          |||           d S r   )r}   test_setitem_integer_arrayry   rC   r   r   r   s       r   r   z&TestSetitem.test_setitem_integer_array  s'     	**4mDDDDDr   zidx, box_in_seriesr   r9   rR   FT)marks)z
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec                 N    t                                          |||           d S r   )r}   (test_setitem_integer_with_missing_raisesr   s       r   r   z4TestSetitem.test_setitem_integer_with_missing_raises  s'     	88sMRRRRRr   c                 L    t                                          ||           d S r   )r}   test_setitem_slicer   s      r   r   zTestSetitem.test_setitem_slice  s#    ""477777r   c                 J    t                                          |           d S r   )r}   test_setitem_loc_iloc_slicer   s     r   r  z'TestSetitem.test_setitem_loc_iloc_slice  s!    ++D11111r   c                    t          j        dt          j        |          i          x}}t          j        |j                  } ||          }|d         |j        |df<   |j        j        t          k    rPt          |t                    r|t          d           k    r(t          j        d|
                                i          }t          j        ||           d S )NrC   )index)r<   	DataFramer=   r  r   r   r   r!   r   slicer   r-   assert_frame_equal)ry   rC   full_indexerdfr   r   keys          r   ,test_setitem_with_expansion_dataframe_columnz8TestSetitem.test_setitem_with_expansion_dataframe_column  s    fbioo%>???XBH--- l2"$V*
3; :!V++c5)) CSE$KK-?-?<(ABB
fh/////r   )rp   rq   rr   r   r   r   r^   rh   r   r   r   r$   r?   r<   r   r   NAr%   ri   r   r   r  r
  r   r   s   @r   r   r   X  s"       ; ; ; ; [; F F F F [F
 [Xt}55: : : : 65 [:
 = = = = [= [BH55566BH555YGGG	
 O,   = = = =  [= [	HBHYYYg6668K8KL444   
E E E E  [E [Aruu%FL!Q25)4v{7HIIIRXq!Q&g666>RXq!Q&g666>		
 UTT  	 	S S S S	 	S 8 8 8 8 [8 2 2 2 2 [20 0 0 0 0 0 0r   r   c                       e Zd ZdS )TestParsingNro   r4   r   r   r  r    s        Dr   r  c                       e Zd ZdS )Test2DCompatNro   r4   r   r   r  r    rs   r   r  )r   )H__doc__numpyr$   r^   pandas.core.dtypes.castr   pandas.core.dtypes.dtypesr   pandasr<   pandas._testing_testingr-   pandas.api.typesr   pandas.core.arrays.numpy_r   pandas.core.internalsr   pandas.tests.extensionr   r   r   r*   r   r   r   fixturer   r1   rC   rH   rO   rU   rW   rZ   rc   rl   rh   usefixturesr   rn   BaseCastingTestsru   BaseConstructorsTestsrw   BaseDtypeTestsr   BaseGetitemTestsr   BaseGroupbyTestsr   BaseInterfaceTestsr   BaseMethodsTestsr   BaseArithmeticOpsTestsr   BasePrintingTestsr   BaseReduceTestsr   BaseMissingTestsr   BaseReshapingTestsr   BaseSetitemTestsr   BaseParsingTestsr  NDArrayBacked2DTestsr  r4   r   r   <module>r,     si   "      4 4 4 4 4 4 2 2 2 2 2 2           , , , , , , 9 9 9 9 9 9 ( ( ( ( ( ( ' ' ' ' ' '*t * * * * - 3 3S 3C 3 3 3 3  *+++1 1 ,+1   . F F F 8 8 8    
4 
4 
4 9 9 9     @ @ @ & & & k%%&9::	 	 	 	 	 	 	 		 	 	 	 	.$"7 	 	 		G 	G 	G 	G 	G~t'A 	G 	G 	G3 3 3 3 3 3 3 3 3(* * * * *.$"7 * * *	 	 	 	 	.$"7 	 	 	+ + + + +ND$; + + +#: #: #: #: #:.$"7 #: #: #:LM M M M Mnd&A M M M4	 	 	 	 	>4#9 	 	 	    !5   0	0 	0 	0 	0 	0.$"7 	0 	0 	0	 	 	 	 	ND$; 	 	 	T0 T0 T0 T0 T0.$"7 T0 T0 T0n 	 	 	 	 	.$"7 	 	 		 	 	 	 	>4#< 	 	 	 	 	r   