
    .iH                        d Z ddlZddl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ef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j8                        Zd Zy)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SparseDtype)SparseArray)basenc                    t         j                  j                  d      }t        j                  |       r|j	                  |      }n1|j                  dd|t              }|d   |d   k(  r|dxx   dz  cc<   | |dd d<   |S )N   )size   d   )r
   dtyper      )nprandomdefault_rngisnanuniformintegersint)
fill_valuer   rngdatas       `/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/tests/extension/test_sparse.py	make_datar      sy    
))


"C	xx
{{{"||As#|67d1gGqLGDAJK    c                      t               S Nr    r   r   r   r   (   s
    =r   )paramsc                 \    t        t        | j                  d      | j                        }|S )z)Length-10 SparseArray for semantics test.
   r   )r   r   param)requestress     r   r   r   -   s$     ir2w}}
MCJr   c                  D    t        t        j                  d      dz        S )Nr!   r	   )r   r   onesr   r   r   data_for_twosr(   4   s    rwwr{Q''r   c                 P    t        t        j                  dg| j                        S )zLength 2 array with [NA, Valid]r   r"   r   r   nanr#   r$   s    r   data_missingr-   9   s     {w}}==r   c                       fd}|S )z1Return different versions of data for count timesc              3      K   t        |       D ]/  }t        t        j                  d      j                         1 y w)Nr!   r"   )ranger   r   r#   )count_r$   s     r   genzdata_repeated.<locals>.genC   s8     u 	VAir:w}}UU	Vs   ?Ar   )r$   r3   s   ` r   data_repeatedr4   ?   s    V Jr   c                 4    t        g d| j                        S )N)r	   r   r   r"   )r   r#   r,   s    r   data_for_sortingr6   J   s    yW]];;r   c                 R    t        dt        j                  dg| j                        S )Nr	   r   r"   r*   r,   s    r   data_missing_for_sortingr8   O   s    2661~'--@@r   c                      d S )Nc                 Z    t        j                  |       xr t        j                  |      S r   )pdisna)leftrights     r   <lambda>zna_cmp.<locals>.<lambda>V   s    rwwt}? r   r   r   r   r   na_cmpr@   T   s    ??r   c           
      x    t        ddt        j                  t        j                  ddddg| j                        S )Nr   r	   r   r"   r*   r,   s    r   data_for_groupingrB   Y   s,    1bffbffaAq9gmmTTr   c                 `    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_comparerG   ^   s,    1bffb"aAq!<WWr   c                       e Zd ZdedefdZej                  j                  dddg       fd       Z	ej                  j                  dddg       fd       Z
d	 Zd
 Zej                  j                  d      ej                  j                  dddgej                  j!                  ddgddg      g      ej                  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 fdZd Z fd Zd! Zej                  j=                  d"#       fd$       Zd% Z  fd&Z! fd'Z"d(Z#d) Z$d* Z%ej                  j=                  d+#       fd,       Z&d- Z' fd.Z(d/ Z)ej                  j                  d0d1d2g       fd3       Z*ej                  jV                  ej                  j                  d4ejX                  ejZ                  ej\                  g       fd5              Z/ej                  jV                   fd6       Z0ej                  j                  d7d8 d9 e1d:e2jf                  g      fd; d< e1d:e2jf                  g      fed9 e1d=d>gd>?      fed< e1d=e2jf                  g      fg      d@        Z4ej                  j                  dAd9d<g      dB        Z5ej                  j=                  e6dCD       fdE       Z7d9Z8d9Z9d9Z:d9Z;dF Z< fdGZ= fdHZ> fdIZ?dJejZ                  dKe1fdLZ@dKe1fdMZAdKe1fdNZBdKe1fdOZCej                  j=                  dP#       fdQ       ZDej                  j=                  dR#      ej                  j                  dSddg       fdT              ZE xZFS )UTestSparseArrayop_namereturnc                      y)NTr   )selfobjrJ   s      r   _supports_reductionz#TestSparseArray._supports_reductiond   s    r   skipnaTFc                 \   |dv r<t         j                  j                  d      }|j                  j	                  |       nZ|dv rV|j
                  j                  dk(  r=|s;t         j                  j                  d      }|j                  j	                  |       t        | !  |||       y )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rM   r   all_numeric_reductionsrP   r$   rd   	__class__s         r   rj   z*TestSparseArray.test_reduce_series_numericg   s    ! &
 
 ;;$$E % D LL##D)"&CC

