
    o[we<                        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 d Zej        d             Z ej        dej        g	          d
             Zej        d             Z ej        dej        g	          d             Z ej        dej        g	          d             Z ej        dej        g	          d             Z ej        dej        g	          d             Zej        d             Z ej        dej        g	          d             Z ej        dej        g	          d             Z G d d          Z G d deej                  Z G d deej                   Z! G d deej"                  Z# G d deej$                  Z% G d deej&                  Z' G d d eej(                  Z) G d! d"ej*                  Z+ G d# d$eej,                  Z- G d% d&eej.                  Z/ G d' d(eej0                  Z1 G d) d*eej2                  Z3 G d+ d,e          Z4 G d- d.eej5                  Z6 G d/ d0eej7                  Z8 G d1 d2ej9                  Z:dS )3aj  
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/`.

    N)PerformanceWarningSparseDtype)SparseArray)basec                 *   t           j                            d          }t          j        |           r|                    d          }n@|                    dddt                    }|d         |d         k    r|dxx         dz  cc<   | |dd d<   |S )N   d   )size   )r   dtyper      )nprandomdefault_rngisnanuniformintegersint)
fill_valuerngdatas      Blib/python3.11/site-packages/pandas/tests/extension/test_sparse.py	make_datar      s    
)


"
"C	x
 {{{$$||AsC|887d1gGGGqLGGGDAJK    c                      t                      S Nr    r   r   r   r   *   s    ==r   )paramsc                 V    t          t          | j                  | j                  }|S )z*Length-100 PeriodArray for semantics test.r   )r   r   param)requestress     r   r   r   /   s'     i..7=
I
I
ICJr   c                  J    t          t          j        d          dz            S )Nr
   r	   )r   r   onesr   r   r   data_for_twosr'   6   s    rws||a'(((r   c                 F    t          t          j        dg| j                  S )zLength 2 array with [NA, Valid]r   r!   r   r   nanr"   r#   s    r   data_missingr,   ;   s     {w}====r   c              #       K    fd}|V  dS )z1Return different versions of data for count timesc              3      K   t          |           D ],}t          t          j                  j                  V  -d S )Nr!   )ranger   r   r"   )count_r#   s     r   genzdata_repeated.<locals>.genE   sR      u 	R 	RAi667=QQQQQQQ	R 	Rr   Nr   )r#   r2   s   ` r   data_repeatedr3   A   s4      R R R R R IIIIIr   c                 2    t          g d| j                  S )N)r	   r   r   r!   )r   r"   r+   s    r   data_for_sortingr5   L   s    yyyW];;;;r   c                 H    t          dt          j        dg| j                  S )Nr	   r   r!   r)   r+   s    r   data_missing_for_sortingr7   Q   s    261~'-@@@@r   c                      d S )Nc                 R    t          j        |           ot          j        |          S r   )pdisna)leftrights     r   <lambda>zna_cmp.<locals>.<lambda>X   s    rwt}}? r   r   r   r   r   na_cmpr?   V   s    ???r   c           
      f    t          ddt          j        t          j        ddddg| j                  S )Nr   r	   r   r!   r)   r+   s    r   data_for_groupingrA   [   s,    1bfbfaAq9gmTTTTr   c                 V    t          ddt          j        dddddddg
| j                  S )Nr      r	   r   r!   r)   r+   s    r   data_for_comparerF   `   s.    1bfb"aAq!<WWWWr   c                       e Zd Zd ZdS )BaseSparseTestsc                 n    |j         t          t          d          k    rt          j        d           d S d S )Nr   zCan't store nan in int array.)r   r   r   pytestskipselfr   s     r   _check_unsupportedz"BaseSparseTests._check_unsupportedf   s8    :S!,,,,K788888 -,r   N)__name__
__module____qualname__rN   r   r   r   rH   rH   e   s#        9 9 9 9 9r   rH   c                       e Zd Zd ZdS )	TestDtypec                 @    |                                 t          u sJ d S r   )construct_array_typer   )rM   r   r   s      r   test_array_type_with_argz"TestDtype.test_array_type_with_argl   s%    ))++{::::::r   N)rO   rP   rQ   rV   r   r   r   rS   rS   k   s#        ; ; ; ; ;r   rS   c                       e Zd ZdS )TestInterfaceNrO   rP   rQ   r   r   r   rX   rX   p           Dr   rX   c                       e Zd ZdS )TestConstructorsNrY   r   r   r   r\   r\   t   rZ   r   r\   c            	       ,    e Zd Zd Zej                            dddgej        	                    ddgddg	          g          ej                            d
ddg           fd                        Z
 fdZ fdZ fdZ fdZ fdZ fdZ xZS )TestReshapingc                 `   t          j        d|d d         i          }t          j        dg di          }t          j        dg di                              d          }|||g}t          j        |          }t          j        d |D                       }t	          j        ||           d S )NAr   )r   r	   r   )abccategoryc                 :    g | ]}|                     d            S )c                 Z    t          j        |                               t                    S r   )r   asarrayastypeobject)ss    r   r>   zCTestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>   s    rz!}}33F;; r   )apply).0xs     r   
