U
    f/e                     @  s  U d dl mZ d dlmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dlZd dlZd dlZd dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d d	lmZ  ej!eeej"gd
dd Z#dd Z$eegZ%de&d< edddgZ'de&d< e'(dd dD  G dd dZ)G dd dZ*G dd dZ+G dd dZ,G dd  d Z-G d!d" d"Z.G d#d$ d$Z/G d%d& d&Z0d'd( Z1d)d* Z2ej34d+d d,d-gd d-d.gfgd/d0 Z5d1d2 Z6dS )3    )annotations)abc)Decimal)combinationsN)Any)	Float64IndexIndex
Int64Index
RangeIndexSeries	TimedeltaTimedeltaIndexUInt64Indexarray)ops)expressions)paramsc                 C  s   | j S )zL
    Fixture to test behavior for Index, Series and tm.to_array classes
    )param)request r   H/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/arithmetic/test_numeric.pybox_pandas_1d_array    s    r   c                 C  s8   t t |  r4t t |  s,t|d9 }|S )z_
    Helper to adjust the expected result if we are dividing by -0.0
    as opposed to 0.0
    )npZsignbitr   anyallAssertionError)zeroexpectedr   r   r   adjust_negative_zero(   s    r   z	list[Any]ser_or_index
   (   leftsc                 C  s(   g | ] }t D ]}|d ddg|dqqS )r!         dtype)r    ).0r'   clsr   r   r   
<listcomp>=   s    r*   )i1i2i4i8u1u2Zu4u8f2Zf4f8c                   @  s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestNumericComparisonsc                 C  s   t dtdddgk}dtdddgk}t|| tdddgt dk }tdddgdk }t|| t dddgd tdddgk}dtdddgk}t|| d S )Nr                    )r   float64r   tmassert_series_equalr   )selfresultr   r   r   r   (test_operator_series_comparison_zerorankI   s    "z?TestNumericComparisons.test_operator_series_comparison_zerorankc              	   C  s   t j }t dtdi}d}tjt|d ||k W 5 Q R X tjt|d ||k  W 5 Q R X tjt|d ||k  W 5 Q R X tjt|d ||k W 5 Q R X ||k  rt	||k
 
 st	d S )Nx   zI'[<>]' not supported between instances of 'numpy.ndarray' and 'Timestamp'match)pd	Timestampnow	DataFramerangepytestraises	TypeErrorr   r   r   )r<   tsdfmsgr   r   r   test_df_numeric_cmp_dt64_raisesU   s    
z6TestNumericComparisons.test_df_numeric_cmp_dt64_raisesc                 C  sL   t tjddd}t tjd}td|_t|| d||   d S )Nr@   r   namez
2000-01-01r5   )	r   r   randomrandnrC   rD   rP   r:   r;   )r<   abr   r   r   test_compare_invalidi   s    z+TestNumericComparisons.test_compare_invalidc              	   C  s   |}|t k	r|ntj}ttjd}tj||dd}|dk}ttjdt	d}tj||dd}t
|| |dk}t
||  d}tjt|d |dk  W 5 Q R X d S )Ni FZ	transposerS   r&   z0Invalid comparison between dtype=float64 and strrA   )r   r   Zndarrayr   rQ   rR   r:   box_expectedzerosboolassert_equalrH   rI   rJ   )r<   box_with_arrayboxZxboxobjr=   r   rM   r   r   r   $test_numeric_cmp_string_numexpr_pathq   s    z;TestNumericComparisons.test_numeric_cmp_string_numexpr_pathN)__name__
__module____qualname__r>   rN   rU   r^   r   r   r   r   r4   H   s   r4   c                   @  s  e Zd Zejdejee	gejjde
dd ddd Zejdejee	gejjde
dd dd	d
 Zejjdeddedd edd edd dedd dgdd ddd Zejjdeddedd edd gdd ddd Zdd Zejdeddedd edd edd dededdejdejdgd d! Zejdej  ejjd"d# ej  ejgejd$d%d& Z d'S )(.TestNumericArraylikeArithmeticWithDatetimeLikebox_clsleftc                 C  s   t | jt| j S Ntyper_   strr'   r?   r   r   r   <lambda>       z7TestNumericArraylikeArithmeticWithDatetimeLike.<lambda>)idsc                 C  sp   t jdddgdd}||}tdddg}t|ts<|tkrDt|}|| }t|| || }t|| d S )	Nr5   r6   r7   m8[s]r&   Z10sZ40sZ90s)r   r   r   
isinstancer   r:   rZ   )r<   rd   rc   rightr   r=   r   r   r   test_mul_td64arr   s    z?TestNumericArraylikeArithmeticWithDatetimeLike.test_mul_td64arrc                 C  s   t | jt| j S re   rf   ri   r   r   r   rj      rk   c              	   C  s   t jdddgdd}||}tdddg}t|ts<|tkrDt|}|| }t|| || }t|| d	}tjt	|d
 ||  W 5 Q R X tjt	|d
 ||  W 5 Q R X d S )Nr!   r"   Z   rm   r&   Z1sZ2sZ3szCannot dividerA   )
