
    d<                        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 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/                  Z0 G d% d&e*ej1                  Z2 G d' d(e*ej3                  Z4 G d) d*e*ej5                  Z6 G d+ d,e*ej7                  Z8 G d- d.e*ej9                  Z: G d/ d0e*ej;                  Z< G d1 d2e*ej=                  Z>e) G d3 d4e*ej?                              Z@ G d5 d6e*ejA                  ZB G d7 d8e*ejC                  ZD G d9 d:e*ejE                  ZFe) G d; d<e*ejG                              ZH G d= d>e*ejI                  ZJd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 PandasArray
will never be held in an Index.
    N)can_hold_element)ExtensionDtypePandasDtype)is_object_dtype)PandasArray)blocks)basereturnc                 t    t          |t                    r|                                }t          | |          S N)
isinstancer   to_numpyr   )objelements     ]/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/tests/extension/test_numpy.py_can_hold_element_patchedr   #   s5    ';'' %""$$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 )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   lattrrattrs         r   _assert_attr_equalr    ,   s    
 wgt,,w--e[)) 	4*UK2P2P 	4;;u011DD{++ 	4Juk4R4R 	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   <   s    rx..///r   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 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.
    _typ	extensionr   assert_attr_equalN)contextsetattrr   r   r   tm	assertersr    )monkeypatchms     r   allow_in_pandasr2   A   s      " 
				 !			+v{333			&,.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  r5   ).0is     r   
<listcomp>zdata.<locals>.<listcomp>\   s    33311$333r   d      e   r   )	r   pdSeriesrangearrayr   r%   arange_dtyper2   r   s     r   datarD   Y   sY    H$$y33c

