U
    f/eB                  
   @   sb  d dl 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 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ejdd ZG dd dZG dd deejZ G dd deej!Z"G dd deej#Z$G dd  d eej%Z&G d!d" d"eej'Z(G d#d$ d$eej)Z*G d%d& d&Z+G d'd( d(e+ej,Z-G d)d* d*e+ej.Z/G d+d, d,eej0Z1G d-d. d.eej2Z3G d/d0 d0eej4Z5G d1d2 d2eej6Z7G d3d4 d4eej8Z9ej:j;d5d6d7d8 Z<d9d: Z=d;d< Z>ej:?d=ej@d>ej:j;d?d6d@dAgdBdC ZAG dDdE dEeejBZCG dFdG dGeejDZEG dHdI dIeZFG dJdK dKeFZGeGH  dLdM ZIej:?dNeFeGgdOdP ZJej:?dQdAd dRdRdSgdRd dRd gfd>dSdRd d gd d dSdSgfgdTdU ZKdVdW ZLdXdY ZMdZd[ ZNd\d] ZOd^d_ ZPd`da ZQdbdc ZRddde ZSdfdg ZTdS )h    N)infer_dtype)base)DecimalArrayDecimalDtype	make_data
to_decimalc                   C   s   t  S N)r    r	   r	   O/tmp/pip-unpacked-wheel-tiezk1ph/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>    s     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       zna_cmp.<locals>.<lambda>r	   r	   r	   r	   r
   na_cmp6   s    r%   c                   C   s
   t dS )Nr   r   r	   r	   r	   r
   na_value;   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edd Zedd ZdS )BaseDecimalc                 O   sp   dd }|j dkr||}n| }|j dkr<||}n| }t|| tj||  ||  f||S )Nc                 S   s(   zt | W S  tk
r"   Y dS X d S )NF)mathisnan	TypeErrorr!   r	   r	   r
   convertL   s    z0BaseDecimal.assert_series_equal.<locals>.convertobject)r   applyisnatmassert_series_equal)clsleftrightargskwargsr3   Zleft_naZright_nar	   r	   r
   r8   J   s    	

zBaseDecimal.assert_series_equalc                 O   s   t j|j|j|dd|dd|dd|dd|dd	 d
d |jdkj}|D ] }| j|| || f|| qZ|j|d}|j|d}t j||f|| d S )NZcheck_column_typeequivcheck_namesTcheck_exactFcheck_categoricalobj	DataFramez.columns)exactr?   r@   rA   rB   r   )columns)	r7   Zassert_index_equalrE   getZdtypesindexr8   Zdropassert_frame_equal)r9   r:   r;   r<   r=   decimalscolr	   r	   r
   rH   a   s    




zBaseDecimal.assert_frame_equalN)__name__
__module____qualname__classmethodr8   rH   r	   r	   r	   r
   r.   I   s   
r.   c                   @   s.   e Zd Zdd Zejdddgdd ZdS )		TestDtypec                 C   s   d S r   r	   selfr   r	   r	   r
   test_hashabley   s    zTestDtype.test_hashableskipnaTFc                 C   s,   t ||ddkstt ||ddks(td S )NrS   zunknown-array)r   AssertionError)rQ   r   r   rS   r	   r	   r
   test_infer_dtype|   s    zTestDtype.test_infer_dtypeN)rK   rL   rM   rR   pytestmarkparametrizerV   r	   r	   r	   r
   rO   x   s   rO   c                   @   s   e Zd ZdS )TestInterfaceNrK   rL   rM   r	   r	   r	   r
   rZ      s   rZ   c                   @   s   e Zd ZdS )TestConstructorsNr[   r	   r	   r	   r
   r\      s   r\   c                   @   s   e Zd ZdS )TestReshapingNr[   r	   r	   r	   r
   r]      s   r]   c                   @   s   e Zd Zdd ZdS )TestGetitemc                 C   sZ   t tdtdg}|jddgdtdd}t tdtdg}| || d S )Nr'   r(   r   Tz-1.0)Z
