a
    PfL                     @  s  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d Zejdd Zejd	d
 Zejdd Zejdd Zejdd Zejdd Zejdd ZG dd dejZdd Zdd Zdd Z dd Z!ej"#dd d!gd"d# Z$G d$d% d%eZ%G d&d' d'e%Z&e&'  d(d) Z(ej"#d*e%e&gd+d, Z)ej"#d-d!g d.g d/fd g d0g d1fgd2d3 Z*d4d5 Z+d6d7 Z,d8d9 Z-d:d; Z.d<d= Z/d>d? Z0d@dA Z1dBdC Z2dDdE Z3dFdG Z4dS )H    )annotationsN)base)DecimalArrayDecimalDtype	make_data
to_decimalc                   C  s   t  S N)r    r	   r	   d/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/extension/decimal/test_decimal.pydtype   s    r   c                   C  s
   t t S r   )r   r   r	   r	   r	   r
   data   s    r   c                   C  s   t dd tdD S )Nc                 S  s   g | ]}t d qS )   )decimalDecimal).0_r	   r	   r
   
<listcomp>        z!data_for_twos.<locals>.<listcomp>d   )r   ranger	   r	   r	   r
   data_for_twos   s    r   c                   C  s   t tdtdgS )NNaN   r   r   r   r	   r	   r	   r
   data_missing#   s    r   c                   C  s    t tdtdtdgS )N120r   r	   r	   r	   r
   data_for_sorting(   s    r   c                   C  s    t tdtdtdgS )Nr   r   r   r   r	   r	   r	   r
   data_missing_for_sorting/   s    r   c                   C  s   dd S )Nc                 S  s   |   o|  S r   )is_nan)xyr	   r	   r
   <lambda>8   r   zna_cmp.<locals>.<lambda>r	   r	   r	   r	   r
   na_cmp6   s    r$   c               	   C  s@   t d} t d}t d}t d}t| | ||||| |gS )N1.0z0.02.0r   )r   r   r   )bacnar	   r	   r
   data_for_grouping;   s
    



r+   c                      s  e Zd ZdddddZddddd	d
Zdddd fddZ fddZ fddZdd Zdd Z	dd Z
 fddZ fddZe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&d'Z fd(d)Z fd*d+Z fd,d-Z fd.d/Z fd0d1Z fd2d3Zejd4d5d6gd7d8 Zd9d: Zejjd;d<ejd=ejejejg fd>d?Z  ZS )@TestDecimalArraystrztype[Exception] | None)op_namereturnc                 C  s   d S r   r	   )selfr.   objotherr	   r	   r
   _get_expected_exceptionE   s    z(TestDecimalArray._get_expected_exceptionz	pd.Seriesbool)serr.   r/   c                 C  s   dS )NTr	   )r0   r5   r.   r	   r	   r
   _supports_reductionJ   s    z$TestDecimalArray._supports_reduction)r5   r.   skipnac                   sJ   |dkrt  |||S t|||d}tt|| }t|| d S )Ncount)r7   )supercheck_reducegetattrnpZasarraytmZassert_almost_equal)r0   r5   r.   r7   resultexpected	__class__r	   r
   r:   M   s
    zTestDecimalArray.check_reducec                   s4   |dv r t jjtd}|| t ||| d S )N)ZkurtskewZsemmedianraises)pytestmarkxfailNotImplementedErrorapplymarkerr9   test_reduce_series_numeric)r0   r   all_numeric_reductionsr7   requestrG   r@   r	   r
   rK   U   s    
z+TestDecimalArray.test_reduce_series_numericc                   s4   |}|dv r$t jjtd}|| t |||S )N)rB   rC   rD   )rF   rG   rH   rI   rJ   r9   test_reduce_frame)r0   r   rL   r7   rM   r.   rG   r@   r	   r
   rN   [   s
    
z"TestDecimalArray.test_reduce_framec                 C  s   t |}| |||d d S )N      ?)pdSeries_compare_other)r0   r   comparison_opr5   r	   r	   r
   test_compare_scalarc   s    
z$TestDecimalArray.test_compare_scalarc                 C  sR   t |}tjdg dt|}t |dd |D  }| |||| d S )Nr   )r   r   c                 S  s   g | ]}t td |qS )g       @)r   r   pow)r   ir	   r	   r
   r   l   r   z7TestDecimalArray.test_compare_array.<locals>.<listcomp>)rP   rQ   r<   randomZdefault_rngchoicelenrR   )r0   r   rS   r5   Zalterr2   r	   r	   r
   test_compare_arrayg   s    