3&;;$$,E$FDLL##D)*41GPr   c                 \   |dv r<t         j                  j                  d      }|j                  j	                  |       nZ|dv rV|j
                  j                  dk(  r=|s;t         j                  j                  d      }|j                  j	                  |       t        | !  |||       y )NrR   rZ   r[   r]   rb   z$ExtensionArray NA mask are different)	rc   rd   re   rf   rg   r   rh   ri   test_reduce_framerk   s         r   ro   z!TestSparseArray.test_reduce_frame   s    ! &
 
 ;;$$E % D LL##D)"&CC

3&;;$$,R$SDLL##D)!$(>Gr   c                 j    |j                   t        t        d      k(  rt        j                  d       y y )Nr   zCan't store nan in int array.)r   r   r   rc   skiprM   r   s     r   _check_unsupportedz"TestSparseArray._check_unsupported   s'    ::S!,,KK78 -r   c                    t        j                  d|d d i      }t        j                  dg di      }t        j                  dg di      j                  d      }|||g}t        j                  |      }t        j                  |D cg c]  }|j	                  d        c}      }t        j                  ||       y c c}w )NAr   )r   r	   r   )abccategoryc                 R    t        j                  |       j                  t              S r   )r   asarrayastypeobject)ss    r   r?   z:TestSparseArray.test_concat_mixed_dtypes.<locals>.<lambda>   s    rzz!}33F; r   )r;   	DataFramer|   concatapplytmassert_frame_equal)	rM   r   df1df2df3dfsresultxexpecteds	            r   test_concat_mixed_dtypesz(TestSparseArray.test_concat_mixed_dtypes   s     llCbq?+llC+,llC1299*ECo 399FIJQWW;<J
 	fh/ Ks   	C z9ignore:The previous implementation of stack is deprecatedcolumnsru   B)ru   rv   )ru   rw   outerinner)namesfuture_stackc                 (    t         |   |||       y r   )ri   
test_stack)rM   r   r   r   rm   s       r   r   zTestSparseArray.test_stack   s     	4,7r   c                 H    | j                  |       t        | 	  ||       y r   )rs   ri   test_concat_columnsrM   r   na_valuerm   s      r   r   z#TestSparseArray.test_concat_columns   s     %#D(3r   c                 H    | j                  |       t        | 	  ||       y r   )rs   ri   'test_concat_extension_arrays_copy_falser   s      r   r   z7TestSparseArray.test_concat_extension_arrays_copy_false   s     %7hGr   c                 H    | j                  |       t        | 	  ||       y r   )rs   ri   
test_alignr   s      r   r   zTestSparseArray.test_align        %4*r   c                 H    | j                  |       t        | 	  ||       y r   )rs   ri   test_align_framer   s      r   r   z TestSparseArray.test_align_frame   s     % x0r   c                 H    | j                  |       t        | 	  ||       y r   )rs   ri   test_align_series_framer   s      r   r   z'TestSparseArray.test_align_series_frame   s     %'h7r   c                 H    | j                  |       t        | 	  ||       y r   )rs   ri   
test_merger   s      r   r   zTestSparseArray.test_merge   r   r   c                    t        j                  |t        t        |            D cg c]  }d|z  	 c}      }t	        j
                  |j                  j                        rHt	        j
                  |j                  d            r"t	        j
                  |j                  d         s%J |j                  d      |j                  d   k(  sJ |j                  d      |j                  d   k(  sJ y c c}w )Nr	   )indexrF   r   )