<listcomp>z:TestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>   s(    JJJQWW;;<<JJJr   )r:   	DataFramerh   concattmassert_frame_equal)rM   r   df1df2df3dfsresultexpecteds           r   test_concat_mixed_dtypesz&TestReshaping.test_concat_mixed_dtypesy   s     lCbqb?++lC+,,lC12299*EECo 39JJcJJJ
 
 	fh/////r   columnsr`   B)r`   ra   )r`   rb   outerinner)namesfuture_stackTFc                 N    t                                          |||           d S r   )super
test_stack)rM   r   rz   r   	__class__s       r   r   zTestReshaping.test_stack   s'     	4,77777r   c                 v    |                      |           t                                          ||           d S r   )rN   r   test_concat_columnsrM   r   na_valuer   s      r   r   z!TestReshaping.test_concat_columns   s7    %%%##D(33333r   c                 v    |                      |           t                                          ||           d S r   )rN   r   'test_concat_extension_arrays_copy_falser   s      r   r   z5TestReshaping.test_concat_extension_arrays_copy_false   s7    %%%77hGGGGGr   c                 v    |                      |           t                                          ||           d S r   )rN   r   
test_alignr   s      r   r   zTestReshaping.test_align   7    %%%4*****r   c                 v    |                      |           t                                          ||           d S r   )rN   r   test_align_framer   s      r   r   zTestReshaping.test_align_frame   s7    %%%  x00000r   c                 v    |                      |           t                                          ||           d S r   )rN   r   test_align_series_framer   s      r   r   z%TestReshaping.test_align_series_frame   s7    %%%''h77777r   c                 v    |                      |           t                                          ||           d S r   )rN   r   
test_merger   s      r   r   zTestReshaping.test_merge   r   r   )rO   rP   rQ   ry   rJ   markparametrizer:   
MultiIndexfrom_tuplesr   r   r   r   r   r   r   __classcell__r   s   @r   r^   r^   x   s^       0 0 0 [#JM%%Z('0B &  	
  [^dE];;8 8 8 8 <; 84 4 4 4 4H H H H H+ + + + +1 1 1 1 18 8 8 8 8+ + + + + + + + +r   r^   c                   $     e Zd Zd Z fdZ xZS )TestGetitemc           	         t          j        |d t          t          |                    D                       }t	          j        |j        j                  rIt	          j        |                    d                    rt	          j        |j	        d                   sJ n&|                    d          |j	        d         k    sJ |                    d          |j	        d         k    sJ d S )Nc                     g | ]}d |z  S )r	   r   )rl   is     r   rn   z(TestGetitem.test_get.<locals>.<listcomp>   s    $E$E$EqQU$E$E$Er   )indexrE   r	   r   )