r   r   r   rn   r   r:   rZ   rH   rI   rJ   )r<   rd   rc   ro   r   r=   rM   r   r   r   test_div_td64arr   s    z?TestNumericArraylikeArithmeticWithDatetimeLike.test_div_td64arr	scalar_tdr5   daysztimedelta64[s]ztimedelta64[ms]c                 C  s
   t | jS re   rg   r_   ri   r   r   r   rj      rk   c           	      C  sf   |}|}t dd tt|D }t||}t||}|| }t|| || }t|| d S )Nc                 S  s   g | ]}t |d qS )rt   )r   )r(   nr   r   r   r*      s     z`TestNumericArraylikeArithmeticWithDatetimeLike.test_numeric_arr_mul_tdscalar.<locals>.<listcomp>)r   rG   lenr:   rW   rZ   )	r<   rs   numeric_idxr[   r\   indexr   r=   Zcommuter   r   r   test_numeric_arr_mul_tdscalar   s    zLTestNumericArraylikeArithmeticWithDatetimeLike.test_numeric_arr_mul_tdscalarc                 C  s
   t | jS re   rv   ri   r   r   r   rj      rk   c                 C  sr   |}t dt j}tj||dd}|dd}tj||dd}|| }t|| || }t|| d S )Ni N  FrV   ztimedelta64[D]ztimedelta64[ns])r   arangeastypeint64r:   rW   viewrZ   )r<   rs   r[   r\   arrr]   r   r=   r   r   r   *test_numeric_arr_mul_tdscalar_numexpr_path   s    
zYTestNumericArraylikeArithmeticWithDatetimeLike.test_numeric_arr_mul_tdscalar_numexpr_pathc           	   	   C  sr   |}|dd }t ddg}t||}t||}|| }t|| d}tjt|d ||  W 5 Q R X d S )Nr5   r7   z3 Daysz36 Hoursz$cannot use operands with types dtyperA   )r   r:   rW   rZ   rH   rI   rJ   )	r<   Z
three_daysry   r[   r\   rz   r   r=   rM   r   r   r   test_numeric_arr_rdiv_tdscalar   s    zMTestNumericArraylikeArithmeticWithDatetimeLike.test_numeric_arr_rdiv_tdscalarother   )hourszm8[h]NaTDr7   r   c              	   C  s   |}t ||}d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X d S )Nzunsupported operand type|Addition/subtraction of integers and integer-arrays|Instead of adding/subtracting|cannot use operands with types dtype|Concatenation operation is not implemented for NumPy arraysrA   )r:   rW   rH   rI   rJ   r<   ry   r   r[   r\   rd   rM   r   r   r   "test_add_sub_timedeltalike_invalid  s    zQTestNumericArraylikeArithmeticWithDatetimeLike.test_add_sub_timedeltalike_invalidUTC)tzz*ignore:elementwise comp:DeprecationWarningc              	   C  s   |}t ||}dddddddg}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X d S )	N|unsupported operand typez+Cannot (add|subtract) NaT (to|from) ndarrayz3Addition/subtraction of integers and integer-arraysz;Concatenation operation is not implemented for NumPy arrayszBoperand type\(s\) all returned NotImplemented from __array_ufunc__z(can only perform ops with numeric valuesrA   )r:   rW   joinrH   rI   rJ   r   r   r   r   !test_add_sub_datetimelike_invalid"  s&    zPTestNumericArraylikeArithmeticWithDatetimeLike.test_add_sub_datetimelike_invalidN)!r_   r`   ra   rH   markparametrizer   r   r   r   r#   rp   rr   r   Zto_timedelta64Zto_pytimedeltar}   r{   r   r   Ztimedelta64rC   offsetsZMinuteZSecondr   rD   rE   to_pydatetimeZto_datetime64r   filterwarningsr   r   r   r   r   rb      st       
	




	
rb   c                   @  s   e Zd Zdd Zdd Zdd Zdd Zej	d	e
je
jgd
d Zej	dejejejgdd Zej	dejejejgdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Z d+S ),TestDivisionByZeroc                 C  sv   |}t tjtjtjtjtjgtjd}t||}|| }t|| t|	dt
|	d }t|t| d S Nr&   r.   r   r   naninfr9   r   r:   assert_index_equalr   r}   r   r;   r<   r   ry   idxr   Z	expected2r=   
ser_compatr   r   r   test_div_zeroL  s    "
z TestDivisionByZero.test_div_zeroc                 C  sv   |}t tjtjtjtjtjgtjd}t||}|| }t|| t|	dt
|	d }t|t| d S r   r   r   r   r   r   test_floordiv_zeroY  s    "
z%TestDivisionByZero.test_floordiv_zeroc                 C  sl   |}t tjtjtjtjtjgtjd}|| }t|| t|dt|d }t	|t| d S r   )
r   r   r   r9   r:   r   r   r}   r   r;   )r<   r   ry   r   r   r=   r   r   r   r   test_mod_zerof  s    "z TestDivisionByZero.test_mod_zeroc                 C  s   |}t tjtjtjtjtjgtjd}t tjtjtjtjtjgtjd}t||}t||}t|d | t|d | d S )Nr&   r   r5   )	r   r   r   r   r9   r   divmodr:   r   )r<   r   ry   r   ZexleftZexrightr=   r   r   r   test_divmod_zeroo  s    ""

