
    bMh[F                        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ej                  Zd ZdS )aj  
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      b/var/www/html/test/jupyter/venv/lib/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edefdZej                            dddg           fd            Z	ej                            dddg           fd            Z
d	 Zd
 Zej                            d          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d Z fdZd Z fdZ fd Zej                            d!"           fd#            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d0            Z'ej        j(        ej                            d1ej)        ej*        ej+        g           fd2                        Z,ej        j(         fd3            Z-ej                            d4d5 d6 e.d7e/j0        g          fd8 d9 e.d7e/j0        g          fed6 e.d:d;gd;<          fed9 e.d:e/j0        g          fg          d=             Z1ej                            d>d6d9g          d?             Z2ej                            e3d@A           fdB            Z4d6Z5d6Z6d6Z7d6Z8dC Z9 fdDZ: fdEZ; fdFZ<dGej*        dHe.fdIZ=dHe.fdJZ>dHe.fdKZ?dHe.fdLZ@ej                            dM"           fdN            ZAej                            dO"          ej                            dPddg           fdQ                        ZB xZCS )RTestSparseArrayop_namereturnc                     dS )NTr   )selfobjrI   s      r   _supports_reductionz#TestSparseArray._supports_reductionf   s    tr   skipnaTFc                 l   |dv r;t           j                            d          }|j                            |           nP|dv rL|j        j        dk    r<|s:t           j                            d          }|j                            |           t                                          |||           d S )Nprodmedianvarstdsemskewkurt,This should be viable but is not implementedreasonsummaxminmeanfzgetting a non-nan float)	pytestmarkxfailnode
add_markerr   kindsupertest_reduce_series_numericrL   r   all_numeric_reductionsrO   r#   rc   	__class__s         r   ri   z*TestSparseArray.test_reduce_series_numerici   s    ! &
 
 
 ;$$E %  D L##D))))"&CCC
3&& ' ;$$,E$FFDL##D)))**41GPPPPPr   c                 l   |dv r;t           j                            d          }|j                            |           nP|dv rL|j        j        dk    r<|s:t           j                            d          }|j                            |           t                                          |||           d S )NrQ   rY   rZ   r\   ra   z$ExtensionArray NA mask are different)	rb   rc   rd   re   rf   r   rg   rh   test_reduce_framerj   s         r   rn   z!TestSparseArray.test_reduce_frame   s    ! &
 
 
 ;$$E %  D L##D))))"&CCC
3&& ' ;$$,R$SSDL##D)))!!$(>GGGGGr   c                 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   rb   skiprL   r   s     r   _check_unsupportedz"TestSparseArray._check_unsupported   s8    :S!,,,,K788888 -,r   c                 `   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>   zETestSparseArray.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>   s    rz!}}33F;; r   )apply).0xs     r   
<listcomp>z<TestSparseArray.test_concat_mixed_dtypes.<locals>.<listcomp>   s(    JJJQWW;;<<JJJr   )r:   	DataFramer|   concattmassert_frame_equal)rL   r   df1df2df3dfsresultexpecteds           r   test_concat_mixed_dtypesz(TestSparseArray.test_concat_mixed_dtypes   s     lCbqb?++lC+,,lC12299*EECo 39JJcJJJ
 
 	fh/////r   z9ignore:The previous implementation of stack is deprecatedcolumnsrt   B)rt   ru   )rt   rv   outerinner)namesfuture_stackc                 N    t                                          |||           d S r   )rh   
test_stack)rL   r   r   r   rl   s       r   r   zTestSparseArray.test_stack   s'     	4,77777r   c                 v    |                      |           t                                          ||           d S r   )rr   rh   test_concat_columnsrL   r   na_valuerl   s      r   r   z#TestSparseArray.test_concat_columns   s7    %%%##D(33333r   c                 v    |                      |           t                                          ||           d S r   )rr   rh   'test_concat_extension_arrays_copy_falser   s      r   r   z7TestSparseArray.test_concat_extension_arrays_copy_false   s7    %%%77hGGGGGr   c                 v    |                      |           t                                          ||           d S r   )rr   rh   
test_alignr   s      r   r   zTestSparseArray.test_align   7    %%%4*****r   c                 v    |                      |           t                                          ||           d S r   )rr   rh   test_align_framer   s      r   r   z TestSparseArray.test_align_frame   s7    %%%  x00000r   c                 v    |                      |           t                                          ||           d S r   )rr   rh   test_align_series_framer   s      r   r   z'TestSparseArray.test_align_series_frame   s7    %%%''h77777r   c                 v    |                      |           t                                          ||           d S r   )rr   rh   
test_merger   s      r   r   zTestSparseArray.test_merge   r   r   c           	         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   )r   is     r   r   z,TestSparseArray.test_get.<locals>.<listcomp>   s    $E$E$EqQU$E$E$Er   )indexrE   r	   r   )
r:   Seriesr/   lenr   r   valuesr   getiloc)rL   r   sers      r   test_getzTestSparseArray.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   )rr   rh   test_reindexr   s      r   r   zTestSparseArray.test_reindex   s7    %%%T8,,,,,r   c                     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   r   assert_sp_array_equalfillnaassert_equal)rL   r,   sarrexpected_dtyper   r   s         r   	test_isnazTestSparseArray.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   FutureWarningr   assert_produces_warningrh   test_fillna_limit_backfill)rL   r,   warnsrl   s      r   r   z*TestSparseArray.test_fillna_limit_backfill   s    #]3'FFF 	= 	=GG..|<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   "AAAc                     t          j        |j                  r3|                    t          j                            d                     t                                          |           d S )Nz'returns array with different fill valuerZ   )	r   r   r   applymarkerrb   rc   rd   rh   test_fillna_no_op_returns_copy)rL   r   r#   rl   s      r   r   z.TestSparseArray.test_fillna_no_op_returns_copy   sf    8DO$$ 	!!)R!SS   	..t44444r   UnsupportedrZ   c                 H    t                                                       d S r   )rh   test_fillna_seriesrL   r,   rl   s     r   r   z"TestSparseArray.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	   )rt   r   r   )
r:   r   r   r;   r   r   r   _from_sequencer   r   )rL   r,   r   r   r   r   s         r   test_fillna_framez!TestSparseArray.test_fillna_frame  s    !!_
L1v>>??FFzRR7<*++ 	' 2J??EE &E<!00*j1IQV0WWV 
 
 	fh/////r   z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   rt   Fcopy)r   r   blocks)taker:   r   r   r   hasattr_mgrr   r   rt   _valuesto_dense)rL   r,   using_copy_on_writearrdf