r:   Seriesr/   lenr   r   valuesr   getiloc)rM   r   sers      r   test_getzTestGetitem.test_get   s    i$E$EE#d))4D4D$E$E$EFFF8CJ)** 	-8CGGAJJ''ABHSXa[,A,AAAAA771::!,,,,wwqzzSXa[((((((r   c                 v    |                      |           t                                          ||           d S r   )rN   r   test_reindexr   s      r   r   zTestGetitem.test_reindex   s7    %%%T8,,,,,r   )rO   rP   rQ   r   r   r   r   s   @r   r   r      sG        ) ) )- - - - - - - - -r   r   c                       e Zd ZdS )TestSetitemNrY   r   r   r   r   r      rZ   r   r   c                       e Zd ZdS )	TestIndexNrY   r   r   r   r   r      rZ   r   r   c                        e Zd Zd Z fdZ fdZej                            d           fd            Z	d Z
 xZS )TestMissingc                     t          |          }t          t          t          j        |j        j                            }t          ddg|          }|                                }t          j        ||           |	                    d          }t          t          t          j        |j        j                            }t          ddgd|          }t          j
        |                                |           d S )NTFr   r   r   r   )r   r   boolr:   r;   r   r   rq   assert_sp_array_equalfillnaassert_equal)rM   r,   sarrexpected_dtyperx   rw   s         r   	test_isnazTestMissing.test_isna   s    <(($T27<3E3P+Q+QRRe}NCCC
 222 {{1~~$T27<3E3P+Q+QRRu~%~VVV
		X.....r   c                     t           t          f}t          j        |d          5  t	                                          |           d d d            d S # 1 swxY w Y   d S NF)check_stacklevel)r   FutureWarningrq   assert_produces_warningr   test_fillna_limit_backfill)rM   r,   warnsr   s      r   r   z&TestMissing.test_fillna_limit_backfill   s    #]3'FFF 	= 	=GG..|<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   "AAAc                     t          j        |j                  r8|j                            t
          j                            d                     t                      	                    |           d S )Nz'returns array with different fill valuereason)
r   r   r   node
add_markerrJ   r   xfailr   test_fillna_no_op_returns_copy)rM   r   r#   r   s      r   r   z*TestMissing.test_fillna_no_op_returns_copy   sh    8DO$$ 	L##!!)R!SS   	..t44444r   Unsupportedr   c                 H    t                                                       d S r   )r   test_fillna_series)rM   r   s    r   r   zTestMissing.test_fillna_series   s!     	""$$$$$r   c                 d   |d         }t          j        |ddgd                              |          }t          j        |j                  rt          |j        |          }n|j        }t          j        |                    ||g|          ddgd          }t          j	        ||           d S )Nr   r	   )r`   r{   r   )
r:   ro   r   r;   r   r   r   _from_sequencerq   rr   )rM   r,   r   rw   r   rx   s         r   test_fillna_framezTestMissing.test_fillna_frame   s    !!_
L1v>>??FFzRR7<*++ 	' 2J??EE &E<!00*j1IQV0WWV 
 
 	fh/////r   )rO   rP   rQ   r   r   r   rJ   r   r   r   r   r   r   s   @r   r   r      s        / / /= = = = =
5 5 5 5 5 [m,,% % % % -,%0 0 0 0 0 0 0r   r   c                   x    e Zd ZdZd Zd Zej                            d           fd            Z	d Z
 fdZd	 Zej                            d
ddg           fd            Zej                            dej        ej        ej        g           fd            Zej                            dd d edej        g          fd d edej        g          fed eddgd          fed edej        g          fg          d             Zej                            dddg          d             Z xZS )TestMethodszSparse[bool]c                    |                     ddg          }t          j        d|id          }|j        d         }|                    |          }t          |j        d          r7|r|j        j        |j        j        u sJ n|j        j        |j        j        usJ |j	        j
                                        |                                u sJ d S )Nr   r`   Fcopy)r   r   blocks)taker:   ro   r   r   hasattr_mgrr   r   r`   _valuesto_dense)rM   r,   using_copy_on_writearrdf