z#TestDivisionByZero.test_divmod_zeroopc                 C  sb   t |trd S |d }ttj tj tj tjtjgtjd}t||}|||}t	|| d S )Nr7   r&   )
rn   r   r   r   r   r   r9   r   r:   r   )r<   r   ry   r   r   r   r=   r   r   r   test_div_negative_zeroz  s    
(

z)TestDivisionByZero.test_div_negative_zerodtype1c           	   	   C  s   |}t ddddgdd|}t ddddgdd|}tjd	d
$ t |jtj|j dd d}W 5 Q R X tj|jdd< |jdkr|jdkrt	j
r|dkr|d}|| }t|| ||| rtd S )Nr7      r@      firstrO   r   secondignorer   r9   )r'   rP   r~   Zfloat32)r   r}   r   errstatevaluesr9   r   ilocr'   exprZUSE_NUMEXPRr:   r;   equalsr   )	r<   Zswitch_numexpr_min_elementsr   any_real_dtypedtype2r   r   r   r=   r   r   r   test_ser_div_ser  s     
z#TestDivisionByZero.test_ser_div_serc                 C  s   |}t ddg|}t ddg|}|| || f}t|}|d tj|d< tj|d d< t||}t|d |d  t|d |d  t|j	|}t|d |d  t|d |d  d S )Nr5   r   r6   )
r   r}   listr   r9   r   r   r:   r;   r   )r<   r   r   r   rd   ro   r   r=   r   r   r   test_ser_divmod_zero  s    
z'TestDivisionByZero.test_ser_divmod_zeroc                 C  s   t tjdg}t tjdg}|| || f}t||}t|d |d  t|d |d  t|j|}t|d |d  t|d |d  d S )N      ?       @r   r5   )r   r   r   r   r:   r;   r   )r<   rd   ro   r   r=   r   r   r   test_ser_divmod_inf  s    
z&TestDivisionByZero.test_ser_divmod_infc                 C  sz   t dgd }t jd}tdgd }|t| }t|| t|| }t|| t|t| }t|| d S )Nr   r@   r8   )r   r   rQ   rR   r   r:   r;   )r<   Z
zero_arraydatar   r=   r   r   r   test_rdiv_zero_compat  s    z(TestDivisionByZero.test_rdiv_zero_compatc                 C  sD   t dddgdd}t tj tjtjgdd}|d }t|| d S Nr   r   r5   r   rO   r   r   r   r   r:   r;   r<   serr   r=   r   r   r   test_div_zero_inf_signs  s    z*TestDivisionByZero.test_div_zero_inf_signsc                 C  s>   t dddgdd}t dtjdgdd}d| }t|| d S )Nr   r   r5   r   rO   r8   )r   r   r   r:   r;   r   r   r   r   test_rdiv_zero  s    z!TestDivisionByZero.test_rdiv_zeroc                 C  sD   t dddgdd}|d }t tj tjtjgdd}t|| d S r   r   )r<   r   r=   r   r   r   r   test_floordiv_div  s    z$TestDivisionByZero.test_floordiv_divc                 C  sn   t ddddgddddgd}|| }tddddg}ttjtjtjdg}t ||d}t|| d S )	Nr7   r   r@   r   r   r   r   r   r5   )rC   rF   r   r   r   r:   assert_frame_equal)r<   rL   r=   r   r   r   r   r   r   test_df_div_zero_df  s     z&TestDivisionByZero.test_df_div_zero_dfc              	   C  s   t ddddgddddgd}tddddg}ttjtjtjdg}t ||d}tjd	d
 |jd|j }W 5 Q R X t j||j|j	d}t
|| d S )Nr7   r   r@   r   r   r   r   r5   r   r   floatrz   columns)rC   rF   r   r   r   r   r   r}   rz   r   r:   r   )r<   rL   r   r   r   r   r=   r   r   r   test_df_div_zero_array  s     z)TestDivisionByZero.test_df_div_zero_arrayc              	   C  s   t ddddgddddgd}|d }t jtj|j|jd}tj|jdddf< t	|| tj
d	d
 |jdd }W 5 Q R X t j||j|jd}t	|| d S )Nr7   r   r@   r   r   r   r   r5   r   r   r9   )rC   rF   r   r   rz   r   r   r   r:   r   r   r   r}   r<   rL   r=   r   r   result2r   r   r   test_df_div_zero_int  s     z'TestDivisionByZero.test_df_div_zero_intc                 C  sJ   t tjdd}|d }|| }|| }|d|drFtd S Nr!   r@   r   rC   rF   r   rQ   rR   Zfillnar   r   r<   rL   r   resZres2r   r   r   (test_df_div_zero_series_does_not_commute  s
    z;TestDivisionByZero.test_df_div_zero_series_does_not_commutec                 C  s   t ddddgddddgd}tddddg}|s>|d}ttjtjtjdg}t ||d}|| }t|| t jddddgddddgddd	}tddddgd
