
    *g<                        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@                  jC                  d      Z" G d dejF                        Z$ G d dejJ                        Z&y)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                 L   | dk(  rt        |dd      }t        |dd      }t        |t              r,t        |t              s|j                  |j                        }n;t        |t              r+t        |t              s|j                  |j                        }t        | |||       y)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         k/var/www/html/articles-backend/trend/venv/lib/python3.12/site-packages/pandas/tests/extension/test_numpy.py_assert_attr_equalr       s    
 wgt,w-e\*:e\3R;;u001D|,Z|5TLL!2!23E4uc2    floatobject)paramsc                 R    t        t        j                  | j                              S N)r   npr
   param)requests    r   r
   r
   0   s    /00r   c              #      K   | j                         5 }|j                  t        dd       |j                  t        j                  dt
               d ddd       y# 1 sw Y   yxY ww)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   sT     " 
			 !			%v{;			",, 35GH  s   A)AA	A)A&"A)c                     |j                   dk(  r7t        j                  t        d      D cg c]  }|f c}      j                  S t        t        j                  dd|j                              S c c}w )Nr   d      e   r
   )	r   pdSeriesrangearrayr   r   arange_dtype)r)   r
   is      r   datar6   L   sW    H$yyc
311$34:::ryyCu||DEE 4s   
A2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   r2   nanr   r)   r
   s     r   data_missingr<   S   sJ    H$"288RVVTN&#IJJrxx677r   c                      d } | S )Nc                 Z    t        j                  |       xr t        j                  |      S r   )r   isnan)abs     r   cmpzna_cmp.<locals>.cmp\   s    xx{*rxx{*r    )rB   s    r   na_cmprD   Z   s    + Jr   c                     |j                   dk(  r)t        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   )rC         r8   r.   r,   N)r,   rG   r   )r   r   r   r2   r   r;   s     r   data_for_sortingrJ   b   sH     H$ #288,B&#QRSRT#UVVrxx	2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   r8   )r   r.   r,   r   r9   r;   s     r   data_missing_for_sortingrL   p   sQ     H$"288T2664,@#OPPrxxBFFA7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   )r8   rF   rH   rI   r.   )r   r   r3   r   r2   r:   )r)   r
   r@   rA   cs        r   data_for_groupingrO   |   sj     H$"1a))A,1a
!Q1a35;L;LM r   c                     | j                   dk(  rt        j                  |  d       t        j                  d      dz  }t        j                  ||       S )NOz is not a numeric dtyper+   rG   r.   )kindpytestskipr   onesr   _from_sequence)r
   arrs     r   data_for_twosrX      sG    zzSug456
''#,
C--c??r   c                 r    | dk(  r2t         j                  j                  d      }|j                  |       yy)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)rS   markxfailapplymarker)r
   r   r\   s      r   skip_numpy_objectr_      s7     {{  (@ AD! r   r_   c                       e Zd Zej                  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                  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                  j                  d      ej                  jG                  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                  jG                  d$d%dg       fd&              Z)e fd'       Z*eej                  jG                  d( e+jX                  g d)       ejX                  g d)d*+      gd,d-g.       fd/              Z-eej                  jG                  d0g d1 ejX                  g d1d2+       e+jX                  g d1      gg d3.       fd4              Z.ej                  jG                  d5d6d7d8ej^                  gdf ej`                  d6d7d8ej^                  gdej                  j                   9       ejX                  d6d7d8ej^                  gd2+      df ejX                  d6d7d8ej^                  gd2+      dfgg d:.       fd;       Z1e fd<       Z2e fd=       Z3d> Z4ej                  j!                  d?       fd@       Z5eej                  jG                  dAdBdCg       fdD              Z6 xZ7S )ETestNumpyExtensionArrayzWe don't register our dtyperZ   c                      y r   rC   )selfr6   s     r   test_from_dtypez'TestNumpyExtensionArray.test_from_dtype        	r   c                 &    t         |   ||       y r   )super)test_series_constructor_scalar_with_index)rc   r6   r
   	__class__s      r   rh   zATestNumpyExtensionArray.test_series_constructor_scalar_with_index   s     	9$Fr   c                     |j                   j                  dk(  rF|j                  t        j                  j                  d|j                   j                                t        |   |       y )Nr   z:NumpyExtensionArray expectedly clashes with a NumPy name: rZ   )r
   r   r^   rS   r\   r]   rg   test_check_dtype)rc   r6   r   using_infer_stringri   s       r   rk   z(TestNumpyExtensionArray.test_check_dtype   sc    ::!!X-!!##'::#9#9":< "  	 &r   c                 ^    |j                   dk(  rt        |      sJ y t        |   |       y )Nr   )r   r   rg   test_is_not_object_type)rc   r
   r   ri   s      r   rn   z/TestNumpyExtensionArray.test_is_not_object_type   s.    ( #5)))G+E2r   c                 $    t         |   |       y r   )rg   test_getitem_scalarrc   r6   ri   s     r   rp   z+TestNumpyExtensionArray.test_getitem_scalar   s     	#D)r   c                 $    t         |   |       y r   )rg   test_shift_fill_valuerq   s     r   rs   z-TestNumpyExtensionArray.test_shift_fill_value   s     	%d+r   c                 $    t         |   |       y r   )rg   test_fillna_copy_framerc   r<   ri   s     r   ru   z.TestNumpyExtensionArray.test_fillna_copy_frame   s     	&|4r   c                 $    t         |   |       y r   )rg   test_fillna_copy_seriesrv   s     r   rx   z/TestNumpyExtensionArray.test_fillna_copy_series   s     	'5r   c                 &    t         |   ||       y r   )rg   test_searchsorted)rc   rJ   	as_seriesri   s      r   rz   z)TestNumpyExtensionArray.test_searchsorted   s    
 	!"2I>r   z*NumpyExtensionArray.diff may fail on dtypec                 $    t         |   ||      S r   )rg   	test_diff)rc   r6   periodsri   s      r   r}   z!TestNumpyExtensionArray.test_diff   s    w w//r   c                     |j                   j                  t        k(  r1t        j                  j                  d      }|j                  |       t        | !  |       y )Nz$Dimension mismatch in np.concatenaterZ   )	r
   r   r   rS   r\   r]   r^   rg   test_insert)rc   r6   r   r\   ri   s       r   r   z#TestNumpyExtensionArray.test_insert   sH    ::!!V+;;$$,R$SD%D!r   c                 &    t         |   ||       y r   )rg   test_insert_invalidrc   r6   invalid_scalarri   s      r   r   z+TestNumpyExtensionArray.test_insert_invalid   s     	#D.9r   Nc                 t    d }|j                   j                  dk(  rt        }|| _        t        |   |       y NrQ   )r
   rR   	TypeError