filled_valr   s          r   test_fillna_copy_framez&TestSparseArray.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   )rL   r,   r   r   r   r   r   s          r   test_fillna_copy_seriesz'TestSparseArray.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 Applicablec                 J    t                                          |           d S r   )rh   test_fillna_length_mismatchr   s     r   r   z+TestSparseArray.test_fillna_length_mismatch4  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   r   assert_series_equal)rL   r   r   clsru   rv   r   condr   	new_dtyper   others               r   test_where_seriesz!TestSparseArray.test_where_series8  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   )r   r   r   rh   test_searchsorted)rL   r5   	as_seriesrl   s      r   r   z!TestSparseArray.test_searchsortedN  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)rL   r   r   s      r   test_shift_0_periodsz$TestSparseArray.test_shift_0_periodsR  sM    A!%!4Q!7A$Q'6+@+CCCCCCCr   methodargmaxargminc                 x    |                      |           t                                          |||           d S r   )rr   rh   test_argmin_argmax_all_na)rL   r   r   r   rl   s       r   r   z)TestSparseArray.test_argmin_argmax_all_naY  s;     	%%%))&$AAAAAr   boxc                 z    |                      |           t                                          ||||           d S r   )rr   rh   test_equals)rL   r   r   r   r   rl   s        r   r   zTestSparseArray.test_equals_  s=     	%%%D(Is;;;;;r   c                 J    t                                          |           d S r   )rh   &test_equals_same_data_different_object)rL   r   rl   s     r   r   z6TestSparseArray.test_equals_same_data_different_objecte  s!    66t<<<<<r   zfunc, na_action, expectedc                     | S r   r   r   s    r   r>   zTestSparseArray.<lambda>l      q r   Ng      ?c                     | S r   r   r   s    r   r>   zTestSparseArray.<lambda>m  r   r   ignorez1.0r*   r!   c                     t          dt          j        g          }|                    ||          }t	          j        ||           d S )Nr   	na_action)r   r   r*   mapr   assert_extension_array_equal)rL   funcr  r   r   r   s         r   test_mapzTestSparseArray.test_mapi  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>   z1TestSparseArray.test_map_raises.<locals>.<lambda>}  s    rv r   r  )rb   raises
ValueErrorr  )rL   r   r  msgs       r   test_map_raiseszTestSparseArray.test_map_raisesx  s     >]:S111 	< 	<HH%%H;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   AAAzno sparse StringDtype)r
  r[   c                 J    t                                          |           d S r   )rh   test_astype_string)rL   r   nullable_string_dtyperl   s      r   r  z"TestSparseArray.test_astype_string  s#     	""4(((((r   c                 H    |j         dk    rt          j        d           d S d S )Nr   z=Incorrected expected from Series.combine and tested elsewhere)r   rb   rp   rq   s     r   _skip_if_different_combinez*TestSparseArray._skip_if_different_combine  s0    ?a KWXXXXX	  r   c                 v    |                      |           t                                          ||           d S r   )r  rh   test_arith_series_with_scalarrL   r   all_arithmetic_operatorsrl   s      r   r  z-TestSparseArray.test_arith_series_with_scalar  s8    ''-----d4LMMMMMr   c                 v    |                      |           t                                          ||           d S r   )r  rh   test_arith_series_with_arrayr  s      r   r  z,TestSparseArray.test_arith_series_with_array  s8    ''---,,T3KLLLLLr   c                    |j         j        dk    rnL|                    d          dvr5t          j                            d          }|                    |           t                                          ||           d S )Nr   r1   )mulrmulfloordiv	rfloordivpowmodrmodz result dtype.fill_value mismatchrZ   )	r   r   striprb   rc   rd   r   rh   test_arith_frame_with_scalar)rL   r   r  r#   rc   rl   s        r   r"  z,TestSparseArray.test_arith_frame_with_scalar  s    : A%%%++C00 9
 
 
 ;$$,N$OOD%%%,,T3KLLLLLr   r   rF   c                    |} |||          }t          |t          j                  r9t          |t          j                  sJ t          |j        t                    sJ nt          |t
                    sJ |j        j        t          j        k    sJ t          |t          j                  rf ||j	        |j
        j	                  }t           ||                                t          j        |                    |t          j                  }nt          j         |t          j        |j	                  t          j        |                              }t           ||                                t          j        |                    |t          j                  }t          |t          j                  rt          j        |          }t          j        ||           d S )Nr   )
