
    Mh<                        S r SSKrSSKrSSKJr  SSKrSSKJ	r
  SSKJr  SSKJr  SSKJr  \
R"                  rSS\S\4S	 jjr\R*                  " S
S/S9S 5       r\R*                  S 5       r\R*                  S 5       r\R*                  S 5       r\R*                  S 5       r\R*                  S 5       r\R*                  S 5       r\R*                  S 5       r\R*                  S 5       r\R*                  S 5       r\R@                  RC                  S5      r" " S S\RF                  5      r$ " S S\RJ                  5      r&g)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attrobjc                 r   U S:X  a  [        USS5      n[        USS5      n[        U[        5      (       a1  [        U[        5      (       d  UR                  UR                  5      nOE[        U[        5      (       a0  [        U[        5      (       d  UR                  UR                  5      n[        XX#5        g)z]
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         S/var/www/html/env/lib/python3.13/site-packages/pandas/tests/extension/test_numpy.py_assert_attr_equalr       s    
 wgt,w-e\**:e\3R3R;;u001D|,,Z|5T5TLL!2!23E4u2    floatobject)paramsc                 T    [        [        R                  " U R                  5      5      $ N)r   npr
   param)requests    r   r
   r
   0   s    /00r   c              #      #    U R                  5        nUR                  [        SS5        UR                  [        R                  S[
        5        Sv   SSS5        g! , (       d  f       g= f7f)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   sJ     " 
			!			%v{;			",, 35GH 
		s   A.AA	A.
A+'A.c                     UR                   S:X  a:  [        R                  " [        S5       Vs/ s H  o"4PM     sn5      R                  $ [        [        R                  " SSUR                  S95      $ s  snf )Nr   d      e   r
   )	r   pdSeriesrangearrayr   r   arange_dtype)r)   r
   is      r   datar6   L   sY    H$yyc
