3
pd6                 @   s\  d dl Z d dlZd dlZd dlmZ d dlZd dljZ	d dl
mZmZmZ d dlmZ eeddeddd	Zeed
deddd	Zeed j ed jded jded jddZeed j ed jded jded jddZeejjdd
ddeddd	Zeejjdd
ddeddd	Zejjej ddG dd dZdS )    N)randn)	DataFrameIndexSeries)expressionsi'     ABCDZfloat64)columnsdtyped   ABZfloat32CZint64DZint32)r   r   r   r      '  )sizee   znot using numexpr)reasonc            
   @   s~  e Zd Zdd Zdd Zdd Zdd Zd[d
dZej	j
deeeejjddejed eeeegdd Zdd Zej	j
dd\d]d^d_d`gej	j
deefeefgd d! Zej	j
ddadbdcdddedfgej	j
deefeefgd.d/ Zej	j
d0d	d1gej	j
deeeegd2d3 Zej	j
d4dgdhdigd7d8 Zej	j
d4djdkdlgd9d: Zej	j
d;edd<dd=gdd<dd=ggd>d?d@dAgdBed1d1gd1d1ggd>dAgdBfeddCdd=gddDdd=gdd<d<dEggd>d?d@dAgdBed1d1gd1d1gd1d1ggd>dAgdBfgdFdG Zej	j
dHdmej	j
dJdndKdL Zej	j
dMdNejdOej	j dPdQdRdSdTgej	j
dUee!e"gej	j
dVdodWgdXdY Z#dZS )pTestExpressionsc             C   s4   t j | _tj | _tj | _tj | _t	j
| _
d S )N)_framecopyframe_frame2frame2_mixedmixed_mixed2Zmixed2expr_MIN_ELEMENTS)selfmethod r"   ?/tmp/pip-build-7vycvbft/pandas/pandas/tests/test_expressions.pysetup_method(   s
    



zTestExpressions.setup_methodc             C   s   | j t_ d S )N)r   r   )r    r!   r"   r"   r#   teardown_method0   s    zTestExpressions.teardown_methodc                s   dt _ddddddg}xdD ]}x|D ] |rB fd
d} |_n
tt }t jd	 |||}t jd |||} dkr|jdkr|jjdkst	nt
dd |jjD st	tj|| q&W qW d S )Nr   addsubmulmodtruedivfloordivTFc                s   t |  |S )N)getattr)xy)arithr"   r#   <lambda>:   s    z0TestExpressions.run_arithmetic.<locals>.<lambda>r   fc             s   s   | ]}|j d kV  qdS )r1   N)kind).0r-   r"   r"   r#   	<genexpr>G   s    z1TestExpressions.run_arithmetic.<locals>.<genexpr>)TF)r   r   __name__r,   operatorset_use_numexprndimr
   r2   AssertionErroralldtypesvaluestmassert_equal)r    dfother
operations	test_flexopexpectedresultr"   )r/   r#   run_arithmetic3   s"    







zTestExpressions.run_arithmeticc       	         s   dt _t jd ddddddg}xdD ]}x~|D ]v |rL fd
d} |_n
tt }t jd	 |||}t jd t j  |||}t j }|stdt	j
|| q0W q&W dS )z
        tests solely that the result is the same whether or not numexpr is
        enabled.  Need to test whether the function does the correct thing
        elsewhere.
        r   TgtltgeleeqneFc                s   t |  |S )N)r,   )r-   r.   )r/   r"   r#   r0   W   s    z,TestExpressions.run_binary.<locals>.<lambda>z Did not use numexpr as expected.N)TF)r   r   Zset_test_moder5   r,   r6   r7   Zget_test_resultr9   r=   r>   )	r    r?   r@   rA   rB   rC   rD   rE   Zused_numexprr"   )r/   r#   
run_binaryJ   s"    







zTestExpressions.run_binaryTc             C   s|   | j || |r8tjd |d }tjd | j|| x>tt|jD ],}| j |jd d |f |jd d |f  qHW d S )NFr   T)rF   r   r7   rM   rangelenr	   iloc)r    r?   r@   rM   Zbinary_compir"   r"   r#   	run_framee   s    

zTestExpressions.run_framer?   r      )r   c             C   s2   dd |j jD }t|dk}| j|||d d S )Nc             S   s   h | ]
}|j qS r"   )r2   )r3   r-   r"   r"   r#   	<setcomp>   s    z2TestExpressions.test_arithmetic.<locals>.<setcomp>r   )rM   )r;   r<   rO   rR   )r    r?   ZkindsZshouldr"   r"   r#   test_arithmetict   s    zTestExpressions.test_arithmeticc             C   s   t jtjd | j| jd}| s"tt jtjd| j| jd}| sDtt jtjd| j| jd}| sftt jtjd| j| jd}|std S )Nevaluate+)r   _can_use_numexprr6   r&   r   r9   r   r   )r    rE   r"   r"   r#   test_invalid   s    


zTestExpressions.test_invalidzopname,op_strr&   rW   r'   -r(   *r*   /pow**z
left,rightc                sN    fdd}t jd |  t jd t jd |  t j  |  d S )Nc                 s   dkrd S t t} tj|   d}| jks6ttj|   dd}tj|   dd}t|trrt	j
|| nt	j||j tj| d}| std S )Nr]   rV   T)use_numexprF)r,   r6   r   rX   _is_mixed_typer9   rV   
isinstancer   r=   assert_frame_equalassert_numpy_array_equalr<   )rC   rE   rD   )leftop_stropnamerightr"   r#   testit   s    

z/TestExpressions.test_binary_ops.<locals>.testitFTr   )r   r7   set_numexpr_threads)r    rf   re   rd   rg   rh   r"   )rd   re   rf   rg   r#   test_binary_ops   s    


zTestExpressions.test_binary_opsrG   >rH   <rI   >=rJ   <=rK   ==rL   !=c                sN    fdd}t jd |  t jd t jd |  t j  |  d S )Nc                 s    d } d }t t}tj| | d}| jks:ttj| | dd}tj| | dd}t|trvt	j
|| nt	j||j tj||d}| std S )Nr   rV   T)r_   F)r,   r6   r   rX   r`   r9   rV   ra   r   r=   rb   rc   r<   )Zf12Zf22rC   rE   rD   )rd   re   rf   rg   r"   r#   rh      s    