divmod_excrg   test_divmod)rc   r6   r   ri   s      r   r   z#TestNumpyExtensionArray.test_divmod   s1    
::??c!"J$D!r   c                     t        j                  |      }d }|j                  j                  dk(  rt        }|| _        | j                  |t        |       y r   )r/   r0   r
   rR   r   r   _check_divmod_opdivmod)rc   r6   serexcs       r   test_divmod_series_arrayz0TestNumpyExtensionArray.test_divmod_series_array   sB    iio::??c!C!DOc640r   c                     |}d }|j                   j                  t        k(  rE|dv r;t        j                  j                  d      }|j                  j                  |       t        }|| _	        t        | -  ||       y N)__mul____rmul__z9the Series.combine step raises but not the Series method.rZ   )r
   r   r   rS   r\   r]   node
add_markerr   series_scalar_excrg   test_arith_series_with_scalar)rc   r6   all_arithmetic_operatorsr   opnamer   r\   ri   s          r   r   z5TestNumpyExtensionArray.test_arith_series_with_scalar  sw    ) ::!!V+00{{((V )  ''- )!2-d4LMr   c                     |}d }|j                   j                  t        k(  r
|dvrt        }|| _        t
        |   ||       y )N)__add____radd__)r
   r   r   r   series_array_excrg   test_arith_series_with_array)rc   r6   r   r   r   ri   s        r   r   z4TestNumpyExtensionArray.test_arith_series_with_array  sF    )::!!V+>U0U( 0,T3KLr   c                     |}d }|j                   j                  t        k(  rE|dv r;t        j                  j                  d      }|j                  j                  |       t        }|| _	        t        | -  ||       y r   )r
   r   r   rS   r\   r]   r   r   r   frame_scalar_excrg   test_arith_frame_with_scalar)rc   r6   r   r   r   r   r\   ri   s          r   r   z4TestNumpyExtensionArray.test_arith_frame_with_scalar  sw    )::!!V+00{{((V )  ''-( 0,T3KLr   r   op_namereturnc                 >    |j                   j                  dk(  r|dv S y)NrQ   )summinmaxanyallT)r
   rR   )rc   r   r   s      r   _supports_reductionz+TestNumpyExtensionArray._supports_reduction&  s!    99>>S AAAr   skipnac                     t        ||      }|j                  j                  }|j                  |      }t        ||      }|dk(  r |       } |       }	n ||      } ||      }	t	        j
                  ||	       y )Ncount)r   )r   r
   r   r   r%   assert_almost_equal)
rc   r   r   r   res_op	cmp_dtypealtexp_opresultexpecteds
             r   check_reducez$TestNumpyExtensionArray.check_reduce+  ss    g& II))	jj#g&gXFxH6*FV,H
