
    OwgL                    L   d dl mZ d dlZd dl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mZmZm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ej&                  d        Z G d dej8                        Zd Zd Zd Z d Z!ejD                  jG                  dddg      d        Z$ G d de      Z% G d de%      Z&e&jO                          d Z(ejD                  jG                  de%e&g      d        Z)ejD                  jG                  ddg dg d fdg d!g d"fg      d#        Z*d$ Z+d% Z,d& Z-d' Z.d( Z/d) Z0d* Z1d+ Z2d, Z3d- Z4y).    )annotationsN)base)DecimalArrayDecimalDtype	make_data
to_decimalc                     t               S N)r        b/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/extension/decimal/test_decimal.pydtyper      s
    >r   c                 (    t        t                     S r
   )r   r   r   r   r   datar      s    	$$r   c                 v    t        t        d      D  cg c]  } t        j                  d       c}       S c c} w )Nd      )r   rangedecimalDecimal)_s    r   data_for_twosr      s(    U3Z@+@AA@s   6c                 h    t        t        j                  d      t        j                  d      g      S )NNaN   r   r   r   r   r   r   data_missingr   #   s$    /1CDEEr   c                     t        t        j                  d      t        j                  d      t        j                  d      g      S )N120r   r   r   r   data_for_sortingr"   (   s4    		ws3W__S5IJ r   c                     t        t        j                  d      t        j                  d      t        j                  d      g      S )Nr   r   r!   r   r   r   r   data_missing_for_sortingr$   /   s4    		wu5ws7KL r   c                     d S )Nc                F    | j                         xr |j                         S r
   )is_nan)xys     r   <lambda>zna_cmp.<locals>.<lambda>8   s    
1qxxz r   r   r   r   r   na_cmpr+   6   s    11r   c            
         t        j                  d      } t        j                  d      }t        j                  d      }t        j                  d      }t        | | ||||| |g      S )N1.0z0.02.0r   )r   r   r   )bacnas       r   data_for_groupingr3   ;   sV    AAA		BAr2q!Q233r   c                      e Zd Z	 	 	 	 d%dZd&dZd' fdZ fdZ fdZd Zd Z	d Z
 fd	Z fd
Zej                  j                  ddg dg dfdg dg dfdg dg dfdg dg dfdg dg dfdg dg dfdg dg dfdg dg dfg       fd       Z fdZ fdZ fdZ fdZ fdZ fdZej                  j                  dddg      d        Zd  Zej                  j3                  d!"      ej                  j                  d#ej6                  ej8                  ej:                  g       fd$              Z xZS )(TestDecimalArrayc                     y r
   r   )selfop_nameobjothers       r   _get_expected_exceptionz(TestDecimalArray._get_expected_exceptionE   s     r   c                     y)NTr   )r7   serr8   s      r   _supports_reductionz$TestDecimalArray._supports_reductionJ   s    r   c                    |dk(  rt         |   |||      S  t        ||      |      } t        t        j                  |      |             }t        j                  ||       y )Ncount)skipna)supercheck_reducegetattrnpasarraytmassert_almost_equal)r7   r=   r8   rA   resultexpected	__class__s         r   rC   zTestDecimalArray.check_reduceM   s[    g7'Wf==*WS'*&9F8wrzz#8:H""684r   c                    |dv r5t         j                  j                  t              }|j	                  |       t
        |   |||       y )N)kurtskewsemmedianraises)pytestmarkxfailNotImplementedErrorapplymarkerrB   test_reduce_series_numeric)r7   r   all_numeric_reductionsrA   requestrT   rK   s         r   rX   z+TestDecimalArray.test_reduce_series_numericU   sD    !%FF;;$$,?$@D%*41GPr   c                    |}|dv r5t         j                  j                  t              }|j	                  |       t
        |   |||      S )N)rN   rP   rQ   )rS   rT   rU   rV   rW   rB   test_reduce_frame)r7   r   rY   rA   rZ   r8   rT   rK   s          r   r\   z"TestDecimalArray.test_reduce_frame[   sL    (((;;$$,?$@D%w(/EvNNr   c                V    t        j                  |      }| j                  |||d       y )N      ?)pdSeries_compare_other)r7   r   comparison_opr=   s       r   test_compare_scalarz$TestDecimalArray.test_compare_scalarc   s#    iioC}c:r   c           
     Z   t        j                  |      }t        j                  j	                  d      j                  g dt        |            }t        j                  |      |D cg c]!  }t        j                  t        d|            # c}z  }| j                  ||||       y c c}w )Nr   )r   r   g       @)r_   r`   rE   randomdefault_rngchoicelenr   r   powra   )r7   r   rb   r=   alterir:   s          r   test_compare_arrayz#TestDecimalArray.test_compare_arrayg   sz    iio		%%a(//