z3TestExpressions.test_comparison_ops.<locals>.testitFTr   )r   r7   ri   )r    rf   re   rd   rg   rh   r"   )rd   re   rf   rg   r#   test_comparison_ops   s    


z#TestExpressions.test_comparison_opscondFc                sJ    fdd}t jd |  t jd t jd |  t j  |  d S )Nc                 sX   t jjt jd} | j  tj| jjd }t j| jjd }tj	|| d S )N)r
   r   )
npemptyshapeZbool_fillr   wherer<   r=   rc   )crE   rD   )rr   r?   r"   r#   rh      s
    
z*TestExpressions.test_where.<locals>.testitFTr   )r   r7   ri   )r    rr   r?   rh   r"   )rr   r?   r#   
test_where   s    


zTestExpressions.test_wherezop_str,opname//r+   c          -   C   s.  t tjjddktjjddkd}dt| d}tt|}tj|}t	j
t|d ||| W d Q R X t	j
t|d ||j|j W d Q R X t	j
t|d ||jd W d Q R X t	j
t|d |d|j W d Q R X t	j
t|d |d| W d Q R X t	j
t|d ||d W d Q R X d S )	N
   g      ?)abz	operator z  not implemented for bool dtypes)matchTF)r   rs   randomrandreprr,   r6   reescapepytestZraisesNotImplementedErrorr|   r}   )r    re   rf   r?   msgr1   err_msgr"   r"   r#   !test_bool_ops_raise_on_arithmetic  s     &