r;   Seriesr0   lenr   r   valuesr   getiloc)rM   r   isers       r   test_getzTestSparseArray.test_get   s    iiE#d)4D$EqQU$EF88CJJ))*88CGGAJ'BHHSXXa[,AAA771:!,,,wwqzSXXa[((( %Fs   C3
c                     |j                   j                  t        j                  j	                  d             t
        |   |       y )NzSparseArray getitem buggyr[   )rf   rg   rc   rd   re   ri   test_array_item_with_indexrM   r   r$   rm   s      r   r   z*TestSparseArray.test_array_item_with_index   s5     1 19T 1 UV*40r   c                 H    | j                  |       t        | 	  ||       y r   )rs   ri   test_reindexr   s      r   r   zTestSparseArray.test_reindex   s     %T8,r   c                    t        |      }t        t        t        j                  |j
                  j                              }t        ddg|      }|j	                         }t        j                  ||       |j                  d      }t        t        t        j                  |j
                  j                              }t        ddgd|      }t        j                  |j	                         |       y )NTFr   r   r   r   )r   r   boolr;   r<   r   r   r   assert_sp_array_equalfillnaassert_equal)rM   r-   sarrexpected_dtyper   r   s         r   	test_isnazTestSparseArray.test_isna   s    <($T277<3E3E3P3P+QRe}NC
  2 {{1~$T277<3E3E3P3P+QRu~%~V
		X.r   c                 $    t         |   |       y r   )ri   test_fillna_no_op_returns_copyr   s      r   r   z.TestSparseArray.test_fillna_no_op_returns_copy   s    .t4r   c                    |j                         }d|_        |j                  |d         }|d   |d   k(  sJ t        j                  ||       |j                  |d   d      }|d   |d   k(  sJ t        j                  ||       y )NTr   r   Fcopy)r   	_readonlyr   r   assert_extension_array_equal)rM   r-   r   r   s       r   test_fillna_readonlyz$TestSparseArray.test_fillna_readonly   s       "\!_-ayLO+++
''l; \!_59ayLO+++
''l;r   Unsupportedr[   c                 "    t         |           y r   )ri   test_fillna_seriesrM   r-   rm   s     r   r   z"TestSparseArray.test_fillna_series  s    
 	"$r   c                 j   |d   }t        j                  |ddgd      j                  |      }t        j                  |j                        rt        |j                  |      }n|j                  }t        j                  |j                  ||g|      ddgd      }t        j                  ||       y )Nr   r	   )ru   r   r   )
r;   r   r   r<   r   r   r   _from_sequencer   r   )rM   r-   r   r   r   r   s         r   test_fillna_framez!TestSparseArray.test_fillna_frame  s    !!_
L1v>?FFzR77<**+ 2 2J?E &&E<<!00*j1IQV0WV
 	fh/r   c                     t        j                  t        d      5  t        |   |       d d d        y # 1 sw Y   y xY wNzlimit must be Nonematchrc   raises
ValueErrorri   test_fillna_limit_framer   s     r   r   z'TestSparseArray.test_fillna_limit_frame  4    ]]:-AB 	:G+L9	: 	: 	:   6?c                     t        j                  t        d      5  t        |   |       d d d        y # 1 sw Y   y xY wr   r   r   s     r   test_fillna_limit_seriesz(TestSparseArray.test_fillna_limit_series$  r   r   zSparse[bool]c                    |j                  ddg      }t        j                  d|id      }|j                  d   }|j	                  |      }t        |j                  d      r.|j                  j                  |j                  j                  u sJ |j                  j                  j                         |j                         u sJ y )Nr   ru   Fr   )r   r   blocks)taker;   r   r   r   hasattr_mgrr   r   ru   _valuesto_dense)rM   r-   arrdf
filled_valr   s         r   test_fillna_copy_framez&TestSparseArray.test_fillna_copy_frame+  s    A'\\3*51WWT]
:&277H%99>>V]]%7%7777tt||$$&#,,.888r   c                    |j                  ddg      }t        j                  |d      }|d   }|j                  |      }|j                  |j                  u sJ |j                  j                         |j                         u sJ y )Nr   Fr   r   )r   r;   r   r   r   r   )rM   r-   r   r   r   r   s         r   test_fillna_copy_seriesz'TestSparseArray.test_fillna_copy_series6  st    A'ii%(V
J'{{fnn,,,{{##%777r   zNot Applicablec                 $    t         |   |       y r   )ri   test_fillna_length_mismatchr   s     r   r   z+TestSparseArray.test_fillna_length_mismatch@  s    +L9r   c                    |d   |d   k7  sJ t        |      }|d d \  }}t        j                  |j                  ||||g|j                              }t        j                  g d      }|j                  |      }t        dd      }	t        j                  |j                  ||||g|	            }
t        j                  ||
       |j                  ||||g|j                        }t        j                  g d      }|j                  ||      }t        j                  |j                  ||||g|j                              }