33344::ryCu|<<<===r   c                     |j         dk    r4t          t          j        t          j        dgt
                              S t          t          j        t          j        dg                    S )Nr"   r:   r<   g      ?r   r   r%   r@   nanr"   rC   s     r   data_missingrI   `   sQ    H$$28RVTN&AAABBBrx..///r   c                      t           j        S r   )r%   rH   r5   r   r   na_valuerK   g   s	    6Mr   c                      d } | S )Nc                 R    t          j        |           ot          j        |          S r   )r%   isnan)abs     r   cmpzna_cmp.<locals>.cmpn   s    x{{*rx{{*r   r5   )rQ   s    r   na_cmprR   l   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"   )r5         rF   r<   r:   N)r:   rU   r   )r   r   r%   r@   r"   rC   s     r   data_for_sortingrX   t   s]     H$$ 28$:$:$:&III!""MNNNrx			**+++r   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"   rF   )r   r<   r:   r   rG   rC   s     r   data_missing_for_sortingrZ      sX     H$$28T264$8GGGHHHrxBFA//000r   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"   )rF   rT   rV   rW   r<   )r   r%   rA   r   r@   rH   )r2   r   rO   rP   cs        r   data_for_groupingr]      sn     H$$"1aa)A,,1a
!Q1a35;LMMM  r   c                     | dk    r<t           j                            d          }|j                            |           dS 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'   rc   s      r   skip_numpy_objectrg      sL     {  (@ AA%%%%% r   rg   c                   $    e Zd Zed             ZdS )BaseNumPyTestsc                    t          |t          j                  r[t          |j        t                    sAt          |j        t
                    r'|                    t          |j                            }t          j        ||g|R i |S r   )	r   r=   r>   r   r   r   r   r.   assert_series_equal)clsr   r   argskwargss        r   rk   z"BaseNumPyTests.assert_series_equal   s    
 ubi((	;u{N;;	; 4:{33	;
 LLU[!9!9::E%dECDCCCFCCCr   N)__name__
__module____qualname__classmethodrk   r5   r   r   ri   ri      s2        	D 	D [	D 	D 	Dr   ri   c                       e Zd ZdS )TestCastingNro   rp   rq   r5   r   r   rt   rt              Dr   rt   c                   v     e Zd Zej                            d          d             Ze fd            Z xZ	S )TestConstructorszWe don't register our dtyper`   c                     d S r   r5   )selfrD   s     r   test_from_dtypez TestConstructors.test_from_dtype   s	     	r   c                 L    t                                          ||           d S r   )super)test_series_constructor_scalar_with_index)rz   rD   r   	__class__s      r   r~   z:TestConstructors.test_series_constructor_scalar_with_index   s%     	99$FFFFFr   )
ro   rp   rq   rb   rc   skipr{   skip_nestedr~   __classcell__r   s   @r   rx   rx      s{        [:;;  <; G G G G [G G G G Gr   rx   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"   z2PandasArray expectedly clashes with a NumPy name: r`   )	r   r   re   rf   rb   rc   rd   r}   test_check_dtype)rz   rD   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)rz   r   r'   r   s      r   r   z!TestDtype.test_is_not_object_type   sK    (( #5)))))))GG++E22222r   )ro   rp   rq   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rz   rD   r   s     r   r   zTestGetitem.test_getitem_scalar   s#     	##D)))))r   )ro   rp   rq   r   r   r   r   s   @r   r   r      sB        * * * * [* * * * *r   r   c                       e Zd ZdS )TestGroupbyNru   r5   r   r   r   r      rv   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   )ro   rp   rq   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rz   rI   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)rz   rX   	as_seriesr   s      r   r   zTestMethods.test_searchsorted  s&     	!!"2I>>>>>r   z"PandasArray.diff may fail on dtyper`   c                 H    t                                          ||          S r   )r}   	test_diff)rz   rD   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.concatenater`   )
r   r   r"   rb   rc   rd   re   rf   r}   test_insert)rz   rD   r'   rc   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rz   rD   invalid_scalarr   s      r   r   zTestMethods.test_insert_invalid  s%     	##D.99999r   )ro   rp   rq   r   r   r   r   r   rb   rc   rd   r   r   r   r   r   s   @r   r   r      s*       , , , , [, 5 5 5 5 [5 6 6 6 6 [6 ? ? ? ? [? [BCC0 0 0 0 DC0" " " " " : : : : [: : : : :r   r   c                        e Zd ZdZdZdZdZe fd            Ze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                 j    t          j        |          }|                     |t          |d            d S )N)exc)r=   r>   _check_divmod_opdivmod)rz   rD   sers      r   test_divmod_series_arrayz(TestArithmetics.test_divmod_series_array&  s2    iooc64T:::::r   c                 L    t                                          ||           d S r   )r}   test_arith_series_with_scalarrz   rD   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__r_   r`   )
r   r   r"   rb   rc   rd   re   rf   r}   test_arith_series_with_array)rz   rD   r   r'   opnamerc   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_scalar6  s$    ,,T3KLLLLLr   )ro   rp   rq   
divmod_excseries_scalar_excframe_scalar_excseries_array_excr   r   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 )TestPrintingNru   r5   r   r   r   r   ;  rv   r   r   c                   j     e Zd Zd Zej                            dddg           fd            Z xZS )TestNumericReducec                      t          ||          |          } t          |                    |j        j                  |          |          }t	          j        ||           d S )N)skipna)r   r   r   rB   r.   assert_almost_equal)rz   sop_namer   resultexpecteds         r   check_reducezTestNumericReduce.check_reduce@  sc    $G$$F333=7188AGN33W==VLLL
vx00000r   r   TFc                 N    t                                          |||           d S r   )r}   test_reduce_series)rz   rD   all_boolean_reductionsr   r   s       r   r   z$TestNumericReduce.test_reduce_seriesF  s&    ""4)?HHHHHr   )	ro   rp   rq   r   rb   rc   parametrizer   r   r   s   @r   r   r   ?  ss        1 1 1 [Xe}55I I I I 65I I I I Ir   r   c                       e Zd ZdS )TestBooleanReduceNru   r5   r   r   r   r   K          Dr   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_seriesQ  s#     	""<00000r   c                 J    t                                          |           d S r   )r}   test_fillna_framer   s     r   r   zTestMissing.test_fillna_frameV  s#     	!!,/////r   )ro   rp   rq   r   r   r   r   r   s   @r   r   r   P  sg        1 1 1 1 [1 0 0 0 0 [0 0 0 0 0r   r   c            
            e Zd Zej                            dd ej        dej                            d                    g           fd            Z xZ	S )TestReshapingin_frameTFz$PandasArray inconsistently extractedr`   marksc                 L    t                                          ||           d S r   )r}   test_concat)rz   rD   r   r   s      r   r   zTestReshaping.test_concat]  s%     	D(+++++r   )