z#TestDecimalArray.test_compare_arrayc           	      C  s   |}t |}t }|jtj }|jtj }d|jtj< d|jtj< t dd |D }| ||| d|vr| |||d  | ||d | ||d ||jtj< ||jtj< d S )Nr   c                 S  s   g | ]}t |d  qS )r   )int)r   dr	   r	   r
   r   z   r   zATestDecimalArray.test_arith_series_with_array.<locals>.<listcomp>modr      )rP   rQ   r   
getcontexttrapsDivisionByZeroInvalidOperationZcheck_opname)	r0   r   Zall_arithmetic_operatorsr.   r5   contextZdivbyzerotrapZinvalidoptrapr2   r	   r	   r
   test_arith_series_with_arrayo   s    
z-TestDecimalArray.test_arith_series_with_arrayc                   sD   d}t jt|dd t | W d    n1 s60    Y  d S Nz,ExtensionArray.fillna added a 'copy' keywordFmatchcheck_stacklevel)r=   assert_produces_warningDeprecationWarningr9   test_fillna_framer0   r   msgr@   r	   r
   rl      s
    z"TestDecimalArray.test_fillna_framec                   s   d}t jt|ddd t | W d    n1 s80    Y  d}t jt|ddd t | W d    n1 sz0    Y  d S )N4ExtensionArray.fillna 'method' keyword is deprecatedFrh   ri   Zraise_on_extra_warnings9The 'method' keyword in DecimalArray.fillna is deprecated)r=   rj   rk   r9   test_fillna_limit_padFutureWarningrm   r@   r	   r
   rr      s     *z&TestDecimalArray.test_fillna_limit_padz'limit_area, input_ilocs, expected_ilocsZ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   Zinside)r   r   r   r   r   c              	     s~   d}t jt|dddT d}tjt|d" t |||| W d    n1 sR0    Y  W d    n1 sp0    Y  d S )Nro   Frp   z*DecimalArray does not implement limit_area)rh   )r=   rj   rk   rF   rE   rI   r9   test_ffill_limit_area)r0   r   Z
limit_areaZinput_ilocsZexpected_ilocsrn   r@   r	   r
   ru      s    z&TestDecimalArray.test_ffill_limit_areac                   s   d}t jt|ddd t | W d    n1 s80    Y  d}t jt|ddd t | W d    n1 sz0    Y  d}t jt|ddd t | W d    n1 s0    Y  d S )Nz)Series.fillna with 'method' is deprecatedFrp   ro   rq   )r=   rj   rs   r9   test_fillna_limit_backfillrk   rm   r@   r	   r
   rv      s0    **z+TestDecimalArray.test_fillna_limit_backfillc                   sR   d ddg}tjttf|dd t | W d    n1 sD0    Y  d S N|ro   rq   Frg   )joinr=   rj   rs   rk   r9   test_fillna_no_op_returns_copy)r0   r   rn   r@   r	   r
   rz      s    
z/TestDecimalArray.test_fillna_no_op_returns_copyc                   sD   d}t jt|dd t | W d    n1 s60    Y  d S rf   )r=   rj   rk   r9   test_fillna_seriesrm   r@   r	   r
   r{      s
    z#TestDecimalArray.test_fillna_seriesc                   sT   d ddg}tjttf|dd t || W d    n1 sF0    Y  d S rw   )ry   r=   rj   rs   rk   r9   test_fillna_series_method)r0   r   Zfillna_methodrn   r@   r	   r
   r|      s    
z*TestDecimalArray.test_fillna_series_methodc                   sP   |st nd }d}tj||dd t | W d    n1 sB0    Y  d S rf   )rk   r=   rj   r9   test_fillna_copy_framer0   r   using_copy_on_writewarnrn   r@   r	   r
   r}      s    z'TestDecimalArray.test_fillna_copy_framec                   sP   |st nd }d}tj||dd t | W d    n1 sB0    Y  d S rf   )rk   r=   rj   r9   test_fillna_copy_seriesr~   r@   r	   r
   r      s    z(TestDecimalArray.test_fillna_copy_seriesdropnaTFc           
      C  s   |d d }|r&t ||   }n|}t|j|d}t|j|d}t ,}d|jtj	< |
 }|
 }	W d    n1 s0    Y  t||	 d S )N
   )r   F)r<   arrayZisnarP   rQ   Zvalue_countsr   localcontextra   rc   Z
sort_indexr=   assert_series_equal)
r0   Zall_datar   rM   r2   vcsZvcs_exctxr>   r?   r	   r	   r
   test_value_counts  s    
&z"TestDecimalArray.test_value_countsc                 C  s2   t |}|jjt|v sJ dt|v s.J d S )Nz	Decimal: )rP   rQ   r   namerepr)r0   r   r5   r	   r	   r
   test_series_repr  s    