t        j                  ||
       y )	Nr   r   r	   r   )TTFFfloatg        )TFTT)typer;   r   r   r   r   arraywherer   r   assert_series_equal)rM   r   r   clsrv   rw   r   condr   	new_dtyper   others               r   test_where_seriesz!TestSparseArray.test_where_seriesD  s8   Aw$q'!!!4jBQx1ii**Aq!Q<tzz*JKxx234-	991h9K
 	vx0""Aq!Q<tzz"Bxx124'99S//Aq!DJJ/OP
vx0r   c                 ~    t        j                  |d      5  t        |   ||       d d d        y # 1 sw Y   y xY w)NF)check_stacklevel)r   assert_produces_warningri   test_searchsorted)rM   performance_warningr6   	as_seriesrm   s       r   r   z!TestSparseArray.test_searchsortedZ  s=    ''(;eT 	CG%&6	B	C 	C 	Cs   3<c                     |j                  d      }|j                  d   |j                  d<   |j                  d   |j                  d   k7  sJ y )Nr   r   )shift_sparse_values)rM   r   r   s      r   test_shift_0_periodsz$TestSparseArray.test_shift_0_periods^  sN    A!%!4!4Q!7A$$Q'6+@+@+CCCCr   methodargmaxargminc                 J    | j                  |       t        | 	  |||       y r   )rs   ri   test_argmin_argmax_all_na)rM   r   r   r   rm   s       r   r   z)TestSparseArray.test_argmin_argmax_all_nae  s$     	%)&$Ar   boxc                 L    | j                  |       t        | 	  ||||       y r   )rs   ri   test_equals)rM   r   r   r   r   rm   s        r   r  zTestSparseArray.test_equalsk  s&     	%D(Is;r   c                 $    t         |   |       y r   )ri   &test_equals_same_data_different_object)rM   r   rm   s     r   r  z6TestSparseArray.test_equals_same_data_different_objectq  s    6t<r   zfunc, na_action, expectedc                     | S r   r   r   s    r   r?   zTestSparseArray.<lambda>x      q r   Ng      ?c                     | S r   r   r  s    r   r?   zTestSparseArray.<lambda>y  r  r   ignorez1.0r+   r"   c                     t        dt        j                  g      }|j                  ||      }t	        j
                  ||       y )Nr   	na_action)r   r   r+   mapr   r   )rM   funcr  r   r   r   s         r   test_mapzTestSparseArray.test_mapu  s8     Arvv;'$)4
''9r   r  c                     d}t        j                  t        |      5  |j                  d |       d d d        y # 1 sw Y   y xY w)Nz-fill value in the sparse values not supportedr   c                 "    t         j                  S r   )r   r+   r  s    r   r?   z1TestSparseArray.test_map_raises.<locals>.<lambda>  s
    rvv r   r  )rc   r   r   r  )rM   r   r  msgs       r   test_map_raiseszTestSparseArray.test_map_raises  s=     >]]:S1 	<HH%H;	< 	< 	<s	   <Azno sparse StringDtype)r   r\   c                 $    t         |   |       y r   )ri   test_astype_string)rM   r   nullable_string_dtyperm   s      r   r  z"TestSparseArray.test_astype_string  s     	"4(r   c                 N    |j                   dk(  rt        j                  d       y y )Nr   z=Incorrected expected from Series.combine and tested elsewhere)r   rc   rq   rr   s     r   _skip_if_different_combinez*TestSparseArray._skip_if_different_combine  s"    ??a KKWX	  r   c                 H    | j                  |       t        | 	  ||       y r   )r  ri   test_arith_series_with_scalarrM   r   all_arithmetic_operatorsrm   s      r   r  z-TestSparseArray.test_arith_series_with_scalar  s!    ''--d4LMr   c                 H    | j                  |       t        | 	  ||       y r   )r  ri   test_arith_series_with_arrayr  s      r   r  z,TestSparseArray.test_arith_series_with_array  s!    ''-,T3KLr   c                     |j                   j                  dk7  rnD|j                  d      dvr1t        j                  j                  d      }|j                  |       t        | !  ||       y )Nr   r2   )	mulrmulfloordiv	rfloordivtruedivrtruedivpowmodrmodz result dtype.fill_value mismatchr[   )	r   r   striprc   rd   re   applymarkerri   test_arith_frame_with_scalar)rM   r   r  r$   rd   rm   s        r   r+  z,TestSparseArray.test_arith_frame_with_scalar  sh    ::  A%%++C0 