CIF		$"OA7??3sA;#?"OOC}e< #Ps   (&B(c           	        |}t        j                  |      }t        j                         }|j                  t        j
                     }|j                  t        j                     }d|j                  t        j
                  <   d|j                  t        j                  <   t        j                  |D cg c]  }t        |dz         c}      }	| j                  |||	       d|vr| j                  |||dz         | j                  ||d       | j                  ||d       ||j                  t        j
                  <   ||j                  t        j                  <   y c c}w )Nr   r   modr      )	r_   r`   r   
getcontexttrapsDivisionByZeroInvalidOperationintcheck_opname)
r7   r   all_arithmetic_operatorsr8   r=   contextdivbyzerotrapinvalidoptrapdr:   s
             r   test_arith_series_with_arrayz-TestDecimalArray.test_arith_series_with_arrayo   s   *iio$$&g&<&<=g&>&>?01g,,-23g../ 		6A3q3w<67#w.c7C!G4#w*#w*0=g,,-2?g../ 7s   3Ec                    d}t        j                  t        |d      5  t        |   |       d d d        y # 1 sw Y   y xY wNz,ExtensionArray.fillna added a 'copy' keywordFmatchcheck_stacklevel)rG   assert_produces_warningDeprecationWarningrB   test_fillna_framer7   r   msgrK   s      r   r   z"TestDecimalArray.test_fillna_frame   sA    <''cE
 	4 G%l3	4 	4 	4	   9Ac                   d}t        j                  t        |dd      5  t        |   |       d d d        d}t        j                  t
        |dd      5  t        |   |       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)N4ExtensionArray.fillna 'method' keyword is deprecatedFr   r   raise_on_extra_warnings9The 'method' keyword in DecimalArray.fillna is deprecated)rG   r   r   rB   test_fillna_limit_padFutureWarningr   s      r   r   z&TestDecimalArray.test_fillna_limit_pad   s    D''"$)	
 	8 G),7	8 J''"$)	
 	8 G),7	8 	8	8 	8	8 	8s   A1A=1A:=Bz'limit_area, input_ilocs, expected_ilocsoutside)r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   inside)r   r   r   r   r   c                    d}t        j                  t        |dd      5  d}t        j                  t
        |      5  t        |   ||||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   Fr   z*DecimalArray does not implement limit_area)r   )rG   r   r   rS   rR   rV   rB   test_ffill_limit_area)r7   r   
limit_areainput_ilocsexpected_ilocsr   rK   s         r   r   z&TestDecimalArray.test_ffill_limit_area   s    " E''"$)	
 
	 ?C2#> - *k>
	 
	 
	 
	s"   A/A#A/#A,	(A//A8c                   d}t        j                  t        |dd      5  t        |   |       d d d        d}t        j                  t
        |dd      5  t        |   |       d d d        d}t        j                  t        |dd      5  t        |   |       d d d        y # 1 sw Y   xxY w# 1 sw Y   MxY w# 1 sw Y   y xY w)Nz)Series.fillna with 'method' is deprecatedFr   r   r   )rG   r   r   rB   test_fillna_limit_backfillr   r   s      r   r   z+TestDecimalArray.test_fillna_limit_backfill   s    9''"$)	
 	= G.|<	= E''"$)	
 	= G.|<	= J''"$)	
 	= G.|<	= 	=%	= 	=	= 	=	= 	=s#   B(B4C (B14B= C	c                    dj                  ddg      }t        j                  t        t        f|d      5  t
        |   |       d d d        y # 1 sw Y   y xY wN|r   r   Fr   )joinrG   r   r   r   rB   test_fillna_no_op_returns_copy)r7   r   r   rK   s      r   r   z/TestDecimalArray.test_fillna_no_op_returns_copy   s]    hhFK
 ''./sU
 	9 G248	9 	9 	9s   AAc                    d}t        j                  t        |d      5  t        |   |       d d d        y # 1 sw Y   y xY wr~   )rG   r   r   rB   test_fillna_seriesr   s      r   r   z#TestDecimalArray.test_fillna_series   sA    <''cE
 	5 G&|4	5 	5 	5r   c                    dj                  ddg      }t        j                  t        t        f|d      5  t
        |   ||       d d d        y # 1 sw Y   y xY wr   )r   rG   r   r   r   rB   test_fillna_series_method)r7   r   fillna_methodr   rK   s       r   r   z*TestDecimalArray.test_fillna_series_method   sc    hhFK
 ''./sU
 	K G-lMJ	K 	K 	Ks   AAc                    |st         nd }d}t        j                  ||d      5  t        |   |       d d d        y # 1 sw Y   y xY wr~   )r   rG   r   rB   test_fillna_copy_framer7   r   using_copy_on_writewarnr   rK   s        r   r   z'TestDecimalArray.test_fillna_copy_frame   sF    )<!$<''C%P 	9G*<8	9 	9 	9	   ?Ac                    |st         nd }d}t        j                  ||d      5  t        |   |       d d d        y # 1 sw Y   y xY wr~   )r   rG   r   rB   test_fillna_copy_seriesr   s        r   r   z(TestDecimalArray.test_fillna_copy_series   sF    )<!$<''C%P 	:G+L9	: 	: 	:r   dropnaTFc                   |d d }|r(t        j                  ||j                                   }n|}t        j                  |      j                  |      }t        j                  |      j                  |      }t        j                         5 }d|j                  t        j                  <   |j                         }|j                         }	d d d        t        j                  	       y # 1 sw Y    xY w)N
   )r   F)rE   arrayisnar_   r`   value_countsr   localcontextrr   rt   