vx0r   zTODO: tests not written yetTFc                      y r   rC   )rc   r6   all_numeric_reductionsr   s       r   test_reduce_framez)TestNumpyExtensionArray.test_reduce_frame;  re   r   c                 $    t         |   |       y r   )rg   test_fillna_seriesrv   s     r   r   z*TestNumpyExtensionArray.test_fillna_series@  s     	"<0r   c                 $    t         |   |       y r   )rg   test_fillna_framerv   s     r   r   z)TestNumpyExtensionArray.test_fillna_frameE  s     	!,/r   c                 &    t         |   ||       y r   )rg   test_setitem_invalidr   s      r   r   z,TestNumpyExtensionArray.test_setitem_invalidJ  s     	$T>:r   c                 &    t         |   ||       y r   )rg    test_setitem_sequence_broadcastsrc   r6   box_in_seriesri   s      r   r   z8TestNumpyExtensionArray.test_setitem_sequence_broadcastsO  s     	0}Er   setterlocc                 &    t         |   ||       y r   )rg   test_setitem_mask_broadcast)rc   r6   r   ri   s      r   r   z3TestNumpyExtensionArray.test_setitem_mask_broadcastU  s    
 	+D&9r   c                 $    t         |   |       y r   )rg   &test_setitem_scalar_key_sequence_raiserq   s     r   r   z>TestNumpyExtensionArray.test_setitem_scalar_key_sequence_raise\  s     	6t<r   mask)TTTFFbooleanr.   numpy-arrayzboolean-array)idsc                 (    t         |   |||       y r   )rg   test_setitem_mask)rc   r6   r   r   ri   s       r   r   z)TestNumpyExtensionArray.test_setitem_maskd  s     	!$m<r   idx)r   r,   rG   Int64)listzinteger-arrayr   c                 (    t         |   |||       y r   )rg   test_setitem_integer_arrayrc   r6   r   r   ri   s       r   r   z2TestNumpyExtensionArray.test_setitem_integer_arrayp  s     	*4mDr   zidx, box_in_seriesr   r,   rG   )marks)z
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec                 (    t         |   |||       y r   )rg   (test_setitem_integer_with_missing_raisesr   s       r   r   z@TestNumpyExtensionArray.test_setitem_integer_with_missing_raisesy  s     	8sMRr   c                 &    t         |   ||       y r   )rg   test_setitem_slicer   s      r   r   z*TestNumpyExtensionArray.test_setitem_slice  s    "47r   c                 $    t         |   |       y r   )rg   test_setitem_loc_iloc_slicerq   s     r   r   z3TestNumpyExtensionArray.test_setitem_loc_iloc_slice  s    +D1r   c                    t        j                  dt        j                  |      i      x}}t        j                  |j                        } ||      }|d   |j                  |df<   |j
                  j                  t        k7  rCt        |t              r|t        d       k7  r%t        j                  d|j                         i      }t        j                  ||d       y )Nr6   )indexF)check_column_type)r/   	DataFramer0   r   r   r
   r   r   r   sliceto_numpyr%   assert_frame_equal)rc   r6   full_indexerdfr   r   keys          r   ,test_setitem_with_expansion_dataframe_columnzDTestNumpyExtensionArray.test_setitem_with_expansion_dataframe_column  s    fbiio%>??XBHH- 2"$V*

3; ::!!V+c5)SE$K-?<<(AB
fh%Hr   zNumpyEADtype is unpackedc                 $    t         |   |       y r   )rg   #test_index_from_listlike_with_dtyperq   s     r   r   z;TestNumpyExtensionArray.test_index_from_listlike_with_dtype  s    3D9r   enginerN   pythonc                 (    t         |   |||       y r   )rg   test_EA_types)rc   r   r6   r   ri   s       r   r   z%TestNumpyExtensionArray.test_EA_types  s     	fdG4r   )8__name__
__module____qualname__rS   r\   rT   rd   skip_nestedrh   rk   rn   rp   rs   ru   rx   rz   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   __classcell__)ri   s   @r   ra   ra      s2   [[:; < 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 :
 = = [[BHH56BHH5YG	
 O,  = = [[	HBHHYg68KL4  
E E [[Aruuu%FLL!Q255)4v{{7H7HIRXXq!Q&g6>RXXq!Q&g6>		
 U  	S	S 8 8 2 2I" [[89: :: [[XX75 8 5r   ra   c                       e Zd Zy)Test2DCompatN)r   r   r   rC   r   r   r   r     s    r   r   )
Attributes)'__doc__numpyr   rS   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<   rD   rJ   rL   rO   rX   r_   r\   usefixturesr   ExtensionTestsra   NDArrayBacked2DTestsr   rC   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   