
    4i>                        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         c/var/www/html/dynamic-report/venv/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
   1   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)   6   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                  nO [
        R                  " SSUR                  S9n[        U5      $ s  snf )Nr   
         r
   )	r   pdSeriesrange_valuesr   arange_dtyper   )r)   r
   iarrs       r   datar7   M   s]    H$iiuRy1y!y12::ii2U\\2s## 2s   A7c                     UR                   S:X  a2  [        [        R                  " [        R                  S/[
        S95      $ [        [        R                  " [        R                  S/5      5      $ )Nr   r,   r.   g      ?r   r   r   arraynanr   r)   r
   s     r   data_missingr>   V   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    )rD   s    r   na_cmprG   ]   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   )rF         r9   r.   r,   N)r,   rJ   r   )r   r   r   r;   r   r=   s     r   data_for_sortingrM   e   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   r9   )r   r.   r,   r   r:   r=   s     r   data_missing_for_sortingrO   s   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   )r9   rI   rK   rL   r.   )r   r   r3   r   r;   r<   )r)   r
   rB   rC   cs        r   data_for_groupingrR      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+   rJ   r.   )kindpytestskipr   onesr   _from_sequence)r
   r6   s     r   data_for_twosrZ      sD    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)rV   markxfailapplymarker)r
   r   r^   s      r   skip_numpy_objectra      s7     {{  (@ AD! r   ra   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\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\ RB                  S\"S\#4S jr$S\ RB                  S\"S\#4S jr%\R
                  R                  S5      \R
                  RM                  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+\U 4S' j5       r,\\R
                  RM                  S(S)S/5      U 4S* j5       5       r-\U 4S+ j5       r.\\R
                  RM                  S,\/R`                  " / S-Q5      \ R`                  " / S-QS.S/9/S0S1/S29U 4S3 j5       5       r1\\R
                  RM                  S4/ S5Q\ R`                  " / S5QS6S/9\/R`                  " / S5Q5      // S7QS29U 4S8 j5       5       r2\U 4S9 j5       r3\U 4S: j5       r4S; r5\R
                  R'                  S<S9U 4S= j5       r6\\R
                  RM                  S>S?S@/5      U 4SA j5       5       r7U 4SB jr8SCr9U =r:$ )DTestNumpyExtensionArray   zWe don't register our dtyper\   c                     g r   rF   )selfr7   s     r   test_from_dtype'TestNumpyExtensionArray.test_from_dtype        	r   c                 $   > [         TU ]  X5        g r   )super)test_series_constructor_scalar_with_index)rf   r7   r
   	__class__s      r   rl   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`   rV   r^   r_   rk   test_check_dtype)rf   r7   r   using_infer_stringrm   s       r   rp   (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   rk   test_is_not_object_type)rf   r
   r   rm   s      r   rt   /TestNumpyExtensionArray.test_is_not_object_type   s1    ( #5))))G+E2r   c                 $   > [         TU ]  U5        g r   )rk   test_getitem_scalarrf   r7   rm   s     r   rw   +TestNumpyExtensionArray.test_getitem_scalar   s     	#D)r   c                 $   > [         TU ]  U5        g r   )rk   test_shift_fill_valuerx   s     r   r{   -TestNumpyExtensionArray.test_shift_fill_value   s     	%d+r   c                 $   > [         TU ]  U5        g r   )rk   test_fillna_limit_framerf   r>   rm   s     r   r~   /TestNumpyExtensionArray.test_fillna_limit_frame   s     	'5r   c                 $   > [         TU ]  U5        g r   )rk   test_fillna_limit_seriesr   s     r   r   0TestNumpyExtensionArray.test_fillna_limit_series   s     	(6r   c                 $   > [         TU ]  U5        g r   )rk   test_fillna_copy_framer   s     r   r   .TestNumpyExtensionArray.test_fillna_copy_frame   s     	&|4r   c                 $   > [         TU ]  U5        g r   )rk   test_fillna_copy_seriesr   s     r   r   /TestNumpyExtensionArray.test_fillna_copy_series   s     	'5r   c                 $   > [         TU ]  X5        g r   )rk   test_searchsorted)rf   rM   	as_seriesrm   s      r   r   )TestNumpyExtensionArray.test_searchsorted   s    
 	!"2>r   z*NumpyExtensionArray.diff may fail on dtypec                 "   > [         TU ]  X5      $ r   )rk   	test_diff)rf   r7   periodsrm   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   rV   r^   r_   r`   rk   test_insertrf   r7   r   r^   rm   s       r   r   #TestNumpyExtensionArray.test_insert   sH    ::!!V+;;$$,R$SD%D!r   c                 $   > [         TU ]  X5        g r   )rk   test_insert_invalidrf   r7   invalid_scalarrm   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 NrT   )r
   rU   	TypeError
divmod_excrk   test_divmod)rf   r7   r   rm   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
   rU   r   r   _check_divmod_opdivmod)rf   r7   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   rV   r^   r_   node