sort_indexrG   assert_series_equal)
r7   all_datar   rZ   r:   vcsvcs_exctxrI   rJ   s
             r   test_value_countsz"TestDecimalArray.test_value_counts  s    CR=HHXx}}&678EEii!..f.=5!..f.=!!# 	+s27CIIg../^^%F((*H	+ 	vx0	+ 	+s   >C--C6c                    t        j                  |      }|j                  j                  t	        |      v sJ dt	        |      v sJ y )Nz	Decimal: )r_   r`   r   namerepr)r7   r   r=   s      r   test_series_reprz!TestDecimalArray.test_series_repr  s=     iiozz$s)+++d3i'''r   z%Inconsistent array-vs-scalar behavior)reasonufuncc                &    t         |   ||       y r
   )rB   #test_unary_ufunc_dunder_equivalence)r7   r   r   rK   s      r   r   z4TestDecimalArray.test_unary_ufunc_dunder_equivalence  s     	3D%@r   )r8   strreturnztype[Exception] | None)r=   	pd.Seriesr8   r   r   bool)r=   r   r8   r   rA   r   ) __name__
__module____qualname__r;   r>   rC   rX   r\   rc   rm   r|   r   r   rS   rT   parametrizer   r   r   r   r   r   r   r   r   rU   rE   positivenegativeabsr   __classcell__)rK   s   @r   r5   r5   D   sg   	
5QO;=@,48& [[199998888		
"=8
95
K9: [[Xe}51 61&( [[EF[[Wr{{BKK&HIA J GAr   r5   c                 N   t        t        j                  d      t        j                  d      g      } | j                  ddgdt        j                  d            }t        t        j                  d      t        j                  d      g      }t	        j
                  ||       y )Nr-   r.   r   re   Tz-1.0)
allow_fill
fill_value)r   r   r   takerG   assert_extension_array_equalarrrI   rJ   s      r    test_take_na_value_other_decimalr   %  su    
.0FG
HCXXq"g$7??6;RXSFW__U3W__V5LMNH##FH5r   c                 2   t               } t        j                  g d|       }t        t	        j
                  d      t	        j
                  d      t	        j
                  d      g|       }t        j                  |      }t        j                  ||       y )N)r   r   r   r   r   r   r   )r   r_   r`   r   r   r   rG   r   )r   r=   r   exps       r   6test_series_constructor_coerce_data_to_extension_dtyper   ,  sj    NE
))IU
+C
		W__Q/1CDC ))C.C3$r   c                 \   t        t        j                  d      g      } t        j                  | t                     }t        j                  |       }t        j                  ||       t        j                  | d      }t        j                  dg      }t        j                  ||       y )N10.0r   int64r   )r   r   r   r_   r`   r   rG   r   r   s      r   "test_series_constructor_with_dtyper   8  sv    
