
    o[we+7                     b   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	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            re pe Zej                             d	          ej                             d
          ej                             d          gZ!d Z"d Z#d Z$ ej%        eeeeeeeeeeeg          d             Z&ej%        d             Z'ej%        d             Z(ej%        d             Z)ej%        d             Z*ej%        d             Z+ej%        d             Z,ej%        d             Z- G d dej.                  Z/ G d dej0                  Z1 G d dej2                  Z3 G d dej4                  Z5 G d  d!ej6                  Z7 G d" d#ej8                  Z9 G d$ d%ej:                  Z; G d& d'ej<                  Z= G d( d)ej>                  Z? G d* d+ej@                  ZA G d, d-ejB                  ZC G d. d/ejD                  ZE G d0 d1ejF                  ZG G d2 d3ejH                  ZI G d4 d5ejJ                  ZK G d6 d7ejL                  ZM G d8 d9ejN                  ZO G d: d;ejP                  ZQ G d< d=ejR                  ZSd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)IS64is_platform_windows)np_version_gt2)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     Blib/python3.11/site-packages/pandas/tests/extension/test_masked.py	make_datar    8   sH    aw&eBmm)<)<<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%   <   sf    RYsC%%&&5'	
ryC%%
&
&	' 5'	 +		r   c                  b    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*   F   s;    %=1x'4-"*<<xG4QV-WWr   )paramsc                 *    |                                  S N)param)requests    r   dtyper0   J   s      ==??r   c                     | j         dk    rt                      }n(| j         dk    rt                      }nt                      }t	          j        ||           S )Nfbr0   )kindr%   r*   r    r   array)r0   datas     r   r7   r7   ]   sT    zS  	s		{{8D&&&&r   c                     | j         dk    r(t          j        t          j        d          |           S t          j        t          j        d          dz  |           S )Nr3   r   r4      )r5   r   r6   r#   onesr4   s    r   data_for_twosr;   h   sN    zSxE22228BGCLL1$E22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 )Nr2   r"   r4   r3   Tr   r5   r   r6   r   r#   r)   r4   s    r   data_missingr>   o   sm    zSxE2222	s		xe44448RUAJe,,,,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 )Nr2   )r"   皙?        r4   r3   )TTF)r   r9   r   )r5   r   r6   r4   s    r   data_for_sortingrB   x   sj    zSxu5555	s		x+++599998IIIU++++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 )
Nr2   r"   rA   r4   r3   TFr   r   r=   r4   s    r   data_missing_for_sortingrD      su    zSxbeS)7777	s		xrvu-U;;;;8QqM////r   c                      d S )Nc                 :    | t           j        u o|t           j        u S r-   )r   r   )xys     r   <lambda>zna_cmp.<locals>.<lambda>   s    RU
1qBEz r   r   r   r   r   na_cmprJ      s     21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 )Nr2   r"   rA   r@   r3   TFr   r   r9   r4   )r5   r   r   r6   )r0   r3   acnas        r   data_for_groupingrO      sz    zS	s			B8Q2r1aA.e<<<<r   c                       e Zd ZdS )	TestDtypeN__name__
__module____qualname__r   r   r   rQ   rQ              Dr   rQ   c                   D     e Zd Z fdZdefdZdZdZdZdZ	 fdZ
 xZS )TestArithmeticOpsc                 P   	 t          j        |          }n$# t          $ r t          j        |          }Y nw xY w|j        dk    r>|                    d                              d          dv rt          S |dv rt          S d S t                      	                    |||          S )Nr3   _r)powtruedivfloordiv)__sub____rsub__)
tm	get_dtypeAttributeErrorr5   striplstripNotImplementedError	TypeErrorsuper_get_expected_exception)selfop_nameobjotherr0   	__class__s        r   ri   z)TestArithmeticOps._get_expected_exception   s    	(L%%EE 	( 	( 	(L''EEE	( :}}S!!((--1OOO**333  4ww..wUCCCs    99rk   c                    t          j        |          }|}|j        dv rM|dv r3|                    t          j                                      d          }n|                    |          }n|j        dk    r|dv r|                    d          }n]|dv rY|                     |          }|                     |                    t                    ||          }|                    d          }|dk    r: t          ||          |          }t          j        ||                                <   n|                    |          }|S )	Niu)__rtruediv____truediv____div__Float64r3   )__floordiv____rfloordiv____pow____rpow____mod____rmod__Int8)rr   rq   rx   )ra   rb   r5   fillnar#   r)   astypeget_op_from_name_combinefloatgetattrisna)	rj   rk   rl   rm   pointwise_resultsdtypeexpectedopresults	            r   _cast_pointwise_resultz(TestArithmeticOps._cast_pointwise_result   s?   c""#;$DDD#??262299)DD $??622[C    $??622;;; **733==E):):E2FF#??955*$$.g..u55*,&'  v..Hr   Nc                     |j         j        dk    r:t          j                            d          }|j                            |           t                                          ||           d S )Nr3   zInconsistency between floordiv and divmod; we raise for floordiv but not for divmod. This matches what we do for non-masked bool dtype.reason)	r0   r5   pytestmarkxfailnode
add_markerrh   test_divmod_series_array)rj   r7   r;   r/   r   rn   s        r   r   z*TestArithmeticOps.test_divmod_series_array   sk    :?c!!;$$) %  D
 L##D)))((}=====r   )rS   rT   rU   ri   strr   series_scalar_excseries_array_excframe_scalar_exc