filled_valrw   s          r   test_fillna_copy_framez"TestMethods.test_fillna_copy_frame   s    A''\3*5111WT]
:&&27H%% 	@" @y~);;;;;;y~V]-?????t|$$&&#,,..888888r   c                 >   |                     ddg          }t          j        |d          }|d         }|                    |          }|r|j        |j        u sJ n|j        |j        usJ |j                                        |                                u sJ d S )Nr   Fr   r   )r   r:   r   r   r   r   )rM   r,   r   r   r   r   rw   s          r   test_fillna_copy_seriesz#TestMethods.test_fillna_copy_series	  s    A''i%(((V
J'' 	5;&.00000 ;fn4444{##%%777777r   zNot Applicabler   c                 J    t                                          |           d S r   )r   test_fillna_length_mismatch)rM   r,   r   s     r   r   z'TestMethods.test_fillna_length_mismatch  s!    ++L99999r   c                    |d         |d         k    sJ t          |          }|d d         \  }}t          j        |                    ||||g|j                            }t          j        g d          }|                    |          }t          dd          }	t          j        |                    ||||g|	                    }
t          j
        ||
           |                    ||||g|j                  }t          j        g d          }|                    ||          }t          j        |                    ||||g|j                            }
t          j
        ||
           d S )	Nr   r   r	   r   )TTFFfloatg        )TFTT)typer:   r   r   r   r   arraywherer   rq   assert_series_equal)rM   r   r   clsra   rb   r   condrw   	new_dtyperx   others               r   test_where_serieszTestMethods.test_where_series  sl   Aw$q'!!!!4jjBQBx1i**Aq!Q<tz*JJKKx222334--	91h9KK
 
 	vx000""Aq!Q<tz"BBx111224''9S//Aq!DJ/OOPP