/0
1CYYs,.1Fyy~H68,YYs'*Fyy"H68,r   c                    t        t        j                  d      g      } t        j                  d| it                     }t        j                  d| i      }t        j                  ||       t        t        j                  d      g      } t        j                  d| id      }t        j                  ddgi      }t        j                  ||       y )Nr   Ar   r   r   )r   r   r   r_   	DataFramer   rG   assert_frame_equalr   s      r   %test_dataframe_constructor_with_dtyper   C  s    
/0
1C\\3*LN;F||S#J'H&(+
/0
1C\\3*G4F||S2$K(H&(+r   frameTFc                f   t        j                  t        t        j                  d      g      d      }t        j
                         }d|_        | r|j                         }|j                  t        |            }| r|d   }|j                  j                  j                  |j                  k(  sJ y )Nr   r0   )r   rp   )r_   r`   r   r   r   Contextprecto_frameastyper   r   rx   )r   r   r   rI   s       r   test_astype_dispatchesr   P  s     99\7??1#5"67cBD
//
CCH}}[[c*+F<<$$000r   c                  (    e Zd ZdZedddd       Zy)DecimalArrayWithoutFromSequencez:Helper class for testing error handling in _from_sequence.NF)r   copyc                   t        d      )NzFor the test)KeyError)clsscalarsr   r   s       r   _from_sequencez.DecimalArrayWithoutFromSequence._from_sequenceh  s    ~&&r   )r   r   r   __doc__classmethodr   r   r   r   r   r   e  s    D.2 ' 'r   r   c                      e Zd Zed        Zy)DecimalArrayWithoutCoercionc                (    | j                  |d      S )NF)coerce_to_dtype)_create_method)r   ops     r   _create_arithmetic_methodz5DecimalArrayWithoutCoercion._create_arithmetic_methodn  s    !!"e!<<r   N)r   r   r   r   r   r   r   r   r   r   m  s    = =r   r   c                   t         }t        d        }| j                  t        d|        |t	        j
                  d      t	        j
                  d      g      }t        j                  |      }|j                  |t        j                        }t        j                  t	        j
                  d      t	        j
                  d      gd      }t        j                  ||       y )Nc                    t         S r
   )r   )r   s    r   construct_array_typez?test_combine_from_sequence_raises.<locals>.construct_array_typez  s    ..r   r   r-   r.   4.0objectr   )r   r   setattrr   r   r   r_   r`   combineoperatoraddrG   r   )monkeypatchr   r   r   r=   rI   rJ   s          r   !test_combine_from_sequence_raisesr  v  s    
)C/ / &<>RS
wu%wu'=>
?C
))C.C[[hll+F yy		!78H 68,r   class_c                    | t        j                  d      t        j                  d      g      }||z   }t        j                  t        j                  d      t        j                  d      gd      }t	        j
                  ||       y )Nr-   r.   r   r   r   )r   r   rE   r   rG   assert_numpy_array_equal)r  r   rI   rJ   s       r   $test_scalar_ops_from_sequence_raisesr    sj     '//%('//%*@A