d}ttjtjtjdg}t ||d}|| }t|| d S )Nr7   r   r@   r   r   r   r9   F)copyr~   r&   )rC   rF   r   r}   r   r   r:   r   )r<   Zusing_array_managerrL   r   r   r   r=   r   r   r   test_df_mod_zero_df   s     
$z&TestDivisionByZero.test_df_mod_zero_dfc              	   C  s   t ddddgddddgd}tddddgdd}ttjtjtjdg}t ||d}tjd	d
 |j|j }W 5 Q R X t j||j|jdd}tj|j	dddf< t
|| d S )Nr7   r   r@   r   r   r   r9   r&   r   r   )rz   r   r'   r5   )rC   rF   r   r   r   r   r   rz   r   r   r:   r   )r<   rL   r   r   r   r   r   r   r   r   test_df_mod_zero_array8  s     z)TestDivisionByZero.test_df_mod_zero_arrayc              	   C  s   t ddddgddddgd}|d }t jtj|j|jd}t|| tjdd	 |j	
d
d }W 5 Q R X t j||j|jd}t|| d S )Nr7   r   r@   r   r   r   r   r   r   r9   )rC   rF   r   r   rz   r   r:   r   r   r   r}   r   r   r   r   test_df_mod_zero_intI  s     z'TestDivisionByZero.test_df_mod_zero_intc                 C  sJ   t tjdd}|d }|| }|| }|d|drFtd S r   r   r   r   r   r   (test_df_mod_zero_series_does_not_commuteW  s
    z;TestDivisionByZero.test_df_mod_zero_series_does_not_commuteN)!r_   r`   ra   r   r   r   r   rH   r   r   operatortruedivfloordivr   r   r~   r9   uint64r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   K  s.   	



r   c                	   @  s   e Zd Zdd Zdd Zdd Zejde	j
eje	jgdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zejde	jejgdd Zdd Zdd Zdd Zdd Zejd ejd!d"d#d$ejgd%d& Zd'd( Z d)d* Z!d+d, Z"d-S ).TestMultiplicationDivisionc                 C  sl   |}t tdg}t tdg}t||}t||}|td }t|| |td }t|| d S )Nr!   r@   r6   )r   r   r:   rW   rZ   )r<   r[   r\   r   r   r=   r   r   r   test_divide_decimale  s    z.TestMultiplicationDivision.test_divide_decimalc                 C  sb   t ddgdd}t ddgdd}t dtj g}||}tj||dd	 || }t|| d S )
Nr5   r   r   rO   g{Gzg{Gzr   FZcheck_names)r   r   r   divr:   r;   )r<   r   r   r   r=   r   r   r   test_div_equiv_binopu  s    
z/TestMultiplicationDivision.test_div_equiv_binopc                 C  sH   |}|d }| d}t|| |d }t|jd }t|| d S )Nr5   r9   r6   )r}   r:   r   r   r   )r<   ry   r   r=   r   r   r   r   test_div_int  s    
z'TestMultiplicationDivision.test_div_intr   c                 C  s*   |}t ||}||d}t || d S )Nr5   )r:   rW   rZ   )r<   r   ry   r[   r   r=   r   r   r   test_mul_int_identity  s    
z0TestMultiplicationDivision.test_mul_int_identityc                 C  sb   |}|| }|t jddd }t||d  t|tr<dnd}|t jd|d }t|| d S )Nr@   r~   r&   r   )r   r   r:   r   rn   r   r|   )r<   ry   r   didxr=   	arr_dtyper   r   r   test_mul_int_array  s    z-TestMultiplicationDivision.test_mul_int_arrayc                 C  sH   |}|| }t |trdnd}|ttjd|d }t|t| d S )Nr   r~   r@   r&   )rn   r   r   r   r|   r:   r;   )r<   ry   r   r   r   r=   r   r   r   test_mul_int_series  s
    z.TestMultiplicationDivision.test_mul_int_seriesc                 C  sB   |}t jddd}|t|d  }t||d  }t|| d S )Nr@   r9   r&   g?)r   r|   r   r:   r;   )r<   ry   r   Zrng5r=   r   r   r   r   test_mul_float_series  s
    z0TestMultiplicationDivision.test_mul_float_seriesc                 C  s*   |}t |ts&|| }t||d  d S Nr6   )rn   r
   r:   r   )r<   ry   r   r=   r   r   r   test_mul_index  s    
z)TestMultiplicationDivision.test_mul_indexc              	   C  s8   |}d}t jt|d |tjddd  W 5 Q R X d S )Nz,cannot perform __rmul__ with this index typerA   20130101r@   Zperiods)rH   rI   rJ   rC   
date_ranger<   ry   r   rM   r   r   r   test_mul_datelike_raises  s    z3TestMultiplicationDivision.test_mul_datelike_raisesc              	   C  sb   |}d}t jt|d ||dd   W 5 Q R X t jt|d |tddg  W 5 Q R X d S )Nz(operands could not be broadcast togetherrA   r   r7   r5   r6   )rH   rI   
ValueErrorr   r   r   r   r   r   test_mul_size_mismatch_raises  s    z8TestMultiplicationDivision.test_mul_size_mismatch_raisesc                 C  sJ   |}|}t ||jd}t||}t||}||d}t|| d S )Nr   )r   r   r:   rW   rZ   )r<   r   ry   r[   r\   r   r   r=   r   r   r   test_pow_float  s    
z)TestMultiplicationDivision.test_pow_floatc                 C  sF   |}|}t |jd }t||}t||}|d }t|| d S r   )r   r   r:   rW   rZ   )r<   ry   r[   r\   r   r   r=   r   r   r   test_modulo  s    z&TestMultiplicationDivision.test_moduloc           	   	   C  sj   |}t |d}tjdd t |jd\}}W 5 Q R X t|t|f}t||D ]\}}t|| qPd S )Nr6   r   r   )r   r   r   r   r   zipr:   r   )	r<   ry   r   r=   r   modr   rer   r   r   test_divmod_scalar  s    
z-TestMultiplicationDivision.test_divmod_scalarc           
   	   C  s   |}t j|jj|jjdd }t||}t jdd t|j|\}}W 5 Q R X t|t|f}t||D ]\}}	t	
||	 qjd S Nr&   r6   r   r   )r   onesr   shaper'   r   r   r   r   r:   r   
r<   ry   r   r   r=   r   r   r   r   r   r   r   r   test_divmod_ndarray  s    
z.TestMultiplicationDivision.test_divmod_ndarrayc           
   	   C  s   |}t j|jj|jjdd }t|t|}t jdd t|j|\}}W 5 Q R X t|t|f}t||D ]\}}	t	
||	 qnd S r   )r   r   r   r   r'   r   r   r   r   r:   r;   r   r   r   r   test_divmod_series  s    z-TestMultiplicationDivision.test_divmod_seriesr      igX9v@gQ	c                 C  s   t jdd}dd }||}t|t | |||  tt || |||  t|t | |||  tt || |||  d S )Nr@   r7   c                 S  s   t j| tddddgdS )NZABCDEZjimZjoeZjolier   )rC   rF   r   ri   r   r   r   rj     s     z?TestMultiplicationDivision.test_ops_np_scalar.<locals>.<lambda>)r   rQ   rR   r:   r   r   )r<   r   valsfrL   r   r   r   test_ops_np_scalar  s    z-TestMultiplicationDivision.test_ops_np_scalarc                 C  s   t  }d|_td|i}t j|| ||d  dd t j|| ||d  dd t j||k ||d k dd t j|| ||d  dd d S )NrK   AFr   )r:   makeTimeSeriesrP   rC   rF   r;   )r<   rK   rL   r   r   r   test_operators_frame  s    z/TestMultiplicationDivision.test_operators_framec              	   C  s(  t jdd tddddgddddgd}|d	 |d
  }t|d	 j|d
 j dd}t j|jdd< t	|| |d	 d }tt j|j
d	d}t	|| |d}|d	 |d
  }t|d	 j|d
 j }t	|| |d}|d	 |d
  }|d
 |d	  }||rtW 5 Q R X d S )Nr   r   r7   r   r@   r   r   r   r   r   r9   r&   rz   rP   )r   r   rC   rF   r   r   r   r   r:   r;   rz   r}   r   r   )r<   pr=   r   r   r   r   r   test_modulo2  s"     

z'TestMultiplicationDivision.test_modulo2c              	   C  sn   t jddX tddg}|d }tt jt jg}t|| d| }tt jdg}t|| W 5 Q R X d S )Nr   r   r   r5   r8   )r   r   r   r   r:   r;   )r<   sr=   r   r   r   r   test_modulo_zero_int6  s    z/TestMultiplicationDivision.test_modulo_zero_intN)#r_   r`   ra   r   r   r   rH   r   r   r   mulr   rmulr   r   r   r   r   r   r   r   powrpowr   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r   r   a  s,   



