U
    [ev2                     @   s  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 d dlmZ eejddeddd	Zeejd
deddd	Zeed  ed ded ded ddZeed  ed ded ded 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d j Zed j Z ed j Z!ed j Z"ej#j$ej% ddG dd dZ&dS )    N)option_context)	DataFrameIndexSeries)expressions'     ZABCDZfloat64)columnsdtyped   ABZfloat32CZint64DZint32)r   r   r   r      )r   r   size)e   r   znot using numexpr)reasonc                   @   s  e Zd Zdd Zdd ZeeedddZe	j
deeeejjd	d
eed eeeege	j
dddge	j
dddddddgdd Ze	j
deeeejjd	d
eed eeeege	j
dddgdd Zdd Ze	j
ddddd d!ge	j
d"eefeefgd#d$ Ze	j
dd%d&d'd(d)d*ge	j
d"eefeefgd+d, Ze	j
d-ddge	j
deeeegd.d/ Ze	j
d0d1d2d3gd4d5 Z e	j
d0d6d7d8gd9d: Z!e	j
d;e"d	d<d
d=gd	d<d
d=ggd>d?d@dAgdBe"ddgddg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"ddgddgddggd>dAgdBfgdFdG Z#e	j
ddHe	j
dIdJdKdL Z$e	j
dMdNdOdPdQge	j
dRe"e%e&ge	j
dSdTdUgdVdW Z'dXS )YTestExpressionsc                 C   s   t j| _d S N)expr_MIN_ELEMENTSself r   _/var/www/html/services/stratfitenv/lib/python3.8/site-packages/pandas/tests/test_expressions.pysetup_method2   s    zTestExpressions.setup_methodc                 C   s   | j t_ d S r   )r   r   r   r   r   r   teardown_method5   s    zTestExpressions.teardown_method)flexopnamec              	      s\   |r fdd} |_ n
tt }tdd || |}W 5 Q R X t  || |}||fS )Nc                    s   t |  |S r   )getattr)xyr    r   r   <lambda>;       z)TestExpressions.call_op.<locals>.<lambda>compute.use_numexprF)__name__r!   operatorr   r   get_test_result)dfotherr   r    opexpectedresultr   r$   r   call_op8   s    

zTestExpressions.call_opr+   r      r   r   TFarithaddsubmulmodtruedivfloordivc                 C   s   dt _| ||||\}}|dkr<tdd |jjD s<tt|| t	t
|jD ]X}| |jd d |f |jd d |f ||\}}|dkr|jjdkstt|| qVd S )Nr   r7   c                 s   s   | ]}|j d kV  qdS )fN)kind).0r"   r   r   r   	<genexpr>^   s     z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>r9   )r   r   r0   allZdtypesvaluesAssertionErrortmassert_equalrangelenr	   ilocr
   r:   )r   r+   r   r2   r/   r.   ir   r   r   test_run_arithmeticH   s    0z#TestExpressions.test_run_arithmeticc           	   	   C   sp   |j }tdd | d }W 5 Q R X dt_td | ||||\}}t }|s`tdt	
|| 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'   Fr   r   Tz Did not use numexpr as expected.N)r(   r   copyr   r   Zset_test_moder0   r*   r?   r@   rA   )	r   r+   r   Zcomparison_opr2   r,   r/   r.   Zused_numexprr   r   r   test_run_binaryg   s    
zTestExpressions.test_run_binaryc                 C   sp   t jd}t jd}ttjd ||d}|r4tttjd||d}|rPtttjd||d}|sltd S )NiAB r   evaluate+)nprandomrandnr   _can_use_numexprr)   r3   r?   )r   arrayZarray2r/   r   r   r   test_invalid   s    zTestExpressions.test_invalidzopname,op_str)r3   rJ   )r4   -)r5   *)r7   /)pow**z
left,rightc              	      sP    fdd}t dd |  W 5 Q R X td |  t  |  d S )Nc               	      s   dkrd S t t} t < d}td|t tj|   dd}tj|   dd}W 5 Q R X t	|| t
| d}|rtd S )NrT   z(invalid value encountered in true_divideignoreTuse_numexprFrI   )r!   r)   warningscatch_warningsfilterwarningsRuntimeWarningr   rI   r@   assert_numpy_array_equalrN   r?   )r-   msgr/   r.   leftop_strr    rightr   r   testit   s    