BC3YFxx		!78H 1r   z#reverse, expected_div, expected_mod)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                    t        g d      }| rt        d|      \  }}nt        |d      \  }}t        |      }t        |      }t        j                  ||       t        j                  ||       y )N)r   r         r   )r   divmodrG   r   )reverseexpected_divexpected_modr   divro   s         r   test_divmod_arrayr    sc     \
"C!S>S#q>Sl+Ll+L##C6##C6r   c                   | d d }t        j                  |t        dd            }t        j                  |      }t        j                  t        j                  |      t        dd            }t        j                  ||       y )Nrp   r
     index)r_   r`   r   rE   r   rG   r   )r   r0   srI   rJ   s        r   test_ufunc_fallbackr    s^    RaA
		!5A;'AVVAYFyy%1+6H68,r   c                     t        g d      } t        j                  |       }t        t        j                  | j                              }t	        j
                  ||       y Nr   r   r
  )r   rE   r   _datarG   r   )r0   rI   rJ   s      r   test_array_ufuncr    s?    9AVVAYF"&&/*H##FH5r   c                    t        g d      } t        j                  |       }t        j                  |      }t        j                  t        t        j                  | j
                                    }t        j                  ||       y r  )r   r_   r`   rE   r   r  rG   r   r0   r  rI   rJ   s       r   test_array_ufunc_seriesr    sU    9A
		!AVVAYFyyBFF177O45H68,r   c                 >   t        g d      } t        j                  |       }t        j                  |t        j                  d            }t        j                  t        j                  | t        j                  d                  }t        j                  ||       y )Nr  r   )	r   r_   r`   rE   r  r   r   rG   r   r  s       r   $test_array_ufunc_series_scalar_otherr!    sd    9A
		!AVVAwq)*Fyy7??1#567H68,r   c                 8   t        g d      } t        j                  |       }t        j                  t        g d            }t        j                  ||       }t        j                  | |      }t        j                  ||       t        j                  ||       y )Nr  )r   r     )r   r_   r`   rE   r  rG   r   )r0   r  rJ   r1r2s        r   test_array_ufunc_series_deferr&    sj    9A
		!AyyI./H	1B	1B2x(2x(r   c                    t               d d } t        j                  g dg dt        |       d      }t        j                  t        | d   | d   g            }|j                  d      d   j                  d	       }t        j                  ||d
       |d   j                  |d         j                  d       }t        j                  ||d
       t        j                  t        | d   | d   | d   g      t        j                  j                  g d            }|j                  ddg      d   j                  d       }t        j                  ||d
       |d   j                  |d   |d   g      j                  d       }t        j                  ||d
       t        j                  ddgt        | d   | d   g      d      }|j                  d      j                  d       }t        j                  ||d
       y )Nrp   r   r   r   r   r   r   )id1id2decimalsr   r
  r)  r+  c                     | j                   d   S Nr   ilocr(   s    r   r*   z"test_groupby_agg.<locals>.<lambda>  s     r   Fcheck_namesc                     | j                   d   S r-  r.  r0  s    r   r*   z"test_groupby_agg.<locals>.<lambda>  s    QVVAY r   r   )r   r   )r   r   )r   r   r  r*  c                     | j                   d   S r-  r.  r0  s    r   r*   z"test_groupby_agg.<locals>.<lambda>  s    !&&) r   c                     | j                   d   S r-  r.  r0  s    r   r*   z"test_groupby_agg.<locals>.<lambda>  s    !&&QR) r   )r*  r+  c                     | j                   d   S r-  r.  r0  s    r   r*   z"test_groupby_agg.<locals>.<lambda>  s    QVVAY r   )r   r_   r   r   r`   r   groupbyaggrG   r   
MultiIndexfrom_tuplesr   )r   dfrJ   rI   s       r   test_groupby_aggr=    s    ;r?D	\RVEWX
B
 yyT!Wd1g$678HZZz*../BCF68?