add_markerr   series_scalar_excrk   test_arith_series_with_scalar)rf   r7   all_arithmetic_operatorsr   opnamer   r^   rm   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_excrk   test_arith_series_with_array)rf   r7   r   r   r   rm   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   rV   r^   r_   r   r   r   frame_scalar_excrk   test_arith_frame_with_scalar)rf   r7   r   r   r   r   r^   rm   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)NrT   )summinmaxanyallT)r
   rU   )rf   r   r   s      r   _supports_reduction+TestNumpyExtensionArray._supports_reduction5  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)
rf   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   rF   )rf   r7   all_numeric_reductionsr   s       r   test_reduce_frame)TestNumpyExtensionArray.test_reduce_frameJ  ri   r   c                 $   > [         TU ]  U5        g r   )rk   test_fillna_seriesr   s     r   r   *TestNumpyExtensionArray.test_fillna_seriesO  s     	"<0r   c                 $   > [         TU ]  U5        g r   )rk   test_fillna_framer   s     r   r   )TestNumpyExtensionArray.test_fillna_frameT  s     	!,/r   c                 $   > [         TU ]  U5        g r   )rk   test_fillna_readonlyr   s     r   r   ,TestNumpyExtensionArray.test_fillna_readonlyY  s     	$\2r   c                 $   > [         TU ]  X5        g r   )rk   test_setitem_invalidr   s      r   r   ,TestNumpyExtensionArray.test_setitem_invalid^  s     	$T:r   c                 $   > [         TU ]  X5        g r   )rk    test_setitem_sequence_broadcastsrf   r7   box_in_seriesrm   s      r   r   8TestNumpyExtensionArray.test_setitem_sequence_broadcastsc  s     	0Er   setterlocc                 $   > [         TU ]  X5        g r   )rk   test_setitem_mask_broadcast)rf   r7   r   rm   s      r   r   3TestNumpyExtensionArray.test_setitem_mask_broadcasti  s    
 	+D9r   c                 $   > [         TU ]  U5        g r   )rk   &test_setitem_scalar_key_sequence_raiserx   s     r   r   >TestNumpyExtensionArray.test_setitem_scalar_key_sequence_raisep  s     	6t<r   mask)TTTFFbooleanr.   numpy-arrayzboolean-array)idsc                 &   > [         TU ]  XU5        g r   )rk   test_setitem_mask)rf   r7   r   r   rm   s       r   r   )TestNumpyExtensionArray.test_setitem_maskx  s     	!$m<r   idx)r   r,   rJ   Int64)listzinteger-arrayr   c                 &   > [         TU ]  XU5        g r   )rk   test_setitem_integer_array)rf   r7   r   r   rm   s       r   r   2TestNumpyExtensionArray.test_setitem_integer_array  s     	*4mDr   c                 $   > [         TU ]  X5        g r   )rk   test_setitem_slicer   s      r   r   *TestNumpyExtensionArray.test_setitem_slice  s    "47r   c                 $   > [         TU ]  U5        g r   )rk   test_setitem_loc_iloc_slicerx   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 )Nr7   )indexF)check_column_type)r/   	DataFramer0   r  r   r
   r   r   r   sliceto_numpyr%   assert_frame_equal)rf   r7   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   )rk   #test_index_from_listlike_with_dtyperx   s     r   r  ;TestNumpyExtensionArray.test_index_from_listlike_with_dtype  s    3D9r   enginerQ   pythonc                 &   > [         TU ]  XU5        g r   )rk   test_EA_types)rf   r  r7   r   rm   s       r   r  %TestNumpyExtensionArray.test_EA_types  s     	fG4r   c                    > [        US   [        5      (       a.  [        R                  R	                  SS9nUR                  U5        [        TU ]  U5        g )NzUnpacks tupler\   )r   tuplerV   r^   r_   r`   rk   8test_loc_setitem_with_expansion_preserves_ea_index_dtyper   s       r   r  PTestNumpyExtensionArray.test_loc_setitem_with_expansion_preserves_ea_index_dtype  sF    d2h&&;;$$O$<D%HNr   )r   r   r   r   );__name__
__module____qualname____firstlineno__rV   r^   rW   rg   skip_nestedrl   rp   rt   rw   r{   r~   r   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   r   r;   r   r   r   r  r  r  r  r  __static_attributes____classcell__)rm   s   @r   rc   rc      s   [[:; < G G'3 * * , , 6 6
 7 7
 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 3 3 ; ; F F
 [[Xt}5: 6 :
 = = [[HH56HH5YG	
 O,  = = [[	BHHYg68KL4  
E E 8 8 2 2I" [[89: :: [[XX75 8 5O Or   rc   c                       \ rS rSrSrg)Test2DCompati  rF   N)r  r  r  r  r$  rF   r   r   r'  r'    s    r   r'  )
Attributes)'__doc__numpyr   rV   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)   r7   r>   rG   rM   rO   rR   rZ   ra   r^   usefixturesr   ExtensionTestsrc   NDArrayBacked2DTestsr'  rF   r   r   <module>r6     s  $   2   , 9 '-- 3S 3C 3  *+1 ,1  , $ $ 8 8   
4 
4 9 9    @ @ " " kk%%&9:HOd11 HOV	4,, 	r   