vx00000r   c                     t          j        t          d          5  t                                          ||           d d d            d S # 1 swxY w Y   d S r   )rq   r   r   r   test_searchsorted)rM   r5   	as_seriesr   s      r   r   zTestMethods.test_searchsorted1  s    '(:USSS 	C 	CGG%%&6	BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   #AAAc                     |                     d          }|j        d         |j        d<   |j        d         |j        d         k    sJ d S )Nr   r   )shift_sparse_values)rM   r   rw   s      r   test_shift_0_periodsz TestMethods.test_shift_0_periods5  sM    A!%!4Q!7A$Q'6+@+CCCCCCCr   methodargmaxargminc                 x    |                      |           t                                          |||           d S r   )rN   r   test_argmin_argmax_all_na)rM   r   r   r   r   s       r   r   z%TestMethods.test_argmin_argmax_all_na<  s;     	%%%))&$AAAAAr   boxc                 z    |                      |           t                                          ||||           d S r   )rN   r   test_equals)rM   r   r   r   r   r   s        r   r   zTestMethods.test_equalsB  s;    %%%D(Is;;;;;r   zfunc, na_action, expectedc                     | S r   r   rm   s    r   r>   zTestMethods.<lambda>J      q r   Ng      ?c                     | S r   r   r   s    r   r>   zTestMethods.<lambda>K  r   r   ignorez1.0r*   r!   c                     t          dt          j        g          }|                    ||          }t	          j        ||           d S )Nr   	na_action)r   r   r*   maprq   assert_extension_array_equal)rM   funcr  rx   r   rw   s         r   test_mapzTestMethods.test_mapG  sE     Arv;''$)44
'99999r   r  c                     d}t          j        t          |          5  |                    d |           d d d            d S # 1 swxY w Y   d S )Nz-fill value in the sparse values not supportedmatchc                     t           j        S r   )r   r*   r   s    r   r>   z-TestMethods.test_map_raises.<locals>.<lambda>[  s    rv r   r   )rJ   raises
ValueErrorr  )rM   r   r  msgs       r   test_map_raiseszTestMethods.test_map_raisesV  s     >]:S111 	< 	<HH%%H;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   AAA)rO   rP   rQ   _combine_le_expected_dtyper   r   rJ   r   r   r   r   r   r   r   r   r:   r   r   ro   r   r   r   r*   strr  r  r   r   s   @r   r   r      s       !/9 9 98 8 8 [.//: : : : 0/:1 1 1,C C C C CD D D [X(';<<B B B B =<B
 [URXry",$GHH< < < < IH< [#[$S"&M : :;[(KKbf$>$>?$UENuEEEF(KK889		
 : : : [[4*:;;< < <;< < < < <r   r   c                   b     e Zd Zej                            ed           fd            Z xZS )TestCastingzno sparse StringDtype)r
  r   c                 J    t                                          |           d S r   )r   test_astype_string)rM   r   r   s     r   r  zTestCasting.test_astype_string_  s!    ""4(((((r   )	rO   rP   rQ   rJ   r   r   	TypeErrorr  r   r   s   @r   r  r  ^  sZ        [i0GHH) ) ) ) IH) ) ) ) )r   r  c                   H     e Zd ZdZdZdZdZd Z fdZ fdZ	 fdZ
 xZS )TestArithmeticOpsNc                 H    |j         dk    rt          j        d           d S d S )Nr   z=Incorrected expected from Series.combine and tested elsewhere)r   rJ   rK   rL   s     r   _skip_if_different_combinez,TestArithmeticOps._skip_if_different_combinej  s0    ?a KWXXXXX	  r   c                 v    |                      |           t                                          ||           d S r   )r  r   test_arith_series_with_scalarrM   r   all_arithmetic_operatorsr   s      r   r  z/TestArithmeticOps.test_arith_series_with_scalarq  s8    ''-----d4LMMMMMr   c                 v    |                      |           t                                          ||           d S r   )r  r   test_arith_series_with_arrayr  s      r   r  z.TestArithmeticOps.test_arith_series_with_arrayu  s8    ''---,,T3KLLLLLr   c                    |j         j        dk    rnQ|                    d          dvr:t          j                            d          }|j                            |           t                      	                    ||           d S )Nr   r1   )mulrmulfloordiv	rfloordivpowmodrmodz result dtype.fill_value mismatchr   )
r   r   striprJ   r   r   r   r   r   test_arith_frame_with_scalar)rM   r   r  r#   r   r   s        r   r(  z.TestArithmeticOps.test_arith_frame_with_scalary  s    : A%%%++C00 9
 
 
 ;$$,N$OODL##D))),,T3KLLLLLr   )rO   rP   rQ   series_scalar_excframe_scalar_exc
divmod_excseries_array_excr  r  r  r(  r   r   s   @r   r  r  d  s        JY Y YN N N N NM M M M MM M M M M M M M Mr   r  c                       e Zd ZdefdZdefdZej                            d          defd            Z	ej                            d          defd            Z
dS )	TestComparisonOpsrF   c                 ,   |} |||          }t          |t                    sJ |j        j        t          j        k    sJ t          |t                    r ||j        |j                  }nt	          j         |t	          j        |j                  t	          j        |                              }t           ||	                                t	          j        |                    |t          j                  }t          j        ||           d S )Nr   )
isinstancer   r   subtyper   bool_r   allrg   r   rq   r   )rM   rF   comparison_opr   oprw   r   rx   s           r   _compare_otherz TestComparisonOps._compare_other  s
   $e,,&+.....|#rx////e[)) 	,79IJJJJ2:.9::BJu<M<MNN J ##,,..