isinstancer:   r   r   r   r   subtyper   bool_r   r   r   r{   allr   r   )	rL   r   rF   comparison_opr   opr   r   r   s	            r   _compare_otherzTestSparseArray._compare_other  s    $e,,eRY'' 	3fbi00000flK888888fk22222|#rx////eRY'' 	,79QRRJ"#,,..
50A0ABB%h  HH 2:.9::BJu<M<MNN J ##,,..
50A0ABB%h  H
 eRY'' 	+y**H
)))))r   c                    t          j        |          }|                     |||d           |                     |||d           |                     |||d           |                     |||t          j                   d S )Nr   r   rD   )r:   r   r*  r   r*   )rL   rF   r(  r   s       r   test_scalarzTestSparseArray.test_scalar  s    i())C!1=!DDDC!1=!DDDC!1="EEEC!1="&IIIIIr   c                 &   |j         j        dk    r>|j        dv r5t          j                            d          }|                    |           t          j        ddd          }t          j
        |          }|                     ||||           d S )Nr   )eqgeleWrong fill_valuerZ      
   )r   r   __name__rb   rc   rd   r   r   linspacer:   r   r*  )rL   rF   r(  r#   rc   r   r   s          r   
test_arrayzTestSparseArray.test_array  s    !,11m6L Q
 7
 7

 ;$$,>$??D%%%k"a$$i())C!1=#FFFFFr   c                 B   |j         j        dk    r@|j        dk    r5t          j                            d          }|                    |           t          j        |          }|dz   }| 	                    ||||           |dz  }| 	                    ||||           d S )Nr   gtr1  rZ   r   r	   )
r   r   r5  rb   rc   rd   r   r:   r   r*  )rL   rF   r(  r#   rc   r   r   s          r   test_sparse_arrayz!TestSparseArray.test_sparse_array  s    !,11m6LPT6T6T;$$,>$??D%%%i())"C!1=#FFF"C!1=#FFFFFr   zDifferent reprc                 L    t                                          ||           d S r   )rh   test_array_repr)rL   r   r   rl   s      r   r<  zTestSparseArray.test_array_repr  s#    d+++++r   zresult does not match expectedas_indexc                 L    t                                          ||           d S r   )rh   test_groupby_extension_agg)rL   r=  rA   rl   s      r   r?  z*TestSparseArray.test_groupby_extension_agg  s&     	**85FGGGGGr   )Dr5  
__module____qualname__strr   rN   rb   rc   parametrizeri   rn   rr   r   filterwarningsr:   
MultiIndexfrom_tuplesr   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   _combine_le_expected_dtyper   r   r   r   r   r   r   fails_arm_wheelsr   r   r   r   r   r   r   r*   r  r  	TypeErrorr  series_scalar_excframe_scalar_exc
divmod_excseries_array_excr  r  r  r"  r*  r,  r7  r:  r<  r?  __classcell__)rl   s   @r   rH   rH   e   s
             [Xe}55Q Q Q Q 65Q0 [Xe}55H H H H 65H09 9 90 0 0 [C  [#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+ + + + +) ) )- - - - -/ / /= = = = =
5 5 5 5 5 [m,,% % % % -,%0 0 0( "0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*:;;< < <;< [i0GHH) ) ) ) IH)
 JY Y YN N N N NM M M M MM M M M M "*9"*0;"* "* "* "*HJK J J J JG; G G G G	G+ 	G 	G 	G 	G [.//, , , , 0/, [>??[Z$77H H H H 87 @?H H H H Hr   rH   c                 @    |                                  t          u sJ d S r   )construct_array_typer   r   s    r   test_array_type_with_argrQ    s%    %%'';666666r   ) __doc__numpyr   rb   pandas.errorsr   pandasr:   r   pandas._testing_testingr   pandas.arraysr   pandas.tests.extensionr   r   fixturer   r*   r   r'   r,   r3   r5   r7   r?   rA   rF   ExtensionTestsrH   rQ  r   r   r   <module>r\     s          , , , , , ,                 % % % % % % ' ' ' ' ' '
 
 
    26{###  $# ) ) ) 26{###> > $#>
 26{###  $# 26{###< < $#< 26{###A A $#A @ @ @ 26{###U U $#U 26{###X X $#XNH NH NH NH NHd) NH NH NHb7 7 7 7 7r   