r   c                   @  s  e Zd Zejdedddgedddedddgeddded	d
ej	ej	gedddfedddgedddeddddgedddedddej	gedddfgdd Z
ejdejddddgieddejddddgieddejdd	d
ej	ej	gieddfejddddgieddejdddddgieddejddddej	gieddfgdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestAdditionSubtractionzfirst, second, expectedr5   r6   r7   ABCr?   r  ZABD      @      @ABCDr   r@   c                 C  s$   t || | t || | d S re   )r:   r;   r<   r   r   r   r   r   r   test_add_seriesH  s    z'TestAdditionSubtraction.test_add_seriesrz   c                 C  s$   t || | t || | d S re   )r:   r   r  r   r   r   test_add_frames\  s    z'TestAdditionSubtraction.test_add_framesc              	   C  s   t tdd}d| }|dd }t|| td|i}d| }td|dd i}t|| t }d|_	tj
  }d	d
dg}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X d S )Nr@   r!   foo_c                 S  s   d|  S Nr  r   ri   r   r   r   rj   u  rk   zDTestAdditionSubtraction.test_series_frame_radd_bug.<locals>.<lambda>r   c                 S  s   d|  S r  r   ri   r   r   r   rj   z  rk   rK   r   r   zConcatenation operationrA   )r   r:   Zrands_arraymapr;   rC   rF   r   r  rP   rD   rE   r   r   rH   rI   rJ   )r<   r   r=   r   framerK   rE   rM   r   r   r   test_series_frame_radd_bugq  s(    z2TestAdditionSubtraction.test_series_frame_radd_bugc              	   C  s  t tjd}||j  }||j }t|| t tj	dddtj	dddd}||j  }||j }t|| d}t
jt|d ||j  }W 5 Q R X tjtjddtj	dddd}td|d	< |d	 |j  |d
< |d	 |j |d< tj|d |d
 dd d S )Nr@   r   r   r  zcannot subtract periodrA   r6   Z20130102dater   r=   Fr   )r   r   rQ   rR   rz   Z	to_seriesr:   r;   rC   r   rH   rI   rJ   Z	to_periodrF   rD   )r<   r   r   r=   rM   rL   r   r   r   test_datetime64_with_index  s,    

 z2TestAdditionSubtraction.test_datetime64_with_indexc              	   C  s  |}t j|ddddgd}tjd}t|t|jd}|| }|| }| D ]P\}}	|	 D ]>\}
}|| |
 d }t|s||kst	qbt|sbt	qbqR| D ]T\}}	|	 D ]B\}
}|| |
 ||  }t|s||kst	qt|st	qq|| }|d }t