3
1$
34:::ryyCu||DEE 4s   A4c                     UR                   S:X  a2  [        [        R                  " [        R                  S/[
        S95      $ [        [        R                  " [        R                  S/5      5      $ )Nr   r,   r.   g      ?r   r   r   r2   nanr   r)   r
   s     r   data_missingr<   S   sJ    H$"288RVVTN&#IJJrxx677r   c                      S n U $ )Nc                 h    [         R                  " U 5      =(       a    [         R                  " U5      $ r   )r   isnan)abs     r   cmpna_cmp.<locals>.cmp\   s    xx{*rxx{*r    )rB   s    r   na_cmprE   Z   s    + Jr   c                     UR                   S:X  a'  [        [        R                  " / SQ[        S9SS 5      $ [        [        R                  " / SQ5      5      $ )z]Length-3 array with a known sort order.

This should be three items [B, C, A] with
A < B < C
r   )rD         r8   r.   r,   N)r,   rH   r   )r   r   r   r2   r   r;   s     r   data_for_sortingrK   b   sH     H$ #288,B&#QRSRT#UVVrxx	233r   c                     UR                   S:X  a3  [        [        R                  " S[        R                  S/[
        S95      $ [        [        R                  " S[        R                  S/5      5      $ )zjLength-3 array with a known sort order.

This should be three items [B, NA, A] with
A < B and NA missing.
r   r8   )r   r.   r,   r   r9   r;   s     r   data_missing_for_sortingrM   p   sQ     H$"288T2664,@#OPPrxxBFFA788r   c                     UR                   S:X  a  Su  p#nO[        R                  " S5      u  p#n[        [        R                  " X3[        R
                  [        R
                  X"X4/UR                   S95      $ )zData for factorization, grouping, and unique tests.

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

Where A < B < C and NA is missing
r   )r8   rG   rI   rJ   r.   )r   r   r3   r   r2   r:   )r)   r
   r@   rA   cs        r   data_for_groupingrP   |   s`     H$"a))A,a
!a35;L;LM r   c                     U R                   S:X  a  [        R                  " U  S35        [        R                  " S5      S-  n[
        R                  " XS9$ )NOz is not a numeric dtyper+   rH   r.   )kindpytestskipr   onesr   _from_sequence)r
   arrs     r   data_for_twosrY      sE    zzSug456
''#,
C--c??r   c                 n    U S:X  a/  [         R                  R                  SS9nUR                  U5        gg)ax  
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)rT   markxfailapplymarker)r
   r   r]   s      r   skip_numpy_objectr`      s7     {{  (@ AD! r   r`   c                     ^  \ rS rSr\R
                  R                  SS9S 5       r\U 4S j5       r	U 4S jr
U 4S jr\U 4S j5       r\U 4S	 j5       r\U 4S
 j5       r\U 4S j5       r\U 4S j5       r\R
                  R#                  SS9U 4S j5       rU 4S jr\U 4S j5       rSrSrSrSrU 4S jrS rU 4S jrU 4S jrU 4S jrS\R>                  S\ S\!4S jr"S\R>                  S\ S\!4S jr#\R
                  R                  S5      \R
                  RI                  SSS/5      S  5       5       r%\U 4S! j5       r&\U 4S" j5       r'\U 4S# j5       r(\U 4S$ j5       r)\\R
                  RI                  S%S&S/5      U 4S' j5       5       r*\U 4S( j5       r+\\R
                  RI                  S)\,RZ                  " / S*Q5      \RZ                  " / S*QS+S,9/S-S./S/9U 4S0 j5       5       r.\\R
                  RI                  S1/ S2Q\RZ                  " / S2QS3S,9\,RZ                  " / S2Q5      // S4QS/9U 4S5 j5       5       r/\R
                  RI                  S6S7S8S9\R`                  /S4\Rb                  " S7S8S9\R`                  /S\R
                  R"                  S:9\RZ                  " S7S8S9\R`                  /S3S,9S4\RZ                  " S7S8S9\R`                  /S3S,9S4// S;QS/9U 4S< j5       r2\U 4S= j5       r3\U 4S> j5       r4S? r5\R
                  R#                  S@S9U 4SA j5       r6\\R
                  RI                  SBSCSD/5      U 4SE j5       5       r7SFr8U =r9$ )GTestNumpyExtensionArray   zWe don't register our dtyper[   c                     g r   rD   )selfr6   s     r   test_from_dtype'TestNumpyExtensionArray.test_from_dtype        	r   c                 $   > [         TU ]  X5        g r   )super)test_series_constructor_scalar_with_index)re   r6   r
   	__class__s      r   rk   ATestNumpyExtensionArray.test_series_constructor_scalar_with_index   s     	9$Fr   c                    > UR                   R                  S:X  aC  UR                  [        R                  R                  SUR                   R                   3S95        [        TU ]  U5        g )Nr   z:NumpyExtensionArray expectedly clashes with a NumPy name: r[   )r
   r   r_   rT   r]   r^   rj   test_check_dtype)re   r6   r   using_infer_stringrl   s       r   ro   (TestNumpyExtensionArray.test_check_dtype   sc    ::!!X-!!##'::#9#9":< "  	 &r   c                 j   > UR                   S:X  a  [        U5      (       d   eg [        TU ]  U5        g )Nr   )r   r   rj   test_is_not_object_type)re   r
   r   rl   s      r   rs   /TestNumpyExtensionArray.test_is_not_object_type   s1    ( #5))))G+E2r   c                 $   > [         TU ]  U5        g r   )rj   test_getitem_scalarre   r6   rl   s     r   rv   +TestNumpyExtensionArray.test_getitem_scalar   s     	#D)r   c                 $   > [         TU ]  U5        g r   )rj   test_shift_fill_valuerw   s     r   rz   -TestNumpyExtensionArray.test_shift_fill_value   s     	%d+r   c                 $   > [         TU ]  U5        g r   )rj   test_fillna_copy_framere   r<   rl   s     r   r}   .TestNumpyExtensionArray.test_fillna_copy_frame   s     	&|4r   c                 $   > [         TU ]  U5        g r   )rj   test_fillna_copy_seriesr~   s     r   r   /TestNumpyExtensionArray.test_fillna_copy_series   s     	'5r   c                 $   > [         TU ]  X5        g r   )rj   test_searchsorted)re   rK   	as_seriesrl   s      r   r   )TestNumpyExtensionArray.test_searchsorted   s    
 	!"2>r   z*NumpyExtensionArray.diff may fail on dtypec                 "   > [         TU ]  X5      $ r   )rj   	test_diff)re   r6   periodsrl   s      r   r   !TestNumpyExtensionArray.test_diff   s    w //r   c                    > UR                   R                  [        :X  a.  [        R                  R                  SS9nUR                  U5        [        TU ]!  U5        g )Nz$Dimension mismatch in np.concatenater[   )	r
   r   r   rT   r]   r^   r_   rj   test_insert)re   r6   r   r]   rl   s       r   r   #TestNumpyExtensionArray.test_insert   sH    ::!!V+;;$$,R$SD%D!r   c                 $   > [         TU ]  X5        g r   )rj   test_insert_invalidre   r6   invalid_scalarrl   s      r   r   +TestNumpyExtensionArray.test_insert_invalid   s     	#D9r   Nc                 t   > S nUR                   R                  S:X  a  [        nX l        [        TU ]  U5        g NrR   )r
   rS   	TypeError