z/TestExpressions.test_binary_ops.<locals>.testitr'   Fr   r   r   Zset_numexpr_threadsr   r    ra   r`   rb   rc   r   r_   r   test_binary_ops   s    
zTestExpressions.test_binary_ops)gt>)lt<)gez>=)lez<=)eqz==)nez!=c              	      sP    fdd}t dd |  W 5 Q R X td |  t  |  d S )Nc                     sh    d } d }t t}tj| | dd}tj| | dd}t|| t||d}|rdtd S )Nr   TrW   FrI   )r!   r)   r   rI   r@   r]   rN   r?   )Zf12Zf22r-   r/   r.   r_   r   r   rc      s    
z3TestExpressions.test_comparison_ops.<locals>.testitr'   Fr   rd   re   r   r_   r   test_comparison_ops   s    
z#TestExpressions.test_comparison_opscondc              	      sL    fdd}t dd |  W 5 Q R X td |  t  |  d S )Nc                     sX   t jjt jd} |   t| jjd }t | jjd }t	|| d S )N)r
   r   )
rK   emptyshapeZbool_fillr   wherer>   r@   r]   )cr/   r.   rp   r+   r   r   rc      s
    
z*TestExpressions.test_where.<locals>.testitr'   Fr   rd   )r   rp   r+   rc   r   rv   r   
test_where   s    
zTestExpressions.test_wherezop_str,opname)rS   r7   )z//r8   )rU   rT   c              	   C   s*  t tjddktjddkd}d| d}tt|}t|}tj	t
|d ||| W 5 Q R X tj	t
|d ||j|j W 5 Q R X tj	t
|d ||jd W 5 Q R X tj	t
|d |d|j W 5 Q R X tj	t
|d |d| W 5 Q R X tj	t
|d ||d W 5 Q R X d S )	N
         ?abz
operator 'z!' not implemented for bool dtypes)matchTF)r   rK   rL   randr!   r)   reescapepytestZraisesNotImplementedErrorr{   r|   )r   ra   r    r+   r^   r9   err_msgr   r   r   !test_bool_ops_raise_on_arithmetic   s     &

z1TestExpressions.test_bool_ops_raise_on_arithmetic)rJ   r3   )rR   r5   )rQ   r4   c              
   C   s  d}t tj|dkt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N t & |||}	|||}
t	|	|
 W 5 Q R X t . ||j
|j}	||j
|j}
t|	|
 W 5 Q R X t * ||j
d}	||j
d}
t|	|
 W 5 Q R X t * |d|j
}	|d|j
}
t|	|
 W 5 Q R X t & |d|}	|d|}
t	|	|
 W 5 Q R X t & ||d}	||d}
t	|	|
 W 5 Q R X W 5 Q R X d S )Nrx   ry   rz   |&^)rJ   rR   rQ   or_and_xor)r   r   r   rQ   T   )Zmin_elementsF)r   rK   rL   r~   r!   r)   r@   rX   Zassert_produces_warningassert_frame_equalr{   r|   Zassert_series_equal)r   ra   r    nr+   subsZ	sub_funcsr9   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|   ru   r
   )r	      r   Zbbc                 C   s>   |j d d ddgf |j d d ddgf }t|| d S )Nr{   r
   )locrn   r@   r   )r   Z
test_inputr.   r/   r   r   r   test_bool_ops_column_name_dtypeC  s    .z/TestExpressions.test_bool_ops_column_name_dtype)r3   r4   r5   r6   r7   r8   axis)r   r   c              	   C   s   t }|dkr |jdd d f }n|jd d df }dt_t||}tdd |||d}W 5 Q R X |||d}t|| d S )Nr   r   r'   F)r   )_framerD   r   r   r!   r   r@   r   )r   r   r2   r+   r,   Zop_funcr.   r/   r   r   r   test_frame_series_axis]  s    
z&TestExpressions.test_frame_series_axisr-   __mod____rmod____floordiv____rfloordiv__boxscalarr   c              	   C   s   dt _tdd}||}t||}||}tdd ||}W 5 Q R X t|| t|D ]`\}	}
|t	kr~|j
|	df }n||	 }ztt|
||}W n tk
r   Y q^X ||ks^tq^d S )Nr   i2   r'   F)r   r   rK   Zaranger!   r   r@   rA   	enumerater   rD   intZeroDivisionErrorr?   )r   r-   r   r   dataobjmethodr/   r.   rE   elemZscalar_resultr   r   r   ,test_python_semantics_with_numexpr_installedt  s"    
z<TestExpressions.test_python_semantics_with_numexpr_installedN)(r(   
__module____qualname__r   r   staticmethodboolstrr0   r   markZparametrize_integer	_integer2rK   rL   randintrr   r   _frame2_mixed_mixed2rF   rH   rP   _array_array2_array_mixed_array_mixed2rf   ro   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   0   s       
 
- 
 

 	r   )'r)   r   rY   numpyrK   r   Zpandasr   Zpandas._testingZ_testingr@   Zpandas.core.apir   r   r   Zpandas.core.computationr   r   rL   rM   listr   r   rG   Zastyper   r   r   r   r   r>   r   r   r   r   r   ZskipifZUSE_NUMEXPRr   r   r   r   r   <module>   sP   

    