U
    ¾mœd¡5  ã                   @   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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ejdd„ ƒZejdd„ ƒZejjej  dd�G dd„ dƒƒZ!dS )é    N)Úoption_context)Ú	DataFrameÚIndexÚSeries)Úexpressionsc                   C   s   t tj dd¡tdƒdd�S )Né'  é   ÚABCDÚfloat64©ÚcolumnsÚdtype©r   ÚnpÚrandomÚrandnÚlist© r   r   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/test_expressions.pyÚ_frame   s    r   c                   C   s   t tj dd¡tdƒdd�S )Néd   r   r	   r
   r   r   r   r   r   r   Ú_frame2   s    r   c                 C   s8   t | d  ¡ | d  d¡| d  d¡| d  d¡dœƒS ©	NÚAÚBZfloat32ÚCÚint64ÚDZint32)r   r   r   r   ©r   ÚcopyZastype©r   r   r   r   Ú_mixed   s    
üÿr!   c                 C   s8   t | d  ¡ | d  d¡| d  d¡| d  d¡dœƒS r   r   ©r   r   r   r   Ú_mixed2(   s    
üÿr#   c                   C   s    t tjjdddd�tdƒdd�S )Né   r   )r   r   ©Úsizer	   r   r   ©r   r   r   Úrandintr   r   r   r   r   Ú_integer4   s
      ÿr)   c                 C   s   | t jjddt  | ¡d� S )Nr   é   r%   )r   r   r(   Úshape)r)   r   r   r   Ú_integer_randint;   s    r,   c                   C   s    t tjjdddd�tdƒdd�S )Nr$   r   )ée   r   r%   r	   r   r   r'   r   r   r   r   Ú	_integer2A   s
      ÿr.   c                 C   s   | d j  ¡ S ©Nr   ©Úvaluesr   r    r   r   r   Ú_arrayH   s    r2   c                 C   s   | d j  ¡ S r/   r0   r"   r   r   r   Ú_array2M   s    r3   c                 C   s   | d j  ¡ S ©Nr   r0   )r!   r   r   r   Ú_array_mixedR   s    r5   c                 C   s   | d j  ¡ S r4   r0   )r#   r   r   r   Ú_array_mixed2W   s    r6   znot using numexpr)Úreasonc                   @   s”  e Zd Zejdd�dd„ ƒZeeedœdd„ƒZ	ej
 dd	d
dddddg¡ej
 dddg¡ej
 dddddddg¡dd„ ƒƒƒZej
 dd	d
dddddg¡ej
 dddg¡dd„ ƒƒZdd„ Zej
 d¡ej
 d d!d"d#d$d%g¡ej
 d&d'd(g¡d)d*„ ƒƒƒZej
 d&d'd(g¡d+d,„ ƒZej
 d-ddg¡ej
 ddddd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@dAdBdCgdD�eddgddggd@dCgdD�fed<dEd>d?gd<dFd>d?gd<d=d=dGggd@dAdBdCgdD�eddgddgddggd@dCgdD�fg¡dHdI„ ƒZej
 ddJ¡ej
 dKdL¡dMdN„ ƒƒZej
 dOdPdQdRdSg¡ej
 dTeeeg¡ej
 dUdVdWg¡dXdY„ ƒƒƒZdZS )[ÚTestExpressionsT)Zautousec                 c   s   t j}d V  |t _d S ©N)ÚexprÚ_MIN_ELEMENTS)ÚselfÚmin_elementsr   r   r   Úsave_min_elements^   s    z!TestExpressions.save_min_elements)Ú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 r9   )Úgetattr)ÚxÚy©r@   r   r   Ú<lambda>g   ó    z)TestExpressions.call_op.<locals>.<lambda>úcompute.use_numexprF)Ú__name__rA   Úoperatorr   r:   Úget_test_result)ÚdfÚotherr?   r@   ÚopÚexpectedÚresultr   rD   r   Úcall_opd   s    