ro   rp   rq   rb   rc   r   r&   rd   r   r   r   s   @r   r   r   \  s        [FLk''/U'VV  	
	 	, , , ,	 	, , , , ,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_invalidl  s%     	$$T>:::::r   c                 L    t                                          ||           d S r   )r}    test_setitem_sequence_broadcastsrz   rD   box_in_seriesr   s      r   r   z,TestSetitem.test_setitem_sequence_broadcastsq  s%     	00}EEEEEr   setterlocNc                 L    t                                          ||           d S r   )r}   test_setitem_mask_broadcast)rz   rD   r   r   s      r   r   z'TestSetitem.test_setitem_mask_broadcastw  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_raise~  s#     	66t<<<<<r   mask)TTTFFbooleanr<   numpy-arrayzboolean-array)idsc                 N    t                                          |||           d S r   )r}   test_setitem_mask)rz   rD   r   r   r   s       r   r   zTestSetitem.test_setitem_mask  s'     	!!$m<<<<<r   idx)r   r:   rU   Int64)listzinteger-arrayr   c                 N    t                                          |||           d S r   )r}   test_setitem_integer_arrayrz   rD   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   r:   rU   FTr   )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          }|                     ||           d S )NrD   )index)r=   	DataFramer>   r  r   r   r   r"   r   slicer   assert_frame_equal)rz   rD   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11111r   )ro   rp   rq   r   r   r   rb   rc   r   r   r   r%   r@   r=   r   r   NAr&   rd   r   r   r  r  r   r   s   @r   r   r   k  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2 2 2 2 2 2 2r   r   c                       e Zd ZdS )TestParsingNru   r5   r   r   r  r    r   r   r  c                       e Zd ZdS )Test2DCompatNru   r5   r   r   r  r    rv   r   r  )r   )K__doc__numpyr%   rb   pandas.core.dtypes.castr   pandas.core.dtypes.dtypesr   r   pandasr=   pandas._testing_testingr.   pandas.api.typesr   pandas.core.arrays.numpy_r   pandas.core.internalsr   pandas.tests.extensionr	   boolr   r+   r   strr    fixturer   r2   rD   rI   rK   rR   rX   rZ   r]   rg   rc   usefixturesr   ri   BaseCastingTestsrt   BaseConstructorsTestsrx   BaseDtypeTestsr   BaseGetitemTestsr   BaseGroupbyTestsr   BaseInterfaceTestsr   BaseMethodsTestsr   BaseArithmeticOpsTestsr   BasePrintingTestsr   BaseNumericReduceTestsr   BaseBooleanReduceTestsr   BaseMissingTestsr   BaseReshapingTestsr   BaseSetitemTestsr   BaseParsingTestsr  NDArrayBacked2DTestsr  r5   r   r   <module>r0     s   "      4 4 4 4 4 4       
           , , , , , , 1 1 1 1 1 1 ( ( ( ( ( ( ' ' ' ' ' '*t * * * * - 3 3S 3C 3 3 3 3  *+++0 0 ,+0   . > > > 0 0 0       
, 
, 
, 1 1 1     & & & k%%&9::D D D D D D D D	 	 	 	 	.$"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#9 	 	 		I 	I 	I 	I 	I(C 	I 	I 	I 	 	 	 	 	(C 	 	 		0 	0 	0 	0 	0.$"7 	0 	0 	0, , , , ,ND$; , , ,T2 T2 T2 T2 T2.$"7 T2 T2 T2n 	 	 	 	 	.$"7 	 	 		 	 	 	 	>4#< 	 	 	 	 	r   