a
    nÝEbl3  ã                   @   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)Ú
set_option)Ú	DataFrameÚIndexÚSeries)Úexpressionsé'  é   Ú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g 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¡dd„ ƒƒZdd„ Ze	j
 dg d¢¡e	j
 deefeefg¡dd„ ƒƒZe	j
 dg d¢¡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
 d"g d#¢¡d$d%„ ƒZ e	j
 d"g d&¢¡d'd(„ ƒZ!e	j
 d)e"g d*¢g d*¢gg d+¢d,�e"ddgddggd-d.gd,�fe"g d/¢g d0¢g d1¢gg d+¢d,�e"ddgddgddggd-d.gd,�fg¡d2d3„ ƒZ#e	j
 dd¡e	j
 d4d5¡d6d7„ ƒƒZ$e	j
 d8g d9¢¡e	j
 d:e"e%e&g¡e	j
 d;d<d=g¡d>d?„ ƒƒƒZ'd@S )AÚTestExpressionsc                 C   s   t j| _d S ©N)ÚexprÚ_MIN_ELEMENTS©ÚselfÚmethod© r   ú]/home/ja/django-apps/lartica_env/lib/python3.9/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                    sZ   |r‡ fdd„}ˆ |_ n
ttˆ ƒ}tddƒ || |ƒ}tddƒ t ¡  || |ƒ}||fS )Nc                    s   t | ˆ ƒ|ƒS r   )Úgetattr)ÚxÚy©r"   r   r   Ú<lambda>;   ó    z)TestExpressions.call_op.<locals>.<lambda>úcompute.use_numexprFT)Ú__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<J ‚t ||¡ tt	|j
ƒƒD ]X}|  |jd d …|f |jd d …|f ||¡\}}|dkr¢|jjdks¢J ‚t ||¡ qVd S )Nr   r9   c                 s   s   | ]}|j d kV  qdS )ÚfN)Úkind)Ú.0r$   r   r   r   Ú	<genexpr>_   r(   z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>r;   )r   r   r2   ÚallZdtypesÚvaluesÚtmÚassert_equalÚrangeÚlenr
   Úilocr   r<   )r   r-   r!   r4   r1   r0   Úir   r   r   Útest_run_arithmeticI   s    0z#TestExpressions.test_run_arithmeticc           	      C   sn   |j }tddƒ | ¡ d }tddƒ dt_t d¡ |  ||||¡\}}t ¡ }|s^J 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   Tr   z Did not use numexpr as expected.N)
r*   r   Úcopyr   r   Zset_test_moder2   r,   rA   rB   )	r   r-   r!   Zcomparison_opr4   r.   r1   r0   Zused_numexprr   r   r   Útest_run_binaryh   s    


zTestExpressions.test_run_binaryc                 C   sp   t j d¡}t j d¡}t tjd ||d¡}|r4J ‚t tjd||d¡}|rPJ ‚t tjd||d¡}|slJ ‚d S )NiAB r   Úevaluateú+)ÚnpÚrandomÚrandnr   Ú_can_use_numexprr+   r5   )r   ÚarrayZarray2r1   r   r   r   Útest_invalid�   s    zTestExpressions.test_invalidzopname,op_str))r5   rK   )r6   ú-)r7   Ú*)r9   ú/)Úpowú**z
left,rightc                    sN   ‡ ‡‡‡fdd„}t ddƒ |ƒ  t ddƒ t d¡ |ƒ  t ¡  |ƒ  d S )Nc                     sž   ˆdkrd S t tˆƒ} t ¡ �F d}t d|t¡ tj| ˆ ˆ dd�}tj| ˆ ˆ dd�}W d   ƒ n1 sj0    Y  t 	||¡ t 
| ˆˆˆd¡}|ršJ ‚d S )NrU   z(invalid value encountered in true_divideÚignoreT©Úuse_numexprFrJ   )r#   r+   ÚwarningsÚcatch_warningsÚfilterwarningsÚRuntimeWarningr   rJ   rA   Úassert_numpy_array_equalrO   )r/   Úmsgr1   r0   ©ÚleftÚop_strr"   Úrightr   r   Útestit¨   s    

0z/TestExpressions.test_binary_ops.<locals>.testitr)   FTr   ©r   r   Zset_numexpr_threads©r   r"   rb   ra   rc   rd   r   r`   r   Útest_binary_ops    s    


zTestExpressions.test_binary_ops))Úgtú>)Últú<)Úgez>=)Úlez<=)Úeqz==)Únez!=c                    sN   ‡ ‡‡‡fdd„}t ddƒ |ƒ  t ddƒ t d¡ |ƒ  t ¡  |ƒ  d S )Nc                     sh   ˆ d } ˆd }t tˆƒ}tj|ˆ | dd�}tj|ˆ | dd�}t ||¡ t |ˆˆ|d¡}|rdJ ‚d S )Nr   TrX   FrJ   )r#   r+   r   rJ   rA   r^   rO   )Zf12Zf22r/   r1   r0   r`   r   r   rd   Ò   s    
z3TestExpressions.test_comparison_ops.<locals>.testitr)   FTr   re   rf   r   r`   r   Útest_comparison_opsÃ   s    


z#TestExpressions.test_comparison_opsÚcondc                    sJ   ‡ ‡fdd„}t ddƒ |ƒ  t ddƒ 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   )
rL   ÚemptyÚshapeZbool_Úfillr   Úwherer@   rA   r^   )Úcr1   r0   ©rq   r-   r   r   rd   ê   s
    
z*TestExpressions.test_where.<locals>.testitr)   FTr   re   )r   rq   r-   rd   r   rw   r   Ú
test_whereç   s    


zTestExpressions.test_wherezop_str,opname))rT   r9   )z//r:   )rV   rU   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 d   ƒ n1 st0    Y  tj	t
|d�� ||j|jƒ W d   ƒ n1 s°0    Y  tj	t
|d�� ||jdƒ W d   ƒ n1 sê0    Y  tj	t
|d�� |d|jƒ W d   ƒ n1 �s&0    Y  tj	t
|d�� |d|ƒ W d   ƒ n1 �s`0    Y  tj	t
|d�� ||dƒ W d   ƒ n1 �sš0    Y  d S )	Né
   ç      à?©ÚaÚbz