zTestExpressions.call_opÚfixturer)   r.   r,   r   r   r!   r#   r?   FÚarithÚaddÚsubÚmulÚmodÚtruedivÚfloordivc           	      C   s¾   |  |¡}dt_|  ||||¡\}}|dkrFtdd„ |jjD ƒƒsFt‚t 	||¡ t
t|jƒƒD ]X}|  |jd d …|f |jd d …|f ||¡\}}|dkr¬|jjdks¬t‚t 	||¡ q`d S )Nr   rW   c                 s   s   | ]}|j d kV  qdS )ÚfN)Úkind)Ú.0rB   r   r   r   Ú	<genexpr>Š   s     z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>rY   )Úgetfixturevaluer:   r;   rP   ÚallZdtypesr1   ÚAssertionErrorÚtmÚassert_equalÚrangeÚlenr   Úilocr   rZ   )	r<   ÚrequestrQ   r?   rR   rK   rO   rN   Úir   r   r   Útest_run_arithmetict   s    
0z#TestExpressions.test_run_arithmeticc              	   C   sz   |  |¡}|j}tddƒ� | ¡ d }W 5 Q R X dt_t d¡ |  ||||¡\}}	t ¡ }
|
sjt	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.
        rG   Fr$   r   Tz Did not use numexpr as expected.N)r]   rH   r   r   r:   r;   Zset_test_moderP   rJ   r_   r`   ra   )r<   re   rQ   r?   Úcomparison_oprK   rR   rL   rO   rN   Zused_numexprr   r   r   Útest_run_binary“   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ú+)r   r   r   r:   Ú_can_use_numexprrI   rS   r_   )r<   ÚarrayZarray2rO   r   r   r   Útest_invalidº   s    zTestExpressions.test_invalidz>ignore:invalid value encountered in true_divide:RuntimeWarningzopname,op_str)rS   rk   )rT   ú-)rU   Ú*)rW   ú/)Úpowú**zleft_fix,right_fix)r2   r3   )r5   r6   c              	      sd   |  |¡‰ |  |¡‰‡ ‡‡‡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¡}|r†t‚d S )Nrr   z/invalid value encountered in divide|true_divideÚignoreT©Úuse_numexprFrj   )rA   rI   ÚwarningsÚcatch_warningsÚfilterwarningsÚRuntimeWarningr:   rj   r`   Úassert_numpy_array_equalrl   r_   )rM   ÚmsgrO   rN   ©ÚleftÚop_strr@   Úrightr   r   ÚtestitØ   s    

z/TestExpressions.test_binary_ops.<locals>.testitrG   Fr$   ©r]   r   r:   Zset_numexpr_threads)r<   re   r@   r   Úleft_fixÚ	right_fixr�   r   r}   r   Útest_binary_opsÊ   s    


zTestExpressions.test_binary_opsc              	      sb   |  |¡‰|  |¡‰‡ ‡‡fdd„}tddƒ� |ƒ  W 5 Q R X t d¡ |ƒ  t ¡  |ƒ  d S )Nc                     sb   ˆd } ˆd }ˆ }t j|ˆ| dd�}t j|ˆ| dd�}t ||¡ t  ||ˆ|d¡}|r^t‚d S )Nr$   Tru   Frj   )r:   rj   r`   r{   rl   r_   )Zf12Zf22rM   rO   rN   ©rh   r~   r€   r   r   r�   ù   s    z3TestExpressions.test_comparison_ops.<locals>.testitrG   Fr$   r‚   )r<   re   rh   rƒ   r„   r�   r   r†   r   Útest_comparison_opsò   s    


z#TestExpressions.test_comparison_opsÚcondc              	      sV   |  |¡‰‡ ‡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$   )
r   Úemptyr+   Zbool_Úfillr:   Úwherer1   r`   r{   )ÚcrO   rN   ©rˆ   rK   r   r   r�     s
    
z*TestExpressions.test_where.<locals>.testitrG   Fr$   r‚   )r<   re   rˆ   rQ   r�   r   r�   r   Ú
test_where  s    

zTestExpressions.test_wherezop_str,opname)rq   rW   )z//rX   )rs   rr   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   r   r   ÚrandrA   rI   ÚreÚescapeÚpytestZraisesÚNotImplementedErrorr’   r“   )r<   r   r@   rK   r|   rY   Úerr_msgr   r   r   Ú!test_bool_ops_raise_on_arithmetic"  s     &

z1TestExpressions.test_bool_ops_raise_on_arithmetic)rk   rS   )rp   rU   )ro   rT   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 )Nr�   r�   r‘   ú|ú&ú^)rk   rp   ro   Úor_Úand_Úxor)rœ   r�   rž   ro   Té   )r=   F)r   r   r   r•   rA   rI   r`   rv   Zassert_produces_warningÚassert_frame_equalr’   r“   Zassert_series_equal)r<   r   r@   ÚnrK   ÚsubsZ	sub_funcsrY   ZfeÚrÚer   r   r   Ú test_bool_ops_warn_on_arithmetic>  sB    &












z0TestExpressions.test_bool_ops_warn_on_arithmeticztest_input,expectedr   r$   r*   Zaar’   r“   rŒ   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   )ÚlocÚner`   r£   )r<   Z
test_inputrN   rO   r   r   r   Útest_bool_ops_column_name_dtypen  s    .z/TestExpressions.test_bool_ops_column_name_dtype)rS   rT   rU   rV   rW   rX   Úaxis)r   r$   c           	   	   C   s€   |}|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   rG   F)r­   )rd   r:   r;   rA   r   r`   r£   )	r<   r­   rR   r   rK   rL   Zop_funcrN   rO   r   r   r   Útest_frame_series_axisˆ  s    
z&TestExpressions.test_frame_series_axisrM   Ú__mod__Ú__rmod__Ú__floordiv__Ú__rfloordiv__ÚboxÚscalaréûÿÿÿr¢   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   iÎÿÿÿé2   rG   F)r:   r;   r   ZarangerA   r   r`   ra   Ú	enumerater   rd   ÚintÚZeroDivisionErrorr_   )r<   rM   r³   r´   ÚdataÚobjÚmethodrO   rN   rf   ÚelemZscalar_resultr   r   r   Ú,test_python_semantics_with_numexpr_installedŸ  s"    
z<TestExpressions.test_python_semantics_with_numexpr_installedN)rH   Ú
__module__Ú__qualname__r˜   rQ   r>   ÚstaticmethodÚboolÚstrrP   ÚmarkZparametrizerg   ri   rn   ry   r…   r‡   rŽ   r›   r¨   r   r¬   r®   r   r   r¾   r   r   r   r   r8   \   sÌ   

ùþ ÿùþÿþ ÿ ÿ
 ÿ
 ÿ
- 
ÿü 
þþûùþ
 ÿüþ	r8   )"rI   r–   rw   Únumpyr   r˜   Zpandasr   Zpandas._testingZ_testingr`   Zpandas.core.apir   r   r   Zpandas.core.computationr   r:   rQ   r   r   r!   r#   r)   r,   r.   r2   r3   r5   r6   rÄ   ZskipifZUSE_NUMEXPRr8   r   r   r   r   Ú<module>   s@   