^##BuI.223FGF68? yyDGT!Wd1g./mm''(@AH ZZ'
3778KLF68?
^##RY5	$:;??@STF68? ||QF
DGTRSWCU8VWXHZZ""#67F&(>r   c                   d }| j                  t        d|d       t               d d }t        j                  g dt        |      d      }t        j
                  t        |d   |d	   z   |d
   z   |d   |d   z   g            }|j                  d      d   j                  d       }t        j                  ||d       t        j
                  t        |            }t        j                  g dt        j                        }|j                  |      j                  d       }t        j                  ||d       y )Nc                R    t        j                  t        j                  |             S r
   )rE   sumr   )r7   s    r   DecimalArray__my_sumz8test_groupby_agg_ea_method.<locals>.DecimalArray__my_sum  s    vvbhhtn%%r   my_sumFraisingrp   r(  )idr+  r   r   r   r
  r  rE  r+  c                6    | j                   j                         S r
   valuesrB  r0  s    r   r*   z,test_groupby_agg_ea_method.<locals>.<lambda>  s    8I r   r1  r   c                6    | j                   j                         S r
   rG  r0  s    r   r*   z,test_groupby_agg_ea_method.<locals>.<lambda>  s    ahhoo.? r   )r   r   r   r_   r   r`   r   r8  r9  rG   r   rE   r   r   )r  rA  r   r<  rJ   rI   r  groupers           r   test_groupby_agg_ea_methodrK    s   & h0DeT;r?D	_,t:LM	NByyT!WtAw%6a%@$q'DQRGBS$TUVHZZj)--.IJF68?
		,t$%Ahhbhh7GYYw##$?@F68?r   c                >   d	d}| j                  t        d|d       t               }t        j                  t        |            }t        j
                  |t        t        |            d      }||dkD      ||dkD      |j                  d    |j                  d    y )
Nc                    t        d      )Nz0tried to convert a DecimalArray to a numpy array)	Exception)r7   r   s     r   DecimalArray__array__z;test_indexing_no_materialize.<locals>.DecimalArray__array__  s    JKKr   	__array__FrC  )r0   r/   r^   r   )r   r0   r
   )	r   r   r   r_   r`   r   r   ri   at)r  rO  r   r  r<  s        r   test_indexing_no_materializerR    s    
L k3HRWX;D
		,t$%A	AE#a&M2	3B a#gJq3wKDDGEE&Mr   c                    t        j                  d      t        j                  d      g} t        j                  t        j                  d      t        j                  d      gd      }t	        j                  | d      }|j                  d	      }t        j                  ||       t	        j                  |      j                  d	      }t        j                  ||       y )
Nz1.1111z2.2222z1.11z2.22r   r   r   r   )r+  )	r   r   rE   r   r_   to_numpyrG   r  r`   )rH  rJ   r0   rI   s       r   test_to_numpy_keywordrU  !  s    ooh')BCFxx		 '//&"9:(H 	y)AZZZ#F1YYq\""A".F1r   c                   t        j                  dt        j                  d      t        j                  d      gid      }|j	                  t                     }d|j                  d<   | rtt        j                  dt        j                  d      t        j                  d      git                     }t        j                  |j                  |j                         y y )Nr0   r   r
  r   r   r   r4  )
r_   r   r   r   r   r   r/  rG   assert_equalrH  )r   r<  df2rJ   s       r   test_array_copy_on_writerY  /  s    	sW__Q/1CDEX	VB
))LN
#CBGGDM<<7??1%wq'9:;<>
 	

HOO4	 r   )5
__future__r   r   r  numpyrE   rS   pandasr_   pandas._testing_testingrG   pandas.tests.extensionr   $pandas.tests.extension.decimal.arrayr   r   r   r   fixturer   r   r   r   r"   r$   r+   r3   ExtensionTestsr5   r   r   r   r   rT   r   r   r   r   _add_arithmetic_opsr  r  r  r  r  r  r!  r&  r=  rK  rR  rU  rY  r   r   r   <module>rd     s
   "       '    % % B B F F     2 2 4 4^At** ^AB6	%-
, 4-01 11('l '="A =  / / 1-* .0KL22 )\<(4|*LM7	7-6--	)?@@**25r   