z!TestDecimalArray.test_series_reprz%Inconsistent array-vs-scalar behavior)reasonufuncc                   s   t  || d S r   )r9   #test_unary_ufunc_dunder_equivalence)r0   r   r   r@   r	   r
   r     s    z4TestDecimalArray.test_unary_ufunc_dunder_equivalence) __name__
__module____qualname__r3   r6   r:   rK   rN   rT   r[   re   rl   rr   rF   rG   parametrizeru   rv   rz   r{   r|   r}   r   r   r   rH   r<   Zpositivenegativeabsr   __classcell__r	   r	   r@   r
   r,   D   sF   
r,   c                  C  sZ   t tdtdg} | jddgdtdd}t tdtdg}t|| d S )Nr%   r&   r   rU   Tz-1.0)Z
allow_fillZ
fill_value)r   r   r   Ztaker=   assert_extension_array_equalarrr>   r?   r	   r	   r
    test_take_na_value_other_decimal%  s    r   c                  C  sV   t  } tjg d| d}ttdtdtdg| d}t|}t|| d S )N)r   r   r   r   r   r   r   )r   rP   rQ   r   r   r   r=   r   )r   r5   r   expr	   r	   r
   6test_series_constructor_coerce_data_to_extension_dtype,  s    
r   c                  C  s`   t tdg} tj| t d}t| }t|| tj| dd}tdg}t|| d S )N10.0r   int64r   )r   r   r   rP   rQ   r   r=   r   r   r	   r	   r
   "test_series_constructor_with_dtype8  s    
r   c                  C  s   t tdg} tjd| it d}td| i}t|| t tdg} tjd| idd}tddgi}t|| d S )Nr   Ar   r   r   )r   r   r   rP   	DataFramer   r=   assert_frame_equalr   r	   r	   r
   %test_dataframe_constructor_with_dtypeC  s    r   frameTFc                 C  sf   t jttdgdd}t }d|_| r4| }|t	|}| rN|d }|j
jj|jksbJ d S )Nr   r(   )r   r_   )rP   rQ   r   r   r   ContextprecZto_frameastyper   r   rd   )r   r   r   r>   r	   r	   r
   test_astype_dispatchesP  s    r   c                   @  s$   e Zd ZdZedddddZdS )DecimalArrayWithoutFromSequencez:Helper class for testing error handling in _from_sequence.NF)r   copyc                C  s   t dd S )NzFor the test)KeyError)clsZscalarsr   r   r	   r	   r
   _from_sequenceh  s    z.DecimalArrayWithoutFromSequence._from_sequence)r   r   r   __doc__classmethodr   r	   r	   r	   r
   r   e  s   r   c                   @  s   e Zd Zedd ZdS )DecimalArrayWithoutCoercionc                 C  s   | j |ddS )NF)Zcoerce_to_dtype)Z_create_method)r   opr	   r	   r
   _create_arithmetic_methodn  s    z5DecimalArrayWithoutCoercion._create_arithmetic_methodN)r   r   r   r   r   r	   r	   r	   r
   r   m  s   r   c                 C  s|   t }tdd }| td| |tdtdg}t|}||t	j
}tjtdtdgdd}t|| d S )	Nc                 S  s   t S r   )r   )r   r	   r	   r
   construct_array_typez  s    z?test_combine_from_sequence_raises.<locals>.construct_array_typer   r%   r&   4.0objectr   )r   r   setattrr   r   r   rP   rQ   combineoperatoraddr=   r   )monkeypatchr   r   r   r5   r>   r?   r	   r	   r
   !test_combine_from_sequence_raisesv  s    

r   class_c                 C  sN   | t dt dg}|| }tjt dt dgdd}t|| d S )Nr%   r&   r   r   r   )r   r   r<   r   r=   assert_numpy_array_equal)r   r   r>   r?   r	   r	   r
   $test_scalar_ops_from_sequence_raises  s    r   z#reverse, expected_div, expected_mod)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                 C  sZ   t g d}| r td|\}}nt|d\}}t |}t |}t|| t|| d S )N)r   r         r   )r   divmodr=   r   )reverseZexpected_divZexpected_modr   divr^   r	   r	   r
   test_divmod_array  s    r   c                 C  sT   | d d }t j|tddd}t|}t jt|tddd}t|| d S )Nr_   r      index)rP   rQ   r   r<   r   r=   r   )r   r(   sr>   r?   r	   r	   r
   test_ufunc_fallback  s
    
r   c                  C  s6   t g d} t| }t t| j}t|| d S Nr   r   r   )r   r<   r   _datar=   r   )r(   r>   r?   r	   r	   r
   test_array_ufunc  s    
r   c                  C  sF   t g d} t| }t|}tt t| j}t|| d S r   )r   rP   rQ   r<   r   r   r=   r   r(   r   r>   r?   r	   r	   r
   test_array_ufunc_series  s
    

r   c                  C  sP   t g d} t| }t|td}tt| td}t|| d S )Nr   r   )	r   rP   rQ   r<   r   r   r   r=   r   r   r	   r	   r
   $test_array_ufunc_series_scalar_other  s
    
r   c                  C  s\   t g d} t| }tt g d}t|| }t| |}t|| t|| d S )Nr   )r   r      )r   rP   rQ   r<   r   r=   r   )r(   r   r?   r1r2r	   r	   r
   test_array_ufunc_series_defer  s    
r   c                  C  sv  t  d d } tg dg dt| d}tt| d | d g}|dd d	d
 }tj	||dd |d |d dd
 }tj	||dd tjt| d | d | d gtj
g dd}|ddgd dd
 }tj	||dd |d |d |d gdd
 }tj	||dd tddgt| d | d gd}|ddd
 }tj||dd d S )Nr_   r   r   r   r   r   rt   )id1id2decimalsr   r   r   r   c                 S  s
   | j d S Nr   ilocr!   r	   r	   r
   r#     r   z"test_groupby_agg.<locals>.<lambda>FZcheck_namesc                 S  s
   | j d S r   r   r   r	   r	   r
   r#     r   r   )r   r   )r   r   )r   r   r   r   c                 S  s
   | j d S r   r   r   r	   r	   r
   r#     r   c                 S  s
   | j d S r   r   r   r	   r	   r
   r#     r   )r   r   c                 S  s
   | j d S r   r   r   r	   r	   r
   r#     r   )r   rP   r   r   rQ   r   groupbyaggr=   r   Z
MultiIndexfrom_tuplesr   )r   dfr?   r>   r	   r	   r
   test_groupby_agg  s(    $$r   c                 C  s   dd }| j td|dd t d d }tg dt|d}tt|d	 |d
  |d  |d |d  g}|dd dd }t	j
||dd tt|}tjg dtjd}||dd }t	j
||dd d S )Nc                 S  s   t t | S r   )r<   sumr   )r0   r	   r	   r
   DecimalArray__my_sum  s    z8test_groupby_agg_ea_method.<locals>.DecimalArray__my_summy_sumFZraisingr_   r   )idr   r   r   r   r   r   r   r   c                 S  s
   | j  S r   valuesr   r   r	   r	   r
   r#     r   z,test_groupby_agg_ea_method.<locals>.<lambda>r   r   c                 S  s
   | j  S r   r   r   r	   r	   r
   r#     r   )r   r   r   rP   r   rQ   r   r   r   r=   r   r<   r   r   )r   r   r   r   r?   r>   r   Zgrouperr	   r	   r
   test_groupby_agg_ea_method  s    2r   c                 C  sx   d
dd}| j td|dd t }tt|}t|tt|d}||dk  ||dk  |jd  |jd	  d S )Nc                 S  s   t dd S )Nz0tried to convert a DecimalArray to a numpy array)	Exception)r0   r   r	   r	   r
   DecimalArray__array__  s    z;test_indexing_no_materialize.<locals>.DecimalArray__array__Z	__array__Fr   )r(   r'   rO   r   )r   r(   )N)	r   r   r   rP   rQ   r   r   rZ   at)r   r   r   r   r   r	   r	   r
   test_indexing_no_materialize  s    

r   c                  C  sz   t dt dg} tjt dt dgdd}tj| dd}|jdd	}t|| t|jdd	}t|| d S )
Nz1.1111z2.2222z1.11z2.22r   r   r   r   )r   )	r   r   r<   r   rP   Zto_numpyr=   r   rQ   )r   r?   r(   r>   r	   r	   r
   test_to_numpy_keyword!  s    r   c                 C  st   t jdtdtdgidd}|t }d|jd< | rpt jdtdtdgit d}t|j	|j	 d S )Nr(   r   r   r   r   r   r   )
rP   r   r   r   r   r   r   r=   Zassert_equalr   )r   r   Zdf2r?   r	   r	   r
   test_array_copy_on_write/  s    "
r   )5
__future__r   r   r   numpyr<   rF   ZpandasrP   Zpandas._testingZ_testingr=   Zpandas.tests.extensionr   Z$pandas.tests.extension.decimal.arrayr   r   r   r   Zfixturer   r   r   r   r   r   r$   r+   ZExtensionTestsr,   r   r   r   r   rG   r   r   r   r   Z_add_arithmetic_opsr   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   <module>   sn   







 b

"
	 