|| t d	d	d d
gi}t
|| t d	dtjdgi dD ]`}t j|dt jdg|dt jdg|dg}|D ]*}|| |st	t
|| | qqXd S )Nr   CBr   )r   r   r  r6   rS   rT   ZaaZbb)r   r~   r&   )r   r'   r   rz   r'   )rC   rF   r   rQ   r   r   r   itemsisnanr   r:   r   r   r   )r<   Zfloat_framer  Zframe2garbageZ	colSeriesZidSumZ	seriesSumcolseriesr   valZorigValaddedr   rL   r'   framesr   r   r   test_frame_operators  s>    

"
z,TestAdditionSubtraction.test_frame_operatorsc                   sx   ddd  fdd}t  d}|||d  |||d d d  ||d  fd	d
}||d |||d  d S )NFc                 S  sp   |rt | n| }|r t |n|}|||}|||}t|tr`|j| js`|jd |_t	|| d S re   )
r   abscombinern   r   rz   r   
_with_freqr:   r;   )r#  r   r   pos_onlyrd   ro   Zcython_or_numpypythonr   r   r   	_check_op  s    
z@TestAdditionSubtraction.test_series_operators.<locals>._check_opc                   s   ddddddg}|D ]} | |t t| q | |tjdd  | |tj  | |tj  | |tj  | |tj  | |tj  | |tj	dd  | |tj
 d S )	Naddsubr  r   r   r   T)r+  )getattrr   r
  r   ZraddZrsubZrtruediv	rfloordivr	  r  Zrmod)r#  r   Z
simple_opsopnamer-  r   r   check  s    z<TestAdditionSubtraction.test_series_operators.<locals>.checkrK   r6   r@   c                   sJ    | |t j  | |t j  | |t j  | |t j  | |t j d S re   )r   gtgeeqltle)r#  r   r3  r   r   check_comparators  s
    zHTestAdditionSubtraction.test_series_operators.<locals>.check_comparatorsr5   )Fr:   r  rename)r<   r4  tserr:  r   r3  r   test_series_operators  s    



z-TestAdditionSubtraction.test_series_operatorsc                 C  sF   dd }t  d}|||d  |||d d d  ||d d S )Nc              	   S  s   t | |}t|tjrLt| t|krLg }|D ]}|| |tj q.n|}t|}tj	dd t | j
t|}W 5 Q R X t||D ]@\}}tt|| |j| jkstt|j| jd  qd S )Nr   r   )r   rn   r   Iterablerx   appendr   r   Zasarrayr   r   r   r:   Zassert_almost_equalrP   r   r   rz   r*  )r#  r   resultsZother_nprw   	expectedsr=   r   r   r   r   r4    s    


z2TestAdditionSubtraction.test_divmod.<locals>.checkrK   r6   r@   r;  )r<   r4  r=  r   r   r   test_divmod  s
    z#TestAdditionSubtraction.test_divmodc                 C  s|   t  d}|d }t||}ttjgt| |jdd}ttj	gt| |jdd}t 
|d | t 
|d | d S )NrK   r   r  r5   )r:   r  r<  r   r   r   r   rx   rz   r   r;   )r<   r=  r   r=   exp1exp2r   r   r   test_series_divmod_zero#  s    
z/TestAdditionSubtraction.test_series_divmod_zeroN)r_   r`   ra   rH   r   r   r   r   r   r   r  rC   rF   r  r  r  r'  r>  rC  rF  r   r   r   r   r  D  s@   
 
