U
    ÎZjv2  ã                   @   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Údtypeéd   Ú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/TRUCKING_PROJECT/venv/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s¢t‚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¡}|r†t‚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Ú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   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   
üÿ
üÿ  ÿ  ÿ