
    .i1                        d Z ddlZddlZddlmZmZ ddlmZ ddl	m
Z
mZmZ ddlZddlmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZ dd	l m!Z!  e       xr e xs e Z"ejF                  jI                  d
      ejF                  jI                  d      ejF                  jI                  d      gZ%d Z&d Z'd Z( ejR                  eeeeeeeeeeeg      d        Z*ejR                  d        Z+ejR                  d        Z,ejR                  d        Z-ejR                  d        Z.ejR                  d        Z/ejR                  d        Z0ejR                  d        Z1 G d de!jd                        Z3ejF                  ji                  d ejj                  ddg       ejj                  ddg       ejj                  d d!g      g      d"        Z6y)#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)IS64is_platform_windows)np_version_gt2)is_float_dtypeis_signed_integer_dtypeis_unsigned_integer_dtype)BooleanDtype)Float32DtypeFloat64Dtype)	Int8Dtype
Int16Dtype
Int32Dtype
Int64Dtype
UInt8DtypeUInt16DtypeUInt32DtypeUInt64Dtype)basez9ignore:invalid value encountered in divide:RuntimeWarningz)ignore:Mean of empty slice:RuntimeWarningz4ignore:overflow encountered in reduce:RuntimeWarningc            
      R    ddddt         j                  ddt         j                  ddg
S )	N            
      c   d   pdNA     `/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/tests/extension/test_masked.py	make_datar$   ?   s%    q!Qr2ruub#66r"   c            
      R    ddddt         j                  ddt         j                  ddg
S )	N皙?皙?g333333?g?      ?g?g#@g      $@r   r!   r"   r#   make_float_datar)   C   s%    c3sCTBBr"   c                  l    ddgdz  t         j                  gz   ddgz   t         j                  gz   ddgz   S )NTFr   )npnanr!   r"   r#   make_bool_datar-   G   s9    %=1x'4-7266(BdE]RRr"   )paramsc                 "    | j                         S N)param)requests    r#   dtyper3   K   s      ==?r"   c                     | j                   dk(  rt               }n$| j                   dk(  rt               }n
t               }t	        j
                  ||       S )Nfbr3   )kindr)   r-   r$   r   array)r3   datas     r#   r:   r:   ^   sB    zzS 	s	{88D&&r"   c                     | j                   dk(  r*t        j                  t        j                  d      |       S t        j                  t        j                  d      dz  |       S )Nr6   r   r7   r   )r8   r   r9   r+   onesr7   s    r#   data_for_twosr=   i   sD    zzSxx51188BGGBK!O511r"   c                 (   | j                   dk(  r't        j                  t        j                  dg|       S | j                   dk(  r't        j                  t        j
                  dg|       S t        j                  t        j                  dg|       S )Nr5   r&   r7   r6   Tr   r8   r   r9   r    r+   r,   r7   s    r#   data_missingr@   p   se    zzSxxE22	s	xxe4488RUUAJe,,r"   c                     | j                   dk(  rt        j                  g d|       S | j                   dk(  rt        j                  g d|       S t        j                  g d|       S )Nr5   )r&   r'           r7   r6   )TTF)r   r   r   )r8   r   r9   r7   s    r#   data_for_sortingrC   y   sN    zzSxxu55	s	xx+59988IU++r"   c                 .   | j                   dk(  r(t        j                  dt        j                  dg|       S | j                   dk(  r(t        j                  dt        j
                  dg|       S t        j                  dt        j                  d	g|       S )
Nr5   r&   rB   r7   r6   TFr   r   r?   r7   s    r#   data_missing_for_sortingrE      sm    zzSxxbeeS)77	s	xxrvvu-U;;88QqM//r"   c                      d S )Nc                 N    | t         j                  u xr |t         j                  u S r0   r   )xys     r#   <lambda>zna_cmp.<locals>.<lambda>   s    RUU
1qBEEz r"   r!   r!   r"   r#   na_cmprK      s
     21r"   c           
          | j                   dk(  rd}d}d}n| j                   dk(  rd}d}|}nd}d	}d
}t        j                  }t        j                  ||||||||g|       S )Nr5   r&   rB   r'   r6   TFr   r   r   r7   )r8   r   r    r9   )r3   r6   acnas        r#   data_for_groupingrP      sr    zzS	s		B88Q2r1aA.e<<r"   c                   n    e Zd ZdZ ej
                  d      d        Zej                  j                  dddg      d        Z	d	 Z
d
 Zde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dedefdZdej                   dedefdZdej                   dedefdZ fdZ xZS )TestMaskedArraysbooleanT)autousec                      |j                   rJ y r0   )_supports_2d)selfr3   r2   s      r#   skip_if_doesnt_support_2dz*TestMaskedArrays.skip_if_doesnt_support_2d   s     %%%%%r"   	na_actionNignorec                     |j                  d |      }|j                  t               k(  r$|r"|j                  dt        j
                        }n|j                         }t        j                  ||       y )Nc                     | S r0   r!   )rH   s    r#   rJ   z+TestMaskedArrays.test_map.<locals>.<lambda>   s    A r"   rY   float64)r3   na_value)mapr3   r
   to_numpyr+   r,   tmassert_numpy_array_equal)rW   r@   rY   using_nan_is_naresultexpecteds         r#   test_mapzTestMaskedArrays.test_map   s`    !!+!C/O#,,9rvv,NH#,,.H