-+r  c                   @  sp   e Zd Zejdeeee	e
gdd Zejdeeee
gdd Zejdeeee
gdd Zdd	 Zd
S )TestUFuncCompatholderc                 C  sh   |t krt nt}|tkr$tdd}n|tjddd}t|}|ttjddd}t|| d S )Nr   r@   r~   r&   )r   r   r
   r   r|   sinr:   rZ   )r<   rH  r\   r   r=   r   r   r   r   test_ufunc_compat6  s    
z!TestUFuncCompat.test_ufunc_compatc              
   C  s  |dddddgdd}|t kr"t nt}t|}|jdkrDt||sHttttdddddgdd}t	
||}t	|| t|d	}|jdkrt||sttd
ddd	dgdd}t	
||}t	|| |d	 }|jdkrt||sttdddddgdd}t	
||}t	|| |d	 }|jdkrBt||sFttdddd	dgdd}t	
||}t	|| |d }|jdkrt||sttdd	dddgdd}t	
||}t	|| |d	 }|jdkrt||sttd
ddd	dgdd}t	
||}t	|| d S )Nr5   r6   r7   r   r@   r?   rO   r3   r   g      ?r   g      ?g      @r  r  g      @g      @g      @g      r8   )r   r   r   sqrtr'   rn   r   r   r   r:   rW   rZ   divide)r<   rH  r   r\   r=   expr   r   r   test_ufunc_coercionsE  s@    
"z$TestUFuncCompat.test_ufunc_coercionsc                 C  s   |dddgdd}|t krt nt}t|}t|ts:ttdddgdd}tddd	gdd}t	|d
 t
|| t	|d t
|| d S )Nr5   r6   r7   r?   rO   r8   r   r   r  r   )r   r   r   modfrn   tupler   r   r:   rZ   rW   )r<   rH  r]   r\   r=   rD  rE  r   r   r   !test_ufunc_multiple_return_valueso  s    
z1TestUFuncCompat.test_ufunc_multiple_return_valuesc                 C  sX   t dddgdddgdd}tj|ddgd t dddgdddgdd}t|| d S )	Nr   r5   r6   r7   r?   r  r!      )r   r   r.  atr:   r;   )r<   r  r   r   r   r   test_ufunc_at{  s    zTestUFuncCompat.test_ufunc_atN)r_   r`   ra   rH   r   r   r	   r   r   r
   r   rJ  rN  rQ  rT  r   r   r   r   rG  5  s   

)
rG  c                   @  sj   e Zd Zejddegdd Zejddegdd Zejde	j
e	je	je	je	jgdd	 ZdS )
TestObjectDtypeEquivalencer'   Nc                 C  sv   |}t dddg|d}t tjtjtjg|d}t||}t||}tj| }t|| |tj }t|| d S )Nr5   r6   r7   r&   )r   r   r   r:   rW   rZ   r<   r'   r[   r\   r   r   r=   r   r   r   test_numarr_with_dtype_add_nan  s    

z9TestObjectDtypeEquivalence.test_numarr_with_dtype_add_nanc                 C  sl   |}t dddg|d}t dddg|d}t||}t||}d| }t|| |d }t|| d S )Nr5   r6   r7   r&   r   )r   r:   rW   rZ   rV  r   r   r   test_numarr_with_dtype_add_int  s    z9TestObjectDtypeEquivalence.test_numarr_with_dtype_add_intr   c                 C  sL   t tjdtdtd}|d|}|d|t}t	|t| d S )Nr!   r  r   )
r   r   rQ   rR   r|   objectr}   r   r:   r;   )r<   r   r   r=   r   r   r   r   test_operators_reverse_object  s    
z8TestObjectDtypeEquivalence.test_operators_reverse_object)r_   r`   ra   rH   r   r   rY  rW  rX  r   r.  r/  r  r   r   rZ  r   r   r   r   rU    s   

rU  c                	   @  s   e Zd Zdd Zdd Zdd Zejde	j
e	je	je	je	je	jgdd	 Zd
d Zejdejejgejddddgdd ZdS )TestNumericArithmeticUnsortedc                 C  s   |D ]x}t |dD ]0\}}|||}|t|t|}t|| q|D ]2}	|D ](}
||	|
}|t|	|
}t|| qPqHqd S r   )r   r	   r:   r   )r<   r   scalarsidxsr   rS   rT   r=   r   r   Zscalarr   r   r   check_binop  s    