divmod_excrj   test_divmod)re   r6   r   rl   s      r   r   #TestNumpyExtensionArray.test_divmod   s/    
::??c!"J$D!r   c                     [         R                  " U5      nS nUR                  R                  S:X  a  [        nX0l        U R                  U[        U5        g r   )r/   r0   r
   rS   r   r   _check_divmod_opdivmod)re   r6   serexcs       r   test_divmod_series_array0TestNumpyExtensionArray.test_divmod_series_array   s@    iio::??c!C!Oc640r   c                    > UnS nUR                   R                  [        :X  aD  US;   a8  [        R                  R                  SS9nUR                  R                  U5        [        nXPl	        [        TU ]-  X5        g N)__mul____rmul__z9the Series.combine step raises but not the Series method.r[   )r
   r   r   rT   r]   r^   node
add_markerr   series_scalar_excrj   test_arith_series_with_scalar)re   r6   all_arithmetic_operatorsr   opnamer   r]   rl   s          r   r   5TestNumpyExtensionArray.test_arith_series_with_scalar  sr    ) ::!!V+00{{((V )  ''- )!2-dMr   c                    > UnS nUR                   R                  [        :X  a  US;  a  [        nX@l        [
        TU ]  X5        g )N)__add____radd__)r
   r   r   r   series_array_excrj   test_arith_series_with_array)re   r6   r   r   r   rl   s        r   r   4TestNumpyExtensionArray.test_arith_series_with_array  sA    )::!!V+>U0U( 0,TLr   c                    > UnS nUR                   R                  [        :X  aD  US;   a8  [        R                  R                  SS9nUR                  R                  U5        [        nXPl	        [        TU ]-  X5        g r   )r
   r   r   rT   r]   r^   r   r   r   frame_scalar_excrj   test_arith_frame_with_scalar)re   r6   r   r   r   r   r]   rl   s          r   r   4TestNumpyExtensionArray.test_arith_frame_with_scalar  sr    )::!!V+00{{((V )  ''-( 0,TLr   r   op_namereturnc                 B    UR                   R                  S:X  a  US;   $ g)NrR   )summinmaxanyallT)r
   rS   )re   r   r   s      r   _supports_reduction+TestNumpyExtensionArray._supports_reduction&  s!    99>>S AAAr   skipnac                     [        X5      nUR                  R                  nUR                  U5      n[        Xb5      nUS:X  a  U" 5       nU" 5       n	OU" US9nU" US9n	[        R
                  " X5        g )Ncount)r   )r   r
   r   r   r%   assert_almost_equal)
re   r   r   r   res_op	cmp_dtypealtexp_opresultexpecteds
             r   check_reduce$TestNumpyExtensionArray.check_reduce+  sm    & II))	jj#&gXFxH6*FV,H
