
    Pi>                     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         u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/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   1   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*   6   s      " 
				 !			%v{;;;			", 35GHHH                 s   AA++A/2A/c                     |j         dk    r1t          j        d t          d          D                       j        }nt          j        dd|j                  }t          |          S )Nr   c                     g | ]}|fS  r-   ).0is     r   
<listcomp>zdata.<locals>.<listcomp>P   s    111!!111r   
         r   )	r   pdSeriesrange_valuesr   arange_dtyper   )r*   r   arrs      r   datar<   M   s_    H$$i11uRyy11122:i2U\222s###r   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   arraynanr   r*   r   s     r   data_missingrC   V   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-   )rI   s    r   na_cmprJ   ]   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   rM   r   )r   r   r   r@   r   rB   s     r   data_for_sortingrP   e   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?   rB   s     r   data_missing_for_sortingrR   s   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>   rL   rN   rO   r4   )r   r   r9   r   r@   rA   )r*   r   rG   rH   cs        r   data_for_groupingrU      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   rM   r4   )kindpytestskipr   onesr   _from_sequence)r   r;   s     r   data_for_twosr]      sO    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)rY   markxfailapplymarker)r   r   ra   s      r   skip_numpy_objectrd      sJ     {  (@ AAD!!!!! r   rd   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 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 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/d0g1           fd2                        Z0eej        %                    d3g d4 ej/        g d4d5.           e.j/        g d4          gg d61           fd7                        Z1e fd8            Z2e fd9            Z3d: Z4ej                            d;           fd<            Z5eej        %                    d=d>d?g           fd@                        Z6 fdAZ7 xZ8S )B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)rh   r<   r   	__class__s      r   rm   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   rc   rY   ra   rb   rl   test_check_dtype)rh   r<   r   using_infer_stringrn   s       r   rp   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   rl   test_is_not_object_type)rh   r   r   rn   s      r   rs   z/TestNumpyExtensionArray.test_is_not_object_type   sK    (( #5)))))))GG++E22222r   c                 J    t                                          |           d S r   )rl   test_getitem_scalarrh   r<   rn   s     r   ru   z+TestNumpyExtensionArray.test_getitem_scalar   s#     	##D)))))r   c                 J    t                                          |           d S r   )rl   test_shift_fill_valuerv   s     r   rx   z-TestNumpyExtensionArray.test_shift_fill_value   s#     	%%d+++++r   c                 J    t                                          |           d S r   )rl   test_fillna_limit_framerh   rC   rn   s     r   rz   z/TestNumpyExtensionArray.test_fillna_limit_frame   s#     	''55555r   c                 J    t                                          |           d S r   )rl   test_fillna_limit_seriesr{   s     r   r}   z0TestNumpyExtensionArray.test_fillna_limit_series   s#     	((66666r   c                 J    t                                          |           d S r   )rl   test_fillna_copy_framer{   s     r   r   z.TestNumpyExtensionArray.test_fillna_copy_frame   s#     	&&|44444r   c                 J    t                                          |           d S r   )rl   test_fillna_copy_seriesr{   s     r   r   z/TestNumpyExtensionArray.test_fillna_copy_series   s#     	''55555r   c                 L    t                                          ||           d S r   )rl   test_searchsorted)rh   rP   	as_seriesrn   s      r   r   z)TestNumpyExtensionArray.test_searchsorted   s&    
 	!!"2I>>>>>r   z*NumpyExtensionArray.diff may fail on dtypec                 H    t                                          ||          S r   )rl   	test_diff)rh   r<   periodsrn   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   rY   ra   rb   rc   rl   test_insertrh   r<   r   ra   rn   s       r   r   z#TestNumpyExtensionArray.test_insert   s^    :!V++;$$,R$SSD%%%D!!!!!r   c                 L    t                                          ||           d S r   )rl   test_insert_invalidrh   r<   invalid_scalarrn   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 NrW   )r   rX   	TypeError