divmod_excr   __classcell__rn   s   @r   rX   rX      s        D D D D D"$c $ $ $ $L J> > > > > > > > >r   rX   c                   &    e Zd ZdZdZdZdefdZdS )TestComparisonOpsNrk   c                 ,    |                     d          S )Nboolean)r}   )rj   rk   rl   rm   r   s        r   r   z(TestComparisonOps._cast_pointwise_result   s    &&y111r   )rS   rT   rU   r   r   r   r   r   r   r   r   r   r      sA        2c 2 2 2 2 2 2r   r   c                       e Zd ZdS )TestInterfaceNrR   r   r   r   r   r      rV   r   r   c                       e Zd ZdS )TestConstructorsNrR   r   r   r   r   r      rV   r   r   c                       e Zd ZdS )TestReshapingNrR   r   r   r   r   r      rV   r   r   c                       e Zd ZdS )TestGetitemNrR   r   r   r   r   r     rV   r   r   c                       e Zd ZdS )TestSetitemNrR   r   r   r   r   r     rV   r   r   c                       e Zd ZdS )	TestIndexNrR   r   r   r   r   r     rV   r   r   c                       e Zd ZdS )TestMissingNrR   r   r   r   r   r     rV   r   r   c                        e Zd Z fdZ xZS )TestMethodsc                      |d          \  }}|j         j        dk    rd| _        nt          | _        t	                                          |           d S )Nr9   r3   r   )r0   r5   _combine_le_expected_dtypeobjectrh   test_combine_le)rj   data_repeated
orig_data1
orig_data2rn   s       r   r   zTestMethods.test_combine_le  s[    !.q!1!1
J C''.7D++ /5D+.....r   )rS   rT   rU   r   r   r   s   @r   r   r     s8        / / / / / / / / /r   r   c                       e Zd ZdS )TestCastingNrR   r   r   r   r   r   $  rV   r   r   c                       e Zd ZdS )TestGroupbyNrR   r   r   r   r   r   (  rV   r   r   c                   L    e Zd Z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S )	
TestReducerk   returnc                 r    |dv r2t          j        |          j        dk    rt          j        d           dS )Nanyallr3   z-Tested in tests/reductions/test_reductions.pyr   T)ra   rb   r5   r   skip)rj   rl   rk   s      r   _supports_reductionzTestReduce._supports_reduction-  s=    n$$c):):)?3)F)FKNOOOOtr   serskipnac                 t   d}|j         j        dk    r|j         j        }n|j         j        dk    r|dv rd}|dk    rV t          ||                      } t          |                                                    |          |                      }n t          ||          |          } t          |                                                    |          |          |          }|s6|                                                                r|dvrt          j	        }t          j        ||           d S )	Nint64r2   r3   minmaxboolcountr   r   )r0   r5   numpy_dtyper   dropnar}   r   r   r   r   ra   assert_almost_equal)rj   r   rk   r   	cmp_dtyper   r   s          r   check_reducezTestReduce.check_reduce2  s/    	9>S   	-IIY^s"".(("	g*WS'**,,FGwszz||229==wGGIIHH*WS'**&999FGwszz||229==wGGvVVVH !chhjjnn.. !7.3P3P5
vx00000r   c                 h   t          j        |j                  r|j        j        }n
|dv rd}n|dv r|j        j        }n|j        dv r|j        j        }nt          j        |j                  r#t                      r	t          r	|rt          sdnd}nt          j        |j                  r#t                      r	t          r	|rt          sdnd}nc|j        j	        d	k    rD|dv rd}nL|d
v rd}nE|dv r#t                      r	t          r	|rt          sdnd}nt          d          t          d          |S )N)meanmedianvarstdskewrt   )r   r   )Int64UInt64Int32r   UInt32r   r3   r   r   )sumprodznot supposed to reach this)ra   is_float_dtyper0   nameis_signed_integer_dtyper   r   r   is_unsigned_integer_dtyper5   rg   )rj   arrrk   r   r   s        r   _get_expected_reduction_dtypez(TestReduce._get_expected_reduction_dtypeI  s   SY'' &	:	II@@@!II&&	IIY---	II'	22 	: ())3AIO 	 I )#)44 	: ())3AIO 	 I Y^s""BBB%		N**%		O++ ,--!7E!MS!!GG !	 	   <===8999r   N)
rS   rT   rU   r   r   r   r   Seriesr   r   r   r   r   r   r   ,  s             
1	 1C 1 1 1 1 1.(# (t ( ( ( ( ( (r   r   c                   J    e Zd Zdej        dedefdZdej        dedefdZdS )TestAccumulationr   rk   r   c                     dS )NTr   )rj   r   rk   s      r   _supports_accumulationz'TestAccumulation._supports_accumulationu  s    tr   r   c           
         d}t           r|j        j        dk    sd}|j        j                            d          rd| }nh|j        j                            d          rd| }nC|j        j                            d          r|j        }n|j        j        d	k    r|d