z)TestNumericArithmeticUnsorted.check_binopc                 C  s`   t jt jt jt jt jg}dddg}tdddtdddtdddtdd	dg}| ||| d S )
Nr   r5   r6   r   r!   r$   r@   )r   r.  r/  r  r   r   r
   r^  r<   r   r\  r]  r   r   r   test_binops  s    




z)TestNumericArithmeticUnsorted.test_binopsc                 C  s8   t g}ddg}tdddtdddg}| ||| d S )Nr5   r6   r   r!   r$   )r
  r
   r^  ra  r   r   r   test_binops_pow  s    z-TestNumericArithmeticUnsorted.test_binops_powr   c                 C  s~   t d}ttjd}|t||}|||}t|| ttjdd}|t||g|}|||}t	|| d S )Nr@   r6   )
r
   r   r   rQ   rR   r:   r;   rC   rF   r   )r<   r   rz   r   r   r=   r   r   r   $test_arithmetic_with_frame_or_series  s    

zBTestNumericArithmeticUnsorted.test_arithmetic_with_frame_or_seriesc                 C  s0  t ddd}|d }t ddd}tj||dd |d }t ddd}tj||dd |d }t d	d
d}tj||dd |d }t dddd}tj||dd |d }t dddd }tj||dd |d }|}tj||dd || }t|j|j }tj||dd t ddd}|d }|jd }tjt|j|dd t ddddt dddft ddddt dddft ddddt dddjd ft ddddt dddjd ft ddt dft ddddt dddft ddddt d	ddft ddddt dfg}|D ] \}}}tj|| |dd q
d S )Nr   r!   r6   r$   r   T)exactrR  r   r@   r5   r9   i  i  ii7!   C   d   r   2   r7   r`  r_  ir   ii8)r
   r:   r   r}   r   r   Z_int64index)r<   r   r=   r   Zcases_exactr   r   r   r   test_numeric_compat2  sP    

z2TestNumericArithmeticUnsorted.test_numeric_compat2r'   deltar5   r   r   c                 C  s   ||}t dddg|d}|| }t |j| |d}t|| || }t |j| |d}t|| t|| d|  t|| d|  || jrtd S )Nr!      rR  r&   r6   r   )r   r   r:   r   emptyr   )r<   r'   rm  rz   r=   r   r   r   r   test_addsub_arithmetic0  s    z4TestNumericArithmeticUnsorted.test_addsub_arithmeticN)r_   r`   ra   r^  rb  rc  rH   r   r   r   r.  r/  r  r   r   r
  rd  rl  r   r~   r9   rp  r   r   r   r   r[    s$   	
;r[  c                  C  s~   t dddgdd dgd} t jddddgiddd	gd
}| j|dd}t tjdddgdtjdtjgd}t|| d S )Nr   r5   r6   g?)r   r  r   g333333?g?r7   r  Z
fill_valuer   r8   )rC   rF   r1  r   r   r   r:   r   )rL   r   r=   r   r   r   r   test_fill_value_inf_maskingD  s    rr  c               	   C  s   t jtdtjddddgd tjgd tddtdtdd	} t jtjddtd
tdd	}t	d  | j
|dd W 5 Q R X d S )Nr!   r5   r6   r7   r   )r   r  r  r   Z
abcdefghijr  r   Z
abcdefghjkZABCXr   rq  )rC   rF   r   r|   r   r   rQ   rR   r:   Zassert_produces_warningr   )Zpdf1Zpdf2r   r   r   test_dataframe_div_silencedR  s     

  rs  zdata, expected_datar5   r6   r   c           
      C  s   t |dd}| |}||| }||| }t| krHtj}t|dd}	nLt|krdtj}t|dd}	n0t| |fkrtj}t|}	ntj}tj |dd}	|||	 |||	 d S )NZInt64r&   rY  )	r   r   r:   r;   r   r   r	   Zassert_numpy_array_equalr   )
r   Zbox_1d_arrayr   Zexpected_datar   	containerrd   ro   Zassert_functionr   r   r   r    test_integer_array_add_list_likee  s"    

ru  c                  C  s   t jdtjdit jjddgdddggddgd	d
} |  }|j	dd|_| | }t jdgd dg| jd}t
|| d S )NrS      rT   r   r5   r6   ZlevAZlevB)namesr  r8   )r   rz   )rC   rF   r   rQ   rR   Z
MultiIndexZfrom_productr   rz   Z	swaplevelr:   r   )rL   Zdf2r=   r   r   r   r   "test_sub_multiindex_swapped_levels  s     rx  )7
__future__r   collectionsr   decimalr   	itertoolsr   r   typingr   Znumpyr   rH   ZpandasrC   r   r   r	   r
   r   r   r   r   r   Zpandas._testingZ_testingr:   Zpandas.corer   Zpandas.core.computationr   r   ZfixtureZto_arrayr   r   r    __annotations__r#   extendr4   rb   r   r   r  rG  rU  r[  rr  rs  r   r   ru  rx  r   r   r   r   <module>   sZ    ,
C A   d rM/ 