##FH5r"   c                    |d   |j                  fdd      }|j                  j                  dk(  r-t        j                  dt
        j                  dgt              }nU|s-t        j                  t
        j                  gt              }n&t        j                  t        j                  g      }t        j                  ||       y )Nr   c                     S r0   r!   )rH   zeros    r#   rJ   z<TestMaskedArrays.test_map_na_action_ignore.<locals>.<lambda>   s     r"   rZ   r]   r6   Fr7   )r`   r3   r8   r+   r9   r   r    objectr,   rb   rc   )rW   rE   rd   re   rf   rj   s        @r#   test_map_na_action_ignorez*TestMaskedArrays.test_map_na_action_ignore   s    '*)--n-Q#))..#5xxu 5VDH xxruud 36BHxxrvvt 45H
##FH5r"   c                     	 t        j                  |      }|j                  dk(  r3|j	                  d      j                  d      dv rt        S |dv rt        S y y # t        $ r t        j                  |      }Y cw xY w)Nr6   _r)powtruedivfloordiv)__sub____rsub__)rb   	get_dtypeAttributeErrorr8   striplstripNotImplementedError	TypeError)rW   op_nameobjotherr3   s        r#   _get_expected_exceptionz(TestMaskedArrays._get_expected_exception   sz    	(LL%E
 ::}}S!((-1OO**33    	(LL'E	(s   A A;:A;r{   c                 |    t        j                  |      }|}|j                  dk(  r|dv r|j                  d      }|S )Nr6   )__mod____rmod__Int8)rb   ru   r8   astype)rW   r{   r|   r}   pointwise_resultsdtyperf   s          r#   _cast_pointwise_resultz'TestMaskedArrays._cast_pointwise_result   sC    c"#;;#  
 $??62r"   c                     |j                   j                  dk(  r1t        j                  j	                  d      }|j                  |       t        |   ||       y )Nr6   zInconsistency between floordiv and divmod; we raise for floordiv but not for divmod. This matches what we do for non-masked bool dtype.reason)r3   r8   pytestmarkxfailapplymarkersupertest_divmod_series_array)rW   r:   r=   r2   r   	__class__s        r#   r   z)TestMaskedArrays.test_divmod_series_array   sP    ::??c!;;$$) % D
 %(}=r"   serreturnc                 j    |dv r/|j                   j                  dk7  rt        j                  d       y)Nanyallr6   z-Tested in tests/reductions/test_reductions.pyr   T)r3   r8   r   skiprW   r   r{   s      r#   _supports_reductionz$TestMaskedArrays._supports_reduction   s)    n$3)>KKNOr"   skipnac                    d}|j                   j                  dk(  r|j                   j                  }n|j                   j                  dk(  r|dv rd}|j                         j	                  |      }|dk(  r# t        ||             } t        ||             }nZ t        ||      |      } t        ||      |      }|s2|j                         j                         r|dvrt        j                  }t        j                  ||       y )	Nint64r5   r6   minmaxboolcountr   r   )r3   r8   numpy_dtypedropnar   getattrisnar   r   r    rb   assert_almost_equal)rW   r   r{   r   	cmp_dtypealtre   rf   s           r#   check_reducezTestMaskedArrays.check_reduce   s     	99>>S  		--IYY^^s".("	
 jjl!!),g*WS'*,F,wsG,.H*WS'*&9F,wsG,F;Hchhjnn.7.3P55
vx0r"   c                 v   t        |j                        r|j                  j                  }|S |dv rd}|S |dv r|j                  j                  }|S |j                  dv r|j                  j                  }|S t        |j                        r t	               rt
        r|rt        sd}|S d}|S t        |j                        r t	               rt
        r|rt        sd}|S d}|S |j                  j                  d	k(  r5|d
v rd}|S |dv rt	               rt
        r|rt        sdnd}|S t        d      t        d      )N)meanmedianvarstdskewkurtsemFloat64)r   r   )Int64UInt64Int32r   UInt32r   r6   r   rS   )sumprodznot supposed to reach this)