v rd}nd| }|dk    r t          ||          |          }t          j        t          j	         t          |
                    d          |          |          |                    }t          j        ||           d S |dv r t          ||          |          }t          j        t          j	         t          |
                    d          |          |          |j                            }t          j        ||           d S |dk    r t          |d d         |          |          }t          j        t          j	         t          |d d         
                    d          |          |          |                    }t          j        ||           d S t          | d          )N@          UUIntIIntFr3   )cummincummaxr   cumsumr   float64r4   )r   r   cumprod   z not supported)is_windows_or_32bitr0   itemsizer   
startswithr5   r   r   r   r6   r}   ra   assert_series_equalrf   )rj   r   rk   r   lengthexpected_dtyper   r   s           r   check_accumulatez!TestAccumulation.check_accumulatex  s     	 9%**9>$$S)) 	0,F__NNY^&&s++ 
	0+6^^NNY^&&s++ 	0 !YNNY^s""...!*!/vh*WS'**&999Fy;GCJJy117;;6JJJ(   H "6844444,,,*WS'**&999Fy;GCJJy117;;6JJJ)   H "6844444	!!/WS"Xw//v>>>Fy@GCHOOI66@@OOO(   H "6844444 &&@&@&@AAAr   N)	rS   rT   rU   r   r   r   r   r   r   r   r   r   r   r   t  ss        ") c d    5BBI 5B 5BT 5B 5B 5B 5B 5B 5Br   r   c                        e Zd Z fdZ xZS )TestUnaryOpsc                     |j         j        dk    r:t          j                            d          }|j                            |           t                                          |           d S )Nr2   zHLooks like the base class test implicitly assumes boolean/integer dtypesr   )	r0   r5   r   r   r   r   r   rh   test_invert)rj   r7   r/   r   rn   s       r   r   zTestUnaryOps.test_invert  si    :?c!!;$$) %  D L##D)))D!!!!!r   )rS   rT   rU   r   r   r   s   @r   r   r     s8        " " " " " " " " "r   r   c                       e Zd ZdS )TestPrintingNrR   r   r   r   r  r    rV   r   r  c                       e Zd ZdS )TestParsingNrR   r   r   r   r  r    rV   r   r  c                       e Zd ZdS )Test2DCompatNrR   r   r   r   r  r    rV   r   r  )T__doc__numpyr#   r   pandas.compatr   r   pandas.compat.numpyr   pandasr   pandas._testing_testingra   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*   fixturer0   r7   r;   r>   rB   rD   rJ   rO   BaseDtypeTestsrQ   BaseArithmeticOpsTestsrX   BaseComparisonOpsTestsr   BaseInterfaceTestsr   BaseConstructorsTestsr   BaseReshapingTestsr   BaseGetitemTestsr   BaseSetitemTestsr   BaseIndexTestsr   BaseMissingTestsr   BaseMethodsTestsr   BaseCastingTestsr   BaseGroupbyTestsr   BaseReduceTestsr   BaseAccumulateTestsr   BaseUnaryOpsTestsr   BasePrintingTestsr  BaseParsingTestsr  Dim2CompatTestsr  r   r   r   <module>r(     sl                / . . . . .           3 3 3 3 3 3       	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ( ' ' ' ' '**,,C^1CPD  KC  KJKK
KUVV
S S S  X X X      ' ' ' 3 3 3 - - - , , , 0 0 0 2 2 2
 = = =$	 	 	 	 	# 	 	 	E> E> E> E> E>3 E> E> E>P2 2 2 2 23 2 2 2	 	 	 	 	D+ 	 	 		 	 	 	 	t1 	 	 		 	 	 	 	D+ 	 	 		 	 	 	 	$' 	 	 		 	 	 	 	$' 	 	 		 	 	 	 	# 	 	 		 	 	 	 	$' 	 	 		/ 	/ 	/ 	/ 	/$' 	/ 	/ 	/	 	 	 	 	$' 	 	 		 	 	 	 	$' 	 	 	E E E E E% E E EP9B 9B 9B 9B 9Bt/ 9B 9B 9Bx" " " " "4) " " "	 	 	 	 	4) 	 	 		 	 	 	 	$' 	 	 		 	 	 	 	4' 	 	 	 	 	r   