allow_fillZ
fill_value)r   r   r   Ztakeassert_extension_array_equal)rQ   arrresultexpectedr	   r	   r
    test_take_na_value_other_decimal   s    z,TestGetitem.test_take_na_value_other_decimalN)rK   rL   rM   rd   r	   r	   r	   r
   r^      s   r^   c                   @   s   e Zd ZdS )TestMissingNr[   r	   r	   r	   r
   re      s   re   c                   @   s   e Zd Zdd ZdS )Reducec              	   C   sj   |dkr8d}t jt|d t|||d W 5 Q R X n.t|||d}tt|| }t|| d S )N)ZmedianZskewZkurtz)decimal does not support the .* operationmatchrT   )rW   raisesNotImplementedErrorgetattrnpZasarrayr7   Zassert_almost_equal)rQ   sop_namerS   msgrb   rc   r	   r	   r
   check_reduce   s    zReduce.check_reduceN)rK   rL   rM   rp   r	   r	   r	   r
   rf      s   rf   c                   @   s   e Zd ZdS )TestNumericReduceNr[   r	   r	   r	   r
   rq      s   rq   c                   @   s   e Zd ZdS )TestBooleanReduceNr[   r	   r	   r	   r
   rr      s   rr   c                       s6   e Zd Zejdddgdd Z fddZ  ZS )TestMethodsdropnaTFc           
   	   C   s   |d d }|r&t ||   }n|}t|j|d}t|j|d}t "}d|jtj	< |
 }|
 }	W 5 Q R X t||	 d S )N
   )rt   F)rl   arrayr6   pdSeriesZvalue_countsr   localcontexttrapsInvalidOperationZ
sort_indexr7   r8   )
rQ   Zall_datart   requestothervcsZvcs_exctxrb   rc   r	   r	   r
   test_value_counts   s    
zTestMethods.test_value_countsc                    s   t  |S r   )super test_value_counts_with_normalize)rQ   r   	__class__r	   r
   r      s    z,TestMethods.test_value_counts_with_normalize)	rK   rL   rM   rW   rX   rY   r   r   __classcell__r	   r	   r   r
   rs      s   
rs   c                   @   s   e Zd ZdS )TestCastingNr[   r	   r	   r	   r
   r      s   r   c                       s   e Zd Z fddZ  ZS )TestGroupbyc                    s   t  | d S r   )r   test_groupby_agg_extension)rQ   r-   r   r	   r
   r      s    z&TestGroupby.test_groupby_agg_extension)rK   rL   rM   r   r   r	   r	   r   r
   r      s   r   c                   @   s   e Zd ZdS )TestSetitemNr[   r	   r	   r	   r
   r      s   r   c                   @   s   e Zd Zdd ZdS )TestPrintingc                 C   s2   t |}|jjt|kstdt|ks.td S )Nz	Decimal: )rw   rx   r   namereprrU   )rQ   r   serr	   r	   r
   test_series_repr   s    
zTestPrinting.test_series_reprN)rK   rL   rM   r   r	   r	   r	   r
   r      s   r   zKraising AssertionError as this is not implemented, though easy enough to do)reasonc               	   C   s8   d} t jt| d tjdddgt d W 5 Q R X d S )NzQCannot cast data to extension dtype 'decimal'. Pass the extension array directly.rg   r   r   r   r   )rW   ri   
ValueErrorrw   rx   r   )Zxprr	   r	   r
   =test_series_constructor_coerce_data_to_extension_dtype_raises   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   int64ru   )r   r   r   rw   rx   r   r7   r8   ra   rb   rc   r	   r	   r
   "test_series_constructor_with_dtype   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   ru   )r   r   r   rw   rC   r   r7   rH   r   r	   r	   r
   %test_dataframe_constructor_with_dtype   s    r   frameTz6pd.concat call inside NDFrame.astype reverts the dtype)ZmarksFc                 C   sf   t jttdgdd}t }d|_| r4| }|t	|}| rN|d }|j