9
 

 ;;$$,N$OD%,T3KLr   r   rG   c                    |} |||      }t        |t        j                        r8t        |t        j                        sJ t        |j                  t              sJ t        |t
              sJ |j                  j                  t        j                  k(  sJ t        |t        j                        rl ||j                  |j                  j                        }t         ||j                         t        j                  |            |t        j                        }nt        j                   |t        j                  |j                        t        j                  |                  }t         ||j                         t        j                  |            |t        j                        }t        |t        j                        rt        j                  |      }t        j                  ||       y )Nr   )
isinstancer;   r   r   r   r   subtyper   bool_r   r   r   r{   allr   r   )	rM   r   rG   comparison_opr   opr   r   r   s	            r   _compare_otherzTestSparseArray._compare_other  sf    $e,eRYY'fbii000fllK888fk222||##rxx///eRYY',779Q9QRJ"#,,.

50AB%hhH 2::.99:BJJu<MNJ ##,,.

50AB%hhH
 eRYY'yy*H
)r   c                     t        j                  |      }| j                  |||d       | j                  |||d       | j                  |||d       | j                  |||t        j                         y )Nr   r   rE   )r;   r   r3  r   r+   )rM   rG   r1  r   s       r   test_scalarzTestSparseArray.test_scalar  si    ii()C!1=!DC!1=!DC!1="EC!1="&&Ir   c                 4   |j                   j                  dk(  r?|j                  dv r1t        j                  j                  d      }|j                  |       t        j                  ddd      }t        j                  |      }| j                  ||||       y )Nr   )eqgeleWrong fill_valuer[      r!   )r   r   __name__rc   rd   re   r*  r   linspacer;   r   r3  )rM   rG   r1  r$   rd   r   r   s          r   
test_arrayzTestSparseArray.test_array  s    !!,,1m6L6L Q
 7

 ;;$$,>$?D%kk"a$ii()C!1=#Fr   c                 D   |j                   j                  dk(  r@|j                  dk7  r1t        j                  j                  d      }|j                  |       t        j                  |      }|dz   }| j                  ||||       |dz  }| j                  ||||       y )Nr   gtr:  r[   r   r	   )
r   r   r=  rc   rd   re   r*  r;   r   r3  )rM   rG   r1  r$   rd   r   r   s          r   test_sparse_arrayz!TestSparseArray.test_sparse_array  s    !!,,1m6L6LPT6T;;$$,>$?D%ii()"C!1=#F"C!1=#Fr   zDifferent reprc                 &    t         |   ||       y r   )ri   test_array_repr)rM   r   r
   rm   s      r   rD  zTestSparseArray.test_array_repr  s    d+r   zresult does not match expectedas_indexc                 &    t         |   ||       y r   )ri   test_groupby_extension_agg)rM   rE  rB   rm   s      r   rG  z*TestSparseArray.test_groupby_extension_agg  s     	*85FGr   )Gr=  
__module____qualname__strr   rO   rc   rd   parametrizerj   ro   rs   r   filterwarningsr;   
MultiIndexfrom_tuplesr   r   r   r   r   r   r   r   r   r   r   r   r   re   r   r   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+  r3  r5  r?  rB  rD  rG  __classcell__)rm   s   @r   rI   rI   c   s      [[Xe}5Q 6Q0 [[Xe}5H 6H090 [[C [[#JMM%%Z('0B & 	
 [[^dE];8 <84H+18+)1
-/5< [[m,% -%0(:
:
 "0	98 [[./: 0:1,CD [[X(';<B =B
 [[!![[URXXryy",,$GH< I "< [[!!= "= [[#$S"&&M :;(Kbff$>?$UENuEF(K89		
:: [[[4*:;< << [[i0GH) I)
 JYNMM$"*99"*0;"*HJK JG; G	G+ 	G [[./, 0, [[>?[[Z$7H 8 @Hr   rI   c                 4    | j                         t        u sJ y r   )construct_array_typer   r   s    r   test_array_type_with_argrY    s    %%';666r   )__doc__numpyr   rc   pandasr;   r   pandas._testing_testingr   pandas.arraysr   pandas.tests.extensionr   r   r   fixturer   r+   r   r(   r-   r4   r6   r8   r@   rB   rG   ExtensionTestsrI   rY  r   r   r   <module>rc     s         % '
S 
   266{# $ ( ( 266{#> $>
 266{# $ 266{#< $< 266{#A $A @ @ 266{#U $U 266{#X $X^Hd)) ^HB7r   