
    Owg8                         d Z ddl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jH                  jK                  d
      ejH                  jK                  d      ejH                  jK                  d      gZ&d Z'd Z(d Z) ejT                  eeeeeeee eeeg      d        Z+ejT                  d        Z,ejT                  d        Z-ejT                  d        Z.ejT                  d        Z/ejT                  d        Z0ejT                  d        Z1ejT                  d        Z2 G d de"jf                        Z4 G d de"jj                        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                      t        t        dd            t        j                  gz   t        t        dd            z   t        j                  gz   ddgz   S )N   	   
   b   c   d   )listrangepdNA     Y/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/extension/test_masked.py	make_datar#   @   sB    aw&eBm)<<wF"cRRr!   c                      t        t        j                  ddd            t        j                  gz   t        t        j                  ddd            z   t        j                  gz   ddgz   S )N皙?g?r   g#@g#@g      $@)r   nparanger   r   r    r!   r"   make_float_datar(   D   sb    RYYsC%&55'	
ryyC%
&	' 55'	 +		r!   c                  r    ddgdz  t         j                  gz   ddgdz  z   t         j                  gz   ddgz   S )NTF   ,   )r&   nanr    r!   r"   make_bool_datar-   N   s?    %=1x'4-"*<<xG4QV-WWr!   )paramsc                 "    | j                         S N)param)requests    r"   dtyper3   R   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:   e   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      )r8   r   r9   r&   onesr7   s    r"   data_for_twosr>   p   sE    zzSxxE2288BGGCL1$E22r!   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_missingrA   w   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%   皙?        r7   r6   )TTF)r   r<   r   )r8   r   r9   r7   s    r"   data_for_sortingrE      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%   rD   r7   r6   TFr   r   r@   r7   s    r"   data_missing_for_sortingrG      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   r   )xys     r"   <lambda>zna_cmp.<locals>.<lambda>   s    RUU
1qBEEz r!   r    r    r!   r"   na_cmprM      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%   rD   rC   r6   TFr   r   r<   r7   )r8   r   r   r9   )r3   r6   acnas        r"   data_for_groupingrR      sr    zzS	s		B88Q2r1aA.e<<r!   c                   8    e Zd Zej                  j                  dddg      d        Zd Zd Zde	fdZ
 fd	Z fd
Zdej                  de	defdZdej                  de	defdZ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 xZS )TestMaskedArrays	na_actionNignorec                     |j                  d |      }|j                  t               k(  r"|j                  dt        j
                        }n|j                         }t        j                  ||       y )Nc                     | S r0   r    )rJ   s    r"   rL   z+TestMaskedArrays.test_map.<locals>.<lambda>   s    A r!   rU   float64)r3   na_value)mapr3   r
   to_numpyr&   r,   tmassert_numpy_array_equal)selfrA   rU   resultexpecteds        r"   test_mapzTestMaskedArrays.test_map   s^    !!+!C/#,,9rvv,NH#,,.H