jj|jksbtd S )Nr   r*   )r      )rw   rx   r   r   r   ContextprecZto_frameZastyper   r   contextrU   )r   r   r   rb   r	   r	   r
   test_astype_dispatches  s    r   c                       s6   e Zd Zd fdd	Zdd Zef fdd	Z  ZS )	TestArithmeticOpsNc                    s   t  j|||d d d S N)excr   check_opnamerQ   rm   rn   r}   r   r   r	   r
   r   )  s    zTestArithmeticOps.check_opnamec           	      C   s   |}t |}t }|jtj }|jtj }d|jtj< d|jtj< t dd |D }| ||| d|k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   7  s     zBTestArithmeticOps.test_arith_series_with_array.<locals>.<listcomp>modr   r   )rw   rx   r   
getcontextrz   DivisionByZeror{   r   )	rQ   r   Zall_arithmetic_operatorsrn   rm   r   ZdivbyzerotrapZinvalidoptrapr}   r	   r	   r
   test_arith_series_with_array,  s    
z.TestArithmeticOps.test_arith_series_with_arrayc                    s   t  j|||d d d S r   )r   _check_divmod_op)rQ   rm   opr}   r   r   r	   r
   r   B  s    z"TestArithmeticOps._check_divmod_op)N)rK   rL   rM   r   r   rj   r   r   r	   r	   r   r
   r   (  s   r   c                       s6   e Zd Zd
 fdd	Zdd Zdd Zdd	 Z  ZS )TestComparisonOpsNc                    s   t  j|||d d d S r   r   r   r   r	   r
   r   H  s    zTestComparisonOps.check_opnamec                 C   s   |  ||| d S r   )r   )rQ   rm   r   rn   r}   r	   r	   r
   _compare_otherK  s    z TestComparisonOps._compare_otherc                 C   s"   |}t |}| |||d d S )N      ?)rw   rx   r   )rQ   r   all_compare_operatorsrn   rm   r	   r	   r
   test_compare_scalarN  s    
z%TestComparisonOps.test_compare_scalarc                 C   sR   |}t |}tjdddg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   Y  s     z8TestComparisonOps.test_compare_array.<locals>.<listcomp>)rw   rx   rl   randomchoicelenr   )rQ   r   r   rn   rm   Zalterr}   r	   r	   r
   test_compare_arrayS  s
    
z$TestComparisonOps.test_compare_array)N)rK   rL   rM   r   r   r   r   r   r	   r	   r   r
   r   G  s   r   c                   @   s   e Zd ZdZdddZdS )DecimalArrayWithoutFromSequencez:Helper class for testing error handling in _from_sequence.NFc                 C   s   t dd S )NzFor the test)KeyError)r9   Zscalarsr   copyr	   r	   r
   _from_sequence`  s    z.DecimalArrayWithoutFromSequence._from_sequence)NF)rK   rL   rM   __doc__r   r	   r	   r	   r
   r   ]  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)r9   r   r	   r	   r
   _create_arithmetic_methode  s    z5DecimalArrayWithoutCoercion._create_arithmetic_methodN)rK   rL   rM   rN   r   r	   r	   r	   r
   r   d  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   )r9   r	   r	   r
   construct_array_typeq  s    z?test_combine_from_sequence_raises.<locals>.construct_array_typer   r'   r(   4.0r4   r   )r   rN   setattrr   r   r   rw   rx   combineoperatoraddr7   r8   )monkeypatchr9   r   ra   r   rb   rc   r	   r	   r
   !test_combine_from_sequence_raisesm  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   r4   r   )r   r   rl   rv   r7   assert_numpy_array_equal)r   ra   rb   rc   r	   r	   r
   $test_scalar_ops_from_sequence_raises  s     r   z#reverse, expected_div, expected_modr   r   c                 C   s^   t ddddg}| r$td|\}}nt|d\}}t |}t |}t|| t|| d S )Nr   r         )r   divmodr7   r`   )reverseZexpected_divZexpected_modra   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      rG   )rw   rx   r   rl   absr7   r8   )r   r*   rm   rb   rc   r	   r	   r
   test_ufunc_fallback  s
    