v0r   zTODO: tests not written yetTFc                     g r   rD   )re   r6   all_numeric_reductionsr   s       r   test_reduce_frame)TestNumpyExtensionArray.test_reduce_frame;  rh   r   c                 $   > [         TU ]  U5        g r   )rj   test_fillna_seriesr~   s     r   r   *TestNumpyExtensionArray.test_fillna_series@  s     	"<0r   c                 $   > [         TU ]  U5        g r   )rj   test_fillna_framer~   s     r   r   )TestNumpyExtensionArray.test_fillna_frameE  s     	!,/r   c                 $   > [         TU ]  X5        g r   )rj   test_setitem_invalidr   s      r   r   ,TestNumpyExtensionArray.test_setitem_invalidJ  s     	$T:r   c                 $   > [         TU ]  X5        g r   )rj    test_setitem_sequence_broadcastsre   r6   box_in_seriesrl   s      r   r   8TestNumpyExtensionArray.test_setitem_sequence_broadcastsO  s     	0Er   setterlocc                 $   > [         TU ]  X5        g r   )rj   test_setitem_mask_broadcast)re   r6   r   rl   s      r   r   3TestNumpyExtensionArray.test_setitem_mask_broadcastU  s    
 	+D9r   c                 $   > [         TU ]  U5        g r   )rj   &test_setitem_scalar_key_sequence_raiserw   s     r   r   >TestNumpyExtensionArray.test_setitem_scalar_key_sequence_raise\  s     	6t<r   mask)TTTFFbooleanr.   numpy-arrayzboolean-array)idsc                 &   > [         TU ]  XU5        g r   )rj   test_setitem_mask)re   r6   r   r   rl   s       r   r   )TestNumpyExtensionArray.test_setitem_maskd  s     	!$m<r   idx)r   r,   rH   Int64)listzinteger-arrayr   c                 &   > [         TU ]  XU5        g r   )rj   test_setitem_integer_arrayre   r6   r   r   rl   s       r   r   2TestNumpyExtensionArray.test_setitem_integer_arrayp  s     	*4mDr   zidx, box_in_seriesr   r,   rH   )marks)z
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec                 &   > [         TU ]  XU5        g r   )rj   (test_setitem_integer_with_missing_raisesr   s       r   r   @TestNumpyExtensionArray.test_setitem_integer_with_missing_raisesy  s     	8MRr   c                 $   > [         TU ]  X5        g r   )rj   test_setitem_slicer   s      r   r   *TestNumpyExtensionArray.test_setitem_slice  s    "47r   c                 $   > [         TU ]  U5        g r   )rj   test_setitem_loc_iloc_slicerw   s     r   r   3TestNumpyExtensionArray.test_setitem_loc_iloc_slice  s    +D1r   c                    [         R                  " S[         R                  " U5      05      =p4[         R                  " UR                  S9nU" U5      nUS   UR                  US4'   UR
                  R                  [        :w  aJ  [        U[        5      (       a  U[        S 5      :w  a&  [         R                  " SUR                  5       05      n[        R                  " XTSS9  g )Nr6   )indexF)check_column_type)r/   	DataFramer0   r   r   r
   r   r   r   sliceto_numpyr%   assert_frame_equal)re   r6   full_indexerdfr   r   keys          r   ,test_setitem_with_expansion_dataframe_columnDTestNumpyExtensionArray.test_setitem_with_expansion_dataframe_column  s    fbiio%>??BHH- 2"$V*

3; ::!!V+c5))SE$K-?<<(AB
f%Hr   zNumpyEADtype is unpackedc                 $   > [         TU ]  U5        g r   )rj   #test_index_from_listlike_with_dtyperw   s     r   r
  ;TestNumpyExtensionArray.test_index_from_listlike_with_dtype  s    3D9r   enginerO   pythonc                 &   > [         TU ]  XU5        g r   )rj   test_EA_types)re   r  r6   r   rl   s       r   r  %TestNumpyExtensionArray.test_EA_types  s     	fG4r   )r   r   r   r   ):__name__
__module____qualname____firstlineno__rT   r]   rU   rf   skip_nestedrk   ro   rs   rv   rz   r}   r   r   r^   r   r   r   r   r   r   r   r   r   r   r   r   r/   r0   strboolr   r   parametrizer   r   r   r   r   r   r   r   r2   r   r   NAr   r   r   r   r  r
  r  __static_attributes____classcell__)rl   s   @r   rb   rb      s$   [[:; < G G'3 * * , , 5 5 6 6 ? ? [[JK0 L0" : : J"1NMMryy 3 4 
1		 1C 1 1  [[34[[Xe}5 6 5 1 1 0 0 ; ; F F
 [[Xt}5: 6 :
 = = [[HH56HH5YG	
 O,  = = [[	BHHYg68KL4  
E E [[Aruuu%LL!Q255)4v{{7H7HIXXq!Q&g6>XXq!Q&g6>		
 U  	S	S 8 8 2 2I" [[89: :: [[XX75 8 5r   rb   c                       \ rS rSrSrg)Test2DCompati  rD   N)r  r  r  r  r  rD   r   r   r  r    s    r   r  )
Attributes)'__doc__numpyr   rT   pandas.core.dtypes.dtypesr   pandasr/   pandas._testing_testingr%   pandas.api.typesr   pandas.core.arrays.numpy_r   pandas.tests.extensionr   r"   r   r  r   fixturer
   r)   r6   r<   rE   rK   rM   rP   rY   r`   r]   usefixturesr  ExtensionTestsrb   NDArrayBacked2DTestsr  rD   r   r   <module>r,     s  "   2   , 9 '-- 3S 3C 3  *+1 ,1  , F F 8 8   
4 
4 9 9    @ @ " " kk%%&9:~5d11 ~5B	4,, 	r   