50A0ABB%h  H
 	 22222r   c                     |                      ||d           |                      ||d           |                      ||d           |                      ||t          j                   d S )Nr   r   rD   )r6  r   r*   )rM   rF   r4  s      r   test_scalarzTestComparisonOps.test_scalar  sn    ,mQ???,mQ???,mR@@@,mRVDDDDDr   zWrong indicesr   c                 `    t          j        ddd          }|                     |||           d S )N   
   )r   linspacer6  rM   rF   r4  r   s       r   
test_arrayzTestComparisonOps.test_array  s4    k"a$$,mSAAAAAr   c                 v    |dz   }|                      |||           |dz  }|                      |||           d S )Nr   r	   )r6  r>  s       r   test_sparse_arrayz#TestComparisonOps.test_sparse_array  sN    ",mSAAA",mSAAAAAr   N)rO   rP   rQ   r   r6  r8  rJ   r   r   r?  rA  r   r   r   r.  r.    s        3{ 3 3 3 3*EK E E E E [o..B; B B B /.B [o..B+ B B B /.B B Br   r.  c                   `     e Zd Zej                            d           fd            Z xZS )TestPrintingzDifferent reprr   c                 L    t                                          ||           d S r   )r   test_array_repr)rM   r   r   r   s      r   rE  zTestPrinting.test_array_repr  s#    d+++++r   )rO   rP   rQ   rJ   r   r   rE  r   r   s   @r   rC  rC    sW        [.//, , , , 0/, , , , ,r   rC  c                   d     e Zd Zej                            dddg           fd            Z xZS )TestParsingenginerc   pythonc                     d}t          j        t          |          5  t                                          ||           d d d            d S # 1 swxY w Y   d S )Nz,.*must implement _from_sequence_of_strings.*r  )rJ   r
  NotImplementedErrorr   test_EA_types)rM   rH  r   expected_msgr   s       r   rL  zTestParsing.test_EA_types  s    F].lCCC 	0 	0GG!!&$///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   #AAA)rO   rP   rQ   rJ   r   r   rL  r   r   s   @r   rG  rG    sY        [XX770 0 0 0 870 0 0 0 0r   rG  c                       e Zd ZdS )TestNoNumericAccumulationsNrY   r   r   r   rO  rO    rZ   r   rO  );__doc__numpyr   rJ   pandas.errorsr   pandasr:   r   pandas._testing_testingrq   pandas.arraysr   pandas.tests.extensionr   r   fixturer   r*   r   r'   r,   r3   r5   r7   r?   rA   rF   rH   BaseDtypeTestsrS   BaseInterfaceTestsrX   BaseConstructorsTestsr\   BaseReshapingTestsr^   BaseGetitemTestsr   BaseSetitemTestsr   BaseIndexTestsr   BaseMissingTestsr   BaseMethodsTestsr   BaseCastingTestsr  BaseArithmeticOpsTestsr  r.  BasePrintingTestsrC  BaseParsingTestsrG  BaseAccumulateTestsrO  r   r   r   <module>rg     s\          , , , , , ,                 % % % % % % ' ' ' ' ' '
 
 
    26{###  $# ) ) ) 26{###> > $#>
 26{###  $# 26{###< < $#< 26{###A A $#A @ @ @ 26{###U U $#U 26{###X X $#X9 9 9 9 9 9 9 9; ; ; ; ;!4 ; ; ;
	 	 	 	 	OT%< 	 	 		 	 	 	 	(B 	 	 	3+ 3+ 3+ 3+ 3+OT%< 3+ 3+ 3+l- - - - -/4#8 - - -	 	 	 	 	/4#8 	 	 		 	 	 	 	# 	 	 	10 10 10 10 10/4#8 10 10 10hc< c< c< c< c</4#8 c< c< c<L) ) ) ) )/4#8 ) ) )#M #M #M #M #M)D #M #M #ML&B &B &B &B &B &B &B &BR, , , , ,?D$: , , ,0 0 0 0 0/4#8 0 0 0	 	 	 	 	!9 	 	 	 	 	r   