z1TestExpressions.test_bool_ops_raise_on_arithmeticc          4   C   s  d}t tjj|dktjj|dkd}dddd}dd	d
d}tt|}tt|||  }|dkrjd S tjdddf tjdd& |||}	|||}
tj	|	|
 W d Q R X tjdd. ||j
|j}	||j
|j}
tj|	|
 W d Q R X tjdd* ||j
d}	||j
d}
tj|	|
 W d Q R X tjdd* |d|j
}	|d|j
}
tj|	|
 W d Q R X tjdd& |d|}	|d|}
tj	|	|
 W d Q R X tjdd& ||d}	||d}
tj	|	|
 W d Q R X W d Q R X d S )Nr{   g      ?)r|   r}   |&^)rW   r[   rZ   or_and_xor)r   r   r   rZ   T   )Zmin_elementsF)Zcheck_stacklevel)r   rs   r   r   r,   r6   r=   r_   Zassert_produces_warningrb   r|   r}   Zassert_series_equal)r    re   rf   nr?   subsZ	sub_funcsr1   Zferer"   r"   r#    test_bool_ops_warn_on_arithmetic  sB    &






z0TestExpressions.test_bool_ops_warn_on_arithmeticztest_input,expectedr   Zaar|   r}   rx   r
   )r	      r   Zbbc             C   s>   |j d d ddgf j|j d d ddgf }tj|| d S )Nr|   r
   )locrL   r=   rb   )r    Z
test_inputrD   rE   r"   r"   r#   test_bool_ops_column_name_dtypeN  s    .z/TestExpressions.test_bool_ops_column_name_dtyper/   r)   axisc             C   s   | j }|dkr$| j jdd d f }n| j jd d df }dt_t||}tjd |||d}tjd |||d}tj|| d S )Nr   r   F)r   T)r   rP   r   r   r,   r7   r=   rb   )r    r   r/   r?   r@   Zop_funcrD   rE   r"   r"   r#   test_frame_series_axish  s    


z&TestExpressions.test_frame_series_axisrC   __mod____rmod__zGH-36552)r   )Zmarks__floordiv____rfloordiv__boxscalarr   c             C   s   dt _tjdd}||}t||}||}t jd ||}t jd tj|| xlt|D ]`\}	}
|t	kr~|j
|	df }n||	 }ytt|
||}W n tk
r   Y q^X ||ks^tq^W d S )Nr   2   FTi)r   r   rs   Zaranger,   r7   r=   r>   	enumerater   rP   intZeroDivisionErrorr9   )r    rC   r   r   dataobjr!   rE   rD   rQ   elemZscalar_resultr"   r"   r#   ,test_python_semantics_with_numexpr_installed  s$    


z<TestExpressions.test_python_semantics_with_numexpr_installedN)T)r&   rW   )r'   rZ   )r(   r[   )r*   r\   )r]   r^   )rG   rk   )rH   rl   )rI   rm   )rJ   rn   )rK   ro   )rL   rp   )r\   r*   )rz   r+   )r^   r]   )rW   r&   )r[   r(   )rZ   r'   )r&   r'   r(   r)   r*   r+   )r   r   )$r5   
__module____qualname__r$   r%   rF   rM   rR   r   markZparametrize_integer	_integer2rs   r   randintru   r   r   r   r   rU   rY   rj   rq   ry   r   r   r   r   r   paramZxfailr   r   r   r"   r"   r"   r#   r   &   sp   
$ $ /$ 
r   )r   r   )r   r   ) r6   r   numpyrs   Znumpy.randomr   r   Zpandas._testingZ_testingr=   Zpandas.core.apir   r   r   Zpandas.core.computationr   r   listr   r   r   Zastyper   r   r   r   r   r   r   ZskipifZ_USE_NUMEXPRr   r"   r"   r"   r#   <module>   s0   