operator 'z!' not implemented for bool dtypes)ÚmatchTF)r   rL   rM   Úrandr#   r+   ÚreÚescapeÚpytestZraisesÚNotImplementedErrorr|   r}   )r   rb   r"   r-   r_   r;   Úerr_msgr   r   r   Ú!test_bool_ops_raise_on_arithmeticù   s     &

(,*,*z1TestExpressions.test_bool_ops_raise_on_arithmetic))rK   r5   )rS   r7   )rR   r6   c              	   C   sj  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���Ú t ¡ �0 |||ƒ}	|||ƒ}
t 	|	|
¡ W d   ƒ n1 sº0    Y  t ¡ �8 ||j
|jƒ}	||j
|jƒ}
t |	|
¡ W d   ƒ n1 �s0    Y  t ¡ �4 ||j
dƒ}	||j
dƒ}
t |	|
¡ W d   ƒ n1 �sZ0    Y  t ¡ �4 |d|j
ƒ}	|d|j
ƒ}
t |	|
¡ W d   ƒ n1 �s¨0    Y  t ¡ �0 |d|ƒ}	|d|ƒ}
t 	|	|
¡ W d   ƒ n1 �sò0    Y  t ¡ �0 ||dƒ}	||dƒ}
t 	|	|
¡ W d   ƒ n1 �s<0    Y  W d   ƒ n1 �s\0    Y  d S )Nry   rz   r{   ú|ú&ú^)rK   rS   rR   Úor_Úand_Úxor)r†   r‡   rˆ   rR   Té   )Zmin_elementsF)r   rL   rM   r   r#   r+   rA   rY   Zassert_produces_warningÚassert_frame_equalr|   r}   Zassert_series_equal)r   rb   r"   Únr-   ÚsubsZ	sub_funcsr;   ZfeÚrÚer   r   r   Ú test_bool_ops_warn_on_arithmetic  sB    &



*
,
,
,


,


z0TestExpressions.test_bool_ops_warn_on_arithmeticztest_input,expected)r   r   r3   Úaa)r|   r}   rv   r   )r
   r|   r   )r   é   r3   r“   )r   r   r3   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   )Úlocro   rA   r�   )r   Z
test_inputr0   r1   r   r   r   Útest_bool_ops_column_name_dtypeE  s    .z/TestExpressions.test_bool_ops_column_name_dtypeÚ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�}tddƒ |||d�}t ||¡ d S )Nr   r   r)   F)r—   T)Ú_framerE   r   r   r#   r   rA   r�   )r   r—   r4   r-   r.   Zop_funcr0   r1   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ƒ ||ƒ}tddƒ t ||¡ t|ƒD ]^\}	}
|t	kr||j
|	df }n||	 }ztt|
ƒ|ƒ|ƒ}W n ty¬   Y q\0 ||ks\J ‚q\d S )Nr   iÎÿÿÿé2   r)   FT)r   r   rL   Zaranger#   r   rA   rB   Ú	enumerater   rE   ÚintÚZeroDivisionError)r   r/   rž   rŸ   ÚdataÚobjr   r1   r0   rF   ÚelemZscalar_resultr   r   r   Ú,test_python_semantics_with_numexpr_installedw  s$    


z<TestExpressions.test_python_semantics_with_numexpr_installedN)(r*   Ú
__module__Ú__qualname__r   r    ÚstaticmethodÚboolÚstrr2   r‚   ÚmarkZparametrizeÚ_integerÚ	_integer2rL   rM   Úrandintrs   r˜   Ú_frame2Ú_mixedÚ_mixed2rG   rI   rQ   Ú_arrayÚ_array2Ú_array_mixedÚ_array_mixed2rg   rp   rx   r…   r’   r   r–   r™   r   r   r¨   r   r   r   r   r   0   s¸   øþÿøþþÿþÿÿ
ÿ
-ÿüþþûùþ
ÿþ	r   )'r+   r€   rZ   ÚnumpyrL   r‚   Zpandasr   Zpandas._testingZ_testingrA   Zpandas.core.apir   r   r   Zpandas.core.computationr   r   rM   rN   Úlistr˜   r²   rH   Zastyper³   r´   r±   r¯   r°   r@   rµ   r¶   r·   r¸   r®   ZskipifZUSE_NUMEXPRr   r   r   r   r   Ú<module>   sH   
üÿ
üÿÿÿ