r   r3   namer   r   r   r   r   r8   rz   )rW   arrr{   r   r   s        r#   _get_expected_reduction_dtypez.TestMaskedArrays._get_expected_reduction_dtype  sv   #))$		IH G OO!ID C &		I@ ? YY--		I< ; %SYY/ ()>  6 / 	 6 + 'syy1 ()>  ( ! 	 (  YY^^s".(%	  O+ ,-~V  !	     <==899r"   c                      y)NTr!   r   s      r#   _supports_accumulationz'TestMaskedArrays._supports_accumulation5  s    r"   c           
         d}t         r|j                  j                  dk(  sd}|j                  j                  j	                  d      rd| }n|j                  j                  j	                  d      rd| }nW|j                  j                  j	                  d      r|j                  }n%|j                  j
                  d	k(  r|d
v rd}nd| }dk(  r"|dk(  r|rt        j                  d| d|        |dk(  rn*|dv r|j                  }n|dk(  r|d d }nt        | d       t        ||      |      }t        j                  t        j                   t        |j                  d      |      |      d            }t        j                  |t        j                   |      <   |j                  |      }t#        j$                  ||       y )N@          UUIntIIntFr6   )cummincummaxrS   Float32cumprodz4Float32 precision lead to large differences with op z and skipna=cumsum)r   r      z not supportedr   r^   r   r7   )is_windows_or_32bitr3   itemsizer   
startswithr8   r   r   ry   r   r   Seriesr9   r   r    r+   isnanrb   assert_series_equal)rW   r   r{   r   lengthexpected_dtypere   rf   s           r#   check_accumulatez!TestMaskedArrays.check_accumulate8  s     99%%*99>>$$S)#F8_NYY^^&&s+"6(^NYY^^&&s+ !YYNYY^^s"..!*#&vhY&7i+?FKKFwi P$X'
 h,, YYN	!cr(C%	&@AA&g&f599HH7

9-w7vF
 (*uu(#$??>2
vx0r"   c                 $    t         |   |       y r0   )r   8test_loc_setitem_with_expansion_preserves_ea_index_dtype)rW   r:   r2   r   s      r#   r   zITestMaskedArrays.test_loc_setitem_with_expansion_preserves_ea_index_dtypek  s    HNr"   )__name__
__module____qualname___combine_le_expected_dtyper   fixturerX   r   parametrizerg   rl   r~   strr   r   r   r   r   r   r   r   r   r   r   __classcell__)r   s   @r#   rR   rR      s   !*V^^D!& "& [[[4*:;6 <6
6"c >ryy 3 4 
1		 1C 1 16&# &t &P")) c d 11BII 11 11T 11fO Or"   rR   r   TFr   r   r(   g       @c                     t         j                  t         j                  g}| j                  |      }|j                  | j                  k(  sJ t	        d |D              sJ y )Nc              3   @   K   | ]  }|t         j                  u   y wr0   r   ).0rH   s     r#   	<genexpr>zLtest_cast_pointwise_result_all_na_respects_original_dtype.<locals>.<genexpr>w  s     *aqBEEz*s   )r   r    r   r3   r   )r   valuesre   s      r#   9test_cast_pointwise_result_all_na_respects_original_dtyper   o  sO    
 eeRUU^F''/F<<399$$$*6****r"   )7__doc__numpyr+   r   pandas.compatr   r   pandas.compat.numpyr   pandas.core.dtypes.commonr   r   r   pandasr   pandas._testing_testingrb   pandas.core.arrays.booleanr	   pandas.core.arrays.floatingr
   r   pandas.core.arrays.integerr   r   r   r   r   r   r   r   pandas.tests.extensionr   r   r   filterwarnings
pytestmarkr$   r)   r-   r   r3   r:   r=   r@   rC   rE   rK   rP   ExtensionTestsrR   r   r9   r   r!   r"   r#   <module>r      s      /    3	 	 	 (*,C^1CPD  KKC KKJK
KKUV
7CS  ' ' 2 2 - - , , 0 0 2 2
 = =$HOt** HOV 	HBHHdE]#XRXXq!f%5xrxxc
7KL++r"   