r   c                  C   s8   t dddg} t| }t t| j}t|| d S Nr   r   r   )r   rl   exp_datar7   r`   )r*   rb   rc   r	   r	   r
   test_array_ufunc  s    
r   c                  C   sH   t dddg} t| }t|}tt t| j}t|| d S r   )r   rw   rx   rl   r   r   r7   r8   r*   rm   rb   rc   r	   r	   r
   test_array_ufunc_series  s
    

r   c                  C   sR   t dddg} t| }t|td}tt| td}t|| d S r   )	r   rw   rx   rl   r   r   r   r7   r8   r   r	   r	   r
   $test_array_ufunc_series_scalar_other  s
    
r   c                  C   s`   t dddg} t| }tt dddg}t|| }t| |}t|| t|| d S )Nr   r   r   r      )r   rw   rx   rl   r   r7   r8   )r*   rm   rc   Zr1Zr2r	   r	   r
   test_array_ufunc_series_defer  s    
r   c                  C   s  t  d d } tdddddgdddddg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
dddg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   )id1id2rI   r   r   rI   c                 S   s
   | j d S Nr   Zilocr2   r	   r	   r
   r#     r$   z"test_groupby_agg.<locals>.<lambda>Fr?   c                 S   s
   | j d S r   r   r2   r	   r	   r
   r#     r$   )r   r   )r   r   )r   r   r   r   c                 S   s
   | j d S r   r   r2   r	   r	   r
   r#     r$   c                 S   s
   | j d S r   r   r2   r	   r	   r
   r#     r$   )r   rI   c                 S   s
   | j d S r   r   r2   r	   r	   r
   r#     r$   )r   rw   rC   r   rx   r   groupbyaggr7   r8   Z
MultiIndexfrom_tuplesrH   )r   dfrc   rb   r	   r	   r
   test_groupby_agg  s(    "$$r   c              	   C   s   dd }| j td|dd t d d }tdddddgt|d	}tt|d |d  |d
  |d |d  g}|dd dd }t	j
||dd tt|}|tdddddgdd }t	j
||dd d S )Nc                 S   s   t t | S r   )rl   sumrv   )rQ   r	   r	   r
   DecimalArray__my_sum  s    z8test_groupby_agg_ea_method.<locals>.DecimalArray__my_summy_sumFZraisingr   r   r   )idrI   r   r   r   r   rI   c                 S   s
   | j  S r   valuesr   r2   r	   r	   r
   r#     r$   z,test_groupby_agg_ea_method.<locals>.<lambda>r   c                 S   s
   | j  S r   r   r2   r	   r	   r
   r#     r$   )r   r   r   rw   rC   rx   r   r   r   r7   r8   rl   rv   )r   r   r   r   rc   rb   rm   r	   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)	ExceptionrP   r	   r	   r
   DecimalArray__array__  s    z;test_indexing_no_materialize.<locals>.DecimalArray__array__Z	__array__Fr   )r*   r)   r   r   )r   r*   )N)	r   r   r   rw   rx   rC   r   r   at)r   r   r   rm   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.22r4   r   r   r   )rI   )	r   r   rl   rv   rw   Zto_numpyr7   r   rx   )r   rc   r*   rb   r	   r	   r
   test_to_numpy_keyword  s     r   )Ur   r/   r   Znumpyrl   rW   Zpandasrw   Zpandas._testingZ_testingr7   Zpandas.api.typesr   Zpandas.tests.extensionr   Z$pandas.tests.extension.decimal.arrayr   r   r   r   Zfixturer   r   r   r   r   r   r%   r&   r-   r.   ZBaseDtypeTestsrO   ZBaseInterfaceTestsrZ   ZBaseConstructorsTestsr\   ZBaseReshapingTestsr]   ZBaseGetitemTestsr^   ZBaseMissingTestsre   rf   ZBaseNumericReduceTestsrq   ZBaseBooleanReduceTestsrr   ZBaseMethodsTestsrs   ZBaseCastingTestsr   ZBaseGroupbyTestsr   ZBaseSetitemTestsr   ZBasePrintingTestsr   rX   Zxfailr   r   r   rY   paramr   ZBaseArithmeticOpsTestsr   ZBaseComparisonOpsTestsr   r   r   Z_add_arithmetic_opsr   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   <module>   s   








/

	
 
2
	 