divmod_excrl   test_divmod)rh   r<   r   rn   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   rX   r   r   _check_divmod_opdivmod)rh   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   rY   ra   rb   node
add_markerr   series_scalar_excrl   test_arith_series_with_scalar)rh   r<   all_arithmetic_operatorsr   opnamer   ra   rn   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_excrl   test_arith_series_with_array)rh   r<   r   r   r   rn   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   rY   ra   rb   r   r   r   frame_scalar_excrl   test_arith_frame_with_scalar)rh   r<   r   r   r   r   ra   rn   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 )NrW   )summinmaxanyallT)r   rX   )rh   r   r   s      r   _supports_reductionz+TestNumpyExtensionArray._supports_reduction5  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)
rh   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-   )rh   r<   all_numeric_reductionsr   s       r   test_reduce_framez)TestNumpyExtensionArray.test_reduce_frameJ  rj   r   c                 J    t                                          |           d S r   )rl   test_fillna_seriesr{   s     r   r   z*TestNumpyExtensionArray.test_fillna_seriesO  s#     	""<00000r   c                 J    t                                          |           d S r   )rl   test_fillna_framer{   s     r   r   z)TestNumpyExtensionArray.test_fillna_frameT  s#     	!!,/////r   c                 J    t                                          |           d S r   )rl   test_fillna_readonlyr{   s     r   r   z,TestNumpyExtensionArray.test_fillna_readonlyY  s#     	$$\22222r   c                 L    t                                          ||           d S r   )rl   test_setitem_invalidr   s      r   r   z,TestNumpyExtensionArray.test_setitem_invalid^  s%     	$$T>:::::r   c                 L    t                                          ||           d S r   )rl    test_setitem_sequence_broadcastsrh   r<   box_in_seriesrn   s      r   r   z8TestNumpyExtensionArray.test_setitem_sequence_broadcastsc  s%     	00}EEEEEr   setterlocc                 L    t                                          ||           d S r   )rl   test_setitem_mask_broadcast)rh   r<   r   rn   s      r   r   z3TestNumpyExtensionArray.test_setitem_mask_broadcasti  s%    
 	++D&99999r   c                 J    t                                          |           d S r   )rl   &test_setitem_scalar_key_sequence_raiserv   s     r   r   z>TestNumpyExtensionArray.test_setitem_scalar_key_sequence_raisep  s#     	66t<<<<<r   mask)TTTFFbooleanr4   numpy-arrayzboolean-array)idsc                 N    t                                          |||           d S r   )rl   test_setitem_mask)rh   r<   r   r   rn   s       r   r   z)TestNumpyExtensionArray.test_setitem_maskx  s'     	!!$m<<<<<r   idx)r   r2   rM   Int64)listzinteger-arrayr   c                 N    t                                          |||           d S r   )rl   test_setitem_integer_array)rh   r<   r   r   rn   s       r   r   z2TestNumpyExtensionArray.test_setitem_integer_array  s'     	**4mDDDDDr   c                 L    t                                          ||           d S r   )rl   test_setitem_slicer   s      r   r   z*TestNumpyExtensionArray.test_setitem_slice  s#    ""477777r   c                 J    t                                          |           d S r   )rl   test_setitem_loc_iloc_slicerv   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)rh   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   )rl   #test_index_from_listlike_with_dtyperv   s     r   r   z;TestNumpyExtensionArray.test_index_from_listlike_with_dtype  s!    33D99999r   enginerT   pythonc                 N    t                                          |||           d S r   )rl   test_EA_types)rh   r   r<   r   rn   s       r   r   z%TestNumpyExtensionArray.test_EA_types  s'     	fdG44444r   c                     t          |d         t                    r5t          j                            d          }|                    |           t                                          |           d S )NzUnpacks tupler_   )r   tuplerY   ra   rb   rc   rl   8test_loc_setitem_with_expansion_preserves_ea_index_dtyper   s       r   r   zPTestNumpyExtensionArray.test_loc_setitem_with_expansion_preserves_ea_index_dtype  sc    d2h&& 	&;$$O$<<D%%%HHNNNNNr   )9__name__
__module____qualname__rY   ra   rZ   ri   skip_nestedrm   rp   rs   ru   rx   rz   r}   r   r   r   rb   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   r   r@   r   r   r   r   r   r   r   r   __classcell__)rn   s   @r   rf   rf      s       [:;;  <; G G G G [G' ' ' ' '3 3 3 3 3 * * * * [* , , , , [, 6 6 6 6 [6
 7 7 7 7 [7
 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 3 3 3 3 [3 ; ; ; ; [; 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 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O O O O O O O O Or   rf   c                       e Zd ZdS )Test2DCompatN)r   r   r   r-   r   r   r  r    s        Dr   r  )r   )'__doc__numpyr   rY   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<   rC   rJ   rP   rR   rU   r]   rd   ra   usefixturesr   ExtensionTestsrf   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   , $ $ $ 8 8 8    
4 
4 
4 9 9 9     @ @ @ " " " k%%&9::HO HO HO HO HOd1 HO HO HOV	 	 	 	 	4, 	 	 	 	 	r   