
    bMh<                     V   d 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 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ej#                  Z$ G d dej%                  Z&d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)NumpyEADtype)is_object_dtype)NumpyExtensionArray)base
Attributesattrobjc                    | 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)getattr
isinstancer   astypenumpy_dtypeorig_assert_attr_equal)r   leftrightr	   lattrrattrs         a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/extension/test_numpy.py_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2    floatobject)paramsc                 N    t          t          j        | j                            S N)r   npr   param)requests    r   r   r   0   s    //000r   c              #      K   |                                  5 }|                    t          dd           |                    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	extensionassert_attr_equalN)contextsetattrr   tm	assertersr   )monkeypatchms     r   allow_in_pandasr*   5   s      " 
				 !			%v{;;;			", 35GHHH                 s   AA++A/2A/c                     |j         dk    r0t          j        d t          d          D                       j        S t          t          j        dd|j                            S )Nr   c                     g | ]}|fS  r-   ).0is     r   
<listcomp>zdata.<locals>.<listcomp>O   s    33311$333r   d      e   r   )	r   pdSeriesrangearrayr   r   arange_dtyper*   r   s     r   datar<   L   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   r2   r4   g      ?r   r   r   r8   nanr   r;   s     r   data_missingrA   S   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>.cmp\   s    x{{*rx{{*r   r-   )rG   s    r   na_cmprH   Z   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   )r-         r>   r4   r2   N)r2   rK   r   )r   r   r   r8   r   r;   s     r   data_for_sortingrN   b   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   r>   )r   r4   r2   r   r?   r;   s     r   data_missing_for_sortingrP   p   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   )r>   rJ   rL   rM   r4   )r   r   r9   r   r8   r@   )r*   r   rE   rF   cs        r   data_for_groupingrS   |   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 is not a numeric dtyper1   rK   r4   )kindpytestskipr   onesr   _from_sequence)r   arrs     r   data_for_twosr\      sP    zSu555666
'#,,
C-c????r   c                     | dk    r7t           j                            d          }|                    |           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   zFails for object dtypereasonN)rW   markxfailapplymarker)r   r   r`   s      r   skip_numpy_objectrc      sJ     {  (@ AAD!!!!! r   rc   c                       e Zd Zej                            d          d             Ze fd            Z fdZ	 fdZ
e f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dZdZdZdZ fdZd Z fdZ fdZ fdZdej        dede fdZ!dej        dede fdZ"ej                            d          ej        #                    dddg          d                         Z$e fd             Z%e f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        #                    d0g d1 ej,        g d1d2+           e+j,        g d1          gg d3.           fd4                        Z.ej        #                    d5d6d7d8ej/        gdf ej0        d6d7d8ej/        gdej        j        9           ej,        d6d7d8ej/        gd2+          df ej,        d6d7d8ej/        gd2+          dfgg d:.           fd;            Z1e fd<            Z2e fd=            Z3d> Z4ej                            d?           fd@            Z5eej        #                    dAdBdCg           fdD                        Z6 xZ7S )ETestNumpyExtensionArrayzWe don't register our dtyper^   c                     d S r   r-   )selfr<   s     r   test_from_dtypez'TestNumpyExtensionArray.test_from_dtype   	     	r   c                 L    t                                          ||           d S r   )super)test_series_constructor_scalar_with_index)rg   r<   r   	__class__s      r   rl   zATestNumpyExtensionArray.test_series_constructor_scalar_with_index   s%     	99$FFFFFr   c                     |j         j        dk    r@|                    t          j                            d|j         j                              t                                          |           d S )Nr   z:NumpyExtensionArray expectedly clashes with a NumPy name: r^   )r   r   rb   rW   r`   ra   rk   test_check_dtype)rg   r<   r   using_infer_stringrm   s       r   ro   z(TestNumpyExtensionArray.test_check_dtype   s|    :!X--!!<#':#9< < "     	  &&&&&r   c                     |j         dk    rt          |          sJ d S t                                          |           d S )Nr   )r   r   rk   test_is_not_object_type)rg   r   r   rm   s      r   rr   z/TestNumpyExtensionArray.test_is_not_object_type   sK    (( #5)))))))GG++E22222r   c                 J    t                                          |           d S r   )rk   test_getitem_scalarrg   r<   rm   s     r   rt   z+TestNumpyExtensionArray.test_getitem_scalar   s#     	##D)))))r   c                 J    t                                          |           d S r   )rk   test_shift_fill_valueru   s     r   rw   z-TestNumpyExtensionArray.test_shift_fill_value   s#     	%%d+++++r   c                 J    t                                          |           d S r   )rk   test_fillna_copy_framerg   rA   rm   s     r   ry   z.TestNumpyExtensionArray.test_fillna_copy_frame   s#     	&&|44444r   c                 J    t                                          |           d S r   )rk   test_fillna_copy_seriesrz   s     r   r|   z/TestNumpyExtensionArray.test_fillna_copy_series   s#     	''55555r   c                 L    t                                          ||           d S r   )rk   test_searchsorted)rg   rN   	as_seriesrm   s      r   r~   z)TestNumpyExtensionArray.test_searchsorted   s&    
 	!!"2I>>>>>r   z*NumpyExtensionArray.diff may fail on dtypec                 H    t                                          ||          S r   )rk   	test_diff)rg   r<   periodsrm   s      r   r   z!TestNumpyExtensionArray.test_diff   s    ww  w///r   c                     |j         j        t          k    r5t          j                            d          }|                    |           t                                          |           d S )Nz$Dimension mismatch in np.concatenater^   )	r   r   r   rW   r`   ra   rb   rk   test_insert)rg   r<   r   r`   rm   s       r   r   z#TestNumpyExtensionArray.test_insert   s^    :!V++;$$,R$SSD%%%D!!!!!r   c                 L    t                                          ||           d S r   )rk   test_insert_invalidrg   r<   invalid_scalarrm   s      r   r   z+TestNumpyExtensionArray.test_insert_invalid   s%     	##D.99999r   Nc                     d }|j         j        dk    rt          }|| _        t	                                          |           d S NrU   )r   rV   	TypeError
divmod_excrk   test_divmod)rg   r<   r   rm   s      r   r   z#TestNumpyExtensionArray.test_divmod   sA    
:?c!!"J$D!!!!!r   c                     t          j        |          }d }|j        j        dk    rt          }|| _        |                     |t          |           d S r   )r5   r6   r   rV   r   r   _check_divmod_opdivmod)rg   r<   serexcs       r   test_divmod_series_arrayz0TestNumpyExtensionArray.test_divmod_series_array   sM    ioo:?c!!C!DOc6400000r   c                    |}d }|j         j        t          k    rE|dv r:t          j                            d          }|j                            |           t          }|| _	        t                                          ||           d S N)__mul____rmul__z9the Series.combine step raises but not the Series method.r^   )r   r   r   rW   r`   ra   node
add_markerr   series_scalar_excrk   test_arith_series_with_scalar)rg   r<   all_arithmetic_operatorsr   opnamer   r`   rm   s          r   r   z5TestNumpyExtensionArray.test_arith_series_with_scalar  s    ) :!V++000{((V )   ''--- )!2--d4LMMMMMr   c                     |}d }|j         j        t          k    r|dvrt          }|| _        t                                          ||           d S )N)__add____radd__)r   r   r   r   series_array_excrk   test_arith_series_with_array)rg   r<   r   r   r   rm   s        r   r   z4TestNumpyExtensionArray.test_arith_series_with_array  sX    ):!V++>U0U0U( 0,,T3KLLLLLr   c                    |}d }|j         j        t          k    rE|dv r:t          j                            d          }|j                            |           t          }|| _	        t                                          ||           d S r   )r   r   r   rW   r`   ra   r   r   r   frame_scalar_excrk   test_arith_frame_with_scalar)rg   r<   r   r   r   r   r`   rm   s          r   r   z4TestNumpyExtensionArray.test_arith_frame_with_scalar  s    ):!V++000{((V )   ''---( 0,,T3KLLLLLr   r   op_namereturnc                 .    |j         j        dk    r|dv S dS )NrU   )summinmaxanyallT)r   rV   )rg   r   r   s      r   _supports_reductionz+TestNumpyExtensionArray._supports_reduction&  s"    9>S  AAAtr   skipnac                    t          ||          }|j        j        }|                    |          }t          ||          }|dk    r |            } |            }	n ||          } ||          }	t	          j        ||	           d S )Ncount)r   )r   r   r   r   r&   assert_almost_equal)
rg   r   r   r   res_op	cmp_dtypealtexp_opresultexpecteds
             r   check_reducez$TestNumpyExtensionArray.check_reduce+  s    g&& I)	jj##g&&gVXXFvxxHHV6***FvV,,,H
vx00000r   zTODO: tests not written yetTFc                     d S r   r-   )rg   r<   all_numeric_reductionsr   s       r   test_reduce_framez)TestNumpyExtensionArray.test_reduce_frame;  ri   r   c                 J    t                                          |           d S r   )rk   test_fillna_seriesrz   s     r   r   z*TestNumpyExtensionArray.test_fillna_series@  s#     	""<00000r   c                 J    t                                          |           d S r   )rk   test_fillna_framerz   s     r   r   z)TestNumpyExtensionArray.test_fillna_frameE  s#     	!!,/////r   c                 L    t                                          ||           d S r   )rk   test_setitem_invalidr   s      r   r   z,TestNumpyExtensionArray.test_setitem_invalidJ  s%     	$$T>:::::r   c                 L    t                                          ||           d S r   )rk    test_setitem_sequence_broadcastsrg   r<   box_in_seriesrm   s      r   r   z8TestNumpyExtensionArray.test_setitem_sequence_broadcastsO  s%     	00}EEEEEr   setterlocc                 L    t                                          ||           d S r   )rk   test_setitem_mask_broadcast)rg   r<   r   rm   s      r   r   z3TestNumpyExtensionArray.test_setitem_mask_broadcastU  s%    
 	++D&99999r   c                 J    t                                          |           d S r   )rk   &test_setitem_scalar_key_sequence_raiseru   s     r   r   z>TestNumpyExtensionArray.test_setitem_scalar_key_sequence_raise\  s#     	66t<<<<<r   mask)TTTFFbooleanr4   numpy-arrayzboolean-array)idsc                 N    t                                          |||           d S r   )rk   test_setitem_mask)rg   r<   r   r   rm   s       r   r   z)TestNumpyExtensionArray.test_setitem_maskd  s'     	!!$m<<<<<r   idx)r   r2   rK   Int64)listzinteger-arrayr   c                 N    t                                          |||           d S r   )rk   test_setitem_integer_arrayrg   r<   r   r   rm   s       r   r   z2TestNumpyExtensionArray.test_setitem_integer_arrayp  s'     	**4mDDDDDr   zidx, box_in_seriesr   r2   rK   )marks)z
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec                 N    t                                          |||           d S r   )rk   (test_setitem_integer_with_missing_raisesr   s       r   r   z@TestNumpyExtensionArray.test_setitem_integer_with_missing_raisesy  s'     	88sMRRRRRr   c                 L    t                                          ||           d S r   )rk   test_setitem_slicer   s      r   r   z*TestNumpyExtensionArray.test_setitem_slice  s#    ""477777r   c                 J    t                                          |           d S r   )rk   test_setitem_loc_iloc_sliceru   s     r   r   z3TestNumpyExtensionArray.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           d S )Nr<   )indexF)check_column_type)r5   	DataFramer6   r   r   r   r   r   r   sliceto_numpyr&   assert_frame_equal)rg   r<   full_indexerdfr   r   keys          r   ,test_setitem_with_expansion_dataframe_columnzDTestNumpyExtensionArray.test_setitem_with_expansion_dataframe_column  s    fbioo%>???XBH--- l2"$V*
3; :!V++c5)) CSE$KK-?-?<(ABB
fh%HHHHHHr   zNumpyEADtype is unpackedc                 J    t                                          |           d S r   )rk   #test_index_from_listlike_with_dtyperu   s     r   r   z;TestNumpyExtensionArray.test_index_from_listlike_with_dtype  s!    33D99999r   enginerR   pythonc                 N    t                                          |||           d S r   )rk   test_EA_types)rg   r   r<   r   rm   s       r   r   z%TestNumpyExtensionArray.test_EA_types  s'     	fdG44444r   )8__name__
__module____qualname__rW   r`   rX   rh   skip_nestedrl   ro   rr   rt   rw   ry   r|   r~   ra   r   r   r   r   r   r   r   r   r   r   r   r   r5   r6   strboolr   r   parametrizer   r   r   r   r   r   r   r   r8   r   r   NAr   r   r   r   r   r   r   __classcell__)rm   s   @r   re   re      s       [:;;  <; G G G G [G' ' ' ' '3 3 3 3 3 * * * * [* , , , , [, 5 5 5 5 [5 6 6 6 6 [6 ? ? ? ? [? [JKK0 0 0 0 LK0" " " " " : : : : [: J" " " " "1 1 1N N N N NM M M M MM M M M Mry 3 4    
1	 1C 1 1 1 1 1  [344[Xe}55  65 54 1 1 1 1 [1 0 0 0 0 [0 ; ; ; ; [; 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I I I" [899: : : : :9: [XX775 5 5 5 87 [5 5 5 5 5r   re   c                       e Zd ZdS )Test2DCompatN)r   r   r   r-   r   r   r   r     s        Dr   r   )r   )'__doc__numpyr   rW   pandas.core.dtypes.dtypesr   pandasr5   pandas._testing_testingr&   pandas.api.typesr   pandas.core.arrays.numpy_r   pandas.tests.extensionr   r#   r   r   r   fixturer   r*   r<   rA   rH   rN   rP   rS   r\   rc   r`   usefixturesr   ExtensionTestsre   NDArrayBacked2DTestsr   r-   r   r   <module>r	     s|   "      2 2 2 2 2 2           , , , , , , 9 9 9 9 9 9 ' ' ' ' ' '- 3 3S 3C 3 3 3 3  *+++1 1 ,+1   , F F F 8 8 8    
4 
4 
4 9 9 9     @ @ @ " " " k%%&9::~5 ~5 ~5 ~5 ~5d1 ~5 ~5 ~5B	 	 	 	 	4, 	 	 	 	 	r   