##FH5r!   c                 @   |d   |j                  fdd      }|j                  j                  dk(  r-t        j                  dt
        j                  dgt              }n&t        j                  t        j                  g      }t        j                  ||       y )Nr<   c                     S r0   r    )rJ   zeros    r"   rL   z<TestMaskedArrays.test_map_na_action_ignore.<locals>.<lambda>   s     r!   rV   rY   r6   Fr7   )r\   r3   r8   r&   r9   r   r   objectr,   r^   r_   )r`   rG   ra   rb   rf   s       @r"   test_map_na_action_ignorez*TestMaskedArrays.test_map_na_action_ignore   sz    '*)--n-Q#))..#5xxu 5VDH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__)r^   	get_dtypeAttributeErrorr8   striplstripNotImplementedError	TypeError)r`   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;rw   c                    t        j                  |      }|}|dv r|j                  d      S |j                  dv r|dv rkt	        j
                         5  t	        j                  ddt               |j                  t        j                        }d d d        j                  d      }|S |j                  |      }|S |j                  d	k(  r|d
v r|j                  d      }nL|dv rH| j                  |      }| j                  |j                  t              ||      }|j                  d      }|dk(  r3 t        ||      |      }	t        j                  ||	j                         <   |S |j                  |      }|S # 1 sw Y   xY w)N)eqnelegeltgtbooleaniu)__rtruediv____truediv____div__rV   zDowncasting object dtype arrays)categoryFloat64r6   )__floordiv____rfloordiv____pow____rpow____mod____rmod__Int8)r   r   r   )r^   rq   astyper8   warningscatch_warningsfilterwarningsFutureWarningfillnar&   r,   get_op_from_name_combinefloatgetattrisna)
r`   rw   rx   ry   pointwise_resultsdtyperb   filledopra   s
             r"   _cast_pointwise_resultz'TestMaskedArrays._cast_pointwise_result   sw   c"#::??9--;;$DD,,. 5++ 9!.
 &__RVV4F5 "==3< 7 $??626 5 [[C   $??62;; **73==E):E2F#??95*$.g.u5*,&&'   v.HK5 5s   <E;;F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)r`   r:   r>   r2   r   	__class__s        r"   r   z)TestMaskedArrays.test_divmod_series_array   sP    ::??c!;;$$) % D
 %(}=r!   c                      |d      \  }}|j                   j                  dk(  rd| _        nt        | _        t        |   |       y )Nr<   r6   r   )r3   r8   _combine_le_expected_dtyperg   r   test_combine_le)r`   data_repeated
orig_data1
orig_data2r   s       r"   r   z TestMaskedArrays.test_combine_le
  sE    !.q!1
J  C'.7D+ /5D+.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r`   r   rw   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   r   r   r   r   r   r^   assert_almost_equal)r`   r   rw   r   	cmp_dtypealtra   rb   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                    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(  r=|dv rd}|S |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skewr   )r   r   )Int64UInt64Int32r   UInt32r   r6   r   r   )sumprodznot supposed to reach this)
r   r3   namer   r   r   r   r   r8   rv   )r`   arrrw   r   r   s        r"   _get_expected_reduction_dtypez.TestMaskedArrays._get_expected_reduction_dtype4  s   #))$		IL K @@!IH G &		ID C YY--		I@ ? %SYY/ ()>  : 3 	 : / 'syy1 ()>  , % 	 , ! YY^^s"BB%	  N*%	  O+ ,-~V  !	     <==899r!   c                      y)NTr    r   s      r"   _supports_accumulationz'TestMaskedArrays._supports_accumulation^  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(  rt t        ||      |      }t        j                  t        j                   t        |j                  d      |      |      |            }t        j                  ||       y |dv r~ t        ||      |      }t        j                  t        j                   t        |j                  d      |      |      |j                              }t        j                  ||       y |dk(  rz t        |d d |      |      }t        j                  t        j                   t        |d d j                  d      |      |      |            }t        j                  ||       y t        | d      )N@          UUIntIIntFr6   )cummincummaxr   Float32cumprodz4Float32 precision lead to large differences with op z and skipna=cumsumr   rZ   r7   )r   r      z not supported)is_windows_or_32bitr3   itemsizer   
startswithr8   r   r   r   r   Seriesr9   r   r^   assert_series_equalru   )r`   r   rw   r   lengthexpected_dtypera   rb   s           r"   check_accumulatez!TestMaskedArrays.check_accumulatea  s8     99%%*99>>$$S)#F8_NYY^^&&s+"6(^NYY^^&&s+ !YYNYY^^s"..!*#&vhY&7i+?FKKFwi P$X'
 h*WS'*&9Fyy;GCJJy17;6J(H ""684,,*WS'*&9Fyy;GCJJy17;6J))H ""684	!/WS"Xw/v>Fyy@GCHOOI6@O(H ""684 &	&@AAr!   )__name__
__module____qualname__r   r   parametrizerc   rh   rz   strr   r   r   r   r   r   r   r   r   r   r   __classcell__)r   s   @r"   rT   rT      s    [[[4*:;6 <66".c .`>/ryy 3 4 
1		 1C 1 16(# (t (T")) c d <BBII <B <BT <Br!   rT   c                       e Zd Zy)Test2DCompatN)r   r   r   r    r!   r"   r   r     s    r!   r   )7__doc__r   numpyr&   r   pandas.compatr   r   pandas.compat.numpyr   pandas.core.dtypes.commonr   r   r   pandasr   pandas._testing_testingr^   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   r   
pytestmarkr#   r(   r-   fixturer3   r:   r>   rA   rE   rG   rM   rR   ExtensionTestsrT   Dim2CompatTestsr   r    r!   r"   <module>r     s      /    3	 	 	 (*,C^1CPD  KKC KKJK
KKUV
SX  ' ' 3 3 - - , , 0 0 2 2
 = =$rBt** rBj	4'' 	r!   